Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--3rdparty/MDB2/Driver/Manager/pgsql.php45
-rw-r--r--3rdparty/MDB2/Driver/Manager/sqlite.php6
-rw-r--r--3rdparty/MDB2/Driver/Reverse/pgsql.php10
-rw-r--r--3rdparty/MDB2/Driver/pgsql.php2
-rw-r--r--apps/calendar/ajax/importdialog.php13
-rw-r--r--apps/calendar/appinfo/info.xml2
-rw-r--r--apps/calendar/export.php5
-rw-r--r--apps/calendar/img/Icon License2
-rw-r--r--apps/calendar/img/icon.pngbin398 -> 423 bytes
-rwxr-xr-xapps/calendar/img/icon.svg14
-rw-r--r--apps/calendar/import.php130
-rw-r--r--apps/calendar/import_tmp/Info2
-rw-r--r--apps/calendar/js/calendar.js13
-rw-r--r--apps/calendar/js/loader.js91
-rw-r--r--apps/calendar/l10n/ar.php80
-rw-r--r--apps/calendar/l10n/bg_BG.php51
-rw-r--r--apps/calendar/l10n/ca.php120
-rw-r--r--apps/calendar/l10n/cs_CZ.php149
-rw-r--r--apps/calendar/l10n/da.php112
-rw-r--r--apps/calendar/l10n/de.php92
-rw-r--r--apps/calendar/l10n/el.php111
-rw-r--r--apps/calendar/l10n/eo.php130
-rw-r--r--apps/calendar/l10n/es.php106
-rw-r--r--apps/calendar/l10n/et_EE.php93
-rw-r--r--apps/calendar/l10n/eu.php80
-rw-r--r--apps/calendar/l10n/fr.php123
-rw-r--r--apps/calendar/l10n/he.php67
-rw-r--r--apps/calendar/l10n/hr.php80
-rw-r--r--apps/calendar/l10n/hu_HU.php78
-rw-r--r--apps/calendar/l10n/hy.php11
-rw-r--r--apps/calendar/l10n/ia.php27
-rw-r--r--apps/calendar/l10n/id.php51
-rw-r--r--apps/calendar/l10n/it.php84
-rw-r--r--apps/calendar/l10n/ja_JP.php80
-rw-r--r--apps/calendar/l10n/lb.php93
-rw-r--r--apps/calendar/l10n/lt_LT.php71
-rw-r--r--apps/calendar/l10n/ms_MY.php51
-rw-r--r--apps/calendar/l10n/nb_NO.php51
-rw-r--r--apps/calendar/l10n/nl.php131
-rw-r--r--apps/calendar/l10n/nn_NO.php65
-rw-r--r--apps/calendar/l10n/pl.php99
-rw-r--r--apps/calendar/l10n/pt_BR.php93
-rw-r--r--apps/calendar/l10n/pt_PT.php8
-rw-r--r--apps/calendar/l10n/ro.php118
-rw-r--r--apps/calendar/l10n/ru.php74
-rw-r--r--apps/calendar/l10n/sk_SK.php80
-rw-r--r--apps/calendar/l10n/sl.php80
-rw-r--r--apps/calendar/l10n/sr.php76
-rw-r--r--apps/calendar/l10n/sr@latin.php76
-rw-r--r--apps/calendar/l10n/sv.php80
-rw-r--r--apps/calendar/l10n/tr.php80
-rw-r--r--apps/calendar/l10n/zh_CN.php93
-rw-r--r--apps/calendar/lib/calendar.php8
-rwxr-xr-xapps/calendar/templates/calendar.php14
-rw-r--r--apps/calendar/templates/part.import.php86
-rw-r--r--apps/contacts/ajax/activation.php9
-rw-r--r--apps/contacts/ajax/addcard.php27
-rw-r--r--apps/contacts/ajax/addproperty.php50
-rw-r--r--apps/contacts/ajax/contacts.php15
-rw-r--r--apps/contacts/ajax/createaddressbook.php14
-rw-r--r--apps/contacts/ajax/deleteproperty.php8
-rw-r--r--apps/contacts/ajax/messagebox.php16
-rw-r--r--apps/contacts/ajax/setproperty.php7
-rw-r--r--apps/contacts/ajax/updateaddressbook.php17
-rw-r--r--apps/contacts/appinfo/app.php4
-rw-r--r--apps/contacts/css/formtastic.css270
-rw-r--r--apps/contacts/css/styles.css42
-rw-r--r--apps/contacts/export.php11
-rw-r--r--apps/contacts/index.php36
-rw-r--r--apps/contacts/js/interface.js156
-rw-r--r--apps/contacts/l10n/ar.php34
-rw-r--r--apps/contacts/l10n/ca.php48
-rw-r--r--apps/contacts/l10n/cs_CZ.php48
-rw-r--r--apps/contacts/l10n/da.php48
-rw-r--r--apps/contacts/l10n/de.php41
-rw-r--r--apps/contacts/l10n/el.php48
-rw-r--r--apps/contacts/l10n/eo.php34
-rw-r--r--apps/contacts/l10n/es.php46
-rw-r--r--apps/contacts/l10n/et_EE.php34
-rw-r--r--apps/contacts/l10n/eu.php34
-rw-r--r--apps/contacts/l10n/fr.php48
-rw-r--r--apps/contacts/l10n/he.php34
-rw-r--r--apps/contacts/l10n/hr.php34
-rw-r--r--apps/contacts/l10n/hu_HU.php34
-rw-r--r--apps/contacts/l10n/ia.php30
-rw-r--r--apps/contacts/l10n/it.php46
-rw-r--r--apps/contacts/l10n/ja_JP.php34
-rw-r--r--apps/contacts/l10n/lb.php34
-rw-r--r--apps/contacts/l10n/lt_LT.php31
-rw-r--r--apps/contacts/l10n/nl.php48
-rw-r--r--apps/contacts/l10n/nn_NO.php34
-rw-r--r--apps/contacts/l10n/pl.php66
-rw-r--r--apps/contacts/l10n/pt_BR.php34
-rw-r--r--apps/contacts/l10n/pt_PT.php34
-rw-r--r--apps/contacts/l10n/ro.php48
-rw-r--r--apps/contacts/l10n/ru.php34
-rw-r--r--apps/contacts/l10n/sk_SK.php34
-rw-r--r--apps/contacts/l10n/sl.php34
-rw-r--r--apps/contacts/l10n/sr.php34
-rw-r--r--apps/contacts/l10n/sr@latin.php34
-rw-r--r--apps/contacts/l10n/sv.php34
-rw-r--r--apps/contacts/l10n/tr.php34
-rw-r--r--apps/contacts/l10n/xgettextfiles21
-rw-r--r--apps/contacts/l10n/zh_CN.php34
-rw-r--r--apps/contacts/lib/addressbook.php11
-rw-r--r--apps/contacts/lib/app.php10
-rw-r--r--apps/contacts/lib/search.php29
-rw-r--r--apps/contacts/lib/vcard.php37
-rw-r--r--apps/contacts/templates/index.php12
-rw-r--r--apps/contacts/templates/part.addcardform.php127
-rw-r--r--apps/contacts/templates/part.chooseaddressbook.rowfields.php2
-rw-r--r--apps/contacts/templates/part.details.php7
-rw-r--r--apps/contacts/templates/part.editaddressbook.php2
-rw-r--r--apps/contacts/templates/part.messagebox.php7
-rw-r--r--apps/contacts/templates/part.property.php5
-rw-r--r--apps/contacts/templates/part.setpropertyform.php2
-rw-r--r--apps/contacts/templates/settings.php4
-rw-r--r--apps/contacts/thumbnail.php103
-rwxr-xr-xapps/files_pdfviewer/appinfo/app.php2
-rwxr-xr-xapps/files_pdfviewer/css/style.css27
-rwxr-xr-xapps/files_pdfviewer/css/viewer.css9
-rwxr-xr-xapps/files_pdfviewer/js/pdfview.js25
-rwxr-xr-xapps/files_pdfviewer/js/viewer.js23
-rw-r--r--apps/files_texteditor/ajax/loadfile.php28
-rw-r--r--apps/files_texteditor/ajax/mtime.php49
-rw-r--r--apps/files_texteditor/ajax/savefile.php75
-rw-r--r--apps/files_texteditor/css/style.css10
-rwxr-xr-xapps/files_texteditor/js/aceeditor/LICENSE476
-rwxr-xr-xapps/files_texteditor/js/aceeditor/ace-compat-uncompressed.js490
-rwxr-xr-xapps/files_texteditor/js/aceeditor/ace-compat.js1
-rwxr-xr-x[-rw-r--r--]apps/files_texteditor/js/aceeditor/ace-uncompressed.js11721
-rw-r--r--apps/files_texteditor/js/aceeditor/ace.js2
-rw-r--r--apps/files_texteditor/js/aceeditor/cockpit-uncompressed.js2504
-rw-r--r--apps/files_texteditor/js/aceeditor/cockpit.js1
-rwxr-xr-xapps/files_texteditor/js/aceeditor/keybinding-emacs-uncompressed.js415
-rwxr-xr-x[-rw-r--r--]apps/files_texteditor/js/aceeditor/keybinding-emacs.js2
-rwxr-xr-xapps/files_texteditor/js/aceeditor/keybinding-vim-uncompressed.js403
-rwxr-xr-x[-rw-r--r--]apps/files_texteditor/js/aceeditor/keybinding-vim.js2
-rwxr-xr-xapps/files_texteditor/js/aceeditor/mode-c_cpp-uncompressed.js928
-rw-r--r--apps/files_texteditor/js/aceeditor/mode-c_cpp.js2
-rwxr-xr-xapps/files_texteditor/js/aceeditor/mode-clojure-uncompressed.js432
-rw-r--r--apps/files_texteditor/js/aceeditor/mode-clojure.js2
-rwxr-xr-xapps/files_texteditor/js/aceeditor/mode-coffee-uncompressed.js804
-rw-r--r--apps/files_texteditor/js/aceeditor/mode-coffee.js2
-rwxr-xr-xapps/files_texteditor/js/aceeditor/mode-coldfusion-uncompressed.js2543
-rwxr-xr-xapps/files_texteditor/js/aceeditor/mode-coldfusion.js1
-rwxr-xr-xapps/files_texteditor/js/aceeditor/mode-csharp-uncompressed.js778
-rw-r--r--apps/files_texteditor/js/aceeditor/mode-csharp.js2
-rwxr-xr-xapps/files_texteditor/js/aceeditor/mode-css-uncompressed.js863
-rw-r--r--apps/files_texteditor/js/aceeditor/mode-css.js2
-rwxr-xr-xapps/files_texteditor/js/aceeditor/mode-groovy-uncompressed.js1462
-rw-r--r--apps/files_texteditor/js/aceeditor/mode-groovy.js2
-rwxr-xr-xapps/files_texteditor/js/aceeditor/mode-haxe-uncompressed.js778
-rwxr-xr-xapps/files_texteditor/js/aceeditor/mode-haxe.js1
-rwxr-xr-xapps/files_texteditor/js/aceeditor/mode-html-uncompressed.js2558
-rw-r--r--apps/files_texteditor/js/aceeditor/mode-html.js2
-rwxr-xr-xapps/files_texteditor/js/aceeditor/mode-java-uncompressed.js1464
-rw-r--r--apps/files_texteditor/js/aceeditor/mode-java.js2
-rwxr-xr-xapps/files_texteditor/js/aceeditor/mode-javascript-uncompressed.js1295
-rw-r--r--apps/files_texteditor/js/aceeditor/mode-javascript.js2
-rwxr-xr-xapps/files_texteditor/js/aceeditor/mode-json-uncompressed.js689
-rw-r--r--apps/files_texteditor/js/aceeditor/mode-json.js2
-rwxr-xr-xapps/files_texteditor/js/aceeditor/mode-latex-uncompressed.js105
-rwxr-xr-xapps/files_texteditor/js/aceeditor/mode-latex.js1
-rwxr-xr-xapps/files_texteditor/js/aceeditor/mode-lua-uncompressed.js533
-rwxr-xr-xapps/files_texteditor/js/aceeditor/mode-lua.js1
-rwxr-xr-xapps/files_texteditor/js/aceeditor/mode-markdown-uncompressed.js3000
-rwxr-xr-xapps/files_texteditor/js/aceeditor/mode-markdown.js1
-rwxr-xr-xapps/files_texteditor/js/aceeditor/mode-ocaml-uncompressed.js549
-rw-r--r--apps/files_texteditor/js/aceeditor/mode-ocaml.js2
-rwxr-xr-xapps/files_texteditor/js/aceeditor/mode-perl-uncompressed.js583
-rw-r--r--apps/files_texteditor/js/aceeditor/mode-perl.js2
-rwxr-xr-xapps/files_texteditor/js/aceeditor/mode-php-uncompressed.js1894
-rw-r--r--apps/files_texteditor/js/aceeditor/mode-php.js2
-rwxr-xr-xapps/files_texteditor/js/aceeditor/mode-powershell-uncompressed.js716
-rwxr-xr-xapps/files_texteditor/js/aceeditor/mode-powershell.js1
-rwxr-xr-xapps/files_texteditor/js/aceeditor/mode-python-uncompressed.js516
-rw-r--r--apps/files_texteditor/js/aceeditor/mode-python.js2
-rwxr-xr-xapps/files_texteditor/js/aceeditor/mode-ruby-uncompressed.js401
-rw-r--r--apps/files_texteditor/js/aceeditor/mode-ruby.js2
-rwxr-xr-xapps/files_texteditor/js/aceeditor/mode-scad-uncompressed.js916
-rw-r--r--apps/files_texteditor/js/aceeditor/mode-scad.js2
-rwxr-xr-xapps/files_texteditor/js/aceeditor/mode-scala-uncompressed.js1464
-rw-r--r--apps/files_texteditor/js/aceeditor/mode-scala.js2
-rwxr-xr-xapps/files_texteditor/js/aceeditor/mode-scss-uncompressed.js688
-rw-r--r--apps/files_texteditor/js/aceeditor/mode-scss.js2
-rwxr-xr-xapps/files_texteditor/js/aceeditor/mode-sql-uncompressed.js169
-rwxr-xr-xapps/files_texteditor/js/aceeditor/mode-sql.js1
-rwxr-xr-xapps/files_texteditor/js/aceeditor/mode-svg-uncompressed.js2197
-rw-r--r--apps/files_texteditor/js/aceeditor/mode-svg.js2
-rwxr-xr-xapps/files_texteditor/js/aceeditor/mode-textile-uncompressed.js264
-rw-r--r--apps/files_texteditor/js/aceeditor/mode-textile.js2
-rwxr-xr-xapps/files_texteditor/js/aceeditor/mode-xml-uncompressed.js1011
-rw-r--r--apps/files_texteditor/js/aceeditor/mode-xml.js2
-rwxr-xr-xapps/files_texteditor/js/aceeditor/theme-clouds-uncompressed.js162
-rw-r--r--apps/files_texteditor/js/aceeditor/theme-clouds.js2
-rw-r--r--apps/files_texteditor/js/aceeditor/worker-coffee.js7055
-rw-r--r--apps/files_texteditor/js/aceeditor/worker-css.js9539
-rw-r--r--apps/files_texteditor/js/aceeditor/worker-javascript.js9753
-rw-r--r--apps/files_texteditor/js/editor.js237
-rw-r--r--apps/gallery/ajax/galleryOp.php60
-rw-r--r--apps/gallery/ajax/getCovers.php99
-rw-r--r--apps/gallery/ajax/scanForAlbums.php31
-rw-r--r--apps/gallery/appinfo/app.php4
-rw-r--r--apps/gallery/css/styles.css8
-rw-r--r--apps/gallery/js/album_cover.js45
-rw-r--r--apps/gallery/js/albums.js26
-rw-r--r--apps/gallery/l10n/de.php5
-rw-r--r--apps/gallery/l10n/pl.php6
-rw-r--r--apps/gallery/lib/album.php26
-rw-r--r--apps/gallery/lib/hooks_handlers.php108
-rw-r--r--apps/gallery/lib/photo.php5
-rw-r--r--apps/gallery/lib/scanner.php25
-rw-r--r--apps/gallery/templates/index.php3
-rw-r--r--apps/gallery/templates/view_album.php3
-rw-r--r--apps/media/css/music.css5
-rw-r--r--apps/media/js/collection.js17
-rw-r--r--apps/media/js/loader.js6
-rw-r--r--apps/media/js/music.js19
-rw-r--r--apps/media/js/player.js77
-rw-r--r--apps/media/l10n/ar.php13
-rw-r--r--apps/media/l10n/bg_BG.php1
-rw-r--r--apps/media/l10n/ca.php3
-rw-r--r--apps/media/l10n/cs_CZ.php3
-rw-r--r--apps/media/l10n/da.php6
-rw-r--r--apps/media/l10n/de.php8
-rw-r--r--apps/media/l10n/el.php1
-rw-r--r--apps/media/l10n/eo.php13
-rw-r--r--apps/media/l10n/es.php1
-rw-r--r--apps/media/l10n/et_EE.php1
-rw-r--r--apps/media/l10n/eu.php13
-rw-r--r--apps/media/l10n/fr.php6
-rw-r--r--apps/media/l10n/he.php13
-rw-r--r--apps/media/l10n/hr.php13
-rw-r--r--apps/media/l10n/hu_HU.php13
-rw-r--r--apps/media/l10n/ia.php13
-rw-r--r--apps/media/l10n/id.php6
-rw-r--r--apps/media/l10n/it.php3
-rw-r--r--apps/media/l10n/ja_JP.php13
-rw-r--r--apps/media/l10n/lb.php1
-rw-r--r--apps/media/l10n/lt_LT.php13
-rw-r--r--apps/media/l10n/ms_MY.php1
-rw-r--r--apps/media/l10n/nb_NO.php1
-rw-r--r--apps/media/l10n/nl.php8
-rw-r--r--apps/media/l10n/nn_NO.php13
-rw-r--r--apps/media/l10n/pl.php6
-rw-r--r--apps/media/l10n/pt_BR.php1
-rw-r--r--apps/media/l10n/ro.php1
-rw-r--r--apps/media/l10n/ru.php1
-rw-r--r--apps/media/l10n/sk_SK.php13
-rw-r--r--apps/media/l10n/sl.php13
-rw-r--r--apps/media/l10n/sr.php1
-rw-r--r--apps/media/l10n/sr@latin.php1
-rw-r--r--apps/media/l10n/sv.php1
-rw-r--r--apps/media/l10n/tr.php13
-rw-r--r--apps/media/l10n/zh_CN.php1
-rw-r--r--apps/media/lib_collection.php24
-rw-r--r--apps/media/templates/player.php2
-rwxr-xr-x[-rw-r--r--]core/css/jquery-ui-1.8.16.custom.css (renamed from core/css/jquery-ui-1.8.14.custom.css)95
-rw-r--r--core/css/multiselect.css1
-rw-r--r--core/css/styles.css6
-rw-r--r--core/img/filetypes/text-vcard.png (renamed from core/img/filetypes/vcf.png)bin533 -> 533 bytes
-rwxr-xr-x[-rw-r--r--]core/js/jquery-ui-1.8.16.custom.min.js (renamed from core/js/jquery-ui-1.8.14.custom.min.js)376
-rw-r--r--core/js/js.js53
-rw-r--r--core/js/multiselect.js22
-rw-r--r--core/l10n/ar.php34
-rw-r--r--core/l10n/bg_BG.php24
-rw-r--r--core/l10n/ca.php31
-rw-r--r--core/l10n/cs_CZ.php21
-rw-r--r--core/l10n/da.php43
-rw-r--r--core/l10n/de.php24
-rw-r--r--core/l10n/el.php29
-rw-r--r--core/l10n/eo.php34
-rw-r--r--core/l10n/es.php29
-rw-r--r--core/l10n/et_EE.php24
-rw-r--r--core/l10n/eu.php34
-rw-r--r--core/l10n/fr.php29
-rw-r--r--core/l10n/he.php34
-rw-r--r--core/l10n/hr.php34
-rw-r--r--core/l10n/hu_HU.php33
-rw-r--r--core/l10n/ia.php27
-rw-r--r--core/l10n/id.php17
-rw-r--r--core/l10n/it.php31
-rw-r--r--core/l10n/ja_JP.php34
-rw-r--r--core/l10n/lb.php24
-rw-r--r--core/l10n/lt_LT.php33
-rw-r--r--core/l10n/ms_MY.php17
-rw-r--r--core/l10n/nb_NO.php7
-rw-r--r--core/l10n/nl.php29
-rw-r--r--core/l10n/nn_NO.php34
-rw-r--r--core/l10n/pl.php29
-rw-r--r--core/l10n/pt_BR.php24
-rw-r--r--core/l10n/pt_PT.php3
-rw-r--r--core/l10n/ro.php29
-rw-r--r--core/l10n/ru.php24
-rw-r--r--core/l10n/sk_SK.php34
-rw-r--r--core/l10n/sl.php34
-rw-r--r--core/l10n/sr.php24
-rw-r--r--core/l10n/sr@latin.php24
-rw-r--r--core/l10n/sv.php26
-rw-r--r--core/l10n/tr.php34
-rw-r--r--core/l10n/zh_CN.php24
-rw-r--r--files/ajax/delete.php4
-rw-r--r--files/ajax/move.php6
-rw-r--r--files/ajax/newfile.php6
-rw-r--r--files/ajax/newfolder.php6
-rw-r--r--files/ajax/rename.php6
-rw-r--r--files/css/files.css4
-rw-r--r--files/index.php5
-rw-r--r--files/js/fileactions.js12
-rw-r--r--files/js/files.js6
-rw-r--r--files/l10n/ar.php19
-rw-r--r--files/l10n/bg_BG.php7
-rw-r--r--files/l10n/ca.php15
-rw-r--r--files/l10n/cs_CZ.php11
-rw-r--r--files/l10n/da.php13
-rw-r--r--files/l10n/de.php9
-rw-r--r--files/l10n/el.php11
-rw-r--r--files/l10n/eo.php19
-rw-r--r--files/l10n/es.php11
-rw-r--r--files/l10n/et_EE.php7
-rw-r--r--files/l10n/eu.php19
-rw-r--r--files/l10n/fr.php11
-rw-r--r--files/l10n/he.php19
-rw-r--r--files/l10n/hr.php19
-rw-r--r--files/l10n/hu_HU.php19
-rw-r--r--files/l10n/ia.php14
-rw-r--r--files/l10n/id.php1
-rw-r--r--files/l10n/it.php11
-rw-r--r--files/l10n/ja_JP.php19
-rw-r--r--files/l10n/lb.php7
-rw-r--r--files/l10n/lt_LT.php19
-rw-r--r--files/l10n/ms_MY.php1
-rw-r--r--files/l10n/nb_NO.php1
-rw-r--r--files/l10n/nl.php11
-rw-r--r--files/l10n/nn_NO.php19
-rw-r--r--files/l10n/pl.php11
-rw-r--r--files/l10n/pt_BR.php7
-rw-r--r--files/l10n/ro.php11
-rw-r--r--files/l10n/ru.php7
-rw-r--r--files/l10n/sk_SK.php19
-rw-r--r--files/l10n/sl.php19
-rw-r--r--files/l10n/sr.php7
-rw-r--r--files/l10n/sr@latin.php7
-rw-r--r--files/l10n/sv.php15
-rw-r--r--files/l10n/tr.php19
-rw-r--r--files/l10n/zh_CN.php7
-rw-r--r--files/templates/index.php2
-rw-r--r--files/templates/part.list.php3
-rw-r--r--l10n/.tx/config38
-rw-r--r--l10n/ar/calendar.po637
-rw-r--r--l10n/ar/contacts.po290
-rw-r--r--l10n/ar/core.po171
-rw-r--r--l10n/ar/files.po112
-rw-r--r--l10n/ar/gallery.po32
-rw-r--r--l10n/ar/media.po65
-rw-r--r--l10n/ar/settings.po153
-rw-r--r--l10n/bg_BG/calendar.po562
-rw-r--r--l10n/bg_BG/contacts.po257
-rw-r--r--l10n/bg_BG/core.po133
-rw-r--r--l10n/bg_BG/files.po68
-rw-r--r--l10n/bg_BG/gallery.po32
-rw-r--r--l10n/bg_BG/media.po20
-rw-r--r--l10n/bg_BG/settings.po70
-rw-r--r--l10n/ca/calendar.po580
-rw-r--r--l10n/ca/contacts.po300
-rw-r--r--l10n/ca/core.po135
-rw-r--r--l10n/ca/files.po74
-rw-r--r--l10n/ca/gallery.po32
-rw-r--r--l10n/ca/media.po25
-rw-r--r--l10n/ca/settings.po85
-rw-r--r--l10n/cs_CZ/calendar.po678
-rw-r--r--l10n/cs_CZ/contacts.po301
-rw-r--r--l10n/cs_CZ/core.po141
-rw-r--r--l10n/cs_CZ/files.po69
-rw-r--r--l10n/cs_CZ/gallery.po32
-rw-r--r--l10n/cs_CZ/media.po26
-rw-r--r--l10n/cs_CZ/settings.po76
-rw-r--r--l10n/da/calendar.po551
-rw-r--r--l10n/da/contacts.po303
-rw-r--r--l10n/da/core.po148
-rw-r--r--l10n/da/files.po72
-rw-r--r--l10n/da/gallery.po32
-rw-r--r--l10n/da/media.po34
-rw-r--r--l10n/da/settings.po81
-rw-r--r--l10n/de/calendar.po540
-rw-r--r--l10n/de/contacts.po301
-rw-r--r--l10n/de/core.po135
-rw-r--r--l10n/de/files.po70
-rw-r--r--l10n/de/gallery.po32
-rw-r--r--l10n/de/media.po36
-rw-r--r--l10n/de/settings.po77
-rw-r--r--l10n/el/calendar.po553
-rw-r--r--l10n/el/contacts.po301
-rw-r--r--l10n/el/core.po140
-rw-r--r--l10n/el/files.po70
-rw-r--r--l10n/el/gallery.po32
-rw-r--r--l10n/el/media.po23
-rw-r--r--l10n/el/settings.po79
-rw-r--r--l10n/eo/calendar.po637
-rw-r--r--l10n/eo/contacts.po290
-rw-r--r--l10n/eo/core.po171
-rw-r--r--l10n/eo/files.po113
-rw-r--r--l10n/eo/gallery.po32
-rw-r--r--l10n/eo/media.po65
-rw-r--r--l10n/eo/settings.po154
-rw-r--r--l10n/es/calendar.po546
-rw-r--r--l10n/es/contacts.po299
-rw-r--r--l10n/es/core.po137
-rw-r--r--l10n/es/files.po70
-rw-r--r--l10n/es/gallery.po32
-rw-r--r--l10n/es/media.po23
-rw-r--r--l10n/es/settings.po80
-rw-r--r--l10n/et_EE/calendar.po612
-rw-r--r--l10n/et_EE/contacts.po286
-rw-r--r--l10n/et_EE/core.po134
-rw-r--r--l10n/et_EE/files.po67
-rw-r--r--l10n/et_EE/gallery.po32
-rw-r--r--l10n/et_EE/media.po20
-rw-r--r--l10n/et_EE/settings.po70
-rw-r--r--l10n/eu/calendar.po637
-rw-r--r--l10n/eu/contacts.po291
-rw-r--r--l10n/eu/core.po171
-rw-r--r--l10n/eu/files.po115
-rw-r--r--l10n/eu/gallery.po32
-rw-r--r--l10n/eu/media.po65
-rw-r--r--l10n/eu/settings.po155
-rw-r--r--l10n/fr/calendar.po564
-rw-r--r--l10n/fr/contacts.po303
-rw-r--r--l10n/fr/core.po138
-rw-r--r--l10n/fr/files.po68
-rw-r--r--l10n/fr/gallery.po32
-rw-r--r--l10n/fr/media.po33
-rw-r--r--l10n/fr/settings.po77
-rw-r--r--l10n/gl/calendar.po636
-rw-r--r--l10n/gl/contacts.po289
-rw-r--r--l10n/gl/core.po170
-rw-r--r--l10n/gl/files.po108
-rw-r--r--l10n/gl/gallery.po32
-rw-r--r--l10n/gl/media.po64
-rw-r--r--l10n/gl/settings.po152
-rw-r--r--l10n/he/calendar.po639
-rw-r--r--l10n/he/contacts.po290
-rw-r--r--l10n/he/core.po172
-rw-r--r--l10n/he/files.po109
-rw-r--r--l10n/he/gallery.po32
-rw-r--r--l10n/he/media.po65
-rw-r--r--l10n/he/settings.po153
-rw-r--r--l10n/hr/calendar.po637
-rw-r--r--l10n/hr/contacts.po290
-rw-r--r--l10n/hr/core.po172
-rw-r--r--l10n/hr/files.po115
-rw-r--r--l10n/hr/gallery.po32
-rw-r--r--l10n/hr/media.po65
-rw-r--r--l10n/hr/settings.po154
-rw-r--r--l10n/hu_HU/calendar.po637
-rw-r--r--l10n/hu_HU/contacts.po291
-rw-r--r--l10n/hu_HU/core.po171
-rw-r--r--l10n/hu_HU/files.po116
-rw-r--r--l10n/hu_HU/gallery.po32
-rw-r--r--l10n/hu_HU/media.po65
-rw-r--r--l10n/hu_HU/settings.po155
-rw-r--r--l10n/hy/calendar.po637
-rw-r--r--l10n/hy/contacts.po289
-rw-r--r--l10n/hy/core.po170
-rw-r--r--l10n/hy/files.po108
-rw-r--r--l10n/hy/gallery.po32
-rw-r--r--l10n/hy/media.po64
-rw-r--r--l10n/hy/settings.po152
-rw-r--r--l10n/ia/calendar.po637
-rw-r--r--l10n/ia/contacts.po291
-rw-r--r--l10n/ia/core.po171
-rw-r--r--l10n/ia/files.po109
-rw-r--r--l10n/ia/gallery.po32
-rw-r--r--l10n/ia/media.po65
-rw-r--r--l10n/ia/settings.po153
-rw-r--r--l10n/id/calendar.po562
-rw-r--r--l10n/id/contacts.po257
-rw-r--r--l10n/id/core.po133
-rw-r--r--l10n/id/files.po56
-rw-r--r--l10n/id/gallery.po32
-rw-r--r--l10n/id/media.po33
-rw-r--r--l10n/id/settings.po75
-rw-r--r--l10n/it/calendar.po545
-rw-r--r--l10n/it/contacts.po300
-rw-r--r--l10n/it/core.po136
-rw-r--r--l10n/it/files.po69
-rw-r--r--l10n/it/gallery.po32
-rw-r--r--l10n/it/media.po26
-rw-r--r--l10n/it/settings.po76
-rw-r--r--l10n/ja_JP/calendar.po636
-rw-r--r--l10n/ja_JP/contacts.po289
-rw-r--r--l10n/ja_JP/core.po170
-rw-r--r--l10n/ja_JP/files.po108
-rw-r--r--l10n/ja_JP/gallery.po32
-rw-r--r--l10n/ja_JP/media.po64
-rw-r--r--l10n/ja_JP/settings.po152
-rw-r--r--l10n/lb/calendar.po612
-rw-r--r--l10n/lb/contacts.po286
-rw-r--r--l10n/lb/core.po135
-rw-r--r--l10n/lb/files.po68
-rw-r--r--l10n/lb/gallery.po32
-rw-r--r--l10n/lb/media.po23
-rw-r--r--l10n/lb/settings.po70
-rw-r--r--l10n/lt_LT/calendar.po637
-rw-r--r--l10n/lt_LT/contacts.po290
-rw-r--r--l10n/lt_LT/core.po173
-rw-r--r--l10n/lt_LT/files.po112
-rw-r--r--l10n/lt_LT/gallery.po32
-rw-r--r--l10n/lt_LT/media.po65
-rw-r--r--l10n/lt_LT/settings.po154
-rw-r--r--l10n/ms_MY/calendar.po562
-rw-r--r--l10n/ms_MY/contacts.po257
-rw-r--r--l10n/ms_MY/core.po135
-rw-r--r--l10n/ms_MY/files.po56
-rw-r--r--l10n/ms_MY/gallery.po32
-rw-r--r--l10n/ms_MY/media.po20
-rw-r--r--l10n/ms_MY/settings.po70
-rw-r--r--l10n/nb_NO/calendar.po562
-rw-r--r--l10n/nb_NO/contacts.po257
-rw-r--r--l10n/nb_NO/core.po132
-rw-r--r--l10n/nb_NO/files.po56
-rw-r--r--l10n/nb_NO/gallery.po32
-rw-r--r--l10n/nb_NO/media.po23
-rw-r--r--l10n/nb_NO/settings.po73
-rw-r--r--l10n/nl/calendar.po594
-rw-r--r--l10n/nl/contacts.po302
-rw-r--r--l10n/nl/core.po135
-rw-r--r--l10n/nl/files.po71
-rw-r--r--l10n/nl/gallery.po32
-rw-r--r--l10n/nl/media.po37
-rw-r--r--l10n/nl/settings.po90
-rw-r--r--l10n/nn_NO/calendar.po637
-rw-r--r--l10n/nn_NO/contacts.po290
-rw-r--r--l10n/nn_NO/core.po171
-rw-r--r--l10n/nn_NO/files.po112
-rw-r--r--l10n/nn_NO/gallery.po32
-rw-r--r--l10n/nn_NO/media.po65
-rw-r--r--l10n/nn_NO/settings.po153
-rw-r--r--l10n/pl/calendar.po534
-rw-r--r--l10n/pl/contacts.po331
-rw-r--r--l10n/pl/core.po135
-rw-r--r--l10n/pl/files.po68
-rw-r--r--l10n/pl/gallery.po32
-rw-r--r--l10n/pl/media.po34
-rw-r--r--l10n/pl/settings.po76
-rw-r--r--l10n/pt_BR/calendar.po612
-rw-r--r--l10n/pt_BR/contacts.po286
-rw-r--r--l10n/pt_BR/core.po133
-rw-r--r--l10n/pt_BR/files.po68
-rw-r--r--l10n/pt_BR/gallery.po32
-rw-r--r--l10n/pt_BR/media.po25
-rw-r--r--l10n/pt_BR/settings.po70
-rw-r--r--l10n/pt_PT/calendar.po479
-rw-r--r--l10n/pt_PT/contacts.po285
-rw-r--r--l10n/pt_PT/core.po130
-rw-r--r--l10n/pt_PT/files.po54
-rw-r--r--l10n/pt_PT/gallery.po32
-rw-r--r--l10n/pt_PT/media.po20
-rw-r--r--l10n/pt_PT/settings.po64
-rw-r--r--l10n/ro/calendar.po579
-rw-r--r--l10n/ro/contacts.po300
-rw-r--r--l10n/ro/core.po136
-rw-r--r--l10n/ro/files.po70
-rw-r--r--l10n/ro/gallery.po32
-rw-r--r--l10n/ro/media.po23
-rw-r--r--l10n/ro/settings.po75
-rw-r--r--l10n/ru/calendar.po574
-rw-r--r--l10n/ru/contacts.po286
-rw-r--r--l10n/ru/core.po133
-rw-r--r--l10n/ru/files.po68
-rw-r--r--l10n/ru/gallery.po32
-rw-r--r--l10n/ru/media.po23
-rw-r--r--l10n/ru/settings.po71
-rw-r--r--l10n/sk_SK/calendar.po637
-rw-r--r--l10n/sk_SK/contacts.po289
-rw-r--r--l10n/sk_SK/core.po171
-rw-r--r--l10n/sk_SK/files.po112
-rw-r--r--l10n/sk_SK/gallery.po32
-rw-r--r--l10n/sk_SK/media.po64
-rw-r--r--l10n/sk_SK/settings.po153
-rw-r--r--l10n/sl/calendar.po637
-rw-r--r--l10n/sl/contacts.po291
-rw-r--r--l10n/sl/core.po172
-rw-r--r--l10n/sl/files.po114
-rw-r--r--l10n/sl/gallery.po32
-rw-r--r--l10n/sl/media.po65
-rw-r--r--l10n/sl/settings.po153
-rw-r--r--l10n/sr/calendar.po608
-rw-r--r--l10n/sr/contacts.po286
-rw-r--r--l10n/sr/core.po133
-rw-r--r--l10n/sr/files.po68
-rw-r--r--l10n/sr/gallery.po32
-rw-r--r--l10n/sr/media.po20
-rw-r--r--l10n/sr/settings.po70
-rw-r--r--l10n/sr@latin/calendar.po608
-rw-r--r--l10n/sr@latin/contacts.po286
-rw-r--r--l10n/sr@latin/core.po133
-rw-r--r--l10n/sr@latin/files.po68
-rw-r--r--l10n/sr@latin/gallery.po32
-rw-r--r--l10n/sr@latin/media.po20
-rw-r--r--l10n/sr@latin/settings.po70
-rw-r--r--l10n/sv/calendar.po569
-rw-r--r--l10n/sv/contacts.po286
-rw-r--r--l10n/sv/core.po136
-rw-r--r--l10n/sv/files.po76
-rw-r--r--l10n/sv/gallery.po32
-rw-r--r--l10n/sv/media.po21
-rw-r--r--l10n/sv/settings.po74
-rw-r--r--l10n/templates/calendar.pot46
-rw-r--r--l10n/templates/contacts.pot255
-rw-r--r--l10n/templates/core.pot125
-rw-r--r--l10n/templates/files.pot50
-rw-r--r--l10n/templates/gallery.pot30
-rw-r--r--l10n/templates/media.pot16
-rw-r--r--l10n/templates/settings.pot60
-rw-r--r--l10n/tr/calendar.po637
-rw-r--r--l10n/tr/contacts.po290
-rw-r--r--l10n/tr/core.po171
-rw-r--r--l10n/tr/files.po112
-rw-r--r--l10n/tr/gallery.po32
-rw-r--r--l10n/tr/media.po65
-rw-r--r--l10n/tr/settings.po153
-rw-r--r--l10n/zh_CN/calendar.po612
-rw-r--r--l10n/zh_CN/contacts.po286
-rw-r--r--l10n/zh_CN/core.po133
-rw-r--r--l10n/zh_CN/files.po68
-rw-r--r--l10n/zh_CN/gallery.po32
-rw-r--r--l10n/zh_CN/media.po23
-rw-r--r--l10n/zh_CN/settings.po73
-rw-r--r--lib/app.php1
-rw-r--r--lib/base.php10
-rw-r--r--lib/db.php17
-rw-r--r--lib/files.php19
-rw-r--r--lib/filestorage/local.php9
-rw-r--r--lib/filesystem.php142
-rw-r--r--lib/image.php3
-rw-r--r--lib/mimetypes.fixlist.php14
-rw-r--r--lib/setup.php35
-rw-r--r--lib/util.php4
-rw-r--r--settings/img/log Icon License2
-rw-r--r--settings/img/log.pngbin0 -> 441 bytes
-rwxr-xr-xsettings/img/log.svg86
-rw-r--r--settings/js/users.js7
-rw-r--r--settings/l10n/ar.php28
-rw-r--r--settings/l10n/bg_BG.php4
-rw-r--r--settings/l10n/ca.php22
-rw-r--r--settings/l10n/cs_CZ.php11
-rw-r--r--settings/l10n/da.php16
-rw-r--r--settings/l10n/de.php10
-rw-r--r--settings/l10n/el.php13
-rw-r--r--settings/l10n/eo.php28
-rw-r--r--settings/l10n/es.php14
-rw-r--r--settings/l10n/et_EE.php4
-rw-r--r--settings/l10n/eu.php28
-rw-r--r--settings/l10n/fr.php13
-rw-r--r--settings/l10n/he.php28
-rw-r--r--settings/l10n/hr.php28
-rw-r--r--settings/l10n/hu_HU.php25
-rw-r--r--settings/l10n/ia.php21
-rw-r--r--settings/l10n/id.php5
-rw-r--r--settings/l10n/it.php13
-rw-r--r--settings/l10n/ja_JP.php28
-rw-r--r--settings/l10n/lb.php4
-rw-r--r--settings/l10n/lt_LT.php26
-rw-r--r--settings/l10n/ms_MY.php4
-rw-r--r--settings/l10n/nb_NO.php4
-rw-r--r--settings/l10n/nl.php23
-rw-r--r--settings/l10n/nn_NO.php28
-rw-r--r--settings/l10n/pl.php12
-rw-r--r--settings/l10n/pt_BR.php4
-rw-r--r--settings/l10n/ro.php11
-rw-r--r--settings/l10n/ru.php4
-rw-r--r--settings/l10n/sk_SK.php28
-rw-r--r--settings/l10n/sl.php28
-rw-r--r--settings/l10n/sr.php4
-rw-r--r--settings/l10n/sr@latin.php4
-rw-r--r--settings/l10n/sv.php6
-rw-r--r--settings/l10n/tr.php28
-rw-r--r--settings/l10n/zh_CN.php4
-rwxr-xr-x[-rw-r--r--]settings/personal.php10
681 files changed, 110684 insertions, 23020 deletions
diff --git a/3rdparty/MDB2/Driver/Manager/pgsql.php b/3rdparty/MDB2/Driver/Manager/pgsql.php
index 490f697aa5b..44a611d399d 100644
--- a/3rdparty/MDB2/Driver/Manager/pgsql.php
+++ b/3rdparty/MDB2/Driver/Manager/pgsql.php
@@ -68,7 +68,7 @@ class MDB2_Driver_Manager_pgsql extends MDB2_Driver_Manager_Common
*/
function createDatabase($name, $options = array())
{
- $db =& $this->getDBInstance();
+ $db =$this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -95,7 +95,7 @@ class MDB2_Driver_Manager_pgsql extends MDB2_Driver_Manager_Common
*/
function alterDatabase($name, $options = array())
{
- $db =& $this->getDBInstance();
+ $db =$this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -122,7 +122,7 @@ class MDB2_Driver_Manager_pgsql extends MDB2_Driver_Manager_Common
*/
function dropDatabase($name)
{
- $db =& $this->getDBInstance();
+ $db =$this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -181,7 +181,7 @@ class MDB2_Driver_Manager_pgsql extends MDB2_Driver_Manager_Common
*/
function truncateTable($name)
{
- $db =& $this->getDBInstance();
+ $db =$this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -209,7 +209,7 @@ class MDB2_Driver_Manager_pgsql extends MDB2_Driver_Manager_Common
*/
function vacuum($table = null, $options = array())
{
- $db =& $this->getDBInstance();
+ $db =$this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -326,7 +326,7 @@ class MDB2_Driver_Manager_pgsql extends MDB2_Driver_Manager_Common
*/
function alterTable($name, $changes, $check)
{
- $db =& $this->getDBInstance();
+ $db =$this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -396,6 +396,9 @@ class MDB2_Driver_Manager_pgsql extends MDB2_Driver_Manager_Common
}
$db->loadModule('Datatype', null, true);
$type = $db->datatype->getTypeDeclaration($field['definition']);
+ if($type=='SERIAL PRIMARY KEY'){//not correct when altering a table, since serials arent a real type
+ $type='INTEGER';//use integer instead
+ }
$query = "ALTER $field_name TYPE $type USING CAST($field_name AS $type)";
$result = $db->exec("ALTER TABLE $name $query");
if (PEAR::isError($result)) {
@@ -441,7 +444,7 @@ class MDB2_Driver_Manager_pgsql extends MDB2_Driver_Manager_Common
*/
function listDatabases()
{
- $db =& $this->getDBInstance();
+ $db =$this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -474,7 +477,7 @@ class MDB2_Driver_Manager_pgsql extends MDB2_Driver_Manager_Common
*/
function listUsers()
{
- $db =& $this->getDBInstance();
+ $db =$this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -499,9 +502,9 @@ class MDB2_Driver_Manager_pgsql extends MDB2_Driver_Manager_Common
* @return mixed array of view names on success, a MDB2 error on failure
* @access public
*/
- function listViews()
+ function listViews($database = null)
{
- $db =& $this->getDBInstance();
+ $db =$this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -631,9 +634,9 @@ class MDB2_Driver_Manager_pgsql extends MDB2_Driver_Manager_Common
* @return mixed array of table names on success, a MDB2 error on failure
* @access public
*/
- function listTables()
+ function listTables($database = null)
{
- $db =& $this->getDBInstance();
+ $db =$this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -680,7 +683,7 @@ class MDB2_Driver_Manager_pgsql extends MDB2_Driver_Manager_Common
*/
function listTableFields($table)
{
- $db =& $this->getDBInstance();
+ $db =$this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -692,7 +695,7 @@ class MDB2_Driver_Manager_pgsql extends MDB2_Driver_Manager_Common
$table = $db->quoteIdentifier($schema, true) . '.' .$table;
}
$db->setLimit(1);
- $result2 = $db->query("SELECT * FROM $table");
+ $result2 = $db->query("SELECT * FROM $table LIMIT 1");
if (PEAR::isError($result2)) {
return $result2;
}
@@ -716,7 +719,7 @@ class MDB2_Driver_Manager_pgsql extends MDB2_Driver_Manager_Common
*/
function listTableIndexes($table)
{
- $db =& $this->getDBInstance();
+ $db =$this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -769,7 +772,7 @@ class MDB2_Driver_Manager_pgsql extends MDB2_Driver_Manager_Common
*/
function dropConstraint($table, $name, $primary = false)
{
- $db =& $this->getDBInstance();
+ $db =$this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -817,7 +820,7 @@ class MDB2_Driver_Manager_pgsql extends MDB2_Driver_Manager_Common
*/
function listTableConstraints($table)
{
- $db =& $this->getDBInstance();
+ $db =$this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -882,7 +885,7 @@ class MDB2_Driver_Manager_pgsql extends MDB2_Driver_Manager_Common
*/
function createSequence($seq_name, $start = 1)
{
- $db =& $this->getDBInstance();
+ $db =$this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -904,7 +907,7 @@ class MDB2_Driver_Manager_pgsql extends MDB2_Driver_Manager_Common
*/
function dropSequence($seq_name)
{
- $db =& $this->getDBInstance();
+ $db =$this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -922,9 +925,9 @@ class MDB2_Driver_Manager_pgsql extends MDB2_Driver_Manager_Common
* @return mixed array of sequence names on success, a MDB2 error on failure
* @access public
*/
- function listSequences()
+ function listSequences($database = null)
{
- $db =& $this->getDBInstance();
+ $db =$this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
diff --git a/3rdparty/MDB2/Driver/Manager/sqlite.php b/3rdparty/MDB2/Driver/Manager/sqlite.php
index 650910174e7..1b7239876f1 100644
--- a/3rdparty/MDB2/Driver/Manager/sqlite.php
+++ b/3rdparty/MDB2/Driver/Manager/sqlite.php
@@ -600,7 +600,7 @@ class MDB2_Driver_Manager_sqlite extends MDB2_Driver_Manager_Common
}
$constraints = array_flip($constraints);
foreach ($constraints as $constraint => $value) {
- if (!empty($definition['primary'])) {
+ if (!empty($definition['primary'])) {
if (!array_key_exists('primary', $options)) {
$options['primary'] = $definition['fields'];
//remove from the $constraint array, it's already handled by createTable()
@@ -682,7 +682,9 @@ class MDB2_Driver_Manager_sqlite extends MDB2_Driver_Manager_Common
}
foreach ($constraints as $constraint => $definition) {
- $this->createConstraint($name_new, $constraint, $definition);
+ if(empty($definition['primary']) and empty($definition['foreign'])){
+ $this->createConstraint($name_new, $constraint, $definition);
+ }
}
if (!empty($select_fields) && !empty($data)) {
diff --git a/3rdparty/MDB2/Driver/Reverse/pgsql.php b/3rdparty/MDB2/Driver/Reverse/pgsql.php
index 649c1cad9ee..8669c2b919b 100644
--- a/3rdparty/MDB2/Driver/Reverse/pgsql.php
+++ b/3rdparty/MDB2/Driver/Reverse/pgsql.php
@@ -69,7 +69,7 @@ class MDB2_Driver_Reverse_pgsql extends MDB2_Driver_Reverse_Common
*/
function getTableFieldDefinition($table_name, $field_name)
{
- $db =& $this->getDBInstance();
+ $db =$this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -198,7 +198,7 @@ class MDB2_Driver_Reverse_pgsql extends MDB2_Driver_Reverse_Common
*/
function getTableIndexDefinition($table_name, $index_name)
{
- $db =& $this->getDBInstance();
+ $db =$this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -256,7 +256,7 @@ class MDB2_Driver_Reverse_pgsql extends MDB2_Driver_Reverse_Common
*/
function getTableConstraintDefinition($table_name, $constraint_name)
{
- $db =& $this->getDBInstance();
+ $db =$this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -443,7 +443,7 @@ class MDB2_Driver_Reverse_pgsql extends MDB2_Driver_Reverse_Common
*/
function getTriggerDefinition($trigger)
{
- $db =& $this->getDBInstance();
+ $db =$this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
@@ -517,7 +517,7 @@ class MDB2_Driver_Reverse_pgsql extends MDB2_Driver_Reverse_Common
return parent::tableInfo($result, $mode);
}
- $db =& $this->getDBInstance();
+ $db =$this->getDBInstance();
if (PEAR::isError($db)) {
return $db;
}
diff --git a/3rdparty/MDB2/Driver/pgsql.php b/3rdparty/MDB2/Driver/pgsql.php
index 6108f18dec1..13fea690680 100644
--- a/3rdparty/MDB2/Driver/pgsql.php
+++ b/3rdparty/MDB2/Driver/pgsql.php
@@ -1193,7 +1193,7 @@ class MDB2_Result_pgsql extends MDB2_Result_Common
if ($object_class == 'stdClass') {
$row = (object) $row;
} else {
- $row = &new $object_class($row);
+ $row = new $object_class($row);
}
}
++$this->rownum;
diff --git a/apps/calendar/ajax/importdialog.php b/apps/calendar/ajax/importdialog.php
index 983a3d95a84..f6b8453fc22 100644
--- a/apps/calendar/ajax/importdialog.php
+++ b/apps/calendar/ajax/importdialog.php
@@ -1,20 +1,17 @@
<?php
/**
- * Copyright (c) 2011 Georg Ehrke <ownclouddev at georgswebsite dot de>
+ * Copyright (c) 2012 Georg Ehrke <ownclouddev at georgswebsite dot de>
* This file is licensed under the Affero General Public License version 3 or
* later.
* See the COPYING-README file.
*/
require_once('../../../lib/base.php');
-
+OC_JSON::checkLoggedIn();
+OC_Util::checkAppEnabled('calendar');
$l10n = new OC_L10N('calendar');
-
-if(!OC_USER::isLoggedIn()) {
- die('<script type="text/javascript">document.location = oc_webroot;</script>');
-}
-OC_JSON::checkAppEnabled('calendar');
-
$tmpl = new OC_Template('calendar', 'part.import');
+$tmpl->assign('path', $_POST['path']);
+$tmpl->assign('filename', $_POST['filename']);
$tmpl->printpage();
?>
diff --git a/apps/calendar/appinfo/info.xml b/apps/calendar/appinfo/info.xml
index 6b1ecd2337f..46292af3db1 100644
--- a/apps/calendar/appinfo/info.xml
+++ b/apps/calendar/appinfo/info.xml
@@ -4,7 +4,7 @@
<name>Calendar</name>
<version>0.2</version>
<licence>AGPL</licence>
- <author>Georg Ehrke (Userinterface), Jakob Sack</author>
+ <author>Georg Ehrke, Bart Visscher, Jakob Sack</author>
<require>2</require>
<description>Calendar with CalDAV support</description>
<default_enable/>
diff --git a/apps/calendar/export.php b/apps/calendar/export.php
index ce1a4aa046f..9886ad8e8cc 100644
--- a/apps/calendar/export.php
+++ b/apps/calendar/export.php
@@ -1,6 +1,6 @@
<?php
/**
- * Copyright (c) 2011 Georg Ehrke <ownclouddev at georgswebsite dot de>
+ * Copyright (c) 2012 Georg Ehrke <ownclouddev at georgswebsite dot de>
* This file is licensed under the Affero General Public License version 3 or
* later.
* See the COPYING-README file.
@@ -11,13 +11,14 @@ OC_Util::checkLoggedIn();
OC_Util::checkAppEnabled('calendar');
$cal = isset($_GET['calid']) ? $_GET['calid'] : NULL;
$event = isset($_GET['eventid']) ? $_GET['eventid'] : NULL;
+$nl = "\n";
if(isset($cal)){
$calendar = OC_Calendar_App::getCalendar($cal);
$calobjects = OC_Calendar_Object::all($cal);
header('Content-Type: text/Calendar');
header('Content-Disposition: inline; filename=' . $calendar['displayname'] . '.ics');
foreach($calobjects as $calobject){
- echo $calobject['calendardata'] . '\n';
+ echo $calobject['calendardata'] . $nl;
}
}elseif(isset($event)){
$data = OC_Calendar_App::getEventObject($_GET['eventid']);
diff --git a/apps/calendar/img/Icon License b/apps/calendar/img/Icon License
new file mode 100644
index 00000000000..b1b292ace66
--- /dev/null
+++ b/apps/calendar/img/Icon License
@@ -0,0 +1,2 @@
+http://thenounproject.com/noun/calendar/#icon-No404
+Creative Commons BY 3.0 \ No newline at end of file
diff --git a/apps/calendar/img/icon.png b/apps/calendar/img/icon.png
index ee0249b2c9b..eb9e07cbb10 100644
--- a/apps/calendar/img/icon.png
+++ b/apps/calendar/img/icon.png
Binary files differ
diff --git a/apps/calendar/img/icon.svg b/apps/calendar/img/icon.svg
new file mode 100755
index 00000000000..a624db3a487
--- /dev/null
+++ b/apps/calendar/img/icon.svg
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="88px" height="100px" viewBox="0 0 88 100" enable-background="new 0 0 88 100" xml:space="preserve">
+<path d="M0,32v59.906C0,96.377,3.582,100,8,100h72c4.418,0,8-3.623,8-8.094V32H0z M22,94H6V78h16V94z M22,74H6V58h16V74z M22,54H6
+ V38h16V54z M42,94H26V78h16V94z M42,74H26V58h16V74z M42,54H26V38h16V54z M62,94H46V78h16V94z M62,74H46V58h16V74z M62,54H46V38h16
+ V54z M82,94H66V78h16V94z M82,74H66V58h16V74z M82,54H66V38h16V54z"/>
+<path d="M80,12H67V3c0-1.657-1.344-3-3-3c-1.657,0-3,1.343-3,3v9H27V3c0-1.657-1.344-3-3-3c-1.657,0-3,1.343-3,3v9H8
+ c-4.418,0-8,3.623-8,8.093V27v0v1h88v-1v0v-6.907C88,15.623,84.418,12,80,12z M24,26c-3.313,0-6-2.687-6-6
+ c0-2.219,1.209-4.152,3-5.19V20c0,1.657,1.343,3,3,3c1.656,0,3-1.343,3-3v-5.191c1.792,1.038,3,2.972,3,5.191
+ C30,23.313,27.314,26,24,26z M64,26c-3.313,0-6-2.687-6-6c0-2.219,1.209-4.152,3-5.19V20c0,1.657,1.343,3,3,3c1.656,0,3-1.343,3-3
+ v-5.191c1.792,1.038,3,2.972,3,5.191C70,23.313,67.314,26,64,26z"/>
+</svg>
diff --git a/apps/calendar/import.php b/apps/calendar/import.php
index 759726b8d10..b1c6f91df84 100644
--- a/apps/calendar/import.php
+++ b/apps/calendar/import.php
@@ -1,46 +1,120 @@
<?php
/**
- * Copyright (c) 2011 Georg Ehrke <ownclouddev at georgswebsite dot de>
+ * Copyright (c) 2012 Georg Ehrke <ownclouddev at georgswebsite dot de>
* This file is licensed under the Affero General Public License version 3 or
* later.
* See the COPYING-README file.
*/
-
+//check for calendar rights or create new one
+ob_start();
require_once ('../../lib/base.php');
OC_JSON::checkLoggedIn();
OC_Util::checkAppEnabled('calendar');
-
-if($_GET["import"] == "existing"){
- $calid = $_GET["calid"];
- $calendar = OC_Calendar_App::getCalendar($calid);
- if($_GET["path"] != ""){
- $filename = $_GET["path"] . "/" . $_GET["file"];
- }else{
- $filename = "/" . $_GET["file"];
- }
-}else{
+$nl = "\n";
+$progressfile = 'import_tmp/' . md5(session_id()) . '.txt';
+if(is_writable('import_tmp/')){
+ $progressfopen = fopen($progressfile, 'w');
+ fwrite($progressfopen, '10');
+ fclose($progressfopen);
+}
+$file = OC_Filesystem::file_get_contents($_POST['path'] . '/' . $_POST['file']);
+if($_POST['method'] == 'new'){
$id = OC_Calendar_Calendar::addCalendar(OC_User::getUser(), $_POST['calname']);
OC_Calendar_Calendar::setCalendarActive($id, 1);
- $calid = $id;
- if($_POST["path"] != ""){
- $filename = $_POST["path"] . "/" . $_POST["file"];
+}else{
+ $calendar = OC_Calendar_App::getCalendar($_POST['id']);
+ if($calendar['userid'] != OC_USER::getUser()){
+ OC_JSON::error();
+ exit();
+ }
+ $id = $_POST['id'];
+}
+//analyse the calendar file
+if(is_writable('import_tmp/')){
+ $progressfopen = fopen($progressfile, 'w');
+ fwrite($progressfopen, '20');
+ fclose($progressfopen);
+}
+$searchfor = array('VEVENT', 'VTODO', 'VJOURNAL');
+$parts = $searchfor;
+$filearr = explode($nl, $file);
+$inelement = false;
+$parts = array();
+$i = 0;
+foreach($filearr as $line){
+ foreach($searchfor as $search){
+ if(substr_count($line, $search) == 1){
+ list($attr, $val) = explode(':', $line);
+ if($attr == 'BEGIN'){
+ $parts[]['begin'] = $i;
+ $inelement = true;
+ }
+ if($attr == 'END'){
+ $parts[count($parts) - 1]['end'] = $i;
+ $inelement = false;
+ }
+ }
+ }
+ $i++;
+}
+//import the calendar
+if(is_writable('import_tmp/')){
+ $progressfopen = fopen($progressfile, 'w');
+ fwrite($progressfopen, '40');
+ fclose($progressfopen);
+}
+$start = '';
+for ($i = 0; $i < $parts[0]['begin']; $i++) {
+ if($i == 0){
+ $start = $filearr[0];
}else{
- $filename = "/" . $_POST["file"];
+ $start .= $nl . $filearr[$i];
}
}
-$vcalendar = OC_Filesystem::file_get_contents($filename);
-$vcalendar = explode("BEGIN:VEVENT", $vcalendar);
-for($i = 1;$i < count($vcalendar);$i++){
- $vcalendar[$i] = "BEGIN:VEVENT" . $vcalendar[$i];
+$end = '';
+for($i = $parts[count($parts) - 1]['end'] + 1;$i <= count($filearr) - 1; $i++){
+ if($i == $parts[count($parts) - 1]['end'] + 1){
+ $end = $filearr[$parts[count($parts) - 1]['end'] + 1];
+ }else{
+ $end .= $nl . $filearr[$i];
+ }
}
-for($i = 1;$i < count($vcalendar) - 1;$i++){
- $vcalendar[$i] = $vcalendar[$i] . "END:VCALENDAR";
+if(is_writable('import_tmp/')){
+ $progressfopen = fopen($progressfile, 'w');
+ fwrite($progressfopen, '50');
+ fclose($progressfopen);
+}
+$importready = array();
+foreach($parts as $part){
+ for($i = $part['begin']; $i <= $part['end'];$i++){
+ if($i == $part['begin']){
+ $content = $filearr[$i];
+ }else{
+ $content .= $nl . $filearr[$i];
+ }
+ }
+ $importready[] = $start . $nl . $content . $nl . $end;
+}
+if(is_writable('import_tmp/')){
+ $progressfopen = fopen($progressfile, 'w');
+ fwrite($progressfopen, '70');
+ fclose($progressfopen);
+}
+if(count($parts) == 1){
+ OC_Calendar_Object::add($id, $file);
+}else{
+ foreach($importready as $import){
+ OC_Calendar_Object::add($id, $import);
+ }
}
-for($i = 1;$i < count($vcalendar);$i++){
- $vcalendar[$i] = $vcalendar[0] . $vcalendar[$i];
+//done the import
+if(is_writable('import_tmp/')){
+ $progressfopen = fopen($progressfile, 'w');
+ fwrite($progressfopen, '100');
+ fclose($progressfopen);
}
-for($i = 1;$i < count($vcalendar);$i++){
- OC_Calendar_Object::add($calid, $vcalendar[$i]);
+sleep(3);
+if(is_writable('import_tmp/')){
+ unlink($progressfile);
}
-OC_JSON::success();
-?>
+OC_JSON::success(); \ No newline at end of file
diff --git a/apps/calendar/import_tmp/Info b/apps/calendar/import_tmp/Info
new file mode 100644
index 00000000000..abafbce435c
--- /dev/null
+++ b/apps/calendar/import_tmp/Info
@@ -0,0 +1,2 @@
+This folder contains static files with the percentage of the import.
+Requires write permission
diff --git a/apps/calendar/js/calendar.js b/apps/calendar/js/calendar.js
index ae586661ccc..33a78b3e322 100644
--- a/apps/calendar/js/calendar.js
+++ b/apps/calendar/js/calendar.js
@@ -1,5 +1,5 @@
/**
- * Copyright (c) 2011 Georg Ehrke <ownclouddev at georgswebsite dot de>
+ * Copyright (c) 2012 Georg Ehrke <ownclouddev at georgswebsite dot de>
* Copyright (c) 2011 Bart Visscher <bartv@thisnet.nl>
* This file is licensed under the Affero General Public License version 3 or
* later.
@@ -345,6 +345,11 @@ Calendar={
}
},
+ reseticonhighlight: function(){
+ $('#oneweekview_radio').css('color', '#000000');
+ $('#onemonthview_radio').css('color', '#000000');
+ $('#listview_radio').css('color', '#000000');
+ },
Calendar:{
overview:function(){
if($('#choosecalendar_dialog').dialog('isOpen') == true){
@@ -669,12 +674,18 @@ $(document).ready(function(){
});
$('#oneweekview_radio').click(function(){
$('#calendar_holder').fullCalendar('changeView', 'agendaWeek');
+ Calendar.UI.reseticonhighlight();
+ $('#oneweekview_radio').css('color', '#6193CF');
});
$('#onemonthview_radio').click(function(){
$('#calendar_holder').fullCalendar('changeView', 'month');
+ Calendar.UI.reseticonhighlight();
+ $('#onemonthview_radio').css('color', '#6193CF');
});
$('#listview_radio').click(function(){
$('#calendar_holder').fullCalendar('changeView', 'list');
+ Calendar.UI.reseticonhighlight();
+ $('#listview_radio').css('color', '#6193CF');
});
$('#today_input').click(function(){
$('#calendar_holder').fullCalendar('today');
diff --git a/apps/calendar/js/loader.js b/apps/calendar/js/loader.js
index 6eafec8b10d..4e483f9864e 100644
--- a/apps/calendar/js/loader.js
+++ b/apps/calendar/js/loader.js
@@ -1,16 +1,81 @@
-function importdialog(directory, filename){
- $("body").append("<div id=\"importdialogholder\"></div>");
- $("#importdialogholder").load(OC.filePath('calendar', 'ajax', 'importdialog.php?filename=' + filename + '&path=' + directory));
-}
-
-$(document).ready(function(){
- $('tr[data-file$=".ics"]').attr("data-mime", "text/calendar");
- $('tr[data-file$=".vcs"]').attr("data-mime", "text/calendar");
- $('tr[data-file$=".ical"]').attr("data-mime", "text/calendar");
- if(typeof FileActions!=='undefined'){
- FileActions.register('text/calendar','Import to Calendar','',function(filename){
- importdialog($('#dir').val(),filename);
+/**
+ * Copyright (c) 2012 Georg Ehrke <ownclouddev at georgswebsite dot de>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+Calendar_Import={
+ importdialog: function(filename){
+ var path = $('#dir').val();
+ $('body').append('<div id="calendar_import"></div>');
+ $('#calendar_import').load(OC.filePath('calendar', 'ajax', 'importdialog.php'), {filename:filename, path:path}, function(){Calendar_Import.initdialog(filename);});
+ },
+ initdialog: function(filename){
+ $('#calendar_import_dialog').dialog({
+ width : 500,
+ close : function() {
+ $(this).dialog('destroy').remove();
+ $('#calendar_import').remove();
+ }
+ });
+ $('#import_done_button').click(function(){
+ $('#calendar_import_dialog').dialog('destroy').remove();
+ $('#calendar_import').remove();
+ });
+ $('#progressbar').progressbar({value: 0});
+ $('#startimport').click(function(){
+ var filename = $('#filename').val();
+ var path = $('#path').val();
+ var calid = $('#calendar option:selected').val();
+ if($('#calendar option:selected').val() == 'newcal'){
+ var method = 'new';
+ var calname = $('#newcalendar').val();
+ var calname = $.trim(calname);
+ if(calname == ''){
+ $('#newcalendar').css('background-color', '#FF2626');
+ $('#newcalendar').focus(function(){
+ $('#newcalendar').css('background-color', '#F8F8F8');
+ });
+ return false;
+ }
+ }else{
+ var method = 'old';
+ }
+ $('#newcalendar').attr('readonly', 'readonly');
+ $('#calendar').attr('disabled', 'disabled');
+ var progressfile = $('#progressfile').val();
+ $.post(OC.filePath('calendar', '', 'import.php'), {method: String (method), calname: String (calname), path: String (path), file: String (filename), id: String (calid)}, function(data){
+ if(data.status == 'success'){
+ $('#progressbar').progressbar('option', 'value', 100);
+ $('#import_done').css('display', 'block');
+ }
+ });
+ $('#form_container').css('display', 'none');
+ $('#progressbar_container').css('display', 'block');
+ window.setTimeout('Calendar_Import.getimportstatus(\'' + progressfile + '\')', 500);
+ });
+ $('#calendar').change(function(){
+ if($('#calendar option:selected').val() == 'newcal'){
+ $('#newcalform').slideDown('slow');
+ }else{
+ $('#newcalform').slideUp('slow');
+ }
+ });
+ },
+ getimportstatus: function(progressfile){
+ $.get(OC.filePath('calendar', 'import_tmp', progressfile), function(percent){
+ $('#progressbar').progressbar('option', 'value', parseInt(percent));
+ if(percent < 100){
+ window.setTimeout('Calendar_Import.getimportstatus(\'' + progressfile + '\')', 500);
+ }else{
+ $('#import_done').css('display', 'block');
+ }
});
- FileActions.setDefault('text/calendar','Import to Calendar');
}
+}
+$(document).ready(function(){
+ if(typeof FileActions !== 'undefined'){
+ FileActions.register('text/calendar','importcal', '', Calendar_Import.importdialog);
+ FileActions.setDefault('text/calendar','importcal');
+ };
}); \ No newline at end of file
diff --git a/apps/calendar/l10n/ar.php b/apps/calendar/l10n/ar.php
new file mode 100644
index 00000000000..7dc30ced856
--- /dev/null
+++ b/apps/calendar/l10n/ar.php
@@ -0,0 +1,80 @@
+<?php $TRANSLATIONS = array(
+"Timezone changed" => "تم تغيير المنطقة الزمنية",
+"Invalid request" => "طلب غير مفهوم",
+"Calendar" => "الجدول الزمني",
+"Wrong calendar" => "جدول زمني خاطئ",
+"Birthday" => "عيد ميلاد",
+"Business" => "عمل",
+"Call" => "إتصال",
+"Clients" => "الزبائن",
+"Deliverer" => "المرسل",
+"Holidays" => "عطلة",
+"Ideas" => "أفكار",
+"Journey" => "رحلة",
+"Jubilee" => "يوبيل",
+"Meeting" => "إجتماع",
+"Other" => "شيء آخر",
+"Personal" => "شخصي",
+"Projects" => "مشاريع",
+"Questions" => "اسئلة",
+"Work" => "العمل",
+"Does not repeat" => "لا يعاد",
+"Daily" => "يومي",
+"Weekly" => "أسبوعي",
+"Every Weekday" => "كل نهاية الأسبوع",
+"Bi-Weekly" => "كل اسبوعين",
+"Monthly" => "شهري",
+"Yearly" => "سنوي",
+"Not an array" => "ليس صفيف",
+"All day" => "كل النهار",
+"Missing fields" => "خانات خالية من المعلومات",
+"Title" => "عنوان",
+"From Date" => "من تاريخ",
+"From Time" => "إلى تاريخ",
+"To Date" => "إلى يوم",
+"To Time" => "إلى وقت",
+"The event ends before it starts" => "هذا الحدث ينتهي قبل أن يبدأ",
+"There was a database fail" => "خطأ في قاعدة البيانات",
+"Week" => "إسبوع",
+"Month" => "شهر",
+"List" => "قائمة",
+"Today" => "اليوم",
+"Calendars" => "الجداول الزمنية",
+"There was a fail, while parsing the file." => "لم يتم قراءة الملف بنجاح.",
+"Choose active calendars" => "إختر الجدول الزمني الرئيسي",
+"New Calendar" => "جدول زمني جديد",
+"CalDav Link" => "وصلة CalDav",
+"Download" => "تحميل",
+"Edit" => "تعديل",
+"Delete" => "حذف",
+"New calendar" => "جدول زمني جديد",
+"Edit calendar" => "عادل الجدول الزمني",
+"Displayname" => "الاسم المرئي",
+"Active" => "حالي",
+"Calendar color" => "لون الجدول الزمني",
+"Save" => "إحفظ",
+"Submit" => "أرسل",
+"Cancel" => "إلغاء",
+"Edit an event" => "عادل حدث",
+"Export" => "تصدير المعلومات",
+"Title of the Event" => "عنوان الحدث",
+"Category" => "فئة",
+"Select category" => "اختر الفئة",
+"All Day Event" => "حدث في يوم كامل",
+"From" => "من",
+"To" => "إلى",
+"Advanced options" => "خيارات متقدمة",
+"Repeat" => "إعادة",
+"Location" => "مكان",
+"Location of the Event" => "مكان الحدث",
+"Description" => "مواصفات",
+"Description of the Event" => "وصف الحدث",
+"Please choose the calendar" => "الرجاء إختر الجدول الزمني",
+"Import" => "إدخال",
+"Create a new event" => "إضافة حدث جديد",
+"Timezone" => "المنطقة الزمنية",
+"Timeformat" => "شكل الوقت",
+"24h" => "24 ساعة",
+"12h" => "12 ساعة",
+"Calendar CalDAV syncing address:" => "عنوان لتحديث ال CalDAV الجدول الزمني"
+);
diff --git a/apps/calendar/l10n/bg_BG.php b/apps/calendar/l10n/bg_BG.php
index 0c0b8604fb6..47610dcf67a 100644
--- a/apps/calendar/l10n/bg_BG.php
+++ b/apps/calendar/l10n/bg_BG.php
@@ -1,5 +1,4 @@
<?php $TRANSLATIONS = array(
-"Authentication error" => "Проблем с идентификацията",
"Timezone changed" => "Часовата зона е сменена",
"Invalid request" => "Невалидна заявка",
"Calendar" => "Календар",
@@ -11,50 +10,11 @@
"Monthly" => "Месечно",
"Yearly" => "Годишно",
"All day" => "Всички дни",
-"Sunday" => "Неделя",
-"Monday" => "Понеделник",
-"Tuesday" => "Вторник",
-"Wednesday" => "Сряда",
-"Thursday" => "Четвъртък",
-"Friday" => "Петък",
-"Saturday" => "Събота",
-"Sun." => "Нед.",
-"Mon." => "Пон.",
-"Tue." => "Втр.",
-"Wed." => "Сря.",
-"Thu." => "Чет.",
-"Fri." => "Пет.",
-"Sat." => "Съб.",
-"January" => "Януари",
-"February" => "Февруари",
-"March" => "Март",
-"April" => "Април",
-"May" => "Май",
-"June" => "Юни",
-"July" => "Юли",
-"August" => "Август",
-"September" => "Септември",
-"October" => "Октомври",
-"November" => "Ноември",
-"December" => "Декември",
-"Jan." => "Ян.",
-"Feb." => "Фв.",
-"Mar." => "Март",
-"Apr." => "Апр.",
-"Jun." => "Юни",
-"Jul." => "Юли",
-"Aug." => "Авг.",
-"Sep." => "Сеп.",
-"Oct." => "Окт.",
-"Nov." => "Ное.",
-"Dec." => "Дек.",
+"Title" => "Заглавие",
"Week" => "Седмица",
-"Weeks" => "Седмици",
-"Day" => "Ден",
"Month" => "Месец",
"Today" => "Днес",
"Calendars" => "Календари",
-"Time" => "Час",
"There was a fail, while parsing the file." => "Възникна проблем с разлистването на файла.",
"Choose active calendars" => "Изберете активен календар",
"Download" => "Изтегляне",
@@ -62,22 +22,19 @@
"Edit calendar" => "Промени календар",
"Displayname" => "Екранно име",
"Active" => "Активен",
-"Description" => "Описание",
"Calendar color" => "Цвят на календара",
"Submit" => "Продължи",
"Edit an event" => "Промяна на събитие",
-"Title" => "Заглавие",
"Title of the Event" => "Наименование",
-"Location" => "Локация",
-"Location of the Event" => "Локация",
"Category" => "Категория",
"All Day Event" => "Целодневно събитие",
"From" => "От",
"To" => "До",
"Repeat" => "Повтори",
-"Attendees" => "Присъстващи",
+"Location" => "Локация",
+"Location of the Event" => "Локация",
+"Description" => "Описание",
"Description of the Event" => "Описание",
-"Close" => "Затвори",
"Create a new event" => "Ново събитие",
"Timezone" => "Часова зона"
);
diff --git a/apps/calendar/l10n/ca.php b/apps/calendar/l10n/ca.php
index 13affe320f0..19934baa0bd 100644
--- a/apps/calendar/l10n/ca.php
+++ b/apps/calendar/l10n/ca.php
@@ -1,8 +1,24 @@
<?php $TRANSLATIONS = array(
-"Authentication error" => "Error d'autenticació",
+"New Timezone:" => "Nova zona horària:",
"Timezone changed" => "La zona horària ha canviat",
"Invalid request" => "Sol.licitud no vàlida",
"Calendar" => "Calendari",
+"Wrong calendar" => "Calendari erroni",
+"Birthday" => "Aniversari",
+"Business" => "Feina",
+"Call" => "Trucada",
+"Clients" => "Clients",
+"Deliverer" => "Remitent",
+"Holidays" => "Vacances",
+"Ideas" => "Idees",
+"Journey" => "Viatge",
+"Jubilee" => "Sant",
+"Meeting" => "Reunió",
+"Other" => "Altres",
+"Personal" => "Personal",
+"Projects" => "Projectes",
+"Questions" => "Preguntes",
+"Work" => "Feina",
"Does not repeat" => "No es repeteix",
"Daily" => "Diari",
"Weekly" => "Mensual",
@@ -10,21 +26,25 @@
"Bi-Weekly" => "Bisetmanalment",
"Monthly" => "Mensualment",
"Yearly" => "Cada any",
-"All day" => "Tot el dia",
-"Sunday" => "Diumenge",
+"never" => "mai",
+"by occurrences" => "per aparicions",
+"by date" => "per data",
+"by monthday" => "per dia del mes",
+"by weekday" => "per dia de la setmana",
"Monday" => "Dilluns",
"Tuesday" => "Dimarts",
"Wednesday" => "Dimecres",
"Thursday" => "Dijous",
"Friday" => "Divendres",
"Saturday" => "Dissabte",
-"Sun." => "dg.",
-"Mon." => "dl.",
-"Tue." => "dm.",
-"Wed." => "dc.",
-"Thu." => "dj.",
-"Fri." => "dv.",
-"Sat." => "ds.",
+"Sunday" => "Diumenge",
+"events week of month" => "esdeveniments la setmana del mes",
+"first" => "primer",
+"second" => "segon",
+"third" => "tercer",
+"fourth" => "quart",
+"fifth" => "cinquè",
+"last" => "últim",
"January" => "Gener",
"February" => "Febrer",
"March" => "Març",
@@ -37,10 +57,40 @@
"October" => "Octubre",
"November" => "Novembre",
"December" => "Desembre",
+"by events date" => "per data d'esdeveniments",
+"by yearday(s)" => "per ahir(s)",
+"by weeknumber(s)" => "per número(s) de la setmana",
+"by day and month" => "per dia del mes",
+"Not an array" => "No és una sèrie",
+"Date" => "Data",
+"Cal." => "Cal.",
+"All day" => "Tot el dia",
+"Missing fields" => "Els camps que falten",
+"Title" => "Títol",
+"From Date" => "Des de la data",
+"From Time" => "Des de l'hora",
+"To Date" => "Fins a la data",
+"To Time" => "Fins a l'hora",
+"The event ends before it starts" => "L'esdeveniment acaba abans que comenci",
+"There was a database fail" => "Hi ha un error de base de dades",
+"Week" => "Setmana",
+"Month" => "Mes",
+"List" => "Llista",
+"Today" => "Avui",
+"Calendars" => "Calendaris",
+"There was a fail, while parsing the file." => "S'ha produït un error en analitzar el fitxer.",
+"Sun." => "dg.",
+"Mon." => "dl.",
+"Tue." => "dt.",
+"Wed." => "dc.",
+"Thu." => "dj.",
+"Fri." => "dv.",
+"Sat." => "ds.",
"Jan." => "gen.",
"Feb." => "febr.",
"Mar." => "març",
"Apr." => "abr.",
+"May." => "maig",
"Jun." => "juny",
"Jul." => "jul.",
"Aug." => "ag.",
@@ -48,36 +98,52 @@
"Oct." => "oct.",
"Nov." => "nov.",
"Dec." => "des.",
-"Week" => "Setmana",
-"Weeks" => "Setmanes",
-"Day" => "Dia",
-"Month" => "Mes",
-"Today" => "Avui",
-"Calendars" => "Calendaris",
-"Time" => "Hora",
-"There was a fail, while parsing the file." => "S'ha produït un error en analitzar el fitxer.",
"Choose active calendars" => "Seleccioneu calendaris actius",
+"New Calendar" => "Calendari nou",
+"CalDav Link" => "Enllaç CalDav",
"Download" => "Baixa",
"Edit" => "Edita",
+"Delete" => "Esborra",
+"New calendar" => "Calendari nou",
"Edit calendar" => "Edita el calendari",
"Displayname" => "Mostra el nom",
"Active" => "Actiu",
-"Description" => "Descripció",
"Calendar color" => "Color del calendari",
-"Submit" => "Tramet",
+"Save" => "Desa",
+"Submit" => "Envia",
+"Cancel" => "Cancel·la",
"Edit an event" => "Edició d'un esdeveniment",
-"Title" => "Títol",
+"Export" => "Exporta",
"Title of the Event" => "Títol de l'esdeveniment",
-"Location" => "Ubicació",
-"Location of the Event" => "Ubicació de l'esdeveniment",
"Category" => "Categoria",
+"Select category" => "Seleccioneu categoria",
"All Day Event" => "Esdeveniment de tot el dia",
"From" => "Des de",
"To" => "Fins a",
-"Repeat" => "Repeteix",
-"Attendees" => "Assistents",
+"Advanced options" => "Opcions avançades",
+"Repeat" => "Repetició",
+"Advanced" => "Avançat",
+"Select weekdays" => "Dies de la setmana seleccionats",
+"Select days" => "Seleccionar dies",
+"and the events day of year." => "i dies d'esdeveniment de l'any.",
+"and the events day of month." => "i dies d'esdeveniment del mes.",
+"Select months" => "Seleccionar mesos",
+"Select weeks" => "Seleccionar setmanes",
+"and the events week of year." => "i setmanes d'esdeveniment de l'any.",
+"Interval" => "Interval",
+"End" => "Final",
+"occurrences" => "aparicions",
+"Location" => "Ubicació",
+"Location of the Event" => "Ubicació de l'esdeveniment",
+"Description" => "Descripció",
"Description of the Event" => "Descripció de l'esdeveniment",
-"Close" => "Tanca",
+"Please choose the calendar" => "Escolliu el calendari",
+"Import" => "Importa",
"Create a new event" => "Crea un nou esdeveniment",
-"Timezone" => "Zona horària"
+"Timezone" => "Zona horària",
+"Check always for changes of the timezone" => "Comprova sempre en els canvis de zona horària",
+"Timeformat" => "Format de temps",
+"24h" => "24",
+"12h" => "12h",
+"Calendar CalDAV syncing address:" => "Adreça de sincronització del calendari CalDAV:"
);
diff --git a/apps/calendar/l10n/cs_CZ.php b/apps/calendar/l10n/cs_CZ.php
new file mode 100644
index 00000000000..f55cd0f01ae
--- /dev/null
+++ b/apps/calendar/l10n/cs_CZ.php
@@ -0,0 +1,149 @@
+<?php $TRANSLATIONS = array(
+"New Timezone:" => "Nová časová zóna:",
+"Timezone changed" => "Časová zóna byla změněna",
+"Invalid request" => "Chybný požadavek",
+"Calendar" => "Kalendář",
+"Wrong calendar" => "Nesprávný kalendář",
+"Birthday" => "Narozeniny",
+"Business" => "Pracovní",
+"Call" => "Volat",
+"Clients" => "Klienti",
+"Deliverer" => "Doručovatel",
+"Holidays" => "Prázdniny",
+"Ideas" => "Nápady",
+"Journey" => "Cesta",
+"Jubilee" => "Jubileum",
+"Meeting" => "Schůzka",
+"Other" => "Další",
+"Personal" => "Osobní",
+"Projects" => "Projekty",
+"Questions" => "Dotazy",
+"Work" => "Práce",
+"Does not repeat" => "Neopakuje se",
+"Daily" => "Denně",
+"Weekly" => "Týdně",
+"Every Weekday" => "Každý všední den",
+"Bi-Weekly" => "Jednou za dva týdny",
+"Monthly" => "Měsíčně",
+"Yearly" => "Ročně",
+"never" => "nikdy",
+"by occurrences" => "podle výskytu",
+"by date" => "podle data",
+"by monthday" => "podle dne v měsíci",
+"by weekday" => "podle dne v týdnu",
+"Monday" => "Pondělí",
+"Tuesday" => "Úterý",
+"Wednesday" => "Středa",
+"Thursday" => "Čtvrtek",
+"Friday" => "Pátek",
+"Saturday" => "Sobota",
+"Sunday" => "Neděle",
+"events week of month" => "týdenní události v měsíci",
+"first" => "první",
+"second" => "druhý",
+"third" => "třetí",
+"fourth" => "čtvrtý",
+"fifth" => "pátý",
+"last" => "poslední",
+"January" => "Leden",
+"February" => "Únor",
+"March" => "Břeyen",
+"April" => "Duben",
+"May" => "Květen",
+"June" => "Červen",
+"July" => "Červenec",
+"August" => "Srpen",
+"September" => "Září",
+"October" => "Říjen",
+"November" => "Listopad",
+"December" => "Prosinec",
+"by events date" => "podle data události",
+"by yearday(s)" => "po dni (dnech)",
+"by weeknumber(s)" => "podle čísel týdnů",
+"by day and month" => "podle dne a měsíce",
+"Not an array" => "Není zařazeno",
+"Date" => "Datum",
+"Cal." => "Kal.",
+"All day" => "Celý den",
+"Missing fields" => "Chybějící pole",
+"Title" => "Název",
+"From Date" => "Od data",
+"From Time" => "Od",
+"To Date" => "Do data",
+"To Time" => "Do",
+"The event ends before it starts" => "Akce končí před zahájením",
+"There was a database fail" => "Chyba v databázi",
+"Week" => "týden",
+"Month" => "měsíc",
+"List" => "Seznam",
+"Today" => "dnes",
+"Calendars" => "Kalendáře",
+"There was a fail, while parsing the file." => "Chyba při převodu souboru",
+"Sun." => "Ne",
+"Mon." => "Po",
+"Tue." => "Út",
+"Wed." => "St",
+"Thu." => "Čt",
+"Fri." => "Pá",
+"Sat." => "So",
+"Jan." => "Led.",
+"Feb." => "Úno.",
+"Mar." => "Bře.",
+"Apr." => "Dub.",
+"May." => "Kvě.",
+"Jun." => "Čer.",
+"Jul." => "Čec.",
+"Aug." => "Srp.",
+"Sep." => "Zář.",
+"Oct." => "Říj.",
+"Nov." => "Lis.",
+"Dec." => "Pro.",
+"Choose active calendars" => "Vybrat aktivní kalendář",
+"New Calendar" => "Nový kalendář",
+"CalDav Link" => "Odkaz CalDav",
+"Download" => "Stáhnout",
+"Edit" => "Editovat",
+"Delete" => "Odstranit",
+"New calendar" => "Nový kalendář",
+"Edit calendar" => "Editovat kalendář",
+"Displayname" => "Zobrazené jméno",
+"Active" => "Aktivní",
+"Calendar color" => "Barva kalendáře",
+"Save" => "Uložit",
+"Submit" => "Potvrdit",
+"Cancel" => "Storno",
+"Edit an event" => "Editovat událost",
+"Export" => "Export",
+"Title of the Event" => "Název události",
+"Category" => "Kategorie",
+"Select category" => "Vyberte kategorii",
+"All Day Event" => "Celodenní událost",
+"From" => "od",
+"To" => "do",
+"Advanced options" => "Pokročilé volby",
+"Repeat" => "Opakovat",
+"Advanced" => "Pokročilé",
+"Select weekdays" => "Vybrat dny v týdnu",
+"Select days" => "Vybrat dny",
+"and the events day of year." => "a denní události v roce",
+"and the events day of month." => "a denní události v měsíci",
+"Select months" => "Vybrat měsíce",
+"Select weeks" => "Vybrat týdny",
+"and the events week of year." => "a týden s událostmi v roce",
+"Interval" => "Interval",
+"End" => "Konec",
+"occurrences" => "výskyty",
+"Location" => "Umístění",
+"Location of the Event" => "Místo konání události",
+"Description" => "Popis",
+"Description of the Event" => "Popis události",
+"Please choose the calendar" => "Zvolte prosím kalendář",
+"Import" => "Import",
+"Create a new event" => "Vytvořit novou událost",
+"Timezone" => "Časové pásmo",
+"Check always for changes of the timezone" => "Zkontrolujte vždy změny časového pásma",
+"Timeformat" => "Formát času",
+"24h" => "24h",
+"12h" => "12h",
+"Calendar CalDAV syncing address:" => "Adresa pro synchronizaci kalendáře CalDAV:"
+);
diff --git a/apps/calendar/l10n/da.php b/apps/calendar/l10n/da.php
index 46af5cb43ab..b43c89a6dd3 100644
--- a/apps/calendar/l10n/da.php
+++ b/apps/calendar/l10n/da.php
@@ -1,13 +1,14 @@
<?php $TRANSLATIONS = array(
-"Authentication error" => "Godkendelsesfejl",
-"Wrong calendar" => "Forkert kalender",
+"New Timezone:" => "Ny tidszone:",
"Timezone changed" => "Tidszone ændret",
"Invalid request" => "Ugyldig forespørgsel",
"Calendar" => "Kalender",
+"Wrong calendar" => "Forkert kalender",
"Birthday" => "Fødselsdag",
"Business" => "Forretning",
"Call" => "Ring",
"Clients" => "Kunder",
+"Deliverer" => "Leverance",
"Holidays" => "Helligdage",
"Ideas" => "Ideér",
"Journey" => "Rejse",
@@ -22,24 +23,27 @@
"Daily" => "Daglig",
"Weekly" => "Ugentlig",
"Every Weekday" => "Alle hverdage",
-"Bi-Weekly" => "Bi-Ugentligt",
-"Monthly" => "Månedlige",
+"Bi-Weekly" => "Hver anden uge",
+"Monthly" => "Månedlig",
"Yearly" => "Årlig",
-"All day" => "Hele dagen",
-"Sunday" => "Søndag",
+"never" => "aldrig",
+"by occurrences" => "efter forekomster",
+"by date" => "efter dato",
+"by monthday" => "efter dag i måneden",
+"by weekday" => "efter ugedag",
"Monday" => "Mandag",
"Tuesday" => "Tirsdag",
"Wednesday" => "Onsdag",
"Thursday" => "Torsdag",
"Friday" => "Fredag",
"Saturday" => "Lørdag",
-"Sun." => "Søn.",
-"Mon." => "Man.",
-"Tue." => "Tir.",
-"Wed." => "Ons.",
-"Thu." => "Tor.",
-"Fri." => "Fre.",
-"Sat." => "Lør.",
+"Sunday" => "øndag",
+"first" => "første",
+"second" => "anden",
+"third" => "tredje",
+"fourth" => "fjerde",
+"fifth" => "femte",
+"last" => "sidste",
"January" => "Januar",
"February" => "Februar",
"March" => "Marts",
@@ -52,6 +56,34 @@
"October" => "Oktober",
"November" => "November",
"December" => "December",
+"by events date" => "efter begivenheders dato",
+"by weeknumber(s)" => "efter ugenummer/-numre",
+"by day and month" => "efter dag og måned",
+"Not an array" => "Ikke en array",
+"Date" => "Dato",
+"Cal." => "Kal.",
+"All day" => "Hele dagen",
+"Missing fields" => "Manglende felter",
+"Title" => "Titel",
+"From Date" => "Fra dato",
+"From Time" => "Fra tidspunkt",
+"To Date" => "Til dato",
+"To Time" => "Til tidspunkt",
+"The event ends before it starts" => "Begivenheden slutter, inden den begynder",
+"There was a database fail" => "Der var en fejl i databasen",
+"Week" => "Uge",
+"Month" => "Måned",
+"List" => "Liste",
+"Today" => "I dag",
+"Calendars" => "Kalendere",
+"There was a fail, while parsing the file." => "Der opstod en fejl under gennemlæsning af filen.",
+"Sun." => "Søn.",
+"Mon." => "Man.",
+"Tue." => "Tir.",
+"Wed." => "Ons.",
+"Thu." => "Tor.",
+"Fri." => "Fre.",
+"Sat." => "Lør.",
"Jan." => "Jan.",
"Feb." => "Feb.",
"Mar." => "Mar.",
@@ -60,49 +92,53 @@
"Jun." => "Jun.",
"Jul." => "Jul.",
"Aug." => "Aug.",
-"Sep." => "Sep.",
-"Oct." => "Oct.",
+"Sep." => "Sept.",
+"Oct." => "Okt.",
"Nov." => "Nov.",
"Dec." => "Dec.",
-"Week" => "Uge",
-"Weeks" => "Uger",
-"More before {startdate}" => "Mere før {startdate}",
-"More after {enddate}" => "Mere efter {enddate}",
-"Day" => "Dag",
-"Month" => "Måned",
-"List" => "Liste",
-"Today" => "I dag",
-"Calendars" => "Kalendere",
-"Time" => "Tid",
-"There was a fail, while parsing the file." => "Der opstod en fejl under gennemlæsning af filen.",
-"Choose active calendars" => "Vælg aktiv kalendere",
+"Choose active calendars" => "Vælg aktive kalendere",
"New Calendar" => "Ny Kalender",
-"CalDav Link" => "CalDav Link",
+"CalDav Link" => "CalDav-link",
"Download" => "Hent",
"Edit" => "Rediger",
+"Delete" => "Slet",
"New calendar" => "Ny kalender",
"Edit calendar" => "Rediger kalender",
-"Displayname" => "Visningsnavn",
+"Displayname" => "Vist navn",
"Active" => "Aktiv",
-"Description" => "Beskrivelse",
-"Calendar color" => "Kalender farve",
+"Calendar color" => "Kalenderfarve",
"Save" => "Gem",
"Submit" => "Send",
-"Cancel" => "Annullér",
+"Cancel" => "Annuller",
"Edit an event" => "Redigér en begivenhed",
-"Title" => "Titel",
+"Export" => "Eksporter",
"Title of the Event" => "Titel på begivenheden",
-"Location" => "Sted",
-"Location of the Event" => "Placering af begivenheden",
"Category" => "Kategori",
"Select category" => "Vælg kategori",
"All Day Event" => "Heldagsarrangement",
"From" => "Fra",
"To" => "Til",
+"Advanced options" => "Avancerede indstillinger",
"Repeat" => "Gentag",
-"Attendees" => "Deltagere",
+"Advanced" => "Avanceret",
+"Select weekdays" => "Vælg ugedage",
+"Select days" => "Vælg dage",
+"Select months" => "Vælg måneder",
+"Select weeks" => "Vælg uger",
+"Interval" => "Interval",
+"End" => "Afslutning",
+"occurrences" => "forekomster",
+"Location" => "Sted",
+"Location of the Event" => "Placering af begivenheden",
+"Description" => "Beskrivelse",
"Description of the Event" => "Beskrivelse af begivenheden",
-"Close" => "Luk",
+"Please choose the calendar" => "Vælg venligst kalender",
+"Import" => "Importer",
"Create a new event" => "Opret en ny begivenhed",
-"Timezone" => "Tidszone"
+"Timezone" => "Tidszone",
+"Check always for changes of the timezone" => "Check altid efter ændringer i tidszone",
+"Timeformat" => "Tidsformat",
+"24h" => "24T",
+"12h" => "12T",
+"Calendar CalDAV syncing address:" => "Synkroniseringsadresse til CalDAV:"
);
diff --git a/apps/calendar/l10n/de.php b/apps/calendar/l10n/de.php
index 44bab2a5c35..617fc2a2ff0 100644
--- a/apps/calendar/l10n/de.php
+++ b/apps/calendar/l10n/de.php
@@ -1,9 +1,9 @@
<?php $TRANSLATIONS = array(
-"Authentication error" => "Anmeldefehler",
-"Wrong calendar" => "Falscher Kalender",
+"New Timezone:" => "Neue Zeitzone:",
"Timezone changed" => "Zeitzone geändert",
"Invalid request" => "Anfragefehler",
"Calendar" => "Kalender",
+"Wrong calendar" => "Falscher Kalender",
"Birthday" => "Geburtstag",
"Business" => "Geschäftlich",
"Call" => "Anruf",
@@ -26,22 +26,25 @@
"Bi-Weekly" => "jede zweite Woche",
"Monthly" => "monatlich",
"Yearly" => "jährlich",
-"Not an array" => "Kein Feld",
-"All day" => "Ganztags",
-"Sunday" => "Sonntag",
+"never" => "niemals",
+"by occurrences" => "nach Vorkommen",
+"by date" => "nach Datum",
+"by monthday" => "an einem Monatstag",
+"by weekday" => "an einem Wochentag",
"Monday" => "Montag",
"Tuesday" => "Dienstag",
"Wednesday" => "Mittwoch",
"Thursday" => "Donnerstag",
"Friday" => "Freitag",
"Saturday" => "Samstag",
-"Sun." => "Son.",
-"Mon." => "Mon.",
-"Tue." => "Die.",
-"Wed." => "Mit.",
-"Thu." => "Don.",
-"Fri." => "Fre.",
-"Sat." => "Sam.",
+"Sunday" => "Sonntag",
+"events week of month" => "Woche des Monats vom Termin",
+"first" => "erste",
+"second" => "zweite",
+"third" => "dritte",
+"fourth" => "vierte",
+"fifth" => "fünfte",
+"last" => "letzte",
"January" => "Januar",
"February" => "Februar",
"March" => "März",
@@ -54,57 +57,74 @@
"October" => "Oktober",
"November" => "November",
"December" => "Dezember",
-"Jan." => "Jan.",
-"Feb." => "Feb.",
-"Mar." => "Mär.",
-"Apr." => "Apr.",
-"May." => "Mai",
-"Jun." => "Jun.",
-"Jul." => "Jul.",
-"Aug." => "Aug.",
-"Sep." => "Sep.",
-"Oct." => "Okt.",
-"Nov." => "Nov.",
-"Dec." => "Dez.",
+"by events date" => "bei Tag des Termins",
+"by yearday(s)" => "an einem Tag des Jahres",
+"by weeknumber(s)" => "an einer Wochennummer",
+"by day and month" => "an einer Tag und Monats Kombination",
+"Not an array" => "Kein Feld",
+"Date" => "Datum",
+"Cal." => "Kal.",
+"All day" => "Ganztags",
+"Missing fields" => "fehlende Felder",
+"Title" => "Titel",
+"From Date" => "Startdatum",
+"From Time" => "Startzeit",
+"To Date" => "Enddatum",
+"To Time" => "Endzeit",
+"The event ends before it starts" => "Der Termin hört auf, bevor er angefangen hat.",
+"There was a database fail" => "Datenbankfehler",
"Week" => "Woche",
-"Weeks" => "Wochen",
-"More before {startdate}" => "Mehr vor {startdate}",
-"More after {enddate}" => "Mehr nach {enddate}",
-"Day" => "Tag",
"Month" => "Monat",
"List" => "Liste",
"Today" => "Heute",
"Calendars" => "Kalender",
-"Time" => "Zeit",
"There was a fail, while parsing the file." => "Fehler beim Einlesen der Datei.",
"Choose active calendars" => "Aktive Kalender wählen",
"New Calendar" => "Neuer Kalender",
"CalDav Link" => "CalDAV-Link",
"Download" => "Herunterladen",
"Edit" => "Bearbeiten",
+"Delete" => "Löschen",
"New calendar" => "Neuer Kalender",
"Edit calendar" => "Kalender bearbeiten",
"Displayname" => "Anzeigename",
"Active" => "Aktiv",
-"Description" => "Beschreibung",
"Calendar color" => "Kalenderfarbe",
"Save" => "Speichern",
"Submit" => "Bestätigen",
"Cancel" => "Abbrechen",
"Edit an event" => "Ereignis bearbeiten",
-"Title" => "Titel",
+"Export" => "Exportieren",
"Title of the Event" => "Name",
-"Location" => "Ort",
-"Location of the Event" => "Ort",
"Category" => "Kategorie",
"Select category" => "Kategorie auswählen",
"All Day Event" => "Ganztägiges Ereignis",
"From" => "von",
"To" => "bis",
+"Advanced options" => "Erweiterte Optionen",
"Repeat" => "wiederholen",
-"Attendees" => "Teilnehmer",
+"Advanced" => "Erweitert",
+"Select weekdays" => "Wochentage auswählen",
+"Select days" => "Tage auswählen",
+"and the events day of year." => "und den Tag des Jahres vom Termin",
+"and the events day of month." => "und den Tag des Monats vom Termin",
+"Select months" => "Monate auswählen",
+"Select weeks" => "Wochen auswählen",
+"and the events week of year." => "und den Tag des Jahres vom Termin",
+"Interval" => "Intervall",
+"End" => "Ende",
+"occurrences" => "Vorkommen",
+"Location" => "Ort",
+"Location of the Event" => "Ort",
+"Description" => "Beschreibung",
"Description of the Event" => "Beschreibung",
-"Close" => "Schließen",
+"Please choose the calendar" => "Bitte wählen Sie den Kalender.",
+"Import" => "Importieren",
"Create a new event" => "Neues Ereignis",
-"Timezone" => "Zeitzone"
+"Timezone" => "Zeitzone",
+"Check always for changes of the timezone" => "immer die Zeitzone überprüfen",
+"Timeformat" => "Zeitformat",
+"24h" => "24h",
+"12h" => "12h",
+"Calendar CalDAV syncing address:" => "Kalender CalDAV Synchronisationsadresse:"
);
diff --git a/apps/calendar/l10n/el.php b/apps/calendar/l10n/el.php
index e2c26502cef..edc2635b8c7 100644
--- a/apps/calendar/l10n/el.php
+++ b/apps/calendar/l10n/el.php
@@ -1,16 +1,19 @@
<?php $TRANSLATIONS = array(
-"Authentication error" => "Σφάλμα ταυτοποίησης",
-"Wrong calendar" => "Λάθος ημερολόγιο",
+"New Timezone:" => "Νέα ζώνη ώρας:",
"Timezone changed" => "Η ζώνη ώρας άλλαξε",
"Invalid request" => "Μη έγκυρο αίτημα",
"Calendar" => "Ημερολόγιο",
+"Wrong calendar" => "Λάθος ημερολόγιο",
"Birthday" => "Γενέθλια",
"Business" => "Επιχείρηση",
"Call" => "Κλήση",
"Clients" => "Πελάτες",
+"Deliverer" => "Παραδώσας",
"Holidays" => "Διακοπές",
"Ideas" => "Ιδέες",
"Journey" => "Ταξίδι",
+"Jubilee" => "Γιορτή",
+"Meeting" => "Συνάντηση",
"Other" => "Άλλο",
"Personal" => "Προσωπικό",
"Projects" => "Έργα",
@@ -23,27 +26,30 @@
"Bi-Weekly" => "Δύο φορές την εβδομάδα",
"Monthly" => "Μηνιαία",
"Yearly" => "Ετήσια",
-"Not an array" => "Δεν είναι μια σειρά",
-"All day" => "Ολοήμερο",
-"Sunday" => "Κυριακή",
+"never" => "ποτέ",
+"by occurrences" => "κατά συχνότητα πρόσβασης",
+"by date" => "κατά ημερομηνία",
+"by monthday" => "κατά ημέρα",
+"by weekday" => "κατά εβδομάδα",
"Monday" => "Δευτέρα",
"Tuesday" => "Τρίτη",
"Wednesday" => "Τετάρτη",
"Thursday" => "Πέμπτη",
"Friday" => "Παρασκευή",
"Saturday" => "Σάββατο",
-"Sun." => "Κυρ.",
-"Mon." => "Δευτ.",
-"Tue." => "Τρ.",
-"Wed." => "Τετ.",
-"Thu." => "Πέμ.",
-"Fri." => "Παρ.",
-"Sat." => "Σάβ.",
+"Sunday" => "Κυριακή",
+"events week of month" => "συμβάντα της εβδομάδας του μήνα",
+"first" => "πρώτο",
+"second" => "δεύτερο",
+"third" => "τρίτο",
+"fourth" => "τέταρτο",
+"fifth" => "πέμπτο",
+"last" => "τελευταίο",
"January" => "Ιανουάριος",
"February" => "Φεβρουάριος",
"March" => "Μάρτιος",
"April" => "Απρίλιος",
-"May" => "Μάιος",
+"May" => "Μάϊος",
"June" => "Ιούνιος",
"July" => "Ιούλιος",
"August" => "Αύγουστος",
@@ -51,52 +57,93 @@
"October" => "Οκτώβριος",
"November" => "Νοέμβριος",
"December" => "Δεκέμβριος",
+"by events date" => "κατά ημερομηνία συμβάντων",
+"by yearday(s)" => "κατά ημέρα(ες) του έτους",
+"by weeknumber(s)" => "κατά εβδομάδα(ες)",
+"by day and month" => "κατά ημέρα και μήνα",
+"Not an array" => "Δεν είναι μια σειρά",
+"Date" => "Ημερομηνία",
+"Cal." => "Ημερ.",
+"All day" => "Ολοήμερο",
+"Missing fields" => "Πεδία που λείπουν",
+"Title" => "Τίτλος",
+"From Date" => "Από Ημερομηνία",
+"From Time" => "Από Ώρα",
+"To Date" => "Έως Ημερομηνία",
+"To Time" => "Έως Ώρα",
+"The event ends before it starts" => "Το γεγονός ολοκληρώνεται πριν από την έναρξή του",
+"There was a database fail" => "Υπήρξε σφάλμα στη βάση δεδομένων",
+"Week" => "Εβδομάδα",
+"Month" => "Μήνας",
+"List" => "Λίστα",
+"Today" => "Σήμερα",
+"Calendars" => "Ημερολόγια",
+"There was a fail, while parsing the file." => "Υπήρξε μια αποτυχία, κατά την αξιολόγηση του αρχείου.",
+"Sun." => "Κυρ.",
+"Mon." => "Δευτ.",
+"Tue." => "Τρι.",
+"Wed." => "Τετ.",
+"Thu." => "Πέμ.",
+"Fri." => "Παρ.",
+"Sat." => "Σαβ.",
"Jan." => "Ιαν.",
"Feb." => "Φεβ.",
"Mar." => "Μαρ.",
"Apr." => "Απρ.",
-"Jun." => "Ιούν.",
-"Jul." => "Ιούλ.",
+"May." => "Μάϊ.",
+"Jun." => "Ιον.",
+"Jul." => "Ιολ.",
"Aug." => "Αύγ.",
"Sep." => "Σεπ.",
"Oct." => "Οκτ.",
-"Nov." => "Νοέ.",
+"Nov." => "Νοε.",
"Dec." => "Δεκ.",
-"Week" => "Εβδομάδα",
-"Weeks" => "Εβδομάδες",
-"Day" => "Ημέρα",
-"Month" => "Μήνας",
-"List" => "Λίστα",
-"Today" => "Σήμερα",
-"Calendars" => "Ημερολόγια",
-"Time" => "Ώρα",
-"There was a fail, while parsing the file." => "Υπήρχε μια αποτυχία, κατά την ανάλυση του αρχείου.",
"Choose active calendars" => "Επιλέξτε τα ενεργά ημερολόγια",
"New Calendar" => "Νέα Ημερολόγιο",
+"CalDav Link" => "Σύνδεση CalDAV",
"Download" => "Λήψη",
"Edit" => "Επεξεργασία",
+"Delete" => "Διαγραφή",
"New calendar" => "Νέο ημερολόγιο",
"Edit calendar" => "Επεξεργασία ημερολογίου",
"Displayname" => "Προβολή ονόματος",
"Active" => "Ενεργό",
-"Description" => "Περιγραφή",
"Calendar color" => "Χρώμα ημερολογίου",
+"Save" => "Αποθήκευση",
"Submit" => "Υποβολή",
"Cancel" => "Ακύρωση",
"Edit an event" => "Επεξεργασία ενός γεγονότος",
-"Title" => "Τίτλος",
+"Export" => "Εξαγωγή",
"Title of the Event" => "Τίτλος συμβάντος",
-"Location" => "Τοποθεσία",
-"Location of the Event" => "Τοποθεσία συμβάντος",
"Category" => "Κατηγορία",
"Select category" => "Επιλέξτε κατηγορία",
"All Day Event" => "Ολοήμερο συμβάν",
"From" => "Από",
"To" => "Έως",
+"Advanced options" => "Επιλογές για προχωρημένους",
"Repeat" => "Επαναλαμβανόμενο",
-"Attendees" => "Παρευρισκόμενοι",
+"Advanced" => "Για προχωρημένους",
+"Select weekdays" => "Επιλογή ημερών εβδομάδας",
+"Select days" => "Επιλογή ημερών",
+"and the events day of year." => "και των ημερών του χρόνου που υπάρχουν συμβάντα.",
+"and the events day of month." => "και των ημερών του μήνα που υπάρχουν συμβάντα.",
+"Select months" => "Επιλογή μηνών",
+"Select weeks" => "Επιλογή εβδομάδων",
+"and the events week of year." => "και των εβδομάδων του χρόνου που υπάρουν συμβάντα.",
+"Interval" => "Διάστημα",
+"End" => "Τέλος",
+"occurrences" => "περιστατικά",
+"Location" => "Τοποθεσία",
+"Location of the Event" => "Τοποθεσία συμβάντος",
+"Description" => "Περιγραφή",
"Description of the Event" => "Περιγραφή του συμβάντος",
-"Close" => "Κλείσιμο",
+"Please choose the calendar" => "Παρακαλώ επιλέξτε το ημερολόγιο",
+"Import" => "Εισαγωγή",
"Create a new event" => "Δημιουργήστε ένα νέο συμβάν",
-"Timezone" => "Ζώνη ώρας"
+"Timezone" => "Ζώνη ώρας",
+"Check always for changes of the timezone" => "Έλεγοχς πάντα για τις αλλαγές της ζώνης ώρας",
+"Timeformat" => "Μορφή ώρας",
+"24h" => "24ω",
+"12h" => "12ω",
+"Calendar CalDAV syncing address:" => "Διεύθυνση για το συγχρονισμού του ημερολογίου CalDAV:"
);
diff --git a/apps/calendar/l10n/eo.php b/apps/calendar/l10n/eo.php
new file mode 100644
index 00000000000..7c1cc97b9ee
--- /dev/null
+++ b/apps/calendar/l10n/eo.php
@@ -0,0 +1,130 @@
+<?php $TRANSLATIONS = array(
+"New Timezone:" => "Nova horzono:",
+"Timezone changed" => "La horozono estas ŝanĝita",
+"Invalid request" => "Nevalida peto",
+"Calendar" => "Kalendaro",
+"Wrong calendar" => "Malĝusta kalendaro",
+"Birthday" => "Naskiĝotago",
+"Business" => "Negoco",
+"Call" => "Voko",
+"Clients" => "Klientoj",
+"Deliverer" => "Livero",
+"Holidays" => "Ferioj",
+"Ideas" => "Ideoj",
+"Journey" => "Vojaĝo",
+"Jubilee" => "Jubileo",
+"Meeting" => "Rendevuo",
+"Other" => "Alia",
+"Personal" => "Persona",
+"Projects" => "Projektoj",
+"Questions" => "Demandoj",
+"Work" => "Laboro",
+"Does not repeat" => "Ĉi tio ne ripetiĝas",
+"Daily" => "Tage",
+"Weekly" => "Semajne",
+"Every Weekday" => "Tage",
+"Bi-Weekly" => "Semajnduope",
+"Monthly" => "Monate",
+"Yearly" => "Jare",
+"never" => "neniam",
+"by occurrences" => "laŭ aperoj",
+"by date" => "laŭ dato",
+"by monthday" => "laŭ monattago",
+"by weekday" => "laŭ semajntago",
+"Monday" => "lundo",
+"Tuesday" => "mardo",
+"Wednesday" => "merkredo",
+"Thursday" => "ĵaŭdo",
+"Friday" => "vendredo",
+"Saturday" => "sabato",
+"Sunday" => "dimanĉo",
+"events week of month" => "la monatsemajno de la okazaĵo",
+"first" => "unua",
+"second" => "dua",
+"third" => "tria",
+"fourth" => "kvara",
+"fifth" => "kvina",
+"last" => "lasta",
+"January" => "Januaro",
+"February" => "Februaro",
+"March" => "Marto",
+"April" => "Aprilo",
+"May" => "Majo",
+"June" => "Junio",
+"July" => "Julio",
+"August" => "Aŭgusto",
+"September" => "Septembro",
+"October" => "Oktobro",
+"November" => "Novembro",
+"December" => "Decembro",
+"by events date" => "laŭ okazaĵdato",
+"by yearday(s)" => "laŭ jartago(j)",
+"by weeknumber(s)" => "laŭ semajnnumero(j)",
+"by day and month" => "laŭ tago kaj monato",
+"Not an array" => "Ĉi tio ne estas tabeltipa",
+"Date" => "Dato",
+"Cal." => "Kal.",
+"All day" => "La tuta tago",
+"Missing fields" => "Mankas iuj kampoj",
+"Title" => "Titolo",
+"From Date" => "ekde la dato",
+"From Time" => "ekde la horo",
+"To Date" => "ĝis la dato",
+"To Time" => "ĝis la horo",
+"The event ends before it starts" => "La okazaĵo finas antaŭ komenci",
+"There was a database fail" => "Datumbaza malsukceso okazis",
+"Week" => "Semajno",
+"Month" => "Monato",
+"List" => "Listo",
+"Today" => "Hodiaŭ",
+"Calendars" => "Kalendaroj",
+"There was a fail, while parsing the file." => "Malsukceso okazis dum analizo de la dosiero.",
+"Choose active calendars" => "Elektu aktivajn kalendarojn",
+"New Calendar" => "Nova kalendaro",
+"CalDav Link" => "CalDav-a ligilo",
+"Download" => "Elŝuti",
+"Edit" => "Redakti",
+"Delete" => "Forigi",
+"New calendar" => "Nova kalendaro",
+"Edit calendar" => "Redakti la kalendaron",
+"Displayname" => "Montrota nomo",
+"Active" => "Aktiva",
+"Calendar color" => "Kalendarokoloro",
+"Save" => "Konservi",
+"Submit" => "Sendi",
+"Cancel" => "Nuligi",
+"Edit an event" => "Redakti okazaĵon",
+"Export" => "Elporti",
+"Title of the Event" => "Okazaĵotitolo",
+"Category" => "Kategorio",
+"Select category" => "Elekti kategorion",
+"All Day Event" => "La tuta tago",
+"From" => "Ekde",
+"To" => "Ĝis",
+"Advanced options" => "Altnivela agordo",
+"Repeat" => "Ripeti",
+"Advanced" => "Altnivelo",
+"Select weekdays" => "Elekti semajntagojn",
+"Select days" => "Elekti tagojn",
+"and the events day of year." => "kaj la jartago de la okazaĵo.",
+"and the events day of month." => "kaj la monattago de la okazaĵo.",
+"Select months" => "Elekti monatojn",
+"Select weeks" => "Elekti semajnojn",
+"and the events week of year." => "kaj la jarsemajno de la okazaĵo.",
+"Interval" => "Intervalo",
+"End" => "Fino",
+"occurrences" => "aperoj",
+"Location" => "Loko",
+"Location of the Event" => "Okazaĵoloko",
+"Description" => "Priskribo",
+"Description of the Event" => "Okazaĵopriskribo",
+"Please choose the calendar" => "Bonvolu elekti kalendaron",
+"Import" => "Enporti",
+"Create a new event" => "Krei okazaĵon",
+"Timezone" => "Horozono",
+"Check always for changes of the timezone" => "Ĉiam kontroli ĉu la horzono ŝanĝiĝis",
+"Timeformat" => "Tempoformo",
+"24h" => "24h",
+"12h" => "12h",
+"Calendar CalDAV syncing address:" => "Adreso de kalendarosinkronigo per CalDAV:"
+);
diff --git a/apps/calendar/l10n/es.php b/apps/calendar/l10n/es.php
index 2d2d1d377ef..5f4097709da 100644
--- a/apps/calendar/l10n/es.php
+++ b/apps/calendar/l10n/es.php
@@ -1,12 +1,14 @@
<?php $TRANSLATIONS = array(
-"Authentication error" => "Error de autentificación",
-"Wrong calendar" => "Calendario incorrecto",
+"New Timezone:" => "Nueva zona horaria:",
"Timezone changed" => "Zona horaria cambiada",
"Invalid request" => "Petición no válida",
"Calendar" => "Calendario",
+"Wrong calendar" => "Calendario incorrecto",
"Birthday" => "Cumpleaños",
"Business" => "Negocios",
+"Call" => "LLamada",
"Clients" => "Clientes",
+"Deliverer" => "Entrega",
"Holidays" => "Feriados",
"Ideas" => "Ideas",
"Journey" => "Viaje",
@@ -14,31 +16,35 @@
"Meeting" => "Reunión",
"Other" => "Otro",
"Personal" => "Personal",
-"Projects" => "Projectos",
+"Projects" => "Proyectos",
"Questions" => "Preguntas",
"Work" => "Trabajo",
"Does not repeat" => "No se repite",
"Daily" => "Diariamente",
"Weekly" => "Semanalmente",
-"Every Weekday" => "Una vez a la semana",
-"Bi-Weekly" => "Dos veces a la semana",
+"Every Weekday" => "Días de semana laboral",
+"Bi-Weekly" => "Cada 2 semanas",
"Monthly" => "Mensualmente",
"Yearly" => "Anualmente",
-"All day" => "Todo el día",
-"Sunday" => "Domingo",
+"never" => "nunca",
+"by occurrences" => "por ocurrencias",
+"by date" => "por fecha",
+"by monthday" => "por día del mes",
+"by weekday" => "por día de la semana",
"Monday" => "Lunes",
"Tuesday" => "Martes",
"Wednesday" => "Miércoles",
"Thursday" => "Jueves",
"Friday" => "Viernes",
"Saturday" => "Sábado",
-"Sun." => "Dom.",
-"Mon." => "Lun.",
-"Tue." => "Mar.",
-"Wed." => "Mie.",
-"Thu." => "Jue.",
-"Fri." => "Vie.",
-"Sat." => "Sáb.",
+"Sunday" => "Domingo",
+"events week of month" => "eventos de la semana del mes",
+"first" => "primer",
+"second" => "segundo",
+"third" => "tercer",
+"fourth" => "cuarto",
+"fifth" => "quinto",
+"last" => "último",
"January" => "Enero",
"February" => "Febrero",
"March" => "Marzo",
@@ -51,10 +57,40 @@
"October" => "Octubre",
"November" => "Noviembre",
"December" => "Diciembre",
+"by events date" => "por fecha de los eventos",
+"by yearday(s)" => "por día(s) del año",
+"by weeknumber(s)" => "por número(s) de semana",
+"by day and month" => "por día y mes",
+"Not an array" => "No es una serie",
+"Date" => "Fecha",
+"Cal." => "Cal.",
+"All day" => "Todo el día",
+"Missing fields" => "Los campos que faltan",
+"Title" => "Título",
+"From Date" => "Desde la fecha",
+"From Time" => "Desde la hora",
+"To Date" => "Hasta la fecha",
+"To Time" => "Hasta la hora",
+"The event ends before it starts" => "El evento termina antes de que comience",
+"There was a database fail" => "Hubo un error en la base de datos",
+"Week" => "Semana",
+"Month" => "Mes",
+"List" => "Lista",
+"Today" => "Hoy",
+"Calendars" => "Calendarios",
+"There was a fail, while parsing the file." => "Hubo un fallo al analizar el archivo.",
+"Sun." => "Dom.",
+"Mon." => "Lun.",
+"Tue." => "Mar.",
+"Wed." => "Mié.",
+"Thu." => "Jue.",
+"Fri." => "Vie.",
+"Sat." => "Sáb.",
"Jan." => "Ene.",
"Feb." => "Feb.",
"Mar." => "Mar.",
"Apr." => "Abr.",
+"May." => "May.",
"Jun." => "Jun.",
"Jul." => "Jul.",
"Aug." => "Ago.",
@@ -62,42 +98,52 @@
"Oct." => "Oct.",
"Nov." => "Nov.",
"Dec." => "Dic.",
-"Week" => "Semana",
-"Weeks" => "Semanas",
-"Day" => "Día",
-"Month" => "Mes",
-"List" => "Lista",
-"Today" => "Hoy",
-"Calendars" => "Calendarios",
-"Time" => "Hora",
-"There was a fail, while parsing the file." => "Hubo un fallo al analizar el archivo.",
"Choose active calendars" => "Elige los calendarios activos",
"New Calendar" => "Nuevo calendario",
+"CalDav Link" => "Enlace a CalDav",
"Download" => "Descargar",
"Edit" => "Editar",
+"Delete" => "Eliminar",
"New calendar" => "Nuevo calendario",
"Edit calendar" => "Editar calendario",
"Displayname" => "Nombre",
"Active" => "Activo",
-"Description" => "Descripción",
"Calendar color" => "Color del calendario",
"Save" => "Guardar",
"Submit" => "Guardar",
"Cancel" => "Cancelar",
"Edit an event" => "Editar un evento",
-"Title" => "Título",
+"Export" => "Exportar",
"Title of the Event" => "Título del evento",
-"Location" => "Lugar",
-"Location of the Event" => "Lugar del Evento",
"Category" => "Categoría",
"Select category" => "Seleccionar categoría",
"All Day Event" => "Todo el día",
"From" => "Desde",
"To" => "Hasta",
+"Advanced options" => "Opciones avanzadas",
"Repeat" => "Repetir",
-"Attendees" => "Asistentes",
+"Advanced" => "Avanzado",
+"Select weekdays" => "Seleccionar días de la semana",
+"Select days" => "Seleccionar días",
+"and the events day of year." => "y el día del año de los eventos.",
+"and the events day of month." => "y el día del mes de los eventos.",
+"Select months" => "Seleccionar meses",
+"Select weeks" => "Seleccionar semanas",
+"and the events week of year." => "y la semana del año de los eventos.",
+"Interval" => "Intervalo",
+"End" => "Fin",
+"occurrences" => "ocurrencias",
+"Location" => "Lugar",
+"Location of the Event" => "Lugar del Evento",
+"Description" => "Descripción",
"Description of the Event" => "Descripción del evento",
-"Close" => "Cerrar",
+"Please choose the calendar" => "Elija el calendario",
+"Import" => "Importar",
"Create a new event" => "Crear un nuevo evento",
-"Timezone" => "Zona horaria"
+"Timezone" => "Zona horaria",
+"Check always for changes of the timezone" => "Comprobar siempre por cambios en la zona horaria",
+"Timeformat" => "Formato de hora",
+"24h" => "24h",
+"12h" => "12h",
+"Calendar CalDAV syncing address:" => "Dirección de sincronización de calendario CalDAV:"
);
diff --git a/apps/calendar/l10n/et_EE.php b/apps/calendar/l10n/et_EE.php
index c66638f2b4c..7144ea763c4 100644
--- a/apps/calendar/l10n/et_EE.php
+++ b/apps/calendar/l10n/et_EE.php
@@ -1,8 +1,23 @@
<?php $TRANSLATIONS = array(
-"Authentication error" => "Autentimise viga",
"Timezone changed" => "Ajavöönd on muudetud",
"Invalid request" => "Vigane päring",
"Calendar" => "Kalender",
+"Wrong calendar" => "Vale kalender",
+"Birthday" => "Sünnipäev",
+"Business" => "Äri",
+"Call" => "Helista",
+"Clients" => "Kliendid",
+"Deliverer" => "Kohaletoimetaja",
+"Holidays" => "Pühad",
+"Ideas" => "Ideed",
+"Journey" => "Reis",
+"Jubilee" => "Juubel",
+"Meeting" => "Kohtumine",
+"Other" => "Muu",
+"Personal" => "Isiklik",
+"Projects" => "Projektid",
+"Questions" => "Küsimused",
+"Work" => "Töö",
"Does not repeat" => "Ei kordu",
"Daily" => "Iga päev",
"Weekly" => "Iga nädal",
@@ -10,74 +25,56 @@
"Bi-Weekly" => "Üle nädala",
"Monthly" => "Igal kuul",
"Yearly" => "Igal aastal",
+"Not an array" => "Pole andmemassiiv",
"All day" => "Kogu päev",
-"Sunday" => "Pühapäev",
-"Monday" => "Esmaspäev",
-"Tuesday" => "Teisipäev",
-"Wednesday" => "Kolmapäev",
-"Thursday" => "Neljapäev",
-"Friday" => "Reede",
-"Saturday" => "Laupäev",
-"Sun." => "Pü.",
-"Mon." => "Esm.",
-"Tue." => "Teisip.",
-"Wed." => "Kolmap.",
-"Thu." => "Neljap.",
-"Fri." => "Reede",
-"Sat." => "Laup.",
-"January" => "Jaanuar",
-"February" => "Veebruar",
-"March" => "Märts",
-"April" => "Aprill",
-"May" => "Mai",
-"June" => "Juuni",
-"July" => "Juuli",
-"August" => "August",
-"September" => "September",
-"October" => "Oktoober",
-"November" => "November",
-"December" => "Detsember",
-"Jan." => "Jan.",
-"Feb." => "Veebr.",
-"Mar." => "Märts",
-"Apr." => "Apr.",
-"Jun." => "Jun.",
-"Jul." => "Jul.",
-"Aug." => "Aug.",
-"Sep." => "Sept.",
-"Oct." => "Okt.",
-"Nov." => "Nov.",
-"Dec." => "Dets.",
+"Missing fields" => "Puuduvad väljad",
+"Title" => "Pealkiri",
+"From Date" => "Alates kuupäevast",
+"From Time" => "Alates kellaajast",
+"To Date" => "Kuni kuupäevani",
+"To Time" => "Kuni kellaajani",
+"The event ends before it starts" => "Üritus lõpeb enne, kui see algab",
+"There was a database fail" => "Tekkis andmebaasi viga",
"Week" => "Nädal",
-"Weeks" => "Nädalat",
-"Day" => "Päev",
"Month" => "Kuu",
+"List" => "Nimekiri",
"Today" => "Täna",
"Calendars" => "Kalendrid",
-"Time" => "Kellaaeg",
"There was a fail, while parsing the file." => "Faili parsimisel tekkis viga.",
"Choose active calendars" => "Vali aktiivsed kalendrid",
+"New Calendar" => "Uus kalender",
+"CalDav Link" => "CalDav Link",
"Download" => "Lae alla",
"Edit" => "Muuda",
+"Delete" => "Kustuta",
+"New calendar" => "Uus kalender",
"Edit calendar" => "Muuda kalendrit",
"Displayname" => "Näidatav nimi",
"Active" => "Aktiivne",
-"Description" => "Kirjeldus",
"Calendar color" => "Kalendri värv",
+"Save" => "Salvesta",
"Submit" => "OK",
+"Cancel" => "Loobu",
"Edit an event" => "Muuda sündmust",
-"Title" => "Pealkiri",
+"Export" => "Ekspordi",
"Title of the Event" => "Sündmuse pealkiri",
-"Location" => "Asukoht",
-"Location of the Event" => "Sündmuse toimumiskoht",
"Category" => "Kategooria",
+"Select category" => "Salvesta kategooria",
"All Day Event" => "Kogu päeva sündmus",
"From" => "Alates",
"To" => "Kuni",
+"Advanced options" => "Lisavalikud",
"Repeat" => "Korda",
-"Attendees" => "Osalejad",
+"Location" => "Asukoht",
+"Location of the Event" => "Sündmuse toimumiskoht",
+"Description" => "Kirjeldus",
"Description of the Event" => "Sündmuse kirjeldus",
-"Close" => "Sulge",
+"Please choose the calendar" => "Palun vali kalender",
+"Import" => "Impordi",
"Create a new event" => "Loo sündmus",
-"Timezone" => "Ajavöönd"
+"Timezone" => "Ajavöönd",
+"Timeformat" => "Aja vorming",
+"24h" => "24h",
+"12h" => "12h",
+"Calendar CalDAV syncing address:" => "Kalendri CalDAV sünkroniseerimise aadress:"
);
diff --git a/apps/calendar/l10n/eu.php b/apps/calendar/l10n/eu.php
new file mode 100644
index 00000000000..be5b3f2203d
--- /dev/null
+++ b/apps/calendar/l10n/eu.php
@@ -0,0 +1,80 @@
+<?php $TRANSLATIONS = array(
+"Timezone changed" => "Ordu-zona aldatuta",
+"Invalid request" => "Baligabeko eskaera",
+"Calendar" => "Egutegia",
+"Wrong calendar" => "Egutegi okerra",
+"Birthday" => "Jaioteguna",
+"Business" => "Negozioa",
+"Call" => "Deia",
+"Clients" => "Bezeroak",
+"Deliverer" => "Banatzailea",
+"Holidays" => "Oporrak",
+"Ideas" => "Ideiak",
+"Journey" => "Bidaia",
+"Jubilee" => "Urteurrena",
+"Meeting" => "Bilera",
+"Other" => "Bestelakoa",
+"Personal" => "Pertsonala",
+"Projects" => "Proiektuak",
+"Questions" => "Galderak",
+"Work" => "Lana",
+"Does not repeat" => "Ez da errepikatzen",
+"Daily" => "Egunero",
+"Weekly" => "Astero",
+"Every Weekday" => "Asteko egun guztietan",
+"Bi-Weekly" => "Bi-Astero",
+"Monthly" => "Hilabetero",
+"Yearly" => "Urtero",
+"Not an array" => "Ez da bektore bat",
+"All day" => "Egun guztia",
+"Missing fields" => "Eremuak faltan",
+"Title" => "Izenburua",
+"From Date" => "Hasierako Data",
+"From Time" => "Hasierako Ordua",
+"To Date" => "Bukaerako Data",
+"To Time" => "Bukaerako Ordua",
+"The event ends before it starts" => "Gertaera hasi baino lehen bukatzen da",
+"There was a database fail" => "Datu baseak huts egin du",
+"Week" => "Astea",
+"Month" => "Hilabetea",
+"List" => "Zerrenda",
+"Today" => "Gaur",
+"Calendars" => "Egutegiak",
+"There was a fail, while parsing the file." => "Huts bat egon da, fitxategia aztertzen zen bitartea.",
+"Choose active calendars" => "Aukeratu egutegi aktiboak",
+"New Calendar" => "Egutegi berria",
+"CalDav Link" => "CalDav Lotura",
+"Download" => "Deskargatu",
+"Edit" => "Editatu",
+"Delete" => "Ezabatu",
+"New calendar" => "Egutegi berria",
+"Edit calendar" => "Editatu egutegia",
+"Displayname" => "Bistaratzeko izena",
+"Active" => "Aktiboa",
+"Calendar color" => "Egutegiaren kolorea",
+"Save" => "Gorde",
+"Submit" => "Bidali",
+"Cancel" => "Ezeztatu",
+"Edit an event" => "Editatu gertaera",
+"Export" => "Exportatu",
+"Title of the Event" => "Gertaeraren izenburua",
+"Category" => "Kategoria",
+"Select category" => "Aukeratu kategoria",
+"All Day Event" => "Egun osoko gertaera",
+"From" => "Hasiera",
+"To" => "Bukaera",
+"Advanced options" => "Aukera aurreratuak",
+"Repeat" => "Errepikatu",
+"Location" => "Kokalekua",
+"Location of the Event" => "Gertaeraren kokalekua",
+"Description" => "Deskribapena",
+"Description of the Event" => "Gertaeraren deskribapena",
+"Please choose the calendar" => "Mesedez aukeratu egutegia",
+"Import" => "Importatu",
+"Create a new event" => "Sortu gertaera berria",
+"Timezone" => "Ordu-zona",
+"Timeformat" => "Ordu formatua",
+"24h" => "24h",
+"12h" => "12h",
+"Calendar CalDAV syncing address:" => "Egutegiaren CalDAV sinkronizazio helbidea"
+);
diff --git a/apps/calendar/l10n/fr.php b/apps/calendar/l10n/fr.php
index c12d773a67a..82b58f6ad61 100644
--- a/apps/calendar/l10n/fr.php
+++ b/apps/calendar/l10n/fr.php
@@ -1,17 +1,17 @@
<?php $TRANSLATIONS = array(
-"Authentication error" => "Erreur d'authentification",
-"Wrong calendar" => "Mauvais calendrier",
+"New Timezone:" => "Nouveau fuseau horaire :",
"Timezone changed" => "Fuseau horaire modifié",
"Invalid request" => "Requête invalide",
"Calendar" => "Calendrier",
+"Wrong calendar" => "Mauvais calendrier",
"Birthday" => "Anniversaire",
-"Business" => "Business",
+"Business" => "Professionnel",
"Call" => "Appel",
-"Clients" => "Clients",
-"Deliverer" => "Livreur",
+"Clients" => "Clientèle",
+"Deliverer" => "Livraison",
"Holidays" => "Vacances",
"Ideas" => "Idées",
-"Journey" => "Journée",
+"Journey" => "Déplacement",
"Jubilee" => "Jubilé",
"Meeting" => "Meeting",
"Other" => "Autre",
@@ -21,27 +21,29 @@
"Work" => "Travail",
"Does not repeat" => "Pas de répétition",
"Daily" => "Tous les jours",
-"Weekly" => "Toutes les semaines",
-"Every Weekday" => "Chaque jour de la semaine",
-"Bi-Weekly" => "Bimestriel",
-"Monthly" => "Tous les mois",
-"Yearly" => "Tous les ans",
-"Not an array" => "Ce n'est pas un tableau",
-"All day" => "Tous les jours",
-"Sunday" => "Dimanche",
+"Weekly" => "Hebdomadaire",
+"Every Weekday" => "Quotidien",
+"Bi-Weekly" => "Bi-hebdomadaire",
+"Monthly" => "Mensuel",
+"Yearly" => "Annuel",
+"never" => "jamais",
+"by occurrences" => "par occurrences",
+"by date" => "par date",
+"by monthday" => "par jour du mois",
+"by weekday" => "par jour de la semaine",
"Monday" => "Lundi",
"Tuesday" => "Mardi",
"Wednesday" => "Mercredi",
"Thursday" => "Jeudi",
"Friday" => "Vendredi",
"Saturday" => "Samedi",
-"Sun." => "Dim.",
-"Mon." => "Lun.",
-"Tue." => "Mar.",
-"Wed." => "Mer.",
-"Thu." => "Jeu.",
-"Fri." => "Ven.",
-"Sat." => "Sam.",
+"Sunday" => "Dimanche",
+"first" => "premier",
+"second" => "second",
+"third" => "troisième",
+"fourth" => "quatrième",
+"fifth" => "cinquième",
+"last" => "dernier",
"January" => "Janvier",
"February" => "Février",
"March" => "Mars",
@@ -54,57 +56,90 @@
"October" => "Octobre",
"November" => "Novembre",
"December" => "Décembre",
+"by events date" => "par date d’événements",
+"by yearday(s)" => "par jour(s) de l'année",
+"by weeknumber(s)" => "par numéro de semaine(s)",
+"by day and month" => "par jour et mois",
+"Not an array" => "Ce n'est pas un tableau",
+"Date" => "Date",
+"Cal." => "Cal.",
+"All day" => "Journée entière",
+"Missing fields" => "Champs manquants",
+"Title" => "Titre",
+"From Date" => "De la date",
+"From Time" => "De l'heure",
+"To Date" => "A la date",
+"To Time" => "A l'heure",
+"The event ends before it starts" => "L'évènement s'est terminé avant qu'il ne commence",
+"There was a database fail" => "Il y a eu un échec dans la base de donnée",
+"Week" => "Semaine",
+"Month" => "Mois",
+"List" => "Liste",
+"Today" => "Aujourd'hui",
+"Calendars" => "Calendriers",
+"There was a fail, while parsing the file." => "Une erreur est survenue pendant la lecture du fichier.",
+"Sun." => "Dim.",
+"Mon." => "Lun.",
+"Tue." => "Mar.",
+"Wed." => "Mer.",
+"Thu." => "Jeu.",
+"Fri." => "Ven.",
+"Sat." => "Sam.",
"Jan." => "Jan.",
"Feb." => "Fév.",
"Mar." => "Mar.",
"Apr." => "Avr.",
-"May." => "Peut-être *****",
-"Jun." => "Juin",
-"Jul." => "Juil.",
-"Aug." => "Aoû.",
+"May." => "Mai.",
+"Jun." => "Jui.",
+"Jul." => "Jit.",
+"Aug." => "Aou.",
"Sep." => "Sep.",
"Oct." => "Oct.",
"Nov." => "Nov.",
"Dec." => "Déc.",
-"Week" => "Semaine",
-"Weeks" => "Semaines",
-"More before {startdate}" => "Voir plus avant {startdate}",
-"More after {enddate}" => "Voir plus après {enddate}",
-"Day" => "Jour",
-"Month" => "Mois",
-"List" => "Liste",
-"Today" => "Aujourd'hui",
-"Calendars" => "Calendriers",
-"Time" => "Heure",
-"There was a fail, while parsing the file." => "Une erreur est survenue pendant la lecture du fichier.",
"Choose active calendars" => "Choix des calendriers actifs",
"New Calendar" => "Nouveau Calendrier",
"CalDav Link" => "Lien CalDav",
"Download" => "Télécharger",
"Edit" => "Éditer",
+"Delete" => "Supprimer",
"New calendar" => "Nouveau calendrier",
"Edit calendar" => "Éditer le calendrier",
"Displayname" => "Nom d'affichage",
"Active" => "Actif",
-"Description" => "Description",
"Calendar color" => "Couleur du calendrier",
"Save" => "Sauvegarder",
"Submit" => "Soumettre",
"Cancel" => "Annuler",
"Edit an event" => "Éditer un événement",
-"Title" => "Titre",
+"Export" => "Exporter",
"Title of the Event" => "Titre de l'événement",
-"Location" => "Localisation",
-"Location of the Event" => "Localisation de l'événement",
"Category" => "Catégorie",
"Select category" => "Sélectionner une catégorie",
-"All Day Event" => "Événement de toute une journée",
+"All Day Event" => "Journée entière",
"From" => "De",
"To" => "À",
+"Advanced options" => "Options avancées",
"Repeat" => "Répétition",
-"Attendees" => "Personnes présentes",
+"Advanced" => "Avancé",
+"Select weekdays" => "Sélection des jours de la semaine",
+"Select days" => "Sélection des jours",
+"Select months" => "Sélection des mois",
+"Select weeks" => "Sélection des semaines",
+"Interval" => "Intervalle",
+"End" => "Fin",
+"occurrences" => "occurrences",
+"Location" => "Emplacement",
+"Location of the Event" => "Emplacement de l'événement",
+"Description" => "Description",
"Description of the Event" => "Description de l'événement",
-"Close" => "Fermer",
+"Please choose the calendar" => "Choisissez le calendrier svp",
+"Import" => "Importer",
"Create a new event" => "Créer un nouvel événement",
-"Timezone" => "Fuseau horaire"
+"Timezone" => "Fuseau horaire",
+"Check always for changes of the timezone" => "Toujours vérifier d'éventuels changements de fuseau horaire",
+"Timeformat" => "Format de l'heure",
+"24h" => "24h",
+"12h" => "12h",
+"Calendar CalDAV syncing address:" => "Adresse de synchronisation du calendrier CalDAV :"
);
diff --git a/apps/calendar/l10n/he.php b/apps/calendar/l10n/he.php
new file mode 100644
index 00000000000..a399a9ff676
--- /dev/null
+++ b/apps/calendar/l10n/he.php
@@ -0,0 +1,67 @@
+<?php $TRANSLATIONS = array(
+"Timezone changed" => "אזור זמן השתנה",
+"Invalid request" => "בקשה לא חוקית",
+"Calendar" => "ח שנה",
+"Wrong calendar" => "לוח שנה לא נכון",
+"Birthday" => "יום הולדת",
+"Business" => "עסקים",
+"Call" => "שיחה",
+"Clients" => "לקוחות",
+"Deliverer" => "משלוח",
+"Holidays" => "חגים",
+"Ideas" => "רעיונות",
+"Journey" => "מסע",
+"Jubilee" => "יובל",
+"Meeting" => "פגישה",
+"Other" => "אחר",
+"Personal" => "אישי",
+"Projects" => "פרוייקטים",
+"Questions" => "שאלות",
+"Work" => "עבודה",
+"Does not repeat" => "ללא חזרה",
+"Daily" => "יומי",
+"Weekly" => "שבועי",
+"Every Weekday" => "כל יום עבודה",
+"Bi-Weekly" => "דו שבועי",
+"Monthly" => "חודשי",
+"Yearly" => "שנתי",
+"Not an array" => "לא מערך",
+"All day" => "היום",
+"Title" => "כותרת",
+"Week" => "שבוע",
+"Month" => "חודש",
+"List" => "רשימה",
+"Today" => "היום",
+"Calendars" => "לוחות שנה",
+"There was a fail, while parsing the file." => "אירעה שגיאה בעת פענוח הקובץ.",
+"Choose active calendars" => "בחר לוחות שנה פעילים",
+"New Calendar" => "לוח שנה חדש",
+"CalDav Link" => "קישור CalDav",
+"Download" => "הורדה",
+"Edit" => "עריכה",
+"Delete" => "מחיקה",
+"New calendar" => "לוח שנה חדש",
+"Edit calendar" => "עריכת לוח שנה",
+"Displayname" => "שם תצוגה",
+"Active" => "פעיל",
+"Calendar color" => "צבע לוח שנה",
+"Save" => "שמירה",
+"Submit" => "שליחה",
+"Cancel" => "ביטול",
+"Edit an event" => "עריכת אירוע",
+"Export" => "יצוא",
+"Title of the Event" => "כותרת האירוע",
+"Category" => "קטגוריה",
+"Select category" => "בחר קטגוריה",
+"All Day Event" => "אירוע של כל היום",
+"From" => "מאת",
+"To" => "עבור",
+"Repeat" => "חזרה",
+"Location" => "מיקום",
+"Location of the Event" => "מיקום האירוע",
+"Description" => "תיאור",
+"Description of the Event" => "תיאור האירוע",
+"Import" => "יבוא",
+"Create a new event" => "יצירת אירוע חדש",
+"Timezone" => "אזור זמן"
+);
diff --git a/apps/calendar/l10n/hr.php b/apps/calendar/l10n/hr.php
new file mode 100644
index 00000000000..1778511edee
--- /dev/null
+++ b/apps/calendar/l10n/hr.php
@@ -0,0 +1,80 @@
+<?php $TRANSLATIONS = array(
+"Timezone changed" => "Vremenska zona promijenjena",
+"Invalid request" => "Neispravan zahtjev",
+"Calendar" => "Kalendar",
+"Wrong calendar" => "Pogrešan kalendar",
+"Birthday" => "Rođendan",
+"Business" => "Poslovno",
+"Call" => "Poziv",
+"Clients" => "Klijenti",
+"Deliverer" => "Dostavljač",
+"Holidays" => "Odmori",
+"Ideas" => "Ideje",
+"Journey" => "Putovanje",
+"Jubilee" => "Obljetnica",
+"Meeting" => "Sastanak",
+"Other" => "Ostalo",
+"Personal" => "Osobno",
+"Projects" => "Projekti",
+"Questions" => "Pitanja",
+"Work" => "Posao",
+"Does not repeat" => "Ne ponavlja se",
+"Daily" => "Dnevno",
+"Weekly" => "Tjedno",
+"Every Weekday" => "Svakog radnog dana",
+"Bi-Weekly" => "Dvotjedno",
+"Monthly" => "Mjesečno",
+"Yearly" => "Godišnje",
+"Not an array" => "Nije niz",
+"All day" => "Cijeli dan",
+"Missing fields" => "Nedostaju polja",
+"Title" => "Naslov",
+"From Date" => "Datum Od",
+"From Time" => "Vrijeme Od",
+"To Date" => "Datum Do",
+"To Time" => "Vrijeme Do",
+"The event ends before it starts" => "Događaj završava prije nego počinje",
+"There was a database fail" => "Pogreška u bazi podataka",
+"Week" => "Tjedan",
+"Month" => "Mjesec",
+"List" => "Lista",
+"Today" => "Danas",
+"Calendars" => "Kalendari",
+"There was a fail, while parsing the file." => "Pogreška pri čitanju datoteke.",
+"Choose active calendars" => "Odaberite aktive kalendare",
+"New Calendar" => "Novi Kalendar",
+"CalDav Link" => "CalDav Poveznica",
+"Download" => "Spremi lokalno",
+"Edit" => "Uredi",
+"Delete" => "Briši",
+"New calendar" => "Novi kalendar",
+"Edit calendar" => "Uredi kalendar",
+"Displayname" => "Naziv",
+"Active" => "Aktivan",
+"Calendar color" => "Boja kalendara",
+"Save" => "Spremi",
+"Submit" => "Potvrdi",
+"Cancel" => "Odustani",
+"Edit an event" => "Uredi događaj",
+"Export" => "Izvoz",
+"Title of the Event" => "Naslov Događaja",
+"Category" => "Kategorija",
+"Select category" => "Odabir kategorije",
+"All Day Event" => "Cjelodnevni događaj",
+"From" => "Od",
+"To" => "Za",
+"Advanced options" => "Napredne mogućnosti",
+"Repeat" => "Ponavljanje",
+"Location" => "Lokacija",
+"Location of the Event" => "Lokacija Događaja",
+"Description" => "Opis",
+"Description of the Event" => "Opis događaja",
+"Please choose the calendar" => "Odaberite kalendar",
+"Import" => "Uvoz",
+"Create a new event" => "Unesi novi događaj",
+"Timezone" => "Vremenska zona",
+"Timeformat" => "Format vremena",
+"24h" => "24h",
+"12h" => "12h",
+"Calendar CalDAV syncing address:" => "Adresa za CalDAV sinkronizaciju kalendara"
+);
diff --git a/apps/calendar/l10n/hu_HU.php b/apps/calendar/l10n/hu_HU.php
new file mode 100644
index 00000000000..3c52551abb3
--- /dev/null
+++ b/apps/calendar/l10n/hu_HU.php
@@ -0,0 +1,78 @@
+<?php $TRANSLATIONS = array(
+"Timezone changed" => "Időzóna megváltozott",
+"Invalid request" => "Érvénytelen kérés",
+"Calendar" => "Naptár",
+"Wrong calendar" => "Hibás naptár",
+"Birthday" => "Születésap",
+"Business" => "Üzlet",
+"Call" => "Hívás",
+"Clients" => "Kliensek",
+"Deliverer" => "Szállító",
+"Holidays" => "Ünnepek",
+"Ideas" => "Ötletek",
+"Journey" => "Utazás",
+"Jubilee" => "Évforduló",
+"Meeting" => "Találkozó",
+"Other" => "Egyéb",
+"Personal" => "Személyes",
+"Projects" => "Projektek",
+"Questions" => "Kérdések",
+"Work" => "Munka",
+"Does not repeat" => "Nem ismétlődik",
+"Daily" => "Napi",
+"Weekly" => "Heti",
+"Every Weekday" => "Minden hétköznap",
+"Bi-Weekly" => "Kéthetente",
+"Monthly" => "Havi",
+"Yearly" => "Évi",
+"Not an array" => "Nem egy tömb",
+"All day" => "Egész nap",
+"Missing fields" => "Hiányzó mezők",
+"Title" => "Cím",
+"From Date" => "Napjától",
+"From Time" => "Időtől",
+"To Date" => "Napig",
+"To Time" => "Ideig",
+"The event ends before it starts" => "Az esemény véget ér a kezdés előtt.",
+"There was a database fail" => "Adatbázis hiba történt",
+"Week" => "Hét",
+"Month" => "Hónap",
+"List" => "Lista",
+"Today" => "Ma",
+"Calendars" => "Naptárak",
+"There was a fail, while parsing the file." => "Probléma volt a fájl elemzése közben.",
+"Choose active calendars" => "Aktív naptár kiválasztása",
+"New Calendar" => "Új naptár",
+"CalDav Link" => "CalDAV link",
+"Download" => "Letöltés",
+"Edit" => "Szerkesztés",
+"Delete" => "Törlés",
+"New calendar" => "Új naptár",
+"Edit calendar" => "Naptár szerkesztése",
+"Displayname" => "Megjelenítési név",
+"Active" => "Aktív",
+"Calendar color" => "Naptár szín",
+"Save" => "Mentés",
+"Submit" => "Beküldés",
+"Cancel" => "Mégse",
+"Edit an event" => "Esemény szerkesztése",
+"Export" => "Export",
+"Title of the Event" => "Az esemény címe",
+"Category" => "Kategória",
+"Select category" => "Kategória kiválasztása",
+"All Day Event" => "Egész napos esemény",
+"Advanced options" => "Haladó beállítások",
+"Repeat" => "Ismétlés",
+"Location" => "Hely",
+"Location of the Event" => "Az esemény helyszíne",
+"Description" => "Leírás",
+"Description of the Event" => "Az esemény leírása",
+"Please choose the calendar" => "Válassz naptárat",
+"Import" => "Importálás",
+"Create a new event" => "Új esemény létrehozása",
+"Timezone" => "Időzóna",
+"Timeformat" => "Időformátum",
+"24h" => "24h",
+"12h" => "12h",
+"Calendar CalDAV syncing address:" => "Naptár CalDAV szinkronizálási cím:"
+);
diff --git a/apps/calendar/l10n/hy.php b/apps/calendar/l10n/hy.php
new file mode 100644
index 00000000000..3b675693b0f
--- /dev/null
+++ b/apps/calendar/l10n/hy.php
@@ -0,0 +1,11 @@
+<?php $TRANSLATIONS = array(
+"Calendar" => "Օրացույց",
+"Other" => "Այլ",
+"Month" => "Ամիս",
+"Today" => "Այսօր",
+"Download" => "Բեռնել",
+"Delete" => "Ջնջել",
+"Save" => "Պահպանել",
+"Submit" => "Հաստատել",
+"Description" => "Նկարագրություն"
+);
diff --git a/apps/calendar/l10n/ia.php b/apps/calendar/l10n/ia.php
new file mode 100644
index 00000000000..547c96e5a07
--- /dev/null
+++ b/apps/calendar/l10n/ia.php
@@ -0,0 +1,27 @@
+<?php $TRANSLATIONS = array(
+"Calendar" => "Calendario",
+"Projects" => "Projectos",
+"Work" => "Travalio",
+"All day" => "Omne die",
+"Title" => "Titulo",
+"Week" => "Septimana",
+"Month" => "Mense",
+"List" => "Lista",
+"Today" => "Hodie",
+"Calendars" => "Calendarios",
+"Choose active calendars" => "Selectionar calendarios active",
+"New Calendar" => "Nove calendario",
+"Download" => "Discarga",
+"Edit" => "Modificar",
+"Delete" => "Deler",
+"Edit calendar" => "Modificar calendario",
+"Active" => "Active",
+"Calendar color" => "Color de calendario",
+"Save" => "Salveguardar",
+"Submit" => "Inviar",
+"Cancel" => "Cancellar",
+"Select category" => "Selectionar categoria",
+"From" => "Ab",
+"To" => "A",
+"Description" => "Description"
+);
diff --git a/apps/calendar/l10n/id.php b/apps/calendar/l10n/id.php
index 5cb95d0b358..a52891813c9 100644
--- a/apps/calendar/l10n/id.php
+++ b/apps/calendar/l10n/id.php
@@ -1,5 +1,4 @@
<?php $TRANSLATIONS = array(
-"Authentication error" => "Kesalahan otentikasi",
"Timezone changed" => "Zona waktu telah diubah",
"Invalid request" => "Permintaan tidak sah",
"Calendar" => "Kalender",
@@ -11,50 +10,11 @@
"Monthly" => "Bulanan",
"Yearly" => "Tahunan",
"All day" => "Semua Hari",
-"Sunday" => "Minggu",
-"Monday" => "Senin",
-"Tuesday" => "Selasa",
-"Wednesday" => "Rabu",
-"Thursday" => "Kamis",
-"Friday" => "Jumat",
-"Saturday" => "Sabtu",
-"Sun." => "Min.",
-"Mon." => "Sen.",
-"Tue." => "Sel.",
-"Wed." => "Rab.",
-"Thu." => "Kam.",
-"Fri." => "Jum.",
-"Sat." => "Sab.",
-"January" => "Januari",
-"February" => "Februari",
-"March" => "Maret",
-"April" => "April",
-"May" => "Mei",
-"June" => "Juni",
-"July" => "Juli",
-"August" => "Agustus",
-"September" => "September",
-"October" => "Oktober",
-"November" => "November",
-"December" => "Desember",
-"Jan." => "Jan.",
-"Feb." => "Feb.",
-"Mar." => "Mar.",
-"Apr." => "Apr.",
-"Jun." => "Jun.",
-"Jul." => "Jul.",
-"Aug." => "Agu.",
-"Sep." => "Sep.",
-"Oct." => "Okt.",
-"Nov." => "Nov.",
-"Dec." => "Des.",
+"Title" => "Judul",
"Week" => "Minggu",
-"Weeks" => "Minggu",
-"Day" => "Hari",
"Month" => "Bulan",
"Today" => "Hari ini",
"Calendars" => "Kalender",
-"Time" => "Waktu",
"There was a fail, while parsing the file." => "Terjadi kesalahan, saat mengurai berkas.",
"Choose active calendars" => "Pilih kalender aktif",
"Download" => "Unduh",
@@ -62,22 +22,19 @@
"Edit calendar" => "Sunting kalender",
"Displayname" => "Namatampilan",
"Active" => "Aktif",
-"Description" => "Deskripsi",
"Calendar color" => "Warna kalender",
"Submit" => "Sampaikan",
"Edit an event" => "Sunting agenda",
-"Title" => "Judul",
"Title of the Event" => "Judul Agenda",
-"Location" => "Lokasi",
-"Location of the Event" => "Lokasi Agenda",
"Category" => "Kategori",
"All Day Event" => "Agenda di Semua Hari",
"From" => "Dari",
"To" => "Ke",
"Repeat" => "Ulangi",
-"Attendees" => "Yang menghadiri",
+"Location" => "Lokasi",
+"Location of the Event" => "Lokasi Agenda",
+"Description" => "Deskripsi",
"Description of the Event" => "Deskripsi dari Agenda",
-"Close" => "Tutup",
"Create a new event" => "Buat agenda baru",
"Timezone" => "Zonawaktu"
);
diff --git a/apps/calendar/l10n/it.php b/apps/calendar/l10n/it.php
index dcb6799b04c..71cfa6c8464 100644
--- a/apps/calendar/l10n/it.php
+++ b/apps/calendar/l10n/it.php
@@ -1,9 +1,9 @@
<?php $TRANSLATIONS = array(
-"Authentication error" => "Errore di autenticazione",
-"Wrong calendar" => "Calendario sbagliato",
+"New Timezone:" => "Nuovo fuso orario:",
"Timezone changed" => "Fuso orario cambiato",
-"Invalid request" => "Richiesta non validia",
+"Invalid request" => "Richiesta non valida",
"Calendar" => "Calendario",
+"Wrong calendar" => "Calendario sbagliato",
"Birthday" => "Compleanno",
"Business" => "Azienda",
"Call" => "Chiama",
@@ -26,22 +26,24 @@
"Bi-Weekly" => "Ogni due settimane",
"Monthly" => "Mensile",
"Yearly" => "Annuale",
-"Not an array" => "Non è un array",
-"All day" => "Tutti i giorni",
-"Sunday" => "Domenica",
+"never" => "mai",
+"by occurrences" => "per occorrenze",
+"by date" => "per data",
+"by monthday" => "per giorno del mese",
+"by weekday" => "per giorno della settimana",
"Monday" => "Lunedì",
"Tuesday" => "Martedì",
"Wednesday" => "Mercoledì",
"Thursday" => "Giovedì",
"Friday" => "Venerdì",
"Saturday" => "Sabato",
-"Sun." => "Dom.",
-"Mon." => "Lun.",
-"Tue." => "Mar.",
-"Wed." => "Mer.",
-"Thu." => "Gio.",
-"Fri." => "Ven.",
-"Sat." => "Sab.",
+"Sunday" => "Domenica",
+"first" => "primo",
+"second" => "secondo",
+"third" => "terzo",
+"fourth" => "quarto",
+"fifth" => "quinto",
+"last" => "ultimo",
"January" => "Gennaio",
"February" => "Febbraio",
"March" => "Marzo",
@@ -54,57 +56,65 @@
"October" => "Ottobre",
"November" => "Novembre",
"December" => "Dicembre",
-"Jan." => "Gen.",
-"Feb." => "Feb.",
-"Mar." => "Mar.",
-"Apr." => "Apr.",
-"May." => "Maggio.",
-"Jun." => "Giu.",
-"Jul." => "Lug.",
-"Aug." => "Ago.",
-"Sep." => "Set.",
-"Oct." => "Ott.",
-"Nov." => "Nov.",
-"Dec." => "Dic.",
+"Not an array" => "Non è un array",
+"Date" => "Data",
+"Cal." => "Cal.",
+"All day" => "Tutti i giorni",
+"Missing fields" => "Campi mancanti",
+"Title" => "Titolo",
+"From Date" => "Dal giorno",
+"From Time" => "Ora inizio",
+"To Date" => "al giorno",
+"To Time" => "Ora fine",
+"The event ends before it starts" => "L'evento finisce prima d'iniziare",
+"There was a database fail" => "C'è stato un errore col database",
"Week" => "Settimana",
-"Weeks" => "Settimane",
-"More before {startdate}" => "Prima di {startdate}",
-"More after {enddate}" => "Dopo {enddate}",
-"Day" => "Giorno",
"Month" => "Mese",
"List" => "Lista",
"Today" => "Oggi",
"Calendars" => "Calendari",
-"Time" => "Ora",
"There was a fail, while parsing the file." => "C'è stato un errore nel parsing del file.",
"Choose active calendars" => "Selezionare calendari attivi",
"New Calendar" => "Nuovo Calendario",
"CalDav Link" => "CalDav Link",
"Download" => "Download",
"Edit" => "Modifica",
+"Delete" => "Elimina",
"New calendar" => "Nuovo calendario",
"Edit calendar" => "Modifica calendario",
"Displayname" => "Mostra nome",
"Active" => "Attivo",
-"Description" => "Descrizione",
"Calendar color" => "Colore calendario",
"Save" => "Salva",
"Submit" => "Invia",
"Cancel" => "Annulla",
"Edit an event" => "Modifica evento",
-"Title" => "Titolo",
+"Export" => "Esporta",
"Title of the Event" => "Titolo evento",
-"Location" => "Luogo",
-"Location of the Event" => "Luogo evento",
"Category" => "Categoria",
"Select category" => "Seleziona categoria",
"All Day Event" => "Tutti gli eventi del giorno",
"From" => "Da",
"To" => "A",
+"Advanced options" => "Opzioni avanzate",
"Repeat" => "Ripeti",
-"Attendees" => "Partecipanti",
+"Select weekdays" => "Seleziona i giorni della settimana",
+"Select days" => "Seleziona i giorni",
+"Select months" => "Seleziona i mesi",
+"Select weeks" => "Seleziona le settimane",
+"Interval" => "Intervallo",
+"End" => "Fine",
+"Location" => "Luogo",
+"Location of the Event" => "Luogo evento",
+"Description" => "Descrizione",
"Description of the Event" => "Descrizione evento",
-"Close" => "Chiuso",
+"Please choose the calendar" => "Per favore scegli il calendario",
+"Import" => "Importa",
"Create a new event" => "Crea evento",
-"Timezone" => "Timezone"
+"Timezone" => "Fuso orario",
+"Check always for changes of the timezone" => "Controlla sempre i cambiamenti di fuso orario",
+"Timeformat" => "Formato ora",
+"24h" => "24h",
+"12h" => "12h",
+"Calendar CalDAV syncing address:" => "Indirizzo sincronizzazione calendario CalDAV:"
);
diff --git a/apps/calendar/l10n/ja_JP.php b/apps/calendar/l10n/ja_JP.php
new file mode 100644
index 00000000000..ef83f5d5a65
--- /dev/null
+++ b/apps/calendar/l10n/ja_JP.php
@@ -0,0 +1,80 @@
+<?php $TRANSLATIONS = array(
+"Timezone changed" => "タイムゾーンが変更されました",
+"Invalid request" => "無効なリクエストです",
+"Calendar" => "カレンダー",
+"Wrong calendar" => "誤ったカレンダーです",
+"Birthday" => "誕生日",
+"Business" => "ビジネス",
+"Call" => "電話をかける",
+"Clients" => "顧客",
+"Deliverer" => "運送会社",
+"Holidays" => "休日",
+"Ideas" => "アイデア",
+"Journey" => "旅行",
+"Jubilee" => "記念祭",
+"Meeting" => "ミーティング",
+"Other" => "その他",
+"Personal" => "個人",
+"Projects" => "プロジェクト",
+"Questions" => "質問事項",
+"Work" => "仕事",
+"Does not repeat" => "繰り返さない",
+"Daily" => "毎日",
+"Weekly" => "毎週",
+"Every Weekday" => "毎平日",
+"Bi-Weekly" => "2週間ごと",
+"Monthly" => "毎月",
+"Yearly" => "毎年",
+"Not an array" => "配列ではありません",
+"All day" => "終日",
+"Missing fields" => "項目がありません",
+"Title" => "タイトル",
+"From Date" => "開始日",
+"From Time" => "開始時間",
+"To Date" => "終了日",
+"To Time" => "終了時間",
+"The event ends before it starts" => "イベント終了時間が開始時間より先です",
+"There was a database fail" => "データベースフェイルがありました",
+"Week" => "週",
+"Month" => "月",
+"List" => "リスト",
+"Today" => "今日",
+"Calendars" => "カレンダー",
+"There was a fail, while parsing the file." => "ファイルを構文解析する際に失敗しました",
+"Choose active calendars" => "アクティブなカレンダーを選択してください",
+"New Calendar" => "新しくカレンダーを作成する",
+"CalDav Link" => "CalDavへのリンク",
+"Download" => "ダウンロード",
+"Edit" => "編集",
+"Delete" => "削除",
+"New calendar" => "新しくカレンダーを作成する",
+"Edit calendar" => "カレンダーを編集",
+"Displayname" => "表示名",
+"Active" => "アクティブ",
+"Calendar color" => "カレンダーの色",
+"Save" => "保存",
+"Submit" => "完了",
+"Cancel" => "キャンセル",
+"Edit an event" => "イベントを編集",
+"Export" => "エクスポート",
+"Title of the Event" => "イベントのタイトル",
+"Category" => "カテゴリー",
+"Select category" => "カテゴリーを選択してください",
+"All Day Event" => "終日イベント",
+"From" => "開始",
+"To" => "終了",
+"Advanced options" => "詳細設定",
+"Repeat" => "繰り返す",
+"Location" => "場所",
+"Location of the Event" => "イベントの場所",
+"Description" => "メモ",
+"Description of the Event" => "イベントのメモ",
+"Please choose the calendar" => "カレンダーを選択してください",
+"Import" => "インポート",
+"Create a new event" => "新しいイベントを作成する",
+"Timezone" => "タイムゾーン",
+"Timeformat" => "時刻のフォーマット",
+"24h" => "24時間制",
+"12h" => "12時間制",
+"Calendar CalDAV syncing address:" => "カレンダーのCalDAVシンクアドレス"
+);
diff --git a/apps/calendar/l10n/lb.php b/apps/calendar/l10n/lb.php
index 82cdac133fa..08b8d88f2a2 100644
--- a/apps/calendar/l10n/lb.php
+++ b/apps/calendar/l10n/lb.php
@@ -1,8 +1,23 @@
<?php $TRANSLATIONS = array(
-"Authentication error" => "Authentifizéierung's Feeler",
"Timezone changed" => "Zäitzon geännert",
"Invalid request" => "Ongülteg Requête",
"Calendar" => "Kalenner",
+"Wrong calendar" => "Falschen Kalenner",
+"Birthday" => "Gebuertsdag",
+"Business" => "Geschäftlech",
+"Call" => "Uruff",
+"Clients" => "Clienten",
+"Deliverer" => "Liwwerant",
+"Holidays" => "Vakanzen",
+"Ideas" => "Ideeën",
+"Journey" => "Dag",
+"Jubilee" => "Jubiläum",
+"Meeting" => "Meeting",
+"Other" => "Aner",
+"Personal" => "Perséinlech",
+"Projects" => "Projeten",
+"Questions" => "Froen",
+"Work" => "Aarbecht",
"Does not repeat" => "Widderhëlt sech net",
"Daily" => "Deeglech",
"Weekly" => "All Woch",
@@ -10,74 +25,56 @@
"Bi-Weekly" => "All zweet Woch",
"Monthly" => "All Mount",
"Yearly" => "All Joer",
+"Not an array" => "Keen array",
"All day" => "All Dag",
-"Sunday" => "Sonnden",
-"Monday" => "Méinden",
-"Tuesday" => "Dënschden",
-"Wednesday" => "Mëttwoch",
-"Thursday" => "Donneschden",
-"Friday" => "Freiden",
-"Saturday" => "Samschden",
-"Sun." => "So. ",
-"Mon." => "Méin. ",
-"Tue." => "Dën.",
-"Wed." => "Mëtt.",
-"Thu." => "Do.",
-"Fri." => "Fr.",
-"Sat." => "Sam.",
-"January" => "Januar",
-"February" => "Februar",
-"March" => "Mäerz",
-"April" => "Abrëll",
-"May" => "Mäi",
-"June" => "Juni",
-"July" => "Juli",
-"August" => "August",
-"September" => "September",
-"October" => "Oktober",
-"November" => "November",
-"December" => "Dezember",
-"Jan." => "Jan.",
-"Feb." => "Feb.",
-"Mar." => "Mär.",
-"Apr." => "Abr.",
-"Jun." => "Jun.",
-"Jul." => "Jul.",
-"Aug." => "Aug.",
-"Sep." => "Sep.",
-"Oct." => "Okt.",
-"Nov." => "Nov.",
-"Dec." => "Dez.",
+"Missing fields" => "Felder déi feelen",
+"Title" => "Titel",
+"From Date" => "Vun Datum",
+"From Time" => "Vun Zäit",
+"To Date" => "Bis Datum",
+"To Time" => "Bis Zäit",
+"The event ends before it starts" => "D'Evenement hält op ier et ufänkt",
+"There was a database fail" => "En Datebank Feeler ass opgetrueden",
"Week" => "Woch",
-"Weeks" => "Wochen",
-"Day" => "Dag",
"Month" => "Mount",
+"List" => "Lescht",
"Today" => "Haut",
"Calendars" => "Kalenneren",
-"Time" => "Zäit",
"There was a fail, while parsing the file." => "Feeler beim lueden vum Fichier.",
"Choose active calendars" => "Wiel aktiv Kalenneren aus",
+"New Calendar" => "Neien Kalenner",
+"CalDav Link" => "CalDav Link",
"Download" => "Eroflueden",
"Edit" => "Editéieren",
+"Delete" => "Läschen",
+"New calendar" => "Neien Kalenner",
"Edit calendar" => "Kalenner editéieren",
"Displayname" => "Numm",
"Active" => "Aktiv",
-"Description" => "Beschreiwung",
"Calendar color" => "Fuerf vum Kalenner",
+"Save" => "Späicheren",
"Submit" => "Fortschécken",
+"Cancel" => "Ofbriechen",
"Edit an event" => "Evenement editéieren",
-"Title" => "Titel",
+"Export" => "Export",
"Title of the Event" => "Titel vum Evenement",
-"Location" => "Uert",
-"Location of the Event" => "Uert vum Evenement",
"Category" => "Kategorie",
+"Select category" => "Kategorie auswielen",
"All Day Event" => "Ganz-Dag Evenement",
"From" => "Vun",
"To" => "Fir",
+"Advanced options" => "Avancéiert Optiounen",
"Repeat" => "Widderhuelen",
-"Attendees" => "Participanten",
+"Location" => "Uert",
+"Location of the Event" => "Uert vum Evenement",
+"Description" => "Beschreiwung",
"Description of the Event" => "Beschreiwung vum Evenement",
-"Close" => "Zoumaachen",
+"Please choose the calendar" => "Wiel den Kalenner aus",
+"Import" => "Import",
"Create a new event" => "En Evenement maachen",
-"Timezone" => "Zäitzon"
+"Timezone" => "Zäitzon",
+"Timeformat" => "Zäit Format",
+"24h" => "24h",
+"12h" => "12h",
+"Calendar CalDAV syncing address:" => "CalDAV Kalenner Synchronisatioun's Adress:"
);
diff --git a/apps/calendar/l10n/lt_LT.php b/apps/calendar/l10n/lt_LT.php
new file mode 100644
index 00000000000..7cc74887f75
--- /dev/null
+++ b/apps/calendar/l10n/lt_LT.php
@@ -0,0 +1,71 @@
+<?php $TRANSLATIONS = array(
+"Timezone changed" => "Laiko zona pakeista",
+"Invalid request" => "Klaidinga užklausa",
+"Calendar" => "Kalendorius",
+"Wrong calendar" => "Ne tas kalendorius",
+"Birthday" => "Gimtadienis",
+"Business" => "Verslas",
+"Call" => "Skambučiai",
+"Clients" => "Klientai",
+"Holidays" => "Išeiginės",
+"Ideas" => "Idėjos",
+"Journey" => "Kelionė",
+"Jubilee" => "Jubiliejus",
+"Meeting" => "Susitikimas",
+"Does not repeat" => "Nekartoti",
+"Daily" => "Kasdien",
+"Weekly" => "Kiekvieną savaitę",
+"Every Weekday" => "Kiekvieną savaitės dieną",
+"Bi-Weekly" => "Kas dvi savaites",
+"Monthly" => "Kiekvieną mėnesį",
+"Yearly" => "Kiekvienais metais",
+"Not an array" => "Ne masyvas",
+"All day" => "Visa diena",
+"Missing fields" => "Trūkstami laukai",
+"Title" => "Pavadinimas",
+"To Date" => "Iki datos",
+"To Time" => "Iki laiko",
+"The event ends before it starts" => "Įvykis baigiasi anksčiau nei jis prasideda",
+"There was a database fail" => "Įvyko duomenų bazės klaida",
+"Week" => "Savaitė",
+"Month" => "Mėnuo",
+"List" => "Sąrašas",
+"Today" => "Šiandien",
+"Calendars" => "Kalendoriai",
+"There was a fail, while parsing the file." => "Apdorojant failą įvyko klaida.",
+"Choose active calendars" => "Pasirinkite naudojamus kalendorius",
+"New Calendar" => "Naujas kalendorius",
+"CalDav Link" => "CalDav adresas",
+"Download" => "Atsisiųsti",
+"Edit" => "Keisti",
+"Delete" => "Trinti",
+"New calendar" => "Naujas kalendorius",
+"Edit calendar" => "Taisyti kalendorių",
+"Displayname" => "Pavadinimas",
+"Active" => "Naudojamas",
+"Save" => "Išsaugoti",
+"Submit" => "Išsaugoti",
+"Cancel" => "Atšaukti",
+"Edit an event" => "Taisyti įvykį",
+"Export" => "Eksportuoti",
+"Title of the Event" => "Įvykio pavadinimas",
+"Category" => "Kategorija",
+"Select category" => "Pasirinkite kategoriją",
+"All Day Event" => "Visos dienos įvykis",
+"From" => "Nuo",
+"To" => "Iki",
+"Advanced options" => "Papildomi nustatymai",
+"Repeat" => "Kartoti",
+"Location" => "Vieta",
+"Location of the Event" => "Įvykio vieta",
+"Description" => "Aprašymas",
+"Description of the Event" => "Įvykio aprašymas",
+"Please choose the calendar" => "Pasirinkite kalendorių",
+"Import" => "Importuoti",
+"Create a new event" => "Sukurti naują įvykį",
+"Timezone" => "Laiko juosta",
+"Timeformat" => "Laiko formatas",
+"24h" => "24val",
+"12h" => "12val",
+"Calendar CalDAV syncing address:" => "CalDAV kalendoriaus synchronizavimo adresas:"
+);
diff --git a/apps/calendar/l10n/ms_MY.php b/apps/calendar/l10n/ms_MY.php
index 625422a8582..663cc6a6468 100644
--- a/apps/calendar/l10n/ms_MY.php
+++ b/apps/calendar/l10n/ms_MY.php
@@ -1,5 +1,4 @@
<?php $TRANSLATIONS = array(
-"Authentication error" => "Ralat pengesahan",
"Timezone changed" => "Zon waktu diubah",
"Invalid request" => "Permintaan tidak sah",
"Calendar" => "Kalendar",
@@ -11,50 +10,11 @@
"Monthly" => "Bulanan",
"Yearly" => "Tahunan",
"All day" => "Sepanjang hari",
-"Sunday" => "Ahad",
-"Monday" => "Isnin",
-"Tuesday" => "Selasa",
-"Wednesday" => "Rabu",
-"Thursday" => "Khamis",
-"Friday" => "Jumaat",
-"Saturday" => "Sabtu",
-"Sun." => "Ahad",
-"Mon." => "Isnin",
-"Tue." => "Selasa",
-"Wed." => "Rabu",
-"Thu." => "Khamis",
-"Fri." => "Jumaat",
-"Sat." => "Sabtu",
-"January" => "Januari",
-"February" => "Februari",
-"March" => "Mac",
-"April" => "April ",
-"May" => "Mei",
-"June" => "Jun",
-"July" => "Julai",
-"August" => "Ogos",
-"September" => "September",
-"October" => "Oktober",
-"November" => "November",
-"December" => "Disember",
-"Jan." => "Jan",
-"Feb." => "Feb",
-"Mar." => "Mac",
-"Apr." => "Apr",
-"Jun." => "Jun",
-"Jul." => "Jul",
-"Aug." => "Ogos",
-"Sep." => "Sep",
-"Oct." => "Okt",
-"Nov." => "Nov",
-"Dec." => "Dis",
+"Title" => "Tajuk",
"Week" => "Minggu",
-"Weeks" => "Minggu",
-"Day" => "Hari",
"Month" => "Bulan",
"Today" => "Hari ini",
"Calendars" => "Kalendar",
-"Time" => "Waktu",
"There was a fail, while parsing the file." => "Berlaku kegagalan ketika penguraian fail. ",
"Choose active calendars" => "Pilih kalendar yang aktif",
"Download" => "Muat turun",
@@ -62,22 +22,19 @@
"Edit calendar" => "Edit kalendar",
"Displayname" => "Paparan nama",
"Active" => "Aktif",
-"Description" => "Huraian",
"Calendar color" => "Warna kalendar",
"Submit" => "Hantar",
"Edit an event" => "Edit agenda",
-"Title" => "Tajuk",
"Title of the Event" => "Tajuk agenda",
-"Location" => "Lokasi",
-"Location of the Event" => "Lokasi agenda",
"Category" => "kategori",
"All Day Event" => "Agenda di sepanjang hari ",
"From" => "Dari",
"To" => "ke",
"Repeat" => "Ulang",
-"Attendees" => "Hadirin",
+"Location" => "Lokasi",
+"Location of the Event" => "Lokasi agenda",
+"Description" => "Huraian",
"Description of the Event" => "Huraian agenda",
-"Close" => "Tutup",
"Create a new event" => "Buat agenda baru",
"Timezone" => "Zon waktu"
);
diff --git a/apps/calendar/l10n/nb_NO.php b/apps/calendar/l10n/nb_NO.php
index 95e555bc852..e7ecf47b6ed 100644
--- a/apps/calendar/l10n/nb_NO.php
+++ b/apps/calendar/l10n/nb_NO.php
@@ -1,5 +1,4 @@
<?php $TRANSLATIONS = array(
-"Authentication error" => "Autentifikasjonsfeil",
"Timezone changed" => "Tidssone endret",
"Invalid request" => "Ugyldig forespørsel",
"Calendar" => "Kalender",
@@ -10,72 +9,30 @@
"Monthly" => "Månedlig",
"Yearly" => "Årlig",
"All day" => "Hele dagen ",
-"Sunday" => "Søndag",
-"Monday" => "Mandag",
-"Tuesday" => "Tirsdag",
-"Wednesday" => "Onsdag",
-"Thursday" => "Torsdag",
-"Friday" => "Fredag",
-"Saturday" => "Lørdag",
-"Sun." => "Sø.",
-"Mon." => "Ma.",
-"Tue." => "Ti.",
-"Wed." => "On.",
-"Thu." => "To.",
-"Fri." => "Fr.",
-"Sat." => "Lø.",
-"January" => "Januar",
-"February" => "Februar",
-"March" => "Mars",
-"April" => "April",
-"May" => "Mai",
-"June" => "Juni",
-"July" => "Juli",
-"August" => "August",
-"September" => "September",
-"October" => "Oktober",
-"November" => "November",
-"December" => "Desember",
-"Jan." => "jan.",
-"Feb." => "feb.",
-"Mar." => "mar.",
-"Apr." => "apr.",
-"Jun." => "jun.",
-"Jul." => "jul.",
-"Aug." => "aug.",
-"Sep." => "sep.",
-"Oct." => "okt.",
-"Nov." => "nov.",
-"Dec." => "des.",
+"Title" => "Tittel",
"Week" => "Uke",
-"Weeks" => "Uke",
-"Day" => "Dag",
"Month" => "ned",
"Today" => "I dag",
"Calendars" => "Kalendre",
-"Time" => "Tid",
"Choose active calendars" => "Velg en aktiv kalender",
"Download" => "Last ned",
"Edit" => "Endre",
"Edit calendar" => "Rediger kalender",
"Displayname" => "Visningsnavn",
"Active" => "Aktiv",
-"Description" => "Beskrivelse",
"Calendar color" => "Kalenderfarge",
"Submit" => "Lagre",
"Edit an event" => "Rediger en hendelse",
-"Title" => "Tittel",
"Title of the Event" => "Hendelsestittel",
-"Location" => "Sted",
-"Location of the Event" => "Hendelsessted",
"Category" => "Kategori",
"All Day Event" => "Hele dagen-hendelse",
"From" => "Fra",
"To" => "Til",
"Repeat" => "Gjenta",
-"Attendees" => "Deltakere",
+"Location" => "Sted",
+"Location of the Event" => "Hendelsessted",
+"Description" => "Beskrivelse",
"Description of the Event" => "Hendelesebeskrivelse",
-"Close" => "Lukk",
"Create a new event" => "Opprett en ny hendelse",
"Timezone" => "Tidssone"
);
diff --git a/apps/calendar/l10n/nl.php b/apps/calendar/l10n/nl.php
index 3f7ebfe274e..3efb869042d 100644
--- a/apps/calendar/l10n/nl.php
+++ b/apps/calendar/l10n/nl.php
@@ -1,8 +1,24 @@
<?php $TRANSLATIONS = array(
-"Authentication error" => "Foute aanvraag",
-"Timezone changed" => "U kunt maar een venster tegelijk openen.",
+"New Timezone:" => "Nieuwe tijdszone:",
+"Timezone changed" => "Tijdzone is veranderd",
"Invalid request" => "Ongeldige aanvraag",
-"Calendar" => "Weergavenaam",
+"Calendar" => "Kalender",
+"Wrong calendar" => "Verkeerde kalender",
+"Birthday" => "Verjaardag",
+"Business" => "Zakelijk",
+"Call" => "Bellen",
+"Clients" => "Klanten",
+"Deliverer" => "Leverancier",
+"Holidays" => "Vakantie",
+"Ideas" => "Ideeën",
+"Journey" => "Reis",
+"Jubilee" => "Jubileum",
+"Meeting" => "Vergadering",
+"Other" => "Ander",
+"Personal" => "Persoonlijk",
+"Projects" => "Projecten",
+"Questions" => "Vragen",
+"Work" => "Werk",
"Does not repeat" => "Wordt niet herhaald",
"Daily" => "Dagelijks",
"Weekly" => "Wekelijks",
@@ -10,21 +26,23 @@
"Bi-Weekly" => "Tweewekelijks",
"Monthly" => "Maandelijks",
"Yearly" => "Jaarlijks",
-"All day" => "Tweewekelijks",
-"Sunday" => "Zondag",
+"never" => "nooit meer",
+"by occurrences" => "volgens gebeurtenissen",
+"by date" => "op datum",
+"by weekday" => "op weekdag",
"Monday" => "Maandag",
"Tuesday" => "Dinsdag",
"Wednesday" => "Woensdag",
"Thursday" => "Donderdag",
"Friday" => "Vrijdag",
"Saturday" => "Zaterdag",
-"Sun." => "Zo",
-"Mon." => "Ma",
-"Tue." => "Di",
-"Wed." => "Wo",
-"Thu." => "Do",
-"Fri." => "Vr",
-"Sat." => "Za",
+"Sunday" => "Zondag",
+"first" => "eerste",
+"second" => "tweede",
+"third" => "derde",
+"fourth" => "vierde",
+"fifth" => "vijfde",
+"last" => "laatste",
"January" => "Januari",
"February" => "Februari",
"March" => "Maart",
@@ -37,47 +55,88 @@
"October" => "Oktober",
"November" => "November",
"December" => "December",
-"Jan." => "Jan",
-"Feb." => "Feb",
-"Mar." => "Maa",
-"Apr." => "Apr",
-"Jun." => "Jun",
-"Jul." => "Jul",
-"Aug." => "Aug",
-"Sep." => "Sept",
-"Oct." => "Okt",
-"Nov." => "Nov",
-"Dec." => "Dec",
+"by events date" => "volgens evenementsdatum",
+"by yearday(s)" => "volgens jaardag(en)",
+"by weeknumber(s)" => "volgens weeknummer(s)",
+"by day and month" => "per dag en maand",
+"Not an array" => "Geen array",
+"Date" => "Datum",
+"All day" => "Hele dag",
+"Missing fields" => "missende velden",
+"Title" => "Titel",
+"From Date" => "Begindatum",
+"From Time" => "Begintijd",
+"To Date" => "Einddatum",
+"To Time" => "Eindtijd",
+"The event ends before it starts" => "Het evenement eindigt voordat het begint",
+"There was a database fail" => "Er was een databasefout",
"Week" => "Week",
-"Weeks" => "Weken",
-"Day" => "Dag",
"Month" => "Maand",
+"List" => "Lijst",
"Today" => "Vandaag",
"Calendars" => "Kalenders",
-"Time" => "Tijd",
"There was a fail, while parsing the file." => "Er is een fout opgetreden bij het verwerken van het bestand.",
+"Sun." => "Zo.",
+"Mon." => "Ma.",
+"Tue." => "Di.",
+"Wed." => "Woe.",
+"Thu." => "Do.",
+"Fri." => "Vrij.",
+"Sat." => "Zat.",
+"Jan." => "Jan.",
+"Feb." => "Feb.",
+"Mar." => "Maart",
+"Apr." => "April",
+"May." => "Mei",
+"Jun." => "Jun.",
+"Jul." => "Jul.",
+"Aug." => "Aug.",
+"Sep." => "Sept.",
+"Oct." => "Okt.",
+"Nov." => "Nov.",
+"Dec." => "Dec.",
"Choose active calendars" => "Kies actieve kalenders",
+"New Calendar" => "Nieuwe Kalender",
+"CalDav Link" => "CalDav Link",
"Download" => "Download",
"Edit" => "Bewerken",
+"Delete" => "Verwijderen",
+"New calendar" => "Nieuwe kalender",
"Edit calendar" => "Bewerk kalender",
"Displayname" => "Weergavenaam",
"Active" => "Actief",
-"Description" => "Beschrijving",
"Calendar color" => "Kalender kleur",
+"Save" => "Opslaan",
"Submit" => "Opslaan",
-"Edit an event" => "Bewerken een evenement",
-"Title" => "Titel",
-"Title of the Event" => "Titel van het evenement",
-"Location" => "Locatie",
-"Location of the Event" => "Locatie van het evenement",
+"Cancel" => "Annuleren",
+"Edit an event" => "Bewerken van een afspraak",
+"Export" => "Exporteren",
+"Title of the Event" => "Titel van de afspraak",
"Category" => "Categorie",
+"Select category" => "Kies een categorie",
"All Day Event" => "Hele dag",
"From" => "Van",
"To" => "Aan",
+"Advanced options" => "Geavanceerde opties",
"Repeat" => "Herhalen",
-"Attendees" => "Deelnemers",
+"Advanced" => "Geavanceerd",
+"Select weekdays" => "Selecteer weekdagen",
+"Select days" => "Selecteer dagen",
+"Select months" => "Selecteer maanden",
+"Select weeks" => "Selecteer weken",
+"End" => "Einde",
+"occurrences" => "gebeurtenissen",
+"Location" => "Locatie",
+"Location of the Event" => "Locatie van de afspraak",
+"Description" => "Beschrijving",
"Description of the Event" => "Beschrijving van het evenement",
-"Close" => "Sluiten",
-"Create a new event" => "Maak een nieuw evenement",
-"Timezone" => "Tijdzone"
+"Please choose the calendar" => "Kies de kalender",
+"Import" => "Importeer",
+"Create a new event" => "Maak een nieuwe afspraak",
+"Timezone" => "Tijdzone",
+"Check always for changes of the timezone" => "Controleer altijd op aanpassingen van de tijdszone",
+"Timeformat" => "Tijdformaat",
+"24h" => "24uur",
+"12h" => "12uur",
+"Calendar CalDAV syncing address:" => "CalDAV kalender synchronisatie adres:"
);
diff --git a/apps/calendar/l10n/nn_NO.php b/apps/calendar/l10n/nn_NO.php
new file mode 100644
index 00000000000..be1c7a02940
--- /dev/null
+++ b/apps/calendar/l10n/nn_NO.php
@@ -0,0 +1,65 @@
+<?php $TRANSLATIONS = array(
+"Timezone changed" => "Endra tidssone",
+"Invalid request" => "Ugyldig førespurnad",
+"Calendar" => "Kalender",
+"Wrong calendar" => "Feil kalender",
+"Birthday" => "Bursdag",
+"Business" => "Forretning",
+"Call" => "Telefonsamtale",
+"Clients" => "Klientar",
+"Deliverer" => "Forsending",
+"Holidays" => "Høgtid",
+"Ideas" => "Idear",
+"Journey" => "Reise",
+"Jubilee" => "Jubileum",
+"Meeting" => "Møte",
+"Other" => "Anna",
+"Personal" => "Personleg",
+"Projects" => "Prosjekt",
+"Questions" => "Spørsmål",
+"Work" => "Arbeid",
+"Does not repeat" => "Ikkje gjenta",
+"Daily" => "Kvar dag",
+"Weekly" => "Kvar veke",
+"Every Weekday" => "Kvar vekedag",
+"Bi-Weekly" => "Annakvar veke",
+"Monthly" => "Kvar månad",
+"Yearly" => "Kvart år",
+"Not an array" => "Ikkje ein matrise",
+"All day" => "Heile dagen",
+"Title" => "Tittel",
+"Week" => "Veke",
+"Month" => "Månad",
+"List" => "Liste",
+"Today" => "I dag",
+"Calendars" => "Kalendarar",
+"There was a fail, while parsing the file." => "Feil ved tolking av fila.",
+"Choose active calendars" => "Vel aktive kalendarar",
+"New Calendar" => "Ny kalender",
+"CalDav Link" => "CalDav-lenkje",
+"Download" => "Last ned",
+"Edit" => "Endra",
+"Delete" => "Slett",
+"New calendar" => "Ny kalender",
+"Edit calendar" => "Endra kalendarar",
+"Displayname" => "Visingsnamn",
+"Active" => "Aktiv",
+"Calendar color" => "Kalenderfarge",
+"Save" => "Lagra",
+"Submit" => "Lagra",
+"Cancel" => "Avbryt",
+"Edit an event" => "Endra ein hending",
+"Title of the Event" => "Tittel på hendinga",
+"Category" => "Kategori",
+"Select category" => "Vel kategori",
+"All Day Event" => "Heildagshending",
+"From" => "Frå",
+"To" => "Til",
+"Repeat" => "Gjenta",
+"Location" => "Stad",
+"Location of the Event" => "Stad for hendinga",
+"Description" => "Skildring",
+"Description of the Event" => "Skildring av hendinga",
+"Create a new event" => "Opprett ei ny hending",
+"Timezone" => "Tidssone"
+);
diff --git a/apps/calendar/l10n/pl.php b/apps/calendar/l10n/pl.php
index 2201cc397ab..a654c878d3c 100644
--- a/apps/calendar/l10n/pl.php
+++ b/apps/calendar/l10n/pl.php
@@ -1,9 +1,9 @@
<?php $TRANSLATIONS = array(
-"Authentication error" => "Błąd uwierzytelniania",
-"Wrong calendar" => "Zły kalendarz",
+"New Timezone:" => "Nowa strefa czasowa:",
"Timezone changed" => "Strefa czasowa została zmieniona",
"Invalid request" => "Nieprawidłowe żądanie",
"Calendar" => "Kalendarz",
+"Wrong calendar" => "Zły kalendarz",
"Birthday" => "Urodziny",
"Business" => "Interes",
"Call" => "Rozmowa",
@@ -26,22 +26,24 @@
"Bi-Weekly" => "Dwa razy w tygodniu",
"Monthly" => "Miesięcznie",
"Yearly" => "Rocznie",
-"Not an array" => "Nie ma w tablicy",
-"All day" => "Cały dzień",
-"Sunday" => "Niedziela",
+"never" => "nigdy",
+"by occurrences" => "przez wydarzenia",
+"by date" => "po dacie",
+"by monthday" => "miesięcznie",
+"by weekday" => "tygodniowo",
"Monday" => "Poniedziałek",
"Tuesday" => "Wtorek",
"Wednesday" => "Środa",
"Thursday" => "Czwartek",
"Friday" => "Piątek",
"Saturday" => "Sobota",
-"Sun." => "Nie.",
-"Mon." => "Po.",
-"Tue." => "Wt.",
-"Wed." => "Śr.",
-"Thu." => "Cz..",
-"Fri." => "Pią.",
-"Sat." => "So.",
+"Sunday" => "Niedziela",
+"first" => "pierwszy",
+"second" => "drugi",
+"third" => "trzeci",
+"fourth" => "czwarty",
+"fifth" => "piąty",
+"last" => "ostatni",
"January" => "Styczeń",
"February" => "Luty",
"March" => "Marzec",
@@ -54,11 +56,39 @@
"October" => "Październik",
"November" => "Listopad",
"December" => "Grudzień",
+"by events date" => "po datach wydarzeń",
+"by yearday(s)" => "po dniach roku",
+"by weeknumber(s)" => "po tygodniach",
+"Not an array" => "Nie ma w tablicy",
+"Date" => "Data",
+"Cal." => "Kal.",
+"All day" => "Cały dzień",
+"Missing fields" => "Brakujące pola",
+"Title" => "Tytuł",
+"From Date" => "Od dnia",
+"From Time" => "Od czasu",
+"To Date" => "Do daty",
+"To Time" => "Do czasu",
+"The event ends before it starts" => "Wydarzenie kończy się przed rozpoczęciem",
+"There was a database fail" => "Awaria bazy danych",
+"Week" => "Tydzień",
+"Month" => "Miesiąc",
+"List" => "Lista",
+"Today" => "Dzisiaj",
+"Calendars" => "Kalendarze",
+"There was a fail, while parsing the file." => "Nastąpił problem przy parsowaniu pliku..",
+"Sun." => "Nie.",
+"Mon." => "Poń.",
+"Tue." => "Wto.",
+"Wed." => "Śro.",
+"Thu." => "Czw.",
+"Fri." => "Pią.",
+"Sat." => "So.",
"Jan." => "Sty.",
"Feb." => "Lut.",
"Mar." => "Mar.",
"Apr." => "Kwi.",
-"May." => "Może.",
+"May." => "Maj",
"Jun." => "Cze.",
"Jul." => "Lip.",
"Aug." => "Sie.",
@@ -66,45 +96,52 @@
"Oct." => "Paź.",
"Nov." => "Lis.",
"Dec." => "Gru.",
-"Week" => "Tydzień",
-"Weeks" => "Tygodnie",
-"More before {startdate}" => "Więcej przed {startdate}",
-"More after {enddate}" => "Więcej po {enddate}",
-"Day" => "Dzień",
-"Month" => "Miesiąc",
-"List" => "Lista",
-"Today" => "Dzisiaj",
-"Calendars" => "Kalendarze",
-"Time" => "Czas",
-"There was a fail, while parsing the file." => "Nastąpił problem przy parsowaniu pliku..",
"Choose active calendars" => "Wybierz aktywne kalendarze",
"New Calendar" => "Nowy kalendarz",
"CalDav Link" => "Link do CalDAV",
"Download" => "Pobierz",
"Edit" => "Edytuj",
+"Delete" => "Usuń",
"New calendar" => "Nowy kalendarz",
"Edit calendar" => "Edycja kalendarza",
"Displayname" => "Displayname",
"Active" => "Aktywny",
-"Description" => "Opis",
"Calendar color" => "Kalendarz kolor",
"Save" => "Zapisz",
"Submit" => "Prześlij",
"Cancel" => "Anuluj",
"Edit an event" => "Edycja zdarzenia",
-"Title" => "Tytuł",
+"Export" => "Wyeksportuj",
"Title of the Event" => "Tytuł zdarzenia",
-"Location" => "Lokalizacja",
-"Location of the Event" => "Lokalizacja zdarzenia",
"Category" => "Kategoria",
"Select category" => "Wybierz kategorię",
"All Day Event" => "Całodniowe wydarzenie",
"From" => "Z",
"To" => "Do",
+"Advanced options" => "Opcje zaawansowane",
"Repeat" => "Powtórz",
-"Attendees" => "Uczestnicy",
+"Advanced" => "Zaawansowane",
+"Select weekdays" => "Wybierz dni powszechne",
+"Select days" => "Wybierz dni",
+"and the events day of year." => "oraz wydarzenia roku",
+"and the events day of month." => "oraz wydarzenia miesiąca",
+"Select months" => "Wybierz miesiące",
+"Select weeks" => "Wybierz tygodnie",
+"and the events week of year." => "oraz wydarzenia roku.",
+"Interval" => "Przedział",
+"End" => "Koniec",
+"occurrences" => "wystąpienia",
+"Location" => "Lokalizacja",
+"Location of the Event" => "Lokalizacja zdarzenia",
+"Description" => "Opis",
"Description of the Event" => "Opis zdarzenia",
-"Close" => "Zamknij",
+"Please choose the calendar" => "Proszę wybrać kalendarz",
+"Import" => "Import",
"Create a new event" => "Stwórz nowe wydarzenie",
-"Timezone" => "Strefa czasowa"
+"Timezone" => "Strefa czasowa",
+"Check always for changes of the timezone" => "Zawsze sprawdzaj zmiany strefy czasowej",
+"Timeformat" => "Format czasu",
+"24h" => "24h",
+"12h" => "12h",
+"Calendar CalDAV syncing address:" => "Adres synchronizacji kalendarza CalDAV:"
);
diff --git a/apps/calendar/l10n/pt_BR.php b/apps/calendar/l10n/pt_BR.php
index 91db5210438..324a85aa136 100644
--- a/apps/calendar/l10n/pt_BR.php
+++ b/apps/calendar/l10n/pt_BR.php
@@ -1,8 +1,23 @@
<?php $TRANSLATIONS = array(
-"Authentication error" => "Erro de autenticação",
"Timezone changed" => "Fuso horário alterado",
"Invalid request" => "Pedido inválido",
"Calendar" => "Calendário",
+"Wrong calendar" => "Calendário incorreto",
+"Birthday" => "Aniversário",
+"Business" => "Negócio",
+"Call" => "Chamada",
+"Clients" => "Clientes",
+"Deliverer" => "Entrega",
+"Holidays" => "Feriados",
+"Ideas" => "Idéias",
+"Journey" => "Jornada",
+"Jubilee" => "Jubileu",
+"Meeting" => "Reunião",
+"Other" => "Outros",
+"Personal" => "Pessoal",
+"Projects" => "Projetos",
+"Questions" => "Perguntas",
+"Work" => "Trabalho",
"Does not repeat" => "Não repetir",
"Daily" => "Diariamente",
"Weekly" => "Semanal",
@@ -10,74 +25,56 @@
"Bi-Weekly" => "De duas em duas semanas",
"Monthly" => "Mensal",
"Yearly" => "Anual",
+"Not an array" => "Não é um array",
"All day" => "Todo o dia",
-"Sunday" => "Domingo",
-"Monday" => "Segunda-feira",
-"Tuesday" => "Terça-feira",
-"Wednesday" => "Quarta-feira",
-"Thursday" => "Quinta-feira",
-"Friday" => "Sexta-feira",
-"Saturday" => "Sábado",
-"Sun." => "Dom.",
-"Mon." => "Seg.",
-"Tue." => "Ter.",
-"Wed." => "Qua.",
-"Thu." => "Qui.",
-"Fri." => "Sex.",
-"Sat." => "Sáb.",
-"January" => "Janeiro",
-"February" => "Fevereiro",
-"March" => "Março",
-"April" => "Abril",
-"May" => "Maio",
-"June" => "Junho",
-"July" => "Julho",
-"August" => "Agosto",
-"September" => "Setembro",
-"October" => "Outubro",
-"November" => "Novembro",
-"December" => "Dezembro",
-"Jan." => "Jan.",
-"Feb." => "Fev.",
-"Mar." => "Mar.",
-"Apr." => "Abr.",
-"Jun." => "Jun.",
-"Jul." => "Jul.",
-"Aug." => "Ago.",
-"Sep." => "Set.",
-"Oct." => "Out.",
-"Nov." => "Nov.",
-"Dec." => "Dez.",
+"Missing fields" => "Campos incompletos",
+"Title" => "Título",
+"From Date" => "Desde a Data",
+"From Time" => "Desde a Hora",
+"To Date" => "Até a Data",
+"To Time" => "Até a Hora",
+"The event ends before it starts" => "O evento termina antes de começar",
+"There was a database fail" => "Houve uma falha de banco de dados",
"Week" => "Semana",
-"Weeks" => "Semanas",
-"Day" => "Dia",
"Month" => "Mês",
+"List" => "Lista",
"Today" => "Hoje",
"Calendars" => "Calendários",
-"Time" => "Tempo",
"There was a fail, while parsing the file." => "Houve uma falha, ao analisar o arquivo.",
"Choose active calendars" => "Escolha calendários ativos",
+"New Calendar" => "Novo Calendário",
+"CalDav Link" => "Link para CalDav",
"Download" => "Baixar",
"Edit" => "Editar",
+"Delete" => "Excluir",
+"New calendar" => "Novo calendário",
"Edit calendar" => "Editar calendário",
"Displayname" => "Mostrar Nome",
"Active" => "Ativo",
-"Description" => "Descrição",
"Calendar color" => "Cor do Calendário",
+"Save" => "Salvar",
"Submit" => "Submeter",
+"Cancel" => "Cancelar",
"Edit an event" => "Editar um evento",
-"Title" => "Título",
+"Export" => "Exportar",
"Title of the Event" => "Título do evento",
-"Location" => "Local",
-"Location of the Event" => "Local do evento",
"Category" => "Categoria",
+"Select category" => "Selecionar categoria",
"All Day Event" => "Evento de dia inteiro",
"From" => "De",
"To" => "Para",
+"Advanced options" => "Opções avançadas",
"Repeat" => "Repetir",
-"Attendees" => "Participantes",
+"Location" => "Local",
+"Location of the Event" => "Local do evento",
+"Description" => "Descrição",
"Description of the Event" => "Descrição do Evento",
-"Close" => "Fechar",
+"Please choose the calendar" => "Por favor, escolha o calendário",
+"Import" => "Importar",
"Create a new event" => "Criar um novo evento",
-"Timezone" => "Fuso horário"
+"Timezone" => "Fuso horário",
+"Timeformat" => "Formato da Hora",
+"24h" => "24h",
+"12h" => "12h",
+"Calendar CalDAV syncing address:" => "Sincronização de endereço do calendário CalDAV :"
);
diff --git a/apps/calendar/l10n/pt_PT.php b/apps/calendar/l10n/pt_PT.php
new file mode 100644
index 00000000000..fd6ba7b9a60
--- /dev/null
+++ b/apps/calendar/l10n/pt_PT.php
@@ -0,0 +1,8 @@
+<?php $TRANSLATIONS = array(
+"Calendar" => "Calendário",
+"All day" => "Todo o dia",
+"Week" => "Semana",
+"Month" => "Mês",
+"Today" => "Hoje",
+"Calendars" => "Calendários"
+);
diff --git a/apps/calendar/l10n/ro.php b/apps/calendar/l10n/ro.php
index 75e8a715ea0..5e16c344eef 100644
--- a/apps/calendar/l10n/ro.php
+++ b/apps/calendar/l10n/ro.php
@@ -1,8 +1,24 @@
<?php $TRANSLATIONS = array(
-"Authentication error" => "Eroare de autentificare",
+"New Timezone:" => "Fus orar nou:",
"Timezone changed" => "A fost schimbat fusul orar",
"Invalid request" => "Cerere eronată",
"Calendar" => "Calendar",
+"Wrong calendar" => "Calendar greșit",
+"Birthday" => "Zi de naștere",
+"Business" => "Afaceri",
+"Call" => "Sună",
+"Clients" => "Clienți",
+"Deliverer" => "Curier",
+"Holidays" => "Sărbători",
+"Ideas" => "Idei",
+"Journey" => "Călătorie",
+"Jubilee" => "Aniversare",
+"Meeting" => "Întâlnire",
+"Other" => "Altele",
+"Personal" => "Personal",
+"Projects" => "Proiecte",
+"Questions" => "Întrebări",
+"Work" => "Servici",
"Does not repeat" => "Nu se repetă",
"Daily" => "Zilnic",
"Weekly" => "Săptămânal",
@@ -10,21 +26,25 @@
"Bi-Weekly" => "Din două în două săptămâni",
"Monthly" => "Lunar",
"Yearly" => "Anual",
-"All day" => "Toată ziua",
-"Sunday" => "Duminică",
+"never" => "niciodată",
+"by occurrences" => "după repetiție",
+"by date" => "după dată",
+"by monthday" => "după ziua lunii",
+"by weekday" => "după ziua săptămânii",
"Monday" => "Luni",
"Tuesday" => "Marți",
"Wednesday" => "Miercuri",
"Thursday" => "Joi",
"Friday" => "Vineri",
"Saturday" => "Sâmbătă",
-"Sun." => "Dum.",
-"Mon." => "Lun.",
-"Tue." => "Mar.",
-"Wed." => "Mie.",
-"Thu." => "Joi.",
-"Fri." => "Vin.",
-"Sat." => "Sâm.",
+"Sunday" => "Duminică",
+"events week of month" => "evenimentele săptămânii din luna.",
+"first" => "primul",
+"second" => "al doilea",
+"third" => "al treilea",
+"fourth" => "al patrulea",
+"fifth" => "al cincilea",
+"last" => "ultimul",
"January" => "Ianuarie",
"February" => "Februarie",
"March" => "Martie",
@@ -37,47 +57,93 @@
"October" => "Octombrie",
"November" => "Noiembrie",
"December" => "Decembrie",
+"by events date" => "după data evenimentului",
+"by yearday(s)" => "după ziua(zilele) anului",
+"by weeknumber(s)" => "după numărul săptămânii",
+"by day and month" => "după zi și lună",
+"Not an array" => "Not an array",
+"Date" => "Data",
+"Cal." => "Cal.",
+"All day" => "Toată ziua",
+"Missing fields" => "Câmpuri lipsă",
+"Title" => "Titlu",
+"From Date" => "Începând cu",
+"From Time" => "De la",
+"To Date" => "Până pe",
+"To Time" => "La",
+"The event ends before it starts" => "Evenimentul se termină înainte să înceapă",
+"There was a database fail" => "A avut loc o eroare a bazei de date",
+"Week" => "Săptămâna",
+"Month" => "Luna",
+"List" => "Listă",
+"Today" => "Astăzi",
+"Calendars" => "Calendare",
+"There was a fail, while parsing the file." => "A fost întâmpinată o eroare în procesarea fișierului",
+"Sun." => "D",
+"Mon." => "L",
+"Tue." => "M",
+"Wed." => "M",
+"Thu." => "J",
+"Fri." => "V",
+"Sat." => "S",
"Jan." => "Ian.",
"Feb." => "Feb.",
"Mar." => "Mar.",
"Apr." => "Apr.",
+"May." => "Mai.",
"Jun." => "Iun.",
"Jul." => "Iul.",
"Aug." => "Aug.",
-"Sep." => "Sep.",
+"Sep." => "Sept.",
"Oct." => "Oct.",
"Nov." => "Nov.",
"Dec." => "Dec.",
-"Week" => "Săptămâna",
-"Weeks" => "Săptămâni",
-"Day" => "Zi",
-"Month" => "Luna",
-"Today" => "Astăzi",
-"Calendars" => "Calendare",
-"Time" => "Ora",
-"There was a fail, while parsing the file." => "A fost întâmpinată o eroare în procesarea fișierului",
"Choose active calendars" => "Alege activitățile din calendar",
+"New Calendar" => "Calendar nou",
+"CalDav Link" => "Link CalDav",
"Download" => "Descarcă",
"Edit" => "Modifică",
+"Delete" => "Șterge",
+"New calendar" => "Calendar nou",
"Edit calendar" => "Modifcă acest calendar",
"Displayname" => "Nume",
"Active" => "Activ",
-"Description" => "Descriere",
"Calendar color" => "Culoare calendar",
+"Save" => "Salveză",
"Submit" => "Trimite",
+"Cancel" => "Anulează",
"Edit an event" => "Modifică un eveniment",
-"Title" => "Titlu",
+"Export" => "Exportă",
"Title of the Event" => "Numele evenimentului",
-"Location" => "Localizare",
-"Location of the Event" => "Localizarea evenimentului",
"Category" => "Categorie",
+"Select category" => "Alege categoria",
"All Day Event" => "Toată ziua",
"From" => "De la",
"To" => "Către",
+"Advanced options" => "Opțiuni avansate",
"Repeat" => "Repetă",
-"Attendees" => "Participanți",
+"Advanced" => "Avansat",
+"Select weekdays" => "Selectează zilele săptămânii",
+"Select days" => "Selectează zilele",
+"and the events day of year." => "și evenimentele zilei.",
+"and the events day of month." => "și evenimentele zilei din lună.",
+"Select months" => "Selectează lunile",
+"Select weeks" => "Selectează săptămânile",
+"and the events week of year." => "și evenimentele săptămânii.",
+"Interval" => "Interval",
+"End" => "Sfârșit",
+"occurrences" => "repetiții",
+"Location" => "Localizare",
+"Location of the Event" => "Localizarea evenimentului",
+"Description" => "Descriere",
"Description of the Event" => "Descrierea evenimentului",
-"Close" => "Închide",
+"Please choose the calendar" => "Alegeți calendarul",
+"Import" => "Importă",
"Create a new event" => "Crează un evenimetn nou",
-"Timezone" => "Fus orar"
+"Timezone" => "Fus orar",
+"Check always for changes of the timezone" => "Verifică mereu pentru schimbări ale fusului orar",
+"Timeformat" => "Format de timp",
+"24h" => "24h",
+"12h" => "12h",
+"Calendar CalDAV syncing address:" => "Adresa pentru sincronizarea calendarului CalDAV"
);
diff --git a/apps/calendar/l10n/ru.php b/apps/calendar/l10n/ru.php
index 170344dca8e..87366771867 100644
--- a/apps/calendar/l10n/ru.php
+++ b/apps/calendar/l10n/ru.php
@@ -1,9 +1,8 @@
<?php $TRANSLATIONS = array(
-"Authentication error" => "Ошибка аутентификации",
-"Wrong calendar" => "Неверный календарь",
"Timezone changed" => "Часовой пояс изменён",
"Invalid request" => "Неверный запрос",
"Calendar" => "Календарь",
+"Wrong calendar" => "Неверный календарь",
"Birthday" => "День рождения",
"Business" => "Бизнес",
"Call" => "Звонить",
@@ -28,83 +27,54 @@
"Yearly" => "Каждый год",
"Not an array" => "Не массив",
"All day" => "Весь день",
-"Sunday" => "Воскресенье",
-"Monday" => "Понедельник",
-"Tuesday" => "Вторник",
-"Wednesday" => "Среда",
-"Thursday" => "Четверг",
-"Friday" => "Пятница",
-"Saturday" => "Суббота",
-"Sun." => "Вс.",
-"Mon." => "Пн.",
-"Tue." => "Вт.",
-"Wed." => "Ср.",
-"Thu." => "Чт.",
-"Fri." => "Пт.",
-"Sat." => "Сб.",
-"January" => "Январь",
-"February" => "Февраль",
-"March" => "Март",
-"April" => "Апрель",
-"May" => "Май",
-"June" => "Июнь",
-"July" => "Июль",
-"August" => "Август",
-"September" => "Сентябрь",
-"October" => "Октябрь",
-"November" => "Ноябрь",
-"December" => "Декабрь",
-"Jan." => "Янв.",
-"Feb." => "Фев.",
-"Mar." => "Мар.",
-"Apr." => "Апр.",
-"May." => "Май.",
-"Jun." => "Июн.",
-"Jul." => "Июл.",
-"Aug." => "Авг.",
-"Sep." => "Сен.",
-"Oct." => "Окт.",
-"Nov." => "Ноя.",
-"Dec." => "Дек.",
+"Missing fields" => "Незаполненные поля",
+"Title" => "Название",
+"From Date" => "Дата начала",
+"From Time" => "Время начала",
+"To Date" => "Дата окончания",
+"To Time" => "Время окончания",
+"The event ends before it starts" => "Окончание события раньше, чем его начало",
+"There was a database fail" => "Ошибка базы данных",
"Week" => "Неделя",
-"Weeks" => "Недели",
-"More before {startdate}" => "Еще до {startdate}",
-"More after {enddate}" => "Больше после {startdate}",
-"Day" => "День",
"Month" => "Месяц",
"List" => "Список",
"Today" => "Сегодня",
"Calendars" => "Календари",
-"Time" => "Время",
"There was a fail, while parsing the file." => "Не удалось обработать файл.",
"Choose active calendars" => "Выберите активные календари",
"New Calendar" => "Новый Календарь",
"CalDav Link" => "Ссылка для CalDav",
"Download" => "Скачать",
"Edit" => "Редактировать",
+"Delete" => "Удалить",
"New calendar" => "Новый календарь",
"Edit calendar" => "Редактировать календарь",
"Displayname" => "Отображаемое имя",
"Active" => "Активен",
-"Description" => "Описание",
"Calendar color" => "Цвет календаря",
"Save" => "Сохранить",
"Submit" => "Отправить",
"Cancel" => "Отмена",
"Edit an event" => "Редактировать событие",
-"Title" => "Название",
+"Export" => "Экспортировать",
"Title of the Event" => "Название событие",
-"Location" => "Место",
-"Location of the Event" => "Место события",
"Category" => "Категория",
"Select category" => "Выбрать категорию",
"All Day Event" => "Событие на весь день",
"From" => "От",
"To" => "До",
+"Advanced options" => "Дополнительные параметры",
"Repeat" => "Повтор",
-"Attendees" => "Присутствующие",
+"Location" => "Место",
+"Location of the Event" => "Место события",
+"Description" => "Описание",
"Description of the Event" => "Описание события",
-"Close" => "Закрыть",
+"Please choose the calendar" => "Пожалуйста, выберите календарь",
+"Import" => "Импортировать",
"Create a new event" => "Создать новое событие",
-"Timezone" => "Часовой пояс"
+"Timezone" => "Часовой пояс",
+"Timeformat" => "Формат времени",
+"24h" => "24ч",
+"12h" => "12ч",
+"Calendar CalDAV syncing address:" => "Адрес синхронизации календаря CalDAV:"
);
diff --git a/apps/calendar/l10n/sk_SK.php b/apps/calendar/l10n/sk_SK.php
new file mode 100644
index 00000000000..ec0485bfc9a
--- /dev/null
+++ b/apps/calendar/l10n/sk_SK.php
@@ -0,0 +1,80 @@
+<?php $TRANSLATIONS = array(
+"Timezone changed" => "Časové pásmo zmenené",
+"Invalid request" => "Neplatná požiadavka",
+"Calendar" => "Kalendár",
+"Wrong calendar" => "Zlý kalendár",
+"Birthday" => "Narodeniny",
+"Business" => "Podnikanie",
+"Call" => "Hovor",
+"Clients" => "Klienti",
+"Deliverer" => "Doručovateľ",
+"Holidays" => "Prázdniny",
+"Ideas" => "Nápady",
+"Journey" => "Cesta",
+"Jubilee" => "Jubileá",
+"Meeting" => "Stretnutia",
+"Other" => "Ostatné",
+"Personal" => "Osobné",
+"Projects" => "Projekty",
+"Questions" => "Otázky",
+"Work" => "Práca",
+"Does not repeat" => "Neopakovať",
+"Daily" => "Denne",
+"Weekly" => "Týždenne",
+"Every Weekday" => "Každý výkend",
+"Bi-Weekly" => "Každý druhý týždeň",
+"Monthly" => "Mesačne",
+"Yearly" => "Ročne",
+"Not an array" => "Nie je pole",
+"All day" => "Celý deň",
+"Missing fields" => "Nevyplnené položky",
+"Title" => "Nadpis",
+"From Date" => "Od Dátumu",
+"From Time" => "Od Času",
+"To Date" => "Do Dátumu",
+"To Time" => "Do Času",
+"The event ends before it starts" => "Udalosť končí ešte pred tým než začne",
+"There was a database fail" => "Nastala chyba databázy",
+"Week" => "Týždeň",
+"Month" => "Mesiac",
+"List" => "Zoznam",
+"Today" => "Dnes",
+"Calendars" => "Kalendáre",
+"There was a fail, while parsing the file." => "Nastala chyba počas parsovania súboru.",
+"Choose active calendars" => "Zvoľte aktívne kalendáre",
+"New Calendar" => "Nový kalendár",
+"CalDav Link" => "CalDav odkaz",
+"Download" => "Stiahnuť",
+"Edit" => "Upraviť",
+"Delete" => "Odstrániť",
+"New calendar" => "Nový kalendár",
+"Edit calendar" => "Upraviť kalendár",
+"Displayname" => "Zobrazené meno",
+"Active" => "Aktívne",
+"Calendar color" => "Farba kalendáru",
+"Save" => "Uložiť",
+"Submit" => "Odoslať",
+"Cancel" => "Zrušiť",
+"Edit an event" => "Upraviť udalosť",
+"Export" => "Exportovať",
+"Title of the Event" => "Nadpis Udalosti",
+"Category" => "Kategória",
+"Select category" => "Vybrať kategóriu",
+"All Day Event" => "Celodenná udalosť",
+"From" => "Od",
+"To" => "Do",
+"Advanced options" => "Pokročilé možnosti",
+"Repeat" => "Opakovať",
+"Location" => "Poloha",
+"Location of the Event" => "Poloha Udalosti",
+"Description" => "Popis",
+"Description of the Event" => "Popis Udalosti",
+"Please choose the calendar" => "Prosím zvoľte kalendár",
+"Import" => "Importovať",
+"Create a new event" => "Vytvoriť udalosť",
+"Timezone" => "Časová zóna",
+"Timeformat" => "Formát času",
+"24h" => "24h",
+"12h" => "12h",
+"Calendar CalDAV syncing address:" => "Synchronizačná adresa kalendára CalDAV: "
+);
diff --git a/apps/calendar/l10n/sl.php b/apps/calendar/l10n/sl.php
new file mode 100644
index 00000000000..753a31ac665
--- /dev/null
+++ b/apps/calendar/l10n/sl.php
@@ -0,0 +1,80 @@
+<?php $TRANSLATIONS = array(
+"Timezone changed" => "Časovna Cona spremenjena",
+"Invalid request" => "Neveljavna zahteva",
+"Calendar" => "Kolendar",
+"Wrong calendar" => "Napačen Kolendar",
+"Birthday" => "Rojstni Dan",
+"Business" => "Poslovno",
+"Call" => "Pokliči",
+"Clients" => "Stranke",
+"Deliverer" => "Dobavitelj",
+"Holidays" => "Dopust",
+"Ideas" => "Ideje",
+"Journey" => "Potovanje",
+"Jubilee" => "Obletnica",
+"Meeting" => "Sestanek",
+"Other" => "Ostalo",
+"Personal" => "Osebno",
+"Projects" => "Projekt",
+"Questions" => "Vprašanja",
+"Work" => "Delo",
+"Does not repeat" => "Se ne ponavlja",
+"Daily" => "Dnevno",
+"Weekly" => "Tedensko",
+"Every Weekday" => "Vsak dan v tednu",
+"Bi-Weekly" => "Dvakrat Tedensko",
+"Monthly" => "Mesečno",
+"Yearly" => "Letno",
+"Not an array" => "Not an array",
+"All day" => "Cel dan",
+"Missing fields" => "Mankajoča polja",
+"Title" => "Naslov",
+"From Date" => "od Datum",
+"From Time" => "od Čas",
+"To Date" => "do Datum",
+"To Time" => "do Čas",
+"The event ends before it starts" => "Dogodek se konča preden se začne",
+"There was a database fail" => "Napaka v podatkovni bazi. Kontaktirajte Administratorja",
+"Week" => "Teden",
+"Month" => "Mesec",
+"List" => "Seznam",
+"Today" => "Danes",
+"Calendars" => "Kolendarji",
+"There was a fail, while parsing the file." => "Pri razčlenjevanju datoteke je prišlo do napake.",
+"Choose active calendars" => "Izberi aktivni Kolendar",
+"New Calendar" => "Nov Kolendar",
+"CalDav Link" => "CalDav Povezava",
+"Download" => "Naloži dol",
+"Edit" => "Uredi",
+"Delete" => "Izbriši",
+"New calendar" => "Nov Kolendar",
+"Edit calendar" => "Uredi Kolendar",
+"Displayname" => "Prikazano Ime",
+"Active" => "Aktivno",
+"Calendar color" => "Barva Kolendarja",
+"Save" => "Shrani",
+"Submit" => "Potrdi",
+"Cancel" => "Prekliči",
+"Edit an event" => "Uredi Dogodek",
+"Export" => "Izvozi",
+"Title of the Event" => "Naslov",
+"Category" => "Kategorija",
+"Select category" => "Izberi Kategorijo",
+"All Day Event" => "Celodnevni Dogodek",
+"From" => "Od",
+"To" => "Za",
+"Advanced options" => "Napredne Možnosti",
+"Repeat" => "Ponovi",
+"Location" => "Lokacija",
+"Location of the Event" => "Lokacija dogodka",
+"Description" => "Opis",
+"Description of the Event" => "Opis Dogodka",
+"Please choose the calendar" => "Izberi kolendar",
+"Import" => "Uvozi",
+"Create a new event" => "Ustvari nov dogodek",
+"Timezone" => "Časovna Cona",
+"Timeformat" => "Časovni format",
+"24h" => "24ur",
+"12h" => "12ur",
+"Calendar CalDAV syncing address:" => "Kolendarjev CalDAV sinhronizacijski naslov"
+);
diff --git a/apps/calendar/l10n/sr.php b/apps/calendar/l10n/sr.php
index 67027204953..f006c9ec8e6 100644
--- a/apps/calendar/l10n/sr.php
+++ b/apps/calendar/l10n/sr.php
@@ -1,8 +1,23 @@
<?php $TRANSLATIONS = array(
-"Authentication error" => "Грешка аутентификације",
"Timezone changed" => "Временска зона је промењена",
"Invalid request" => "Неисправан захтев",
"Calendar" => "Календар",
+"Wrong calendar" => "Погрешан календар",
+"Birthday" => "Рођендан",
+"Business" => "Посао",
+"Call" => "Позив",
+"Clients" => "Клијенти",
+"Deliverer" => "Достављач",
+"Holidays" => "Празници",
+"Ideas" => "Идеје",
+"Journey" => "путовање",
+"Jubilee" => "јубилеј",
+"Meeting" => "Састанак",
+"Other" => "Друго",
+"Personal" => "Лично",
+"Projects" => "Пројекти",
+"Questions" => "Питања",
+"Work" => "Посао",
"Does not repeat" => "Не понавља се",
"Daily" => "дневно",
"Weekly" => "недељно",
@@ -10,74 +25,41 @@
"Bi-Weekly" => "двонедељно",
"Monthly" => "месечно",
"Yearly" => "годишње",
+"Not an array" => "Није област",
"All day" => "Цео дан",
-"Sunday" => "Недеља",
-"Monday" => "Понедељак",
-"Tuesday" => "Уторак",
-"Wednesday" => "Среда",
-"Thursday" => "Четвртак",
-"Friday" => "Петак",
-"Saturday" => "Субота",
-"Sun." => "Нед",
-"Mon." => "Пон",
-"Tue." => "Уто",
-"Wed." => "Сре",
-"Thu." => "Чет",
-"Fri." => "Пет",
-"Sat." => "Суб",
-"January" => "Јануар",
-"February" => "Фебруар",
-"March" => "Март",
-"April" => "Април",
-"May" => "Мај",
-"June" => "Јун",
-"July" => "Јул",
-"August" => "Август",
-"September" => "Септембар",
-"October" => "Октобар",
-"November" => "Новембар",
-"December" => "Децембар",
-"Jan." => "Јан",
-"Feb." => "Феб",
-"Mar." => "Мар",
-"Apr." => "Апр",
-"Jun." => "Јун",
-"Jul." => "Јул",
-"Aug." => "Авг",
-"Sep." => "Сеп",
-"Oct." => "Окт",
-"Nov." => "Нов",
-"Dec." => "Дец",
+"Title" => "Наслов",
"Week" => "Недеља",
-"Weeks" => "Недеља",
-"Day" => "Дан",
"Month" => "Месец",
+"List" => "Списак",
"Today" => "Данас",
"Calendars" => "Календари",
-"Time" => "Време",
"There was a fail, while parsing the file." => "дошло је до грешке при расчлањивању фајла.",
"Choose active calendars" => "Изаберите активне календаре",
+"New Calendar" => "Нови календар",
+"CalDav Link" => "КалДав веза",
"Download" => "Преузми",
"Edit" => "Уреди",
+"Delete" => "Обриши",
+"New calendar" => "Нови календар",
"Edit calendar" => "Уреди календар",
"Displayname" => "Приказаноиме",
"Active" => "Активан",
-"Description" => "Опис",
"Calendar color" => "Боја календара",
+"Save" => "Сними",
"Submit" => "Пошаљи",
+"Cancel" => "Откажи",
"Edit an event" => "Уреди догађај",
-"Title" => "Наслов",
"Title of the Event" => "Наслов догађаја",
-"Location" => "Локација",
-"Location of the Event" => "Локација догађаја",
"Category" => "Категорија",
+"Select category" => "Изаберите категорију",
"All Day Event" => "Целодневни догађај",
"From" => "Од",
"To" => "До",
"Repeat" => "Понављај",
-"Attendees" => "Присутни",
+"Location" => "Локација",
+"Location of the Event" => "Локација догађаја",
+"Description" => "Опис",
"Description of the Event" => "Опис догађаја",
-"Close" => "Затвори",
"Create a new event" => "Направи нови догађај",
"Timezone" => "Временска зона"
);
diff --git a/apps/calendar/l10n/sr@latin.php b/apps/calendar/l10n/sr@latin.php
index 55df4e21ba8..ea0181919d9 100644
--- a/apps/calendar/l10n/sr@latin.php
+++ b/apps/calendar/l10n/sr@latin.php
@@ -1,8 +1,23 @@
<?php $TRANSLATIONS = array(
-"Authentication error" => "Greška autentifikacije",
"Timezone changed" => "Vremenska zona je promenjena",
"Invalid request" => "Neispravan zahtev",
"Calendar" => "Kalendar",
+"Wrong calendar" => "Pogrešan kalendar",
+"Birthday" => "Rođendan",
+"Business" => "Posao",
+"Call" => "Poziv",
+"Clients" => "Klijenti",
+"Deliverer" => "Dostavljač",
+"Holidays" => "Praznici",
+"Ideas" => "Ideje",
+"Journey" => "putovanje",
+"Jubilee" => "jubilej",
+"Meeting" => "Sastanak",
+"Other" => "Drugo",
+"Personal" => "Lično",
+"Projects" => "Projekti",
+"Questions" => "Pitanja",
+"Work" => "Posao",
"Does not repeat" => "Ne ponavlja se",
"Daily" => "dnevno",
"Weekly" => "nedeljno",
@@ -10,74 +25,41 @@
"Bi-Weekly" => "dvonedeljno",
"Monthly" => "mesečno",
"Yearly" => "godišnje",
+"Not an array" => "Nije oblast",
"All day" => "Ceo dan",
-"Sunday" => "Nedelja",
-"Monday" => "Ponedeljak",
-"Tuesday" => "Utorak",
-"Wednesday" => "Sreda",
-"Thursday" => "Četvrtak",
-"Friday" => "Petak",
-"Saturday" => "Subota",
-"Sun." => "Ned",
-"Mon." => "Pon",
-"Tue." => "Uto",
-"Wed." => "Sre",
-"Thu." => "Čet",
-"Fri." => "Pet",
-"Sat." => "Sub",
-"January" => "Januar",
-"February" => "Februar",
-"March" => "Mart",
-"April" => "April",
-"May" => "Maj",
-"June" => "Jun",
-"July" => "Jul",
-"August" => "Avgust",
-"September" => "Septembar",
-"October" => "Oktobar",
-"November" => "Novembar",
-"December" => "Decembar",
-"Jan." => "Jan",
-"Feb." => "Feb",
-"Mar." => "Mar",
-"Apr." => "Apr",
-"Jun." => "Jun",
-"Jul." => "Jul",
-"Aug." => "Avg",
-"Sep." => "Sep",
-"Oct." => "Okt",
-"Nov." => "Nov",
-"Dec." => "Dec",
+"Title" => "Naslov",
"Week" => "Nedelja",
-"Weeks" => "Nedelja",
-"Day" => "Dan",
"Month" => "Mesec",
+"List" => "Spisak",
"Today" => "Danas",
"Calendars" => "Kalendari",
-"Time" => "Vreme",
"There was a fail, while parsing the file." => "došlo je do greške pri rasčlanjivanju fajla.",
"Choose active calendars" => "Izaberite aktivne kalendare",
+"New Calendar" => "Novi kalendar",
+"CalDav Link" => "KalDav veza",
"Download" => "Preuzmi",
"Edit" => "Uredi",
+"Delete" => "Obriši",
+"New calendar" => "Novi kalendar",
"Edit calendar" => "Uredi kalendar",
"Displayname" => "Prikazanoime",
"Active" => "Aktivan",
-"Description" => "Opis",
"Calendar color" => "Boja kalendara",
+"Save" => "Snimi",
"Submit" => "Pošalji",
+"Cancel" => "Otkaži",
"Edit an event" => "Uredi događaj",
-"Title" => "Naslov",
"Title of the Event" => "Naslov događaja",
-"Location" => "Lokacija",
-"Location of the Event" => "Lokacija događaja",
"Category" => "Kategorija",
+"Select category" => "Izaberite kategoriju",
"All Day Event" => "Celodnevni događaj",
"From" => "Od",
"To" => "Do",
"Repeat" => "Ponavljaj",
-"Attendees" => "Prisutni",
+"Location" => "Lokacija",
+"Location of the Event" => "Lokacija događaja",
+"Description" => "Opis",
"Description of the Event" => "Opis događaja",
-"Close" => "Zatvori",
"Create a new event" => "Napravi novi događaj",
"Timezone" => "Vremenska zona"
);
diff --git a/apps/calendar/l10n/sv.php b/apps/calendar/l10n/sv.php
new file mode 100644
index 00000000000..8923395a34d
--- /dev/null
+++ b/apps/calendar/l10n/sv.php
@@ -0,0 +1,80 @@
+<?php $TRANSLATIONS = array(
+"Timezone changed" => "Tidszon ändrad",
+"Invalid request" => "Ogiltig begäran",
+"Calendar" => "Kalender",
+"Wrong calendar" => "Fel kalender",
+"Birthday" => "Födelsedag",
+"Business" => "Företag",
+"Call" => "Ringa",
+"Clients" => "Klienter",
+"Deliverer" => "Leverantör",
+"Holidays" => "Semester",
+"Ideas" => "Idéer",
+"Journey" => "Resa",
+"Jubilee" => "Jubileum",
+"Meeting" => "Möte",
+"Other" => "Annat",
+"Personal" => "Personlig",
+"Projects" => "Projekt",
+"Questions" => "Frågor",
+"Work" => "Arbetet",
+"Does not repeat" => "Upprepas inte",
+"Daily" => "Dagligen",
+"Weekly" => "Varje vecka",
+"Every Weekday" => "Varje vardag",
+"Bi-Weekly" => "Varannan vecka",
+"Monthly" => "Varje månad",
+"Yearly" => "Årligen",
+"Not an array" => "ingen rad",
+"All day" => "Hela dagen",
+"Missing fields" => "Saknade fält",
+"Title" => "Rubrik",
+"From Date" => "Från datum",
+"From Time" => "Från tid",
+"To Date" => "Till datum",
+"To Time" => "Till tid",
+"The event ends before it starts" => "Händelsen slutar innan den börjar",
+"There was a database fail" => "Det blev ett databasfel",
+"Week" => "Vecka",
+"Month" => "Månad",
+"List" => "Lista",
+"Today" => "Idag",
+"Calendars" => "Kalendrar",
+"There was a fail, while parsing the file." => "Det blev ett fel medan filen analyserades.",
+"Choose active calendars" => "Välj aktiva kalendrar",
+"New Calendar" => "Ny kalender",
+"CalDav Link" => "CalDAV-länk",
+"Download" => "Ladda ner",
+"Edit" => "Redigera",
+"Delete" => "Radera",
+"New calendar" => "Nya kalender",
+"Edit calendar" => "Redigera kalender",
+"Displayname" => "Visningsnamn",
+"Active" => "Aktiv",
+"Calendar color" => "Kalender-färg",
+"Save" => "Spara",
+"Submit" => "Lägg till",
+"Cancel" => "Avbryt",
+"Edit an event" => "Redigera en händelse",
+"Export" => "Exportera",
+"Title of the Event" => "Rubrik för händelsen",
+"Category" => "Kategori",
+"Select category" => "Välj kategori",
+"All Day Event" => "Hela dagen",
+"From" => "Från",
+"To" => "Till",
+"Advanced options" => "Avancerade alternativ",
+"Repeat" => "Upprepa",
+"Location" => "Plats",
+"Location of the Event" => "Platsen för händelsen",
+"Description" => "Beskrivning",
+"Description of the Event" => "Beskrivning av händelse",
+"Please choose the calendar" => "Välj kalender",
+"Import" => "Importera",
+"Create a new event" => "Skapa en ny händelse",
+"Timezone" => "Tidszon",
+"Timeformat" => "Tidsformat",
+"24h" => "24h",
+"12h" => "12h",
+"Calendar CalDAV syncing address:" => "Synkroniseringsadress för CalDAV kalender:"
+);
diff --git a/apps/calendar/l10n/tr.php b/apps/calendar/l10n/tr.php
new file mode 100644
index 00000000000..6a46c239c7d
--- /dev/null
+++ b/apps/calendar/l10n/tr.php
@@ -0,0 +1,80 @@
+<?php $TRANSLATIONS = array(
+"Timezone changed" => "Zaman dilimi değiştirildi",
+"Invalid request" => "Geçersiz istek",
+"Calendar" => "Takvim",
+"Wrong calendar" => "Yanlış takvim",
+"Birthday" => "Doğum günü",
+"Business" => "İş",
+"Call" => "Arama",
+"Clients" => "Müşteriler",
+"Deliverer" => "Teslimatçı",
+"Holidays" => "Tatil günleri",
+"Ideas" => "Fikirler",
+"Journey" => "Seyahat",
+"Jubilee" => "Yıl dönümü",
+"Meeting" => "Toplantı",
+"Other" => "Diğer",
+"Personal" => "Kişisel",
+"Projects" => "Projeler",
+"Questions" => "Sorular",
+"Work" => "İş",
+"Does not repeat" => "Tekrar etmiyor",
+"Daily" => "Günlük",
+"Weekly" => "Haftalı",
+"Every Weekday" => "Haftaiçi Her gün",
+"Bi-Weekly" => "İki haftada bir",
+"Monthly" => "Aylık",
+"Yearly" => "Yıllı",
+"Not an array" => "Bir dizi değil",
+"All day" => "Tüm gün",
+"Missing fields" => "Eksik alanlar",
+"Title" => "Başlık",
+"From Date" => "Bu Tarihten",
+"From Time" => "Bu Saatten",
+"To Date" => "Bu Tarihe",
+"To Time" => "Bu Saate",
+"The event ends before it starts" => "Olay başlamadan önce bitiyor",
+"There was a database fail" => "Bir veritabanı başarısızlığı oluştu",
+"Week" => "Hafta",
+"Month" => "Ay",
+"List" => "Liste",
+"Today" => "Bugün",
+"Calendars" => "Takvimler",
+"There was a fail, while parsing the file." => "Dosya okunurken başarısızlık oldu.",
+"Choose active calendars" => "Aktif takvimleri seçin",
+"New Calendar" => "Yeni Takvim",
+"CalDav Link" => "CalDav Bağlantısı",
+"Download" => "İndir",
+"Edit" => "Düzenle",
+"Delete" => "Sil",
+"New calendar" => "Yeni takvim",
+"Edit calendar" => "Takvimi düzenle",
+"Displayname" => "Görünümadı",
+"Active" => "Aktif",
+"Calendar color" => "Takvim rengi",
+"Save" => "Kaydet",
+"Submit" => "Gönder",
+"Cancel" => "İptal",
+"Edit an event" => "Bir olay düzenle",
+"Export" => "Dışa aktar",
+"Title of the Event" => "Olayın Başlığı",
+"Category" => "Kategori",
+"Select category" => "Kategori seçin",
+"All Day Event" => "Tüm Gün Olay",
+"From" => "Kimden",
+"To" => "Kime",
+"Advanced options" => "Gelişmiş opsiyonlar",
+"Repeat" => "Tekrar",
+"Location" => "Konum",
+"Location of the Event" => "Olayın Konumu",
+"Description" => "Açıklama",
+"Description of the Event" => "Olayın Açıklaması",
+"Please choose the calendar" => "Lütfen takvimi seçin",
+"Import" => "İçe Al",
+"Create a new event" => "Yeni olay oluştur",
+"Timezone" => "Zaman dilimi",
+"Timeformat" => "Saat biçimi",
+"24h" => "24s",
+"12h" => "12s",
+"Calendar CalDAV syncing address:" => "CalDAV Takvim senkron adresi:"
+);
diff --git a/apps/calendar/l10n/zh_CN.php b/apps/calendar/l10n/zh_CN.php
index 2b7dc5677a4..480b4530299 100644
--- a/apps/calendar/l10n/zh_CN.php
+++ b/apps/calendar/l10n/zh_CN.php
@@ -1,8 +1,23 @@
<?php $TRANSLATIONS = array(
-"Authentication error" => "验证错误",
"Timezone changed" => "时区已修改",
"Invalid request" => "非法请求",
"Calendar" => "日历",
+"Wrong calendar" => "错误的日历",
+"Birthday" => "生日",
+"Business" => "商务",
+"Call" => "呼叫",
+"Clients" => "客户",
+"Deliverer" => "派送",
+"Holidays" => "节日",
+"Ideas" => "想法",
+"Journey" => "旅行",
+"Jubilee" => "周年纪念",
+"Meeting" => "会议",
+"Other" => "其他",
+"Personal" => "个人",
+"Projects" => "项目",
+"Questions" => "问题",
+"Work" => "工作",
"Does not repeat" => "不重复",
"Daily" => "每天",
"Weekly" => "每周",
@@ -10,74 +25,56 @@
"Bi-Weekly" => "每两周",
"Monthly" => "每月",
"Yearly" => "每年",
+"Not an array" => "不是一个数组",
"All day" => "全天",
-"Sunday" => "星期日",
-"Monday" => "星期一",
-"Tuesday" => "星期二",
-"Wednesday" => "星期三",
-"Thursday" => "星期四",
-"Friday" => "星期五",
-"Saturday" => "星期六",
-"Sun." => "日",
-"Mon." => "一",
-"Tue." => "二",
-"Wed." => "三",
-"Thu." => "四",
-"Fri." => "五",
-"Sat." => "六",
-"January" => "1月",
-"February" => "2月",
-"March" => "3月",
-"April" => "4月",
-"May" => "5月",
-"June" => "6月",
-"July" => "7月",
-"August" => "8月",
-"September" => "9月",
-"October" => "10月",
-"November" => "11月",
-"December" => "12月",
-"Jan." => "1月",
-"Feb." => "2月",
-"Mar." => "3月",
-"Apr." => "4月",
-"Jun." => "6月",
-"Jul." => "7月",
-"Aug." => "8月",
-"Sep." => "9月",
-"Oct." => "10月",
-"Nov." => "11月",
-"Dec." => "12月",
+"Missing fields" => "缺少字段",
+"Title" => "标题",
+"From Date" => "从",
+"From Time" => "从",
+"To Date" => "至",
+"To Time" => "至",
+"The event ends before it starts" => "事件在开始前已结束",
+"There was a database fail" => "数据库访问失败",
"Week" => "星期",
-"Weeks" => "星期",
-"Day" => "天",
"Month" => "月",
+"List" => "列表",
"Today" => "今天",
"Calendars" => "日历",
-"Time" => "时间",
"There was a fail, while parsing the file." => "解析文件失败",
"Choose active calendars" => "选择活动日历",
+"New Calendar" => "新日历",
+"CalDav Link" => "CalDav 链接",
"Download" => "下载",
"Edit" => "编辑",
+"Delete" => "删除",
+"New calendar" => "新日历",
"Edit calendar" => "编辑日历",
"Displayname" => "显示名称",
"Active" => "激活",
-"Description" => "描述",
"Calendar color" => "日历颜色",
+"Save" => "保存",
"Submit" => "提交",
+"Cancel" => "取消",
"Edit an event" => "编辑事件",
-"Title" => "标题",
+"Export" => "导出",
"Title of the Event" => "事件标题",
-"Location" => "地点",
-"Location of the Event" => "事件地点",
"Category" => "分类",
+"Select category" => "选择分类",
"All Day Event" => "全天事件",
"From" => "自",
"To" => "至",
+"Advanced options" => "高级选项",
"Repeat" => "重复",
-"Attendees" => "参加者",
+"Location" => "地点",
+"Location of the Event" => "事件地点",
+"Description" => "描述",
"Description of the Event" => "事件描述",
-"Close" => "关闭",
+"Please choose the calendar" => "请选择日历",
+"Import" => "导入",
"Create a new event" => "创建新事件",
-"Timezone" => "时区"
+"Timezone" => "时区",
+"Timeformat" => "时间格式",
+"24h" => "24小时",
+"12h" => "12小时",
+"Calendar CalDAV syncing address:" => "日历CalDAV 同步地址:"
);
diff --git a/apps/calendar/lib/calendar.php b/apps/calendar/lib/calendar.php
index ea60526a5bd..5e272991f20 100644
--- a/apps/calendar/lib/calendar.php
+++ b/apps/calendar/lib/calendar.php
@@ -151,11 +151,11 @@ class OC_Calendar_Calendar{
$calendar = self::find($id);
// Keep old stuff
- if(is_null($name)) $name = $calendar['name'];
+ if(is_null($name)) $name = $calendar['displayname'];
if(is_null($components)) $components = $calendar['components'];
if(is_null($timezone)) $timezone = $calendar['timezone'];
if(is_null($order)) $order = $calendar['calendarorder'];
- if(is_null($color)) $color = $calendar['color'];
+ if(is_null($color)) $color = $calendar['calendarcolor'];
$stmt = OC_DB::prepare( 'UPDATE *PREFIX*calendar_calendars SET displayname=?,calendarorder=?,calendarcolor=?,timezone=?,components=?,ctag=ctag+1 WHERE id=?' );
$result = $stmt->execute(array($name,$order,$color,$timezone,$components,$id));
@@ -231,13 +231,13 @@ class OC_Calendar_Calendar{
public static function getCalendarColorOptions(){
return array(
'ff0000', // "Red"
- '00ff00', // "Green"
+ 'b3dc6c', // "Green"
'ffff00', // "Yellow"
'808000', // "Olive"
'ffa500', // "Orange"
'ff7f50', // "Coral"
'ee82ee', // "Violet"
- 'ecc255', // dark yellow
+ '9fc6e7', // "light blue"
);
}
public static function getEventSourceInfo($calendar){
diff --git a/apps/calendar/templates/calendar.php b/apps/calendar/templates/calendar.php
index 50d3d70347a..6b2cd68c6fb 100755
--- a/apps/calendar/templates/calendar.php
+++ b/apps/calendar/templates/calendar.php
@@ -27,6 +27,20 @@
echo '$(\'#calendar_holder\').fullCalendar(\'gotoDate\', ' . $year . ', ' . --$month . ', ' . $day . ');';
echo '$(\'#dialog_holder\').load(OC.filePath(\'calendar\', \'ajax\', \'editeventform.php\') + \'?id=\' + ' . $_['showevent'] . ' , Calendar.UI.startEventDialog);';
}
+
+ switch(OC_Preferences::getValue(OC_USER::getUser(), 'calendar', 'currentview', 'month')){
+ case 'agendaWeek':
+ echo '$(\'#oneweekview_radio\').css(\'color\', \'#6193CF\');';
+ break;
+ case 'month':
+ echo '$(\'#onemonthview_radio\').css(\'color\', \'#6193CF\');';
+ break;
+ case 'list':
+ echo '$(\'#listview_radio\').css(\'color\', \'#6193CF\');';
+ break;
+ default:
+ break;
+ }
?>
});
</script>
diff --git a/apps/calendar/templates/part.import.php b/apps/calendar/templates/part.import.php
index b8805e6b6ef..8f46484b42b 100644
--- a/apps/calendar/templates/part.import.php
+++ b/apps/calendar/templates/part.import.php
@@ -1,69 +1,27 @@
-<div id="importdialog" title="<?php echo $l->t("Import Ical File"); ?>">
-<input type="hidden" id="filename" value="<?php echo $_GET["filename"];?>">
-<input type="hidden" id="path" value="<?php echo $_GET["path"];?>">
-<div id="first"><strong style="text-align: center;margin: 0 auto;"><?php echo $l->t("How to import the new calendar?");?></strong>
-<br><br>
-<input style="float: left;" type="button" value="<?php echo $l->t("Import into an existing calendar"); ?>" onclick="$('#first').css('display', 'none');$('#existingcal').css('display', 'block');">
-<input style="float: right;" type="button" value="<?php echo $l->t("Import into a new calendar");?>" onclick="$('#first').css('display', 'none');$('#newcal').css('display', 'block');">
-</div>
-<div id="existingcal" style="display: none;">
-<strong><?php echo $l->t("Please choose the calendar"); ?></strong><br><br>
-<form id="inputradioform">
+<div id="calendar_import_dialog" title="<?php echo $l->t("Import a calendar file"); ?>">
+<div id="form_container">
+<input type="hidden" id="filename" value="<?php echo $_['filename'];?>">
+<input type="hidden" id="path" value="<?php echo $_['path'];?>">
+<input type="hidden" id="progressfile" value="<?php echo md5(session_id()) . '.txt';?>">
+<p style="text-align:center;"><b><?php echo $l->t('Please choose the calendar'); ?></b>
+<select style="width:100%;" id="calendar" name="calendar">
<?php
-$calendars = OC_Calendar_Calendar::allCalendars(OC_User::getUser());
-foreach($calendars as $calendar){
- echo '<input type="radio" style="width: 20px;" name="calendar" id="radio_' . $calendar["id"] . '" value="' . $calendar["id"] . '">' . $calendar["displayname"] . '<br>';
-}
+$calendar_options = OC_Calendar_Calendar::allCalendars(OC_User::getUser());
+$calendar_options[] = array('id'=>'newcal', 'displayname'=>$l->t('create a new calendar'));
+echo html_select_options($calendar_options, $calendar_options[0]['id'], array('value'=>'id', 'label'=>'displayname'));
?>
-</form>
-<br><br>
-<input type="button" value="<?php echo $l->t("Import");?>!" onclick="importcal('existing');">
-<br><br>
-<input type="button" value="<?php echo $l->t("Back");?>" onclick="$('#existingcal').css('display', 'none');$('#first').css('display', 'block');">
+</select>
+<div id="newcalform" style="display: none;">
+ <input type="text" style="width: 97%;" placeholder="<?php echo $l->t('Name of new calendar'); ?>" id="newcalendar" name="newcalendar">
+</div>
+<input type="button" value="<?php echo $l->t("Import");?>!" id="startimport">
</div>
-<div id="newcal" style="display: none;">
-<strong><?php echo $l->t("Please fill out the form"); ?></strong>
-<!-- modified part of part.editcalendar.php -->
-<table width="100%" style="border: 0;">
-<tr>
-<th><?php echo $l->t('Displayname') ?></th>
-<td>
-<input id="displayname" type="text" value="">
-</td>
-</tr>
-</table>
-<!-- end of modified part -->
-<br><br>
-<input type="button" value="<?php echo $l->t("Import");?>!" onclick="importcal('new');">
-<br><br>
-<input type="button" value="<?php echo $l->t("Back");?>" onclick="$('#newcal').css('display', 'none');$('#first').css('display', 'block');">
+<div id="progressbar_container" style="display: none">
+<p style="text-align:center;"><b><?php echo $l->t('Importing calendar'); ?></b>
+<div id="progressbar"></div>
+<div id="import_done" style="display: none;">
+<p style="text-align:center;"><b><?php echo $l->t('Calendar imported successfully'); ?></b></p>
+<input type="button" value="<?php echo $l->t('Close Dialog'); ?>" id="import_done_button">
</div>
</div>
-<script type="text/javascript">
-$("input:radio[name='calendar']:first").attr("checked","checked");
-$("#importdialog").dialog({
- width : 500,
- close : function(event, ui) {
- $(this).dialog('destroy').remove();
- $("#importdialogholder").remove();
- }
-});
-function importcal(importtype){
- var path = $("#path").val();
- var file = $("#filename").val();
- if(importtype == "existing"){
- var calid = $("input:radio[name='calendar']:checked").val();
- $.getJSON(OC.filePath('calendar', '', 'import.php') + "?import=existing&calid=" + calid + "&path=" + path + "&file=" + file, function(){
- $("#importdialog").dialog('destroy').remove();
- $("#importdialogholder").remove();
- });
- }
- if(importtype == "new"){
- var calname = $("#displayname").val();
- $.post(OC.filePath('calendar', '', 'import.php'), {'import':'new', 'calname':calname, 'path':path, 'file':file}, function(){
- $("#importdialog").dialog('destroy').remove();
- $("#importdialogholder").remove();
- });
- }
-}
-</script> \ No newline at end of file
+</div> \ No newline at end of file
diff --git a/apps/contacts/ajax/activation.php b/apps/contacts/ajax/activation.php
index f4a2c94a148..fda63a528a4 100644
--- a/apps/contacts/ajax/activation.php
+++ b/apps/contacts/ajax/activation.php
@@ -10,10 +10,17 @@
require_once ("../../../lib/base.php");
OC_JSON::checkLoggedIn();
OC_JSON::checkAppEnabled('contacts');
+$l=new OC_L10N('contacts');
+
$bookid = $_POST['bookid'];
-OC_Contacts_Addressbook::setActive($bookid, $_POST['active']);
+if(!OC_Contacts_Addressbook::setActive($bookid, $_POST['active'])) {
+ OC_JSON::error(array('data' => array('message' => $l->t('Error (de)activating addressbook.'))));
+ OC_Log::write('contacts','ajax/activation.php: Error activating addressbook: '.$bookid, OC_Log::ERROR);
+ exit();
+}
$book = OC_Contacts_App::getAddressbook($bookid);
+
/* is there an OC_JSON::error() ? */
OC_JSON::success(array(
'active' => OC_Contacts_Addressbook::isActive($bookid),
diff --git a/apps/contacts/ajax/addcard.php b/apps/contacts/ajax/addcard.php
index 54c455e515f..7e47659d23b 100644
--- a/apps/contacts/ajax/addcard.php
+++ b/apps/contacts/ajax/addcard.php
@@ -26,6 +26,7 @@ require_once('../../../lib/base.php');
// Check if we are a user
OC_JSON::checkLoggedIn();
OC_JSON::checkAppEnabled('contacts');
+$l=new OC_L10N('contacts');
$aid = $_POST['id'];
$addressbook = OC_Contacts_App::getAddressbook( $aid );
@@ -54,13 +55,31 @@ foreach( $add as $propname){
$value = $values[$propname];
if( isset( $parameters[$propname] ) && count( $parameters[$propname] )){
$prop_parameters = $parameters[$propname];
- }
- else{
+ } else {
$prop_parameters = array();
}
- $vcard->addProperty($propname, $value, $prop_parameters);
+ $vcard->addProperty($propname, $value); //, $prop_parameters);
+ $line = count($vcard->children) - 1;
+ foreach ($prop_parameters as $key=>$element) {
+ if(is_array($element) && strtoupper($key) == 'TYPE') {
+ // FIXME: Maybe this doesn't only apply for TYPE?
+ // And it probably shouldn't be done here anyways :-/
+ foreach($element as $e){
+ if($e != '' && !is_null($e)){
+ $vcard->children[$line]->parameters[] = new Sabre_VObject_Parameter($key,$e);
+ }
+ }
+ } else {
+ $vcard->children[$line]->parameters[] = new Sabre_VObject_Parameter($key,$element);
+ }
+ }
}
$id = OC_Contacts_VCard::add($aid,$vcard->serialize());
-OC_Log::write('contacts','ajax/addcard.php - adding id: '.$id,OC_Log::DEBUG);
+if(!$id) {
+ OC_JSON::error(array('data' => array('message' => $l->t('There was an error adding the contact.'))));
+ OC_Log::write('contacts','ajax/addcard.php: Recieved non-positive ID on adding card: '.$name, OC_Log::ERROR);
+ exit();
+}
+// NOTE: Why is this in OC_Contacts_App?
OC_Contacts_App::renderDetails($id, $vcard);
diff --git a/apps/contacts/ajax/addproperty.php b/apps/contacts/ajax/addproperty.php
index 98877805b46..0050f5f49aa 100644
--- a/apps/contacts/ajax/addproperty.php
+++ b/apps/contacts/ajax/addproperty.php
@@ -26,21 +26,65 @@ require_once('../../../lib/base.php');
// Check if we are a user
OC_JSON::checkLoggedIn();
OC_JSON::checkAppEnabled('contacts');
+$l=new OC_L10N('contacts');
$id = $_POST['id'];
$vcard = OC_Contacts_App::getContactVCard( $id );
$name = $_POST['name'];
$value = $_POST['value'];
-$parameters = isset($_POST['parameters'])?$_POST['parameters']:array();
+if(!is_array($value)){
+ $value = trim($value);
+ if(!$value && in_array($name, array('TEL', 'EMAIL', 'ORG'))) {
+ OC_JSON::error(array('data' => array('message' => $l->t('Cannot add empty property.'))));
+ exit();
+ }
+} elseif($name === 'ADR') { // only add if non-empty elements.
+ $empty = true;
+ foreach($value as $part) {
+ if(trim($part) != '') {
+ $empty = false;
+ break;
+ }
+ }
+ if($empty) {
+ OC_JSON::error(array('data' => array('message' => $l->t('At least one of the address fields has to be filled out.'))));
+ exit();
+ }
+}
+$parameters = isset($_POST['parameters']) ? $_POST['parameters'] : array();
-$property = $vcard->addProperty($name, $value, $parameters);
+$property = $vcard->addProperty($name, $value); //, $parameters);
$line = count($vcard->children) - 1;
-OC_Contacts_VCard::edit($id,$vcard->serialize());
+// Apparently Sabre_VObject_Parameter doesn't do well with multiple values or I don't know how to do it. Tanghus.
+foreach ($parameters as $key=>$element) {
+ if(is_array($element) && strtoupper($key) == 'TYPE') {
+ // NOTE: Maybe this doesn't only apply for TYPE?
+ // And it probably shouldn't be done here anyways :-/
+ foreach($element as $e){
+ if($e != '' && !is_null($e)){
+ $vcard->children[$line]->parameters[] = new Sabre_VObject_Parameter($key,$e);
+ }
+ }
+ } else {
+ $vcard->children[$line]->parameters[] = new Sabre_VObject_Parameter($key,$element);
+ }
+}
+
+if(!OC_Contacts_VCard::edit($id,$vcard->serialize())) {
+ OC_JSON::error(array('data' => array('message' => $l->t('Error adding contact property.'))));
+ OC_Log::write('contacts','ajax/addproperty.php: Error updating contact property: '.$name, OC_Log::ERROR);
+ exit();
+}
+
+$adr_types = OC_Contacts_App::getTypesOfProperty('ADR');
+$phone_types = OC_Contacts_App::getTypesOfProperty('TEL');
$tmpl = new OC_Template('contacts','part.property');
+$tmpl->assign('adr_types',$adr_types);
+$tmpl->assign('phone_types',$phone_types);
$tmpl->assign('property',OC_Contacts_VCard::structureProperty($property,$line));
$page = $tmpl->fetchPage();
diff --git a/apps/contacts/ajax/contacts.php b/apps/contacts/ajax/contacts.php
index 54ad3e4c103..cf86764105f 100644
--- a/apps/contacts/ajax/contacts.php
+++ b/apps/contacts/ajax/contacts.php
@@ -12,21 +12,6 @@ OC_JSON::checkAppEnabled('contacts');
$ids = OC_Contacts_Addressbook::activeIds(OC_User::getUser());
$contacts = OC_Contacts_VCard::all($ids);
-//OC_Log::write('contacts','contacts.php: '.count($contacts).' contacts.',OC_Log::DEBUG);
-/*
-$addressbooks = OC_Contacts_Addressbook::active(OC_User::getUser());
-$contacts = array();
-foreach( $addressbooks as $addressbook ){
- $addressbookcontacts = OC_Contacts_VCard::all($addressbook['id']);
- foreach( $addressbookcontacts as $contact ){
- if(is_null($contact['fullname'])){
- continue;
- }
- $contacts[] = $contact;
- }
-}
-usort($contacts,'contacts_namesort');
-*/
$tmpl = new OC_TEMPLATE("contacts", "part.contacts");
$tmpl->assign('contacts', $contacts);
$page = $tmpl->fetchPage();
diff --git a/apps/contacts/ajax/createaddressbook.php b/apps/contacts/ajax/createaddressbook.php
index f94ad34e8dc..edcf794f497 100644
--- a/apps/contacts/ajax/createaddressbook.php
+++ b/apps/contacts/ajax/createaddressbook.php
@@ -1,6 +1,6 @@
<?php
/**
- * Copyright (c) 2011 Thomas Tanghus <thomas@tanghus.net>
+ * Copyright (c) 2011-2012 Thomas Tanghus <thomas@tanghus.net>
* Copyright (c) 2011 Bart Visscher <bartv@thisnet.nl>
* This file is licensed under the Affero General Public License version 3 or
* later.
@@ -16,7 +16,17 @@ OC_JSON::checkAppEnabled('contacts');
$userid = OC_User::getUser();
$bookid = OC_Contacts_Addressbook::add($userid, $_POST['name'], null);
-OC_Contacts_Addressbook::setActive($bookid, 1);
+if(!$bookid) {
+ OC_JSON::error(array('data' => array('message' => $l->t('Error adding addressbook.'))));
+ OC_Log::write('contacts','ajax/createaddressbook.php: Error adding addressbook: '.$_POST['name'], OC_Log::ERROR);
+ exit();
+}
+
+if(!OC_Contacts_Addressbook::setActive($bookid, 1)) {
+ OC_JSON::error(array('data' => array('message' => $l->t('Error activating addressbook.'))));
+ OC_Log::write('contacts','ajax/createaddressbook.php: Error activating addressbook: '.$bookid, OC_Log::ERROR);
+ //exit();
+}
$addressbook = OC_Contacts_App::getAddressbook($bookid);
$tmpl = new OC_Template('contacts', 'part.chooseaddressbook.rowfields');
$tmpl->assign('addressbook', $addressbook);
diff --git a/apps/contacts/ajax/deleteproperty.php b/apps/contacts/ajax/deleteproperty.php
index f69735e61c6..89cf292f4f8 100644
--- a/apps/contacts/ajax/deleteproperty.php
+++ b/apps/contacts/ajax/deleteproperty.php
@@ -26,6 +26,7 @@ require_once('../../../lib/base.php');
// Check if we are a user
OC_JSON::checkLoggedIn();
OC_JSON::checkAppEnabled('contacts');
+$l10n = new OC_L10N('contacts');
$id = $_GET['id'];
$checksum = $_GET['checksum'];
@@ -35,5 +36,10 @@ $line = OC_Contacts_App::getPropertyLineByChecksum($vcard, $checksum);
unset($vcard->children[$line]);
-OC_Contacts_VCard::edit($id,$vcard->serialize());
+if(!OC_Contacts_VCard::edit($id,$vcard->serialize())) {
+ OC_JSON::error(array('data' => array('message' => $l->t('Error deleting contact property.'))));
+ OC_Log::write('contacts','ajax/deleteproperty.php: Error deleting contact property', OC_Log::ERROR);
+ exit();
+}
+
OC_JSON::success(array('data' => array( 'id' => $id )));
diff --git a/apps/contacts/ajax/messagebox.php b/apps/contacts/ajax/messagebox.php
new file mode 100644
index 00000000000..b3cad947674
--- /dev/null
+++ b/apps/contacts/ajax/messagebox.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Copyright (c) 2011 Thomas Tanghus <thomas@tanghus.net>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+require_once('../../../lib/base.php');
+$l10n = new OC_L10N('contacts');
+OC_JSON::checkLoggedIn();
+OC_JSON::checkAppEnabled('contacts');
+
+$output = new OC_TEMPLATE("contacts", "part.messagebox");
+$output -> printpage();
+?>
diff --git a/apps/contacts/ajax/setproperty.php b/apps/contacts/ajax/setproperty.php
index bcc4c161cc0..e0cd70236c8 100644
--- a/apps/contacts/ajax/setproperty.php
+++ b/apps/contacts/ajax/setproperty.php
@@ -72,9 +72,14 @@ foreach($missingparameters as $i){
}
// Do checksum and be happy
+// NOTE: This checksum is not used..?
$checksum = md5($vcard->children[$line]->serialize());
-OC_Contacts_VCard::edit($id,$vcard->serialize());
+if(!OC_Contacts_VCard::edit($id,$vcard->serialize())) {
+ OC_JSON::error(array('data' => array('message' => $l->t('Error updating contact property.'))));
+ OC_Log::write('contacts','ajax/setproperty.php: Error updating contact property: '.$value, OC_Log::ERROR);
+ exit();
+}
$adr_types = OC_Contacts_App::getTypesOfProperty('ADR');
$phone_types = OC_Contacts_App::getTypesOfProperty('TEL');
diff --git a/apps/contacts/ajax/updateaddressbook.php b/apps/contacts/ajax/updateaddressbook.php
index 516736cc502..7d9e2aea917 100644
--- a/apps/contacts/ajax/updateaddressbook.php
+++ b/apps/contacts/ajax/updateaddressbook.php
@@ -1,6 +1,6 @@
<?php
/**
- * Copyright (c) 2011 Bart Visscher <bartv@thisnet.nl>
+ * Copyright (c) 2011-2012 Thomas Tanghus <thomas@tanghus.net>
* This file is licensed under the Affero General Public License version 3 or
* later.
* See the COPYING-README file.
@@ -15,8 +15,19 @@ OC_JSON::checkLoggedIn();
OC_JSON::checkAppEnabled('contacts');
$bookid = $_POST['id'];
-OC_Contacts_Addressbook::edit($bookid, $_POST['name'], null);
-OC_Contacts_Addressbook::setActive($bookid, $_POST['active']);
+
+if(!OC_Contacts_Addressbook::edit($bookid, $_POST['name'], null)) {
+ OC_JSON::error(array('data' => array('message' => $l->t('Error updating addressbook.'))));
+ OC_Log::write('contacts','ajax/updateaddressbook.php: Error adding addressbook: ', OC_Log::ERROR);
+ //exit();
+}
+
+if(!OC_Contacts_Addressbook::setActive($bookid, $_POST['active'])) {
+ OC_JSON::error(array('data' => array('message' => $l->t('Error (de)activating addressbook.'))));
+ OC_Log::write('contacts','ajax/updateaddressbook.php: Error (de)activating addressbook: '.$bookid, OC_Log::ERROR);
+ //exit();
+}
+
$addressbook = OC_Contacts_App::getAddressbook($bookid);
$tmpl = new OC_Template('contacts', 'part.chooseaddressbook.rowfields');
$tmpl->assign('addressbook', $addressbook);
diff --git a/apps/contacts/appinfo/app.php b/apps/contacts/appinfo/app.php
index 524cc640bc9..df7e8cec6e0 100644
--- a/apps/contacts/appinfo/app.php
+++ b/apps/contacts/appinfo/app.php
@@ -1,4 +1,5 @@
<?php
+$l=new OC_L10N('contacts');
OC::$CLASSPATH['OC_Contacts_App'] = 'apps/contacts/lib/app.php';
OC::$CLASSPATH['OC_Contacts_Addressbook'] = 'apps/contacts/lib/addressbook.php';
@@ -17,7 +18,8 @@ OC_App::addNavigationEntry( array(
'order' => 10,
'href' => OC_Helper::linkTo( 'contacts', 'index.php' ),
'icon' => OC_Helper::imagePath( 'settings', 'users.svg' ),
- 'name' => 'Contacts' ));
+ 'name' => $l->t('Contacts') ));
OC_APP::registerPersonal('contacts','settings');
+require_once('apps/contacts/lib/search.php'); \ No newline at end of file
diff --git a/apps/contacts/css/formtastic.css b/apps/contacts/css/formtastic.css
deleted file mode 100644
index fede92b61ca..00000000000
--- a/apps/contacts/css/formtastic.css
+++ /dev/null
@@ -1,270 +0,0 @@
-/* -------------------------------------------------------------------------------------------------
-
-ownCloud changes: search for OWNCLOUD
-
-Based on formtastic style sheet
-This stylesheet forms part of the Formtastic Rails Plugin
-(c) 2008-2011 Justin French
-
---------------------------------------------------------------------------------------------------*/
-/* NORMALIZE AND RESET - obviously inspired by Yahoo's reset.css, but scoped to just .formtastic
---------------------------------------------------------------------------------------------------*/
-.formtastic,
-.formtastic ul,
-.formtastic ol,
-.formtastic li,
-.formtastic fieldset,
-.formtastic legend,
-/*.formtastic input,
-.formtastic textarea,
-.formtastic select, COMMENTED BY OWNCLOUD */
-.formtastic p {
- margin:0;
- padding:0;
-}
-
-.formtastic fieldset {
- border:0;
-}
-
-.formtastic em,
-.formtastic strong {
- font-style:normal;
- font-weight:normal;
-}
-
-.formtastic ol,
-.formtastic ul {
- list-style:none;
-}
-
-.formtastic abbr,
-.formtastic acronym {
- border:0;
- font-variant:normal;
-}
-
-/*.formtastic input,
-.formtastic textarea {
- font-family:sans-serif;
- font-size:inherit;
- font-weight:inherit;
-}
-
-.formtastic input,
-.formtastic textarea,
-.formtastic select {
- font-size:100%;
-} COMMENTED BY OWNCLOUD */
-
-.formtastic legend {
- white-space:normal;
- color:#000;
-}
-
-/* SEMANTIC ERRORS
---------------------------------------------------------------------------------------------------*/
-.formtastic .errors {
- color:#cc0000;
- margin:0.5em 0 1.5em 25%;
- list-style:square;
-}
-
-.formtastic .errors li {
- padding:0;
- border:none;
- display:list-item;
-}
-
-
-/* BUTTONS
---------------------------------------------------------------------------------------------------*/
-.formtastic .buttons {
- overflow:hidden; /* clear containing floats */
- padding-left:25%;
-}
-
-.formtastic .button {
- float:left;
- padding-right:0.5em;
- border:none; /* ADDED BY OWNCLOUD */
-}
-
-
-/* INPUTS
---------------------------------------------------------------------------------------------------*/
-.formtastic .inputs {
- padding:0.5em 0; /* padding and negative margin juggling is for Firefox */
- margin-top:-0.5em;
- margin-bottom:1em;
-}
-
-.formtastic .input {
-}
-
-
-/* LEFT ALIGNED LABELS
---------------------------------------------------------------------------------------------------*/
-.formtastic .input .label {
- display:block;
- width:25%;
- float:left;
- padding-top:.2em;
-}
-
-.formtastic .fragments .label,
-.formtastic .choices .label {
- position:absolute;
- width:95%;
- left:0px;
-}
-
-.formtastic .fragments .label label,
-.formtastic .choices .label label {
- position:absolute;
-}
-
-/* NESTED FIELDSETS AND LEGENDS (radio, check boxes and date/time inputs use nested fieldsets)
---------------------------------------------------------------------------------------------------*/
-.formtastic .choices {
- position:relative;
-}
-
-.formtastic .choices-group {
- float:left;
- width:74%;
- margin:0;
- padding:0 0 0 25%;
-}
-
-.formtastic .choice {
- padding:0;
- border:0;
-}
-
-
-/* INLINE HINTS
---------------------------------------------------------------------------------------------------*/
-.formtastic .input .inline-hints {
- color:#666;
- margin:0.5em 0 0 25%;
-}
-
-
-/* INLINE ERRORS
---------------------------------------------------------------------------------------------------*/
-.formtastic .inline-errors {
- color:#cc0000;
- margin:0.5em 0 0 25%;
-}
-
-.formtastic .errors {
- color:#cc0000;
- margin:0.5em 0 0 25%;
- list-style:square;
-}
-
-.formtastic .errors li {
- padding:0;
- border:none;
- display:list-item;
-}
-
-
-/* STRING, NUMERIC, PASSWORD, EMAIL, URL, PHONE, SEARCH (ETC) OVERRIDES
---------------------------------------------------------------------------------------------------*/
-.formtastic .stringish input {
- width:72%;
-}
-
-.formtastic .stringish input[size] {
- width:auto;
- max-width:72%;
-}
-
-
-/* TEXTAREA OVERRIDES
---------------------------------------------------------------------------------------------------*/
-.formtastic .text textarea {
- width:72%;
-}
-
-.formtastic .text textarea[cols] {
- width:auto;
- max-width:72%;
-}
-
-
-/* HIDDEN OVERRIDES
---------------------------------------------------------------------------------------------------*/
-.formtastic .hidden {
- display:none;
-}
-
-
-/* BOOLEAN LABELS
---------------------------------------------------------------------------------------------------*/
-.formtastic .boolean label {
- padding-left:25%;
- display:block;
-}
-
-
-/* CHOICE GROUPS
---------------------------------------------------------------------------------------------------*/
-.formtastic .choices-group {
- margin-bottom:-0.5em;
-}
-
-.formtastic .choice {
- margin:0.1em 0 0.5em 0;
-}
-
-.formtastic .choice label {
- float:none;
- width:100%;
- line-height:100%;
- padding-top:0;
- margin-bottom:0.6em;
-}
-
-
-/* ADJUSTMENTS FOR INPUTS INSIDE LABELS (boolean input, radio input, check_boxes input)
---------------------------------------------------------------------------------------------------*/
-.formtastic .choice label input,
-.formtastic .boolean label input {
- margin:0 0.3em 0 0.1em;
- line-height:100%;
-}
-
-
-/* FRAGMENTED INPUTS (DATE/TIME/DATETIME)
---------------------------------------------------------------------------------------------------*/
-.formtastic .fragments {
- position:relative;
-}
-
-.formtastic .fragments-group {
- float:left;
- width:74%;
- margin:0;
- padding:0 0 0 25%;
-}
-
-.formtastic .fragment {
- float:left;
- width:auto;
- margin:0 .3em 0 0;
- padding:0;
- border:0;
-}
-
-.formtastic .fragment label {
- display:none;
-}
-
-.formtastic .fragment label input {
- display:inline;
- margin:0;
- padding:0;
-}
diff --git a/apps/contacts/css/styles.css b/apps/contacts/css/styles.css
index c890be85824..4fcd8fc1131 100644
--- a/apps/contacts/css/styles.css
+++ b/apps/contacts/css/styles.css
@@ -4,13 +4,51 @@
#contacts_details_name { font-weight:bold;font-size:1.1em;margin-left:25%;}
#contacts_details_photo { margin:.5em 0em .5em 25%; }
-#contacts_deletecard {position:absolute;top:15px;right:0;}
+#contacts_deletecard {position:absolute;top:15px;right:25px;}
+#contacts_downloadcard {position:absolute;top:15px;right:50px;}
#contacts_details_list { list-style:none; }
#contacts_details_list li { overflow:visible; }
#contacts_details_list li p.contacts_property_name { width:25%; float:left;text-align:right;padding-right:0.3em;color:#666; }
-#contacts_details_list li p.contacts_property_data, #contacts_details_list li ul.contacts_property_data { width:72%;float:left; }
+#contacts_details_list li p.contacts_property_data, #contacts_details_list li ul.contacts_property_data { width:72%;float:left; clear: right; }
#contacts_setproperty_button { margin-left:25%; }
+dl.form
+{
+ width: 100%;
+ float: left;
+ clear: right;
+ margin: 1em;
+ padding: 0;
+}
+
+.form dt
+{
+ display: table-cell;
+ clear: left;
+ float: left;
+ min-width: 10em;
+ margin: 0;
+ padding-top: 0.5em;
+ padding-right: 1em;
+ font-weight: bold;
+ text-align:right;
+ vertical-align: text-bottom;
+ bottom: 0px;
+}
+
+.form dd
+{
+ display: table-cell;
+ clear: right;
+ float: left;
+ min-width: 20em;
+ margin: 0;
+ padding: 0;
+ white-space: nowrap;
+ top: 0px;
+}
+.form input { position: relative; width: 20em; }
+
.contacts_property_data ul, ol.contacts_property_data { list-style:none; }
.contacts_property_data li { overflow: hidden; }
.contacts_property_data li label { width:20%; float:left; text-align:right;padding-right:0.3em; }
diff --git a/apps/contacts/export.php b/apps/contacts/export.php
index fd2d7da1750..fc2aa86500f 100644
--- a/apps/contacts/export.php
+++ b/apps/contacts/export.php
@@ -1,6 +1,6 @@
<?php
/**
- * Copyright (c) 2011 Georg Ehrke <ownclouddev at georgswebsite dot de>
+ * Copyright (c) 2011-2012 Thomas Tanghus <thomas@tanghus.net>
* This file is licensed under the Affero General Public License version 3 or
* later.
* See the COPYING-README file.
@@ -11,6 +11,7 @@ OC_Util::checkLoggedIn();
OC_Util::checkAppEnabled('contacts');
$book = isset($_GET['bookid']) ? $_GET['bookid'] : NULL;
$contact = isset($_GET['contactid']) ? $_GET['contactid'] : NULL;
+$nl = "\n";
if(isset($book)){
$addressbook = OC_Contacts_App::getAddressbook($book);
if($addressbook['userid'] != OC_User::getUser()){
@@ -20,9 +21,9 @@ if(isset($book)){
$cardobjects = OC_Contacts_VCard::all($book);
header('Content-Type: text/directory');
header('Content-Disposition: inline; filename=' . str_replace(' ', '_', $addressbook['displayname']) . '.vcf');
- for($i = 0;$i <= count($cardobjects); $i++){
- echo $cardobjects[$i]['carddata'];
- //echo '\r\n';
+
+ foreach($cardobjects as $card) {
+ echo $card['carddata'] . $nl;
}
}elseif(isset($contact)){
$data = OC_Contacts_App::getContactObject($contact);
@@ -33,7 +34,7 @@ if(isset($book)){
exit;
}
header('Content-Type: text/directory');
- header('Content-Disposition: inline; filename=' . $data['fullname'] . '.vcf');
+ header('Content-Disposition: inline; filename=' . str_replace(' ', '_', $data['fullname']) . '.vcf');
echo $data['carddata'];
}
?>
diff --git a/apps/contacts/index.php b/apps/contacts/index.php
index 5ab6f293ab4..9012e5d8af8 100644
--- a/apps/contacts/index.php
+++ b/apps/contacts/index.php
@@ -42,38 +42,26 @@ OC_App::setActiveNavigationEntry( 'contacts_index' );
// Load a specific user?
$id = isset( $_GET['id'] ) ? $_GET['id'] : null;
-/*
-// sort addressbooks (use contactsort)
-usort($addressbooks,'contacts_namesort');
-
-$contacts = array();
-foreach( $addressbooks as $addressbook ){
- $addressbookcontacts = OC_Contacts_VCard::all($addressbook['id']);
- foreach( $addressbookcontacts as $contact ){
- if(is_null($contact['fullname'])){
- continue;
- }
- $contacts[] = $contact;
- }
-}
-
-usort($contacts,'contacts_namesort');
-*/
$details = array();
-// FIXME: This cannot work..?
-if( !is_null($id)/* || count($contacts)*/){
- if(is_null($id)) $id = $contacts[0]['id'];
+if(is_null($id) && count($contacts) > 0) {
+ $id = $contacts[0]['id'];
+}
+$vcard = null;
+$details = null;
+if(!is_null($id)) {
$vcard = OC_Contacts_App::getContactVCard($id);
- $details = OC_Contacts_VCard::structureContact($vcard);
+ if(!is_null($vcard)) {
+ $details = OC_Contacts_VCard::structureContact($vcard);
+ }
}
// Include Style and Script
OC_Util::addScript('contacts','interface');
-OC_Util::addStyle('contacts','styles');
-OC_Util::addStyle('contacts','formtastic');
+OC_Util::addScript('contacts','jquery.inview');
OC_Util::addScript('', 'jquery.multiselect');
-OC_Util::addStyle('', 'jquery.multiselect');
+OC_Util::addStyle('contacts','styles');
+//OC_Util::addStyle('contacts','formtastic');
$property_types = OC_Contacts_App::getAddPropertyOptions();
$adr_types = OC_Contacts_App::getTypesOfProperty('ADR');
diff --git a/apps/contacts/js/interface.js b/apps/contacts/js/interface.js
index 35639ef6cc7..fe58a46d247 100644
--- a/apps/contacts/js/interface.js
+++ b/apps/contacts/js/interface.js
@@ -1,3 +1,26 @@
+/**
+ * ownCloud - Addressbook
+ *
+ * @author Jakob Sack
+ * @copyright 2011 Jakob Sack mail@jakobsack.de
+ * @copyright 2011-2012 Thomas Tanghus <thomas@tanghus.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or 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 AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
Contacts={
UI:{
showCardDAVUrl:function(username, bookname){
@@ -5,6 +28,30 @@ Contacts={
$('#carddav_url').show();
$('#carddav_url_close').show();
},
+ messageBox:function(title, msg) {
+ if($('#messagebox').dialog('isOpen') == true){
+ // NOTE: Do we ever get here?
+ $('#messagebox').dialog('moveToTop');
+ }else{
+ $('#dialog_holder').load(OC.filePath('contacts', 'ajax', 'messagebox.php'), function(){
+ $('#messagebox').dialog(
+ {
+ autoOpen: true,
+ title: title,
+ buttons: [{
+ text: "Ok",
+ click: function() { $(this).dialog("close"); }
+ }],
+ close: function(event, ui) {
+ $(this).dialog('destroy').remove();
+ },
+ open: function(event, ui) {
+ $('#messagebox_msg').html(msg);
+ }
+ });
+ });
+ }
+ },
Addressbooks:{
overview:function(){
if($('#chooseaddressbook_dialog').dialog('isOpen') == true){
@@ -59,7 +106,8 @@ Contacts={
Contacts.UI.Contacts.update();
Contacts.UI.Addressbooks.overview();
} else {
- alert('Error: ' + data.message);
+ Contacts.UI.messageBox(t('contacts', 'Error'), data.message);
+ //alert('Error: ' + data.message);
}
});
}
@@ -88,37 +136,29 @@ Contacts={
}
},
Contacts:{
+ /**
+ * Reload the contacts list.
+ */
update:function(){
$.getJSON('ajax/contacts.php',{},function(jsondata){
if(jsondata.status == 'success'){
$('#contacts').html(jsondata.data.page);
}
else{
- alert(jsondata.data.message);
+ Contacts.UI.messageBox(t('contacts', 'Error'),jsondata.data.message);
+ //alert(jsondata.data.message);
}
});
- /*
- var contactlist = $('#contacts');
- var contacts = contactlist.children('li').get();
- //alert(contacts);
- contacts.sort(function(a, b) {
- var compA = $(a).text().toUpperCase();
- var compB = $(b).text().toUpperCase();
- return (compA < compB) ? -1 : (compA > compB) ? 1 : 0;
- })
- $.each(contacts, function(idx, itm) { contactlist.append(itm); });
- */
- setTimeout(Contacts.UI.Contacts.lazyupdate(), 500);
+ setTimeout(Contacts.UI.Contacts.lazyupdate, 500);
},
+ /**
+ * Add thumbnails to the contact list as they become visible in the viewport.
+ */
lazyupdate:function(){
- //alert('lazyupdate');
$('#contacts li').live('inview', function(){
if (!$(this).find('a').attr('style')) {
- //alert($(this).data('id') + ' has background: ' + $(this).attr('style'));
$(this).find('a').css('background','url(thumbnail.php?id='+$(this).data('id')+') no-repeat');
- }/* else {
- alert($(this).data('id') + ' has style ' + $(this).attr('style').match('url'));
- }*/
+ }
});
}
}
@@ -129,6 +169,10 @@ $(document).ready(function(){
/*-------------------------------------------------------------------------
* Event handlers
*-----------------------------------------------------------------------*/
+
+ /**
+ * Load the details view for a contact.
+ */
$('#leftcontent li').live('click',function(){
var id = $(this).data('id');
var oldid = $('#rightcontent').data('id');
@@ -142,13 +186,18 @@ $(document).ready(function(){
$('#leftcontent li[data-id="'+jsondata.data.id+'"]').addClass('active');
}
else{
- alert(jsondata.data.message);
+ Contacts.UI.messageBox(t('contacts', 'Error'), jsondata.data.message);
+ //alert(jsondata.data.message);
}
});
return false;
});
+ /**
+ * Delete currently selected contact (and clear form?)
+ */
$('#contacts_deletecard').live('click',function(){
+ $('#contacts_deletecard').tipsy('hide');
var id = $('#rightcontent').data('id');
$.getJSON('ajax/deletecard.php',{'id':id},function(jsondata){
if(jsondata.status == 'success'){
@@ -157,12 +206,17 @@ $(document).ready(function(){
$('#rightcontent').empty();
}
else{
- alert(jsondata.data.message);
+ Contacts.UI.messageBox(t('contacts', 'Error'), jsondata.data.message);
+ //alert(jsondata.data.message);
}
});
return false;
});
+ /**
+ * Add a property to the contact.
+ * NOTE: Where does 'contacts_addproperty' exist?
+ */
$('#contacts_addproperty').live('click',function(){
var id = $('#rightcontent').data('id');
$.getJSON('ajax/showaddproperty.php',{'id':id},function(jsondata){
@@ -171,12 +225,16 @@ $(document).ready(function(){
$('#contacts_addproperty').hide();
}
else{
- alert(jsondata.data.message);
+ Contacts.UI.messageBox(t('contacts', 'Error'), jsondata.data.message);
+ alert('From handler: '+jsondata.data.message);
}
});
return false;
});
+ /**
+ * Change the inputs based on which type of property is selected for addition.
+ */
$('#contacts_addpropertyform [name="name"]').live('change',function(){
$('#contacts_addpropertyform #contacts_addresspart').remove();
$('#contacts_addpropertyform #contacts_phonepart').remove();
@@ -200,17 +258,23 @@ $(document).ready(function(){
$('#contacts_addpropertyform').before(jsondata.data.page);
}
else{
- alert(jsondata.data.message);
+ Contacts.UI.messageBox(t('contacts', 'Error'), jsondata.data.message);
}
}, 'json');
return false;
});
+ /**
+ * Show the Addressbook chooser
+ */
$('#chooseaddressbook').click(function(){
Contacts.UI.Addressbooks.overview();
return false;
});
-
+
+ /**
+ * Open blank form to add new contact.
+ */
$('#contacts_newcontact').click(function(){
$.getJSON('ajax/showaddcard.php',{},function(jsondata){
if(jsondata.status == 'success'){
@@ -219,27 +283,46 @@ $(document).ready(function(){
.find('select').chosen();
}
else{
- alert(jsondata.data.message);
+ Contacts.UI.messageBox(t('contacts', 'Error'), jsondata.data.message);
+ //alert(jsondata.data.message);
}
});
return false;
});
-
+
+ /**
+ * Add and insert a new contact into the list.
+ */
$('#contacts_addcardform input[type="submit"]').live('click',function(){
$.post('ajax/addcard.php',$('#contacts_addcardform').serialize(),function(jsondata){
if(jsondata.status == 'success'){
$('#rightcontent').data('id',jsondata.data.id);
$('#rightcontent').html(jsondata.data.page);
$('#leftcontent .active').removeClass('active');
- $('#leftcontent ul').append('<li data-id="'+jsondata.data.id+'" class="active"><a href="index.php?id='+jsondata.data.id+'">'+jsondata.data.name+'</a></li>');
+ var item = '<li data-id="'+jsondata.data.id+'" class="active"><a href="index.php?id='+jsondata.data.id+'" style="background: url(thumbnail.php?id='+jsondata.data.id+') no-repeat scroll 0% 0% transparent;">'+jsondata.data.name+'</a></li>';
+ var added = false;
+ $('#leftcontent ul li').each(function(){
+ if ($(this).text().toLowerCase() > jsondata.data.name.toLowerCase()) {
+ $(this).before(item).fadeIn('fast');
+ added = true;
+ return false;
+ }
+ });
+ if(!added) {
+ $('#leftcontent ul').append(item);
+ }
}
else{
- alert(jsondata.data.message);
+ Contacts.UI.messageBox(t('contacts', 'Error'), jsondata.data.message);
+ //alert(jsondata.data.message);
}
}, 'json');
return false;
});
-
+
+ /**
+ * Show inputs for editing a property.
+ */
$('.contacts_property [data-use="edit"]').live('click',function(){
var id = $('#rightcontent').data('id');
var checksum = $(this).parents('.contacts_property').first().data('checksum');
@@ -249,19 +332,24 @@ $(document).ready(function(){
.find('select').chosen();
}
else{
- alert(jsondata.data.message);
+ Contacts.UI.messageBox(t('contacts', 'Error'), jsondata.data.message);
+ //alert(jsondata.data.message);
}
});
return false;
});
+ /**
+ * Save the edited property
+ */
$('#contacts_setpropertyform input[type="submit"]').live('click',function(){
$.post('ajax/setproperty.php',$(this).parents('form').first().serialize(),function(jsondata){
if(jsondata.status == 'success'){
$('.contacts_property[data-checksum="'+jsondata.data.oldchecksum+'"]').replaceWith(jsondata.data.page);
}
else{
- alert(jsondata.data.message);
+ Contacts.UI.messageBox(t('contacts', 'Error'), jsondata.data.message);
+ //alert(jsondata.data.message);
}
},'json');
return false;
@@ -275,7 +363,8 @@ $(document).ready(function(){
$('.contacts_property[data-checksum="'+checksum+'"]').remove();
}
else{
- alert(jsondata.data.message);
+ Contacts.UI.messageBox(t('contacts', 'Error'), jsondata.data.message);
+ //alert(jsondata.data.message);
}
});
return false;
@@ -312,4 +401,7 @@ $(document).ready(function(){
// element has gone out of viewport
}
});
+
+ $('.button').tipsy();
+ //Contacts.UI.messageBox('Hello','Sailor');
});
diff --git a/apps/contacts/l10n/ar.php b/apps/contacts/l10n/ar.php
new file mode 100644
index 00000000000..935ac27dd0d
--- /dev/null
+++ b/apps/contacts/l10n/ar.php
@@ -0,0 +1,34 @@
+<?php $TRANSLATIONS = array(
+"This is not your addressbook." => "هذا ليس دفتر عناوينك.",
+"Contact could not be found." => "لم يتم العثور على الشخص.",
+"Information about vCard is incorrect. Please reload the page." => "المعلومات الموجودة في ال vCard غير صحيحة. الرجاء إعادة تحديث الصفحة.",
+"Address" => "عنوان",
+"Telephone" => "الهاتف",
+"Email" => "البريد الالكتروني",
+"Organization" => "المؤسسة",
+"Work" => "الوظيفة",
+"Home" => "البيت",
+"Mobile" => "الهاتف المحمول",
+"Text" => "معلومات إضافية",
+"Voice" => "صوت",
+"Fax" => "الفاكس",
+"Video" => "الفيديو",
+"Pager" => "الرنان",
+"This is not your contact." => ".هذا ليس من معارفي",
+"This card is not RFC compatible." => "هذا الكرت ليس متلائم مع نظام ال RFC.",
+"This card does not contain a photo." => "لا يحتوي هذا الكرت على صورة.",
+"Add Contact" => "أضف شخص ",
+"Name" => "الاسم",
+"PO Box" => "العنوان البريدي",
+"Extended" => "إضافة",
+"Street" => "شارع",
+"City" => "المدينة",
+"Region" => "المنطقة",
+"Zipcode" => "رقم المنطقة",
+"Country" => "البلد",
+"Create Contact" => "أضف شخص ",
+"Edit" => "تعديل",
+"Delete" => "حذف",
+"Birthday" => "تاريخ الميلاد",
+"Phone" => "الهاتف"
+);
diff --git a/apps/contacts/l10n/ca.php b/apps/contacts/l10n/ca.php
new file mode 100644
index 00000000000..1b3fc607729
--- /dev/null
+++ b/apps/contacts/l10n/ca.php
@@ -0,0 +1,48 @@
+<?php $TRANSLATIONS = array(
+"This is not your addressbook." => "Aquesta no és la vostra llibreta d'adreces",
+"Contact could not be found." => "No s'ha trobat el contacte.",
+"Information about vCard is incorrect. Please reload the page." => "La informació de la vCard és incorrecta. Carregueu la pàgina de nou.",
+"Address" => "Adreça",
+"Telephone" => "Telèfon",
+"Email" => "Correu electrònic",
+"Organization" => "Organització",
+"Work" => "Feina",
+"Home" => "Casa",
+"Mobile" => "Mòbil",
+"Text" => "Text",
+"Voice" => "Veu",
+"Fax" => "Fax",
+"Video" => "Vídeo",
+"Pager" => "Paginador",
+"This is not your contact." => "Aquest contacte no és vostre.",
+"This card is not RFC compatible." => "Aquesta targeta no és compatible amb RFC.",
+"This card does not contain a photo." => "Aquesta targeta no conté foto.",
+"Add Contact" => "Afegiu un contacte",
+"Name" => "Nom",
+"Type" => "Tipus",
+"PO Box" => "Adreça Postal",
+"Extended" => "Addicional",
+"Street" => "Carrer",
+"City" => "Ciutat",
+"Region" => "Comarca",
+"Zipcode" => "Codi postal",
+"Country" => "País",
+"Create Contact" => "Crea un contacte",
+"Choose active Address Books" => "Escolliu una llibreda d'adreces activa",
+"New Address Book" => "Nova llibreta d'adreces",
+"CardDav Link" => "Enllaç CardDav",
+"Download" => "Baixa",
+"Edit" => "Edita",
+"Delete" => "Elimina",
+"Delete contact" => "Elimina el contacte",
+"Add" => "Afegeix",
+"Displayname" => "Nom a mostrar",
+"Active" => "Actiu",
+"Save" => "Desa",
+"Submit" => "Envia",
+"Cancel" => "Cancel·la",
+"Birthday" => "Aniversari",
+"Preferred" => "Preferit",
+"Phone" => "Telèfon",
+"Update" => "Actualitza"
+);
diff --git a/apps/contacts/l10n/cs_CZ.php b/apps/contacts/l10n/cs_CZ.php
new file mode 100644
index 00000000000..0ccf9de8d0e
--- /dev/null
+++ b/apps/contacts/l10n/cs_CZ.php
@@ -0,0 +1,48 @@
+<?php $TRANSLATIONS = array(
+"This is not your addressbook." => "Toto není Váš adresář.",
+"Contact could not be found." => "Kontakt nebyl nalezen.",
+"Information about vCard is incorrect. Please reload the page." => "Informace o vCard je nesprávná. Obnovte stránku, prosím.",
+"Address" => "Adresa",
+"Telephone" => "Telefon",
+"Email" => "Email",
+"Organization" => "Organizace",
+"Work" => "Pracovní",
+"Home" => "Domácí",
+"Mobile" => "Mobil",
+"Text" => "Text",
+"Voice" => "Hlas",
+"Fax" => "Fax",
+"Video" => "Video",
+"Pager" => "Pager",
+"This is not your contact." => "Toto není Váš kontakt.",
+"This card is not RFC compatible." => "Tato karta není kompatibilní s RFC.",
+"This card does not contain a photo." => "Tato karta neobsahuje foto",
+"Add Contact" => "Přidat kontakt",
+"Name" => "Jméno",
+"Type" => "Typ",
+"PO Box" => "PO box",
+"Extended" => "Rozšířené",
+"Street" => "Ulice",
+"City" => "Město",
+"Region" => "Kraj",
+"Zipcode" => "PSČ",
+"Country" => "Země",
+"Create Contact" => "Vytvořit kontakt",
+"Choose active Address Books" => "Zvolte aktivní adresář",
+"New Address Book" => "Nový adresář",
+"CardDav Link" => "Odkaz CardDav",
+"Download" => "Stažení",
+"Edit" => "Editovat",
+"Delete" => "Odstranit",
+"Delete contact" => "Odstranit kontakt",
+"Add" => "Přidat",
+"Displayname" => "Zobrazené jméno",
+"Active" => "Aktivní",
+"Save" => "Uložit",
+"Submit" => "Potvrdit",
+"Cancel" => "Storno",
+"Birthday" => "Narozeniny",
+"Preferred" => "Preferovaný",
+"Phone" => "Telefon",
+"Update" => "Aktualizovat"
+);
diff --git a/apps/contacts/l10n/da.php b/apps/contacts/l10n/da.php
index 2ab382f714a..2c597d1993b 100644
--- a/apps/contacts/l10n/da.php
+++ b/apps/contacts/l10n/da.php
@@ -1,22 +1,25 @@
<?php $TRANSLATIONS = array(
-"You need to log in." => "Du skal logge ind.",
"This is not your addressbook." => "Dette er ikke din adressebog.",
-"Contact could not be found." => "Kontakt kunne ikke findes.",
-"This is not your contact." => "Dette er ikke din kontakt.",
-"vCard could not be read." => "Kunne ikke læse vCard.",
+"Contact could not be found." => "Kontaktperson kunne ikke findes.",
"Information about vCard is incorrect. Please reload the page." => "Informationen om vCard er forkert. Genindlæs siden.",
-"This card is not RFC compatible." => "Dette kort er ikke RFC-kompatibelt.",
-"This card does not contain a photo." => "Dette kort indeholder ikke et foto.",
-"Add Contact" => "Tilføj kontakt",
-"Group" => "Gruppe",
-"Name" => "Navn",
-"Create Contact" => "Ny Kontakt",
"Address" => "Adresse",
"Telephone" => "Telefon",
"Email" => "Email",
"Organization" => "Organisation",
"Work" => "Arbejde",
-"Home" => "Hjem",
+"Home" => "Hjemme",
+"Mobile" => "Mobil",
+"Text" => "SMS",
+"Voice" => "Telefonsvarer",
+"Fax" => "Fax",
+"Video" => "Video",
+"Pager" => "Personsøger",
+"This is not your contact." => "Dette er ikke din kontaktperson.",
+"This card is not RFC compatible." => "Dette kort er ikke RFC-kompatibelt.",
+"This card does not contain a photo." => "Dette kort indeholder ikke et foto.",
+"Add Contact" => "Tilføj kontaktperson",
+"Name" => "Navn",
+"Type" => "Type",
"PO Box" => "Postboks",
"Extended" => "Udvidet",
"Street" => "Vej",
@@ -24,15 +27,22 @@
"Region" => "Region",
"Zipcode" => "Postnummer",
"Country" => "Land",
-"Mobile" => "Mobil",
-"Text" => "SMS",
-"Voice" => "Telefonsvarer",
-"Fax" => "Fax",
-"Video" => "Video",
-"Pager" => "Personsøger",
+"Create Contact" => "Ny kontaktperson",
+"Choose active Address Books" => "Vælg aktive adressebøger",
+"New Address Book" => "Ny adressebog",
+"CardDav Link" => "CardDav-link",
+"Download" => "Download",
+"Edit" => "Rediger",
"Delete" => "Slet",
-"Add Property" => "Tilføj Egenskab",
+"Delete contact" => "Slet kontaktperson",
+"Add" => "Tilføj",
+"Displayname" => "Vist navn",
+"Active" => "Aktiv",
+"Save" => "Gem",
+"Submit" => "Gem",
+"Cancel" => "Fortryd",
"Birthday" => "Fødselsdag",
+"Preferred" => "Foretrukken",
"Phone" => "Telefon",
-"Edit" => "Redigér"
+"Update" => "Opdater"
);
diff --git a/apps/contacts/l10n/de.php b/apps/contacts/l10n/de.php
index 04a7402442a..53f8a9e6648 100644
--- a/apps/contacts/l10n/de.php
+++ b/apps/contacts/l10n/de.php
@@ -1,9 +1,48 @@
<?php $TRANSLATIONS = array(
+"This is not your addressbook." => "Dies ist nicht dein Adressbuch.",
+"Contact could not be found." => "Kontakt konnte nicht gefunden werden.",
+"Information about vCard is incorrect. Please reload the page." => "Die Information der vCard ist fehlerhaft. Bitte aktualisiere die Seite.",
+"Address" => "Adresse",
+"Telephone" => "Telefon",
+"Email" => "Email",
+"Organization" => "Organisation",
+"Work" => "Arbeit",
+"Home" => "Zuhause",
"Mobile" => "Mobil",
"Text" => "Text",
+"Voice" => "Anruf",
"Fax" => "Fax",
"Video" => "Video",
"Pager" => "Pager",
+"This is not your contact." => "Dies ist nicht dein Kontakt.",
+"This card is not RFC compatible." => "Diese Karte ist nicht RFC-kompatibel.",
+"This card does not contain a photo." => "Diese Karte enthält kein Foto.",
+"Add Contact" => "Kontakt hinzufügen",
+"Name" => "Name",
+"Type" => "Typ",
+"PO Box" => "Postfach",
+"Extended" => "Erweitert",
+"Street" => "Straße",
+"City" => "Stadt",
+"Region" => "Region",
+"Zipcode" => "Postleitzahl",
+"Country" => "Land",
+"Create Contact" => "Kontakt erstellen",
+"Choose active Address Books" => "Aktive Adressbücher auswählen",
+"New Address Book" => "Neues Adressbuch",
+"CardDav Link" => "CardDav Link",
+"Download" => "Herunterladen",
+"Edit" => "Bearbeiten",
+"Delete" => "Löschen",
+"Delete contact" => "Kontakt löschen",
+"Add" => "Hinzufügen",
+"Displayname" => "Anzeigename",
+"Active" => "Aktiv",
+"Save" => "Speichern",
+"Submit" => "Eintragen",
+"Cancel" => "Abbrechen",
"Birthday" => "Geburtstag",
-"Edit" => "Bearbeiten"
+"Preferred" => "Bevorzugt",
+"Phone" => "Telefon",
+"Update" => "Aktualisieren"
);
diff --git a/apps/contacts/l10n/el.php b/apps/contacts/l10n/el.php
new file mode 100644
index 00000000000..8f2b1e30464
--- /dev/null
+++ b/apps/contacts/l10n/el.php
@@ -0,0 +1,48 @@
+<?php $TRANSLATIONS = array(
+"This is not your addressbook." => "Αυτό δεν είναι βιβλίο διευθύνσεων σας.",
+"Contact could not be found." => "Η επαφή δεν μπρόρεσε να βρεθεί.",
+"Information about vCard is incorrect. Please reload the page." => "Οι πληροφορίες σχετικά με vCard είναι εσφαλμένες. Παρακαλώ επαναφορτώστε τη σελίδα.",
+"Address" => "Διεύθυνση",
+"Telephone" => "Τηλέφωνο",
+"Email" => "Email",
+"Organization" => "Οργανισμός",
+"Work" => "Εργασία",
+"Home" => "Σπίτι",
+"Mobile" => "Κινητό",
+"Text" => "Κείμενο",
+"Voice" => "Φωνή",
+"Fax" => "Φαξ",
+"Video" => "Βίντεο",
+"Pager" => "Βομβητής",
+"This is not your contact." => "Αυτή δεν είναι επαφή σας.",
+"This card is not RFC compatible." => "Αυτή η κάρτα δεν είναι RFC συμβατή.",
+"This card does not contain a photo." => "Αυτή η κάρτα δεν περιέχει φωτογραφία.",
+"Add Contact" => "Προσθήκη επαφής",
+"Name" => "Όνομα",
+"Type" => "Τύπος",
+"PO Box" => "Ταχ. Θυρίδα",
+"Extended" => "Εκτεταμένη",
+"Street" => "Οδός",
+"City" => "Πόλη",
+"Region" => "Περιοχή",
+"Zipcode" => "Τ.Κ.",
+"Country" => "Χώρα",
+"Create Contact" => "Δημιουργία επαφής",
+"Choose active Address Books" => "Επιλέξτε τα ενεργά βιβλία διευθύνσεων",
+"New Address Book" => "Νέο βιβλίο διευθύνσεων",
+"CardDav Link" => "Σύνδεσμος CardDav",
+"Download" => "Μεταφόρτωση",
+"Edit" => "Επεξεργασία",
+"Delete" => "Διαγραφή",
+"Delete contact" => "Διαγραφή επαφής",
+"Add" => "Προσθήκη",
+"Displayname" => "Προβαλόμενο όνομα",
+"Active" => "Ενεργό",
+"Save" => "Αποθήκευση",
+"Submit" => "Καταχώρηση",
+"Cancel" => "Ακύρωση",
+"Birthday" => "Γενέθλια",
+"Preferred" => "Προτιμώμενο",
+"Phone" => "Τηλέφωνο",
+"Update" => "Ενημέρωση"
+);
diff --git a/apps/contacts/l10n/eo.php b/apps/contacts/l10n/eo.php
new file mode 100644
index 00000000000..ef55bbebbb9
--- /dev/null
+++ b/apps/contacts/l10n/eo.php
@@ -0,0 +1,34 @@
+<?php $TRANSLATIONS = array(
+"This is not your addressbook." => "Ĉi tiu ne estas via adresaro.",
+"Contact could not be found." => "Ne eblis trovi la kontakton.",
+"Information about vCard is incorrect. Please reload the page." => "Informo pri vCard estas malĝusta. Bonvolu reŝargi la paĝon.",
+"Address" => "Adreso",
+"Telephone" => "Telefono",
+"Email" => "Retpoŝtadreso",
+"Organization" => "Organizaĵo",
+"Work" => "Laboro",
+"Home" => "Hejmo",
+"Mobile" => "Poŝtelefono",
+"Text" => "Teksto",
+"Voice" => "Voĉo",
+"Fax" => "Fakso",
+"Video" => "Videaĵo",
+"Pager" => "Televokilo",
+"This is not your contact." => "Tiu ĉi ne estas via kontakto.",
+"This card is not RFC compatible." => "Ĉi tiu karto ne kongruas kun RFC.",
+"This card does not contain a photo." => "Ĉi tiu karto ne havas foton.",
+"Add Contact" => "Aldoni kontakton",
+"Name" => "Nomo",
+"PO Box" => "Abonkesto",
+"Extended" => "Etendita",
+"Street" => "Strato",
+"City" => "Urbo",
+"Region" => "Regiono",
+"Zipcode" => "Poŝtokodo",
+"Country" => "Lando",
+"Create Contact" => "Krei kontakton",
+"Edit" => "Redakti",
+"Delete" => "Forigi",
+"Birthday" => "Naskiĝotago",
+"Phone" => "Telefono"
+);
diff --git a/apps/contacts/l10n/es.php b/apps/contacts/l10n/es.php
new file mode 100644
index 00000000000..260fe2ac976
--- /dev/null
+++ b/apps/contacts/l10n/es.php
@@ -0,0 +1,46 @@
+<?php $TRANSLATIONS = array(
+"This is not your addressbook." => "Esta no es tu agenda de contactos.",
+"Contact could not be found." => "No se pudo encontrar el contacto.",
+"Information about vCard is incorrect. Please reload the page." => "La información sobre el vCard es incorrecta. Por favor vuelve a cargar la página.",
+"Address" => "Dirección",
+"Telephone" => "Teléfono",
+"Email" => "Correo electrónico",
+"Organization" => "Organización",
+"Work" => "Trabajo",
+"Home" => "Particular",
+"Mobile" => "Móvil",
+"Text" => "Texto",
+"Voice" => "Voz",
+"Fax" => "Fax",
+"Video" => "Video",
+"Pager" => "Localizador",
+"This is not your contact." => "Este no es tu contacto.",
+"This card is not RFC compatible." => "Esta tarjeta no es compatible con RFC.",
+"This card does not contain a photo." => "Esta tarjeta no contiene ninguna foto.",
+"Add Contact" => "Agregar contacto",
+"Name" => "Nombre",
+"Type" => "Tipo",
+"PO Box" => "Código postal",
+"Extended" => "Extendido",
+"Street" => "Calle",
+"City" => "Ciudad",
+"Region" => "Región",
+"Zipcode" => "Código Postal",
+"Country" => "País",
+"Create Contact" => "Crear contacto",
+"New Address Book" => "Nueva libreta de direcciones",
+"CardDav Link" => "Link Card Dav",
+"Download" => "Descargar",
+"Edit" => "Editar",
+"Delete" => "Borrar",
+"Delete contact" => "Eliminar contacto",
+"Add" => "Añadir",
+"Active" => "Activo",
+"Save" => "Guardar",
+"Submit" => "Aceptar",
+"Cancel" => "Cancelar",
+"Birthday" => "Cumpleaños",
+"Preferred" => "Preferido",
+"Phone" => "Teléfono",
+"Update" => "Actualizar"
+);
diff --git a/apps/contacts/l10n/et_EE.php b/apps/contacts/l10n/et_EE.php
new file mode 100644
index 00000000000..f57190bddcc
--- /dev/null
+++ b/apps/contacts/l10n/et_EE.php
@@ -0,0 +1,34 @@
+<?php $TRANSLATIONS = array(
+"This is not your addressbook." => "See pole sinu aadressiraamat.",
+"Contact could not be found." => "Kontakti ei leitud.",
+"Information about vCard is incorrect. Please reload the page." => "Visiitkaardi info pole korrektne. Palun lae leht uuesti.",
+"Address" => "Aadress",
+"Telephone" => "Telefon",
+"Email" => "E-post",
+"Organization" => "Organisatsioon",
+"Work" => "Töö",
+"Home" => "Kodu",
+"Mobile" => "Mobiil",
+"Text" => "Tekst",
+"Voice" => "Hääl",
+"Fax" => "Faks",
+"Video" => "Video",
+"Pager" => "Piipar",
+"This is not your contact." => "See pole sinu kontakt.",
+"This card is not RFC compatible." => "See kaart ei ühildu RFC-ga.",
+"This card does not contain a photo." => "Sellel kaardil pole fotot.",
+"Add Contact" => "Lisa kontakt",
+"Name" => "Nimi",
+"PO Box" => "Postkontori postkast",
+"Extended" => "Laiendatud",
+"Street" => "Tänav",
+"City" => "Linn",
+"Region" => "Piirkond",
+"Zipcode" => "Postiindeks",
+"Country" => "Riik",
+"Create Contact" => "Lisa kontakt",
+"Edit" => "Muuda",
+"Delete" => "Kustuta",
+"Birthday" => "Sünnipäev",
+"Phone" => "Telefon"
+);
diff --git a/apps/contacts/l10n/eu.php b/apps/contacts/l10n/eu.php
new file mode 100644
index 00000000000..c37b6f2762f
--- /dev/null
+++ b/apps/contacts/l10n/eu.php
@@ -0,0 +1,34 @@
+<?php $TRANSLATIONS = array(
+"This is not your addressbook." => "Hau ez da zure helbide liburua.",
+"Contact could not be found." => "Ezin izan da kontaktua aurkitu.",
+"Information about vCard is incorrect. Please reload the page." => "vCard-aren inguruko informazioa okerra da. Mesedez birkargatu orrialdea.",
+"Address" => "Helbidea",
+"Telephone" => "Telefonoa",
+"Email" => "Eposta",
+"Organization" => "Erakundea",
+"Work" => "Lana",
+"Home" => "Etxea",
+"Mobile" => "Mugikorra",
+"Text" => "Testua",
+"Voice" => "Ahotsa",
+"Fax" => "Fax-a",
+"Video" => "Bideoa",
+"Pager" => "Bilagailua",
+"This is not your contact." => "Hau ez da zure kontaktua.",
+"This card is not RFC compatible." => "Txartel hau ez da RFC bateragarria.",
+"This card does not contain a photo." => "Txartel honek ez dauka argazkirik.",
+"Add Contact" => "Gehitu Kontaktua",
+"Name" => "Izena",
+"PO Box" => "Posta kutxa",
+"Extended" => "Hedatua",
+"Street" => "Kalea",
+"City" => "Hiria",
+"Region" => "Eskualdea",
+"Zipcode" => "Posta Kodea",
+"Country" => "Herrialdea",
+"Create Contact" => "Sortu Kontaktua",
+"Edit" => "Editatu",
+"Delete" => "Ezabatu",
+"Birthday" => "Jaioteguna",
+"Phone" => "Telefonoa"
+);
diff --git a/apps/contacts/l10n/fr.php b/apps/contacts/l10n/fr.php
new file mode 100644
index 00000000000..465e2d5456a
--- /dev/null
+++ b/apps/contacts/l10n/fr.php
@@ -0,0 +1,48 @@
+<?php $TRANSLATIONS = array(
+"This is not your addressbook." => "Ce n'est pas votre carnet d'adresses.",
+"Contact could not be found." => "Ce contact n'a pas été trouvé.",
+"Information about vCard is incorrect. Please reload the page." => "Les informations relatives à cette vCard sont incorrectes. Veuillez recharger la page.",
+"Address" => "Adresse",
+"Telephone" => "Téléphone",
+"Email" => "E-mail",
+"Organization" => "Société",
+"Work" => "Travail",
+"Home" => "Maison",
+"Mobile" => "Mobile",
+"Text" => "Texte",
+"Voice" => "Voix",
+"Fax" => "Fax",
+"Video" => "Vidéo",
+"Pager" => "Bipeur",
+"This is not your contact." => "Ce n'est pas votre contact.",
+"This card is not RFC compatible." => "Cette fiche n'est pas compatible RFC.",
+"This card does not contain a photo." => "Cette fiche ne contient pas de photo.",
+"Add Contact" => "Ajouter un Contact",
+"Name" => "Nom",
+"Type" => "Type",
+"PO Box" => "Boîte postale",
+"Extended" => "Étendu",
+"Street" => "Rue",
+"City" => "Ville",
+"Region" => "Région",
+"Zipcode" => "Code postal",
+"Country" => "Pays",
+"Create Contact" => "Créer le Contact",
+"Choose active Address Books" => "Choisissez le Carnet d'adresses actif",
+"New Address Book" => "Nouveau Carnet d'adresses",
+"CardDav Link" => "Lien CardDav",
+"Download" => "Télécharger",
+"Edit" => "Modifier",
+"Delete" => "Supprimer",
+"Delete contact" => "Supprimer le contact",
+"Add" => "Ajouter",
+"Displayname" => "Nom",
+"Active" => "Carnet actif",
+"Save" => "Sauvegarder",
+"Submit" => "Envoyer",
+"Cancel" => "Annuler",
+"Birthday" => "Anniversaire",
+"Preferred" => "Préféré",
+"Phone" => "Téléphone",
+"Update" => "Enregistrer"
+);
diff --git a/apps/contacts/l10n/he.php b/apps/contacts/l10n/he.php
new file mode 100644
index 00000000000..b16eeac2ba8
--- /dev/null
+++ b/apps/contacts/l10n/he.php
@@ -0,0 +1,34 @@
+<?php $TRANSLATIONS = array(
+"This is not your addressbook." => "זהו אינו ספר הכתובות שלך",
+"Contact could not be found." => "לא ניתן לאתר איש קשר",
+"Information about vCard is incorrect. Please reload the page." => "המידע אודות vCard אינו נכון. נא לטעון מחדש את הדף.",
+"Address" => "כתובת",
+"Telephone" => "טלפון",
+"Email" => "דואר אלקטרוני",
+"Organization" => "ארגון",
+"Work" => "עבודה",
+"Home" => "בית",
+"Mobile" => "נייד",
+"Text" => "טקסט",
+"Voice" => "קולי",
+"Fax" => "פקס",
+"Video" => "וידאו",
+"Pager" => "זימונית",
+"This is not your contact." => "זהו אינו איש קשר שלך",
+"This card is not RFC compatible." => "כרטיס זה אינו תואם ל־RFC",
+"This card does not contain a photo." => "כרטיס זה אינו כולל תמונה",
+"Add Contact" => "הוספת איש קשר",
+"Name" => "שם",
+"PO Box" => "תא דואר",
+"Extended" => "מורחב",
+"Street" => "רחוב",
+"City" => "עיר",
+"Region" => "אזור",
+"Zipcode" => "מיקוד",
+"Country" => "מדינה",
+"Create Contact" => "יצירת איש קשר",
+"Edit" => "עריכה",
+"Delete" => "מחיקה",
+"Birthday" => "יום הולדת",
+"Phone" => "טלפון"
+);
diff --git a/apps/contacts/l10n/hr.php b/apps/contacts/l10n/hr.php
new file mode 100644
index 00000000000..dfeab8bdea9
--- /dev/null
+++ b/apps/contacts/l10n/hr.php
@@ -0,0 +1,34 @@
+<?php $TRANSLATIONS = array(
+"This is not your addressbook." => "Ovo nije vaš adresar.",
+"Contact could not be found." => "Kontakt ne postoji.",
+"Information about vCard is incorrect. Please reload the page." => "Informacija o vCard je neispravna. Osvježite stranicu.",
+"Address" => "Adresa",
+"Telephone" => "Telefon",
+"Email" => "E-mail",
+"Organization" => "Organizacija",
+"Work" => "Posao",
+"Home" => "Kuća",
+"Mobile" => "Mobitel",
+"Text" => "Tekst",
+"Voice" => "Glasovno",
+"Fax" => "Fax",
+"Video" => "Video",
+"Pager" => "Pager",
+"This is not your contact." => "Ovo nije vaš kontakt.",
+"This card is not RFC compatible." => "Ova kartica nije sukladna prema RFC direktivama.",
+"This card does not contain a photo." => "Ova kartica ne sadrži fotografiju.",
+"Add Contact" => "Dodaj kontakt",
+"Name" => "Naziv",
+"PO Box" => "Poštanski Pretinac",
+"Extended" => "Prošireno",
+"Street" => "Ulica",
+"City" => "Grad",
+"Region" => "Regija",
+"Zipcode" => "Poštanski broj",
+"Country" => "Država",
+"Create Contact" => "Izradi Kontakt",
+"Edit" => "Uredi",
+"Delete" => "Obriši",
+"Birthday" => "Rođendan",
+"Phone" => "Telefon"
+);
diff --git a/apps/contacts/l10n/hu_HU.php b/apps/contacts/l10n/hu_HU.php
new file mode 100644
index 00000000000..74d66e9f7d3
--- /dev/null
+++ b/apps/contacts/l10n/hu_HU.php
@@ -0,0 +1,34 @@
+<?php $TRANSLATIONS = array(
+"This is not your addressbook." => "Ez nem a te címjegyzéked.",
+"Contact could not be found." => "Kapcsolat nem található.",
+"Information about vCard is incorrect. Please reload the page." => "A vCardról szóló információ helytelen. Töltsd újra az oldalt.",
+"Address" => "Cím",
+"Telephone" => "Telefonszám",
+"Email" => "E-mail",
+"Organization" => "Organizáció",
+"Work" => "Munka",
+"Home" => "Otthon",
+"Mobile" => "Mobiltelefonszám",
+"Text" => "Szöveg",
+"Voice" => "Hang",
+"Fax" => "Fax",
+"Video" => "Video",
+"Pager" => "Lapozó",
+"This is not your contact." => "Nem a te kapcsolatod.",
+"This card is not RFC compatible." => "A kártya nem RFC kompatibilis.",
+"This card does not contain a photo." => "A kártya nem tartlmaz fényképet.",
+"Add Contact" => "Kontakt hozzáadása",
+"Name" => "Név",
+"PO Box" => "Postafiók",
+"Extended" => "Kiterjesztett",
+"Street" => "Utca",
+"City" => "Helység",
+"Region" => "Megye",
+"Zipcode" => "Irányítószám",
+"Country" => "Ország",
+"Create Contact" => "Kontakt létrehozása",
+"Edit" => "Szerkesztés",
+"Delete" => "Törlés",
+"Birthday" => "Születésnap",
+"Phone" => "Telefonszám"
+);
diff --git a/apps/contacts/l10n/ia.php b/apps/contacts/l10n/ia.php
new file mode 100644
index 00000000000..d4203ce8f04
--- /dev/null
+++ b/apps/contacts/l10n/ia.php
@@ -0,0 +1,30 @@
+<?php $TRANSLATIONS = array(
+"This is not your addressbook." => "Iste non es tu libro de adresses",
+"Contact could not be found." => "Contacto non poterea esser legite",
+"Address" => "Adresse",
+"Telephone" => "Telephono",
+"Email" => "E-posta",
+"Organization" => "Organisation",
+"Work" => "Travalio",
+"Home" => "Domo",
+"Text" => "Texto",
+"Voice" => "Voce",
+"Fax" => "Fax",
+"Video" => "Video",
+"Pager" => "Pager",
+"This is not your contact." => "Iste non es tu contacto",
+"This card is not RFC compatible." => "Iste carta non es compatibile con RFC",
+"Add Contact" => "Adder contacto",
+"Name" => "Nomine",
+"PO Box" => "Cassa postal",
+"Street" => "Strata",
+"City" => "Citate",
+"Region" => "Region",
+"Zipcode" => "Codice postal",
+"Country" => "Pais",
+"Create Contact" => "Crear contacto",
+"Edit" => "Modificar",
+"Delete" => "Deler",
+"Birthday" => "Anniversario",
+"Phone" => "Phono"
+);
diff --git a/apps/contacts/l10n/it.php b/apps/contacts/l10n/it.php
index 7a57d6fc5d2..c4360d89133 100644
--- a/apps/contacts/l10n/it.php
+++ b/apps/contacts/l10n/it.php
@@ -1,38 +1,48 @@
<?php $TRANSLATIONS = array(
-"You need to log in." => "Bisogna effettuare il login.",
"This is not your addressbook." => "Questa non è la tua rubrica.",
"Contact could not be found." => "Il contatto non può essere trovato",
-"This is not your contact." => "Questo non è un tuo contatto.",
-"vCard could not be read." => "La vCard non può essere letta",
"Information about vCard is incorrect. Please reload the page." => "Informazioni sulla vCard incorrette. Ricaricare la pagina.",
-"This card is not RFC compatible." => "Questa card non è compatibile con il protocollo RFC.",
-"This card does not contain a photo." => "Questa card non contiene una foto.",
-"Add Contact" => "Aggiungi contatto",
-"Group" => "Gruppo",
-"Name" => "Nome",
-"Create Contact" => "Crea contatto",
"Address" => "Indirizzo",
"Telephone" => "Telefono",
"Email" => "Email",
"Organization" => "Organizzazione",
"Work" => "Lavoro",
"Home" => "Casa",
-"PO Box" => "PO Box",
+"Mobile" => "Cellulare",
+"Text" => "Testo",
+"Voice" => "Voce",
+"Fax" => "Fax",
+"Video" => "Video",
+"Pager" => "Cercapersone",
+"This is not your contact." => "Questo non è un tuo contatto.",
+"This card is not RFC compatible." => "Questa card non è compatibile con il protocollo RFC.",
+"This card does not contain a photo." => "Questa card non contiene una foto.",
+"Add Contact" => "Aggiungi contatto",
+"Name" => "Nome",
+"Type" => "Tipo",
+"PO Box" => "Casella postale",
"Extended" => "Estendi",
"Street" => "Via",
"City" => "Città",
"Region" => "Regione",
"Zipcode" => "CAP",
"Country" => "Stato",
-"Mobile" => "Cellulare",
-"Text" => "Testo",
-"Voice" => "Voce",
-"Fax" => "Fax",
-"Video" => "Video",
-"Pager" => "Pager",
+"Create Contact" => "Crea contatto",
+"Choose active Address Books" => "Seleziona le rubriche attive",
+"New Address Book" => "Nuova rubrica",
+"CardDav Link" => "Link CardDav",
+"Download" => "Scarica",
+"Edit" => "Modifica",
"Delete" => "Cancella",
-"Add Property" => "Aggiungi proprietà",
+"Delete contact" => "Cancella contatto",
+"Add" => "Aggiungi",
+"Displayname" => "Nome da mostrare",
+"Active" => "Attiva",
+"Save" => "Salva",
+"Submit" => "Conferma",
+"Cancel" => "Annulla",
"Birthday" => "Compleanno",
+"Preferred" => "Preferito",
"Phone" => "Telefono",
-"Edit" => "Modifica"
+"Update" => "Aggiorna"
);
diff --git a/apps/contacts/l10n/ja_JP.php b/apps/contacts/l10n/ja_JP.php
new file mode 100644
index 00000000000..c8711e963f3
--- /dev/null
+++ b/apps/contacts/l10n/ja_JP.php
@@ -0,0 +1,34 @@
+<?php $TRANSLATIONS = array(
+"This is not your addressbook." => "これはあなたの電話帳ではありません。",
+"Contact could not be found." => "連絡先を見つける事ができません。",
+"Information about vCard is incorrect. Please reload the page." => "vCardの情報に誤りがあります。ページをリロードして下さい。",
+"Address" => "住所",
+"Telephone" => "電話番号",
+"Email" => "メールアドレス",
+"Organization" => "所属",
+"Work" => "勤務先",
+"Home" => "住居",
+"Mobile" => "携帯電話",
+"Text" => "TTY TDD",
+"Voice" => "音声番号",
+"Fax" => "FAX",
+"Video" => "テレビ電話",
+"Pager" => "ポケベル",
+"This is not your contact." => "あなたの連絡先ではありません。",
+"This card is not RFC compatible." => "このカードはRFCに準拠していません。",
+"This card does not contain a photo." => "このカードは写真を含んでおりません。",
+"Add Contact" => "連絡先の追加",
+"Name" => "氏名",
+"PO Box" => "私書箱",
+"Extended" => "拡張番地",
+"Street" => "街路番地",
+"City" => "都市",
+"Region" => "地域",
+"Zipcode" => "郵便番号",
+"Country" => "国名",
+"Create Contact" => "追加",
+"Edit" => "編集",
+"Delete" => "削除",
+"Birthday" => "生年月日",
+"Phone" => "電話番号"
+);
diff --git a/apps/contacts/l10n/lb.php b/apps/contacts/l10n/lb.php
new file mode 100644
index 00000000000..4190072171a
--- /dev/null
+++ b/apps/contacts/l10n/lb.php
@@ -0,0 +1,34 @@
+<?php $TRANSLATIONS = array(
+"This is not your addressbook." => "Dat do ass net däin Adressbuch.",
+"Contact could not be found." => "Konnt den Kontakt net fannen.",
+"Information about vCard is incorrect. Please reload the page." => "Informatioun iwwert vCard ass net richteg. Lued d'Säit wegl nei.",
+"Address" => "Adress",
+"Telephone" => "Telefon's Nummer",
+"Email" => "Email",
+"Organization" => "Firma",
+"Work" => "Aarbecht",
+"Home" => "Doheem",
+"Mobile" => "GSM",
+"Text" => "SMS",
+"Voice" => "Voice",
+"Fax" => "Fax",
+"Video" => "Video",
+"Pager" => "Pager",
+"This is not your contact." => "Dat do ass net däin Kontakt.",
+"This card is not RFC compatible." => "Déi do Kaart ass net RFC kompatibel.",
+"This card does not contain a photo." => "Déi do Kaart huet keng Foto.",
+"Add Contact" => "Kontakt bäisetzen",
+"Name" => "Numm",
+"PO Box" => "Postleetzuel",
+"Extended" => "Erweidert",
+"Street" => "Strooss",
+"City" => "Staat",
+"Region" => "Regioun",
+"Zipcode" => "Postleetzuel",
+"Country" => "Land",
+"Create Contact" => "Kontakt erstellen",
+"Edit" => "Editéieren",
+"Delete" => "Läschen",
+"Birthday" => "Gebuertsdag",
+"Phone" => "Telefon"
+);
diff --git a/apps/contacts/l10n/lt_LT.php b/apps/contacts/l10n/lt_LT.php
new file mode 100644
index 00000000000..8dc61e3621f
--- /dev/null
+++ b/apps/contacts/l10n/lt_LT.php
@@ -0,0 +1,31 @@
+<?php $TRANSLATIONS = array(
+"This is not your addressbook." => "Tai ne jūsų adresų knygelė.",
+"Contact could not be found." => "Kontaktas nerastas",
+"Information about vCard is incorrect. Please reload the page." => "Informacija apie vCard yra neteisinga. ",
+"Address" => "Adresas",
+"Telephone" => "Telefonas",
+"Email" => "El. paštas",
+"Organization" => "Organizacija",
+"Work" => "Darbo",
+"Home" => "Namų",
+"Mobile" => "Mobilusis",
+"Text" => "Tekstas",
+"Voice" => "Balso",
+"Fax" => "Faksas",
+"Video" => "Vaizdo",
+"Pager" => "Pranešimų gaviklis",
+"This is not your contact." => "Tai ne jūsų kontaktas",
+"Add Contact" => "Pridėti kontaktą",
+"Name" => "Vardas",
+"PO Box" => "Pašto dėžutė",
+"Street" => "Gatvė",
+"City" => "Miestas",
+"Region" => "Regionas",
+"Zipcode" => "Pašto indeksas",
+"Country" => "Šalis",
+"Create Contact" => "Sukurti kontaktą",
+"Edit" => "Keisti",
+"Delete" => "Trinti",
+"Birthday" => "Gimtadienis",
+"Phone" => "Telefonas"
+);
diff --git a/apps/contacts/l10n/nl.php b/apps/contacts/l10n/nl.php
new file mode 100644
index 00000000000..0bfa86c8c44
--- /dev/null
+++ b/apps/contacts/l10n/nl.php
@@ -0,0 +1,48 @@
+<?php $TRANSLATIONS = array(
+"This is not your addressbook." => "Dit is niet uw adresboek.",
+"Contact could not be found." => "Contact kon niet worden gevonden.",
+"Information about vCard is incorrect. Please reload the page." => "Informatie over de vCard is onjuist. Herlaad de pagina.",
+"Address" => "Adres",
+"Telephone" => "Telefoon",
+"Email" => "E-mail",
+"Organization" => "Organisatie",
+"Work" => "Werk",
+"Home" => "Thuis",
+"Mobile" => "Mobiel",
+"Text" => "Tekst",
+"Voice" => "Stem",
+"Fax" => "Fax",
+"Video" => "Video",
+"Pager" => "Pieper",
+"This is not your contact." => "Dit is niet uw contactpersoon.",
+"This card is not RFC compatible." => "Deze kaart is niet RFC compatibel.",
+"This card does not contain a photo." => "Deze contact bevat geen foto.",
+"Add Contact" => "Contact toevoegen",
+"Name" => "Naam",
+"Type" => "Type",
+"PO Box" => "Postbus",
+"Extended" => "Uitgebreide",
+"Street" => "Straat",
+"City" => "Stad",
+"Region" => "Regio",
+"Zipcode" => "Postcode",
+"Country" => "Land",
+"Create Contact" => "Contact aanmaken",
+"Choose active Address Books" => "Kies actief Adresboek",
+"New Address Book" => "Nieuw Adresboek",
+"CardDav Link" => "CardDav Link",
+"Download" => "Download",
+"Edit" => "Bewerken",
+"Delete" => "Verwijderen",
+"Delete contact" => "Verwijder contact",
+"Add" => "Voeg toe",
+"Displayname" => "Weergavenaam",
+"Active" => "Actief",
+"Save" => "Opslaan",
+"Submit" => "Opslaan",
+"Cancel" => "Anuleren",
+"Birthday" => "Verjaardag",
+"Preferred" => "Voorkeur",
+"Phone" => "Telefoon",
+"Update" => "Vernieuwe"
+);
diff --git a/apps/contacts/l10n/nn_NO.php b/apps/contacts/l10n/nn_NO.php
new file mode 100644
index 00000000000..12d914a805c
--- /dev/null
+++ b/apps/contacts/l10n/nn_NO.php
@@ -0,0 +1,34 @@
+<?php $TRANSLATIONS = array(
+"This is not your addressbook." => "Dette er ikkje di adressebok.",
+"Contact could not be found." => "Fann ikkje kontakten.",
+"Information about vCard is incorrect. Please reload the page." => "Informasjonen om vCard-et er feil, ver venleg og last sida på nytt.",
+"Address" => "Adresse",
+"Telephone" => "Telefonnummer",
+"Email" => "Epost",
+"Organization" => "Organisasjon",
+"Work" => "Arbeid",
+"Home" => "Heime",
+"Mobile" => "Mobil",
+"Text" => "Tekst",
+"Voice" => "Tale",
+"Fax" => "Faks",
+"Video" => "Video",
+"Pager" => "Personsøkjar",
+"This is not your contact." => "Dette er ikkje din kontakt.",
+"This card is not RFC compatible." => "Dette kortet er ikkje RFC-kompatibelt",
+"This card does not contain a photo." => "Dette kortet har ingen bilete.",
+"Add Contact" => "Legg til kontakt",
+"Name" => "Namn",
+"PO Box" => "Postboks",
+"Extended" => "Utvida",
+"Street" => "Gate",
+"City" => "Stad",
+"Region" => "Region/fylke",
+"Zipcode" => "Postnummer",
+"Country" => "Land",
+"Create Contact" => "Opprett kontakt",
+"Edit" => "Endra",
+"Delete" => "Slett",
+"Birthday" => "Bursdag",
+"Phone" => "Telefonnummer"
+);
diff --git a/apps/contacts/l10n/pl.php b/apps/contacts/l10n/pl.php
new file mode 100644
index 00000000000..72bdf967a4e
--- /dev/null
+++ b/apps/contacts/l10n/pl.php
@@ -0,0 +1,66 @@
+<?php $TRANSLATIONS = array(
+"Error (de)activating addressbook." => "Błąd podczas (de)aktywacji książki",
+"There was an error adding the contact." => "Wystąpił błąd podczas dodawania kontaktu",
+"Cannot add empty property." => "Nie można dodać pustego elementu",
+"At least one of the address fields has to be filled out." => "Przynajmniej jedno pole adresu musi być wypełnione",
+"Error adding contact property." => "Błąd podczas dodawania elementu",
+"Error adding addressbook." => "Błąd podczas dodawania książki",
+"Error activating addressbook." => "Błąd podczas aktywacji książki adresowej",
+"Error deleting contact property." => "Błąd podczas kasowania elementu",
+"Error updating contact property." => "Błąd podczas aktualizacji elementu",
+"Error updating addressbook." => "Błąd podczas aktualizacji książki",
+"Contacts" => "Kontakty",
+"This is not your addressbook." => "To nie jest twoja książka adresowa.",
+"Contact could not be found." => "Kontakt nie znaleziony.",
+"Information about vCard is incorrect. Please reload the page." => "Informacje o vCard są nieprawidłowe. Proszę odświeżyć stronę.",
+"Address" => "Adres",
+"Telephone" => "Telefon",
+"Email" => "E-mail",
+"Organization" => "Organizacja",
+"Work" => "Praca",
+"Home" => "Dom",
+"Mobile" => "Komórka",
+"Text" => "Tekst",
+"Voice" => "Połączenie głosowe",
+"Fax" => "Faks",
+"Video" => "Połączenie wideo",
+"Pager" => "Pager",
+"Contact" => "Kontakt",
+"This is not your contact." => "To nie jest twój kontakt.",
+"This card is not RFC compatible." => "Ta karta nie jest zgodna ze specyfikacją RFC.",
+"This card does not contain a photo." => "Ta karta nie zawiera zdjęć.",
+"Add Contact" => "Dodaj kontakt",
+"Addressbooks" => "Książki adresowe",
+"Addressbook" => "Książka adresowa",
+"Name" => "Nazwisko",
+"Type" => "Typ",
+"PO Box" => "PO Box",
+"Extended" => "Rozszerzony",
+"Street" => "Ulica",
+"City" => "Miasto",
+"Region" => "Region",
+"Zipcode" => "Błąd podczas dodawania elementu",
+"Country" => "Kraj",
+"Create Contact" => "Utwórz kontakt",
+"Choose active Address Books" => "Wybierz aktywną książkę adresową",
+"New Address Book" => "Nowa książka adresowa",
+"CardDav Link" => "Link CardDav",
+"Download" => "Sciągaj",
+"Edit" => "Edytuj",
+"Delete" => "Usuń",
+"Download contact" => "Pobierz kontakt",
+"Delete contact" => "Skasuj kontakt",
+"Add" => "Dodaj",
+"New Addressbook" => "Nowa książka adresowa",
+"Edit Addressbook" => "Edytuj książkę",
+"Displayname" => "Nazwa wyświetlana",
+"Active" => "Aktywny",
+"Save" => "Zapisz",
+"Submit" => "Potwierdź",
+"Cancel" => "Skasuj",
+"Birthday" => "Urodziny",
+"Preferred" => "Preferowane",
+"Phone" => "Telefon",
+"Update" => "Aktualizuj",
+"CardDAV syncing address:" => "Adres synchronizacji CardDAV:"
+);
diff --git a/apps/contacts/l10n/pt_BR.php b/apps/contacts/l10n/pt_BR.php
new file mode 100644
index 00000000000..db9e98d6fe0
--- /dev/null
+++ b/apps/contacts/l10n/pt_BR.php
@@ -0,0 +1,34 @@
+<?php $TRANSLATIONS = array(
+"This is not your addressbook." => "Este não é o seu agenda de endereços.",
+"Contact could not be found." => "Contato não pôde ser encontrado.",
+"Information about vCard is incorrect. Please reload the page." => "Informações sobre vCard é incorreta. Por favor, recarregue a página.",
+"Address" => "Endereço",
+"Telephone" => "Telefone",
+"Email" => "E-mail",
+"Organization" => "Organização",
+"Work" => "Trabalho",
+"Home" => "Home",
+"Mobile" => "Móvel",
+"Text" => "Texto",
+"Voice" => "Voz",
+"Fax" => "Fax",
+"Video" => "Vídeo",
+"Pager" => "Pager",
+"This is not your contact." => "Este não é o seu contato.",
+"This card is not RFC compatible." => "Este cartão não é compatível com RFC.",
+"This card does not contain a photo." => "Este cartão não contém uma foto.",
+"Add Contact" => "Adicionar Contato",
+"Name" => "Nome",
+"PO Box" => "Caixa Postal",
+"Extended" => "Estendido",
+"Street" => "Rua",
+"City" => "Cidade",
+"Region" => "Região",
+"Zipcode" => "CEP",
+"Country" => "País",
+"Create Contact" => "Criar Contato",
+"Edit" => "Editar",
+"Delete" => "Excluir",
+"Birthday" => "Aniversário",
+"Phone" => "Telefone"
+);
diff --git a/apps/contacts/l10n/pt_PT.php b/apps/contacts/l10n/pt_PT.php
new file mode 100644
index 00000000000..d5916838dbe
--- /dev/null
+++ b/apps/contacts/l10n/pt_PT.php
@@ -0,0 +1,34 @@
+<?php $TRANSLATIONS = array(
+"This is not your addressbook." => "Esta não é a sua lista de contactos",
+"Contact could not be found." => "O contacto não foi encontrado",
+"Information about vCard is incorrect. Please reload the page." => "A informação sobre o vCard está incorreta. Por favor refresque a página",
+"Address" => "Morada",
+"Telephone" => "Telefone",
+"Email" => "Email",
+"Organization" => "Organização",
+"Work" => "Trabalho",
+"Home" => "Casa",
+"Mobile" => "Telemovel",
+"Text" => "Texto",
+"Voice" => "Voz",
+"Fax" => "Fax",
+"Video" => "Vídeo",
+"Pager" => "Pager",
+"This is not your contact." => "Este não é o seu contacto",
+"This card is not RFC compatible." => "Este cartão não é compativel com RFC",
+"This card does not contain a photo." => "Este cartão não possui foto",
+"Add Contact" => "Adicionar Contacto",
+"Name" => "Nome",
+"PO Box" => "Apartado",
+"Extended" => "Extendido",
+"Street" => "Rua",
+"City" => "Cidade",
+"Region" => "Região",
+"Zipcode" => "Código Postal",
+"Country" => "País",
+"Create Contact" => "Criar Contacto",
+"Edit" => "Editar",
+"Delete" => "Apagar",
+"Birthday" => "Aniversário",
+"Phone" => "Telefone"
+);
diff --git a/apps/contacts/l10n/ro.php b/apps/contacts/l10n/ro.php
new file mode 100644
index 00000000000..4fc10abddb0
--- /dev/null
+++ b/apps/contacts/l10n/ro.php
@@ -0,0 +1,48 @@
+<?php $TRANSLATIONS = array(
+"This is not your addressbook." => "Nu se găsește în agendă.",
+"Contact could not be found." => "Contactul nu a putut fi găsit.",
+"Information about vCard is incorrect. Please reload the page." => "Informațiile despre vCard sunt incorecte. Reîncărcați pagina.",
+"Address" => "Adresă",
+"Telephone" => "Telefon",
+"Email" => "Email",
+"Organization" => "Organizație",
+"Work" => "Servici",
+"Home" => "Acasă",
+"Mobile" => "Mobil",
+"Text" => "Text",
+"Voice" => "Voce",
+"Fax" => "Fax",
+"Video" => "Video",
+"Pager" => "Pager",
+"This is not your contact." => "Nu este contactul tău",
+"This card is not RFC compatible." => "Nu este compatibil RFC",
+"This card does not contain a photo." => "Nu conține o fotografie",
+"Add Contact" => "Adaugă contact",
+"Name" => "Nume",
+"Type" => "Tip",
+"PO Box" => "CP",
+"Extended" => "Extins",
+"Street" => "Stradă",
+"City" => "Oraș",
+"Region" => "Regiune",
+"Zipcode" => "Cod poștal",
+"Country" => "Țară",
+"Create Contact" => "Crează contact",
+"Choose active Address Books" => "Alegeți una din agendele active",
+"New Address Book" => "Agendă nouă",
+"CardDav Link" => "Link CardDev",
+"Download" => "Descarcă",
+"Edit" => "Editează",
+"Delete" => "Șterge",
+"Delete contact" => "Șterge contact",
+"Add" => "Adaugă",
+"Displayname" => "Numele afișat",
+"Active" => "Activ",
+"Save" => "Salvează",
+"Submit" => "Trimite",
+"Cancel" => "Anulează",
+"Birthday" => "Zi de naștere",
+"Preferred" => "Preferat",
+"Phone" => "Telefon",
+"Update" => "Update"
+);
diff --git a/apps/contacts/l10n/ru.php b/apps/contacts/l10n/ru.php
new file mode 100644
index 00000000000..5eb765f222e
--- /dev/null
+++ b/apps/contacts/l10n/ru.php
@@ -0,0 +1,34 @@
+<?php $TRANSLATIONS = array(
+"This is not your addressbook." => "Это не ваша адресная книга.",
+"Contact could not be found." => "Контакт не найден.",
+"Information about vCard is incorrect. Please reload the page." => "Информация о vCard некорректна. Пожалуйста, обновите страницу.",
+"Address" => "Адрес",
+"Telephone" => "Телефон",
+"Email" => "Ящик эл. почты",
+"Organization" => "Организация",
+"Work" => "Рабочий",
+"Home" => "Домашний",
+"Mobile" => "Мобильный",
+"Text" => "Текст",
+"Voice" => "Голос",
+"Fax" => "Факс",
+"Video" => "Видео",
+"Pager" => "Пейджер",
+"This is not your contact." => "Это не контакт.",
+"This card is not RFC compatible." => "Эта карточка не соответствует RFC.",
+"This card does not contain a photo." => "Эта карточка не содержит фотографии.",
+"Add Contact" => "Добавить Контакт",
+"Name" => "Имя",
+"PO Box" => "АО",
+"Extended" => "Расширенный",
+"Street" => "Улица",
+"City" => "Город",
+"Region" => "Область",
+"Zipcode" => "Почтовый индекс",
+"Country" => "Страна",
+"Create Contact" => "Создать Контакт",
+"Edit" => "Редактировать",
+"Delete" => "Удалить",
+"Birthday" => "День рождения",
+"Phone" => "Телефон"
+);
diff --git a/apps/contacts/l10n/sk_SK.php b/apps/contacts/l10n/sk_SK.php
new file mode 100644
index 00000000000..16876cc59b2
--- /dev/null
+++ b/apps/contacts/l10n/sk_SK.php
@@ -0,0 +1,34 @@
+<?php $TRANSLATIONS = array(
+"This is not your addressbook." => "Toto nie je váš adresár.",
+"Contact could not be found." => "Kontakt nebol nájdený.",
+"Information about vCard is incorrect. Please reload the page." => "Informácie o vCard sú neplatné. Prosím obnovte stránku.",
+"Address" => "Adresa",
+"Telephone" => "Telefón",
+"Email" => "E-mail",
+"Organization" => "Organizácia",
+"Work" => "Práca",
+"Home" => "Domov",
+"Mobile" => "Mobil",
+"Text" => "SMS",
+"Voice" => "Odkazová schránka",
+"Fax" => "Fax",
+"Video" => "Video",
+"Pager" => "Pager",
+"This is not your contact." => "Toto nie je váš kontakt.",
+"This card is not RFC compatible." => "Táto karta nie je kompatibilná s RFC.",
+"This card does not contain a photo." => "Táto karta neobsahuje fotografiu.",
+"Add Contact" => "Pridať Kontakt.",
+"Name" => "Meno",
+"PO Box" => "PO Box",
+"Extended" => "Rozšírené",
+"Street" => "Ulica",
+"City" => "Mesto",
+"Region" => "Región",
+"Zipcode" => "PSČ",
+"Country" => "Krajina",
+"Create Contact" => "Vytvoriť Kontakt.",
+"Edit" => "Upraviť",
+"Delete" => "Odstrániť",
+"Birthday" => "Narodeniny",
+"Phone" => "Telefón"
+);
diff --git a/apps/contacts/l10n/sl.php b/apps/contacts/l10n/sl.php
new file mode 100644
index 00000000000..2c81567eae0
--- /dev/null
+++ b/apps/contacts/l10n/sl.php
@@ -0,0 +1,34 @@
+<?php $TRANSLATIONS = array(
+"This is not your addressbook." => "To ni vaš adresar.",
+"Contact could not be found." => "Kontakta ni bilo mogoče najti.",
+"Information about vCard is incorrect. Please reload the page." => "Informacije o vVizitki (vCard) niso pravilne, Prosimo ponovno naložite okno.",
+"Address" => "Naslov",
+"Telephone" => "Telefon",
+"Email" => "Email",
+"Organization" => "Organizacija",
+"Work" => "Delo",
+"Home" => "Doma",
+"Mobile" => "Mobitel",
+"Text" => "Tekst",
+"Voice" => "Glas- Voice",
+"Fax" => "Faks",
+"Video" => "Video",
+"Pager" => "Pager",
+"This is not your contact." => "To ni vaš kontakt",
+"This card is not RFC compatible." => "Ta karta ni RFC kopatibilna.",
+"This card does not contain a photo." => "Ta karta ne vsebuje slike.",
+"Add Contact" => "Dodaj Kontakt",
+"Name" => "Ime",
+"PO Box" => "PO Box",
+"Extended" => "Razširjeno.",
+"Street" => "Ulica",
+"City" => "Mesto",
+"Region" => "Regija",
+"Zipcode" => "Poštna št.",
+"Country" => "Dežela",
+"Create Contact" => "Ustvari Kontakt",
+"Edit" => "Uredi",
+"Delete" => "Izbriši",
+"Birthday" => "Rojstni Dan",
+"Phone" => "Telefon"
+);
diff --git a/apps/contacts/l10n/sr.php b/apps/contacts/l10n/sr.php
new file mode 100644
index 00000000000..882381c37c2
--- /dev/null
+++ b/apps/contacts/l10n/sr.php
@@ -0,0 +1,34 @@
+<?php $TRANSLATIONS = array(
+"This is not your addressbook." => "Ово није ваш адресар.",
+"Contact could not be found." => "Контакт се не може наћи.",
+"Information about vCard is incorrect. Please reload the page." => "Подаци о вКарти су неисправни. Поново учитајте страницу.",
+"Address" => "Адреса",
+"Telephone" => "Телефон",
+"Email" => "Е-маил",
+"Organization" => "Организација",
+"Work" => "Посао",
+"Home" => "Кућа",
+"Mobile" => "Мобилни",
+"Text" => "Текст",
+"Voice" => "Глас",
+"Fax" => "Факс",
+"Video" => "Видео",
+"Pager" => "Пејџер",
+"This is not your contact." => "Ово није ваш контакт.",
+"This card is not RFC compatible." => "Ова карта није сагласна са РФЦ-ом.",
+"This card does not contain a photo." => "Ова карта не садржи фотографију.",
+"Add Contact" => "Додај контакт",
+"Name" => "Име",
+"PO Box" => "Поштански број",
+"Extended" => "Прошири",
+"Street" => "Улица",
+"City" => "Град",
+"Region" => "Регија",
+"Zipcode" => "Зип код",
+"Country" => "Земља",
+"Create Contact" => "Направи контакт",
+"Edit" => "Уреди",
+"Delete" => "Обриши",
+"Birthday" => "Рођендан",
+"Phone" => "Телефон"
+);
diff --git a/apps/contacts/l10n/sr@latin.php b/apps/contacts/l10n/sr@latin.php
new file mode 100644
index 00000000000..1ae38e32922
--- /dev/null
+++ b/apps/contacts/l10n/sr@latin.php
@@ -0,0 +1,34 @@
+<?php $TRANSLATIONS = array(
+"This is not your addressbook." => "Ovo nije vaš adresar.",
+"Contact could not be found." => "Kontakt se ne može naći.",
+"Information about vCard is incorrect. Please reload the page." => "Podaci o vKarti su neispravni. Ponovo učitajte stranicu.",
+"Address" => "Adresa",
+"Telephone" => "Telefon",
+"Email" => "E-mail",
+"Organization" => "Organizacija",
+"Work" => "Posao",
+"Home" => "Kuća",
+"Mobile" => "Mobilni",
+"Text" => "Tekst",
+"Voice" => "Glas",
+"Fax" => "Faks",
+"Video" => "Video",
+"Pager" => "Pejdžer",
+"This is not your contact." => "Ovo nije vaš kontakt.",
+"This card is not RFC compatible." => "Ova karta nije saglasna sa RFC-om.",
+"This card does not contain a photo." => "Ova karta ne sadrži fotografiju.",
+"Add Contact" => "Dodaj kontakt",
+"Name" => "Ime",
+"PO Box" => "Poštanski broj",
+"Extended" => "Proširi",
+"Street" => "Ulica",
+"City" => "Grad",
+"Region" => "Regija",
+"Zipcode" => "Zip kod",
+"Country" => "Zemlja",
+"Create Contact" => "Napravi kontakt",
+"Edit" => "Uredi",
+"Delete" => "Obriši",
+"Birthday" => "Rođendan",
+"Phone" => "Telefon"
+);
diff --git a/apps/contacts/l10n/sv.php b/apps/contacts/l10n/sv.php
new file mode 100644
index 00000000000..f62ca30b5f2
--- /dev/null
+++ b/apps/contacts/l10n/sv.php
@@ -0,0 +1,34 @@
+<?php $TRANSLATIONS = array(
+"This is not your addressbook." => "Det här är inte din adressbok.",
+"Contact could not be found." => "Kontakt kunde inte hittas.",
+"Information about vCard is incorrect. Please reload the page." => "Information om vCard är felaktigt. Vänligen ladda om sidan.",
+"Address" => "Adress",
+"Telephone" => "Telefon",
+"Email" => "E-post",
+"Organization" => "Organisation",
+"Work" => "Arbete",
+"Home" => "Hem",
+"Mobile" => "Mobil",
+"Text" => "Text",
+"Voice" => "Röst",
+"Fax" => "Fax",
+"Video" => "Video",
+"Pager" => "Personsökare",
+"This is not your contact." => "Det här är inte din kontakt.",
+"This card is not RFC compatible." => "Detta kort är inte RFC-kompatibelt.",
+"This card does not contain a photo." => "Detta kort innehåller inte något foto.",
+"Add Contact" => "Lägg till kontakt",
+"Name" => "Namn",
+"PO Box" => "Postbox",
+"Extended" => "Utökad",
+"Street" => "Gata",
+"City" => "Stad",
+"Region" => "Län",
+"Zipcode" => "Postnummer",
+"Country" => "Land",
+"Create Contact" => "Skapa kontakt",
+"Edit" => "Redigera",
+"Delete" => "Radera",
+"Birthday" => "Födelsedag",
+"Phone" => "Telefon"
+);
diff --git a/apps/contacts/l10n/tr.php b/apps/contacts/l10n/tr.php
new file mode 100644
index 00000000000..285adac8d6a
--- /dev/null
+++ b/apps/contacts/l10n/tr.php
@@ -0,0 +1,34 @@
+<?php $TRANSLATIONS = array(
+"This is not your addressbook." => "Bu sizin adres defteriniz değil.",
+"Contact could not be found." => "Kişi bulunamadı.",
+"Information about vCard is incorrect. Please reload the page." => "vCard bilgileri doğru değil. Lütfen sayfayı yenileyin.",
+"Address" => "Adres",
+"Telephone" => "Telefon",
+"Email" => "Eposta",
+"Organization" => "Organizasyon",
+"Work" => "İş",
+"Home" => "Ev",
+"Mobile" => "Mobil",
+"Text" => "Metin",
+"Voice" => "Ses",
+"Fax" => "Faks",
+"Video" => "Video",
+"Pager" => "Sayfalayıcı",
+"This is not your contact." => "Bu sizin kişiniz değil.",
+"This card is not RFC compatible." => "Bu kart RFC uyumlu değil.",
+"This card does not contain a photo." => "Bu kart resim içermiyor.",
+"Add Contact" => "Kişi Ekle",
+"Name" => "Ad",
+"PO Box" => "Posta Kutusu",
+"Extended" => "Uzatılmış",
+"Street" => "Sokak",
+"City" => "Şehir",
+"Region" => "Bölge",
+"Zipcode" => "Posta kodu",
+"Country" => "Ülke",
+"Create Contact" => "Kişi Oluştur",
+"Edit" => "Düzenle",
+"Delete" => "Sil",
+"Birthday" => "Doğum günü",
+"Phone" => "Telefon"
+);
diff --git a/apps/contacts/l10n/xgettextfiles b/apps/contacts/l10n/xgettextfiles
new file mode 100644
index 00000000000..91d5da46db0
--- /dev/null
+++ b/apps/contacts/l10n/xgettextfiles
@@ -0,0 +1,21 @@
+../appinfo/app.php
+../ajax/activation.php
+../ajax/addbook.php
+../ajax/addcard.php
+../ajax/addproperty.php
+../ajax/createaddressbook.php
+../ajax/deletebook.php
+../ajax/deleteproperty.php
+../ajax/getdetails.php
+../ajax/setproperty.php
+../ajax/updateaddressbook.php
+../lib/app.php
+../templates/index.php
+../templates/part.addcardform.php
+../templates/part.chooseaddressbook.php
+../templates/part.chooseaddressbook.rowfields.php
+../templates/part.details.php
+../templates/part.editaddressbook.php
+../templates/part.property.php
+../templates/part.setpropertyform.php
+../templates/settings.php
diff --git a/apps/contacts/l10n/zh_CN.php b/apps/contacts/l10n/zh_CN.php
new file mode 100644
index 00000000000..829f1b0e073
--- /dev/null
+++ b/apps/contacts/l10n/zh_CN.php
@@ -0,0 +1,34 @@
+<?php $TRANSLATIONS = array(
+"This is not your addressbook." => "这不是您的地址簿。",
+"Contact could not be found." => "无法找到联系人。",
+"Information about vCard is incorrect. Please reload the page." => "vCard 的信息不正确。请重新加载页面。",
+"Address" => "地址",
+"Telephone" => "电话",
+"Email" => "电子邮件",
+"Organization" => "组织",
+"Work" => "工作",
+"Home" => "家庭",
+"Mobile" => "移动电话",
+"Text" => "文本",
+"Voice" => "语音",
+"Fax" => "传真",
+"Video" => "视频",
+"Pager" => "传呼机",
+"This is not your contact." => "这不是您的联系人。",
+"This card is not RFC compatible." => "这张名片和RFC 标准不兼容。",
+"This card does not contain a photo." => "这张名片不包含照片。",
+"Add Contact" => "添加联系人",
+"Name" => "名称",
+"PO Box" => "邮箱",
+"Extended" => "扩展",
+"Street" => "街道",
+"City" => "城市",
+"Region" => "地区",
+"Zipcode" => "邮编",
+"Country" => "国家",
+"Create Contact" => "创建联系人",
+"Edit" => "编辑",
+"Delete" => "删除",
+"Birthday" => "生日",
+"Phone" => "电话"
+);
diff --git a/apps/contacts/lib/addressbook.php b/apps/contacts/lib/addressbook.php
index 78792f5f948..052c19e55fe 100644
--- a/apps/contacts/lib/addressbook.php
+++ b/apps/contacts/lib/addressbook.php
@@ -203,15 +203,6 @@ class OC_Contacts_Addressbook{
while( $row = $result->fetchRow()){
$addressbooks[] = $row;
}
- /*
- foreach( $active as $aid ){
- $stmt = OC_DB::prepare( 'SELECT * FROM *PREFIX*contacts_addressbooks WHERE id = ? ORDER BY displayname' );
- $result = $stmt->execute(array($aid,));
-
- while( $row = $result->fetchRow()){
- $addressbooks[] = $row;
- }
- }*/
return $addressbooks;
}
@@ -240,6 +231,7 @@ class OC_Contacts_Addressbook{
unset($openaddressbooks[array_search($id, $openaddressbooks)]);
}
}
+ // NOTE: Ugly hack...
$openaddressbooks = self::cleanArray($openaddressbooks, false);
sort($openaddressbooks, SORT_NUMERIC);
// FIXME: I alway end up with a ';' prepending when imploding the array..?
@@ -264,6 +256,7 @@ class OC_Contacts_Addressbook{
* @return boolean
*/
public static function delete($id){
+ // FIXME: There's no error checking at all.
self::setActive($id, false);
$stmt = OC_DB::prepare( 'DELETE FROM *PREFIX*contacts_addressbooks WHERE id = ?' );
$stmt->execute(array($id));
diff --git a/apps/contacts/lib/app.php b/apps/contacts/lib/app.php
index 79e00920a65..00a830d5e5f 100644
--- a/apps/contacts/lib/app.php
+++ b/apps/contacts/lib/app.php
@@ -56,15 +56,14 @@ class OC_Contacts_App{
return $card;
}
+ /**
+ * @brief Gets the VCard as text
+ * @returns The card or null if the card could not be parsed.
+ */
public static function getContactVCard($id){
$card = self::getContactObject( $id );
$vcard = OC_VObject::parse($card['carddata']);
- // Check if the card is valid
- if(is_null($vcard)){
- OC_JSON::error(array('data' => array( 'message' => self::$l10n->t('vCard could not be read.'))));
- exit();
- }
return $vcard;
}
@@ -73,6 +72,7 @@ class OC_Contacts_App{
for($i=0;$i<count($vcard->children);$i++){
if(md5($vcard->children[$i]->serialize()) == $checksum ){
$line = $i;
+ break;
}
}
if(is_null($line)){
diff --git a/apps/contacts/lib/search.php b/apps/contacts/lib/search.php
new file mode 100644
index 00000000000..97638821007
--- /dev/null
+++ b/apps/contacts/lib/search.php
@@ -0,0 +1,29 @@
+<?php
+class OC_Search_Provider_Contacts extends OC_Search_Provider{
+ function search($query){
+ $addressbooks = OC_Contacts_Addressbook::all(OC_User::getUser(), 1);
+// if(count($calendars)==0 || !OC_App::isEnabled('contacts')){
+// //return false;
+// }
+ // NOTE: Does the following do anything
+ $results=array();
+ $searchquery=array();
+ if(substr_count($query, ' ') > 0){
+ $searchquery = explode(' ', $query);
+ }else{
+ $searchquery[] = $query;
+ }
+ $l = new OC_l10n('contacts');
+ foreach($addressbooks as $addressbook){
+ $vcards = OC_Contacts_VCard::all($addressbook['id']);
+ foreach($vcards as $vcard){
+ if(substr_count(strtolower($vcard['fullname']), strtolower($query)) > 0){
+ $link = OC_Helper::linkTo('apps/contacts', 'index.php?id='.urlencode($vcard['id']));
+ $results[]=new OC_Search_Result($vcard['fullname'],'', $link,$l->t('Contact'));//$name,$text,$link,$type
+ }
+ }
+ }
+ return $results;
+ }
+}
+new OC_Search_Provider_Contacts();
diff --git a/apps/contacts/lib/vcard.php b/apps/contacts/lib/vcard.php
index beb291b481e..04b59a040fb 100644
--- a/apps/contacts/lib/vcard.php
+++ b/apps/contacts/lib/vcard.php
@@ -111,16 +111,29 @@ class OC_Contacts_VCard{
if(is_null($uid)){
$card->setUID();
$uid = $card->getAsString('UID');
- $data = $card->serialize();
+ //$data = $card->serialize();
};
$uri = $uid.'.vcf';
+
+ // Add product ID.
+ $prodid = trim($card->getAsString('PRODID'));
+ if(!$prodid) {
+ $appinfo = $info=OC_App::getAppInfo('contacts');
+ $prodid = 'PRODID:-//ownCloud//NONSGML '.$appinfo['name'].' '.$appinfo['version'].'//EN';
+ $card->setString('PRODID', $prodid);
+ }
// VCARD must have a version
$version = $card->getAsString('VERSION');
// Add version if needed
- if(is_null($version)){
+ if(!$version){
$card->add(new Sabre_VObject_Property('VERSION','3.0'));
- $data = $card->serialize();
- }
+ //$data = $card->serialize();
+ }/* else {
+ OC_Log::write('contacts','OC_Contacts_VCard::add. Version already set as: '.$version,OC_Log::DEBUG);
+ }*/
+ $now = new DateTime;
+ $card->setString('REV', $now->format(DateTime::W3C));
+ $data = $card->serialize();
}
else{
// that's hard. Creating a UID and not saving it
@@ -130,10 +143,11 @@ class OC_Contacts_VCard{
$stmt = OC_DB::prepare( 'INSERT INTO *PREFIX*contacts_cards (addressbookid,fullname,carddata,uri,lastmodified) VALUES(?,?,?,?,?)' );
$result = $stmt->execute(array($id,$fn,$data,$uri,time()));
+ $newid = OC_DB::insertid('*PREFIX*contacts_cards');
OC_Contacts_Addressbook::touch($id);
- return OC_DB::insertid('*PREFIX*contacts_cards');
+ return $newid;
}
/**
@@ -150,6 +164,7 @@ class OC_Contacts_VCard{
foreach($card->children as $property){
if($property->name == 'FN'){
$fn = $property->value;
+ break;
}
}
}
@@ -177,9 +192,15 @@ class OC_Contacts_VCard{
foreach($card->children as $property){
if($property->name == 'FN'){
$fn = $property->value;
+ break;
}
}
+ } else {
+ return false;
}
+ $now = new DateTime;
+ $card->setString('REV', $now->format(DateTime::W3C));
+ $data = $card->serialize();
$stmt = OC_DB::prepare( 'UPDATE *PREFIX*contacts_cards SET fullname = ?,carddata = ?, lastmodified = ? WHERE id = ?' );
$result = $stmt->execute(array($fn,$data,time(),$id));
@@ -205,9 +226,13 @@ class OC_Contacts_VCard{
foreach($card->children as $property){
if($property->name == 'FN'){
$fn = $property->value;
+ break;
}
}
}
+ $now = new DateTime;
+ $card->setString('REV', $now->format(DateTime::W3C));
+ $data = $card->serialize();
$stmt = OC_DB::prepare( 'UPDATE *PREFIX*contacts_cards SET fullname = ?,carddata = ?, lastmodified = ? WHERE id = ?' );
$result = $stmt->execute(array($fn,$data,time(),$oldcard['id']));
@@ -223,6 +248,7 @@ class OC_Contacts_VCard{
* @return boolean
*/
public static function delete($id){
+ // FIXME: Add error checking.
$stmt = OC_DB::prepare( 'DELETE FROM *PREFIX*contacts_cards WHERE id = ?' );
$stmt->execute(array($id));
@@ -244,6 +270,7 @@ class OC_Contacts_VCard{
* @return boolean
*/
public static function deleteFromDAVData($aid,$uri){
+ // FIXME: Add error checking. Deleting a card gives an Kontact/Akonadi error.
$stmt = OC_DB::prepare( 'DELETE FROM *PREFIX*contacts_cards WHERE addressbookid = ? AND uri=?' );
$stmt->execute(array($aid,$uri));
diff --git a/apps/contacts/templates/index.php b/apps/contacts/templates/index.php
index 90143f25fa6..5d9c312712f 100644
--- a/apps/contacts/templates/index.php
+++ b/apps/contacts/templates/index.php
@@ -1,17 +1,10 @@
-<?php // Include Style and Script
-//OC_Util::addScript('contacts','interface'); // this line caused entry duplication, cause contacts/index.php already inlcudes it
-OC_Util::addScript('contacts','jquery.inview');
-OC_Util::addStyle('contacts','styles');
-OC_Util::addStyle('contacts','formtastic');
-?>
-
<script type='text/javascript'>
var totalurl = '<?php echo OC_Helper::linkTo('contacts', 'carddav.php', null, true); ?>/addressbooks';
</script>
<div id="controls">
<form>
<input type="button" id="contacts_newcontact" value="<?php echo $l->t('Add Contact'); ?>">
- <input type="button" id="chooseaddressbook" value="<?php echo $l->t('Address Books'); ?>">
+ <input type="button" id="chooseaddressbook" value="<?php echo $l->t('Addressbooks'); ?>">
</form>
</div>
<div id="leftcontent" class="leftcontent">
@@ -31,7 +24,4 @@ OC_Util::addStyle('contacts','formtastic');
</div>
<!-- Dialogs -->
<div id="dialog_holder"></div>
-<div id="parsingfail_dialog" title="Parsing Fail">
- <?php echo $l->t("There was a fail, while parsing the file."); ?>
-</div>
<!-- End of Dialogs -->
diff --git a/apps/contacts/templates/part.addcardform.php b/apps/contacts/templates/part.addcardform.php
index 627053547ad..53b32188ddf 100644
--- a/apps/contacts/templates/part.addcardform.php
+++ b/apps/contacts/templates/part.addcardform.php
@@ -3,99 +3,108 @@
<input type="hidden" name="id" value="<?php echo $_['addressbooks'][0]['id']; ?>">
<?php else: ?>
<fieldset class="inputs">
- <ol>
- <li class="input stringish">
- <label class="label" for="id"><?php echo $l->t('Group'); ?></label>
+ <dl class="form">
+ <dt>
+ <label class="label" for="id"><?php echo $l->t('Addressbook'); ?></label>
+ </dt>
+ <dd>
<select name="id" size="1">
<?php echo html_select_options($_['addressbooks'], null, array('value'=>'id', 'label'=>'displayname')); ?>
</select>
- </li>
- </ol>
+ </dd>
+ </dl>
</fieldset>
<?php endif; ?>
<fieldset class="inputs">
- <ol>
- <li class="input stringish">
+ <dl class="form">
+ <dt>
<label class="label" for="fn"><?php echo $l->t('Name'); ?></label>
+ </dd>
+ <dd>
<input id="fn" type="text" name="fn" value=""><br>
- </li>
- <li class="input stringish">
+ </dd>
+ <dt>
<label class="label" for="org"><?php echo $l->t('Organization'); ?></label>
+ </dt>
+ <dd>
<input id="org" type="text" name="value[ORG]" value="">
- </li>
- </ol>
+ </dd>
+ </dl>
</fieldset>
<fieldset class="inputs">
- <ol>
- <li class="input stringish">
+ <dl class="form">
+ <dt>
<label class="label" for="email"><?php echo $l->t('Email'); ?></label>
+ </dt>
+ <dd>
<input id="email" type="text" name="value[EMAIL]" value="">
- </li>
- <li class="input">
- <fieldset class="fragments">
- <legend class="label">
- <label for="tel"><?php echo $l->t('Telephone'); ?></label>
- </legend>
- <ol class="fragments-group">
- <li class="fragment">
- <label for="tel"><?php echo $l->t('Number'); ?></label>
- <input type="phone" id="tel" name="value[TEL]" value="">
- </li>
- <li class="fragment">
- <label for="tel_type"><?php echo $l->t('Type'); ?></label>
- <select id="TEL" name="parameters[TEL][TYPE][]" multiple="multiple">
- <?php echo html_select_options($_['phone_types'], 'CELL') ?>
- </select>
- </li>
- </ol>
- </fieldset>
- </li>
- </ol>
+ </dd>
+ <dt>
+ <label for="tel"><?php echo $l->t('Telephone'); ?></label>
+ </dt>
+ <dd>
+ <input type="phone" id="tel" name="value[TEL]" value="">
+ <select id="TEL" name="parameters[TEL][TYPE][]" multiple="multiple">
+ <?php echo html_select_options($_['phone_types'], 'CELL') ?>
+ </select>
+ </dd>
+ </dl>
</fieldset>
<fieldset class="inputs">
<legend><?php echo $l->t('Address'); ?></legend>
- <ol>
- <li class="input">
+ <dl class="form">
+ <dt>
<label class="label" for="adr_type"><?php echo $l->t('Type'); ?></label>
+ </dt>
+ <dd>
<select id="adr_type" name="parameters[ADR][TYPE]" size="1">
<?php echo html_select_options($_['adr_types'], 'HOME') ?>
</select>
- </li>
- <li class="input stringish">
+ </dd>
+ <dt>
<label class="label" for="adr_pobox"><?php echo $l->t('PO Box'); ?></label>
+ </dt>
+ <dd>
<input type="text" id="adr_pobox" name="value[ADR][0]" value="">
- </li>
- <li class="input stringish">
+ </dd>
+ <dd>
+ <dt>
<label class="label" for="adr_extended"><?php echo $l->t('Extended'); ?></label>
+ </dt>
+ <dd>
<input type="text" id="adr_extended" name="value[ADR][1]" value="">
- </li>
- <li class="input stringish">
+ </dd>
+ <dt>
<label class="label" for="adr_street"><?php echo $l->t('Street'); ?></label>
+ </dt>
+ <dd>
<input type="text" id="adr_street" name="value[ADR][2]" value="">
- </li>
- <li class="input stringish">
+ </dd>
+ <dt>
<label class="label" for="adr_city"><?php echo $l->t('City'); ?></label>
+ </dt>
+ <dd>
<input type="text" id="adr_city" name="value[ADR][3]" value="">
- </li>
- <li class="input stringish">
+ </dd>
+ <dt>
<label class="label" for="adr_region"><?php echo $l->t('Region'); ?></label>
+ </dt>
+ <dd>
<input type="text" id="adr_region" name="value[ADR][4]" value="">
- </li>
- <li class="input stringish">
+ </dd>
+ <dt>
<label class="label" for="adr_zipcode"><?php echo $l->t('Zipcode'); ?></label>
+ </dtl>
+ <dd>
<input type="text" id="adr_zipcode" name="value[ADR][5]" value="">
- </li>
- <li class="input stringish">
+ </dd>
+ <dt>
<label class="label" for="adr_country"><?php echo $l->t('Country'); ?></label>
+ </dt>
+ <dd>
<input type="text" id="adr_country" name="value[ADR][6]" value="">
- </li>
- </ol>
- </fieldset>
- <fieldset class="buttons">
- <ol>
- <li class="commit button">
- <input class="create" type="submit" name="submit" value="<?php echo $l->t('Create Contact'); ?>">
- </li>
- </ol>
+ </dd>
+ </dl>
</fieldset>
+ <input class="create" type="submit" name="submit" value="<?php echo $l->t('Create Contact'); ?>">
</form>
diff --git a/apps/contacts/templates/part.chooseaddressbook.rowfields.php b/apps/contacts/templates/part.chooseaddressbook.rowfields.php
index f612e39ecaf..0cbfe2bf803 100644
--- a/apps/contacts/templates/part.chooseaddressbook.rowfields.php
+++ b/apps/contacts/templates/part.chooseaddressbook.rowfields.php
@@ -1,5 +1,5 @@
<?php
-
+ // FIXME: Make this readable.
echo "<td width=\"20px\"><input id=\"active_" . $_['addressbook']["id"] . "\" type=\"checkbox\" onClick=\"Contacts.UI.Addressbooks.activation(this, " . $_['addressbook']["id"] . ")\"" . (OC_Contacts_Addressbook::isActive($_['addressbook']["id"]) ? ' checked="checked"' : '') . "></td>";
echo "<td><label for=\"active_" . $_['addressbook']["id"] . "\">" . $_['addressbook']["displayname"] . "</label></td>";
echo "<td width=\"20px\"><a href=\"#\" onclick=\"Contacts.UI.showCardDAVUrl('" . OC_User::getUser() . "', '" . $_['addressbook']["uri"] . "');\" title=\"" . $l->t("CardDav Link") . "\" class=\"action\"><img class=\"svg action\" src=\"../../core/img/actions/public.svg\"></a></td><td width=\"20px\"><a href=\"export.php?bookid=" . $_['addressbook']["id"] . "\" title=\"" . $l->t("Download") . "\" class=\"action\"><img class=\"svg action\" src=\"../../core/img/actions/download.svg\"></a></td><td width=\"20px\"><a href=\"#\" title=\"" . $l->t("Edit") . "\" class=\"action\" onclick=\"Contacts.UI.Addressbooks.editAddressbook(this, " . $_['addressbook']["id"] . ");\"><img class=\"svg action\" src=\"../../core/img/actions/rename.svg\"></a></td><td width=\"20px\"><a href=\"#\" onclick=\"Contacts.UI.Addressbooks.deleteAddressbook('" . $_['addressbook']["id"] . "');\" title=\"" . $l->t("Delete") . "\" class=\"action\"><img class=\"svg action\" src=\"../../core/img/actions/delete.svg\"></a></td>";
diff --git a/apps/contacts/templates/part.details.php b/apps/contacts/templates/part.details.php
index afad0b7f64c..679ae5ede2f 100644
--- a/apps/contacts/templates/part.details.php
+++ b/apps/contacts/templates/part.details.php
@@ -1,5 +1,6 @@
<?php if(array_key_exists('FN',$_['details'])): ?>
<?php echo $this->inc('part.property.FN', array('property' => $_['details']['FN'][0])); ?>
+ <a href="export.php?contactid=<?php echo $_['id']; ?>"><img class="svg action" id="contacts_downloadcard" src="<?php echo image_path('', 'actions/download.svg'); ?>" title="<?php echo $l->t('Download contact');?>" /></a>
<img class="svg action" id="contacts_deletecard" src="<?php echo image_path('', 'actions/delete.svg'); ?>" title="<?php echo $l->t('Delete contact');?>" />
<?php if(isset($_['details']['PHOTO'])): // Emails first ?>
@@ -86,3 +87,9 @@
</li>
</ul>
<?php endif; ?>
+<script language="Javascript">
+/* Re-tipsify ;-)*/
+ $('#contacts_deletecard').tipsy({gravity: 'ne'});
+ $('#contacts_downloadcard').tipsy({gravity: 'ne'});
+ $('.button').tipsy();
+</script>
diff --git a/apps/contacts/templates/part.editaddressbook.php b/apps/contacts/templates/part.editaddressbook.php
index cb1371731b1..48fe5c3b378 100644
--- a/apps/contacts/templates/part.editaddressbook.php
+++ b/apps/contacts/templates/part.editaddressbook.php
@@ -6,7 +6,7 @@
* See the COPYING-README file.
*/
?>
-<td id="<?php echo $_['new'] ? 'new' : 'edit' ?>addressbook_dialog" title="<?php echo $_['new'] ? $l->t("New Address Book") : $l->t("Edit Address Book"); ?>" colspan="6">
+<td id="<?php echo $_['new'] ? 'new' : 'edit' ?>addressbook_dialog" title="<?php echo $_['new'] ? $l->t("New Addressbook") : $l->t("Edit Addressbook"); ?>" colspan="6">
<table width="100%" style="border: 0;">
<tr>
<th><?php echo $l->t('Displayname') ?></th>
diff --git a/apps/contacts/templates/part.messagebox.php b/apps/contacts/templates/part.messagebox.php
new file mode 100644
index 00000000000..3681bb6e3f3
--- /dev/null
+++ b/apps/contacts/templates/part.messagebox.php
@@ -0,0 +1,7 @@
+<div id="messagebox">
+<table width="100%" style="border: 0;">
+<tr>
+ <th id="messagebox_msg"></th>
+</tr>
+</table>
+</di>
diff --git a/apps/contacts/templates/part.property.php b/apps/contacts/templates/part.property.php
index d930a9ca99d..e4010397500 100644
--- a/apps/contacts/templates/part.property.php
+++ b/apps/contacts/templates/part.property.php
@@ -25,15 +25,14 @@
<?php echo $_['property']['value']; ?>
<?php if(isset($_['property']['parameters']['TYPE']) && !empty($_['property']['parameters']['TYPE'])): ?>
<?php
- $types = array();
- foreach($_['property']['parameters']['TYPE'] as $type):
+ foreach($_['property']['parameters']['TYPE'] as $type) {
if (isset($_['phone_types'][strtoupper($type)])){
$types[]=$_['phone_types'][strtoupper($type)];
}
else{
$types[]=$l->t(ucwords(strtolower($type)));
}
- endforeach;
+ }
$label = join(' ', $types);
?>
(<?php echo $label; ?>)
diff --git a/apps/contacts/templates/part.setpropertyform.php b/apps/contacts/templates/part.setpropertyform.php
index 8635d7db1ce..3e0b8d49b52 100644
--- a/apps/contacts/templates/part.setpropertyform.php
+++ b/apps/contacts/templates/part.setpropertyform.php
@@ -45,7 +45,7 @@
<p class="contacts_property_name"><label for="tel"><?php echo $l->t('Phone'); ?></label></p>
<p class="contacts_property_data"><input id="tel" type="phone" name="value" value="<?php echo $_['property']['value'] ?>">
<select id="tel_type<?php echo $_['property']['checksum'] ?>" name="parameters[TYPE][]" multiple="multiple" data-placeholder="<?php echo $l->t('Type') ?>">
- <?php echo html_select_options($_['phone_types'], isset($_['property']['parameters']['TYPE'])?$_['property']['parameters']['TYPE']:'') ?>
+ <?php echo html_select_options($_['phone_types'], isset($_['property']['parameters']['TYPE'])?$_['property']['parameters']['TYPE']:array()) ?>
</select></p>
<?php elseif($_['property']['name']=='EMAIL'): ?>
<p class="contacts_property_name"><label for="email"><?php echo $l->t('Email'); ?></label></p>
diff --git a/apps/contacts/templates/settings.php b/apps/contacts/templates/settings.php
index d9130625200..c647e44c25b 100644
--- a/apps/contacts/templates/settings.php
+++ b/apps/contacts/templates/settings.php
@@ -1,7 +1,7 @@
<form id="mediaform">
<fieldset class="personalblock">
- <strong>Contacts</strong><br />
- CardDAV syncing address:
+ <strong><?php echo $l->t('Contacts'); ?></strong><br />
+ <?php echo $l->t('CardDAV syncing address:'); ?>
<?php echo OC_Helper::linkTo('apps/contacts', 'carddav.php', null, true); ?><br />
</fieldset>
</form>
diff --git a/apps/contacts/thumbnail.php b/apps/contacts/thumbnail.php
index bf0a6e96a5d..e49098ce820 100644
--- a/apps/contacts/thumbnail.php
+++ b/apps/contacts/thumbnail.php
@@ -2,8 +2,8 @@
/**
* ownCloud - Addressbook
*
- * @author Jakob Sack
- * @copyright 2011 Jakob Sack mail@jakobsack.de
+ * @author Thomas Tanghus
+ * @copyright 2011-2012 Thomas Tanghus <thomas@tanghus.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
@@ -26,7 +26,7 @@ OC_Util::checkLoggedIn();
OC_Util::checkAppEnabled('contacts');
if(!function_exists('imagecreatefromjpeg')) {
- OC_Log::write('contacts','GD module not installed',OC_Log::ERROR);
+ OC_Log::write('contacts','thumbnail.php. GD module not installed',OC_Log::DEBUG);
header('Content-Type: image/png');
// TODO: Check if it works to read the file and echo the content.
return 'img/person.png';
@@ -46,13 +46,15 @@ $l10n = new OC_L10N('contacts');
$card = OC_Contacts_VCard::find( $id );
if( $card === false ){
- echo $l10n->t('Contact could not be found.');
+ OC_Log::write('contacts','thumbnail.php. Contact could not be found: '.$id,OC_Log::ERROR);
+ getStandardImage();
exit();
}
+// FIXME: Is this check necessary? It just takes up CPU time.
$addressbook = OC_Contacts_Addressbook::find( $card['addressbookid'] );
if( $addressbook === false || $addressbook['userid'] != OC_USER::getUser()){
- echo $l10n->t('This is not your contact.'); // This is a weird error, why would it come up? (Better feedback for users?)
+ OC_Log::write('contacts','thumbnail.php. Wrong contact/addressbook - WTF?',OC_Log::ERROR);
exit();
}
@@ -60,17 +62,14 @@ $content = OC_VObject::parse($card['carddata']);
// invalid vcard
if( is_null($content)){
- echo $l10n->t('This card is not RFC compatible.');
+ OC_Log::write('contacts','thumbnail.php. The VCard for ID '.$id.' is not RFC compatible',OC_Log::ERROR);
+ getStandardImage();
exit();
}
-// define the width and height for the thumbnail
-// note that theese dimmensions are considered the maximum dimmension and are not fixed,
-// because we have to keep the image ratio intact or it will be deformed
-$thumbnail_width = 23;
-$thumbnail_height = 23;
+$thumbnail_size = 23;
-// Photo :-)
+// Finf the photo from VCard.
foreach($content->children as $child){
if($child->name == 'PHOTO'){
foreach($child->parameters as $parameter){
@@ -78,73 +77,31 @@ foreach($content->children as $child){
$mime = $parameter->value;
}
}
- $data = base64_decode($child->value);
- $src_img = imagecreatefromstring($data);
- if ($src_img !== false) {
- //gets the dimmensions of the image
- $width_orig=imageSX($src_img);
- $height_orig=imageSY($src_img);
- $ratio_orig = $width_orig/$height_orig;
-
- if ($thumbnail_width/$thumbnail_height > $ratio_orig) {
- $new_height = $thumbnail_width/$ratio_orig;
- $new_width = $thumbnail_width;
- } else {
- $new_width = $thumbnail_height*$ratio_orig;
- $new_height = $thumbnail_height;
- }
-
- $x_mid = $new_width/2; //horizontal middle
- $y_mid = $new_height/2; //vertical middle
-
- $process = imagecreatetruecolor(round($new_width), round($new_height));
- if ($process == false) {
- getStandardImage();
- //echo 'Error creating process image: '.$new_width.'x'.$new_height;
- OC_Log::write('contacts','Error creating process image for '.$id.' '.$new_width.'x'.$new_height,OC_Log::ERROR);
- imagedestroy($process);
- imagedestroy($src_img);
- exit();
- }
-
- imagecopyresampled($process, $src_img, 0, 0, 0, 0, $new_width, $new_height, $width_orig, $height_orig);
- if ($process == false) {
- getStandardImage();
- //echo 'Error resampling process image: '.$new_width.'x'.$new_height;
- OC_Log::write('contacts','Error resampling process image for '.$id.' '.$new_width.'x'.$new_height,OC_Log::ERROR);
- imagedestroy($process);
- imagedestroy($src_img);
- exit();
- }
- $thumb = imagecreatetruecolor($thumbnail_width, $thumbnail_height);
- if ($process == false) {
+ $image = new OC_Image();
+ if($image->loadFromBase64($child->value)) {
+ if($image->centerCrop()) {
+ if($image->resize($thumbnail_size)) {
+ if(!$image()) {
+ OC_Log::write('contacts','thumbnail.php. Couldn\'t display thumbnail for ID '.$id,OC_Log::ERROR);
+ getStandardImage();
+ exit();
+ }
+ } else {
+ OC_Log::write('contacts','thumbnail.php. Couldn\'t resize thumbnail for ID '.$id,OC_Log::ERROR);
+ getStandardImage();
+ exit();
+ }
+ }else{
+ OC_Log::write('contacts','thumbnail.php. Couldn\'t crop thumbnail for ID '.$id,OC_Log::ERROR);
getStandardImage();
- //echo 'Error creating thumb image: '.$thumbnail_width.'x'.$thumbnail_height;
- OC_Log::write('contacts','Error creating thumb image for '.$id.' '.$thumbnail_width.'x'.$thumbnail_height,OC_Log::ERROR);
- imagedestroy($process);
- imagedestroy($src_img);
exit();
}
- imagecopyresampled($thumb, $process, 0, 0, ($x_mid-($thumbnail_width/2)), ($y_mid-($thumbnail_height/2)), $thumbnail_width, $thumbnail_height, $thumbnail_width, $thumbnail_height);
- if ($thumb !== false) {
- header('Content-Type: image/png');
- imagepng($thumb);
- } else {
- getStandardImage();
- OC_Log::write('contacts','Error resampling thumb image for '.$id.' '.$thumbnail_width.'x'.$thumbnail_height,OC_Log::ERROR);
- //echo 'An error occurred resampling thumb.';
- }
- imagedestroy($thumb);
- imagedestroy($process);
- imagedestroy($src_img);
- }
- else {
+ } else {
+ OC_Log::write('contacts','thumbnail.php. Couldn\'t load image string for ID '.$id,OC_Log::ERROR);
getStandardImage();
+ exit();
}
exit();
}
}
getStandardImage();
-
-// Not found :-(
-//echo $l10n->t('This card does not contain a photo.');
diff --git a/apps/files_pdfviewer/appinfo/app.php b/apps/files_pdfviewer/appinfo/app.php
index a446b4caa41..0f0b40764d9 100755
--- a/apps/files_pdfviewer/appinfo/app.php
+++ b/apps/files_pdfviewer/appinfo/app.php
@@ -1,7 +1,5 @@
<?php
//load the required files
-//OC_Util::addStyle( 'files_texteditor', 'style' );
-//OC_Util::addScript( 'files_texteditor', 'editor');
OC_Util::addScript( 'files_pdfviewer', 'viewer');
OC_Util::addStyle( 'files_pdfviewer', 'viewer');
OC_Util::addScript( 'files_pdfviewer', 'pdfjs/build/pdf');
diff --git a/apps/files_pdfviewer/css/style.css b/apps/files_pdfviewer/css/style.css
deleted file mode 100755
index 9ad6eeaa814..00000000000
--- a/apps/files_pdfviewer/css/style.css
+++ /dev/null
@@ -1,27 +0,0 @@
-#editor{
- position: absoloute;
- display: block;
- top: 80px;
- left: 160px;
-}
-#editorwrapper{
- position: absoloute;
- height: 0;
- width: 0;
- top: 41px;
- left: 160px;
- display: none;
-}
-#editor_close{
- margin-left: auto;
- margin-right: 167px;
- display: block;
-}
-#editor_save{
- margin-left: 7px;
- float: left;
-}
-#saving_icon{
- margin-top: 3px;
- float: left;
-} \ No newline at end of file
diff --git a/apps/files_pdfviewer/css/viewer.css b/apps/files_pdfviewer/css/viewer.css
index cbab9e70dc2..b735dbfedfc 100755
--- a/apps/files_pdfviewer/css/viewer.css
+++ b/apps/files_pdfviewer/css/viewer.css
@@ -13,15 +13,6 @@
display: none;
}
-.separator {
- display: inline;
- border-left: 1px solid #d3d3d3;
- border-right: 1px solid #fff;
- height: 10px;
- width:0px;
- margin: 4px;
-}
-
#controls2 > a > img {
margin: 4px;
height: 10px;
diff --git a/apps/files_pdfviewer/js/pdfview.js b/apps/files_pdfviewer/js/pdfview.js
index 5e546fd5580..51f6e169f72 100755
--- a/apps/files_pdfviewer/js/pdfview.js
+++ b/apps/files_pdfviewer/js/pdfview.js
@@ -31,6 +31,7 @@ var cache = new Cache(kCacheSize);
var currentPageNumber = 1;
var PDFView = {
+ active: false,
pages: [],
thumbnails: [],
currentScale: kDefaultScale,
@@ -146,6 +147,9 @@ var PDFView = {
navigateTo: function pdfViewNavigateTo(dest) {
if (typeof dest === 'string')
+ if(!this.destinations || ! this.destinations[dest]){
+ return; // invalid destination
+ }
dest = this.destinations[dest];
if (!(dest instanceof Array))
return; // invalid destination
@@ -628,10 +632,16 @@ function updateViewarea() {
}
window.addEventListener('scroll', function webViewerScroll(evt) {
+ if(!PDFView.active){
+ return;
+ }
updateViewarea();
}, true);
window.addEventListener('resize', function webViewerResize(evt) {
+ if(!PDFView.active){
+ return;
+ }
if (document.getElementById('pageWidthOption').selected ||
document.getElementById('pageFitOption').selected)
PDFView.parseScale(document.getElementById('scaleSelect').value);
@@ -639,10 +649,16 @@ window.addEventListener('resize', function webViewerResize(evt) {
});
window.addEventListener('hashchange', function webViewerHashchange(evt) {
+ if(!PDFView.active){
+ return;
+ }
PDFView.setHash(document.location.hash.substring(1));
});
window.addEventListener('change', function webViewerChange(evt) {
+ if(!PDFView.active){
+ return;
+ }
var files = evt.target.files;
if (!files || files.length == 0)
return;
@@ -671,6 +687,9 @@ window.addEventListener('change', function webViewerChange(evt) {
}, true);
window.addEventListener('scalechange', function scalechange(evt) {
+ if(!PDFView.active){
+ return;
+ }
var customScaleOption = document.getElementById('customScaleOption');
customScaleOption.selected = false;
@@ -703,6 +722,9 @@ window.addEventListener('scalechange', function scalechange(evt) {
}, true);
window.addEventListener('pagechange', function pagechange(evt) {
+ if(!PDFView.active){
+ return;
+ }
var page = evt.pageNumber;
if (document.getElementById('pageNumber').value != page)
document.getElementById('pageNumber').value = page;
@@ -711,6 +733,9 @@ window.addEventListener('pagechange', function pagechange(evt) {
}, true);
window.addEventListener('keydown', function keydown(evt) {
+ if(!PDFView.active){
+ return;
+ }
var curElement = document.activeElement;
var controlsElement = document.getElementById('controls2');
while (curElement) {
diff --git a/apps/files_pdfviewer/js/viewer.js b/apps/files_pdfviewer/js/viewer.js
index 314a08b27e6..7f6766c67dd 100755
--- a/apps/files_pdfviewer/js/viewer.js
+++ b/apps/files_pdfviewer/js/viewer.js
@@ -4,7 +4,10 @@ function hidePDFviewer() {
$('#controls').html(showPDFviewer.oldcode);
$("#viewer").remove();
$("#loading").remove()
+ $("#editor").show();
document.title = showPDFviewer.lastTitle;
+ PDFView.active=false;
+ $('iframe').remove();
}
function showPDFviewer(dir,filename){
@@ -21,8 +24,21 @@ function showPDFviewer(dir,filename){
var oldcontent = $("#content").html();
$("#content").html(oldcontent+'<div id="loading">Loading... 0%</div><div id="viewer"></div>');
showPDFviewer.lastTitle = document.title;
- PDFView.Ptitle = filename;
- PDFView.open(url,1.00);
+ if(!showPDFviewer.loaded){
+ OC.addScript( 'files_pdfviewer', 'pdfjs/build/pdf',function(){
+ OC.addScript( 'files_pdfviewer', 'pdfview',function(){
+ showPDFviewer.loaded=true;
+ PDFJS.workerSrc = OC.filePath('files_pdfviewer','js','pdfjs/build/pdf.js');
+ PDFView.Ptitle = filename;
+ PDFView.open(url,1.00);
+ PDFView.active=true;
+ });
+ });
+ }else{
+ PDFView.Ptitle = filename;
+ PDFView.open(url,1.00);
+ PDFView.active=true;
+ }
$("#pageWidthOption").attr("selected","selected");
showPDFviewer.shown = true;
}
@@ -30,8 +46,7 @@ function showPDFviewer(dir,filename){
showPDFviewer.shown=false;
showPDFviewer.oldCode='';
showPDFviewer.lastTitle='';
-
-var extrahtml = '<li id="extra" style="display:none;"><a title="" href="'+OC.webroot+"/apps/files_pdfviewer/lastopened.php"+'" style="background-image:url(/owncloud/apps/files_pdfviewer/css/history.png)">Last opened</a></li>';
+showPDFviewer.loaded=false;
$(document).ready(function(){
if(location.href.indexOf("files")!=-1) {
diff --git a/apps/files_texteditor/ajax/loadfile.php b/apps/files_texteditor/ajax/loadfile.php
index b06b0fa83d2..64e016be8c2 100644
--- a/apps/files_texteditor/ajax/loadfile.php
+++ b/apps/files_texteditor/ajax/loadfile.php
@@ -28,13 +28,23 @@ require_once('../../../lib/base.php');
OC_JSON::checkLoggedIn();
// Set the session key for the file we are about to edit.
-$path = isset($_GET['path']) ? $_GET['path'] : false;
-
-if($path){
- $sessionname = md5('oc_file_hash_'.$path);
- $filecontents = OC_Filesystem::file_get_contents($path);
- OC_Filesystem::update_session_file_hash($sessionname,sha1(htmlspecialchars($filecontents)));
- OC_JSON::success();
+$dir = isset($_GET['dir']) ? $_GET['dir'] : '';
+$filename = isset($_GET['file']) ? $_GET['file'] : '';
+if(!empty($filename))
+{
+ $path = $dir.'/'.$filename;
+ if(OC_Filesystem::is_writeable($path))
+ {
+ $mtime = OC_Filesystem::filemtime($path);
+ $filecontents = OC_Filesystem::file_get_contents($path);
+ OC_JSON::success(array('data' => array('filecontents' => $filecontents, 'write' => 'true', 'mtime' => $mtime)));
+ }
+ else
+ {
+ $mtime = OC_Filesystem::filemtime($path);
+ $filecontents = OC_Filesystem::file_get_contents($path);
+ OC_JSON::success(array('data' => array('filecontents' => $filecontents, 'write' => 'false', 'mtime' => $mtime)));
+ }
} else {
- OC_JSON::error();
-} \ No newline at end of file
+ OC_JSON::error(array('data' => array( 'message' => 'Invalid file path supplied.')));
+} \ No newline at end of file
diff --git a/apps/files_texteditor/ajax/mtime.php b/apps/files_texteditor/ajax/mtime.php
new file mode 100644
index 00000000000..df90a68ca7a
--- /dev/null
+++ b/apps/files_texteditor/ajax/mtime.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * ownCloud - files_texteditor
+ *
+ * @author Tom Needham
+ * @copyright 2011 Tom Needham contact@tomneedham.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or 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 AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+// Init owncloud
+require_once('../../../lib/base.php');
+
+
+// Check if we are a user
+OC_JSON::checkLoggedIn();
+
+// Get the path from GET
+$path = isset($_GEt['path']) ? $_GET['path'] : '';
+
+if($path != '')
+{
+ // Find the mtime
+ $mtime = OC_Filesystem::filemtime($path);
+ if($mtime)
+ {
+ OC_JSON::success(array('data' => array('path' => $path, 'mtime' => $mtime)));
+ }
+ else
+ {
+ OC_JSON::error();
+ }
+}
+else
+{
+ OC_JSON::error();
+} \ No newline at end of file
diff --git a/apps/files_texteditor/ajax/savefile.php b/apps/files_texteditor/ajax/savefile.php
index a9777eb4133..846159c13b7 100644
--- a/apps/files_texteditor/ajax/savefile.php
+++ b/apps/files_texteditor/ajax/savefile.php
@@ -27,47 +27,42 @@ require_once('../../../lib/base.php');
// Check if we are a user
OC_JSON::checkLoggedIn();
-// Save the file data
+// Get paramteres
$filecontents = htmlspecialchars_decode($_POST['filecontents']);
-$file = $_POST['file'];
-$dir = $_POST['dir'];
-$path = $dir.'/'.$file;
-$force = isset($_POST['force']) ? $_POST['force'] : false;
-$sessionname = sha1('oc_file_hash_'.$path);
+$path = isset($_POST['path']) ? $_POST['path'] : '';
+$mtime = isset($_POST['mtime']) ? $_POST['mtime'] : '';
-function do_save($path,$filecontents){
- $sessionname = md5('oc_file_hash_'.$path);
- $_SESSION[$sessionname] = sha1(htmlspecialchars($filecontents));
- OC_Filesystem::file_put_contents($path, $filecontents);
-}
-
-// Check if file modified whilst editing?
-if(isset($_SESSION[$sessionname])){
- if(!empty($_SESSION[$sessionname])){
- // Compare to current hash of file.
- $savedfilecontents = htmlspecialchars(OC_Filesystem::file_get_contents($path));
- $hash = md5($savedfilecontents);
- $originalhash = $_SESSION[$sessionname];
- // Compare with hash taken when file was opened
- if($hash != $originalhash){
- // Someone has played with the file while you were editing
- // Force save?
- if($force){
- do_save($path, $filecontents);
- OC_JSON::success();
- } else {
- // No force
- OC_JSON::error(array('data' => array( 'message' => $l10n->t('The file has been edited since you opened it. Overwrite the file?'))));
- }
- } else {
- // No body has edited it whilst you were, so save the file
- // Update the session hash.
- do_save($path,$filecontents);
- OC_JSON::success();
- }
+if($path != '' && $mtime != '')
+{
+ // Get file mtime
+ $filemtime = OC_Filesystem::filemtime($path);
+ if($mtime != $filemtime)
+ {
+ // Then the file has changed since opening
+ OC_JSON::error();
+ OC_Log::write('files_texteditor',"File: ".$path." modified since opening.",OC_Log::ERROR);
+ }
+ else
+ {
+ // File same as when opened
+ // Save file
+ if(OC_Filesystem::is_writeable($path))
+ {
+ OC_Filesystem::file_put_contents($path, $filecontents);
+ // Clear statcache
+ clearstatcache();
+ // Get new mtime
+ $newmtime = OC_Filesystem::filemtime($path);
+ OC_JSON::success(array('data' => array('mtime' => $newmtime)));
+ }
+ else
+ {
+ // Not writeable!
+ OC_JSON::error(array('data' => array( 'message' => 'Insufficient permissions')));
+ OC_Log::write('files_texteditor',"User does not have permission to write to file: ".$path,OC_Log::ERROR);
+ }
}
} else {
- // No session value set for soem reason, just save the file.
- do_save($path,$filecontents);
- OC_JSON::success();
-} \ No newline at end of file
+ OC_JSON::error(array('data' => array( 'message' => 'File path or mtime not supplied')));
+ OC_Log::write('files_texteditor',"Invalid path supplied:".$path,OC_Log::ERROR);
+}
diff --git a/apps/files_texteditor/css/style.css b/apps/files_texteditor/css/style.css
index 9ad6eeaa814..cf24950232f 100644
--- a/apps/files_texteditor/css/style.css
+++ b/apps/files_texteditor/css/style.css
@@ -12,11 +12,6 @@
left: 160px;
display: none;
}
-#editor_close{
- margin-left: auto;
- margin-right: 167px;
- display: block;
-}
#editor_save{
margin-left: 7px;
float: left;
@@ -24,4 +19,7 @@
#saving_icon{
margin-top: 3px;
float: left;
-} \ No newline at end of file
+}
+#gotolineval{
+ width: 30px;
+}
diff --git a/apps/files_texteditor/js/aceeditor/LICENSE b/apps/files_texteditor/js/aceeditor/LICENSE
new file mode 100755
index 00000000000..853e4fd5a56
--- /dev/null
+++ b/apps/files_texteditor/js/aceeditor/LICENSE
@@ -0,0 +1,476 @@
+Licensed under the tri-license MPL/LGPL/GPL.
+
+ MOZILLA PUBLIC LICENSE
+ Version 1.1
+
+ ---------------
+
+1. Definitions.
+
+ 1.0.1. "Commercial Use" means distribution or otherwise making the
+ Covered Code available to a third party.
+
+ 1.1. "Contributor" means each entity that creates or contributes to
+ the creation of Modifications.
+
+ 1.2. "Contributor Version" means the combination of the Original
+ Code, prior Modifications used by a Contributor, and the Modifications
+ made by that particular Contributor.
+
+ 1.3. "Covered Code" means the Original Code or Modifications or the
+ combination of the Original Code and Modifications, in each case
+ including portions thereof.
+
+ 1.4. "Electronic Distribution Mechanism" means a mechanism generally
+ accepted in the software development community for the electronic
+ transfer of data.
+
+ 1.5. "Executable" means Covered Code in any form other than Source
+ Code.
+
+ 1.6. "Initial Developer" means the individual or entity identified
+ as the Initial Developer in the Source Code notice required by Exhibit
+ A.
+
+ 1.7. "Larger Work" means a work which combines Covered Code or
+ portions thereof with code not governed by the terms of this License.
+
+ 1.8. "License" means this document.
+
+ 1.8.1. "Licensable" means having the right to grant, to the maximum
+ extent possible, whether at the time of the initial grant or
+ subsequently acquired, any and all of the rights conveyed herein.
+
+ 1.9. "Modifications" means any addition to or deletion from the
+ substance or structure of either the Original Code or any previous
+ Modifications. When Covered Code is released as a series of files, a
+ Modification is:
+ A. Any addition to or deletion from the contents of a file
+ containing Original Code or previous Modifications.
+
+ B. Any new file that contains any part of the Original Code or
+ previous Modifications.
+
+ 1.10. "Original Code" means Source Code of computer software code
+ which is described in the Source Code notice required by Exhibit A as
+ Original Code, and which, at the time of its release under this
+ License is not already Covered Code governed by this License.
+
+ 1.10.1. "Patent Claims" means any patent claim(s), now owned or
+ hereafter acquired, including without limitation, method, process,
+ and apparatus claims, in any patent Licensable by grantor.
+
+ 1.11. "Source Code" means the preferred form of the Covered Code for
+ making modifications to it, including all modules it contains, plus
+ any associated interface definition files, scripts used to control
+ compilation and installation of an Executable, or source code
+ differential comparisons against either the Original Code or another
+ well known, available Covered Code of the Contributor's choice. The
+ Source Code can be in a compressed or archival form, provided the
+ appropriate decompression or de-archiving software is widely available
+ for no charge.
+
+ 1.12. "You" (or "Your") means an individual or a legal entity
+ exercising rights under, and complying with all of the terms of, this
+ License or a future version of this License issued under Section 6.1.
+ For legal entities, "You" includes any entity which controls, is
+ controlled by, or is under common control with You. For purposes of
+ this definition, "control" means (a) the power, direct or indirect,
+ to cause the direction or management of such entity, whether by
+ contract or otherwise, or (b) ownership of more than fifty percent
+ (50%) of the outstanding shares or beneficial ownership of such
+ entity.
+
+2. Source Code License.
+
+ 2.1. The Initial Developer Grant.
+ The Initial Developer hereby grants You a world-wide, royalty-free,
+ non-exclusive license, subject to third party intellectual property
+ claims:
+ (a) under intellectual property rights (other than patent or
+ trademark) Licensable by Initial Developer to use, reproduce,
+ modify, display, perform, sublicense and distribute the Original
+ Code (or portions thereof) with or without Modifications, and/or
+ as part of a Larger Work; and
+
+ (b) under Patents Claims infringed by the making, using or
+ selling of Original Code, to make, have made, use, practice,
+ sell, and offer for sale, and/or otherwise dispose of the
+ Original Code (or portions thereof).
+
+ (c) the licenses granted in this Section 2.1(a) and (b) are
+ effective on the date Initial Developer first distributes
+ Original Code under the terms of this License.
+
+ (d) Notwithstanding Section 2.1(b) above, no patent license is
+ granted: 1) for code that You delete from the Original Code; 2)
+ separate from the Original Code; or 3) for infringements caused
+ by: i) the modification of the Original Code or ii) the
+ combination of the Original Code with other software or devices.
+
+ 2.2. Contributor Grant.
+ Subject to third party intellectual property claims, each Contributor
+ hereby grants You a world-wide, royalty-free, non-exclusive license
+
+ (a) under intellectual property rights (other than patent or
+ trademark) Licensable by Contributor, to use, reproduce, modify,
+ display, perform, sublicense and distribute the Modifications
+ created by such Contributor (or portions thereof) either on an
+ unmodified basis, with other Modifications, as Covered Code
+ and/or as part of a Larger Work; and
+
+ (b) under Patent Claims infringed by the making, using, or
+ selling of Modifications made by that Contributor either alone
+ and/or in combination with its Contributor Version (or portions
+ of such combination), to make, use, sell, offer for sale, have
+ made, and/or otherwise dispose of: 1) Modifications made by that
+ Contributor (or portions thereof); and 2) the combination of
+ Modifications made by that Contributor with its Contributor
+ Version (or portions of such combination).
+
+ (c) the licenses granted in Sections 2.2(a) and 2.2(b) are
+ effective on the date Contributor first makes Commercial Use of
+ the Covered Code.
+
+ (d) Notwithstanding Section 2.2(b) above, no patent license is
+ granted: 1) for any code that Contributor has deleted from the
+ Contributor Version; 2) separate from the Contributor Version;
+ 3) for infringements caused by: i) third party modifications of
+ Contributor Version or ii) the combination of Modifications made
+ by that Contributor with other software (except as part of the
+ Contributor Version) or other devices; or 4) under Patent Claims
+ infringed by Covered Code in the absence of Modifications made by
+ that Contributor.
+
+3. Distribution Obligations.
+
+ 3.1. Application of License.
+ The Modifications which You create or to which You contribute are
+ governed by the terms of this License, including without limitation
+ Section 2.2. The Source Code version of Covered Code may be
+ distributed only under the terms of this License or a future version
+ of this License released under Section 6.1, and You must include a
+ copy of this License with every copy of the Source Code You
+ distribute. You may not offer or impose any terms on any Source Code
+ version that alters or restricts the applicable version of this
+ License or the recipients' rights hereunder. However, You may include
+ an additional document offering the additional rights described in
+ Section 3.5.
+
+ 3.2. Availability of Source Code.
+ Any Modification which You create or to which You contribute must be
+ made available in Source Code form under the terms of this License
+ either on the same media as an Executable version or via an accepted
+ Electronic Distribution Mechanism to anyone to whom you made an
+ Executable version available; and if made available via Electronic
+ Distribution Mechanism, must remain available for at least twelve (12)
+ months after the date it initially became available, or at least six
+ (6) months after a subsequent version of that particular Modification
+ has been made available to such recipients. You are responsible for
+ ensuring that the Source Code version remains available even if the
+ Electronic Distribution Mechanism is maintained by a third party.
+
+ 3.3. Description of Modifications.
+ You must cause all Covered Code to which You contribute to contain a
+ file documenting the changes You made to create that Covered Code and
+ the date of any change. You must include a prominent statement that
+ the Modification is derived, directly or indirectly, from Original
+ Code provided by the Initial Developer and including the name of the
+ Initial Developer in (a) the Source Code, and (b) in any notice in an
+ Executable version or related documentation in which You describe the
+ origin or ownership of the Covered Code.
+
+ 3.4. Intellectual Property Matters
+ (a) Third Party Claims.
+ If Contributor has knowledge that a license under a third party's
+ intellectual property rights is required to exercise the rights
+ granted by such Contributor under Sections 2.1 or 2.2,
+ Contributor must include a text file with the Source Code
+ distribution titled "LEGAL" which describes the claim and the
+ party making the claim in sufficient detail that a recipient will
+ know whom to contact. If Contributor obtains such knowledge after
+ the Modification is made available as described in Section 3.2,
+ Contributor shall promptly modify the LEGAL file in all copies
+ Contributor makes available thereafter and shall take other steps
+ (such as notifying appropriate mailing lists or newsgroups)
+ reasonably calculated to inform those who received the Covered
+ Code that new knowledge has been obtained.
+
+ (b) Contributor APIs.
+ If Contributor's Modifications include an application programming
+ interface and Contributor has knowledge of patent licenses which
+ are reasonably necessary to implement that API, Contributor must
+ also include this information in the LEGAL file.
+
+ (c) Representations.
+ Contributor represents that, except as disclosed pursuant to
+ Section 3.4(a) above, Contributor believes that Contributor's
+ Modifications are Contributor's original creation(s) and/or
+ Contributor has sufficient rights to grant the rights conveyed by
+ this License.
+
+ 3.5. Required Notices.
+ You must duplicate the notice in Exhibit A in each file of the Source
+ Code. If it is not possible to put such notice in a particular Source
+ Code file due to its structure, then You must include such notice in a
+ location (such as a relevant directory) where a user would be likely
+ to look for such a notice. If You created one or more Modification(s)
+ You may add your name as a Contributor to the notice described in
+ Exhibit A. You must also duplicate this License in any documentation
+ for the Source Code where You describe recipients' rights or ownership
+ rights relating to Covered Code. You may choose to offer, and to
+ charge a fee for, warranty, support, indemnity or liability
+ obligations to one or more recipients of Covered Code. However, You
+ may do so only on Your own behalf, and not on behalf of the Initial
+ Developer or any Contributor. You must make it absolutely clear than
+ any such warranty, support, indemnity or liability obligation is
+ offered by You alone, and You hereby agree to indemnify the Initial
+ Developer and every Contributor for any liability incurred by the
+ Initial Developer or such Contributor as a result of warranty,
+ support, indemnity or liability terms You offer.
+
+ 3.6. Distribution of Executable Versions.
+ You may distribute Covered Code in Executable form only if the
+ requirements of Section 3.1-3.5 have been met for that Covered Code,
+ and if You include a notice stating that the Source Code version of
+ the Covered Code is available under the terms of this License,
+ including a description of how and where You have fulfilled the
+ obligations of Section 3.2. The notice must be conspicuously included
+ in any notice in an Executable version, related documentation or
+ collateral in which You describe recipients' rights relating to the
+ Covered Code. You may distribute the Executable version of Covered
+ Code or ownership rights under a license of Your choice, which may
+ contain terms different from this License, provided that You are in
+ compliance with the terms of this License and that the license for the
+ Executable version does not attempt to limit or alter the recipient's
+ rights in the Source Code version from the rights set forth in this
+ License. If You distribute the Executable version under a different
+ license You must make it absolutely clear that any terms which differ
+ from this License are offered by You alone, not by the Initial
+ Developer or any Contributor. You hereby agree to indemnify the
+ Initial Developer and every Contributor for any liability incurred by
+ the Initial Developer or such Contributor as a result of any such
+ terms You offer.
+
+ 3.7. Larger Works.
+ You may create a Larger Work by combining Covered Code with other code
+ not governed by the terms of this License and distribute the Larger
+ Work as a single product. In such a case, You must make sure the
+ requirements of this License are fulfilled for the Covered Code.
+
+4. Inability to Comply Due to Statute or Regulation.
+
+ If it is impossible for You to comply with any of the terms of this
+ License with respect to some or all of the Covered Code due to
+ statute, judicial order, or regulation then You must: (a) comply with
+ the terms of this License to the maximum extent possible; and (b)
+ describe the limitations and the code they affect. Such description
+ must be included in the LEGAL file described in Section 3.4 and must
+ be included with all distributions of the Source Code. Except to the
+ extent prohibited by statute or regulation, such description must be
+ sufficiently detailed for a recipient of ordinary skill to be able to
+ understand it.
+
+5. Application of this License.
+
+ This License applies to code to which the Initial Developer has
+ attached the notice in Exhibit A and to related Covered Code.
+
+6. Versions of the License.
+
+ 6.1. New Versions.
+ Netscape Communications Corporation ("Netscape") may publish revised
+ and/or new versions of the License from time to time. Each version
+ will be given a distinguishing version number.
+
+ 6.2. Effect of New Versions.
+ Once Covered Code has been published under a particular version of the
+ License, You may always continue to use it under the terms of that
+ version. You may also choose to use such Covered Code under the terms
+ of any subsequent version of the License published by Netscape. No one
+ other than Netscape has the right to modify the terms applicable to
+ Covered Code created under this License.
+
+ 6.3. Derivative Works.
+ If You create or use a modified version of this License (which you may
+ only do in order to apply it to code which is not already Covered Code
+ governed by this License), You must (a) rename Your license so that
+ the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
+ "MPL", "NPL" or any confusingly similar phrase do not appear in your
+ license (except to note that your license differs from this License)
+ and (b) otherwise make it clear that Your version of the license
+ contains terms which differ from the Mozilla Public License and
+ Netscape Public License. (Filling in the name of the Initial
+ Developer, Original Code or Contributor in the notice described in
+ Exhibit A shall not of themselves be deemed to be modifications of
+ this License.)
+
+7. DISCLAIMER OF WARRANTY.
+
+ COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
+ DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
+ THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
+ IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
+ YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
+ COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
+ OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
+ ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+8. TERMINATION.
+
+ 8.1. This License and the rights granted hereunder will terminate
+ automatically if You fail to comply with terms herein and fail to cure
+ such breach within 30 days of becoming aware of the breach. All
+ sublicenses to the Covered Code which are properly granted shall
+ survive any termination of this License. Provisions which, by their
+ nature, must remain in effect beyond the termination of this License
+ shall survive.
+
+ 8.2. If You initiate litigation by asserting a patent infringement
+ claim (excluding declatory judgment actions) against Initial Developer
+ or a Contributor (the Initial Developer or Contributor against whom
+ You file such action is referred to as "Participant") alleging that:
+
+ (a) such Participant's Contributor Version directly or indirectly
+ infringes any patent, then any and all rights granted by such
+ Participant to You under Sections 2.1 and/or 2.2 of this License
+ shall, upon 60 days notice from Participant terminate prospectively,
+ unless if within 60 days after receipt of notice You either: (i)
+ agree in writing to pay Participant a mutually agreeable reasonable
+ royalty for Your past and future use of Modifications made by such
+ Participant, or (ii) withdraw Your litigation claim with respect to
+ the Contributor Version against such Participant. If within 60 days
+ of notice, a reasonable royalty and payment arrangement are not
+ mutually agreed upon in writing by the parties or the litigation claim
+ is not withdrawn, the rights granted by Participant to You under
+ Sections 2.1 and/or 2.2 automatically terminate at the expiration of
+ the 60 day notice period specified above.
+
+ (b) any software, hardware, or device, other than such Participant's
+ Contributor Version, directly or indirectly infringes any patent, then
+ any rights granted to You by such Participant under Sections 2.1(b)
+ and 2.2(b) are revoked effective as of the date You first made, used,
+ sold, distributed, or had made, Modifications made by that
+ Participant.
+
+ 8.3. If You assert a patent infringement claim against Participant
+ alleging that such Participant's Contributor Version directly or
+ indirectly infringes any patent where such claim is resolved (such as
+ by license or settlement) prior to the initiation of patent
+ infringement litigation, then the reasonable value of the licenses
+ granted by such Participant under Sections 2.1 or 2.2 shall be taken
+ into account in determining the amount or value of any payment or
+ license.
+
+ 8.4. In the event of termination under Sections 8.1 or 8.2 above,
+ all end user license agreements (excluding distributors and resellers)
+ which have been validly granted by You or any distributor hereunder
+ prior to termination shall survive termination.
+
+9. LIMITATION OF LIABILITY.
+
+ UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
+ (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
+ DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
+ OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
+ ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
+ CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
+ WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
+ COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
+ INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
+ LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
+ RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
+ PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
+ EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
+ THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+10. U.S. GOVERNMENT END USERS.
+
+ The Covered Code is a "commercial item," as that term is defined in
+ 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
+ software" and "commercial computer software documentation," as such
+ terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
+ C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
+ all U.S. Government End Users acquire Covered Code with only those
+ rights set forth herein.
+
+11. MISCELLANEOUS.
+
+ This License represents the complete agreement concerning subject
+ matter hereof. If any provision of this License is held to be
+ unenforceable, such provision shall be reformed only to the extent
+ necessary to make it enforceable. This License shall be governed by
+ California law provisions (except to the extent applicable law, if
+ any, provides otherwise), excluding its conflict-of-law provisions.
+ With respect to disputes in which at least one party is a citizen of,
+ or an entity chartered or registered to do business in the United
+ States of America, any litigation relating to this License shall be
+ subject to the jurisdiction of the Federal Courts of the Northern
+ District of California, with venue lying in Santa Clara County,
+ California, with the losing party responsible for costs, including
+ without limitation, court costs and reasonable attorneys' fees and
+ expenses. The application of the United Nations Convention on
+ Contracts for the International Sale of Goods is expressly excluded.
+ Any law or regulation which provides that the language of a contract
+ shall be construed against the drafter shall not apply to this
+ License.
+
+12. RESPONSIBILITY FOR CLAIMS.
+
+ As between Initial Developer and the Contributors, each party is
+ responsible for claims and damages arising, directly or indirectly,
+ out of its utilization of rights under this License and You agree to
+ work with Initial Developer and Contributors to distribute such
+ responsibility on an equitable basis. Nothing herein is intended or
+ shall be deemed to constitute any admission of liability.
+
+13. MULTIPLE-LICENSED CODE.
+
+ Initial Developer may designate portions of the Covered Code as
+ "Multiple-Licensed". "Multiple-Licensed" means that the Initial
+ Developer permits you to utilize portions of the Covered Code under
+ Your choice of the NPL or the alternative licenses, if any, specified
+ by the Initial Developer in the file described in Exhibit A.
+
+EXHIBIT A -Mozilla Public License.
+
+ ``The contents of this file are subject to the Mozilla Public License
+ Version 1.1 (the "License"); you may not use this file except in
+ compliance with the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+
+ Software distributed under the License is distributed on an "AS IS"
+ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+ License for the specific language governing rights and limitations
+ under the License.
+
+ The Original Code is ______________________________________.
+
+ The Initial Developer of the Original Code is ________________________.
+ Portions created by ______________________ are Copyright (C) ______
+ _______________________. All Rights Reserved.
+
+ Contributor(s): ______________________________________.
+
+ Alternatively, the contents of this file may be used under the terms
+ of the _____ license (the "[___] License"), in which case the
+ provisions of [______] License are applicable instead of those
+ above. If you wish to allow use of your version of this file only
+ under the terms of the [____] License and not to allow others to use
+ your version of this file under the MPL, indicate your decision by
+ deleting the provisions above and replace them with the notice and
+ other provisions required by the [___] License. If you do not delete
+ the provisions above, a recipient may use your version of this file
+ under either the MPL or the [___] License."
+
+ [NOTE: The text of this Exhibit A may differ slightly from the text of
+ the notices in the Source Code files of the Original Code. You should
+ use the text of this Exhibit A rather than the text found in the
+ Original Code Source Code for Your Modifications.]
+
+
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007 \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/ace-compat-uncompressed.js b/apps/files_texteditor/js/aceeditor/ace-compat-uncompressed.js
new file mode 100755
index 00000000000..7fa232a335f
--- /dev/null
+++ b/apps/files_texteditor/js/aceeditor/ace-compat-uncompressed.js
@@ -0,0 +1,490 @@
+/* vim:ts=4:sts=4:sw=4:
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('pilot/index', ['require', 'exports', 'module' , 'pilot/browser_focus', 'pilot/dom', 'pilot/event', 'pilot/event_emitter', 'pilot/fixoldbrowsers', 'pilot/keys', 'pilot/lang', 'pilot/oop', 'pilot/useragent', 'pilot/canon'], function(require, exports, module) {
+ require("pilot/browser_focus");
+ require("pilot/dom");
+ require("pilot/event");
+ require("pilot/event_emitter");
+ require("pilot/fixoldbrowsers");
+ require("pilot/keys");
+ require("pilot/lang");
+ require("pilot/oop");
+ require("pilot/useragent");
+ require("pilot/canon");
+});
+/* vim:ts=4:sts=4:sw=4:
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('pilot/browser_focus', ['require', 'exports', 'module' , 'ace/lib/browser_focus'], function(require, exports, module) {
+ console.warn("DEPRECATED: 'pilot/browser_focus' is deprecated. Use 'ace/lib/browser_focus' instead");
+ module.exports = require("ace/lib/browser_focus");
+});
+/* vim:ts=4:sts=4:sw=4:
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('pilot/dom', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) {
+ console.warn("DEPRECATED: 'pilot/dom' is deprecated. Use 'ace/lib/dom' instead");
+ module.exports = require("ace/lib/dom");
+});
+/* vim:ts=4:sts=4:sw=4:
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('pilot/event', ['require', 'exports', 'module' , 'ace/lib/event'], function(require, exports, module) {
+ console.warn("DEPRECATED: 'pilot/event' is deprecated. Use 'ace/lib/event' instead");
+ module.exports = require("ace/lib/event");
+});
+/* vim:ts=4:sts=4:sw=4:
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('pilot/event_emitter', ['require', 'exports', 'module' , 'ace/lib/event_emitter'], function(require, exports, module) {
+ console.warn("DEPRECATED: 'pilot/event_emitter' is deprecated. Use 'ace/lib/event_emitter' instead");
+ module.exports = require("ace/lib/event_emitter");
+});
+/* vim:ts=4:sts=4:sw=4:
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('pilot/fixoldbrowsers', ['require', 'exports', 'module' , 'ace/lib/fixoldbrowsers'], function(require, exports, module) {
+ console.warn("DEPRECATED: 'pilot/fixoldbrowsers' is deprecated. Use 'ace/lib/fixoldbrowsers' instead");
+ module.exports = require("ace/lib/fixoldbrowsers");
+});
+/* vim:ts=4:sts=4:sw=4:
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('pilot/keys', ['require', 'exports', 'module' , 'ace/lib/keys'], function(require, exports, module) {
+ console.warn("DEPRECATED: 'pilot/keys' is deprecated. Use 'ace/lib/keys' instead");
+ module.exports = require("ace/lib/keys");
+});
+/* vim:ts=4:sts=4:sw=4:
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('pilot/lang', ['require', 'exports', 'module' , 'ace/lib/lang'], function(require, exports, module) {
+ console.warn("DEPRECATED: 'pilot/lang' is deprecated. Use 'ace/lib/lang' instead");
+ module.exports = require("ace/lib/lang");
+});
+/* vim:ts=4:sts=4:sw=4:
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('pilot/oop', ['require', 'exports', 'module' , 'ace/lib/oop'], function(require, exports, module) {
+ console.warn("DEPRECATED: 'pilot/oop' is deprecated. Use 'ace/lib/oop' instead");
+ module.exports = require("ace/lib/oop");
+});
+/* vim:ts=4:sts=4:sw=4:
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('pilot/useragent', ['require', 'exports', 'module' , 'ace/lib/useragent'], function(require, exports, module) {
+ console.warn("DEPRECATED: 'pilot/useragent' is deprecated. Use 'ace/lib/useragent' instead");
+ module.exports = require("ace/lib/useragent");
+});
+/* vim:ts=4:sts=4:sw=4:
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('pilot/canon', ['require', 'exports', 'module' ], function(require, exports, module) {
+ console.warn("DEPRECATED: 'pilot/canon' is deprecated.");
+ //return require("ace/lib/dom");
+
+ exports.addCommand = function() {
+ console.warn("DEPRECATED: 'canon.addCommand()' is deprecated. Use 'editor.commands.addCommand(command)' instead.");
+ console.trace();
+ }
+
+ exports.removeCommand = function() {
+ console.warn("DEPRECATED: 'canon.removeCommand()' is deprecated. Use 'editor.commands.removeCommand(command)' instead.");
+ console.trace();
+ }
+});
+;
+ (function() {
+ window.require(["ace/ace"], function(a) {
+ if (!window.ace)
+ window.ace = {};
+ for (var key in a) if (a.hasOwnProperty(key))
+ ace[key] = a[key];
+ });
+ })();
+ \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/ace-compat.js b/apps/files_texteditor/js/aceeditor/ace-compat.js
new file mode 100755
index 00000000000..5dcbb1cc38a
--- /dev/null
+++ b/apps/files_texteditor/js/aceeditor/ace-compat.js
@@ -0,0 +1 @@
+define("pilot/index",["require","exports","module","pilot/browser_focus","pilot/dom","pilot/event","pilot/event_emitter","pilot/fixoldbrowsers","pilot/keys","pilot/lang","pilot/oop","pilot/useragent","pilot/canon"],function(a,b,c){a("pilot/browser_focus"),a("pilot/dom"),a("pilot/event"),a("pilot/event_emitter"),a("pilot/fixoldbrowsers"),a("pilot/keys"),a("pilot/lang"),a("pilot/oop"),a("pilot/useragent"),a("pilot/canon")}),define("pilot/browser_focus",["require","exports","module","ace/lib/browser_focus"],function(a,b,c){console.warn("DEPRECATED: 'pilot/browser_focus' is deprecated. Use 'ace/lib/browser_focus' instead"),c.exports=a("ace/lib/browser_focus")}),define("pilot/dom",["require","exports","module","ace/lib/dom"],function(a,b,c){console.warn("DEPRECATED: 'pilot/dom' is deprecated. Use 'ace/lib/dom' instead"),c.exports=a("ace/lib/dom")}),define("pilot/event",["require","exports","module","ace/lib/event"],function(a,b,c){console.warn("DEPRECATED: 'pilot/event' is deprecated. Use 'ace/lib/event' instead"),c.exports=a("ace/lib/event")}),define("pilot/event_emitter",["require","exports","module","ace/lib/event_emitter"],function(a,b,c){console.warn("DEPRECATED: 'pilot/event_emitter' is deprecated. Use 'ace/lib/event_emitter' instead"),c.exports=a("ace/lib/event_emitter")}),define("pilot/fixoldbrowsers",["require","exports","module","ace/lib/fixoldbrowsers"],function(a,b,c){console.warn("DEPRECATED: 'pilot/fixoldbrowsers' is deprecated. Use 'ace/lib/fixoldbrowsers' instead"),c.exports=a("ace/lib/fixoldbrowsers")}),define("pilot/keys",["require","exports","module","ace/lib/keys"],function(a,b,c){console.warn("DEPRECATED: 'pilot/keys' is deprecated. Use 'ace/lib/keys' instead"),c.exports=a("ace/lib/keys")}),define("pilot/lang",["require","exports","module","ace/lib/lang"],function(a,b,c){console.warn("DEPRECATED: 'pilot/lang' is deprecated. Use 'ace/lib/lang' instead"),c.exports=a("ace/lib/lang")}),define("pilot/oop",["require","exports","module","ace/lib/oop"],function(a,b,c){console.warn("DEPRECATED: 'pilot/oop' is deprecated. Use 'ace/lib/oop' instead"),c.exports=a("ace/lib/oop")}),define("pilot/useragent",["require","exports","module","ace/lib/useragent"],function(a,b,c){console.warn("DEPRECATED: 'pilot/useragent' is deprecated. Use 'ace/lib/useragent' instead"),c.exports=a("ace/lib/useragent")}),define("pilot/canon",["require","exports","module"],function(a,b,c){console.warn("DEPRECATED: 'pilot/canon' is deprecated."),b.addCommand=function(){console.warn("DEPRECATED: 'canon.addCommand()' is deprecated. Use 'editor.commands.addCommand(command)' instead."),console.trace()},b.removeCommand=function(){console.warn("DEPRECATED: 'canon.removeCommand()' is deprecated. Use 'editor.commands.removeCommand(command)' instead."),console.trace()}}),function(){window.require(["ace/ace"],function(a){window.ace||(window.ace={});for(var b in a)a.hasOwnProperty(b)&&(ace[b]=a[b])})}() \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/ace-uncompressed.js b/apps/files_texteditor/js/aceeditor/ace-uncompressed.js
index f6e78da4f0b..619baf49016 100644..100755
--- a/apps/files_texteditor/js/aceeditor/ace-uncompressed.js
+++ b/apps/files_texteditor/js/aceeditor/ace-uncompressed.js
@@ -42,17 +42,16 @@
*/
(function() {
-
+
+var ACE_NAMESPACE = "";
+
var global = (function() {
return this;
})();
-
-// if we find an existing require function use it.
-if (global.require && global.define) {
- require.packaged = true;
+
+if (typeof requirejs !== "undefined")
return;
-}
-
+
var _define = function(module, deps, payload) {
if (typeof module !== 'string') {
if (_define.original)
@@ -67,25 +66,20 @@ var _define = function(module, deps, payload) {
if (arguments.length == 2)
payload = deps;
- if (!define.modules)
- define.modules = {};
+ if (!_define.modules)
+ _define.modules = {};
- define.modules[module] = payload;
+ _define.modules[module] = payload;
};
-if (global.define)
- _define.original = global.define;
-
-global.define = _define;
-
/**
* Get at functionality define()ed using the function above
*/
-var _require = function(module, callback) {
+var _require = function(parentId, module, callback) {
if (Object.prototype.toString.call(module) === "[object Array]") {
var params = [];
for (var i = 0, l = module.length; i < l; ++i) {
- var dep = lookup(module[i]);
+ var dep = lookup(parentId, module[i]);
if (!dep && _require.original)
return _require.original.apply(window, arguments);
params.push(dep);
@@ -95,7 +89,7 @@ var _require = function(module, callback) {
}
}
else if (typeof module === 'string') {
- var payload = lookup(module);
+ var payload = lookup(parentId, module);
if (!payload && _require.original)
return _require.original.apply(window, arguments);
@@ -111,35 +105,166 @@ var _require = function(module, callback) {
}
};
-if (global.require)
- _require.original = global.require;
+var normalizeModule = function(parentId, moduleName) {
+ // normalize plugin requires
+ if (moduleName.indexOf("!") !== -1) {
+ var chunks = moduleName.split("!");
+ return normalizeModule(parentId, chunks[0]) + "!" + normalizeModule(parentId, chunks[1]);
+ }
+ // normalize relative requires
+ if (moduleName.charAt(0) == ".") {
+ var base = parentId.split("/").slice(0, -1).join("/");
+ moduleName = base + "/" + moduleName;
+
+ while(moduleName.indexOf(".") !== -1 && previous != moduleName) {
+ var previous = moduleName;
+ moduleName = moduleName.replace(/\/\.\//, "/").replace(/[^\/]+\/\.\.\//, "");
+ }
+ }
-global.require = _require;
-require.packaged = true;
+ return moduleName;
+};
/**
* Internal function to lookup moduleNames and resolve them by calling the
* definition function if needed.
*/
-var lookup = function(moduleName) {
- var module = define.modules[moduleName];
- if (module == null) {
- console.error('Missing module: ' + moduleName);
+var lookup = function(parentId, moduleName) {
+
+ moduleName = normalizeModule(parentId, moduleName);
+
+ var module = _define.modules[moduleName];
+ if (!module) {
return null;
}
if (typeof module === 'function') {
var exports = {};
- module(require, exports, { id: moduleName, uri: '' });
+ var mod = {
+ id: moduleName,
+ uri: '',
+ exports: exports,
+ packaged: true
+ };
+
+ var req = function(module, callback) {
+ return _require(moduleName, module, callback);
+ };
+
+ var returnValue = module(req, exports, mod);
+ exports = returnValue || mod.exports;
+
// cache the resulting module object for next time
- define.modules[moduleName] = exports;
+ _define.modules[moduleName] = exports;
return exports;
}
return module;
};
-})();// vim:set ts=4 sts=4 sw=4 st:
+function exportAce(ns) {
+ var require = function(module, callback) {
+ return _require("", module, callback);
+ };
+ require.packaged = true;
+
+ var root = global;
+ if (ns) {
+ if (!global[ns])
+ global[ns] = {};
+ root = global[ns];
+ }
+
+ if (root.define)
+ _define.original = root.define;
+
+ root.define = _define;
+
+ if (root.require)
+ _require.original = root.require;
+
+ root.require = require;
+}
+
+exportAce(ACE_NAMESPACE);
+
+})();/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Skywriter.
+ *
+ * The Initial Developer of the Original Code is
+ * Mozilla.
+ * Portions created by the Initial Developer are Copyright (C) 2009
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Kevin Dangoor (kdangoor@mozilla.com)
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/ace', ['require', 'exports', 'module' , 'ace/lib/fixoldbrowsers', 'ace/lib/dom', 'ace/lib/event', 'ace/editor', 'ace/edit_session', 'ace/undomanager', 'ace/virtual_renderer', 'ace/theme/textmate'], function(require, exports, module) {
+"use strict";
+
+require("./lib/fixoldbrowsers");
+
+var Dom = require("./lib/dom");
+var Event = require("./lib/event");
+
+var Editor = require("./editor").Editor;
+var EditSession = require("./edit_session").EditSession;
+var UndoManager = require("./undomanager").UndoManager;
+var Renderer = require("./virtual_renderer").VirtualRenderer;
+
+exports.edit = function(el) {
+ if (typeof(el) == "string") {
+ el = document.getElementById(el);
+ }
+
+ var doc = new EditSession(Dom.getInnerText(el));
+ doc.setUndoManager(new UndoManager());
+ el.innerHTML = '';
+
+ var editor = new Editor(new Renderer(el, require("./theme/textmate")));
+ editor.setSession(doc);
+
+ var env = {};
+ env.document = doc;
+ env.editor = editor;
+ editor.resize();
+ Event.addListener(window, "resize", function() {
+ editor.resize();
+ });
+ el.env = env;
+ // Store env on editor such that it can be accessed later on from
+ // the returned object.
+ editor.env = env;
+ return editor;
+};
+
+});// vim:set ts=4 sts=4 sw=4 st:
// -- kriskowal Kris Kowal Copyright (C) 2009-2010 MIT License
// -- tlrobinson Tom Robinson Copyright (C) 2009-2010 MIT License (Narwhal Project)
// -- dantman Daniel Friesen Copyright(C) 2010 XXX No License Specified
@@ -151,25 +276,155 @@ var lookup = function(moduleName) {
MIT License. http://github.com/280north/narwhal/blob/master/README.md
*/
-define('pilot/fixoldbrowsers', ['require', 'exports', 'module' ], function(require, exports, module) {
+define('ace/lib/fixoldbrowsers', ['require', 'exports', 'module' , 'ace/lib/regexp', 'ace/lib/es5-shim'], function(require, exports, module) {
+"use strict";
+
+require("./regexp");
+require("./es5-shim");
+
+});/**
+ * Based on code from:
+ *
+ * XRegExp 1.5.0
+ * (c) 2007-2010 Steven Levithan
+ * MIT License
+ * <http://xregexp.com>
+ * Provides an augmented, extensible, cross-browser implementation of regular expressions,
+ * including support for additional syntax, flags, and methods
+ */
+
+define('ace/lib/regexp', ['require', 'exports', 'module' ], function(require, exports, module) {
+"use strict";
+
+ //---------------------------------
+ // Private variables
+ //---------------------------------
+
+ var real = {
+ exec: RegExp.prototype.exec,
+ test: RegExp.prototype.test,
+ match: String.prototype.match,
+ replace: String.prototype.replace,
+ split: String.prototype.split
+ },
+ compliantExecNpcg = real.exec.call(/()??/, "")[1] === undefined, // check `exec` handling of nonparticipating capturing groups
+ compliantLastIndexIncrement = function () {
+ var x = /^/g;
+ real.test.call(x, "");
+ return !x.lastIndex;
+ }();
+
+ //---------------------------------
+ // Overriden native methods
+ //---------------------------------
+
+ // Adds named capture support (with backreferences returned as `result.name`), and fixes two
+ // cross-browser issues per ES3:
+ // - Captured values for nonparticipating capturing groups should be returned as `undefined`,
+ // rather than the empty string.
+ // - `lastIndex` should not be incremented after zero-length matches.
+ RegExp.prototype.exec = function (str) {
+ var match = real.exec.apply(this, arguments),
+ name, r2;
+ if (match) {
+ // Fix browsers whose `exec` methods don't consistently return `undefined` for
+ // nonparticipating capturing groups
+ if (!compliantExecNpcg && match.length > 1 && indexOf(match, "") > -1) {
+ r2 = RegExp(this.source, real.replace.call(getNativeFlags(this), "g", ""));
+ // Using `str.slice(match.index)` rather than `match[0]` in case lookahead allowed
+ // matching due to characters outside the match
+ real.replace.call(str.slice(match.index), r2, function () {
+ for (var i = 1; i < arguments.length - 2; i++) {
+ if (arguments[i] === undefined)
+ match[i] = undefined;
+ }
+ });
+ }
+ // Attach named capture properties
+ if (this._xregexp && this._xregexp.captureNames) {
+ for (var i = 1; i < match.length; i++) {
+ name = this._xregexp.captureNames[i - 1];
+ if (name)
+ match[name] = match[i];
+ }
+ }
+ // Fix browsers that increment `lastIndex` after zero-length matches
+ if (!compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index))
+ this.lastIndex--;
+ }
+ return match;
+ };
+
+ // Don't override `test` if it won't change anything
+ if (!compliantLastIndexIncrement) {
+ // Fix browser bug in native method
+ RegExp.prototype.test = function (str) {
+ // Use the native `exec` to skip some processing overhead, even though the overriden
+ // `exec` would take care of the `lastIndex` fix
+ var match = real.exec.call(this, str);
+ // Fix browsers that increment `lastIndex` after zero-length matches
+ if (match && this.global && !match[0].length && (this.lastIndex > match.index))
+ this.lastIndex--;
+ return !!match;
+ };
+ }
+
+ //---------------------------------
+ // Private helper functions
+ //---------------------------------
+
+ function getNativeFlags (regex) {
+ return (regex.global ? "g" : "") +
+ (regex.ignoreCase ? "i" : "") +
+ (regex.multiline ? "m" : "") +
+ (regex.extended ? "x" : "") + // Proposed for ES4; included in AS3
+ (regex.sticky ? "y" : "");
+ };
+
+ function indexOf (array, item, from) {
+ if (Array.prototype.indexOf) // Use the native array method if available
+ return array.indexOf(item, from);
+ for (var i = from || 0; i < array.length; i++) {
+ if (array[i] === item)
+ return i;
+ }
+ return -1;
+ };
+
+});// vim: ts=4 sts=4 sw=4 expandtab
+// -- kriskowal Kris Kowal Copyright (C) 2009-2011 MIT License
+// -- tlrobinson Tom Robinson Copyright (C) 2009-2010 MIT License (Narwhal Project)
+// -- dantman Daniel Friesen Copyright (C) 2010 XXX TODO License or CLA
+// -- fschaefer Florian Schäfer Copyright (C) 2010 MIT License
+// -- Gozala Irakli Gozalishvili Copyright (C) 2010 MIT License
+// -- kitcambridge Kit Cambridge Copyright (C) 2011 MIT License
+// -- kossnocorp Sasha Koss XXX TODO License or CLA
+// -- bryanforbes Bryan Forbes XXX TODO License or CLA
+// -- killdream Quildreen Motta Copyright (C) 2011 MIT Licence
+// -- michaelficarra Michael Ficarra Copyright (C) 2011 3-clause BSD License
+// -- sharkbrainguy Gerard Paapu Copyright (C) 2011 MIT License
+// -- bbqsrc Brendan Molloy (C) 2011 Creative Commons Zero (public domain)
+// -- iwyg XXX TODO License or CLA
+// -- DomenicDenicola Domenic Denicola Copyright (C) 2011 MIT License
+// -- xavierm02 Montillet Xavier XXX TODO License or CLA
+// -- Raynos Raynos XXX TODO License or CLA
+// -- samsonjs Sami Samhuri Copyright (C) 2010 MIT License
+// -- rwldrn Rick Waldron Copyright (C) 2011 MIT License
+// -- lexer Alexey Zakharov XXX TODO License or CLA
+
+/*!
+ Copyright (c) 2009, 280 North Inc. http://280north.com/
+ MIT License. http://github.com/280north/narwhal/blob/master/README.md
+*/
+
+define('ace/lib/es5-shim', ['require', 'exports', 'module' ], function(require, exports, module) {
/**
* Brings an environment as close to ECMAScript 5 compliance
* as is possible with the facilities of erstwhile engines.
*
- * ES5 Draft
- * http://www.ecma-international.org/publications/files/drafts/tc39-2009-050.pdf
- *
- * NOTE: this is a draft, and as such, the URL is subject to change. If the
- * link is broken, check in the parent directory for the latest TC39 PDF.
- * http://www.ecma-international.org/publications/files/drafts/
- *
- * Previous ES5 Draft
- * http://www.ecma-international.org/publications/files/drafts/tc39-2009-025.pdf
- * This is a broken link to the previous draft of ES5 on which most of the
- * numbered specification references and quotes herein were taken. Updating
- * these references and quotes to reflect the new document would be a welcome
- * volunteer project.
+ * Annotated ES5: http://es5.github.com/ (specific links below)
+ * ES5 Spec: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
*
* @module
*/
@@ -182,39 +437,35 @@ define('pilot/fixoldbrowsers', ['require', 'exports', 'module' ], function(requi
//
// ES-5 15.3.4.5
-// http://www.ecma-international.org/publications/files/drafts/tc39-2009-025.pdf
+// http://es5.github.com/#x15.3.4.5
if (!Function.prototype.bind) {
- var slice = Array.prototype.slice;
Function.prototype.bind = function bind(that) { // .length is 1
// 1. Let Target be the this value.
var target = this;
// 2. If IsCallable(Target) is false, throw a TypeError exception.
- // XXX this gets pretty close, for all intents and purposes, letting
- // some duck-types slide
- if (typeof target.apply !== "function" || typeof target.call !== "function")
- return new TypeError();
+ if (typeof target != "function")
+ throw new TypeError(); // TODO message
// 3. Let A be a new (possibly empty) internal list of all of the
// argument values provided after thisArg (arg1, arg2 etc), in order.
- var args = slice.call(arguments);
+ // XXX slicedArgs will stand in for "A" if used
+ var args = slice.call(arguments, 1); // for normal call
// 4. Let F be a new native ECMAScript object.
- // 9. Set the [[Prototype]] internal property of F to the standard
+ // 11. Set the [[Prototype]] internal property of F to the standard
// built-in Function prototype object as specified in 15.3.3.1.
- // 10. Set the [[Call]] internal property of F as described in
+ // 12. Set the [[Call]] internal property of F as described in
// 15.3.4.5.1.
- // 11. Set the [[Construct]] internal property of F as described in
+ // 13. Set the [[Construct]] internal property of F as described in
// 15.3.4.5.2.
- // 12. Set the [[HasInstance]] internal property of F as described in
+ // 14. Set the [[HasInstance]] internal property of F as described in
// 15.3.4.5.3.
- // 13. The [[Scope]] internal property of F is unused and need not
- // exist.
- var bound = function bound() {
+ var bound = function () {
if (this instanceof bound) {
// 15.3.4.5.2 [[Construct]]
// When the [[Construct]] internal method of a function object,
// F that was created using the bind function is called with a
- // list of arguments ExtraArgs the following steps are taken:
+ // list of arguments ExtraArgs, the following steps are taken:
// 1. Let target be the value of F's [[TargetFunction]]
// internal property.
// 2. If target has no [[Construct]] internal method, a
@@ -224,16 +475,26 @@ if (!Function.prototype.bind) {
// 4. Let args be a new list containing the same values as the
// list boundArgs in the same order followed by the same
// values as the list ExtraArgs in the same order.
+ // 5. Return the result of calling the [[Construct]] internal
+ // method of target providing args as the arguments.
- var self = Object.create(target.prototype);
- target.apply(self, args.concat(slice.call(arguments)));
+ var F = function(){};
+ F.prototype = target.prototype;
+ var self = new F;
+
+ var result = target.apply(
+ self,
+ args.concat(slice.call(arguments))
+ );
+ if (result !== null && Object(result) === result)
+ return result;
return self;
} else {
// 15.3.4.5.1 [[Call]]
// When the [[Call]] internal method of a function object, F,
// which was created using the bind function is called with a
- // this value and a list of arguments ExtraArgs the following
+ // this value and a list of arguments ExtraArgs, the following
// steps are taken:
// 1. Let boundArgs be the value of F's [[BoundArgs]] internal
// property.
@@ -241,49 +502,53 @@ if (!Function.prototype.bind) {
// property.
// 3. Let target be the value of F's [[TargetFunction]] internal
// property.
- // 4. Let args be a new list containing the same values as the list
- // boundArgs in the same order followed by the same values as
- // the list ExtraArgs in the same order. 5. Return the
- // result of calling the [[Call]] internal method of target
- // providing boundThis as the this value and providing args
- // as the arguments.
+ // 4. Let args be a new list containing the same values as the
+ // list boundArgs in the same order followed by the same
+ // values as the list ExtraArgs in the same order.
+ // 5. Return the result of calling the [[Call]] internal method
+ // of target providing boundThis as the this value and
+ // providing args as the arguments.
// equiv: target.call(this, ...boundArgs, ...args)
- return target.call.apply(
- target,
+ return target.apply(
+ that,
args.concat(slice.call(arguments))
);
}
};
- bound.length = (
- // 14. If the [[Class]] internal property of Target is "Function", then
- typeof target === "function" ?
- // a. Let L be the length property of Target minus the length of A.
- // b. Set the length own property of F to either 0 or L, whichever is larger.
- Math.max(target.length - args.length, 0) :
- // 15. Else set the length own property of F to 0.
- 0
- )
- // 16. The length own property of F is given attributes as specified in
- // 15.3.5.1.
- // TODO
- // 17. Set the [[Extensible]] internal property of F to true.
+ // XXX bound.length is never writable, so don't even try
+ //
+ // 15. If the [[Class]] internal property of Target is "Function", then
+ // a. Let L be the length property of Target minus the length of A.
+ // b. Set the length own property of F to either 0 or L, whichever is
+ // larger.
+ // 16. Else set the length own property of F to 0.
+ // 17. Set the attributes of the length own property of F to the values
+ // specified in 15.3.5.1.
+
// TODO
- // 18. Call the [[DefineOwnProperty]] internal method of F with
- // arguments "caller", PropertyDescriptor {[[Value]]: null,
- // [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]:
- // false}, and false.
+ // 18. Set the [[Extensible]] internal property of F to true.
+
// TODO
- // 19. Call the [[DefineOwnProperty]] internal method of F with
- // arguments "arguments", PropertyDescriptor {[[Value]]: null,
- // [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]:
- // false}, and false.
+ // 19. Let thrower be the [[ThrowTypeError]] function Object (13.2.3).
+ // 20. Call the [[DefineOwnProperty]] internal method of F with
+ // arguments "caller", PropertyDescriptor {[[Get]]: thrower, [[Set]]:
+ // thrower, [[Enumerable]]: false, [[Configurable]]: false}, and
+ // false.
+ // 21. Call the [[DefineOwnProperty]] internal method of F with
+ // arguments "arguments", PropertyDescriptor {[[Get]]: thrower,
+ // [[Set]]: thrower, [[Enumerable]]: false, [[Configurable]]: false},
+ // and false.
+
// TODO
- // NOTE Function objects created using Function.prototype.bind do not
- // have a prototype property.
- // XXX can't delete it in pure-js.
+ // NOTE Function objects created using Function.prototype.bind do not
+ // have a prototype property or the [[Code]], [[FormalParameters]], and
+ // [[Scope]] internal properties.
+ // XXX can't delete prototype in pure-js.
+
+ // 22. Return F.
return bound;
};
}
@@ -295,204 +560,293 @@ if (!Function.prototype.bind) {
var call = Function.prototype.call;
var prototypeOfArray = Array.prototype;
var prototypeOfObject = Object.prototype;
+var slice = prototypeOfArray.slice;
+var toString = call.bind(prototypeOfObject.toString);
var owns = call.bind(prototypeOfObject.hasOwnProperty);
-var defineGetter, defineSetter, lookupGetter, lookupSetter, supportsAccessors;
// If JS engine supports accessors creating shortcuts.
-if ((supportsAccessors = owns(prototypeOfObject, '__defineGetter__'))) {
+var defineGetter;
+var defineSetter;
+var lookupGetter;
+var lookupSetter;
+var supportsAccessors;
+if ((supportsAccessors = owns(prototypeOfObject, "__defineGetter__"))) {
defineGetter = call.bind(prototypeOfObject.__defineGetter__);
defineSetter = call.bind(prototypeOfObject.__defineSetter__);
lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);
lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);
}
-
//
// Array
// =====
//
// ES5 15.4.3.2
+// http://es5.github.com/#x15.4.3.2
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/isArray
if (!Array.isArray) {
Array.isArray = function isArray(obj) {
- return Object.prototype.toString.call(obj) === "[object Array]";
+ return toString(obj) == "[object Array]";
};
}
+// The IsCallable() check in the Array functions
+// has been replaced with a strict check on the
+// internal class of the object to trap cases where
+// the provided function was actually a regular
+// expression literal, which in V8 and
+// JavaScriptCore is a typeof "function". Only in
+// V8 are regular expression literals permitted as
+// reduce parameters, so it is desirable in the
+// general case for the shim to match the more
+// strict and common behavior of rejecting regular
+// expressions.
+
// ES5 15.4.4.18
+// http://es5.github.com/#x15.4.4.18
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/array/forEach
if (!Array.prototype.forEach) {
- Array.prototype.forEach = function forEach(block, thisObject) {
- var len = +this.length;
- for (var i = 0; i < len; i++) {
- if (i in this) {
- block.call(thisObject, this[i], i, this);
+ Array.prototype.forEach = function forEach(fun /*, thisp*/) {
+ var self = toObject(this),
+ thisp = arguments[1],
+ i = 0,
+ length = self.length >>> 0;
+
+ // If no callback function or if callback is not a callable function
+ if (toString(fun) != "[object Function]") {
+ throw new TypeError(); // TODO message
+ }
+
+ while (i < length) {
+ if (i in self) {
+ // Invoke the callback function with call, passing arguments:
+ // context, property value, property key, thisArg object context
+ fun.call(thisp, self[i], i, self);
}
+ i++;
}
};
}
// ES5 15.4.4.19
+// http://es5.github.com/#x15.4.4.19
// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/map
if (!Array.prototype.map) {
Array.prototype.map = function map(fun /*, thisp*/) {
- var len = +this.length;
- if (typeof fun !== "function")
- throw new TypeError();
+ var self = toObject(this),
+ length = self.length >>> 0,
+ result = Array(length),
+ thisp = arguments[1];
- var res = new Array(len);
- var thisp = arguments[1];
- for (var i = 0; i < len; i++) {
- if (i in this)
- res[i] = fun.call(thisp, this[i], i, this);
+ // If no callback function or if callback is not a callable function
+ if (toString(fun) != "[object Function]") {
+ throw new TypeError(); // TODO message
}
- return res;
+ for (var i = 0; i < length; i++) {
+ if (i in self)
+ result[i] = fun.call(thisp, self[i], i, self);
+ }
+ return result;
};
}
// ES5 15.4.4.20
+// http://es5.github.com/#x15.4.4.20
+// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/filter
if (!Array.prototype.filter) {
- Array.prototype.filter = function filter(block /*, thisp */) {
- var values = [];
- var thisp = arguments[1];
- for (var i = 0; i < this.length; i++)
- if (block.call(thisp, this[i]))
- values.push(this[i]);
- return values;
+ Array.prototype.filter = function filter(fun /*, thisp */) {
+ var self = toObject(this),
+ length = self.length >>> 0,
+ result = [],
+ thisp = arguments[1];
+
+ // If no callback function or if callback is not a callable function
+ if (toString(fun) != "[object Function]") {
+ throw new TypeError(); // TODO message
+ }
+
+ for (var i = 0; i < length; i++) {
+ if (i in self && fun.call(thisp, self[i], i, self))
+ result.push(self[i]);
+ }
+ return result;
};
}
// ES5 15.4.4.16
+// http://es5.github.com/#x15.4.4.16
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/every
if (!Array.prototype.every) {
- Array.prototype.every = function every(block /*, thisp */) {
- var thisp = arguments[1];
- for (var i = 0; i < this.length; i++)
- if (!block.call(thisp, this[i]))
+ Array.prototype.every = function every(fun /*, thisp */) {
+ var self = toObject(this),
+ length = self.length >>> 0,
+ thisp = arguments[1];
+
+ // If no callback function or if callback is not a callable function
+ if (toString(fun) != "[object Function]") {
+ throw new TypeError(); // TODO message
+ }
+
+ for (var i = 0; i < length; i++) {
+ if (i in self && !fun.call(thisp, self[i], i, self))
return false;
+ }
return true;
};
}
// ES5 15.4.4.17
+// http://es5.github.com/#x15.4.4.17
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/some
if (!Array.prototype.some) {
- Array.prototype.some = function some(block /*, thisp */) {
- var thisp = arguments[1];
- for (var i = 0; i < this.length; i++)
- if (block.call(thisp, this[i]))
+ Array.prototype.some = function some(fun /*, thisp */) {
+ var self = toObject(this),
+ length = self.length >>> 0,
+ thisp = arguments[1];
+
+ // If no callback function or if callback is not a callable function
+ if (toString(fun) != "[object Function]") {
+ throw new TypeError(); // TODO message
+ }
+
+ for (var i = 0; i < length; i++) {
+ if (i in self && fun.call(thisp, self[i], i, self))
return true;
+ }
return false;
};
}
// ES5 15.4.4.21
+// http://es5.github.com/#x15.4.4.21
// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/reduce
if (!Array.prototype.reduce) {
Array.prototype.reduce = function reduce(fun /*, initial*/) {
- var len = +this.length;
- if (typeof fun !== "function")
- throw new TypeError();
+ var self = toObject(this),
+ length = self.length >>> 0;
+
+ // If no callback function or if callback is not a callable function
+ if (toString(fun) != "[object Function]") {
+ throw new TypeError(); // TODO message
+ }
// no value to return if no initial value and an empty array
- if (len === 0 && arguments.length === 1)
- throw new TypeError();
+ if (!length && arguments.length == 1)
+ throw new TypeError(); // TODO message
var i = 0;
+ var result;
if (arguments.length >= 2) {
- var rv = arguments[1];
+ result = arguments[1];
} else {
do {
- if (i in this) {
- rv = this[i++];
+ if (i in self) {
+ result = self[i++];
break;
}
// if array contains no values, no initial value to return
- if (++i >= len)
- throw new TypeError();
+ if (++i >= length)
+ throw new TypeError(); // TODO message
} while (true);
}
- for (; i < len; i++) {
- if (i in this)
- rv = fun.call(null, rv, this[i], i, this);
+ for (; i < length; i++) {
+ if (i in self)
+ result = fun.call(void 0, result, self[i], i, self);
}
- return rv;
+ return result;
};
}
// ES5 15.4.4.22
+// http://es5.github.com/#x15.4.4.22
// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/reduceRight
if (!Array.prototype.reduceRight) {
Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {
- var len = +this.length;
- if (typeof fun !== "function")
- throw new TypeError();
+ var self = toObject(this),
+ length = self.length >>> 0;
+
+ // If no callback function or if callback is not a callable function
+ if (toString(fun) != "[object Function]") {
+ throw new TypeError(); // TODO message
+ }
// no value to return if no initial value, empty array
- if (len === 0 && arguments.length === 1)
- throw new TypeError();
+ if (!length && arguments.length == 1)
+ throw new TypeError(); // TODO message
- var i = len - 1;
+ var result, i = length - 1;
if (arguments.length >= 2) {
- var rv = arguments[1];
+ result = arguments[1];
} else {
do {
- if (i in this) {
- rv = this[i--];
+ if (i in self) {
+ result = self[i--];
break;
}
// if array contains no values, no initial value to return
if (--i < 0)
- throw new TypeError();
+ throw new TypeError(); // TODO message
} while (true);
}
- for (; i >= 0; i--) {
+ do {
if (i in this)
- rv = fun.call(null, rv, this[i], i, this);
- }
+ result = fun.call(void 0, result, self[i], i, self);
+ } while (i--);
- return rv;
+ return result;
};
}
// ES5 15.4.4.14
+// http://es5.github.com/#x15.4.4.14
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf
if (!Array.prototype.indexOf) {
- Array.prototype.indexOf = function indexOf(value /*, fromIndex */ ) {
- var length = this.length;
+ Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {
+ var self = toObject(this),
+ length = self.length >>> 0;
+
if (!length)
return -1;
- var i = arguments[1] || 0;
- if (i >= length)
- return -1;
- if (i < 0)
- i += length;
+
+ var i = 0;
+ if (arguments.length > 1)
+ i = toInteger(arguments[1]);
+
+ // handle negative indices
+ i = i >= 0 ? i : Math.max(0, length + i);
for (; i < length; i++) {
- if (!owns(this, i))
- continue;
- if (value === this[i])
+ if (i in self && self[i] === sought) {
return i;
+ }
}
return -1;
};
}
// ES5 15.4.4.15
+// http://es5.github.com/#x15.4.4.15
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/lastIndexOf
if (!Array.prototype.lastIndexOf) {
- Array.prototype.lastIndexOf = function lastIndexOf(value /*, fromIndex */) {
- var length = this.length;
+ Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {
+ var self = toObject(this),
+ length = self.length >>> 0;
+
if (!length)
return -1;
- var i = arguments[1] || length;
- if (i < 0)
- i += length;
- i = Math.min(i, length - 1);
+ var i = length - 1;
+ if (arguments.length > 1)
+ i = Math.min(i, toInteger(arguments[1]));
+ // handle negative indices
+ i = i >= 0 ? i : length - Math.abs(i);
for (; i >= 0; i--) {
- if (!owns(this, i))
- continue;
- if (value === this[i])
+ if (i in self && sought === self[i])
return i;
}
return -1;
@@ -505,32 +859,37 @@ if (!Array.prototype.lastIndexOf) {
//
// ES5 15.2.3.2
+// http://es5.github.com/#x15.2.3.2
if (!Object.getPrototypeOf) {
// https://github.com/kriskowal/es5-shim/issues#issue/2
// http://ejohn.org/blog/objectgetprototypeof/
// recommended by fschaefer on github
Object.getPrototypeOf = function getPrototypeOf(object) {
- return object.__proto__ || object.constructor.prototype;
- // or undefined if not available in this engine
+ return object.__proto__ || (
+ object.constructor ?
+ object.constructor.prototype :
+ prototypeOfObject
+ );
};
}
// ES5 15.2.3.3
+// http://es5.github.com/#x15.2.3.3
if (!Object.getOwnPropertyDescriptor) {
var ERR_NON_OBJECT = "Object.getOwnPropertyDescriptor called on a " +
"non-object: ";
Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {
- if ((typeof object !== "object" && typeof object !== "function") || object === null)
+ if ((typeof object != "object" && typeof object != "function") || object === null)
throw new TypeError(ERR_NON_OBJECT + object);
// If object does not owns property return undefined immediately.
if (!owns(object, property))
- return undefined;
+ return;
- var despriptor, getter, setter;
+ var descriptor, getter, setter;
// If object has a property then it's for sure both `enumerable` and
// `configurable`.
- despriptor = { enumerable: true, configurable: true };
+ descriptor = { enumerable: true, configurable: true };
// If JS engine supports accessor properties then property may be a
// getter or setter.
@@ -567,6 +926,7 @@ if (!Object.getOwnPropertyDescriptor) {
}
// ES5 15.2.3.4
+// http://es5.github.com/#x15.2.3.4
if (!Object.getOwnPropertyNames) {
Object.getOwnPropertyNames = function getOwnPropertyNames(object) {
return Object.keys(object);
@@ -574,13 +934,14 @@ if (!Object.getOwnPropertyNames) {
}
// ES5 15.2.3.5
+// http://es5.github.com/#x15.2.3.5
if (!Object.create) {
Object.create = function create(prototype, properties) {
var object;
if (prototype === null) {
object = { "__proto__": null };
} else {
- if (typeof prototype !== "object")
+ if (typeof prototype != "object")
throw new TypeError("typeof prototype["+(typeof prototype)+"] != 'object'");
var Type = function () {};
Type.prototype = prototype;
@@ -591,25 +952,66 @@ if (!Object.create) {
// objects created using `Object.create`
object.__proto__ = prototype;
}
- if (typeof properties !== "undefined")
+ if (properties !== void 0)
Object.defineProperties(object, properties);
return object;
};
}
// ES5 15.2.3.6
-if (!Object.defineProperty) {
+// http://es5.github.com/#x15.2.3.6
+
+// Patch for WebKit and IE8 standard mode
+// Designed by hax <hax.github.com>
+// related issue: https://github.com/kriskowal/es5-shim/issues#issue/5
+// IE8 Reference:
+// http://msdn.microsoft.com/en-us/library/dd282900.aspx
+// http://msdn.microsoft.com/en-us/library/dd229916.aspx
+// WebKit Bugs:
+// https://bugs.webkit.org/show_bug.cgi?id=36423
+
+function doesDefinePropertyWork(object) {
+ try {
+ Object.defineProperty(object, "sentinel", {});
+ return "sentinel" in object;
+ } catch (exception) {
+ // returns falsy
+ }
+}
+
+// check whether defineProperty works if it's given. Otherwise,
+// shim partially.
+if (Object.defineProperty) {
+ var definePropertyWorksOnObject = doesDefinePropertyWork({});
+ var definePropertyWorksOnDom = typeof document == "undefined" ||
+ doesDefinePropertyWork(document.createElement("div"));
+ if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {
+ var definePropertyFallback = Object.defineProperty;
+ }
+}
+
+if (!Object.defineProperty || definePropertyFallback) {
var ERR_NON_OBJECT_DESCRIPTOR = "Property description must be an object: ";
var ERR_NON_OBJECT_TARGET = "Object.defineProperty called on non-object: "
var ERR_ACCESSORS_NOT_SUPPORTED = "getters & setters can not be defined " +
"on this javascript engine";
Object.defineProperty = function defineProperty(object, property, descriptor) {
- if (typeof object !== "object" && typeof object !== "function")
+ if ((typeof object != "object" && typeof object != "function") || object === null)
throw new TypeError(ERR_NON_OBJECT_TARGET + object);
- if (typeof object !== "object" || object === null)
+ if ((typeof descriptor != "object" && typeof descriptor != "function") || descriptor === null)
throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);
+ // make a valiant attempt to use the real defineProperty
+ // for I8's DOM elements.
+ if (definePropertyFallback) {
+ try {
+ return definePropertyFallback.call(Object, object, property, descriptor);
+ } catch (exception) {
+ // try the shim if the real one doesn't work
+ }
+ }
+
// If it's a data property.
if (owns(descriptor, "value")) {
// fail silently if "writable", "enumerable", or "configurable"
@@ -641,7 +1043,7 @@ if (!Object.defineProperty) {
delete object[property];
object[property] = descriptor.value;
// Setting original `__proto__` back now.
- object.prototype;
+ object.__proto__ = prototype;
} else {
object[property] = descriptor.value;
}
@@ -660,6 +1062,7 @@ if (!Object.defineProperty) {
}
// ES5 15.2.3.7
+// http://es5.github.com/#x15.2.3.7
if (!Object.defineProperties) {
Object.defineProperties = function defineProperties(object, properties) {
for (var property in properties) {
@@ -671,6 +1074,7 @@ if (!Object.defineProperties) {
}
// ES5 15.2.3.8
+// http://es5.github.com/#x15.2.3.8
if (!Object.seal) {
Object.seal = function seal(object) {
// this is misleading and breaks feature-detection, but
@@ -681,6 +1085,7 @@ if (!Object.seal) {
}
// ES5 15.2.3.9
+// http://es5.github.com/#x15.2.3.9
if (!Object.freeze) {
Object.freeze = function freeze(object) {
// this is misleading and breaks feature-detection, but
@@ -696,7 +1101,7 @@ try {
} catch (exception) {
Object.freeze = (function freeze(freezeObject) {
return function freeze(object) {
- if (typeof object === "function") {
+ if (typeof object == "function") {
return object;
} else {
return freezeObject(object);
@@ -706,6 +1111,7 @@ try {
}
// ES5 15.2.3.10
+// http://es5.github.com/#x15.2.3.10
if (!Object.preventExtensions) {
Object.preventExtensions = function preventExtensions(object) {
// this is misleading and breaks feature-detection, but
@@ -716,6 +1122,7 @@ if (!Object.preventExtensions) {
}
// ES5 15.2.3.11
+// http://es5.github.com/#x15.2.3.11
if (!Object.isSealed) {
Object.isSealed = function isSealed(object) {
return false;
@@ -723,6 +1130,7 @@ if (!Object.isSealed) {
}
// ES5 15.2.3.12
+// http://es5.github.com/#x15.2.3.12
if (!Object.isFrozen) {
Object.isFrozen = function isFrozen(object) {
return false;
@@ -730,25 +1138,38 @@ if (!Object.isFrozen) {
}
// ES5 15.2.3.13
+// http://es5.github.com/#x15.2.3.13
if (!Object.isExtensible) {
Object.isExtensible = function isExtensible(object) {
- return true;
+ // 1. If Type(O) is not Object throw a TypeError exception.
+ if (Object(object) === object) {
+ throw new TypeError(); // TODO message
+ }
+ // 2. Return the Boolean value of the [[Extensible]] internal property of O.
+ var name = '';
+ while (owns(object, name)) {
+ name += '?';
+ }
+ object[name] = true;
+ var returnValue = owns(object, name);
+ delete object[name];
+ return returnValue;
};
}
// ES5 15.2.3.14
-// http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation
+// http://es5.github.com/#x15.2.3.14
if (!Object.keys) {
-
+ // http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation
var hasDontEnumBug = true,
dontEnums = [
- 'toString',
- 'toLocaleString',
- 'valueOf',
- 'hasOwnProperty',
- 'isPrototypeOf',
- 'propertyIsEnumerable',
- 'constructor'
+ "toString",
+ "toLocaleString",
+ "valueOf",
+ "hasOwnProperty",
+ "isPrototypeOf",
+ "propertyIsEnumerable",
+ "constructor"
],
dontEnumsLength = dontEnums.length;
@@ -757,10 +1178,7 @@ if (!Object.keys) {
Object.keys = function keys(object) {
- if (
- typeof object !== "object" && typeof object !== "function"
- || object === null
- )
+ if ((typeof object != "object" && typeof object != "function") || object === null)
throw new TypeError("Object.keys called on a non-object");
var keys = [];
@@ -790,22 +1208,39 @@ if (!Object.keys) {
//
// ES5 15.9.5.43
-// Format a Date object as a string according to a subset of the ISO-8601 standard.
-// Useful in Atom, among other things.
-if (!Date.prototype.toISOString) {
+// http://es5.github.com/#x15.9.5.43
+// This function returns a String value represent the instance in time
+// represented by this Date object. The format of the String is the Date Time
+// string format defined in 15.9.1.15. All fields are present in the String.
+// The time zone is always UTC, denoted by the suffix Z. If the time value of
+// this object is not a finite Number a RangeError exception is thrown.
+if (!Date.prototype.toISOString || (new Date(-62198755200000).toISOString().indexOf('-000001') === -1)) {
Date.prototype.toISOString = function toISOString() {
- return (
- this.getUTCFullYear() + "-" +
- (this.getUTCMonth() + 1) + "-" +
- this.getUTCDate() + "T" +
- this.getUTCHours() + ":" +
- this.getUTCMinutes() + ":" +
- this.getUTCSeconds() + "Z"
- );
+ var result, length, value, year;
+ if (!isFinite(this))
+ throw new RangeError;
+
+ // the date time string format is specified in 15.9.1.15.
+ result = [this.getUTCMonth() + 1, this.getUTCDate(),
+ this.getUTCHours(), this.getUTCMinutes(), this.getUTCSeconds()];
+ year = this.getUTCFullYear();
+ year = (year < 0 ? '-' : (year > 9999 ? '+' : '')) + ('00000' + Math.abs(year)).slice(0 <= year && year <= 9999 ? -4 : -6);
+
+ length = result.length;
+ while (length--) {
+ value = result[length];
+ // pad months, days, hours, minutes, and seconds to have two digits.
+ if (value < 10)
+ result[length] = "0" + value;
+ }
+ // pad milliseconds to have three digits.
+ return year + "-" + result.slice(0, 2).join("-") + "T" + result.slice(2).join(":") + "." +
+ ("000" + this.getUTCMilliseconds()).slice(-3) + "Z";
}
}
// ES5 15.9.4.4
+// http://es5.github.com/#x15.9.4.4
if (!Date.now) {
Date.now = function now() {
return new Date().getTime();
@@ -813,11 +1248,13 @@ if (!Date.now) {
}
// ES5 15.9.5.44
+// http://es5.github.com/#x15.9.5.44
+// This function provides a String representation of a Date object for use by
+// JSON.stringify (15.12.3).
if (!Date.prototype.toJSON) {
Date.prototype.toJSON = function toJSON(key) {
- // This function provides a String representation of a Date object for
- // use by JSON.stringify (15.12.3). When the toJSON method is called
- // with argument key, the following steps are taken:
+ // When the toJSON method is called with argument key, the following
+ // steps are taken:
// 1. Let O be the result of calling ToObject, giving it the this
// value as its argument.
@@ -827,10 +1264,10 @@ if (!Date.prototype.toJSON) {
// 4. Let toISO be the result of calling the [[Get]] internal method of
// O with argument "toISOString".
// 5. If IsCallable(toISO) is false, throw a TypeError exception.
- if (typeof this.toISOString !== "function")
- throw new TypeError();
+ if (typeof this.toISOString != "function")
+ throw new TypeError(); // TODO message
// 6. Return the result of calling the [[Call]] internal method of
- // toISO with O as the this value and an empty argument list.
+ // toISO with O as the this value and an empty argument list.
return this.toISOString();
// NOTE 1 The argument is ignored.
@@ -844,21 +1281,20 @@ if (!Date.prototype.toJSON) {
};
}
-// 15.9.4.2 Date.parse (string)
-// 15.9.1.15 Date Time String Format
-// Date.parse
+// ES5 15.9.4.2
+// http://es5.github.com/#x15.9.4.2
// based on work shared by Daniel Friesen (dantman)
// http://gist.github.com/303249
-if (isNaN(Date.parse("T00:00"))) {
+if (Date.parse("+275760-09-13T00:00:00.000Z") !== 8.64e15) {
// XXX global assignment won't work in embeddings that use
// an alternate object for the context.
Date = (function(NativeDate) {
// Date.length === 7
- var Date = function(Y, M, D, h, m, s, ms) {
+ var Date = function Date(Y, M, D, h, m, s, ms) {
var length = arguments.length;
if (this instanceof NativeDate) {
- var date = length === 1 && String(Y) === Y ? // isString(Y)
+ var date = length == 1 && String(Y) === Y ? // isString(Y)
// We explicitly pass it through parse:
new NativeDate(Date.parse(Y)) :
// We have to manually make calls depending on argument
@@ -878,33 +1314,26 @@ if (isNaN(Date.parse("T00:00"))) {
return NativeDate.apply(this, arguments);
};
- // 15.9.1.15 Date Time String Format
+ // 15.9.1.15 Date Time String Format.
var isoDateExpression = new RegExp("^" +
- "(?:" + // optional year-month-day
- "(" + // year capture
- "(?:[+-]\\d\\d)?" + // 15.9.1.15.1 Extended years
- "\\d\\d\\d\\d" + // four-digit year
- ")" +
- "(?:-" + // optional month-day
- "(\\d\\d)" + // month capture
- "(?:-" + // optional day
- "(\\d\\d)" + // day capture
- ")?" +
- ")?" +
- ")?" +
- "(?:T" + // hour:minute:second.subsecond
- "(\\d\\d)" + // hour capture
- ":(\\d\\d)" + // minute capture
- "(?::" + // optional :second.subsecond
- "(\\d\\d)" + // second capture
- "(?:\\.(\\d\\d\\d))?" + // milisecond capture
+ "(\\d{4}|[\+\-]\\d{6})" + // four-digit year capture or sign + 6-digit extended year
+ "(?:-(\\d{2})" + // optional month capture
+ "(?:-(\\d{2})" + // optional day capture
+ "(?:" + // capture hours:minutes:seconds.milliseconds
+ "T(\\d{2})" + // hours capture
+ ":(\\d{2})" + // minutes capture
+ "(?:" + // optional :seconds.milliseconds
+ ":(\\d{2})" + // seconds capture
+ "(?:\\.(\\d{3}))?" + // milliseconds capture
")?" +
- ")?" +
- "(?:" + // time zone
+ "(?:" + // capture UTC offset component
"Z|" + // UTC capture
- "([+-])(\\d\\d):(\\d\\d)" + // timezone offset
- // capture sign, hour, minute
- ")?" +
+ "(?:" + // offset specifier +/-hours:minutes
+ "([-+])" + // sign capture
+ "(\\d{2})" + // hours offset capture
+ ":(\\d{2})" + // minutes offset capture
+ ")" +
+ ")?)?)?)?" +
"$");
// Copy any custom methods a 3rd party library may have added
@@ -917,42 +1346,49 @@ if (isNaN(Date.parse("T00:00"))) {
Date.prototype = NativeDate.prototype;
Date.prototype.constructor = Date;
- // Upgrade Date.parse to handle the ISO dates we use
- // TODO review specification to ascertain whether it is
- // necessary to implement partial ISO date strings.
+ // Upgrade Date.parse to handle simplified ISO 8601 strings
Date.parse = function parse(string) {
var match = isoDateExpression.exec(string);
if (match) {
match.shift(); // kill match[0], the full match
- // recognize times without dates before normalizing the
- // numeric values, for later use
- var timeOnly = match[0] === undefined;
- // parse numerics
- for (var i = 0; i < 10; i++) {
- // skip + or - for the timezone offset
- if (i === 7)
- continue;
- // Note: parseInt would read 0-prefix numbers as
- // octal. Number constructor or unary + work better
- // here:
+ // parse months, days, hours, minutes, seconds, and milliseconds
+ for (var i = 1; i < 7; i++) {
+ // provide default values if necessary
match[i] = +(match[i] || (i < 3 ? 1 : 0));
// match[1] is the month. Months are 0-11 in JavaScript
- // Date objects, but 1-12 in ISO notation, so we
+ // `Date` objects, but 1-12 in ISO notation, so we
// decrement.
- if (i === 1)
+ if (i == 1)
match[i]--;
}
- // if no year-month-date is provided, return a milisecond
- // quantity instead of a UTC date number value.
- if (timeOnly)
- return ((match[3] * 60 + match[4]) * 60 + match[5]) * 1000 + match[6];
- // account for an explicit time zone offset if provided
- var offset = (match[8] * 60 + match[9]) * 60 * 1000;
- if (match[6] === "-")
- offset = -offset;
+ // parse the UTC offset component
+ var minuteOffset = +match.pop(), hourOffset = +match.pop(), sign = match.pop();
+
+ // compute the explicit time zone offset if specified
+ var offset = 0;
+ if (sign) {
+ // detect invalid offsets and return early
+ if (hourOffset > 23 || minuteOffset > 59)
+ return NaN;
+
+ // express the provided time zone offset in minutes. The offset is
+ // negative for time zones west of UTC; positive otherwise.
+ offset = (hourOffset * 60 + minuteOffset) * 6e4 * (sign == "+" ? -1 : 1);
+ }
- return NativeDate.UTC.apply(this, match.slice(0, 7)) + offset;
+ // Date.UTC for years between 0 and 99 converts year to 1900 + year
+ // The Gregorian calendar has a 400-year cycle, so
+ // to Date.UTC(year + 400, .... ) - 12622780800000 == Date.UTC(year, ...),
+ // where 12622780800000 - number of milliseconds in Gregorian calendar 400 years
+ var year = +match[0];
+ if (0 <= year && year <= 99) {
+ match[0] = year + 400;
+ return NativeDate.UTC.apply(this, match) + offset - 12622780800000;
+ }
+
+ // compute a new UTC date value, accounting for the optional offset
+ return NativeDate.UTC.apply(this, match) + offset;
}
return NativeDate.parse.apply(this, arguments);
};
@@ -967,3878 +1403,53 @@ if (isNaN(Date.parse("T00:00"))) {
//
// ES5 15.5.4.20
-if (!String.prototype.trim) {
+// http://es5.github.com/#x15.5.4.20
+var ws = "\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003" +
+ "\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028" +
+ "\u2029\uFEFF";
+if (!String.prototype.trim || ws.trim()) {
// http://blog.stevenlevithan.com/archives/faster-trim-javascript
- var trimBeginRegexp = /^\s\s*/;
- var trimEndRegexp = /\s\s*$/;
+ // http://perfectionkills.com/whitespace-deviations/
+ ws = "[" + ws + "]";
+ var trimBeginRegexp = new RegExp("^" + ws + ws + "*"),
+ trimEndRegexp = new RegExp(ws + ws + "*$");
String.prototype.trim = function trim() {
- return String(this).replace(trimBeginRegexp, '').replace(trimEndRegexp, '');
+ return String(this).replace(trimBeginRegexp, "").replace(trimEndRegexp, "");
};
}
-});/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Mozilla Skywriter.
- *
- * The Initial Developer of the Original Code is
- * Mozilla.
- * Portions created by the Initial Developer are Copyright (C) 2009
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Kevin Dangoor (kdangoor@mozilla.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/ace', ['require', 'exports', 'module' , 'pilot/index', 'pilot/fixoldbrowsers', 'pilot/plugin_manager', 'pilot/dom', 'pilot/event', 'ace/editor', 'ace/edit_session', 'ace/undomanager', 'ace/virtual_renderer', 'ace/theme/textmate', 'pilot/environment'], function(require, exports, module) {
-
- require("pilot/index");
- require("pilot/fixoldbrowsers");
- var catalog = require("pilot/plugin_manager").catalog;
- catalog.registerPlugins([ "pilot/index" ]);
-
- var Dom = require("pilot/dom");
- var Event = require("pilot/event");
-
- var Editor = require("ace/editor").Editor;
- var EditSession = require("ace/edit_session").EditSession;
- var UndoManager = require("ace/undomanager").UndoManager;
- var Renderer = require("ace/virtual_renderer").VirtualRenderer;
-
- exports.edit = function(el) {
- if (typeof(el) == "string") {
- el = document.getElementById(el);
- }
-
- var doc = new EditSession(Dom.getInnerText(el));
- doc.setUndoManager(new UndoManager());
- el.innerHTML = '';
-
- var editor = new Editor(new Renderer(el, require("ace/theme/textmate")));
- editor.setSession(doc);
-
- var env = require("pilot/environment").create();
- catalog.startupPlugins({ env: env }).then(function() {
- env.document = doc;
- env.editor = editor;
- editor.resize();
- Event.addListener(window, "resize", function() {
- editor.resize();
- });
- el.env = env;
- });
- // Store env on editor such that it can be accessed later on from
- // the returned object.
- editor.env = env;
- return editor;
- };
-});/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Mozilla Skywriter.
- *
- * The Initial Developer of the Original Code is
- * Mozilla.
- * Portions created by the Initial Developer are Copyright (C) 2009
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Kevin Dangoor (kdangoor@mozilla.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('pilot/index', ['require', 'exports', 'module' , 'pilot/fixoldbrowsers', 'pilot/types/basic', 'pilot/types/command', 'pilot/types/settings', 'pilot/commands/settings', 'pilot/commands/basic', 'pilot/settings/canon', 'pilot/canon'], function(require, exports, module) {
-
-exports.startup = function(data, reason) {
- require('pilot/fixoldbrowsers');
-
- require('pilot/types/basic').startup(data, reason);
- require('pilot/types/command').startup(data, reason);
- require('pilot/types/settings').startup(data, reason);
- require('pilot/commands/settings').startup(data, reason);
- require('pilot/commands/basic').startup(data, reason);
- // require('pilot/commands/history').startup(data, reason);
- require('pilot/settings/canon').startup(data, reason);
- require('pilot/canon').startup(data, reason);
-};
-
-exports.shutdown = function(data, reason) {
- require('pilot/types/basic').shutdown(data, reason);
- require('pilot/types/command').shutdown(data, reason);
- require('pilot/types/settings').shutdown(data, reason);
- require('pilot/commands/settings').shutdown(data, reason);
- require('pilot/commands/basic').shutdown(data, reason);
- // require('pilot/commands/history').shutdown(data, reason);
- require('pilot/settings/canon').shutdown(data, reason);
- require('pilot/canon').shutdown(data, reason);
-};
-
-
-});
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Mozilla Skywriter.
- *
- * The Initial Developer of the Original Code is
- * Mozilla.
- * Portions created by the Initial Developer are Copyright (C) 2009
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Joe Walker (jwalker@mozilla.com)
- * Kevin Dangoor (kdangoor@mozilla.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('pilot/types/basic', ['require', 'exports', 'module' , 'pilot/types'], function(require, exports, module) {
-
-var types = require("pilot/types");
-var Type = types.Type;
-var Conversion = types.Conversion;
-var Status = types.Status;
-
-/**
- * These are the basic types that we accept. They are vaguely based on the
- * Jetpack settings system (https://wiki.mozilla.org/Labs/Jetpack/JEP/24)
- * although clearly more restricted.
- *
- * <p>In addition to these types, Jetpack also accepts range, member, password
- * that we are thinking of adding.
- *
- * <p>This module probably should not be accessed directly, but instead used
- * through types.js
- */
-
-/**
- * 'text' is the default if no type is given.
- */
-var text = new Type();
-
-text.stringify = function(value) {
- return value;
-};
-
-text.parse = function(value) {
- if (typeof value != 'string') {
- throw new Error('non-string passed to text.parse()');
- }
- return new Conversion(value);
-};
-
-text.name = 'text';
-
-/**
- * We don't currently plan to distinguish between integers and floats
- */
-var number = new Type();
-
-number.stringify = function(value) {
- if (!value) {
- return null;
- }
- return '' + value;
-};
-
-number.parse = function(value) {
- if (typeof value != 'string') {
- throw new Error('non-string passed to number.parse()');
- }
-
- if (value.replace(/\s/g, '').length === 0) {
- return new Conversion(null, Status.INCOMPLETE, '');
- }
-
- var reply = new Conversion(parseInt(value, 10));
- if (isNaN(reply.value)) {
- reply.status = Status.INVALID;
- reply.message = 'Can\'t convert "' + value + '" to a number.';
- }
-
- return reply;
-};
-
-number.decrement = function(value) {
- return value - 1;
-};
-
-number.increment = function(value) {
- return value + 1;
-};
-
-number.name = 'number';
-
-/**
- * One of a known set of options
- */
-function SelectionType(typeSpec) {
- if (!Array.isArray(typeSpec.data) && typeof typeSpec.data !== 'function') {
- throw new Error('instances of SelectionType need typeSpec.data to be an array or function that returns an array:' + JSON.stringify(typeSpec));
- }
- Object.keys(typeSpec).forEach(function(key) {
- this[key] = typeSpec[key];
- }, this);
-};
-
-SelectionType.prototype = new Type();
-
-SelectionType.prototype.stringify = function(value) {
- return value;
-};
-
-SelectionType.prototype.parse = function(str) {
- if (typeof str != 'string') {
- throw new Error('non-string passed to parse()');
- }
- if (!this.data) {
- throw new Error('Missing data on selection type extension.');
- }
- var data = (typeof(this.data) === 'function') ? this.data() : this.data;
-
- // The matchedValue could be the boolean value false
- var hasMatched = false;
- var matchedValue;
- var completions = [];
- data.forEach(function(option) {
- if (str == option) {
- matchedValue = this.fromString(option);
- hasMatched = true;
- }
- else if (option.indexOf(str) === 0) {
- completions.push(this.fromString(option));
- }
- }, this);
-
- if (hasMatched) {
- return new Conversion(matchedValue);
- }
- else {
- // This is something of a hack it basically allows us to tell the
- // setting type to forget its last setting hack.
- if (this.noMatch) {
- this.noMatch();
- }
-
- if (completions.length > 0) {
- var msg = 'Possibilities' +
- (str.length === 0 ? '' : ' for \'' + str + '\'');
- return new Conversion(null, Status.INCOMPLETE, msg, completions);
- }
- else {
- var msg = 'Can\'t use \'' + str + '\'.';
- return new Conversion(null, Status.INVALID, msg, completions);
- }
- }
-};
-
-SelectionType.prototype.fromString = function(str) {
- return str;
-};
-
-SelectionType.prototype.decrement = function(value) {
- var data = (typeof this.data === 'function') ? this.data() : this.data;
- var index;
- if (value == null) {
- index = data.length - 1;
- }
- else {
- var name = this.stringify(value);
- var index = data.indexOf(name);
- index = (index === 0 ? data.length - 1 : index - 1);
- }
- return this.fromString(data[index]);
-};
-
-SelectionType.prototype.increment = function(value) {
- var data = (typeof this.data === 'function') ? this.data() : this.data;
- var index;
- if (value == null) {
- index = 0;
- }
- else {
- var name = this.stringify(value);
- var index = data.indexOf(name);
- index = (index === data.length - 1 ? 0 : index + 1);
- }
- return this.fromString(data[index]);
-};
-
-SelectionType.prototype.name = 'selection';
-
-/**
- * SelectionType is a base class for other types
- */
-exports.SelectionType = SelectionType;
-
-/**
- * true/false values
- */
-var bool = new SelectionType({
- name: 'bool',
- data: [ 'true', 'false' ],
- stringify: function(value) {
- return '' + value;
- },
- fromString: function(str) {
- return str === 'true' ? true : false;
- }
-});
-
-
-/**
- * A we don't know right now, but hope to soon.
- */
-function DeferredType(typeSpec) {
- if (typeof typeSpec.defer !== 'function') {
- throw new Error('Instances of DeferredType need typeSpec.defer to be a function that returns a type');
- }
- Object.keys(typeSpec).forEach(function(key) {
- this[key] = typeSpec[key];
- }, this);
-};
-
-DeferredType.prototype = new Type();
-
-DeferredType.prototype.stringify = function(value) {
- return this.defer().stringify(value);
-};
-
-DeferredType.prototype.parse = function(value) {
- return this.defer().parse(value);
-};
-
-DeferredType.prototype.decrement = function(value) {
- var deferred = this.defer();
- return (deferred.decrement ? deferred.decrement(value) : undefined);
-};
-
-DeferredType.prototype.increment = function(value) {
- var deferred = this.defer();
- return (deferred.increment ? deferred.increment(value) : undefined);
-};
-
-DeferredType.prototype.name = 'deferred';
-
-/**
- * DeferredType is a base class for other types
- */
-exports.DeferredType = DeferredType;
-
-
-/**
- * A set of objects of the same type
- */
-function ArrayType(typeSpec) {
- if (typeSpec instanceof Type) {
- this.subtype = typeSpec;
- }
- else if (typeof typeSpec === 'string') {
- this.subtype = types.getType(typeSpec);
- if (this.subtype == null) {
- throw new Error('Unknown array subtype: ' + typeSpec);
- }
- }
- else {
- throw new Error('Can\' handle array subtype');
- }
-};
-
-ArrayType.prototype = new Type();
-
-ArrayType.prototype.stringify = function(values) {
- // TODO: Check for strings with spaces and add quotes
- return values.join(' ');
-};
-
-ArrayType.prototype.parse = function(value) {
- return this.defer().parse(value);
-};
-
-ArrayType.prototype.name = 'array';
-
-/**
- * Registration and de-registration.
- */
-var isStarted = false;
-exports.startup = function() {
- if (isStarted) {
- return;
- }
- isStarted = true;
- types.registerType(text);
- types.registerType(number);
- types.registerType(bool);
- types.registerType(SelectionType);
- types.registerType(DeferredType);
- types.registerType(ArrayType);
-};
-
-exports.shutdown = function() {
- isStarted = false;
- types.unregisterType(text);
- types.unregisterType(number);
- types.unregisterType(bool);
- types.unregisterType(SelectionType);
- types.unregisterType(DeferredType);
- types.unregisterType(ArrayType);
-};
-
-
-});
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Skywriter.
- *
- * The Initial Developer of the Original Code is
- * Mozilla.
- * Portions created by the Initial Developer are Copyright (C) 2009
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Joe Walker (jwalker@mozilla.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('pilot/types', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-/**
- * Some types can detect validity, that is to say they can distinguish between
- * valid and invalid values.
- * TODO: Change these constants to be numbers for more performance?
- */
-var Status = {
- /**
- * The conversion process worked without any problem, and the value is
- * valid. There are a number of failure states, so the best way to check
- * for failure is (x !== Status.VALID)
- */
- VALID: {
- toString: function() { return 'VALID'; },
- valueOf: function() { return 0; }
- },
-
- /**
- * A conversion process failed, however it was noted that the string
- * provided to 'parse()' could be VALID by the addition of more characters,
- * so the typing may not be actually incorrect yet, just unfinished.
- * @see Status.INVALID
- */
- INCOMPLETE: {
- toString: function() { return 'INCOMPLETE'; },
- valueOf: function() { return 1; }
- },
-
- /**
- * The conversion process did not work, the value should be null and a
- * reason for failure should have been provided. In addition some completion
- * values may be available.
- * @see Status.INCOMPLETE
- */
- INVALID: {
- toString: function() { return 'INVALID'; },
- valueOf: function() { return 2; }
- },
-
- /**
- * A combined status is the worser of the provided statuses
- */
- combine: function(statuses) {
- var combined = Status.VALID;
- for (var i = 0; i < statuses.length; i++) {
- if (statuses[i].valueOf() > combined.valueOf()) {
- combined = statuses[i];
- }
- }
- return combined;
- }
-};
-exports.Status = Status;
-
-/**
- * The type.parse() method returns a Conversion to inform the user about not
- * only the result of a Conversion but also about what went wrong.
- * We could use an exception, and throw if the conversion failed, but that
- * seems to violate the idea that exceptions should be exceptional. Typos are
- * not. Also in order to store both a status and a message we'd still need
- * some sort of exception type...
- */
-function Conversion(value, status, message, predictions) {
- /**
- * The result of the conversion process. Will be null if status != VALID
- */
- this.value = value;
-
- /**
- * The status of the conversion.
- * @see Status
- */
- this.status = status || Status.VALID;
-
- /**
- * A message to go with the conversion. This could be present for any status
- * including VALID in the case where we want to note a warning for example.
- * I18N: On the one hand this nasty and un-internationalized, however with
- * a command line it is hard to know where to start.
- */
- this.message = message;
-
- /**
- * A array of strings which are the systems best guess at better inputs than
- * the one presented.
- * We generally expect there to be about 7 predictions (to match human list
- * comprehension ability) however it is valid to provide up to about 20,
- * or less. It is the job of the predictor to decide a smart cut-off.
- * For example if there are 4 very good matches and 4 very poor ones,
- * probably only the 4 very good matches should be presented.
- */
- this.predictions = predictions || [];
-}
-exports.Conversion = Conversion;
-
-/**
- * Most of our types are 'static' e.g. there is only one type of 'text', however
- * some types like 'selection' and 'deferred' are customizable. The basic
- * Type type isn't useful, but does provide documentation about what types do.
- */
-function Type() {
-};
-Type.prototype = {
- /**
- * Convert the given <tt>value</tt> to a string representation.
- * Where possible, there should be round-tripping between values and their
- * string representations.
- */
- stringify: function(value) { throw new Error("not implemented"); },
-
- /**
- * Convert the given <tt>str</tt> to an instance of this type.
- * Where possible, there should be round-tripping between values and their
- * string representations.
- * @return Conversion
- */
- parse: function(str) { throw new Error("not implemented"); },
-
- /**
- * The plug-in system, and other things need to know what this type is
- * called. The name alone is not enough to fully specify a type. Types like
- * 'selection' and 'deferred' need extra data, however this function returns
- * only the name, not the extra data.
- * <p>In old bespin, equality was based on the name. This may turn out to be
- * important in Ace too.
- */
- name: undefined,
-
- /**
- * If there is some concept of a higher value, return it,
- * otherwise return undefined.
- */
- increment: function(value) {
- return undefined;
- },
-
- /**
- * If there is some concept of a lower value, return it,
- * otherwise return undefined.
- */
- decrement: function(value) {
- return undefined;
- },
-
- /**
- * There is interesting information (like predictions) in a conversion of
- * nothing, the output of this can sometimes be customized.
- * @return Conversion
- */
- getDefault: function() {
- return this.parse('');
- }
-};
-exports.Type = Type;
-
-/**
- * Private registry of types
- * Invariant: types[name] = type.name
- */
-var types = {};
-
-/**
- * Add a new type to the list available to the system.
- * You can pass 2 things to this function - either an instance of Type, in
- * which case we return this instance when #getType() is called with a 'name'
- * that matches type.name.
- * Also you can pass in a constructor (i.e. function) in which case when
- * #getType() is called with a 'name' that matches Type.prototype.name we will
- * pass the typeSpec into this constructor. See #reconstituteType().
- */
-exports.registerType = function(type) {
- if (typeof type === 'object') {
- if (type instanceof Type) {
- if (!type.name) {
- throw new Error('All registered types must have a name');
- }
- types[type.name] = type;
- }
- else {
- throw new Error('Can\'t registerType using: ' + type);
- }
- }
- else if (typeof type === 'function') {
- if (!type.prototype.name) {
- throw new Error('All registered types must have a name');
- }
- types[type.prototype.name] = type;
- }
- else {
- throw new Error('Unknown type: ' + type);
- }
-};
-
-exports.registerTypes = function registerTypes(types) {
- Object.keys(types).forEach(function (name) {
- var type = types[name];
- type.name = name;
- exports.registerType(type);
- });
-};
-
-/**
- * Remove a type from the list available to the system
- */
-exports.deregisterType = function(type) {
- delete types[type.name];
-};
-
-/**
- * See description of #exports.registerType()
- */
-function reconstituteType(name, typeSpec) {
- if (name.substr(-2) === '[]') { // i.e. endsWith('[]')
- var subtypeName = name.slice(0, -2);
- return new types['array'](subtypeName);
- }
-
- var type = types[name];
- if (typeof type === 'function') {
- type = new type(typeSpec);
- }
- return type;
-}
-
-/**
- * Find a type, previously registered using #registerType()
- */
-exports.getType = function(typeSpec) {
- if (typeof typeSpec === 'string') {
- return reconstituteType(typeSpec);
- }
-
- if (typeof typeSpec === 'object') {
- if (!typeSpec.name) {
- throw new Error('Missing \'name\' member to typeSpec');
- }
- return reconstituteType(typeSpec.name, typeSpec);
- }
-
- throw new Error('Can\'t extract type from ' + typeSpec);
-};
-
-
-});
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Mozilla Skywriter.
- *
- * The Initial Developer of the Original Code is
- * Mozilla.
- * Portions created by the Initial Developer are Copyright (C) 2009
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Joe Walker (jwalker@mozilla.com)
- * Kevin Dangoor (kdangoor@mozilla.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('pilot/types/command', ['require', 'exports', 'module' , 'pilot/canon', 'pilot/types/basic', 'pilot/types'], function(require, exports, module) {
-
-var canon = require("pilot/canon");
-var SelectionType = require("pilot/types/basic").SelectionType;
-var types = require("pilot/types");
-
-
-/**
- * Select from the available commands
- */
-var command = new SelectionType({
- name: 'command',
- data: function() {
- return canon.getCommandNames();
- },
- stringify: function(command) {
- return command.name;
- },
- fromString: function(str) {
- return canon.getCommand(str);
- }
-});
-
-
-/**
- * Registration and de-registration.
- */
-exports.startup = function() {
- types.registerType(command);
-};
-
-exports.shutdown = function() {
- types.unregisterType(command);
-};
-
-
-});
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Mozilla Skywriter.
- *
- * The Initial Developer of the Original Code is
- * Mozilla.
- * Portions created by the Initial Developer are Copyright (C) 2009
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Joe Walker (jwalker@mozilla.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('pilot/canon', ['require', 'exports', 'module' , 'pilot/console', 'pilot/stacktrace', 'pilot/oop', 'pilot/useragent', 'pilot/keys', 'pilot/event_emitter', 'pilot/typecheck', 'pilot/catalog', 'pilot/types', 'pilot/lang'], function(require, exports, module) {
-
-var console = require('pilot/console');
-var Trace = require('pilot/stacktrace').Trace;
-var oop = require('pilot/oop');
-var useragent = require('pilot/useragent');
-var keyUtil = require('pilot/keys');
-var EventEmitter = require('pilot/event_emitter').EventEmitter;
-var typecheck = require('pilot/typecheck');
-var catalog = require('pilot/catalog');
-var Status = require('pilot/types').Status;
-var types = require('pilot/types');
-var lang = require('pilot/lang');
-
-/*
-// TODO: this doesn't belong here - or maybe anywhere?
-var dimensionsChangedExtensionSpec = {
- name: 'dimensionsChanged',
- description: 'A dimensionsChanged is a way to be notified of ' +
- 'changes to the dimension of Skywriter'
-};
-exports.startup = function(data, reason) {
- catalog.addExtensionSpec(commandExtensionSpec);
-};
-exports.shutdown = function(data, reason) {
- catalog.removeExtensionSpec(commandExtensionSpec);
-};
-*/
-
-var commandExtensionSpec = {
- name: 'command',
- description: 'A command is a bit of functionality with optional ' +
- 'typed arguments which can do something small like moving ' +
- 'the cursor around the screen, or large like cloning a ' +
- 'project from VCS.',
- indexOn: 'name'
-};
-
-exports.startup = function(data, reason) {
- // TODO: this is probably all kinds of evil, but we need something working
- catalog.addExtensionSpec(commandExtensionSpec);
-};
-
-exports.shutdown = function(data, reason) {
- catalog.removeExtensionSpec(commandExtensionSpec);
-};
-
-/**
- * Manage a list of commands in the current canon
- */
-
-/**
- * A Command is a discrete action optionally with a set of ways to customize
- * how it happens. This is here for documentation purposes.
- * TODO: Document better
- */
-var thingCommand = {
- name: 'thing',
- description: 'thing is an example command',
- params: [{
- name: 'param1',
- description: 'an example parameter',
- type: 'text',
- defaultValue: null
- }],
- exec: function(env, args, request) {
- thing();
- }
-};
-
-/**
- * A lookup hash of our registered commands
- */
-var commands = {};
-
-/**
- * A lookup has for command key bindings that use a string as sender.
- */
-var commmandKeyBinding = {};
-
-/**
- * Array with command key bindings that use a function to determ the sender.
- */
-var commandKeyBindingFunc = { };
-
-function splitSafe(s, separator, limit, bLowerCase) {
- return (bLowerCase && s.toLowerCase() || s)
- .replace(/(?:^\s+|\n|\s+$)/g, "")
- .split(new RegExp("[\\s ]*" + separator + "[\\s ]*", "g"), limit || 999);
-}
-
-function parseKeys(keys, val, ret) {
- var key,
- hashId = 0,
- parts = splitSafe(keys, "\\-", null, true),
- i = 0,
- l = parts.length;
-
- for (; i < l; ++i) {
- if (keyUtil.KEY_MODS[parts[i]])
- hashId = hashId | keyUtil.KEY_MODS[parts[i]];
- else
- key = parts[i] || "-"; //when empty, the splitSafe removed a '-'
- }
-
- if (ret == null) {
- return {
- key: key,
- hashId: hashId
- }
- } else {
- (ret[hashId] || (ret[hashId] = {}))[key] = val;
- }
-}
-
-var platform = useragent.isMac ? "mac" : "win";
-function buildKeyHash(command) {
- var binding = command.bindKey,
- key = binding[platform],
- ckb = commmandKeyBinding,
- ckbf = commandKeyBindingFunc
-
- if (!binding.sender) {
- throw new Error('All key bindings must have a sender');
- }
- if (!binding.mac && binding.mac !== null) {
- throw new Error('All key bindings must have a mac key binding');
- }
- if (!binding.win && binding.win !== null) {
- throw new Error('All key bindings must have a windows key binding');
- }
- if(!binding[platform]) {
- // No keymapping for this platform.
- return;
- }
- if (typeof binding.sender == 'string') {
- var targets = splitSafe(binding.sender, "\\|", null, true);
- targets.forEach(function(target) {
- if (!ckb[target]) {
- ckb[target] = { };
- }
- key.split("|").forEach(function(keyPart) {
- parseKeys(keyPart, command, ckb[target]);
- });
- });
- } else if (typecheck.isFunction(binding.sender)) {
- var val = {
- command: command,
- sender: binding.sender
- };
-
- keyData = parseKeys(key);
- if (!ckbf[keyData.hashId]) {
- ckbf[keyData.hashId] = { };
- }
- if (!ckbf[keyData.hashId][keyData.key]) {
- ckbf[keyData.hashId][keyData.key] = [ val ];
- } else {
- ckbf[keyData.hashId][keyData.key].push(val);
- }
- } else {
- throw new Error('Key binding must have a sender that is a string or function');
- }
-}
-
-function findKeyCommand(env, sender, hashId, textOrKey) {
- // Convert keyCode to the string representation.
- if (typecheck.isNumber(textOrKey)) {
- textOrKey = keyUtil.keyCodeToString(textOrKey);
- }
-
- // Check bindings with functions as sender first.
- var bindFuncs = (commandKeyBindingFunc[hashId] || {})[textOrKey] || [];
- for (var i = 0; i < bindFuncs.length; i++) {
- if (bindFuncs[i].sender(env, sender, hashId, textOrKey)) {
- return bindFuncs[i].command;
- }
- }
-
- var ckbr = commmandKeyBinding[sender];
- return ckbr && ckbr[hashId] && ckbr[hashId][textOrKey];
-}
-
-function execKeyCommand(env, sender, hashId, textOrKey) {
- var command = findKeyCommand(env, sender, hashId, textOrKey);
- if (command) {
- return exec(command, env, sender, { });
- } else {
- return false;
- }
-}
-
-/**
- * A sorted list of command names, we regularly want them in order, so pre-sort
- */
-var commandNames = [];
-
-/**
- * This registration method isn't like other Ace registration methods because
- * it doesn't return a decorated command because there is no functional
- * decoration to be done.
- * TODO: Are we sure that in the future there will be no such decoration?
- */
-function addCommand(command) {
- if (!command.name) {
- throw new Error('All registered commands must have a name');
- }
- if (command.params == null) {
- command.params = [];
- }
- if (!Array.isArray(command.params)) {
- throw new Error('command.params must be an array in ' + command.name);
- }
- // Replace the type
- command.params.forEach(function(param) {
- if (!param.name) {
- throw new Error('In ' + command.name + ': all params must have a name');
- }
- upgradeType(command.name, param);
- }, this);
- commands[command.name] = command;
-
- if (command.bindKey) {
- buildKeyHash(command);
- }
-
- commandNames.push(command.name);
- commandNames.sort();
-};
-
-function upgradeType(name, param) {
- var lookup = param.type;
- param.type = types.getType(lookup);
- if (param.type == null) {
- throw new Error('In ' + name + '/' + param.name +
- ': can\'t find type for: ' + JSON.stringify(lookup));
- }
-}
-
-function removeCommand(command) {
- var name = (typeof command === 'string' ? command : command.name);
- command = commands[name];
- delete commands[name];
- lang.arrayRemove(commandNames, name);
-
- // exaustive search is a little bit brute force but since removeCommand is
- // not a performance critical operation this should be OK
- var ckb = commmandKeyBinding;
- for (var k1 in ckb) {
- for (var k2 in ckb[k1]) {
- for (var k3 in ckb[k1][k2]) {
- if (ckb[k1][k2][k3] == command)
- delete ckb[k1][k2][k3];
- }
- }
- }
-
- var ckbf = commandKeyBindingFunc;
- for (var k1 in ckbf) {
- for (var k2 in ckbf[k1]) {
- ckbf[k1][k2].forEach(function(cmd, i) {
- if (cmd.command == command) {
- ckbf[k1][k2].splice(i, 1);
- }
- })
- }
- }
-};
-
-function getCommand(name) {
- return commands[name];
-};
-
-function getCommandNames() {
- return commandNames;
-};
-
-/**
- * Default ArgumentProvider that is used if no ArgumentProvider is provided
- * by the command's sender.
- */
-function defaultArgsProvider(request, callback) {
- var args = request.args,
- params = request.command.params;
-
- for (var i = 0; i < params.length; i++) {
- var param = params[i];
-
- // If the parameter is already valid, then don't ask for it anymore.
- if (request.getParamStatus(param) != Status.VALID ||
- // Ask for optional parameters as well.
- param.defaultValue === null)
- {
- var paramPrompt = param.description;
- if (param.defaultValue === null) {
- paramPrompt += " (optional)";
- }
- var value = prompt(paramPrompt, param.defaultValue || "");
- // No value but required -> nope.
- if (!value) {
- callback();
- return;
- } else {
- args[param.name] = value;
- }
- }
- }
- callback();
-}
-
-/**
- * Entry point for keyboard accelerators or anything else that wants to execute
- * a command. A new request object is created and a check performed, if the
- * passed in arguments are VALID/INVALID or INCOMPLETE. If they are INCOMPLETE
- * the ArgumentProvider on the sender is called or otherwise the default
- * ArgumentProvider to get the still required arguments.
- * If they are valid (or valid after the ArgumentProvider is done), the command
- * is executed.
- *
- * @param command Either a command, or the name of one
- * @param env Current environment to execute the command in
- * @param sender String that should be the same as the senderObject stored on
- * the environment in env[sender]
- * @param args Arguments for the command
- * @param typed (Optional)
- */
-function exec(command, env, sender, args, typed) {
- if (typeof command === 'string') {
- command = commands[command];
- }
- if (!command) {
- // TODO: Should we complain more than returning false?
- return false;
- }
-
- var request = new Request({
- sender: sender,
- command: command,
- args: args || {},
- typed: typed
- });
-
- /**
- * Executes the command and ensures request.done is called on the request in
- * case it's not marked to be done already or async.
- */
- function execute() {
- command.exec(env, request.args, request);
-
- // If the request isn't asnync and isn't done, then make it done.
- if (!request.isAsync && !request.isDone) {
- request.done();
- }
- }
-
-
- if (request.getStatus() == Status.INVALID) {
- console.error("Canon.exec: Invalid parameter(s) passed to " +
- command.name);
- return false;
- }
- // If the request isn't complete yet, try to complete it.
- else if (request.getStatus() == Status.INCOMPLETE) {
- // Check if the sender has a ArgsProvider, otherwise use the default
- // build in one.
- var argsProvider;
- var senderObj = env[sender];
- if (!senderObj || !senderObj.getArgsProvider ||
- !(argsProvider = senderObj.getArgsProvider()))
- {
- argsProvider = defaultArgsProvider;
- }
-
- // Ask the paramProvider to complete the request.
- argsProvider(request, function() {
- if (request.getStatus() == Status.VALID) {
- execute();
- }
- });
- return true;
- } else {
- execute();
- return true;
- }
-};
-
-exports.removeCommand = removeCommand;
-exports.addCommand = addCommand;
-exports.getCommand = getCommand;
-exports.getCommandNames = getCommandNames;
-exports.findKeyCommand = findKeyCommand;
-exports.exec = exec;
-exports.execKeyCommand = execKeyCommand;
-exports.upgradeType = upgradeType;
-
-
-/**
- * We publish a 'output' event whenever new command begins output
- * TODO: make this more obvious
- */
-oop.implement(exports, EventEmitter);
-
-
-/**
- * Current requirements are around displaying the command line, and provision
- * of a 'history' command and cursor up|down navigation of history.
- * <p>Future requirements could include:
- * <ul>
- * <li>Multiple command lines
- * <li>The ability to recall key presses (i.e. requests with no output) which
- * will likely be needed for macro recording or similar
- * <li>The ability to store the command history either on the server or in the
- * browser local storage.
- * </ul>
- * <p>The execute() command doesn't really live here, except as part of that
- * last future requirement, and because it doesn't really have anywhere else to
- * live.
- */
-
-/**
- * The array of requests that wish to announce their presence
- */
-var requests = [];
-
-/**
- * How many requests do we store?
- */
-var maxRequestLength = 100;
-
-/**
- * To create an invocation, you need to do something like this (all the ctor
- * args are optional):
- * <pre>
- * var request = new Request({
- * command: command,
- * args: args,
- * typed: typed
- * });
- * </pre>
- * @constructor
- */
-function Request(options) {
- options = options || {};
-
- // Will be used in the keyboard case and the cli case
- this.command = options.command;
-
- // Will be used only in the cli case
- this.args = options.args;
- this.typed = options.typed;
-
- // Have we been initialized?
- this._begunOutput = false;
-
- this.start = new Date();
- this.end = null;
- this.completed = false;
- this.error = false;
-};
-
-oop.implement(Request.prototype, EventEmitter);
-
-/**
- * Return the status of a parameter on the request object.
- */
-Request.prototype.getParamStatus = function(param) {
- var args = this.args || {};
-
- // Check if there is already a value for this parameter.
- if (param.name in args) {
- // If there is no value set and then the value is VALID if it's not
- // required or INCOMPLETE if not set yet.
- if (args[param.name] == null) {
- if (param.defaultValue === null) {
- return Status.VALID;
- } else {
- return Status.INCOMPLETE;
- }
- }
-
- // Check if the parameter value is valid.
- var reply,
- // The passed in value when parsing a type is a string.
- argsValue = args[param.name].toString();
-
- // Type.parse can throw errors.
- try {
- reply = param.type.parse(argsValue);
- } catch (e) {
- return Status.INVALID;
- }
-
- if (reply.status != Status.VALID) {
- return reply.status;
- }
- }
- // Check if the param is marked as required.
- else if (param.defaultValue === undefined) {
- // The parameter is not set on the args object but it's required,
- // which means, things are invalid.
- return Status.INCOMPLETE;
- }
-
- return Status.VALID;
-}
-
-/**
- * Return the status of a parameter name on the request object.
- */
-Request.prototype.getParamNameStatus = function(paramName) {
- var params = this.command.params || [];
-
- for (var i = 0; i < params.length; i++) {
- if (params[i].name == paramName) {
- return this.getParamStatus(params[i]);
- }
- }
-
- throw "Parameter '" + paramName +
- "' not defined on command '" + this.command.name + "'";
-}
-
-/**
- * Checks if all required arguments are set on the request such that it can
- * get executed.
- */
-Request.prototype.getStatus = function() {
- var args = this.args || {},
- params = this.command.params;
-
- // If there are not parameters, then it's valid.
- if (!params || params.length == 0) {
- return Status.VALID;
- }
-
- var status = [];
- for (var i = 0; i < params.length; i++) {
- status.push(this.getParamStatus(params[i]));
- }
-
- return Status.combine(status);
-}
-
-/**
- * Lazy init to register with the history should only be done on output.
- * init() is expensive, and won't be used in the majority of cases
- */
-Request.prototype._beginOutput = function() {
- this._begunOutput = true;
- this.outputs = [];
-
- requests.push(this);
- // This could probably be optimized with some maths, but 99.99% of the
- // time we will only be off by one, and I'm feeling lazy.
- while (requests.length > maxRequestLength) {
- requests.shiftObject();
- }
-
- exports._dispatchEvent('output', { requests: requests, request: this });
-};
-
-/**
- * Sugar for:
- * <pre>request.error = true; request.done(output);</pre>
- */
-Request.prototype.doneWithError = function(content) {
- this.error = true;
- this.done(content);
-};
-
-/**
- * Declares that this function will not be automatically done when
- * the command exits
- */
-Request.prototype.async = function() {
- this.isAsync = true;
- if (!this._begunOutput) {
- this._beginOutput();
- }
-};
-
-/**
- * Complete the currently executing command with successful output.
- * @param output Either DOM node, an SproutCore element or something that
- * can be used in the content of a DIV to create a DOM node.
- */
-Request.prototype.output = function(content) {
- if (!this._begunOutput) {
- this._beginOutput();
- }
-
- if (typeof content !== 'string' && !(content instanceof Node)) {
- content = content.toString();
- }
-
- this.outputs.push(content);
- this.isDone = true;
- this._dispatchEvent('output', {});
-
- return this;
-};
-
-/**
- * All commands that do output must call this to indicate that the command
- * has finished execution.
- */
-Request.prototype.done = function(content) {
- this.completed = true;
- this.end = new Date();
- this.duration = this.end.getTime() - this.start.getTime();
-
- if (content) {
- this.output(content);
- }
-
- // Ensure to finish the request only once.
- if (!this.isDone) {
- this.isDone = true;
- this._dispatchEvent('output', {});
- }
-};
-exports.Request = Request;
-
-
-});
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Mozilla Skywriter.
- *
- * The Initial Developer of the Original Code is
- * Mozilla.
- * Portions created by the Initial Developer are Copyright (C) 2009
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Joe Walker (jwalker@mozilla.com)
- * Patrick Walton (pwalton@mozilla.com)
- * Julian Viereck (jviereck@mozilla.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-define('pilot/console', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-/**
- * This object represents a "safe console" object that forwards debugging
- * messages appropriately without creating a dependency on Firebug in Firefox.
- */
-
-var noop = function() {};
-
-// These are the functions that are available in Chrome 4/5, Safari 4
-// and Firefox 3.6. Don't add to this list without checking browser support
-var NAMES = [
- "assert", "count", "debug", "dir", "dirxml", "error", "group", "groupEnd",
- "info", "log", "profile", "profileEnd", "time", "timeEnd", "trace", "warn"
-];
-
-if (typeof(window) === 'undefined') {
- // We're in a web worker. Forward to the main thread so the messages
- // will show up.
- NAMES.forEach(function(name) {
- exports[name] = function() {
- var args = Array.prototype.slice.call(arguments);
- var msg = { op: 'log', method: name, args: args };
- postMessage(JSON.stringify(msg));
- };
- });
-} else {
- // For each of the console functions, copy them if they exist, stub if not
- NAMES.forEach(function(name) {
- if (window.console && window.console[name]) {
- exports[name] = Function.prototype.bind.call(window.console[name], window.console);
- } else {
- exports[name] = noop;
- }
- });
-}
-
-});
-define('pilot/stacktrace', ['require', 'exports', 'module' , 'pilot/useragent', 'pilot/console'], function(require, exports, module) {
-
-var ua = require("pilot/useragent");
-var console = require('pilot/console');
-
-// Changed to suit the specific needs of running within Skywriter
-
-// Domain Public by Eric Wendelin http://eriwen.com/ (2008)
-// Luke Smith http://lucassmith.name/ (2008)
-// Loic Dachary <loic@dachary.org> (2008)
-// Johan Euphrosine <proppy@aminche.com> (2008)
-// Øyvind Sean Kinsey http://kinsey.no/blog
-//
-// Information and discussions
-// http://jspoker.pokersource.info/skin/test-printstacktrace.html
-// http://eriwen.com/javascript/js-stack-trace/
-// http://eriwen.com/javascript/stacktrace-update/
-// http://pastie.org/253058
-// http://browsershots.org/http://jspoker.pokersource.info/skin/test-printstacktrace.html
-//
-
-//
-// guessFunctionNameFromLines comes from firebug
-//
-// Software License Agreement (BSD License)
-//
-// Copyright (c) 2007, Parakey Inc.
-// All rights reserved.
-//
-// Redistribution and use of this software in source and binary forms, with or without modification,
-// are permitted provided that the following conditions are met:
-//
-// * Redistributions of source code must retain the above
-// copyright notice, this list of conditions and the
-// following disclaimer.
//
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the
-// following disclaimer in the documentation and/or other
-// materials provided with the distribution.
-//
-// * Neither the name of Parakey Inc. nor the names of its
-// contributors may be used to endorse or promote products
-// derived from this software without specific prior
-// written permission of Parakey Inc.
+// Util
+// ======
//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
-// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
-// FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
-// IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
-
-/**
- * Different browsers create stack traces in different ways.
- * <strike>Feature</strike> Browser detection baby ;).
- */
-var mode = (function() {
-
- // We use SC's browser detection here to avoid the "break on error"
- // functionality provided by Firebug. Firebug tries to do the right
- // thing here and break, but it happens every time you load the page.
- // bug 554105
- if (ua.isGecko) {
- return 'firefox';
- } else if (ua.isOpera) {
- return 'opera';
- } else {
- return 'other';
- }
-
- // SC doesn't do any detection of Chrome at this time.
-
- // this is the original feature detection code that is used as a
- // fallback.
- try {
- (0)();
- } catch (e) {
- if (e.arguments) {
- return 'chrome';
- }
- if (e.stack) {
- return 'firefox';
- }
- if (window.opera && !('stacktrace' in e)) { //Opera 9-
- return 'opera';
- }
- }
- return 'other';
-})();
-
-/**
- *
- */
-function stringifyArguments(args) {
- for (var i = 0; i < args.length; ++i) {
- var argument = args[i];
- if (typeof argument == 'object') {
- args[i] = '#object';
- } else if (typeof argument == 'function') {
- args[i] = '#function';
- } else if (typeof argument == 'string') {
- args[i] = '"' + argument + '"';
- }
- }
- return args.join(',');
-}
-
-/**
- * Extract a stack trace from the format emitted by each browser.
- */
-var decoders = {
- chrome: function(e) {
- var stack = e.stack;
- if (!stack) {
- console.log(e);
- return [];
- }
- return stack.replace(/^.*?\n/, '').
- replace(/^.*?\n/, '').
- replace(/^.*?\n/, '').
- replace(/^[^\(]+?[\n$]/gm, '').
- replace(/^\s+at\s+/gm, '').
- replace(/^Object.<anonymous>\s*\(/gm, '{anonymous}()@').
- split('\n');
- },
-
- firefox: function(e) {
- var stack = e.stack;
- if (!stack) {
- console.log(e);
- return [];
- }
- // stack = stack.replace(/^.*?\n/, '');
- stack = stack.replace(/(?:\n@:0)?\s+$/m, '');
- stack = stack.replace(/^\(/gm, '{anonymous}(');
- return stack.split('\n');
- },
-
- // Opera 7.x and 8.x only!
- opera: function(e) {
- var lines = e.message.split('\n'), ANON = '{anonymous}',
- lineRE = /Line\s+(\d+).*?script\s+(http\S+)(?:.*?in\s+function\s+(\S+))?/i, i, j, len;
- for (i = 4, j = 0, len = lines.length; i < len; i += 2) {
- if (lineRE.test(lines[i])) {
- lines[j++] = (RegExp.$3 ? RegExp.$3 + '()@' + RegExp.$2 + RegExp.$1 : ANON + '()@' + RegExp.$2 + ':' + RegExp.$1) +
- ' -- ' +
- lines[i + 1].replace(/^\s+/, '');
- }
- }
-
- lines.splice(j, lines.length - j);
- return lines;
- },
-
- // Safari, Opera 9+, IE, and others
- other: function(curr) {
- var ANON = '{anonymous}', fnRE = /function\s*([\w\-$]+)?\s*\(/i, stack = [], j = 0, fn, args;
-
- var maxStackSize = 10;
- while (curr && stack.length < maxStackSize) {
- fn = fnRE.test(curr.toString()) ? RegExp.$1 || ANON : ANON;
- args = Array.prototype.slice.call(curr['arguments']);
- stack[j++] = fn + '(' + stringifyArguments(args) + ')';
-
- //Opera bug: if curr.caller does not exist, Opera returns curr (WTF)
- if (curr === curr.caller && window.opera) {
- //TODO: check for same arguments if possible
- break;
- }
- curr = curr.caller;
- }
- return stack;
- }
+// ES5 9.4
+// http://es5.github.com/#x9.4
+// http://jsperf.com/to-integer
+var toInteger = function (n) {
+ n = +n;
+ if (n !== n) // isNaN
+ n = 0;
+ else if (n !== 0 && n !== (1/0) && n !== -(1/0))
+ n = (n > 0 || -1) * Math.floor(Math.abs(n));
+ return n;
};
-/**
- *
- */
-function NameGuesser() {
-}
-
-NameGuesser.prototype = {
-
- sourceCache: {},
-
- ajax: function(url) {
- var req = this.createXMLHTTPObject();
- if (!req) {
- return;
- }
- req.open('GET', url, false);
- req.setRequestHeader('User-Agent', 'XMLHTTP/1.0');
- req.send('');
- return req.responseText;
- },
-
- createXMLHTTPObject: function() {
- // Try XHR methods in order and store XHR factory
- var xmlhttp, XMLHttpFactories = [
- function() {
- return new XMLHttpRequest();
- }, function() {
- return new ActiveXObject('Msxml2.XMLHTTP');
- }, function() {
- return new ActiveXObject('Msxml3.XMLHTTP');
- }, function() {
- return new ActiveXObject('Microsoft.XMLHTTP');
- }
- ];
- for (var i = 0; i < XMLHttpFactories.length; i++) {
- try {
- xmlhttp = XMLHttpFactories[i]();
- // Use memoization to cache the factory
- this.createXMLHTTPObject = XMLHttpFactories[i];
- return xmlhttp;
- } catch (e) {}
- }
- },
-
- getSource: function(url) {
- if (!(url in this.sourceCache)) {
- this.sourceCache[url] = this.ajax(url).split('\n');
+var prepareString = "a"[0] != "a",
+ // ES5 9.9
+ // http://es5.github.com/#x9.9
+ toObject = function (o) {
+ if (o == null) { // this matches both null and undefined
+ throw new TypeError(); // TODO message
}
- return this.sourceCache[url];
- },
-
- guessFunctions: function(stack) {
- for (var i = 0; i < stack.length; ++i) {
- var reStack = /{anonymous}\(.*\)@(\w+:\/\/([-\w\.]+)+(:\d+)?[^:]+):(\d+):?(\d+)?/;
- var frame = stack[i], m = reStack.exec(frame);
- if (m) {
- var file = m[1], lineno = m[4]; //m[7] is character position in Chrome
- if (file && lineno) {
- var functionName = this.guessFunctionName(file, lineno);
- stack[i] = frame.replace('{anonymous}', functionName);
- }
- }
- }
- return stack;
- },
-
- guessFunctionName: function(url, lineNo) {
- try {
- return this.guessFunctionNameFromLines(lineNo, this.getSource(url));
- } catch (e) {
- return 'getSource failed with url: ' + url + ', exception: ' + e.toString();
+ // If the implementation doesn't support by-index access of
+ // string characters (ex. IE < 7), split the string
+ if (prepareString && typeof o == "string" && o) {
+ return o.split("");
}
- },
-
- guessFunctionNameFromLines: function(lineNo, source) {
- var reFunctionArgNames = /function ([^(]*)\(([^)]*)\)/;
- var reGuessFunction = /['"]?([0-9A-Za-z_]+)['"]?\s*[:=]\s*(function|eval|new Function)/;
- // Walk backwards from the first line in the function until we find the line which
- // matches the pattern above, which is the function definition
- var line = '', maxLines = 10;
- for (var i = 0; i < maxLines; ++i) {
- line = source[lineNo - i] + line;
- if (line !== undefined) {
- var m = reGuessFunction.exec(line);
- if (m) {
- return m[1];
- }
- else {
- m = reFunctionArgNames.exec(line);
- }
- if (m && m[1]) {
- return m[1];
- }
- }
- }
- return '(?)';
- }
-};
-
-var guesser = new NameGuesser();
-
-var frameIgnorePatterns = [
- /http:\/\/localhost:4020\/sproutcore.js:/
-];
-
-exports.ignoreFramesMatching = function(regex) {
- frameIgnorePatterns.push(regex);
-};
-
-/**
- * Create a stack trace from an exception
- * @param ex {Error} The error to create a stacktrace from (optional)
- * @param guess {Boolean} If we should try to resolve the names of anonymous functions
- */
-exports.Trace = function Trace(ex, guess) {
- this._ex = ex;
- this._stack = decoders[mode](ex);
-
- if (guess) {
- this._stack = guesser.guessFunctions(this._stack);
- }
-};
-
-/**
- * Log to the console a number of lines (default all of them)
- * @param lines {number} Maximum number of lines to wrote to console
- */
-exports.Trace.prototype.log = function(lines) {
- if (lines <= 0) {
- // You aren't going to have more lines in your stack trace than this
- // and it still fits in a 32bit integer
- lines = 999999999;
- }
-
- var printed = 0;
- for (var i = 0; i < this._stack.length && printed < lines; i++) {
- var frame = this._stack[i];
- var display = true;
- frameIgnorePatterns.forEach(function(regex) {
- if (regex.test(frame)) {
- display = false;
- }
- });
- if (display) {
- console.debug(frame);
- printed++;
- }
- }
-};
-
-});
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Ajax.org Code Editor (ACE).
- *
- * The Initial Developer of the Original Code is
- * Ajax.org B.V.
- * Portions created by the Initial Developer are Copyright (C) 2010
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Fabian Jakobs <fabian AT ajax DOT org>
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('pilot/useragent', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-var os = (navigator.platform.match(/mac|win|linux/i) || ["other"])[0].toLowerCase();
-var ua = navigator.userAgent;
-var av = navigator.appVersion;
-
-/** Is the user using a browser that identifies itself as Windows */
-exports.isWin = (os == "win");
-
-/** Is the user using a browser that identifies itself as Mac OS */
-exports.isMac = (os == "mac");
-
-/** Is the user using a browser that identifies itself as Linux */
-exports.isLinux = (os == "linux");
-
-exports.isIE = ! + "\v1";
-
-/** Is this Firefox or related? */
-exports.isGecko = exports.isMozilla = window.controllers && window.navigator.product === "Gecko";
-
-/** oldGecko == rev < 2.0 **/
-exports.isOldGecko = exports.isGecko && /rv\:1/.test(navigator.userAgent);
-
-/** Is this Opera */
-exports.isOpera = window.opera && Object.prototype.toString.call(window.opera) == "[object Opera]";
-
-/** Is the user using a browser that identifies itself as WebKit */
-exports.isWebKit = parseFloat(ua.split("WebKit/")[1]) || undefined;
-
-exports.isChrome = parseFloat(ua.split(" Chrome/")[1]) || undefined;
-
-exports.isAIR = ua.indexOf("AdobeAIR") >= 0;
-
-exports.isIPad = ua.indexOf("iPad") >= 0;
-
-/**
- * I hate doing this, but we need some way to determine if the user is on a Mac
- * The reason is that users have different expectations of their key combinations.
- *
- * Take copy as an example, Mac people expect to use CMD or APPLE + C
- * Windows folks expect to use CTRL + C
- */
-exports.OS = {
- LINUX: 'LINUX',
- MAC: 'MAC',
- WINDOWS: 'WINDOWS'
-};
-
-/**
- * Return an exports.OS constant
- */
-exports.getOS = function() {
- if (exports.isMac) {
- return exports.OS['MAC'];
- } else if (exports.isLinux) {
- return exports.OS['LINUX'];
- } else {
- return exports.OS['WINDOWS'];
- }
-};
-
-});
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Ajax.org Code Editor (ACE).
- *
- * The Initial Developer of the Original Code is
- * Ajax.org B.V.
- * Portions created by the Initial Developer are Copyright (C) 2010
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Fabian Jakobs <fabian AT ajax DOT org>
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('pilot/oop', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-exports.inherits = (function() {
- var tempCtor = function() {};
- return function(ctor, superCtor) {
- tempCtor.prototype = superCtor.prototype;
- ctor.super_ = superCtor.prototype;
- ctor.prototype = new tempCtor();
- ctor.prototype.constructor = ctor;
- }
-}());
-
-exports.mixin = function(obj, mixin) {
- for (var key in mixin) {
- obj[key] = mixin[key];
- }
-};
-
-exports.implement = function(proto, mixin) {
- exports.mixin(proto, mixin);
-};
-
-});
-/*! @license
-==========================================================================
-SproutCore -- JavaScript Application Framework
-copyright 2006-2009, Sprout Systems Inc., Apple Inc. and contributors.
-
-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.
-
-SproutCore and the SproutCore logo are trademarks of Sprout Systems, Inc.
-
-For more information about SproutCore, visit http://www.sproutcore.com
-
-
-==========================================================================
-@license */
-
-// Most of the following code is taken from SproutCore with a few changes.
-
-define('pilot/keys', ['require', 'exports', 'module' , 'pilot/oop'], function(require, exports, module) {
-
-var oop = require("pilot/oop");
-
-/**
- * Helper functions and hashes for key handling.
- */
-var Keys = (function() {
- var ret = {
- MODIFIER_KEYS: {
- 16: 'Shift', 17: 'Ctrl', 18: 'Alt', 224: 'Meta'
- },
-
- KEY_MODS: {
- "ctrl": 1, "alt": 2, "option" : 2,
- "shift": 4, "meta": 8, "command": 8
- },
-
- FUNCTION_KEYS : {
- 8 : "Backspace",
- 9 : "Tab",
- 13 : "Return",
- 19 : "Pause",
- 27 : "Esc",
- 32 : "Space",
- 33 : "PageUp",
- 34 : "PageDown",
- 35 : "End",
- 36 : "Home",
- 37 : "Left",
- 38 : "Up",
- 39 : "Right",
- 40 : "Down",
- 44 : "Print",
- 45 : "Insert",
- 46 : "Delete",
- 112: "F1",
- 113: "F2",
- 114: "F3",
- 115: "F4",
- 116: "F5",
- 117: "F6",
- 118: "F7",
- 119: "F8",
- 120: "F9",
- 121: "F10",
- 122: "F11",
- 123: "F12",
- 144: "Numlock",
- 145: "Scrolllock"
- },
-
- PRINTABLE_KEYS: {
- 32: ' ', 48: '0', 49: '1', 50: '2', 51: '3', 52: '4', 53: '5',
- 54: '6', 55: '7', 56: '8', 57: '9', 59: ';', 61: '=', 65: 'a',
- 66: 'b', 67: 'c', 68: 'd', 69: 'e', 70: 'f', 71: 'g', 72: 'h',
- 73: 'i', 74: 'j', 75: 'k', 76: 'l', 77: 'm', 78: 'n', 79: 'o',
- 80: 'p', 81: 'q', 82: 'r', 83: 's', 84: 't', 85: 'u', 86: 'v',
- 87: 'w', 88: 'x', 89: 'y', 90: 'z', 107: '+', 109: '-', 110: '.',
- 188: ',', 190: '.', 191: '/', 192: '`', 219: '[', 220: '\\',
- 221: ']', 222: '\"'
- }
- };
-
- // A reverse map of FUNCTION_KEYS
- for (i in ret.FUNCTION_KEYS) {
- var name = ret.FUNCTION_KEYS[i].toUpperCase();
- ret[name] = parseInt(i, 10);
- }
-
- // Add the MODIFIER_KEYS, FUNCTION_KEYS and PRINTABLE_KEYS to the KEY
- // variables as well.
- oop.mixin(ret, ret.MODIFIER_KEYS);
- oop.mixin(ret, ret.PRINTABLE_KEYS);
- oop.mixin(ret, ret.FUNCTION_KEYS);
-
- return ret;
-})();
-oop.mixin(exports, Keys);
-
-exports.keyCodeToString = function(keyCode) {
- return (Keys[keyCode] || String.fromCharCode(keyCode)).toLowerCase();
-}
-
-});
-/* vim:ts=4:sts=4:sw=4:
- * ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Ajax.org Code Editor (ACE).
- *
- * The Initial Developer of the Original Code is
- * Ajax.org B.V.
- * Portions created by the Initial Developer are Copyright (C) 2010
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Fabian Jakobs <fabian AT ajax DOT org>
- * Irakli Gozalishvili <rfobic@gmail.com> (http://jeditoolkit.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('pilot/event_emitter', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-var EventEmitter = {};
-
-EventEmitter._emit =
-EventEmitter._dispatchEvent = function(eventName, e) {
- this._eventRegistry = this._eventRegistry || {};
-
- var listeners = this._eventRegistry[eventName];
- if (!listeners || !listeners.length) return;
-
- var e = e || {};
- e.type = eventName;
-
- for (var i=0; i<listeners.length; i++) {
- listeners[i](e);
- }
-};
-
-EventEmitter.on =
-EventEmitter.addEventListener = function(eventName, callback) {
- this._eventRegistry = this._eventRegistry || {};
-
- var listeners = this._eventRegistry[eventName];
- if (!listeners) {
- var listeners = this._eventRegistry[eventName] = [];
- }
- if (listeners.indexOf(callback) == -1) {
- listeners.push(callback);
- }
-};
-
-EventEmitter.removeListener =
-EventEmitter.removeEventListener = function(eventName, callback) {
- this._eventRegistry = this._eventRegistry || {};
-
- var listeners = this._eventRegistry[eventName];
- if (!listeners) {
- return;
- }
- var index = listeners.indexOf(callback);
- if (index !== -1) {
- listeners.splice(index, 1);
- }
-};
-
-EventEmitter.removeAllListeners = function(eventName) {
- if (this._eventRegistry) this._eventRegistry[eventName] = [];
-}
-
-exports.EventEmitter = EventEmitter;
-
-});
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Skywriter.
- *
- * The Initial Developer of the Original Code is
- * Mozilla.
- * Portions created by the Initial Developer are Copyright (C) 2009
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Joe Walker (jwalker@mozilla.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('pilot/typecheck', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-var objectToString = Object.prototype.toString;
-
-/**
- * Return true if it is a String
- */
-exports.isString = function(it) {
- return it && objectToString.call(it) === "[object String]";
-};
-
-/**
- * Returns true if it is a Boolean.
- */
-exports.isBoolean = function(it) {
- return it && objectToString.call(it) === "[object Boolean]";
-};
-
-/**
- * Returns true if it is a Number.
- */
-exports.isNumber = function(it) {
- return it && objectToString.call(it) === "[object Number]" && isFinite(it);
-};
-
-/**
- * Hack copied from dojo.
- */
-exports.isObject = function(it) {
- return it !== undefined &&
- (it === null || typeof it == "object" ||
- Array.isArray(it) || exports.isFunction(it));
-};
-
-/**
- * Is the passed object a function?
- * From dojo.isFunction()
- */
-exports.isFunction = function(it) {
- return it && objectToString.call(it) === "[object Function]";
-};
-
-});/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Mozilla Skywriter.
- *
- * The Initial Developer of the Original Code is
- * Mozilla.
- * Portions created by the Initial Developer are Copyright (C) 2009
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Julian Viereck (jviereck@mozilla.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('pilot/catalog', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-
-var extensionSpecs = {};
-
-exports.addExtensionSpec = function(extensionSpec) {
- extensionSpecs[extensionSpec.name] = extensionSpec;
-};
-
-exports.removeExtensionSpec = function(extensionSpec) {
- if (typeof extensionSpec === "string") {
- delete extensionSpecs[extensionSpec];
- }
- else {
- delete extensionSpecs[extensionSpec.name];
- }
-};
-
-exports.getExtensionSpec = function(name) {
- return extensionSpecs[name];
-};
-
-exports.getExtensionSpecs = function() {
- return Object.keys(extensionSpecs);
-};
-
-
-});
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Ajax.org Code Editor (ACE).
- *
- * The Initial Developer of the Original Code is
- * Ajax.org B.V.
- * Portions created by the Initial Developer are Copyright (C) 2010
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Fabian Jakobs <fabian AT ajax DOT org>
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('pilot/lang', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-exports.stringReverse = function(string) {
- return string.split("").reverse().join("");
-};
-
-exports.stringRepeat = function (string, count) {
- return new Array(count + 1).join(string);
-};
-
-var trimBeginRegexp = /^\s\s*/;
-var trimEndRegexp = /\s\s*$/;
-
-exports.stringTrimLeft = function (string) {
- return string.replace(trimBeginRegexp, '')
-};
-
-exports.stringTrimRight = function (string) {
- return string.replace(trimEndRegexp, '');
-};
-
-exports.copyObject = function(obj) {
- var copy = {};
- for (var key in obj) {
- copy[key] = obj[key];
- }
- return copy;
-};
-
-exports.copyArray = function(array){
- var copy = [];
- for (i=0, l=array.length; i<l; i++) {
- if (array[i] && typeof array[i] == "object")
- copy[i] = this.copyObject( array[i] );
- else
- copy[i] = array[i]
- }
- return copy;
-};
-
-exports.deepCopy = function (obj) {
- if (typeof obj != "object") {
- return obj;
- }
-
- var copy = obj.constructor();
- for (var key in obj) {
- if (typeof obj[key] == "object") {
- copy[key] = this.deepCopy(obj[key]);
- } else {
- copy[key] = obj[key];
- }
- }
- return copy;
-}
-
-exports.arrayToMap = function(arr) {
- var map = {};
- for (var i=0; i<arr.length; i++) {
- map[arr[i]] = 1;
- }
- return map;
-
-};
-
-/**
- * splice out of 'array' anything that === 'value'
- */
-exports.arrayRemove = function(array, value) {
- for (var i = 0; i <= array.length; i++) {
- if (value === array[i]) {
- array.splice(i, 1);
- }
- }
-};
-
-exports.escapeRegExp = function(str) {
- return str.replace(/([.*+?^${}()|[\]\/\\])/g, '\\$1');
-};
-
-exports.deferredCall = function(fcn) {
-
- var timer = null;
- var callback = function() {
- timer = null;
- fcn();
- };
-
- var deferred = function(timeout) {
- if (!timer) {
- timer = setTimeout(callback, timeout || 0);
- }
- return deferred;
- }
-
- deferred.schedule = deferred;
-
- deferred.call = function() {
- this.cancel();
- fcn();
- return deferred;
+ return Object(o);
};
-
- deferred.cancel = function() {
- clearTimeout(timer);
- timer = null;
- return deferred;
- };
-
- return deferred;
-};
-
-});
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Mozilla Skywriter.
- *
- * The Initial Developer of the Original Code is
- * Mozilla.
- * Portions created by the Initial Developer are Copyright (C) 2009
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Joe Walker (jwalker@mozilla.com)
- * Kevin Dangoor (kdangoor@mozilla.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('pilot/types/settings', ['require', 'exports', 'module' , 'pilot/types/basic', 'pilot/types', 'pilot/settings'], function(require, exports, module) {
-
-var SelectionType = require('pilot/types/basic').SelectionType;
-var DeferredType = require('pilot/types/basic').DeferredType;
-var types = require('pilot/types');
-var settings = require('pilot/settings').settings;
-
-
-/**
- * EVIL: This relies on us using settingValue in the same event as setting
- * The alternative is to have some central place where we store the current
- * command line, but this might be a lesser evil for now.
- */
-var lastSetting;
-
-/**
- * Select from the available settings
- */
-var setting = new SelectionType({
- name: 'setting',
- data: function() {
- return env.settings.getSettingNames();
- },
- stringify: function(setting) {
- lastSetting = setting;
- return setting.name;
- },
- fromString: function(str) {
- lastSetting = settings.getSetting(str);
- return lastSetting;
- },
- noMatch: function() {
- lastSetting = null;
- }
-});
-
-/**
- * Something of a hack to allow the set command to give a clearer definition
- * of the type to the command line.
- */
-var settingValue = new DeferredType({
- name: 'settingValue',
- defer: function() {
- if (lastSetting) {
- return lastSetting.type;
- }
- else {
- return types.getType('text');
- }
- },
- /**
- * Promote the current value in any list of predictions, and add it if
- * there are none.
- */
- getDefault: function() {
- var conversion = this.parse('');
- if (lastSetting) {
- var current = lastSetting.get();
- if (conversion.predictions.length === 0) {
- conversion.predictions.push(current);
- }
- else {
- // Remove current from predictions
- var removed = false;
- while (true) {
- var index = conversion.predictions.indexOf(current);
- if (index === -1) {
- break;
- }
- conversion.predictions.splice(index, 1);
- removed = true;
- }
- // If the current value wasn't something we would predict, leave it
- if (removed) {
- conversion.predictions.push(current);
- }
- }
- }
- return conversion;
- }
-});
-
-var env;
-
-/**
- * Registration and de-registration.
- */
-exports.startup = function(data, reason) {
- // TODO: this is probably all kinds of evil, but we need something working
- env = data.env;
- types.registerType(setting);
- types.registerType(settingValue);
-};
-
-exports.shutdown = function(data, reason) {
- types.unregisterType(setting);
- types.unregisterType(settingValue);
-};
-
-
-});
-/* vim:ts=4:sts=4:sw=4:
- * ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Mozilla Skywriter.
- *
- * The Initial Developer of the Original Code is
- * Mozilla.
- * Portions created by the Initial Developer are Copyright (C) 2009
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Joe Walker (jwalker@mozilla.com)
- * Julian Viereck (jviereck@mozilla.com)
- * Kevin Dangoor (kdangoor@mozilla.com)
- * Irakli Gozalishvili <rfobic@gmail.com> (http://jeditoolkit.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('pilot/settings', ['require', 'exports', 'module' , 'pilot/console', 'pilot/oop', 'pilot/types', 'pilot/event_emitter', 'pilot/catalog'], function(require, exports, module) {
-
-/**
- * This plug-in manages settings.
- */
-
-var console = require('pilot/console');
-var oop = require('pilot/oop');
-var types = require('pilot/types');
-var EventEmitter = require('pilot/event_emitter').EventEmitter;
-var catalog = require('pilot/catalog');
-
-var settingExtensionSpec = {
- name: 'setting',
- description: 'A setting is something that the application offers as a ' +
- 'way to customize how it works',
- register: 'env.settings.addSetting',
- indexOn: 'name'
-};
-
-exports.startup = function(data, reason) {
- catalog.addExtensionSpec(settingExtensionSpec);
-};
-
-exports.shutdown = function(data, reason) {
- catalog.removeExtensionSpec(settingExtensionSpec);
-};
-
-
-/**
- * Create a new setting.
- * @param settingSpec An object literal that looks like this:
- * {
- * name: 'thing',
- * description: 'Thing is an example setting',
- * type: 'string',
- * defaultValue: 'something'
- * }
- */
-function Setting(settingSpec, settings) {
- this._settings = settings;
-
- Object.keys(settingSpec).forEach(function(key) {
- this[key] = settingSpec[key];
- }, this);
-
- this.type = types.getType(this.type);
- if (this.type == null) {
- throw new Error('In ' + this.name +
- ': can\'t find type for: ' + JSON.stringify(settingSpec.type));
- }
-
- if (!this.name) {
- throw new Error('Setting.name == undefined. Ignoring.', this);
- }
-
- if (!this.defaultValue === undefined) {
- throw new Error('Setting.defaultValue == undefined', this);
- }
-
- if (this.onChange) {
- this.on('change', this.onChange.bind(this))
- }
-
- this.set(this.defaultValue);
-}
-Setting.prototype = {
- get: function() {
- return this.value;
- },
-
- set: function(value) {
- if (this.value === value) {
- return;
- }
-
- this.value = value;
- if (this._settings.persister) {
- this._settings.persister.persistValue(this._settings, this.name, value);
- }
-
- this._dispatchEvent('change', { setting: this, value: value });
- },
-
- /**
- * Reset the value of the <code>key</code> setting to it's default
- */
- resetValue: function() {
- this.set(this.defaultValue);
- },
- toString: function () {
- return this.name;
- }
-};
-oop.implement(Setting.prototype, EventEmitter);
-
-
-/**
- * A base class for all the various methods of storing settings.
- * <p>Usage:
- * <pre>
- * // Create manually, or require 'settings' from the container.
- * // This is the manual version:
- * var settings = plugins.catalog.getObject('settings');
- * // Add a new setting
- * settings.addSetting({ name:'foo', ... });
- * // Display the default value
- * alert(settings.get('foo'));
- * // Alter the value, which also publishes the change etc.
- * settings.set('foo', 'bar');
- * // Reset the value to the default
- * settings.resetValue('foo');
- * </pre>
- * @constructor
- */
-function Settings(persister) {
- // Storage for deactivated values
- this._deactivated = {};
-
- // Storage for the active settings
- this._settings = {};
- // We often want sorted setting names. Cache
- this._settingNames = [];
-
- if (persister) {
- this.setPersister(persister);
- }
-};
-
-Settings.prototype = {
- /**
- * Function to add to the list of available settings.
- * <p>Example usage:
- * <pre>
- * var settings = plugins.catalog.getObject('settings');
- * settings.addSetting({
- * name: 'tabsize', // For use in settings.get('X')
- * type: 'number', // To allow value checking.
- * defaultValue: 4 // Default value for use when none is directly set
- * });
- * </pre>
- * @param {object} settingSpec Object containing name/type/defaultValue members.
- */
- addSetting: function(settingSpec) {
- var setting = new Setting(settingSpec, this);
- this._settings[setting.name] = setting;
- this._settingNames.push(setting.name);
- this._settingNames.sort();
- },
-
- addSettings: function addSettings(settings) {
- Object.keys(settings).forEach(function (name) {
- var setting = settings[name];
- if (!('name' in setting)) setting.name = name;
- this.addSetting(setting);
- }, this);
- },
-
- removeSetting: function(setting) {
- var name = (typeof setting === 'string' ? setting : setting.name);
- setting = this._settings[name];
- delete this._settings[name];
- util.arrayRemove(this._settingNames, name);
- settings.removeAllListeners('change');
- },
-
- removeSettings: function removeSettings(settings) {
- Object.keys(settings).forEach(function(name) {
- var setting = settings[name];
- if (!('name' in setting)) setting.name = name;
- this.removeSettings(setting);
- }, this);
- },
-
- getSettingNames: function() {
- return this._settingNames;
- },
-
- getSetting: function(name) {
- return this._settings[name];
- },
-
- /**
- * A Persister is able to store settings. It is an object that defines
- * two functions:
- * loadInitialValues(settings) and persistValue(settings, key, value).
- */
- setPersister: function(persister) {
- this._persister = persister;
- if (persister) {
- persister.loadInitialValues(this);
- }
- },
-
- resetAll: function() {
- this.getSettingNames().forEach(function(key) {
- this.resetValue(key);
- }, this);
- },
-
- /**
- * Retrieve a list of the known settings and their values
- */
- _list: function() {
- var reply = [];
- this.getSettingNames().forEach(function(setting) {
- reply.push({
- 'key': setting,
- 'value': this.getSetting(setting).get()
- });
- }, this);
- return reply;
- },
-
- /**
- * Prime the local cache with the defaults.
- */
- _loadDefaultValues: function() {
- this._loadFromObject(this._getDefaultValues());
- },
-
- /**
- * Utility to load settings from an object
- */
- _loadFromObject: function(data) {
- // We iterate over data rather than keys so we don't forget values
- // which don't have a setting yet.
- for (var key in data) {
- if (data.hasOwnProperty(key)) {
- var setting = this._settings[key];
- if (setting) {
- var value = setting.type.parse(data[key]);
- this.set(key, value);
- } else {
- this.set(key, data[key]);
- }
- }
- }
- },
-
- /**
- * Utility to grab all the settings and export them into an object
- */
- _saveToObject: function() {
- return this.getSettingNames().map(function(key) {
- return this._settings[key].type.stringify(this.get(key));
- }.bind(this));
- },
-
- /**
- * The default initial settings
- */
- _getDefaultValues: function() {
- return this.getSettingNames().map(function(key) {
- return this._settings[key].spec.defaultValue;
- }.bind(this));
- }
-};
-exports.settings = new Settings();
-
-/**
- * Save the settings in a cookie
- * This code has not been tested since reboot
- * @constructor
- */
-function CookiePersister() {
-};
-
-CookiePersister.prototype = {
- loadInitialValues: function(settings) {
- settings._loadDefaultValues();
- var data = cookie.get('settings');
- settings._loadFromObject(JSON.parse(data));
- },
-
- persistValue: function(settings, key, value) {
- try {
- var stringData = JSON.stringify(settings._saveToObject());
- cookie.set('settings', stringData);
- } catch (ex) {
- console.error('Unable to JSONify the settings! ' + ex);
- return;
- }
- }
-};
-
-exports.CookiePersister = CookiePersister;
-
-});
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Skywriter.
- *
- * The Initial Developer of the Original Code is
- * Mozilla.
- * Portions created by the Initial Developer are Copyright (C) 2009
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Skywriter Team (skywriter@mozilla.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('pilot/commands/settings', ['require', 'exports', 'module' , 'pilot/canon'], function(require, exports, module) {
-
-
-var setCommandSpec = {
- name: 'set',
- params: [
- {
- name: 'setting',
- type: 'setting',
- description: 'The name of the setting to display or alter',
- defaultValue: null
- },
- {
- name: 'value',
- type: 'settingValue',
- description: 'The new value for the chosen setting',
- defaultValue: null
- }
- ],
- description: 'define and show settings',
- exec: function(env, args, request) {
- var html;
- if (!args.setting) {
- // 'set' by itself lists all the settings
- var names = env.settings.getSettingNames();
- html = '';
- // first sort the settingsList based on the name
- names.sort(function(name1, name2) {
- return name1.localeCompare(name2);
- });
-
- names.forEach(function(name) {
- var setting = env.settings.getSetting(name);
- var url = 'https://wiki.mozilla.org/Labs/Skywriter/Settings#' +
- setting.name;
- html += '<a class="setting" href="' + url +
- '" title="View external documentation on setting: ' +
- setting.name +
- '" target="_blank">' +
- setting.name +
- '</a> = ' +
- setting.value +
- '<br/>';
- });
- } else {
- // set with only a setting, shows the value for that setting
- if (args.value === undefined) {
- html = '<strong>' + setting.name + '</strong> = ' +
- setting.get();
- } else {
- // Actually change the setting
- args.setting.set(args.value);
- html = 'Setting: <strong>' + args.setting.name + '</strong> = ' +
- args.setting.get();
- }
- }
- request.done(html);
- }
-};
-
-var unsetCommandSpec = {
- name: 'unset',
- params: [
- {
- name: 'setting',
- type: 'setting',
- description: 'The name of the setting to return to defaults'
- }
- ],
- description: 'unset a setting entirely',
- exec: function(env, args, request) {
- var setting = env.settings.get(args.setting);
- if (!setting) {
- request.doneWithError('No setting with the name <strong>' +
- args.setting + '</strong>.');
- return;
- }
-
- setting.reset();
- request.done('Reset ' + setting.name + ' to default: ' +
- env.settings.get(args.setting));
- }
-};
-
-var canon = require('pilot/canon');
-
-exports.startup = function(data, reason) {
- canon.addCommand(setCommandSpec);
- canon.addCommand(unsetCommandSpec);
-};
-
-exports.shutdown = function(data, reason) {
- canon.removeCommand(setCommandSpec);
- canon.removeCommand(unsetCommandSpec);
-};
-
-
-});
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Skywriter.
- *
- * The Initial Developer of the Original Code is
- * Mozilla.
- * Portions created by the Initial Developer are Copyright (C) 2009
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Skywriter Team (skywriter@mozilla.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('pilot/commands/basic', ['require', 'exports', 'module' , 'pilot/typecheck', 'pilot/canon'], function(require, exports, module) {
-
-
-var checks = require("pilot/typecheck");
-var canon = require('pilot/canon');
-
-/**
- * 'help' command
- */
-var helpCommandSpec = {
- name: 'help',
- params: [
- {
- name: 'search',
- type: 'text',
- description: 'Search string to narrow the output.',
- defaultValue: null
- }
- ],
- description: 'Get help on the available commands.',
- exec: function(env, args, request) {
- var output = [];
-
- var command = canon.getCommand(args.search);
- if (command && command.exec) {
- // caught a real command
- output.push(command.description ?
- command.description :
- 'No description for ' + args.search);
- } else {
- var showHidden = false;
-
- if (command) {
- // We must be looking at sub-commands
- output.push('<h2>Sub-Commands of ' + command.name + '</h2>');
- output.push('<p>' + command.description + '</p>');
- }
- else if (args.search) {
- if (args.search == 'hidden') { // sneaky, sneaky.
- args.search = '';
- showHidden = true;
- }
- output.push('<h2>Commands starting with \'' + args.search + '\':</h2>');
- }
- else {
- output.push('<h2>Available Commands:</h2>');
- }
-
- var commandNames = canon.getCommandNames();
- commandNames.sort();
-
- output.push('<table>');
- for (var i = 0; i < commandNames.length; i++) {
- command = canon.getCommand(commandNames[i]);
- if (!showHidden && command.hidden) {
- continue;
- }
- if (command.description === undefined) {
- // Ignore editor actions
- continue;
- }
- if (args.search && command.name.indexOf(args.search) !== 0) {
- // Filtered out by the user
- continue;
- }
- if (!args.search && command.name.indexOf(' ') != -1) {
- // sub command
- continue;
- }
- if (command && command.name == args.search) {
- // sub command, and we've already given that help
- continue;
- }
-
- // todo add back a column with parameter information, perhaps?
-
- output.push('<tr>');
- output.push('<th class="right">' + command.name + '</th>');
- output.push('<td>' + command.description + '</td>');
- output.push('</tr>');
- }
- output.push('</table>');
- }
-
- request.done(output.join(''));
- }
-};
-
-/**
- * 'eval' command
- */
-var evalCommandSpec = {
- name: 'eval',
- params: [
- {
- name: 'javascript',
- type: 'text',
- description: 'The JavaScript to evaluate'
- }
- ],
- description: 'evals given js code and show the result',
- hidden: true,
- exec: function(env, args, request) {
- var result;
- var javascript = args.javascript;
- try {
- result = eval(javascript);
- } catch (e) {
- result = '<b>Error: ' + e.message + '</b>';
- }
-
- var msg = '';
- var type = '';
- var x;
-
- if (checks.isFunction(result)) {
- // converts the function to a well formated string
- msg = (result + '').replace(/\n/g, '<br>').replace(/ /g, '&#160');
- type = 'function';
- } else if (checks.isObject(result)) {
- if (Array.isArray(result)) {
- type = 'array';
- } else {
- type = 'object';
- }
-
- var items = [];
- var value;
-
- for (x in result) {
- if (result.hasOwnProperty(x)) {
- if (checks.isFunction(result[x])) {
- value = '[function]';
- } else if (checks.isObject(result[x])) {
- value = '[object]';
- } else {
- value = result[x];
- }
-
- items.push({name: x, value: value});
- }
- }
-
- items.sort(function(a,b) {
- return (a.name.toLowerCase() < b.name.toLowerCase()) ? -1 : 1;
- });
-
- for (x = 0; x < items.length; x++) {
- msg += '<b>' + items[x].name + '</b>: ' + items[x].value + '<br>';
- }
-
- } else {
- msg = result;
- type = typeof result;
- }
-
- request.done('Result for eval <b>\'' + javascript + '\'</b>' +
- ' (type: '+ type+'): <br><br>'+ msg);
- }
-};
-
-var canon = require('pilot/canon');
-
-exports.startup = function(data, reason) {
- canon.addCommand(helpCommandSpec);
- canon.addCommand(evalCommandSpec);
-};
-
-exports.shutdown = function(data, reason) {
- canon.removeCommand(helpCommandSpec);
- canon.removeCommand(evalCommandSpec);
-};
-
-
-});
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Mozilla Skywriter.
- *
- * The Initial Developer of the Original Code is
- * Mozilla.
- * Portions created by the Initial Developer are Copyright (C) 2009
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Joe Walker (jwalker@mozilla.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('pilot/settings/canon', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-
-var historyLengthSetting = {
- name: "historyLength",
- description: "How many typed commands do we recall for reference?",
- type: "number",
- defaultValue: 50
-};
-
-exports.startup = function(data, reason) {
- data.env.settings.addSetting(historyLengthSetting);
-};
-
-exports.shutdown = function(data, reason) {
- data.env.settings.removeSetting(historyLengthSetting);
-};
-
-
-});
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Skywriter.
- *
- * The Initial Developer of the Original Code is
- * Mozilla.
- * Portions created by the Initial Developer are Copyright (C) 2009
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Kevin Dangoor (kdangoor@mozilla.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('pilot/plugin_manager', ['require', 'exports', 'module' , 'pilot/promise'], function(require, exports, module) {
-
-var Promise = require("pilot/promise").Promise;
-
-exports.REASONS = {
- APP_STARTUP: 1,
- APP_SHUTDOWN: 2,
- PLUGIN_ENABLE: 3,
- PLUGIN_DISABLE: 4,
- PLUGIN_INSTALL: 5,
- PLUGIN_UNINSTALL: 6,
- PLUGIN_UPGRADE: 7,
- PLUGIN_DOWNGRADE: 8
-};
-
-exports.Plugin = function(name) {
- this.name = name;
- this.status = this.INSTALLED;
-};
-
-exports.Plugin.prototype = {
- /**
- * constants for the state
- */
- NEW: 0,
- INSTALLED: 1,
- REGISTERED: 2,
- STARTED: 3,
- UNREGISTERED: 4,
- SHUTDOWN: 5,
-
- install: function(data, reason) {
- var pr = new Promise();
- if (this.status > this.NEW) {
- pr.resolve(this);
- return pr;
- }
- require([this.name], function(pluginModule) {
- if (pluginModule.install) {
- pluginModule.install(data, reason);
- }
- this.status = this.INSTALLED;
- pr.resolve(this);
- }.bind(this));
- return pr;
- },
-
- register: function(data, reason) {
- var pr = new Promise();
- if (this.status != this.INSTALLED) {
- pr.resolve(this);
- return pr;
- }
- require([this.name], function(pluginModule) {
- if (pluginModule.register) {
- pluginModule.register(data, reason);
- }
- this.status = this.REGISTERED;
- pr.resolve(this);
- }.bind(this));
- return pr;
- },
-
- startup: function(data, reason) {
- reason = reason || exports.REASONS.APP_STARTUP;
- var pr = new Promise();
- if (this.status != this.REGISTERED) {
- pr.resolve(this);
- return pr;
- }
- require([this.name], function(pluginModule) {
- if (pluginModule.startup) {
- pluginModule.startup(data, reason);
- }
- this.status = this.STARTED;
- pr.resolve(this);
- }.bind(this));
- return pr;
- },
-
- shutdown: function(data, reason) {
- if (this.status != this.STARTED) {
- return;
- }
- pluginModule = require(this.name);
- if (pluginModule.shutdown) {
- pluginModule.shutdown(data, reason);
- }
- }
-};
-
-exports.PluginCatalog = function() {
- this.plugins = {};
-};
-
-exports.PluginCatalog.prototype = {
- registerPlugins: function(pluginList, data, reason) {
- var registrationPromises = [];
- pluginList.forEach(function(pluginName) {
- var plugin = this.plugins[pluginName];
- if (plugin === undefined) {
- plugin = new exports.Plugin(pluginName);
- this.plugins[pluginName] = plugin;
- registrationPromises.push(plugin.register(data, reason));
- }
- }.bind(this));
- return Promise.group(registrationPromises);
- },
-
- startupPlugins: function(data, reason) {
- var startupPromises = [];
- for (var pluginName in this.plugins) {
- var plugin = this.plugins[pluginName];
- startupPromises.push(plugin.startup(data, reason));
- }
- return Promise.group(startupPromises);
- }
-};
-
-exports.catalog = new exports.PluginCatalog();
-
-});
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Mozilla Skywriter.
- *
- * The Initial Developer of the Original Code is
- * Mozilla.
- * Portions created by the Initial Developer are Copyright (C) 2009
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Joe Walker (jwalker@mozilla.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('pilot/promise', ['require', 'exports', 'module' , 'pilot/console', 'pilot/stacktrace'], function(require, exports, module) {
-
-var console = require("pilot/console");
-var Trace = require('pilot/stacktrace').Trace;
-
-/**
- * A promise can be in one of 2 states.
- * The ERROR and SUCCESS states are terminal, the PENDING state is the only
- * start state.
- */
-var ERROR = -1;
-var PENDING = 0;
-var SUCCESS = 1;
-
-/**
- * We give promises and ID so we can track which are outstanding
- */
-var _nextId = 0;
-
-/**
- * Debugging help if 2 things try to complete the same promise.
- * This can be slow (especially on chrome due to the stack trace unwinding) so
- * we should leave this turned off in normal use.
- */
-var _traceCompletion = false;
-
-/**
- * Outstanding promises. Handy list for debugging only.
- */
-var _outstanding = [];
-
-/**
- * Recently resolved promises. Also for debugging only.
- */
-var _recent = [];
-
-/**
- * Create an unfulfilled promise
- */
-Promise = function () {
- this._status = PENDING;
- this._value = undefined;
- this._onSuccessHandlers = [];
- this._onErrorHandlers = [];
-
- // Debugging help
- this._id = _nextId++;
- //this._createTrace = new Trace(new Error());
- _outstanding[this._id] = this;
-};
-
-/**
- * Yeay for RTTI.
- */
-Promise.prototype.isPromise = true;
-
-/**
- * Have we either been resolve()ed or reject()ed?
- */
-Promise.prototype.isComplete = function() {
- return this._status != PENDING;
-};
-
-/**
- * Have we resolve()ed?
- */
-Promise.prototype.isResolved = function() {
- return this._status == SUCCESS;
-};
-
-/**
- * Have we reject()ed?
- */
-Promise.prototype.isRejected = function() {
- return this._status == ERROR;
-};
-
-/**
- * Take the specified action of fulfillment of a promise, and (optionally)
- * a different action on promise rejection.
- */
-Promise.prototype.then = function(onSuccess, onError) {
- if (typeof onSuccess === 'function') {
- if (this._status === SUCCESS) {
- onSuccess.call(null, this._value);
- } else if (this._status === PENDING) {
- this._onSuccessHandlers.push(onSuccess);
- }
- }
-
- if (typeof onError === 'function') {
- if (this._status === ERROR) {
- onError.call(null, this._value);
- } else if (this._status === PENDING) {
- this._onErrorHandlers.push(onError);
- }
- }
-
- return this;
-};
-
-/**
- * Like then() except that rather than returning <tt>this</tt> we return
- * a promise which
- */
-Promise.prototype.chainPromise = function(onSuccess) {
- var chain = new Promise();
- chain._chainedFrom = this;
- this.then(function(data) {
- try {
- chain.resolve(onSuccess(data));
- } catch (ex) {
- chain.reject(ex);
- }
- }, function(ex) {
- chain.reject(ex);
- });
- return chain;
-};
-
-/**
- * Supply the fulfillment of a promise
- */
-Promise.prototype.resolve = function(data) {
- return this._complete(this._onSuccessHandlers, SUCCESS, data, 'resolve');
-};
-
-/**
- * Renege on a promise
- */
-Promise.prototype.reject = function(data) {
- return this._complete(this._onErrorHandlers, ERROR, data, 'reject');
-};
-
-/**
- * Internal method to be called on resolve() or reject().
- * @private
- */
-Promise.prototype._complete = function(list, status, data, name) {
- // Complain if we've already been completed
- if (this._status != PENDING) {
- console.group('Promise already closed');
- console.error('Attempted ' + name + '() with ', data);
- console.error('Previous status = ', this._status,
- ', previous value = ', this._value);
- console.trace();
-
- if (this._completeTrace) {
- console.error('Trace of previous completion:');
- this._completeTrace.log(5);
- }
- console.groupEnd();
- return this;
- }
-
- if (_traceCompletion) {
- this._completeTrace = new Trace(new Error());
- }
-
- this._status = status;
- this._value = data;
-
- // Call all the handlers, and then delete them
- list.forEach(function(handler) {
- handler.call(null, this._value);
- }, this);
- this._onSuccessHandlers.length = 0;
- this._onErrorHandlers.length = 0;
-
- // Remove the given {promise} from the _outstanding list, and add it to the
- // _recent list, pruning more than 20 recent promises from that list.
- delete _outstanding[this._id];
- _recent.push(this);
- while (_recent.length > 20) {
- _recent.shift();
- }
-
- return this;
-};
-
-/**
- * Takes an array of promises and returns a promise that that is fulfilled once
- * all the promises in the array are fulfilled
- * @param group The array of promises
- * @return the promise that is fulfilled when all the array is fulfilled
- */
-Promise.group = function(promiseList) {
- if (!(promiseList instanceof Array)) {
- promiseList = Array.prototype.slice.call(arguments);
- }
-
- // If the original array has nothing in it, return now to avoid waiting
- if (promiseList.length === 0) {
- return new Promise().resolve([]);
- }
-
- var groupPromise = new Promise();
- var results = [];
- var fulfilled = 0;
-
- var onSuccessFactory = function(index) {
- return function(data) {
- results[index] = data;
- fulfilled++;
- // If the group has already failed, silently drop extra results
- if (groupPromise._status !== ERROR) {
- if (fulfilled === promiseList.length) {
- groupPromise.resolve(results);
- }
- }
- };
- };
-
- promiseList.forEach(function(promise, index) {
- var onSuccess = onSuccessFactory(index);
- var onError = groupPromise.reject.bind(groupPromise);
- promise.then(onSuccess, onError);
- });
-
- return groupPromise;
-};
-
-exports.Promise = Promise;
-exports._outstanding = _outstanding;
-exports._recent = _recent;
-
-});
-/* vim:ts=4:sts=4:sw=4:
+});/* vim:ts=4:sts=4:sw=4:
* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
@@ -4862,6 +1473,7 @@ exports._recent = _recent;
* Contributor(s):
* Fabian Jakobs <fabian AT ajax DOT org>
* Mihai Sucan <mihai AT sucan AT gmail ODT com>
+ * Irakli Gozalishvili <rfobic@gmail.com> (http://jeditoolkit.com)
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
@@ -4877,7 +1489,8 @@ exports._recent = _recent;
*
* ***** END LICENSE BLOCK ***** */
-define('pilot/dom', ['require', 'exports', 'module' ], function(require, exports, module) {
+define('ace/lib/dom', ['require', 'exports', 'module' ], function(require, exports, module) {
+"use strict";
var XHTML_NS = "http://www.w3.org/1999/xhtml";
@@ -4896,69 +1509,51 @@ exports.setText = function(elem, text) {
}
};
-if (!document.documentElement.classList) {
- exports.hasCssClass = function(el, name) {
- var classes = el.className.split(/\s+/g);
- return classes.indexOf(name) !== -1;
- };
+exports.hasCssClass = function(el, name) {
+ var classes = el.className.split(/\s+/g);
+ return classes.indexOf(name) !== -1;
+};
- /**
- * Add a CSS class to the list of classes on the given node
- */
- exports.addCssClass = function(el, name) {
- if (!exports.hasCssClass(el, name)) {
- el.className += " " + name;
- }
- };
+/**
+* Add a CSS class to the list of classes on the given node
+*/
+exports.addCssClass = function(el, name) {
+ if (!exports.hasCssClass(el, name)) {
+ el.className += " " + name;
+ }
+};
- /**
- * Remove a CSS class from the list of classes on the given node
- */
- exports.removeCssClass = function(el, name) {
- var classes = el.className.split(/\s+/g);
- while (true) {
- var index = classes.indexOf(name);
- if (index == -1) {
- break;
- }
- classes.splice(index, 1);
+/**
+* Remove a CSS class from the list of classes on the given node
+*/
+exports.removeCssClass = function(el, name) {
+ var classes = el.className.split(/\s+/g);
+ while (true) {
+ var index = classes.indexOf(name);
+ if (index == -1) {
+ break;
}
- el.className = classes.join(" ");
- };
+ classes.splice(index, 1);
+ }
+ el.className = classes.join(" ");
+};
- exports.toggleCssClass = function(el, name) {
- var classes = el.className.split(/\s+/g), add = true;
- while (true) {
- var index = classes.indexOf(name);
- if (index == -1) {
- break;
- }
- add = false;
- classes.splice(index, 1);
+exports.toggleCssClass = function(el, name) {
+ var classes = el.className.split(/\s+/g), add = true;
+ while (true) {
+ var index = classes.indexOf(name);
+ if (index == -1) {
+ break;
}
- if(add)
- classes.push(name);
-
- el.className = classes.join(" ");
- return add;
- };
-} else {
- exports.hasCssClass = function(el, name) {
- return el.classList.contains(name);
- };
-
- exports.addCssClass = function(el, name) {
- el.classList.add(name);
- };
-
- exports.removeCssClass = function(el, name) {
- el.classList.remove(name);
- };
+ add = false;
+ classes.splice(index, 1);
+ }
+ if(add)
+ classes.push(name);
- exports.toggleCssClass = function(el, name) {
- return el.classList.toggle(name);
- };
-}
+ el.className = classes.join(" ");
+ return add;
+};
/**
* Add or remove a CSS class from the list of classes on the given node
@@ -4972,33 +1567,75 @@ exports.setCssClass = function(node, className, include) {
}
};
-exports.importCssString = function(cssText, doc){
+exports.hasCssString = function(id, doc) {
+ var index = 0, sheets;
doc = doc || document;
- if (doc.createStyleSheet) {
- var sheet = doc.createStyleSheet();
- sheet.cssText = cssText;
+ if (doc.createStyleSheet && (sheets = doc.styleSheets)) {
+ while (index < sheets.length)
+ if (sheets[index++].title === id) return true;
+ } else if ((sheets = doc.getElementsByTagName("style"))) {
+ while (index < sheets.length)
+ if (sheets[index++].id === id) return true;
}
- else {
- var style = doc.createElementNS ?
- doc.createElementNS(XHTML_NS, "style") :
- doc.createElement("style");
+
+ return false;
+};
+
+exports.importCssString = function importCssString(cssText, id, doc) {
+ doc = doc || document;
+ // If style is already imported return immediately.
+ if (id && exports.hasCssString(id, doc))
+ return null;
+
+ var style;
+
+ if (doc.createStyleSheet) {
+ style = doc.createStyleSheet();
+ style.cssText = cssText;
+ if (id)
+ style.title = id;
+ } else {
+ style = doc.createElementNS
+ ? doc.createElementNS(XHTML_NS, "style")
+ : doc.createElement("style");
style.appendChild(doc.createTextNode(cssText));
+ if (id)
+ style.id = id;
var head = doc.getElementsByTagName("head")[0] || doc.documentElement;
head.appendChild(style);
}
};
+exports.importCssStylsheet = function(uri, doc) {
+ if (doc.createStyleSheet) {
+ doc.createStyleSheet(uri);
+ } else {
+ var link = exports.createElement('link');
+ link.rel = 'stylesheet';
+ link.href = uri;
+
+ var head = doc.getElementsByTagName("head")[0] || doc.documentElement;
+ head.appendChild(link);
+ }
+};
+
exports.getInnerWidth = function(element) {
- return (parseInt(exports.computedStyle(element, "paddingLeft"))
- + parseInt(exports.computedStyle(element, "paddingRight")) + element.clientWidth);
+ return (
+ parseInt(exports.computedStyle(element, "paddingLeft"), 10) +
+ parseInt(exports.computedStyle(element, "paddingRight"), 10) +
+ element.clientWidth
+ );
};
exports.getInnerHeight = function(element) {
- return (parseInt(exports.computedStyle(element, "paddingTop"))
- + parseInt(exports.computedStyle(element, "paddingBottom")) + element.clientHeight);
+ return (
+ parseInt(exports.computedStyle(element, "paddingTop"), 10) +
+ parseInt(exports.computedStyle(element, "paddingBottom"), 10) +
+ element.clientHeight
+ );
};
if (window.pageYOffset !== undefined) {
@@ -5024,16 +1661,16 @@ if (window.getComputedStyle)
exports.computedStyle = function(element, style) {
if (style)
return (window.getComputedStyle(element, "") || {})[style] || "";
- return window.getComputedStyle(element, "") || {}
+ return window.getComputedStyle(element, "") || {};
};
else
exports.computedStyle = function(element, style) {
if (style)
return element.currentStyle[style];
- return element.currentStyle
+ return element.currentStyle;
};
-exports.scrollbarWidth = function() {
+exports.scrollbarWidth = function(document) {
var inner = exports.createElement("p");
inner.style.width = "100%";
@@ -5083,6 +1720,7 @@ exports.setInnerHtml = function(el, innerHtml) {
};
exports.setInnerText = function(el, innerText) {
+ var document = el.ownerDocument;
if (document.body && "textContent" in document.body)
el.textContent = innerText;
else
@@ -5091,6 +1729,7 @@ exports.setInnerText = function(el, innerText) {
};
exports.getInnerText = function(el) {
+ var document = el.ownerDocument;
if (document.body && "textContent" in document.body)
return el.textContent;
else
@@ -5101,38 +1740,6 @@ exports.getParentWindow = function(document) {
return document.defaultView || document.parentWindow;
};
-exports.getSelectionStart = function(textarea) {
- // TODO IE
- var start;
- try {
- start = textarea.selectionStart || 0;
- } catch (e) {
- start = 0;
- }
- return start;
-};
-
-exports.setSelectionStart = function(textarea, start) {
- // TODO IE
- return textarea.selectionStart = start;
-};
-
-exports.getSelectionEnd = function(textarea) {
- // TODO IE
- var end;
- try {
- end = textarea.selectionEnd || 0;
- } catch (e) {
- end = 0;
- }
- return end;
-};
-
-exports.setSelectionEnd = function(textarea, end) {
- // TODO IE
- return textarea.selectionEnd = end;
-};
-
});
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
@@ -5171,11 +1778,12 @@ exports.setSelectionEnd = function(textarea, end) {
*
* ***** END LICENSE BLOCK ***** */
-define('pilot/event', ['require', 'exports', 'module' , 'pilot/keys', 'pilot/useragent', 'pilot/dom'], function(require, exports, module) {
+define('ace/lib/event', ['require', 'exports', 'module' , 'ace/lib/keys', 'ace/lib/useragent', 'ace/lib/dom'], function(require, exports, module) {
+"use strict";
-var keys = require("pilot/keys");
-var useragent = require("pilot/useragent");
-var dom = require("pilot/dom");
+var keys = require("./keys");
+var useragent = require("./useragent");
+var dom = require("./dom");
exports.addListener = function(elem, type, callback) {
if (elem.addEventListener) {
@@ -5223,7 +1831,7 @@ exports.preventDefault = function(e) {
};
exports.getDocumentX = function(e) {
- if (e.clientX) {
+ if (e.clientX) {
return e.clientX + dom.getPageScrollLeft();
} else {
return e.pageX;
@@ -5246,7 +1854,7 @@ exports.getButton = function(e) {
return 0;
else if (e.type == "contextmenu")
return 2;
-
+
// DOM Event
if (e.preventDefault) {
return e.button;
@@ -5264,9 +1872,14 @@ if (document.documentElement.setCapture) {
return exports.stopPropagation(e);
}
+ var called = false;
function onReleaseCapture(e) {
- eventHandler && eventHandler(e);
- releaseCaptureHandler && releaseCaptureHandler();
+ eventHandler(e);
+
+ if (!called) {
+ called = true;
+ releaseCaptureHandler(e);
+ }
exports.removeListener(el, "mousemove", eventHandler);
exports.removeListener(el, "mouseup", onReleaseCapture);
@@ -5290,7 +1903,7 @@ else {
function onMouseUp(e) {
eventHandler && eventHandler(e);
- releaseCaptureHandler && releaseCaptureHandler();
+ releaseCaptureHandler && releaseCaptureHandler(e);
document.removeEventListener("mousemove", onMouseMove, true);
document.removeEventListener("mouseup", onMouseUp, true);
@@ -5304,14 +1917,26 @@ else {
}
exports.addMouseWheelListener = function(el, callback) {
+ var max = 0;
var listener = function(e) {
if (e.wheelDelta !== undefined) {
+
+ // some versions of Safari (e.g. 5.0.5) report insanely high
+ // scroll values. These browsers require a higher factor
+ if (Math.abs(e.wheelDeltaY) > max)
+ max = Math.abs(e.wheelDeltaY);
+
+ if (max > 5000)
+ var factor = 400;
+ else
+ var factor = 8;
+
if (e.wheelDeltaX !== undefined) {
- e.wheelX = -e.wheelDeltaX / 8;
- e.wheelY = -e.wheelDeltaY / 8;
+ e.wheelX = -e.wheelDeltaX / factor;
+ e.wheelY = -e.wheelDeltaY / factor;
} else {
e.wheelX = 0;
- e.wheelY = -e.wheelDelta / 8;
+ e.wheelY = -e.wheelDelta / factor;
}
}
else {
@@ -5352,13 +1977,13 @@ exports.addMultiMouseDownListener = function(el, button, count, timeout, callbac
clicks = 0;
callback(e);
}
-
+
if (isButton)
return exports.preventDefault(e);
};
exports.addListener(el, "mousedown", listener);
- useragent.isIE && exports.addListener(el, "dblclick", listener);
+ useragent.isOldIE && exports.addListener(el, "dblclick", listener);
};
function normalizeCommandKeys(callback, e, keyCode) {
@@ -5378,7 +2003,7 @@ function normalizeCommandKeys(callback, e, keyCode) {
break;
case "Shift":
hashId = 4;
- break
+ break;
case "Ctrl":
hashId = 1;
break;
@@ -5396,10 +2021,9 @@ function normalizeCommandKeys(callback, e, keyCode) {
// If there is no hashID and the keyCode is not a function key, then
// we don't call the callback as we don't handle a command key here
// (it's a normal key/character input).
- if (hashId == 0 && !(keyCode in keys.FUNCTION_KEYS)) {
+ if (!hashId && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) {
return false;
}
-
return callback(e, hashId, keyCode);
}
@@ -5432,7 +2056,7 @@ exports.addCommandKeyListener = function(el, callback) {
addListener(el, "keypress", function(e) {
var keyId = e.keyIdentifier || e.keyCode;
if (lastDown !== keyId) {
- return normalizeCommandKeys(callback, e, e.keyCode);
+ return normalizeCommandKeys(callback, e, lastDown);
} else {
lastDown = null;
}
@@ -5441,6 +2065,322 @@ exports.addCommandKeyListener = function(el, callback) {
}
};
+if (window.postMessage) {
+ var postMessageId = 1;
+ exports.nextTick = function(callback, win) {
+ win = win || window;
+ var messageName = "zero-timeout-message-" + postMessageId;
+ exports.addListener(win, "message", function listener(e) {
+ if (e.data == messageName) {
+ exports.stopPropagation(e);
+ exports.removeListener(win, "message", listener);
+ callback();
+ }
+ });
+ win.postMessage(messageName, "*");
+ };
+}
+else {
+ exports.nextTick = function(callback, win) {
+ win = win || window;
+ window.setTimeout(callback, 0);
+ };
+}
+
+});
+/*! @license
+==========================================================================
+SproutCore -- JavaScript Application Framework
+copyright 2006-2009, Sprout Systems Inc., Apple Inc. and contributors.
+
+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.
+
+SproutCore and the SproutCore logo are trademarks of Sprout Systems, Inc.
+
+For more information about SproutCore, visit http://www.sproutcore.com
+
+
+==========================================================================
+@license */
+
+// Most of the following code is taken from SproutCore with a few changes.
+
+define('ace/lib/keys', ['require', 'exports', 'module' , 'ace/lib/oop'], function(require, exports, module) {
+"use strict";
+
+var oop = require("./oop");
+
+/**
+ * Helper functions and hashes for key handling.
+ */
+var Keys = (function() {
+ var ret = {
+ MODIFIER_KEYS: {
+ 16: 'Shift', 17: 'Ctrl', 18: 'Alt', 224: 'Meta'
+ },
+
+ KEY_MODS: {
+ "ctrl": 1, "alt": 2, "option" : 2,
+ "shift": 4, "meta": 8, "command": 8
+ },
+
+ FUNCTION_KEYS : {
+ 8 : "Backspace",
+ 9 : "Tab",
+ 13 : "Return",
+ 19 : "Pause",
+ 27 : "Esc",
+ 32 : "Space",
+ 33 : "PageUp",
+ 34 : "PageDown",
+ 35 : "End",
+ 36 : "Home",
+ 37 : "Left",
+ 38 : "Up",
+ 39 : "Right",
+ 40 : "Down",
+ 44 : "Print",
+ 45 : "Insert",
+ 46 : "Delete",
+ 96 : "Numpad0",
+ 97 : "Numpad1",
+ 98 : "Numpad2",
+ 99 : "Numpad3",
+ 100: "Numpad4",
+ 101: "Numpad5",
+ 102: "Numpad6",
+ 103: "Numpad7",
+ 104: "Numpad8",
+ 105: "Numpad9",
+ 112: "F1",
+ 113: "F2",
+ 114: "F3",
+ 115: "F4",
+ 116: "F5",
+ 117: "F6",
+ 118: "F7",
+ 119: "F8",
+ 120: "F9",
+ 121: "F10",
+ 122: "F11",
+ 123: "F12",
+ 144: "Numlock",
+ 145: "Scrolllock"
+ },
+
+ PRINTABLE_KEYS: {
+ 32: ' ', 48: '0', 49: '1', 50: '2', 51: '3', 52: '4', 53: '5',
+ 54: '6', 55: '7', 56: '8', 57: '9', 59: ';', 61: '=', 65: 'a',
+ 66: 'b', 67: 'c', 68: 'd', 69: 'e', 70: 'f', 71: 'g', 72: 'h',
+ 73: 'i', 74: 'j', 75: 'k', 76: 'l', 77: 'm', 78: 'n', 79: 'o',
+ 80: 'p', 81: 'q', 82: 'r', 83: 's', 84: 't', 85: 'u', 86: 'v',
+ 87: 'w', 88: 'x', 89: 'y', 90: 'z', 107: '+', 109: '-', 110: '.',
+ 188: ',', 190: '.', 191: '/', 192: '`', 219: '[', 220: '\\',
+ 221: ']', 222: '\"'
+ }
+ };
+
+ // A reverse map of FUNCTION_KEYS
+ for (var i in ret.FUNCTION_KEYS) {
+ var name = ret.FUNCTION_KEYS[i].toUpperCase();
+ ret[name] = parseInt(i, 10);
+ }
+
+ // Add the MODIFIER_KEYS, FUNCTION_KEYS and PRINTABLE_KEYS to the KEY
+ // variables as well.
+ oop.mixin(ret, ret.MODIFIER_KEYS);
+ oop.mixin(ret, ret.PRINTABLE_KEYS);
+ oop.mixin(ret, ret.FUNCTION_KEYS);
+
+ return ret;
+})();
+oop.mixin(exports, Keys);
+
+exports.keyCodeToString = function(keyCode) {
+ return (Keys[keyCode] || String.fromCharCode(keyCode)).toLowerCase();
+}
+
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/lib/oop', ['require', 'exports', 'module' ], function(require, exports, module) {
+"use strict";
+
+exports.inherits = (function() {
+ var tempCtor = function() {};
+ return function(ctor, superCtor) {
+ tempCtor.prototype = superCtor.prototype;
+ ctor.super_ = superCtor.prototype;
+ ctor.prototype = new tempCtor();
+ ctor.prototype.constructor = ctor;
+ };
+}());
+
+exports.mixin = function(obj, mixin) {
+ for (var key in mixin) {
+ obj[key] = mixin[key];
+ }
+};
+
+exports.implement = function(proto, mixin) {
+ exports.mixin(proto, mixin);
+};
+
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/lib/useragent', ['require', 'exports', 'module' ], function(require, exports, module) {
+"use strict";
+
+var os = (navigator.platform.match(/mac|win|linux/i) || ["other"])[0].toLowerCase();
+var ua = navigator.userAgent;
+
+/** Is the user using a browser that identifies itself as Windows */
+exports.isWin = (os == "win");
+
+/** Is the user using a browser that identifies itself as Mac OS */
+exports.isMac = (os == "mac");
+
+/** Is the user using a browser that identifies itself as Linux */
+exports.isLinux = (os == "linux");
+
+exports.isIE =
+ navigator.appName == "Microsoft Internet Explorer"
+ && parseFloat(navigator.userAgent.match(/MSIE ([0-9]+[\.0-9]+)/)[1]);
+
+exports.isOldIE = exports.isIE && exports.isIE < 9;
+
+/** Is this Firefox or related? */
+exports.isGecko = exports.isMozilla = window.controllers && window.navigator.product === "Gecko";
+
+/** oldGecko == rev < 2.0 **/
+exports.isOldGecko = exports.isGecko && parseInt((navigator.userAgent.match(/rv\:(\d+)/)||[])[1], 10) < 4;
+
+/** Is this Opera */
+exports.isOpera = window.opera && Object.prototype.toString.call(window.opera) == "[object Opera]";
+
+/** Is the user using a browser that identifies itself as WebKit */
+exports.isWebKit = parseFloat(ua.split("WebKit/")[1]) || undefined;
+
+exports.isChrome = parseFloat(ua.split(" Chrome/")[1]) || undefined;
+
+exports.isAIR = ua.indexOf("AdobeAIR") >= 0;
+
+exports.isIPad = ua.indexOf("iPad") >= 0;
+
+exports.isTouchPad = ua.indexOf("TouchPad") >= 0;
+
+/**
+ * I hate doing this, but we need some way to determine if the user is on a Mac
+ * The reason is that users have different expectations of their key combinations.
+ *
+ * Take copy as an example, Mac people expect to use CMD or APPLE + C
+ * Windows folks expect to use CTRL + C
+ */
+exports.OS = {
+ LINUX: "LINUX",
+ MAC: "MAC",
+ WINDOWS: "WINDOWS"
+};
+
+/**
+ * Return an exports.OS constant
+ */
+exports.getOS = function() {
+ if (exports.isMac) {
+ return exports.OS.MAC;
+ } else if (exports.isLinux) {
+ return exports.OS.LINUX;
+ } else {
+ return exports.OS.WINDOWS;
+ }
+};
+
});
/* vim:ts=4:sts=4:sw=4:
* ***** BEGIN LICENSE BLOCK *****
@@ -5482,28 +2422,31 @@ exports.addCommandKeyListener = function(el, callback) {
*
* ***** END LICENSE BLOCK ***** */
-define('ace/editor', ['require', 'exports', 'module' , 'pilot/fixoldbrowsers', 'pilot/oop', 'pilot/event', 'pilot/lang', 'pilot/useragent', 'ace/keyboard/textinput', 'ace/mouse_handler', 'ace/keyboard/keybinding', 'ace/edit_session', 'ace/search', 'ace/range', 'pilot/event_emitter'], function(require, exports, module) {
-
-require("pilot/fixoldbrowsers");
-
-var oop = require("pilot/oop");
-var event = require("pilot/event");
-var lang = require("pilot/lang");
-var useragent = require("pilot/useragent");
-var TextInput = require("ace/keyboard/textinput").TextInput;
-var MouseHandler = require("ace/mouse_handler").MouseHandler;
-//var TouchHandler = require("ace/touch_handler").TouchHandler;
-var KeyBinding = require("ace/keyboard/keybinding").KeyBinding;
-var EditSession = require("ace/edit_session").EditSession;
-var Search = require("ace/search").Search;
-var Range = require("ace/range").Range;
-var EventEmitter = require("pilot/event_emitter").EventEmitter;
-
-var Editor =function(renderer, session) {
+define('ace/editor', ['require', 'exports', 'module' , 'ace/lib/fixoldbrowsers', 'ace/lib/oop', 'ace/lib/lang', 'ace/lib/useragent', 'ace/keyboard/textinput', 'ace/mouse/mouse_handler', 'ace/mouse/fold_handler', 'ace/keyboard/keybinding', 'ace/edit_session', 'ace/search', 'ace/range', 'ace/lib/event_emitter', 'ace/commands/command_manager', 'ace/commands/default_commands'], function(require, exports, module) {
+"use strict";
+
+require("./lib/fixoldbrowsers");
+
+var oop = require("./lib/oop");
+var lang = require("./lib/lang");
+var useragent = require("./lib/useragent");
+var TextInput = require("./keyboard/textinput").TextInput;
+var MouseHandler = require("./mouse/mouse_handler").MouseHandler;
+var FoldHandler = require("./mouse/fold_handler").FoldHandler;
+//var TouchHandler = require("./touch_handler").TouchHandler;
+var KeyBinding = require("./keyboard/keybinding").KeyBinding;
+var EditSession = require("./edit_session").EditSession;
+var Search = require("./search").Search;
+var Range = require("./range").Range;
+var EventEmitter = require("./lib/event_emitter").EventEmitter;
+var CommandManager = require("./commands/command_manager").CommandManager;
+var defaultCommands = require("./commands/default_commands").commands;
+
+var Editor = function(renderer, session) {
var container = renderer.getContainerElement();
this.container = container;
this.renderer = renderer;
-
+
this.textInput = new TextInput(renderer.getTextAreaContainer(), this);
this.keyBinding = new KeyBinding(this);
@@ -5512,6 +2455,7 @@ var Editor =function(renderer, session) {
//this.$mouseHandler = new TouchHandler(this);
} else {
this.$mouseHandler = new MouseHandler(this);
+ new FoldHandler(this);
}
this.$blockScrolling = 0;
@@ -5519,6 +2463,7 @@ var Editor =function(renderer, session) {
wrap: true
});
+ this.commands = new CommandManager(useragent.isMac ? "mac" : "win", defaultCommands);
this.setSession(session || new EditSession(""));
};
@@ -5526,30 +2471,6 @@ var Editor =function(renderer, session) {
oop.implement(this, EventEmitter);
- this.$forwardEvents = {
- gutterclick: 1,
- gutterdblclick: 1
- };
-
- this.$originalAddEventListener = this.addEventListener;
- this.$originalRemoveEventListener = this.removeEventListener;
-
- this.addEventListener = function(eventName, callback) {
- if (this.$forwardEvents[eventName]) {
- return this.renderer.addEventListener(eventName, callback);
- } else {
- return this.$originalAddEventListener(eventName, callback);
- }
- };
-
- this.removeEventListener = function(eventName, callback) {
- if (this.$forwardEvents[eventName]) {
- return this.renderer.removeEventListener(eventName, callback);
- } else {
- return this.$originalRemoveEventListener(eventName, callback);
- }
- };
-
this.setKeyboardHandler = function(keyboardHandler) {
this.keyBinding.setKeyboardHandler(keyboardHandler);
};
@@ -5576,12 +2497,12 @@ var Editor =function(renderer, session) {
this.session.removeEventListener("changeBreakpoint", this.$onChangeBreakpoint);
this.session.removeEventListener("changeAnnotation", this.$onChangeAnnotation);
this.session.removeEventListener("changeOverwrite", this.$onCursorChange);
+ this.session.removeEventListener("changeScrollTop", this.$onScrollTopChange);
+ this.session.removeEventListener("changeLeftTop", this.$onScrollLeftChange);
var selection = this.session.getSelection();
selection.removeEventListener("changeCursor", this.$onCursorChange);
selection.removeEventListener("changeSelection", this.$onSelectionChange);
-
- this.session.setScrollTopRow(this.renderer.getScrollTopRow());
}
this.session = session;
@@ -5623,6 +2544,12 @@ var Editor =function(renderer, session) {
this.$onCursorChange = this.onCursorChange.bind(this);
this.session.addEventListener("changeOverwrite", this.$onCursorChange);
+ this.$onScrollTopChange = this.onScrollTopChange.bind(this);
+ this.session.addEventListener("changeScrollTop", this.$onScrollTopChange);
+
+ this.$onScrollLeftChange = this.onScrollLeftChange.bind(this);
+ this.session.addEventListener("changeScrollLeft", this.$onScrollLeftChange);
+
this.selection = session.getSelection();
this.selection.addEventListener("changeCursor", this.$onCursorChange);
@@ -5632,16 +2559,17 @@ var Editor =function(renderer, session) {
this.onChangeMode();
this.onCursorChange();
+ this.onScrollTopChange();
+ this.onScrollLeftChange();
this.onSelectionChange();
this.onChangeFrontMarker();
this.onChangeBackMarker();
this.onChangeBreakpoint();
this.onChangeAnnotation();
this.session.getUseWrapMode() && this.renderer.adjustWrapLimit();
- this.renderer.scrollToRow(session.getScrollTopRow());
this.renderer.updateFull();
- this._dispatchEvent("changeSession", {
+ this._emit("changeSession", {
session: session,
oldSession: oldSession
});
@@ -5674,7 +2602,7 @@ var Editor =function(renderer, session) {
this.unsetStyle = function(style) {
this.renderer.unsetStyle(style);
};
-
+
this.setFontSize = function(size) {
this.container.style.fontSize = size;
};
@@ -5707,16 +2635,13 @@ var Editor =function(renderer, session) {
// Safari needs the timeout
// iOS and Firefox need it called immediately
// to be on the save side we do both
- // except for IE
var _self = this;
- if (!useragent.isIE) {
- setTimeout(function() {
- _self.textInput.focus();
- });
- }
+ setTimeout(function() {
+ _self.textInput.focus();
+ });
this.textInput.focus();
};
-
+
this.isFocused = function() {
return this.textInput.isFocused();
};
@@ -5728,27 +2653,30 @@ var Editor =function(renderer, session) {
this.onFocus = function() {
this.renderer.showCursor();
this.renderer.visualizeFocus();
- this._dispatchEvent("focus");
+ this._emit("focus");
};
this.onBlur = function() {
this.renderer.hideCursor();
this.renderer.visualizeBlur();
- this._dispatchEvent("blur");
+ this._emit("blur");
};
this.onDocumentChange = function(e) {
var delta = e.data;
var range = delta.range;
+ var lastRow;
if (range.start.row == range.end.row && delta.action != "insertLines" && delta.action != "removeLines")
- var lastRow = range.end.row;
+ lastRow = range.end.row;
else
lastRow = Infinity;
this.renderer.updateLines(range.start.row, lastRow);
+ this._emit("change", e);
+
// update cursor because tab characters can influence the cursor position
- this.renderer.updateCursor();
+ this.onCursorChange();
};
this.onTokenizerUpdate = function(e) {
@@ -5756,7 +2684,15 @@ var Editor =function(renderer, session) {
this.renderer.updateLines(rows.first, rows.last);
};
- this.onCursorChange = function(e) {
+ this.onScrollTopChange = function() {
+ this.renderer.scrollToY(this.session.getScrollTop());
+ };
+
+ this.onScrollLeftChange = function() {
+ this.renderer.scrollToX(this.session.getScrollLeft());
+ };
+
+ this.onCursorChange = function() {
this.renderer.updateCursor();
if (!this.$blockScrolling) {
@@ -5829,7 +2765,7 @@ var Editor =function(renderer, session) {
};
this.onChangeMode = function() {
- this.renderer.updateText()
+ this.renderer.updateText();
};
this.onChangeWrapLimit = function() {
@@ -5849,28 +2785,28 @@ var Editor =function(renderer, session) {
};
this.getCopyText = function() {
- if (!this.selection.isEmpty()) {
- return this.session.getTextRange(this.getSelectionRange());
- }
- else {
- return "";
- }
+ var text = "";
+ if (!this.selection.isEmpty())
+ text = this.session.getTextRange(this.getSelectionRange());
+
+ this._emit("copy", text);
+ return text;
};
this.onCut = function() {
if (this.$readOnly)
return;
+ var range = this.getSelectionRange();
+ this._emit("cut", range);
+
if (!this.selection.isEmpty()) {
- this.session.remove(this.getSelectionRange())
+ this.session.remove(range);
this.clearSelection();
}
};
this.insert = function(text) {
- if (this.$readOnly)
- return;
-
var session = this.session;
var mode = session.getMode();
@@ -5887,7 +2823,7 @@ var Editor =function(renderer, session) {
// remove selected text
if (!this.selection.isEmpty()) {
- var cursor = this.session.remove(this.getSelectionRange());
+ cursor = this.session.remove(this.getSelectionRange());
this.clearSelection();
}
else if (this.session.getOverwrite()) {
@@ -5957,34 +2893,16 @@ var Editor =function(renderer, session) {
session.remove(new Range(row, 0, row, i));
}
session.indentRows(cursor.row + 1, end.row, lineIndent);
- } else {
- if (shouldOutdent) {
- mode.autoOutdent(lineState, session, cursor.row);
- }
}
+ if (shouldOutdent)
+ mode.autoOutdent(lineState, session, cursor.row);
};
- this.onTextInput = function(text, notPasted) {
- // In case the text was not pasted and we got only one character, then
- // handel it as a command key stroke.
- if (notPasted && text.length == 1) {
- // Note: The `null` as `keyCode` is important here, as there are
- // some checks in the code for `keyCode == 0` meaning the text comes
- // from the keyBinding.onTextInput code path.
- var handled = this.keyBinding.onCommandKey({}, 0, null, text);
-
- // Check if the text was handled. If not, then handled it as "normal"
- // text and insert it to the editor directly. This shouldn't be done
- // using the this.keyBinding.onTextInput(text) function, as it would
- // make the `text` get sent to the keyboardHandler twice, which might
- // turn out to be a bad thing in case there is a custome keyboard
- // handler like the StateHandler.
- if (!handled) {
- this.insert(text);
- }
- } else {
- this.keyBinding.onTextInput(text);
- }
+ this.onTextInput = function(text, pasted) {
+ if (pasted)
+ this._emit("paste", text);
+
+ this.keyBinding.onTextInput(text, pasted);
};
this.onCommandKey = function(e, hashId, keyCode) {
@@ -6008,7 +2926,15 @@ var Editor =function(renderer, session) {
};
this.getScrollSpeed = function() {
- return this.$mouseHandler.getScrollSpeed()
+ return this.$mouseHandler.getScrollSpeed();
+ };
+
+ this.setDragDelay = function(dragDelay) {
+ this.$mouseHandler.setDragDelay(dragDelay);
+ };
+
+ this.getDragDelay = function() {
+ return this.$mouseHandler.getDragDelay();
};
this.$selectionStyle = "line";
@@ -6017,7 +2943,7 @@ var Editor =function(renderer, session) {
this.$selectionStyle = style;
this.onSelectionChange();
- this._dispatchEvent("changeSelectionStyle", {data: style});
+ this._emit("changeSelectionStyle", {data: style});
};
this.getSelectionStyle = function() {
@@ -6091,38 +3017,41 @@ var Editor =function(renderer, session) {
this.$modeBehaviours = true;
this.setBehavioursEnabled = function (enabled) {
this.$modeBehaviours = enabled;
- }
+ };
this.getBehavioursEnabled = function () {
return this.$modeBehaviours;
- }
+ };
- this.removeRight = function() {
- if (this.$readOnly)
+ this.setShowFoldWidgets = function(show) {
+ var gutter = this.renderer.$gutterLayer;
+ if (gutter.getShowFoldWidgets() == show)
return;
- if (this.selection.isEmpty()) {
- this.selection.selectRight();
- }
- this.session.remove(this.getSelectionRange())
- this.clearSelection();
+ this.renderer.$gutterLayer.setShowFoldWidgets(show);
+ this.$showFoldWidgets = show;
+ this.renderer.updateFull();
+ };
+
+ this.getShowFoldWidgets = function() {
+ return this.renderer.$gutterLayer.getShowFoldWidgets();
};
- this.removeLeft = function() {
- if (this.$readOnly)
- return;
-
- if (this.selection.isEmpty())
- this.selection.selectLeft();
+ this.remove = function(dir) {
+ if (this.selection.isEmpty()){
+ if(dir == "left")
+ this.selection.selectLeft();
+ else
+ this.selection.selectRight();
+ }
var range = this.getSelectionRange();
if (this.getBehavioursEnabled()) {
var session = this.session;
var state = session.getState(range.start.row);
var new_range = session.getMode().transformAction(state, 'deletion', this, session, range);
- if (new_range !== false) {
+ if (new_range)
range = new_range;
- }
}
this.session.remove(range);
@@ -6130,9 +3059,6 @@ var Editor =function(renderer, session) {
};
this.removeWordRight = function() {
- if (this.$readOnly)
- return;
-
if (this.selection.isEmpty())
this.selection.selectWordRight();
@@ -6141,9 +3067,6 @@ var Editor =function(renderer, session) {
};
this.removeWordLeft = function() {
- if (this.$readOnly)
- return;
-
if (this.selection.isEmpty())
this.selection.selectWordLeft();
@@ -6152,9 +3075,6 @@ var Editor =function(renderer, session) {
};
this.removeToLineStart = function() {
- if (this.$readOnly)
- return;
-
if (this.selection.isEmpty())
this.selection.selectLineStart();
@@ -6163,9 +3083,6 @@ var Editor =function(renderer, session) {
};
this.removeToLineEnd = function() {
- if (this.$readOnly)
- return;
-
if (this.selection.isEmpty())
this.selection.selectLineEnd();
@@ -6180,9 +3097,6 @@ var Editor =function(renderer, session) {
};
this.splitLine = function() {
- if (this.$readOnly)
- return;
-
if (!this.selection.isEmpty()) {
this.session.remove(this.getSelectionRange());
this.clearSelection();
@@ -6194,34 +3108,53 @@ var Editor =function(renderer, session) {
};
this.transposeLetters = function() {
- if (this.$readOnly)
- return;
-
if (!this.selection.isEmpty()) {
return;
}
var cursor = this.getCursorPosition();
var column = cursor.column;
- if (column == 0)
+ if (column === 0)
return;
var line = this.session.getLine(cursor.row);
+ var swap, range;
if (column < line.length) {
- var swap = line.charAt(column) + line.charAt(column-1);
- var range = new Range(cursor.row, column-1, cursor.row, column+1)
+ swap = line.charAt(column) + line.charAt(column-1);
+ range = new Range(cursor.row, column-1, cursor.row, column+1);
}
else {
- var swap = line.charAt(column-1) + line.charAt(column-2);
- var range = new Range(cursor.row, column-2, cursor.row, column)
+ swap = line.charAt(column-1) + line.charAt(column-2);
+ range = new Range(cursor.row, column-2, cursor.row, column);
}
this.session.replace(range, swap);
};
- this.indent = function() {
- if (this.$readOnly)
- return;
+ this.toLowerCase = function() {
+ var originalRange = this.getSelectionRange();
+ if (this.selection.isEmpty()) {
+ this.selection.selectWord();
+ }
+
+ var range = this.getSelectionRange();
+ var text = this.session.getTextRange(range);
+ this.session.replace(range, text.toLowerCase());
+ this.selection.setSelectionRange(originalRange);
+ };
+ this.toUpperCase = function() {
+ var originalRange = this.getSelectionRange();
+ if (this.selection.isEmpty()) {
+ this.selection.selectWord();
+ }
+
+ var range = this.getSelectionRange();
+ var text = this.session.getTextRange(range);
+ this.session.replace(range, text.toUpperCase());
+ this.selection.setSelectionRange(originalRange);
+ };
+
+ this.indent = function() {
var session = this.session;
var range = this.getSelectionRange();
@@ -6240,37 +3173,29 @@ var Editor =function(renderer, session) {
indentString = lang.stringRepeat(" ", count);
} else
indentString = "\t";
- return this.onTextInput(indentString);
+ return this.insert(indentString);
}
};
this.blockOutdent = function() {
- if (this.$readOnly)
- return;
-
var selection = this.session.getSelection();
this.session.outdentRows(selection.getRange());
};
this.toggleCommentLines = function() {
- if (this.$readOnly)
- return;
-
var state = this.session.getState(this.getCursorPosition().row);
- var rows = this.$getSelectedRows()
+ var rows = this.$getSelectedRows();
this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last);
};
this.removeLines = function() {
- if (this.$readOnly)
- return;
-
var rows = this.$getSelectedRows();
- if (rows.last == 0 || rows.last+1 < this.session.getLength())
- var range = new Range(rows.first, 0, rows.last+1, 0)
+ var range;
+ if (rows.first === 0 || rows.last+1 < this.session.getLength())
+ range = new Range(rows.first, 0, rows.last+1, 0);
else
- var range = new Range(
- rows.first-1, this.session.getLine(rows.first).length,
+ range = new Range(
+ rows.first-1, this.session.getLine(rows.first-1).length,
rows.last, this.session.getLine(rows.last).length
);
this.session.remove(range);
@@ -6278,18 +3203,12 @@ var Editor =function(renderer, session) {
};
this.moveLinesDown = function() {
- if (this.$readOnly)
- return;
-
this.$moveLines(function(firstRow, lastRow) {
return this.session.moveLinesDown(firstRow, lastRow);
});
};
this.moveLinesUp = function() {
- if (this.$readOnly)
- return;
-
this.$moveLines(function(firstRow, lastRow) {
return this.session.moveLinesUp(firstRow, lastRow);
});
@@ -6303,9 +3222,6 @@ var Editor =function(renderer, session) {
};
this.copyLinesUp = function() {
- if (this.$readOnly)
- return;
-
this.$moveLines(function(firstRow, lastRow) {
this.session.duplicateLines(firstRow, lastRow);
return 0;
@@ -6313,9 +3229,6 @@ var Editor =function(renderer, session) {
};
this.copyLinesDown = function() {
- if (this.$readOnly)
- return;
-
this.$moveLines(function(firstRow, lastRow) {
return this.session.duplicateLines(firstRow, lastRow);
});
@@ -6324,14 +3237,25 @@ var Editor =function(renderer, session) {
this.$moveLines = function(mover) {
var rows = this.$getSelectedRows();
+ var selection = this.selection;
+ if (!selection.isMultiLine()) {
+ var range = selection.getRange();
+ var reverse = selection.isBackwards();
+ }
var linesMoved = mover.call(this, rows.first, rows.last);
- var selection = this.selection;
- selection.setSelectionAnchor(rows.last+linesMoved+1, 0);
- selection.$moveSelection(function() {
- selection.moveCursorTo(rows.first+linesMoved, 0);
- });
+ if (range) {
+ range.start.row += linesMoved;
+ range.end.row += linesMoved;
+ selection.setSelectionRange(range, reverse);
+ }
+ else {
+ selection.setSelectionAnchor(rows.last+linesMoved+1, 0);
+ selection.$moveSelection(function() {
+ selection.moveCursorTo(rows.first+linesMoved, 0);
+ });
+ }
};
this.$getSelectedRows = function() {
@@ -6355,7 +3279,6 @@ var Editor =function(renderer, session) {
this.renderer.hideComposition();
};
-
this.getFirstVisibleRow = function() {
return this.renderer.getFirstVisibleRow();
};
@@ -6368,6 +3291,10 @@ var Editor =function(renderer, session) {
return (row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow());
};
+ this.isRowFullyVisible = function(row) {
+ return (row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow());
+ };
+
this.$getVisibleRowCount = function() {
return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1;
};
@@ -6475,18 +3402,34 @@ var Editor =function(renderer, session) {
this.selection.moveCursorToPosition(pos);
};
-
+ this.jumpToMatching = function() {
+ var cursor = this.getCursorPosition();
+ var pos = this.session.findMatchingBracket(cursor);
+ if (!pos) {
+ cursor.column += 1;
+ pos = this.session.findMatchingBracket(cursor);
+ }
+ if (!pos) {
+ cursor.column -= 2;
+ pos = this.session.findMatchingBracket(cursor);
+ }
+
+ if (pos) {
+ this.clearSelection();
+ this.moveCursorTo(pos.row, pos.column);
+ }
+ };
+
this.gotoLine = function(lineNumber, column) {
this.selection.clearSelection();
+ this.session.unfold({row: lineNumber - 1, column: column || 0});
this.$blockScrolling += 1;
this.moveCursorTo(lineNumber-1, column || 0);
this.$blockScrolling -= 1;
-
- if (!this.isRowVisible(this.getCursorPosition().row)) {
+ if (!this.isRowFullyVisible(this.getCursorPosition().row))
this.scrollToLine(lineNumber, true);
- }
- },
+ };
this.navigateTo = function(row, column) {
this.clearSelection();
@@ -6574,7 +3517,7 @@ var Editor =function(renderer, session) {
this.$tryReplace(range, replacement);
if (range !== null)
this.selection.setSelectionRange(range);
- },
+ };
this.replaceAll = function(replacement, options) {
if (options) {
@@ -6595,11 +3538,11 @@ var Editor =function(renderer, session) {
this.selection.setSelectionRange(selection);
this.$blockScrolling -= 1;
- },
+ };
this.$tryReplace = function(range, replacement) {
var input = this.session.getTextRange(range);
- var replacement = this.$search.replace(input, replacement);
+ replacement = this.$search.replace(input, replacement);
if (replacement !== null) {
range.end = this.session.replace(range, replacement);
return range;
@@ -6618,7 +3561,7 @@ var Editor =function(renderer, session) {
options.needle = needle;
this.$search.set(options);
this.$find();
- },
+ };
this.findNext = function(options) {
options = options || {};
@@ -6637,15 +3580,15 @@ var Editor =function(renderer, session) {
};
this.$find = function(backwards) {
- if (!this.selection.isEmpty()) {
+ if (!this.selection.isEmpty())
this.$search.set({needle: this.session.getTextRange(this.getSelectionRange())});
- }
if (typeof backwards != "undefined")
this.$search.set({backwards: backwards});
var range = this.$search.find(this.session);
if (range) {
+ this.session.unfold(range);
this.gotoLine(range.end.row+1, range.end.column);
this.selection.setSelectionRange(range);
}
@@ -6661,13 +3604,163 @@ var Editor =function(renderer, session) {
this.destroy = function() {
this.renderer.destroy();
- }
+ };
}).call(Editor.prototype);
exports.Editor = Editor;
});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/lib/lang', ['require', 'exports', 'module' ], function(require, exports, module) {
+"use strict";
+
+exports.stringReverse = function(string) {
+ return string.split("").reverse().join("");
+};
+
+exports.stringRepeat = function (string, count) {
+ return new Array(count + 1).join(string);
+};
+
+var trimBeginRegexp = /^\s\s*/;
+var trimEndRegexp = /\s\s*$/;
+
+exports.stringTrimLeft = function (string) {
+ return string.replace(trimBeginRegexp, '');
+};
+
+exports.stringTrimRight = function (string) {
+ return string.replace(trimEndRegexp, '');
+};
+
+exports.copyObject = function(obj) {
+ var copy = {};
+ for (var key in obj) {
+ copy[key] = obj[key];
+ }
+ return copy;
+};
+
+exports.copyArray = function(array){
+ var copy = [];
+ for (var i=0, l=array.length; i<l; i++) {
+ if (array[i] && typeof array[i] == "object")
+ copy[i] = this.copyObject( array[i] );
+ else
+ copy[i] = array[i];
+ }
+ return copy;
+};
+
+exports.deepCopy = function (obj) {
+ if (typeof obj != "object") {
+ return obj;
+ }
+
+ var copy = obj.constructor();
+ for (var key in obj) {
+ if (typeof obj[key] == "object") {
+ copy[key] = this.deepCopy(obj[key]);
+ } else {
+ copy[key] = obj[key];
+ }
+ }
+ return copy;
+};
+
+exports.arrayToMap = function(arr) {
+ var map = {};
+ for (var i=0; i<arr.length; i++) {
+ map[arr[i]] = 1;
+ }
+ return map;
+
+};
+
+/**
+ * splice out of 'array' anything that === 'value'
+ */
+exports.arrayRemove = function(array, value) {
+ for (var i = 0; i <= array.length; i++) {
+ if (value === array[i]) {
+ array.splice(i, 1);
+ }
+ }
+};
+
+exports.escapeRegExp = function(str) {
+ return str.replace(/([.*+?^${}()|[\]\/\\])/g, '\\$1');
+};
+
+exports.deferredCall = function(fcn) {
+
+ var timer = null;
+ var callback = function() {
+ timer = null;
+ fcn();
+ };
+
+ var deferred = function(timeout) {
+ deferred.cancel();
+ timer = setTimeout(callback, timeout || 0);
+ return deferred;
+ };
+
+ deferred.schedule = deferred;
+
+ deferred.call = function() {
+ this.cancel();
+ fcn();
+ return deferred;
+ };
+
+ deferred.cancel = function() {
+ clearTimeout(timer);
+ timer = null;
+ return deferred;
+ };
+
+ return deferred;
+};
+
+});
/* vim:ts=4:sts=4:sw=4:
* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
@@ -6707,17 +3800,22 @@ exports.Editor = Editor;
*
* ***** END LICENSE BLOCK ***** */
-define('ace/keyboard/textinput', ['require', 'exports', 'module' , 'pilot/event', 'pilot/useragent', 'pilot/dom'], function(require, exports, module) {
+define('ace/keyboard/textinput', ['require', 'exports', 'module' , 'ace/lib/event', 'ace/lib/useragent', 'ace/lib/dom'], function(require, exports, module) {
+"use strict";
-var event = require("pilot/event");
-var useragent = require("pilot/useragent");
-var dom = require("pilot/dom");
+var event = require("../lib/event");
+var useragent = require("../lib/useragent");
+var dom = require("../lib/dom");
var TextInput = function(parentNode, host) {
var text = dom.createElement("textarea");
+ if (useragent.isTouchPad)
+ text.setAttribute("x-palm-disable-auto-cap", true);
+
text.style.left = "-10000px";
- parentNode.appendChild(text);
+ text.style.position = "fixed";
+ parentNode.insertBefore(text, parentNode.firstChild);
var PLACEHOLDER = String.fromCharCode(0);
sendText();
@@ -6727,6 +3825,12 @@ var TextInput = function(parentNode, host) {
var pasted = false;
var tempStyle = '';
+ function select() {
+ try {
+ text.select();
+ } catch (e) {}
+ }
+
function sendText(valueToSend) {
if (!copied) {
var value = valueToSend || text.value;
@@ -6734,10 +3838,10 @@ var TextInput = function(parentNode, host) {
if (value.charCodeAt(value.length-1) == PLACEHOLDER.charCodeAt(0)) {
value = value.slice(0, -1);
if (value)
- host.onTextInput(value, !pasted);
+ host.onTextInput(value, pasted);
}
else {
- host.onTextInput(value, !pasted);
+ host.onTextInput(value, pasted);
}
// If editor is no longer focused we quit immediately, since
@@ -6752,7 +3856,7 @@ var TextInput = function(parentNode, host) {
// Safari doesn't fire copy events if no text is selected
text.value = PLACEHOLDER;
- text.select();
+ select();
}
var onTextInput = function(e) {
@@ -6762,8 +3866,8 @@ var TextInput = function(parentNode, host) {
}, 0);
};
- var onKeyPress = function(e) {
- if (useragent.isIE && text.value.charCodeAt(0) > 128) return;
+ var onPropertyChange = function(e) {
+ if (useragent.isOldIE && text.value.charCodeAt(0) > 128) return;
setTimeout(function() {
if (!inCompostion)
sendText();
@@ -6793,12 +3897,12 @@ var TextInput = function(parentNode, host) {
text.value = copyText;
else
e.preventDefault();
- text.select();
+ select();
setTimeout(function () {
sendText();
}, 0);
};
-
+
var onCut = function(e) {
copied = true;
var copyText = host.getCopyText();
@@ -6807,40 +3911,29 @@ var TextInput = function(parentNode, host) {
host.onCut();
} else
e.preventDefault();
- text.select();
+ select();
setTimeout(function () {
sendText();
}, 0);
};
event.addCommandKeyListener(text, host.onCommandKey.bind(host));
- if (useragent.isIE) {
+ if (useragent.isOldIE) {
var keytable = { 13:1, 27:1 };
event.addListener(text, "keyup", function (e) {
if (inCompostion && (!text.value || keytable[e.keyCode]))
setTimeout(onCompositionEnd, 0);
if ((text.value.charCodeAt(0)|0) < 129) {
return;
- };
+ }
inCompostion ? onCompositionUpdate() : onCompositionStart();
});
- };
-
- if (text.attachEvent) {
- // Old IE + Opera
- event.addListener(text, "propertychange", onKeyPress);
- }
- else {
- if (useragent.isChrome || useragent.isSafari)
- event.addListener(text, "textInput", onTextInput);
- else if (useragent.isIE)
- // IE9
- event.addListener(text, "textinput", onTextInput);
- else
- // All browsers except old IE
- event.addListener(text, "input", onTextInput);
}
+ if ("onpropertychange" in text && !("oninput" in text))
+ event.addListener(text, "propertychange", onPropertyChange);
+ else
+ event.addListener(text, "input", onTextInput);
event.addListener(text, "paste", function(e) {
// Mark that the next input text comes from past.
@@ -6854,14 +3947,14 @@ var TextInput = function(parentNode, host) {
else {
// If a browser doesn't support any of the things above, use the regular
// method to detect the pasted input.
- onKeyPress();
+ onPropertyChange();
}
});
- if (useragent.isIE) {
+ if ("onbeforecopy" in text && typeof clipboardData !== "undefined") {
event.addListener(text, "beforecopy", function(e) {
var copyText = host.getCopyText();
- if(copyText)
+ if (copyText)
clipboardData.setData("Text", copyText);
else
e.preventDefault();
@@ -6873,7 +3966,7 @@ var TextInput = function(parentNode, host) {
clipboardData.setData("Text", copyText);
host.onCut();
}
- event.preventDefault(e)
+ event.preventDefault(e);
}
});
}
@@ -6885,10 +3978,10 @@ var TextInput = function(parentNode, host) {
event.addListener(text, "compositionstart", onCompositionStart);
if (useragent.isGecko) {
event.addListener(text, "text", onCompositionUpdate);
- };
+ }
if (useragent.isWebKit) {
event.addListener(text, "keyup", onCompositionUpdate);
- };
+ }
event.addListener(text, "compositionend", onCompositionEnd);
event.addListener(text, "blur", function() {
@@ -6897,12 +3990,12 @@ var TextInput = function(parentNode, host) {
event.addListener(text, "focus", function() {
host.onFocus();
- text.select();
+ select();
});
this.focus = function() {
host.onFocus();
- text.select();
+ select();
text.focus();
};
@@ -6912,7 +4005,7 @@ var TextInput = function(parentNode, host) {
function isFocused() {
return document.activeElement === text;
- };
+ }
this.isFocused = isFocused;
this.getElement = function() {
@@ -6921,15 +4014,17 @@ var TextInput = function(parentNode, host) {
this.onContextMenu = function(mousePos, isEmpty){
if (mousePos) {
- if(!tempStyle)
+ if (!tempStyle)
tempStyle = text.style.cssText;
- text.style.cssText = 'position:fixed; z-index:1000;' +
- 'left:' + (mousePos.x - 2) + 'px; top:' + (mousePos.y - 2) + 'px;'
+
+ text.style.cssText =
+ 'position:fixed; z-index:1000;' +
+ 'left:' + (mousePos.x - 2) + 'px; top:' + (mousePos.y - 2) + 'px;';
}
if (isEmpty)
text.value='';
- }
+ };
this.onContextMenuClose = function(){
setTimeout(function () {
@@ -6939,7 +4034,7 @@ var TextInput = function(parentNode, host) {
}
sendText();
}, 0);
- }
+ };
};
exports.TextInput = TextInput;
@@ -6983,23 +4078,20 @@ exports.TextInput = TextInput;
*
* ***** END LICENSE BLOCK ***** */
-define('ace/mouse_handler', ['require', 'exports', 'module' , 'pilot/event', 'pilot/dom', 'pilot/browser_focus'], function(require, exports, module) {
-
-var event = require("pilot/event");
-var dom = require("pilot/dom");
-var BrowserFocus = require("pilot/browser_focus").BrowserFocus;
-
-var STATE_UNKNOWN = 0;
-var STATE_SELECT = 1;
-var STATE_DRAG = 2;
+define('ace/mouse/mouse_handler', ['require', 'exports', 'module' , 'ace/lib/event', 'ace/mouse/default_handlers', 'ace/mouse/default_gutter_handler', 'ace/mouse/mouse_event'], function(require, exports, module) {
+"use strict";
-var DRAG_TIMER = 250; // milliseconds
-var DRAG_OFFSET = 5; // pixels
+var event = require("../lib/event");
+var DefaultHandlers = require("./default_handlers").DefaultHandlers;
+var DefaultGutterHandler = require("./default_gutter_handler").GutterHandler;
+var MouseEvent = require("./mouse_event").MouseEvent;
var MouseHandler = function(editor) {
this.editor = editor;
- this.browserFocus = new BrowserFocus();
+ new DefaultHandlers(editor);
+ new DefaultGutterHandler(editor);
+
event.addListener(editor.container, "mousedown", function(e) {
editor.focus();
return event.preventDefault(e);
@@ -7009,11 +4101,19 @@ var MouseHandler = function(editor) {
});
var mouseTarget = editor.renderer.getMouseEventTarget();
- event.addListener(mouseTarget, "mousedown", this.onMouseDown.bind(this));
- event.addMultiMouseDownListener(mouseTarget, 0, 2, 500, this.onMouseDoubleClick.bind(this));
- event.addMultiMouseDownListener(mouseTarget, 0, 3, 600, this.onMouseTripleClick.bind(this));
- event.addMultiMouseDownListener(mouseTarget, 0, 4, 600, this.onMouseQuadClick.bind(this));
- event.addMouseWheelListener(mouseTarget, this.onMouseWheel.bind(this));
+ event.addListener(mouseTarget, "mousedown", this.onMouseEvent.bind(this, "mousedown"));
+ event.addListener(mouseTarget, "click", this.onMouseEvent.bind(this, "click"));
+ event.addListener(mouseTarget, "mousemove", this.onMouseMove.bind(this, "mousemove"));
+ event.addMultiMouseDownListener(mouseTarget, 0, 2, 500, this.onMouseEvent.bind(this, "dblclick"));
+ event.addMultiMouseDownListener(mouseTarget, 0, 3, 600, this.onMouseEvent.bind(this, "tripleclick"));
+ event.addMultiMouseDownListener(mouseTarget, 0, 4, 600, this.onMouseEvent.bind(this, "quadclick"));
+ event.addMouseWheelListener(editor.container, this.onMouseWheel.bind(this, "mousewheel"));
+
+ var gutterEl = editor.renderer.$gutter;
+ event.addListener(gutterEl, "mousedown", this.onMouseEvent.bind(this, "guttermousedown"));
+ event.addListener(gutterEl, "click", this.onMouseEvent.bind(this, "gutterclick"));
+ event.addListener(gutterEl, "dblclick", this.onMouseEvent.bind(this, "gutterdblclick"));
+ event.addListener(gutterEl, "mousemove", this.onMouseMove.bind(this, "gutter"));
};
(function() {
@@ -7027,59 +4127,142 @@ var MouseHandler = function(editor) {
return this.$scrollSpeed;
};
- this.$getEventPosition = function(e) {
- var pageX = event.getDocumentX(e);
- var pageY = event.getDocumentY(e);
- var pos = this.editor.renderer.screenToTextCoordinates(pageX, pageY);
- pos.row = Math.max(0, Math.min(pos.row, this.editor.session.getLength()-1));
- return pos;
+ this.onMouseEvent = function(name, e) {
+ this.editor._emit(name, new MouseEvent(e, this.editor));
+ };
+
+ this.$dragDelay = 250;
+ this.setDragDelay = function(dragDelay) {
+ this.$dragDelay = dragDelay;
};
- this.$distance = function(ax, ay, bx, by) {
- return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));
+ this.getDragDelay = function() {
+ return this.$dragDelay;
};
- this.onMouseDown = function(e) {
- // if this click caused the editor to be focused ignore the click
- // for selection and cursor placement
- if (
- !this.browserFocus.isFocused()
- || new Date().getTime() - this.browserFocus.lastFocus < 20
- || !this.editor.isFocused()
- )
+ this.onMouseMove = function(name, e) {
+ // optimization, because mousemove doesn't have a default handler.
+ var listeners = this.editor._eventRegistry && this.editor._eventRegistry.mousemove;
+ if (!listeners || !listeners.length)
return;
+
+ this.editor._emit(name, new MouseEvent(e, this.editor));
+ };
+
+ this.onMouseWheel = function(name, e) {
+ var mouseEvent = new MouseEvent(e, this.editor);
+ mouseEvent.speed = this.$scrollSpeed * 2;
+ mouseEvent.wheelX = e.wheelX;
+ mouseEvent.wheelY = e.wheelY;
- var pageX = event.getDocumentX(e);
- var pageY = event.getDocumentY(e);
- var pos = this.$getEventPosition(e);
+ this.editor._emit(name, mouseEvent);
+ };
+
+}).call(MouseHandler.prototype);
+
+exports.MouseHandler = MouseHandler;
+});
+/* vim:ts=4:sts=4:sw=4:
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ * Mike de Boer <mike AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mouse/default_handlers', ['require', 'exports', 'module' , 'ace/lib/event', 'ace/lib/dom', 'ace/lib/browser_focus'], function(require, exports, module) {
+"use strict";
+
+var event = require("../lib/event");
+var dom = require("../lib/dom");
+var BrowserFocus = require("../lib/browser_focus").BrowserFocus;
+
+var STATE_UNKNOWN = 0;
+var STATE_SELECT = 1;
+var STATE_DRAG = 2;
+
+var DRAG_OFFSET = 5; // pixels
+
+function DefaultHandlers(editor) {
+ this.editor = editor;
+ this.$clickSelection = null;
+ this.browserFocus = new BrowserFocus();
+
+ editor.setDefaultHandler("mousedown", this.onMouseDown.bind(this));
+ editor.setDefaultHandler("dblclick", this.onDoubleClick.bind(this));
+ editor.setDefaultHandler("tripleclick", this.onTripleClick.bind(this));
+ editor.setDefaultHandler("quadclick", this.onQuadClick.bind(this));
+ editor.setDefaultHandler("mousewheel", this.onScroll.bind(this));
+}
+
+(function() {
+
+ this.onMouseDown = function(ev) {
+ var inSelection = ev.inSelection();
+ var pageX = ev.pageX;
+ var pageY = ev.pageY;
+ var pos = ev.getDocumentPosition();
var editor = this.editor;
- var self = this;
+ var _self = this;
+
var selectionRange = editor.getSelectionRange();
var selectionEmpty = selectionRange.isEmpty();
var state = STATE_UNKNOWN;
- var inSelection = false;
+
+ // if this click caused the editor to be focused should not clear the
+ // selection
+ if (
+ inSelection && (
+ !this.browserFocus.isFocused()
+ || new Date().getTime() - this.browserFocus.lastFocus < 20
+ || !editor.isFocused()
+ )
+ ) {
+ editor.focus();
+ return;
+ }
- var button = event.getButton(e);
+ var button = ev.getButton();
if (button !== 0) {
if (selectionEmpty) {
editor.moveCursorToPosition(pos);
}
- if(button == 2) {
- editor.textInput.onContextMenu({x: pageX, y: pageY}, selectionEmpty);
+ if (button == 2) {
+ editor.textInput.onContextMenu({x: ev.clientX, y: ev.clientY}, selectionEmpty);
event.capture(editor.container, function(){}, editor.textInput.onContextMenuClose);
}
return;
- } else {
- // Select the fold as the user clicks it.
- var fold = editor.session.getFoldAt(pos.row, pos.column, 1);
- if (fold) {
- editor.selection.setSelectionRange(fold.range);
- return;
- }
-
- inSelection = !editor.getReadOnly()
- && !selectionEmpty
- && selectionRange.contains(pos.row, pos.column);
}
if (!inSelection) {
@@ -7088,32 +4271,31 @@ var MouseHandler = function(editor) {
onStartSelect(pos);
}
- var mousePageX, mousePageY;
- var overwrite = editor.getOverwrite();
+ var mousePageX = pageX, mousePageY = pageY;
var mousedownTime = (new Date()).getTime();
- var dragCursor, dragRange;
+ var dragCursor, dragRange, dragSelectionMarker;
var onMouseSelection = function(e) {
mousePageX = event.getDocumentX(e);
mousePageY = event.getDocumentY(e);
};
- var onMouseSelectionEnd = function() {
+ var onMouseSelectionEnd = function(e) {
clearInterval(timerId);
if (state == STATE_UNKNOWN)
onStartSelect(pos);
else if (state == STATE_DRAG)
- onMouseDragSelectionEnd();
+ onMouseDragSelectionEnd(e);
- self.$clickSelection = null;
+ _self.$clickSelection = null;
state = STATE_UNKNOWN;
};
- var onMouseDragSelectionEnd = function() {
+ var onMouseDragSelectionEnd = function(e) {
dom.removeCssClass(editor.container, "ace_dragging");
editor.session.removeMarker(dragSelectionMarker);
- if (!self.$clickSelection) {
+ if (!editor.$mouseHandler.$clickSelection) {
if (!dragCursor) {
editor.moveCursorToPosition(pos);
editor.selection.clearSelection(pos.row, pos.column);
@@ -7129,7 +4311,12 @@ var MouseHandler = function(editor) {
}
editor.clearSelection();
- var newRange = editor.moveText(dragRange, dragCursor);
+ if (e && (e.ctrlKey || e.altKey)) {
+ var session = editor.session;
+ var newRange = session.insert(dragCursor, session.getTextRange(dragRange));
+ } else {
+ var newRange = editor.moveText(dragRange, dragCursor);
+ }
if (!newRange) {
dragCursor = null;
return;
@@ -7139,20 +4326,17 @@ var MouseHandler = function(editor) {
};
var onSelectionInterval = function() {
- if (mousePageX === undefined || mousePageY === undefined)
- return;
-
if (state == STATE_UNKNOWN) {
- var distance = self.$distance(pageX, pageY, mousePageX, mousePageY);
+ var distance = calcDistance(pageX, pageY, mousePageX, mousePageY);
var time = (new Date()).getTime();
-
if (distance > DRAG_OFFSET) {
state = STATE_SELECT;
var cursor = editor.renderer.screenToTextCoordinates(mousePageX, mousePageY);
cursor.row = Math.max(0, Math.min(cursor.row, editor.session.getLength()-1));
onStartSelect(cursor);
- } else if ((time - mousedownTime) > DRAG_TIMER) {
+ }
+ else if ((time - mousedownTime) > editor.getDragDelay()) {
state = STATE_DRAG;
dragRange = editor.getSelectionRange();
var style = editor.getSelectionStyle();
@@ -7170,10 +4354,11 @@ var MouseHandler = function(editor) {
};
function onStartSelect(pos) {
- if (e.shiftKey)
- editor.selection.selectToPosition(pos)
+ if (ev.getShiftKey()) {
+ editor.selection.selectToPosition(pos);
+ }
else {
- if (!self.$clickSelection) {
+ if (!_self.$clickSelection) {
editor.moveCursorToPosition(pos);
editor.selection.clearSelection(pos.row, pos.column);
}
@@ -7182,17 +4367,20 @@ var MouseHandler = function(editor) {
}
var onUpdateSelectionInterval = function() {
+ var anchor;
var cursor = editor.renderer.screenToTextCoordinates(mousePageX, mousePageY);
cursor.row = Math.max(0, Math.min(cursor.row, editor.session.getLength()-1));
- if (self.$clickSelection) {
- if (self.$clickSelection.contains(cursor.row, cursor.column)) {
- editor.selection.setSelectionRange(self.$clickSelection);
- } else {
- if (self.$clickSelection.compare(cursor.row, cursor.column) == -1) {
- var anchor = self.$clickSelection.end;
- } else {
- var anchor = self.$clickSelection.start;
+ if (_self.$clickSelection) {
+ if (_self.$clickSelection.contains(cursor.row, cursor.column)) {
+ editor.selection.setSelectionRange(_self.$clickSelection);
+ }
+ else {
+ if (_self.$clickSelection.compare(cursor.row, cursor.column) == -1) {
+ anchor = _self.$clickSelection.end;
+ }
+ else {
+ anchor = _self.$clickSelection.start;
}
editor.selection.setSelectionAnchor(anchor.row, anchor.column);
editor.selection.selectToPosition(cursor);
@@ -7207,8 +4395,7 @@ var MouseHandler = function(editor) {
var onDragSelectionInterval = function() {
dragCursor = editor.renderer.screenToTextCoordinates(mousePageX, mousePageY);
- dragCursor.row = Math.max(0, Math.min(dragCursor.row,
- editor.session.getLength() - 1));
+ dragCursor.row = Math.max(0, Math.min(dragCursor.row, editor.session.getLength() - 1));
editor.moveCursorToPosition(dragCursor);
};
@@ -7216,47 +4403,50 @@ var MouseHandler = function(editor) {
event.capture(editor.container, onMouseSelection, onMouseSelectionEnd);
var timerId = setInterval(onSelectionInterval, 20);
- return event.preventDefault(e);
+ return ev.preventDefault();
};
-
- this.onMouseDoubleClick = function(e) {
+
+ this.onDoubleClick = function(ev) {
+ var pos = ev.getDocumentPosition();
var editor = this.editor;
- var pos = this.$getEventPosition(e);
-
- // If the user dclicked on a fold, then expand it.
- var fold = editor.session.getFoldAt(pos.row, pos.column, 1);
- if (fold) {
- editor.session.expandFold(fold);
- } else {
- editor.moveCursorToPosition(pos);
- editor.selection.selectWord();
- this.$clickSelection = editor.getSelectionRange();
- }
+
+ editor.moveCursorToPosition(pos);
+ editor.selection.selectWord();
+ this.$clickSelection = editor.getSelectionRange();
};
-
- this.onMouseTripleClick = function(e) {
- var pos = this.$getEventPosition(e);
- this.editor.moveCursorToPosition(pos);
- this.editor.selection.selectLine();
- this.$clickSelection = this.editor.getSelectionRange();
+
+ this.onTripleClick = function(ev) {
+ var pos = ev.getDocumentPosition();
+ var editor = this.editor;
+
+ editor.moveCursorToPosition(pos);
+ editor.selection.selectLine();
+ this.$clickSelection = editor.getSelectionRange();
};
-
- this.onMouseQuadClick = function(e) {
- this.editor.selectAll();
- this.$clickSelection = this.editor.getSelectionRange();
+
+ this.onQuadClick = function(ev) {
+ var editor = this.editor;
+
+ editor.selectAll();
+ this.$clickSelection = editor.getSelectionRange();
};
-
- this.onMouseWheel = function(e) {
- var speed = this.$scrollSpeed * 2;
-
- this.editor.renderer.scrollBy(e.wheelX * speed, e.wheelY * speed);
- return event.preventDefault(e);
+
+ this.onScroll = function(ev) {
+ var editor = this.editor;
+
+ editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);
+ if (editor.renderer.isScrollableBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed))
+ return ev.preventDefault();
};
+
+}).call(DefaultHandlers.prototype);
+exports.DefaultHandlers = DefaultHandlers;
-}).call(MouseHandler.prototype);
+function calcDistance(ax, ay, bx, by) {
+ return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));
+}
-exports.MouseHandler = MouseHandler;
});
/* vim:ts=4:sts=4:sw=4:
* ***** BEGIN LICENSE BLOCK *****
@@ -7298,11 +4488,12 @@ exports.MouseHandler = MouseHandler;
*
* ***** END LICENSE BLOCK ***** */
-define('pilot/browser_focus', ['require', 'exports', 'module' , 'pilot/oop', 'pilot/event', 'pilot/event_emitter'], function(require, exports, module) {
+define('ace/lib/browser_focus', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event', 'ace/lib/event_emitter'], function(require, exports, module) {
+"use strict";
-var oop = require("pilot/oop");
-var event = require("pilot/event");
-var EventEmitter = require("pilot/event_emitter").EventEmitter;
+var oop = require("./oop");
+var event = require("./event");
+var EventEmitter = require("./event_emitter").EventEmitter;
/**
* This class keeps track of the focus state of the given window.
@@ -7316,13 +4507,26 @@ var BrowserFocus = function(win) {
this._isFocused = true;
var _self = this;
- event.addListener(win, "blur", function(e) {
- _self._setFocused(false);
- });
- event.addListener(win, "focus", function(e) {
- _self._setFocused(true);
- });
+ // IE < 9 supports focusin and focusout events
+ if ("onfocusin" in win.document) {
+ event.addListener(win.document, "focusin", function(e) {
+ _self._setFocused(true);
+ });
+
+ event.addListener(win.document, "focusout", function(e) {
+ _self._setFocused(!!e.toElement);
+ });
+ }
+ else {
+ event.addListener(win, "blur", function(e) {
+ _self._setFocused(false);
+ });
+
+ event.addListener(win, "focus", function(e) {
+ _self._setFocused(true);
+ });
+ }
};
(function(){
@@ -7349,7 +4553,395 @@ var BrowserFocus = function(win) {
exports.BrowserFocus = BrowserFocus;
});
-/* ***** BEGIN LICENSE BLOCK *****
+/* vim:ts=4:sts=4:sw=4:
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ * Irakli Gozalishvili <rfobic@gmail.com> (http://jeditoolkit.com)
+ * Mike de Boer <mike AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/lib/event_emitter', ['require', 'exports', 'module' ], function(require, exports, module) {
+"use strict";
+
+var EventEmitter = {};
+
+EventEmitter._emit =
+EventEmitter._dispatchEvent = function(eventName, e) {
+ this._eventRegistry = this._eventRegistry || {};
+ this._defaultHandlers = this._defaultHandlers || {};
+
+ var listeners = this._eventRegistry[eventName] || [];
+ var defaultHandler = this._defaultHandlers[eventName];
+ if (!listeners.length && !defaultHandler)
+ return;
+
+ e = e || {};
+ e.type = eventName;
+
+ if (!e.stopPropagation) {
+ e.stopPropagation = function() {
+ this.propagationStopped = true;
+ };
+ }
+
+ if (!e.preventDefault) {
+ e.preventDefault = function() {
+ this.defaultPrevented = true;
+ };
+ }
+
+ for (var i=0; i<listeners.length; i++) {
+ listeners[i](e);
+ if (e.propagationStopped)
+ break;
+ }
+
+ if (defaultHandler && !e.defaultPrevented)
+ defaultHandler(e);
+};
+
+EventEmitter.setDefaultHandler = function(eventName, callback) {
+ this._defaultHandlers = this._defaultHandlers || {};
+
+ if (this._defaultHandlers[eventName])
+ throw new Error("The default handler for '" + eventName + "' is already set");
+
+ this._defaultHandlers[eventName] = callback;
+};
+
+EventEmitter.on =
+EventEmitter.addEventListener = function(eventName, callback) {
+ this._eventRegistry = this._eventRegistry || {};
+
+ var listeners = this._eventRegistry[eventName];
+ if (!listeners)
+ var listeners = this._eventRegistry[eventName] = [];
+
+ if (listeners.indexOf(callback) == -1)
+ listeners.push(callback);
+};
+
+EventEmitter.removeListener =
+EventEmitter.removeEventListener = function(eventName, callback) {
+ this._eventRegistry = this._eventRegistry || {};
+
+ var listeners = this._eventRegistry[eventName];
+ if (!listeners)
+ return;
+
+ var index = listeners.indexOf(callback);
+ if (index !== -1)
+ listeners.splice(index, 1);
+};
+
+EventEmitter.removeAllListeners = function(eventName) {
+ if (this._eventRegistry) this._eventRegistry[eventName] = [];
+};
+
+exports.EventEmitter = EventEmitter;
+
+});/* vim:ts=4:sts=4:sw=4:
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mouse/default_gutter_handler', ['require', 'exports', 'module' ], function(require, exports, module) {
+"use strict";
+
+function GutterHandler(editor) {
+ editor.setDefaultHandler("gutterclick", function(e) {
+ var row = e.getDocumentPosition().row;
+ var selection = editor.session.selection;
+
+ selection.moveCursorTo(row, 0);
+ selection.selectLine();
+ });
+}
+
+exports.GutterHandler = GutterHandler;
+
+});/* vim:ts=4:sts=4:sw=4:
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mouse/mouse_event', ['require', 'exports', 'module' , 'ace/lib/event'], function(require, exports, module) {
+"use strict";
+
+var event = require("../lib/event");
+
+/**
+ * Custom Ace mouse event
+ */
+var MouseEvent = exports.MouseEvent = function(domEvent, editor) {
+ this.domEvent = domEvent;
+ this.editor = editor;
+
+ this.pageX = event.getDocumentX(domEvent);
+ this.pageY = event.getDocumentY(domEvent);
+
+ this.clientX = domEvent.clientX;
+ this.clientY = domEvent.clientY;
+
+ this.$pos = null;
+ this.$inSelection = null;
+
+ this.propagationStopped = false;
+ this.defaultPrevented = false;
+};
+
+(function() {
+
+ this.stopPropagation = function() {
+ event.stopPropagation(this.domEvent);
+ this.propagationStopped = true;
+ };
+
+ this.preventDefault = function() {
+ event.preventDefault(this.domEvent);
+ this.defaultPrevented = true;
+ };
+
+ this.stop = function() {
+ this.stopPropagation();
+ this.preventDefault();
+ };
+
+ /**
+ * Get the document position below the mouse cursor
+ *
+ * @return {Object} 'row' and 'column' of the document position
+ */
+ this.getDocumentPosition = function() {
+ if (this.$pos)
+ return this.$pos;
+
+ var pageX = event.getDocumentX(this.domEvent);
+ var pageY = event.getDocumentY(this.domEvent);
+ this.$pos = this.editor.renderer.screenToTextCoordinates(pageX, pageY);
+ this.$pos.row = Math.max(0, Math.min(this.$pos.row, this.editor.session.getLength()-1));
+ return this.$pos;
+ };
+
+ /**
+ * Check if the mouse cursor is inside of the text selection
+ *
+ * @return {Boolean} whether the mouse cursor is inside of the selection
+ */
+ this.inSelection = function() {
+ if (this.$inSelection !== null)
+ return this.$inSelection;
+
+ var editor = this.editor;
+
+ if (editor.getReadOnly()) {
+ this.$inSelection = false;
+ }
+ else {
+ var selectionRange = editor.getSelectionRange();
+ if (selectionRange.isEmpty())
+ this.$inSelection = false;
+ else {
+ var pos = this.getDocumentPosition();
+ this.$inSelection = selectionRange.contains(pos.row, pos.column);
+ }
+ }
+ return this.$inSelection;
+ };
+
+ /**
+ * Get the clicked mouse button
+ *
+ * @return {Number} 0 for left button, 1 for middle button, 2 for right button
+ */
+ this.getButton = function() {
+ return event.getButton(this.domEvent);
+ };
+
+ /**
+ * @return {Boolean} whether the shift key was pressed when the event was emitted
+ */
+ this.getShiftKey = function() {
+ return this.domEvent.shiftKey;
+ };
+
+ this.getAccelKey = function() {
+ return this.domEvent.ctrlKey || this.domEvent.metaKey ;
+ };
+
+}).call(MouseEvent.prototype);
+
+});
+/* vim:ts=4:sts=4:sw=4:
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mouse/fold_handler', ['require', 'exports', 'module' ], function(require, exports, module) {
+"use strict";
+
+function FoldHandler(editor) {
+
+ editor.on("click", function(e) {
+ var position = e.getDocumentPosition();
+ var session = editor.session;
+
+ // If the user dclicked on a fold, then expand it.
+ var fold = session.getFoldAt(position.row, position.column, 1);
+ if (fold) {
+ if (e.getAccelKey())
+ session.removeFold(fold);
+ else
+ session.expandFold(fold);
+
+ e.stop();
+ }
+ });
+
+ editor.on("gutterclick", function(e) {
+ if (e.domEvent.target.className.indexOf("ace_fold-widget") != -1) {
+ var row = e.getDocumentPosition().row;
+ editor.session.onFoldWidgetClick(row, e.domEvent);
+ e.stop();
+ }
+ });
+}
+
+exports.FoldHandler = FoldHandler;
+
+});/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
@@ -7372,6 +4964,7 @@ exports.BrowserFocus = BrowserFocus;
* Contributor(s):
* Fabian Jakobs <fabian AT ajax DOT org>
* Julian Viereck <julian.viereck@gmail.com>
+ * Harutyun Amirjanyan <amirjanyan@gmail.com>
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
@@ -7387,80 +4980,90 @@ exports.BrowserFocus = BrowserFocus;
*
* ***** END LICENSE BLOCK ***** */
-define('ace/keyboard/keybinding', ['require', 'exports', 'module' , 'pilot/useragent', 'pilot/keys', 'pilot/event', 'pilot/settings', 'pilot/canon', 'ace/commands/default_commands'], function(require, exports, module) {
+define('ace/keyboard/keybinding', ['require', 'exports', 'module' , 'ace/lib/keys', 'ace/lib/event', 'ace/commands/default_commands'], function(require, exports, module) {
+"use strict";
-var useragent = require("pilot/useragent");
-var keyUtil = require("pilot/keys");
-var event = require("pilot/event");
-var settings = require("pilot/settings").settings;
-var canon = require("pilot/canon");
-require("ace/commands/default_commands");
+var keyUtil = require("../lib/keys");
+var event = require("../lib/event");
+require("../commands/default_commands");
var KeyBinding = function(editor) {
this.$editor = editor;
this.$data = { };
- this.$keyboardHandler = null;
+ this.$handlers = [this];
};
(function() {
this.setKeyboardHandler = function(keyboardHandler) {
- if (this.$keyboardHandler != keyboardHandler) {
- this.$data = { };
- this.$keyboardHandler = keyboardHandler;
- }
+ if (this.$handlers[this.$handlers.length - 1] == keyboardHandler)
+ return;
+ this.$data = { };
+ this.$handlers = keyboardHandler ? [this, keyboardHandler] : [this];
};
- this.getKeyboardHandler = function() {
- return this.$keyboardHandler;
+ this.addKeyboardHandler = function(keyboardHandler) {
+ this.removeKeyboardHandler(keyboardHandler);
+ this.$handlers.push(keyboardHandler);
};
- this.$callKeyboardHandler = function (e, hashId, keyOrText, keyCode) {
- var env = {editor: this.$editor},
- toExecute;
+ this.removeKeyboardHandler = function(keyboardHandler) {
+ var i = this.$handlers.indexOf(keyboardHandler);
+ if (i == -1)
+ return false;
+ this.$handlers.splice(i, 1);
+ return true;
+ };
- if (this.$keyboardHandler) {
- toExecute =
- this.$keyboardHandler.handleKeyboard(this.$data, hashId, keyOrText, keyCode, e);
- }
+ this.getKeyboardHandler = function() {
+ return this.$handlers[this.$handlers.length - 1];
+ };
- // If there is nothing to execute yet, then use the default keymapping.
- if (!toExecute || !toExecute.command) {
- if (hashId != 0 || keyCode != 0) {
- toExecute = {
- command: canon.findKeyCommand(env, "editor", hashId, keyOrText)
- }
- } else {
- toExecute = {
- command: "inserttext",
- args: {
- text: keyOrText
- }
- }
- }
+ this.$callKeyboardHandlers = function (hashId, keyString, keyCode, e) {
+ var toExecute;
+ for (var i = this.$handlers.length; i--;) {
+ toExecute = this.$handlers[i].handleKeyboard(
+ this.$data, hashId, keyString, keyCode, e
+ );
+ if (toExecute && toExecute.command)
+ break;
}
+ if (!toExecute || !toExecute.command)
+ return false;
+
var success = false;
- if (toExecute) {
- success = canon.exec(toExecute.command,
- env, "editor", toExecute.args);
- if (success) {
- event.stopEvent(e);
- }
- }
+ var commands = this.$editor.commands;
+
+ // allow keyboardHandler to consume keys
+ if (toExecute.command != "null")
+ success = commands.exec(toExecute.command, this.$editor, toExecute.args);
+ else
+ success = true;
+
+ if (success && e)
+ event.stopEvent(e);
+
return success;
};
- this.onCommandKey = function(e, hashId, keyCode, keyString) {
- // In case there is no keyString, try to interprete the keyCode.
- if (!keyString) {
- keyString = keyUtil.keyCodeToString(keyCode);
- }
- return this.$callKeyboardHandler(e, hashId, keyString, keyCode);
+ this.handleKeyboard = function(data, hashId, keyString) {
+ return {
+ command: this.$editor.commands.findKeyCommand(hashId, keyString)
+ };
};
- this.onTextInput = function(text) {
- return this.$callKeyboardHandler({}, 0, text, 0);
- }
+ this.onCommandKey = function(e, hashId, keyCode) {
+ var keyString = keyUtil.keyCodeToString(keyCode);
+ this.$callKeyboardHandlers(hashId, keyString, keyCode, e);
+ };
+
+ this.onTextInput = function(text, pasted) {
+ var success = false;
+ if (!pasted && text.length == 1)
+ success = this.$callKeyboardHandlers(0, text);
+ if (!success)
+ this.$editor.commands.exec("insertstring", this.$editor, text);
+ };
}).call(KeyBinding.prototype);
@@ -7506,334 +5109,357 @@ exports.KeyBinding = KeyBinding;
*
* ***** END LICENSE BLOCK ***** */
-define('ace/commands/default_commands', ['require', 'exports', 'module' , 'pilot/lang', 'pilot/canon'], function(require, exports, module) {
+define('ace/commands/default_commands', ['require', 'exports', 'module' , 'ace/lib/lang'], function(require, exports, module) {
+"use strict";
-var lang = require("pilot/lang");
-var canon = require("pilot/canon");
+var lang = require("../lib/lang");
function bindKey(win, mac) {
return {
win: win,
- mac: mac,
- sender: "editor"
+ mac: mac
};
}
-canon.addCommand({
- name: "null",
- exec: function(env, args, request) { }
-});
-
-canon.addCommand({
+exports.commands = [{
name: "selectall",
bindKey: bindKey("Ctrl-A", "Command-A"),
- exec: function(env, args, request) { env.editor.selectAll(); }
-});
-canon.addCommand({
- name: "removeline",
- bindKey: bindKey("Ctrl-D", "Command-D"),
- exec: function(env, args, request) { env.editor.removeLines(); }
-});
-canon.addCommand({
+ exec: function(editor) { editor.selectAll(); },
+ readOnly: true
+}, {
+ name: "centerselection",
+ bindKey: bindKey(null, "Ctrl-L"),
+ exec: function(editor) { editor.centerSelection(); },
+ readOnly: true
+}, {
name: "gotoline",
bindKey: bindKey("Ctrl-L", "Command-L"),
- exec: function(env, args, request) {
- var line = parseInt(prompt("Enter line number:"));
+ exec: function(editor) {
+ var line = parseInt(prompt("Enter line number:"), 10);
if (!isNaN(line)) {
- env.editor.gotoLine(line);
+ editor.gotoLine(line);
}
- }
-});
-canon.addCommand({
- name: "togglecomment",
- bindKey: bindKey("Ctrl-7", "Command-7"),
- exec: function(env, args, request) { env.editor.toggleCommentLines(); }
-});
-canon.addCommand({
+ },
+ readOnly: true
+}, {
+ name: "fold",
+ bindKey: bindKey("Alt-L", "Alt-L"),
+ exec: function(editor) { editor.session.toggleFold(false); },
+ readOnly: true
+}, {
+ name: "unfold",
+ bindKey: bindKey("Alt-Shift-L", "Alt-Shift-L"),
+ exec: function(editor) { editor.session.toggleFold(true); },
+ readOnly: true
+}, {
+ name: "foldall",
+ bindKey: bindKey("Alt-0", "Alt-0"),
+ exec: function(editor) { editor.session.foldAll(); },
+ readOnly: true
+}, {
+ name: "unfoldall",
+ bindKey: bindKey("Alt-Shift-0", "Alt-Shift-0"),
+ exec: function(editor) { editor.session.unfold(); },
+ readOnly: true
+}, {
name: "findnext",
bindKey: bindKey("Ctrl-K", "Command-G"),
- exec: function(env, args, request) { env.editor.findNext(); }
-});
-canon.addCommand({
+ exec: function(editor) { editor.findNext(); },
+ readOnly: true
+}, {
name: "findprevious",
bindKey: bindKey("Ctrl-Shift-K", "Command-Shift-G"),
- exec: function(env, args, request) { env.editor.findPrevious(); }
-});
-canon.addCommand({
+ exec: function(editor) { editor.findPrevious(); },
+ readOnly: true
+}, {
name: "find",
bindKey: bindKey("Ctrl-F", "Command-F"),
- exec: function(env, args, request) {
- var needle = prompt("Find:");
- env.editor.find(needle);
- }
-});
-canon.addCommand({
- name: "replace",
- bindKey: bindKey("Ctrl-R", "Command-Option-F"),
- exec: function(env, args, request) {
- var needle = prompt("Find:");
- if (!needle)
- return;
- var replacement = prompt("Replacement:");
- if (!replacement)
- return;
- env.editor.replace(replacement, {needle: needle});
- }
-});
-canon.addCommand({
- name: "replaceall",
- bindKey: bindKey("Ctrl-Shift-R", "Command-Shift-Option-F"),
- exec: function(env, args, request) {
- var needle = prompt("Find:");
- if (!needle)
- return;
- var replacement = prompt("Replacement:");
- if (!replacement)
- return;
- env.editor.replaceAll(replacement, {needle: needle});
- }
-});
-canon.addCommand({
- name: "undo",
- bindKey: bindKey("Ctrl-Z", "Command-Z"),
- exec: function(env, args, request) { env.editor.undo(); }
-});
-canon.addCommand({
- name: "redo",
- bindKey: bindKey("Ctrl-Shift-Z|Ctrl-Y", "Command-Shift-Z|Command-Y"),
- exec: function(env, args, request) { env.editor.redo(); }
-});
-canon.addCommand({
+ exec: function(editor) {
+ var needle = prompt("Find:", editor.getCopyText());
+ editor.find(needle);
+ },
+ readOnly: true
+}, {
name: "overwrite",
bindKey: bindKey("Insert", "Insert"),
- exec: function(env, args, request) { env.editor.toggleOverwrite(); }
-});
-canon.addCommand({
- name: "copylinesup",
- bindKey: bindKey("Ctrl-Alt-Up", "Command-Option-Up"),
- exec: function(env, args, request) { env.editor.copyLinesUp(); }
-});
-canon.addCommand({
- name: "movelinesup",
- bindKey: bindKey("Alt-Up", "Option-Up"),
- exec: function(env, args, request) { env.editor.moveLinesUp(); }
-});
-canon.addCommand({
+ exec: function(editor) { editor.toggleOverwrite(); },
+ readOnly: true
+}, {
name: "selecttostart",
bindKey: bindKey("Ctrl-Shift-Home|Alt-Shift-Up", "Command-Shift-Up"),
- exec: function(env, args, request) { env.editor.getSelection().selectFileStart(); }
-});
-canon.addCommand({
+ exec: function(editor) { editor.getSelection().selectFileStart(); },
+ readOnly: true
+}, {
name: "gotostart",
bindKey: bindKey("Ctrl-Home|Ctrl-Up", "Command-Home|Command-Up"),
- exec: function(env, args, request) { env.editor.navigateFileStart(); }
-});
-canon.addCommand({
+ exec: function(editor) { editor.navigateFileStart(); },
+ readOnly: true
+}, {
name: "selectup",
bindKey: bindKey("Shift-Up", "Shift-Up"),
- exec: function(env, args, request) { env.editor.getSelection().selectUp(); }
-});
-canon.addCommand({
+ exec: function(editor) { editor.getSelection().selectUp(); },
+ readOnly: true
+}, {
name: "golineup",
bindKey: bindKey("Up", "Up|Ctrl-P"),
- exec: function(env, args, request) { env.editor.navigateUp(args.times); }
-});
-canon.addCommand({
- name: "copylinesdown",
- bindKey: bindKey("Ctrl-Alt-Down", "Command-Option-Down"),
- exec: function(env, args, request) { env.editor.copyLinesDown(); }
-});
-canon.addCommand({
- name: "movelinesdown",
- bindKey: bindKey("Alt-Down", "Option-Down"),
- exec: function(env, args, request) { env.editor.moveLinesDown(); }
-});
-canon.addCommand({
+ exec: function(editor, args) { editor.navigateUp(args.times); },
+ readOnly: true
+}, {
name: "selecttoend",
bindKey: bindKey("Ctrl-Shift-End|Alt-Shift-Down", "Command-Shift-Down"),
- exec: function(env, args, request) { env.editor.getSelection().selectFileEnd(); }
-});
-canon.addCommand({
+ exec: function(editor) { editor.getSelection().selectFileEnd(); },
+ readOnly: true
+}, {
name: "gotoend",
bindKey: bindKey("Ctrl-End|Ctrl-Down", "Command-End|Command-Down"),
- exec: function(env, args, request) { env.editor.navigateFileEnd(); }
-});
-canon.addCommand({
+ exec: function(editor) { editor.navigateFileEnd(); },
+ readOnly: true
+}, {
name: "selectdown",
bindKey: bindKey("Shift-Down", "Shift-Down"),
- exec: function(env, args, request) { env.editor.getSelection().selectDown(); }
-});
-canon.addCommand({
+ exec: function(editor) { editor.getSelection().selectDown(); },
+ readOnly: true
+}, {
name: "golinedown",
bindKey: bindKey("Down", "Down|Ctrl-N"),
- exec: function(env, args, request) { env.editor.navigateDown(args.times); }
-});
-canon.addCommand({
+ exec: function(editor, args) { editor.navigateDown(args.times); },
+ readOnly: true
+}, {
name: "selectwordleft",
bindKey: bindKey("Ctrl-Shift-Left", "Option-Shift-Left"),
- exec: function(env, args, request) { env.editor.getSelection().selectWordLeft(); }
-});
-canon.addCommand({
+ exec: function(editor) { editor.getSelection().selectWordLeft(); },
+ readOnly: true
+}, {
name: "gotowordleft",
bindKey: bindKey("Ctrl-Left", "Option-Left"),
- exec: function(env, args, request) { env.editor.navigateWordLeft(); }
-});
-canon.addCommand({
+ exec: function(editor) { editor.navigateWordLeft(); },
+ readOnly: true
+}, {
name: "selecttolinestart",
bindKey: bindKey("Alt-Shift-Left", "Command-Shift-Left"),
- exec: function(env, args, request) { env.editor.getSelection().selectLineStart(); }
-});
-canon.addCommand({
+ exec: function(editor) { editor.getSelection().selectLineStart(); },
+ readOnly: true
+}, {
name: "gotolinestart",
bindKey: bindKey("Alt-Left|Home", "Command-Left|Home|Ctrl-A"),
- exec: function(env, args, request) { env.editor.navigateLineStart(); }
-});
-canon.addCommand({
+ exec: function(editor) { editor.navigateLineStart(); },
+ readOnly: true
+}, {
name: "selectleft",
bindKey: bindKey("Shift-Left", "Shift-Left"),
- exec: function(env, args, request) { env.editor.getSelection().selectLeft(); }
-});
-canon.addCommand({
+ exec: function(editor) { editor.getSelection().selectLeft(); },
+ readOnly: true
+}, {
name: "gotoleft",
bindKey: bindKey("Left", "Left|Ctrl-B"),
- exec: function(env, args, request) { env.editor.navigateLeft(args.times); }
-});
-canon.addCommand({
+ exec: function(editor, args) { editor.navigateLeft(args.times); },
+ readOnly: true
+}, {
name: "selectwordright",
bindKey: bindKey("Ctrl-Shift-Right", "Option-Shift-Right"),
- exec: function(env, args, request) { env.editor.getSelection().selectWordRight(); }
-});
-canon.addCommand({
+ exec: function(editor) { editor.getSelection().selectWordRight(); },
+ readOnly: true
+}, {
name: "gotowordright",
bindKey: bindKey("Ctrl-Right", "Option-Right"),
- exec: function(env, args, request) { env.editor.navigateWordRight(); }
-});
-canon.addCommand({
+ exec: function(editor) { editor.navigateWordRight(); },
+ readOnly: true
+}, {
name: "selecttolineend",
bindKey: bindKey("Alt-Shift-Right", "Command-Shift-Right"),
- exec: function(env, args, request) { env.editor.getSelection().selectLineEnd(); }
-});
-canon.addCommand({
+ exec: function(editor) { editor.getSelection().selectLineEnd(); },
+ readOnly: true
+}, {
name: "gotolineend",
bindKey: bindKey("Alt-Right|End", "Command-Right|End|Ctrl-E"),
- exec: function(env, args, request) { env.editor.navigateLineEnd(); }
-});
-canon.addCommand({
+ exec: function(editor) { editor.navigateLineEnd(); },
+ readOnly: true
+}, {
name: "selectright",
bindKey: bindKey("Shift-Right", "Shift-Right"),
- exec: function(env, args, request) { env.editor.getSelection().selectRight(); }
-});
-canon.addCommand({
+ exec: function(editor) { editor.getSelection().selectRight(); },
+ readOnly: true
+}, {
name: "gotoright",
bindKey: bindKey("Right", "Right|Ctrl-F"),
- exec: function(env, args, request) { env.editor.navigateRight(args.times); }
-});
-canon.addCommand({
+ exec: function(editor, args) { editor.navigateRight(args.times); },
+ readOnly: true
+}, {
name: "selectpagedown",
bindKey: bindKey("Shift-PageDown", "Shift-PageDown"),
- exec: function(env, args, request) { env.editor.selectPageDown(); }
-});
-canon.addCommand({
+ exec: function(editor) { editor.selectPageDown(); },
+ readOnly: true
+}, {
name: "pagedown",
bindKey: bindKey(null, "PageDown"),
- exec: function(env, args, request) { env.editor.scrollPageDown(); }
-});
-canon.addCommand({
+ exec: function(editor) { editor.scrollPageDown(); },
+ readOnly: true
+}, {
name: "gotopagedown",
bindKey: bindKey("PageDown", "Option-PageDown|Ctrl-V"),
- exec: function(env, args, request) { env.editor.gotoPageDown(); }
-});
-canon.addCommand({
+ exec: function(editor) { editor.gotoPageDown(); },
+ readOnly: true
+}, {
name: "selectpageup",
bindKey: bindKey("Shift-PageUp", "Shift-PageUp"),
- exec: function(env, args, request) { env.editor.selectPageUp(); }
-});
-canon.addCommand({
+ exec: function(editor) { editor.selectPageUp(); },
+ readOnly: true
+}, {
name: "pageup",
bindKey: bindKey(null, "PageUp"),
- exec: function(env, args, request) { env.editor.scrollPageUp(); }
-});
-canon.addCommand({
+ exec: function(editor) { editor.scrollPageUp(); },
+ readOnly: true
+}, {
name: "gotopageup",
bindKey: bindKey("PageUp", "Option-PageUp"),
- exec: function(env, args, request) { env.editor.gotoPageUp(); }
-});
-canon.addCommand({
+ exec: function(editor) { editor.gotoPageUp(); },
+ readOnly: true
+}, {
name: "selectlinestart",
bindKey: bindKey("Shift-Home", "Shift-Home"),
- exec: function(env, args, request) { env.editor.getSelection().selectLineStart(); }
-});
-canon.addCommand({
+ exec: function(editor) { editor.getSelection().selectLineStart(); },
+ readOnly: true
+}, {
name: "selectlineend",
bindKey: bindKey("Shift-End", "Shift-End"),
- exec: function(env, args, request) { env.editor.getSelection().selectLineEnd(); }
-});
-canon.addCommand({
+ exec: function(editor) { editor.getSelection().selectLineEnd(); },
+ readOnly: true
+}, {
+ name: "togglerecording",
+ bindKey: bindKey("Ctrl-Alt-E", "Command-Option-E"),
+ exec: function(editor) { editor.commands.toggleRecording(); },
+ readOnly: true
+}, {
+ name: "replaymacro",
+ bindKey: bindKey("Ctrl-Shift-E", "Command-Shift-E"),
+ exec: function(editor) { editor.commands.replay(editor); },
+ readOnly: true
+},
+
+// commands disabled in readOnly mode
+{
+ name: "removeline",
+ bindKey: bindKey("Ctrl-D", "Command-D"),
+ exec: function(editor) { editor.removeLines(); }
+}, {
+ name: "togglecomment",
+ bindKey: bindKey("Ctrl-7", "Command-7"),
+ exec: function(editor) { editor.toggleCommentLines(); }
+}, {
+ name: "replace",
+ bindKey: bindKey("Ctrl-R", "Command-Option-F"),
+ exec: function(editor) {
+ var needle = prompt("Find:", editor.getCopyText());
+ if (!needle)
+ return;
+ var replacement = prompt("Replacement:");
+ if (!replacement)
+ return;
+ editor.replace(replacement, {needle: needle});
+ }
+}, {
+ name: "replaceall",
+ bindKey: bindKey("Ctrl-Shift-R", "Command-Shift-Option-F"),
+ exec: function(editor) {
+ var needle = prompt("Find:");
+ if (!needle)
+ return;
+ var replacement = prompt("Replacement:");
+ if (!replacement)
+ return;
+ editor.replaceAll(replacement, {needle: needle});
+ }
+}, {
+ name: "undo",
+ bindKey: bindKey("Ctrl-Z", "Command-Z"),
+ exec: function(editor) { editor.undo(); }
+}, {
+ name: "redo",
+ bindKey: bindKey("Ctrl-Shift-Z|Ctrl-Y", "Command-Shift-Z|Command-Y"),
+ exec: function(editor) { editor.redo(); }
+}, {
+ name: "copylinesup",
+ bindKey: bindKey("Ctrl-Alt-Up", "Command-Option-Up"),
+ exec: function(editor) { editor.copyLinesUp(); }
+}, {
+ name: "movelinesup",
+ bindKey: bindKey("Alt-Up", "Option-Up"),
+ exec: function(editor) { editor.moveLinesUp(); }
+}, {
+ name: "copylinesdown",
+ bindKey: bindKey("Ctrl-Alt-Down", "Command-Option-Down"),
+ exec: function(editor) { editor.copyLinesDown(); }
+}, {
+ name: "movelinesdown",
+ bindKey: bindKey("Alt-Down", "Option-Down"),
+ exec: function(editor) { editor.moveLinesDown(); }
+}, {
name: "del",
bindKey: bindKey("Delete", "Delete|Ctrl-D"),
- exec: function(env, args, request) { env.editor.removeRight(); }
-});
-canon.addCommand({
+ exec: function(editor) { editor.remove("right"); }
+}, {
name: "backspace",
bindKey: bindKey(
"Ctrl-Backspace|Command-Backspace|Option-Backspace|Shift-Backspace|Backspace",
"Ctrl-Backspace|Command-Backspace|Shift-Backspace|Backspace|Ctrl-H"
),
- exec: function(env, args, request) { env.editor.removeLeft(); }
-});
-canon.addCommand({
+ exec: function(editor) { editor.remove("left"); }
+}, {
name: "removetolinestart",
- bindKey: bindKey(null, "Option-Backspace"),
- exec: function(env, args, request) { env.editor.removeToLineStart(); }
-});
-canon.addCommand({
+ bindKey: bindKey("Alt-Backspace", "Option-Backspace"),
+ exec: function(editor) { editor.removeToLineStart(); }
+}, {
name: "removetolineend",
- bindKey: bindKey(null, "Ctrl-K"),
- exec: function(env, args, request) { env.editor.removeToLineEnd(); }
-});
-canon.addCommand({
+ bindKey: bindKey("Alt-Delete", "Ctrl-K"),
+ exec: function(editor) { editor.removeToLineEnd(); }
+}, {
name: "removewordleft",
bindKey: bindKey("Ctrl-Backspace", "Alt-Backspace|Ctrl-Alt-Backspace"),
- exec: function(env, args, request) { env.editor.removeWordLeft(); }
-});
-canon.addCommand({
+ exec: function(editor) { editor.removeWordLeft(); }
+}, {
name: "removewordright",
- bindKey: bindKey(null, "Alt-Delete"),
- exec: function(env, args, request) { env.editor.removeWordRight(); }
-});
-canon.addCommand({
+ bindKey: bindKey("Ctrl-Delete", "Alt-Delete"),
+ exec: function(editor) { editor.removeWordRight(); }
+}, {
name: "outdent",
bindKey: bindKey("Shift-Tab", "Shift-Tab"),
- exec: function(env, args, request) { env.editor.blockOutdent(); }
-});
-canon.addCommand({
+ exec: function(editor) { editor.blockOutdent(); }
+}, {
name: "indent",
bindKey: bindKey("Tab", "Tab"),
- exec: function(env, args, request) { env.editor.indent(); }
-});
-canon.addCommand({
+ exec: function(editor) { editor.indent(); }
+}, {
+ name: "insertstring",
+ exec: function(editor, str) { editor.insert(str); }
+}, {
name: "inserttext",
- exec: function(env, args, request) {
- env.editor.insert(lang.stringRepeat(args.text || "", args.times || 1));
+ exec: function(editor, args) {
+ editor.insert(lang.stringRepeat(args.text || "", args.times || 1));
}
-});
-canon.addCommand({
- name: "centerselection",
- bindKey: bindKey(null, "Ctrl-L"),
- exec: function(env, args, request) { env.editor.centerSelection(); }
-});
-canon.addCommand({
+}, {
name: "splitline",
bindKey: bindKey(null, "Ctrl-O"),
- exec: function(env, args, request) { env.editor.splitLine(); }
-});
-canon.addCommand({
+ exec: function(editor) { editor.splitLine(); }
+}, {
name: "transposeletters",
bindKey: bindKey("Ctrl-T", "Ctrl-T"),
- exec: function(env, args, request) { env.editor.transposeLetters(); }
-});
+ exec: function(editor) { editor.transposeLetters(); }
+}, {
+ name: "touppercase",
+ bindKey: bindKey("Ctrl-U", "Ctrl-U"),
+ exec: function(editor) { editor.toUpperCase(); }
+}, {
+ name: "tolowercase",
+ bindKey: bindKey("Ctrl-Shift-U", "Ctrl-Shift-U"),
+ exec: function(editor) { editor.toLowerCase(); }
+}, {
+ name: "jumptomatching",
+ bindKey: bindKey("Ctrl-Shift-P", "Ctrl-Shift-P"),
+ exec: function(editor) { editor.jumpToMatching(); }
+}];
-});/* vim:ts=4:sts=4:sw=4:
+});
+/* vim:ts=4:sts=4:sw=4:
* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
@@ -7873,16 +5499,17 @@ canon.addCommand({
*
* ***** END LICENSE BLOCK ***** */
-define('ace/edit_session', ['require', 'exports', 'module' , 'pilot/oop', 'pilot/lang', 'pilot/event_emitter', 'ace/selection', 'ace/mode/text', 'ace/range', 'ace/document', 'ace/background_tokenizer', 'ace/edit_session/folding'], function(require, exports, module) {
+define('ace/edit_session', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/lib/event_emitter', 'ace/selection', 'ace/mode/text', 'ace/range', 'ace/document', 'ace/background_tokenizer', 'ace/edit_session/folding', 'ace/edit_session/bracket_match'], function(require, exports, module) {
+"use strict";
-var oop = require("pilot/oop");
-var lang = require("pilot/lang");
-var EventEmitter = require("pilot/event_emitter").EventEmitter;
-var Selection = require("ace/selection").Selection;
-var TextMode = require("ace/mode/text").Mode;
-var Range = require("ace/range").Range;
-var Document = require("ace/document").Document;
-var BackgroundTokenizer = require("ace/background_tokenizer").BackgroundTokenizer;
+var oop = require("./lib/oop");
+var lang = require("./lib/lang");
+var EventEmitter = require("./lib/event_emitter").EventEmitter;
+var Selection = require("./selection").Selection;
+var TextMode = require("./mode/text").Mode;
+var Range = require("./range").Range;
+var Document = require("./document").Document;
+var BackgroundTokenizer = require("./background_tokenizer").BackgroundTokenizer;
var EditSession = function(text, mode) {
this.$modified = true;
@@ -7893,6 +5520,7 @@ var EditSession = function(text, mode) {
this.$rowCache = [];
this.$wrapData = [];
this.$foldData = [];
+ this.$undoSelect = true;
this.$foldData.toString = function() {
var str = "";
this.forEach(function(foldLine) {
@@ -7926,6 +5554,11 @@ var EditSession = function(text, mode) {
this.doc = doc;
doc.on("change", this.onChange.bind(this));
this.on("changeFold", this.onChangeFold.bind(this));
+
+ if (this.bgTokenizer) {
+ this.bgTokenizer.setDocument(this.getDocument());
+ this.bgTokenizer.start(0);
+ }
};
this.getDocument = function() {
@@ -7966,19 +5599,19 @@ var EditSession = function(text, mode) {
folds: removedFolds
});
}
-
+
this.$informUndoManager.schedule();
}
this.bgTokenizer.start(delta.range.start.row);
- this._dispatchEvent("change", e);
+ this._emit("change", e);
};
this.setValue = function(text) {
this.doc.setValue(text);
this.selection.moveCursorTo(0, 0);
this.selection.clearSelection();
-
+
this.$resetRowCache(0);
this.$deltas = [];
this.$deltasDoc = [];
@@ -8003,6 +5636,27 @@ var EditSession = function(text, mode) {
return this.bgTokenizer.getTokens(firstRow, lastRow);
};
+ this.getTokenAt = function(row, column) {
+ var tokens = this.bgTokenizer.getTokens(row, row)[0].tokens;
+ var token, c = 0;
+ if (column == null) {
+ i = tokens.length - 1;
+ c = this.getLine(row).length;
+ } else {
+ for (var i = 0; i < tokens.length; i++) {
+ c += tokens[i].value.length;
+ if (c >= column)
+ break;
+ }
+ }
+ token = tokens[i];
+ if (!token)
+ return null;
+ token.index = i;
+ token.start = c - token.value.length;
+ return token;
+ };
+
this.setUndoManager = function(undoManager) {
this.$undoManager = undoManager;
this.$resetRowCache(0);
@@ -8017,7 +5671,7 @@ var EditSession = function(text, mode) {
var self = this;
this.$syncInformUndoManager = function() {
self.$informUndoManager.cancel();
-
+
if (self.$deltasFold.length) {
self.$deltas.push({
group: "fold",
@@ -8025,7 +5679,7 @@ var EditSession = function(text, mode) {
});
self.$deltasFold = [];
}
-
+
if (self.$deltasDoc.length) {
self.$deltas.push({
group: "doc",
@@ -8033,14 +5687,14 @@ var EditSession = function(text, mode) {
});
self.$deltasDoc = [];
}
-
+
if (self.$deltas.length > 0) {
undoManager.execute({
action: "aceupdate",
args: [self.$deltas, self]
});
}
-
+
self.$deltas = [];
}
this.$informUndoManager =
@@ -8083,7 +5737,7 @@ var EditSession = function(text, mode) {
this.$modified = true;
this.$tabSize = tabSize;
- this._dispatchEvent("changeTabSize");
+ this._emit("changeTabSize");
};
this.getTabSize = function() {
@@ -8099,7 +5753,7 @@ var EditSession = function(text, mode) {
if (this.$overwrite == overwrite) return;
this.$overwrite = overwrite;
- this._dispatchEvent("changeOverwrite");
+ this._emit("changeOverwrite");
};
this.getOverwrite = function() {
@@ -8119,22 +5773,22 @@ var EditSession = function(text, mode) {
for (var i=0; i<rows.length; i++) {
this.$breakpoints[rows[i]] = true;
}
- this._dispatchEvent("changeBreakpoint", {});
+ this._emit("changeBreakpoint", {});
};
this.clearBreakpoints = function() {
this.$breakpoints = [];
- this._dispatchEvent("changeBreakpoint", {});
+ this._emit("changeBreakpoint", {});
};
this.setBreakpoint = function(row) {
this.$breakpoints[row] = true;
- this._dispatchEvent("changeBreakpoint", {});
+ this._emit("changeBreakpoint", {});
};
this.clearBreakpoint = function(row) {
delete this.$breakpoints[row];
- this._dispatchEvent("changeBreakpoint", {});
+ this._emit("changeBreakpoint", {});
};
this.getBreakpoints = function() {
@@ -8154,10 +5808,10 @@ var EditSession = function(text, mode) {
if (inFront) {
this.$frontMarkers[id] = marker;
- this._dispatchEvent("changeFrontMarker")
+ this._emit("changeFrontMarker")
} else {
this.$backMarkers[id] = marker;
- this._dispatchEvent("changeBackMarker")
+ this._emit("changeBackMarker")
}
return id;
@@ -8171,7 +5825,7 @@ var EditSession = function(text, mode) {
var markers = marker.inFront ? this.$frontMarkers : this.$backMarkers;
if (marker) {
delete (markers[markerId]);
- this._dispatchEvent(marker.inFront ? "changeFrontMarker" : "changeBackMarker");
+ this._emit(marker.inFront ? "changeFrontMarker" : "changeBackMarker");
}
};
@@ -8198,16 +5852,16 @@ var EditSession = function(text, mode) {
else
this.$annotations[row] = [annotation];
}
- this._dispatchEvent("changeAnnotation", {});
+ this._emit("changeAnnotation", {});
};
this.getAnnotations = function() {
- return this.$annotations;
+ return this.$annotations || {};
};
this.clearAnnotations = function() {
this.$annotations = {};
- this._dispatchEvent("changeAnnotation", {});
+ this._emit("changeAnnotation", {});
};
this.$detectNewLine = function(text) {
@@ -8250,6 +5904,17 @@ var EditSession = function(text, mode) {
return new Range(row, start, row, end);
};
+ // Gets the range of a word including its right whitespace
+ this.getAWordRange = function(row, column) {
+ var wordRange = this.getWordRange(row, column);
+ var line = this.getLine(wordRange.end.row);
+
+ while (line.charAt(wordRange.end.column).match(/[ \t]/)) {
+ wordRange.end.column += 1;
+ }
+ return wordRange;
+ };
+
this.setNewLineMode = function(newLineMode) {
this.doc.setNewLineMode(newLineMode);
};
@@ -8277,7 +5942,7 @@ var EditSession = function(text, mode) {
this.onReloadTokenizer = function(e) {
var rows = e.data;
this.bgTokenizer.start(rows.first);
- this._dispatchEvent("tokenizerUpdate", e);
+ this._emit("tokenizerUpdate", e);
};
this.$mode = null;
@@ -8301,7 +5966,7 @@ var EditSession = function(text, mode) {
this.bgTokenizer = new BackgroundTokenizer(tokenizer);
var _self = this;
this.bgTokenizer.addEventListener("update", function(e) {
- _self._dispatchEvent("tokenizerUpdate", e);
+ _self._emit("tokenizerUpdate", e);
});
} else {
this.bgTokenizer.setTokenizer(tokenizer);
@@ -8309,11 +5974,13 @@ var EditSession = function(text, mode) {
this.bgTokenizer.setDocument(this.getDocument());
this.bgTokenizer.start(0);
-
+
this.tokenRe = mode.tokenRe;
this.nonTokenRe = mode.nonTokenRe;
- this._dispatchEvent("changeMode");
+ this.$setFolding(mode.foldingRules);
+
+ this._emit("changeMode");
};
this.$stopWorker = function() {
@@ -8340,18 +6007,34 @@ var EditSession = function(text, mode) {
this.getMode = function() {
return this.$mode;
};
-
+
this.$scrollTop = 0;
- this.setScrollTopRow = function(scrollTopRow) {
- if (this.$scrollTop === scrollTopRow) return;
+ this.setScrollTop = function(scrollTop) {
+ scrollTop = Math.round(Math.max(0, scrollTop));
+ if (this.$scrollTop === scrollTop)
+ return;
- this.$scrollTop = scrollTopRow;
- this._dispatchEvent("changeScrollTop");
+ this.$scrollTop = scrollTop;
+ this._emit("changeScrollTop", scrollTop);
};
- this.getScrollTopRow = function() {
+ this.getScrollTop = function() {
return this.$scrollTop;
};
+
+ this.$scrollLeft = 0;
+ this.setScrollLeft = function(scrollLeft) {
+ scrollLeft = Math.round(Math.max(0, scrollLeft));
+ if (this.$scrollLeft === scrollLeft)
+ return;
+
+ this.$scrollLeft = scrollLeft;
+ this._emit("changeScrollLeft", scrollLeft);
+ };
+
+ this.getScrollLeft = function() {
+ return this.$scrollLeft;
+ };
this.getWidth = function() {
this.$computeWidth();
@@ -8421,98 +6104,6 @@ var EditSession = function(text, mode) {
return this.doc.getTextRange(range);
};
- this.findMatchingBracket = function(position) {
- if (position.column == 0) return null;
-
- var charBeforeCursor = this.getLine(position.row).charAt(position.column-1);
- if (charBeforeCursor == "") return null;
-
- var match = charBeforeCursor.match(/([\(\[\{])|([\)\]\}])/);
- if (!match) {
- return null;
- }
-
- if (match[1]) {
- return this.$findClosingBracket(match[1], position);
- } else {
- return this.$findOpeningBracket(match[2], position);
- }
- };
-
- this.$brackets = {
- ")": "(",
- "(": ")",
- "]": "[",
- "[": "]",
- "{": "}",
- "}": "{"
- };
-
- this.$findOpeningBracket = function(bracket, position) {
- var openBracket = this.$brackets[bracket];
-
- var column = position.column - 2;
- var row = position.row;
- var depth = 1;
-
- var line = this.getLine(row);
-
- while (true) {
- while(column >= 0) {
- var ch = line.charAt(column);
- if (ch == openBracket) {
- depth -= 1;
- if (depth == 0) {
- return {row: row, column: column};
- }
- }
- else if (ch == bracket) {
- depth +=1;
- }
- column -= 1;
- }
- row -=1;
- if (row < 0) break;
-
- var line = this.getLine(row);
- var column = line.length-1;
- }
- return null;
- };
-
- this.$findClosingBracket = function(bracket, position) {
- var closingBracket = this.$brackets[bracket];
-
- var column = position.column;
- var row = position.row;
- var depth = 1;
-
- var line = this.getLine(row);
- var lineCount = this.getLength();
-
- while (true) {
- while(column < line.length) {
- var ch = line.charAt(column);
- if (ch == closingBracket) {
- depth -= 1;
- if (depth == 0) {
- return {row: row, column: column};
- }
- }
- else if (ch == bracket) {
- depth +=1;
- }
- column += 1;
- }
- row +=1;
- if (row >= lineCount) break;
-
- var line = this.getLine(row);
- var column = 0;
- }
- return null;
- };
-
this.insert = function(position, text) {
return this.doc.insert(position, text);
};
@@ -8528,7 +6119,7 @@ var EditSession = function(text, mode) {
this.$fromUndo = true;
var lastUndoRange = null;
for (var i = deltas.length - 1; i != -1; i--) {
- delta = deltas[i];
+ var delta = deltas[i];
if (delta.group == "doc") {
this.doc.revertDeltas(delta.deltas);
lastUndoRange =
@@ -8541,10 +6132,11 @@ var EditSession = function(text, mode) {
}
this.$fromUndo = false;
lastUndoRange &&
+ this.$undoSelect &&
!dontSelect &&
this.selection.setSelectionRange(lastUndoRange);
return lastUndoRange;
- },
+ };
this.redoChanges = function(deltas, dontSelect) {
if (!deltas.length)
@@ -8553,7 +6145,7 @@ var EditSession = function(text, mode) {
this.$fromUndo = true;
var lastUndoRange = null;
for (var i = 0; i < deltas.length; i++) {
- delta = deltas[i];
+ var delta = deltas[i];
if (delta.group == "doc") {
this.doc.applyDeltas(delta.deltas);
lastUndoRange =
@@ -8562,10 +6154,15 @@ var EditSession = function(text, mode) {
}
this.$fromUndo = false;
lastUndoRange &&
+ this.$undoSelect &&
!dontSelect &&
this.selection.setSelectionRange(lastUndoRange);
return lastUndoRange;
- },
+ };
+
+ this.setUndoSelect = function(enable) {
+ this.$undoSelect = enable;
+ };
this.$getUndoSelection = function(deltas, isUndo, lastUndoRange) {
function isInsert(delta) {
@@ -8666,9 +6263,8 @@ var EditSession = function(text, mode) {
this.indentRows = function(startRow, endRow, indentString) {
indentString = indentString.replace(/\t/g, this.getTabString());
- for (var row=startRow; row<=endRow; row++) {
+ for (var row=startRow; row<=endRow; row++)
this.insert({row: row, column:0}, indentString);
- }
};
this.outdentRows = function (range) {
@@ -8725,7 +6321,13 @@ var EditSession = function(text, mode) {
this.$clipRowToDocument = function(row) {
return Math.max(0, Math.min(row, this.doc.getLength()-1));
};
-
+
+ this.$clipColumnToRow = function(row, column) {
+ if (column < 0)
+ return 0;
+ return Math.min(this.doc.getLine(row).length, column);
+ };
+
this.$clipPositionToDocument = function(row, column) {
column = Math.max(0, column);
@@ -8741,13 +6343,37 @@ var EditSession = function(text, mode) {
column = Math.min(this.doc.getLine(row).length, column);
}
}
-
+
return {
row: row,
column: column
};
};
+ this.$clipRangeToDocument = function(range) {
+ if (range.start.row < 0) {
+ range.start.row = 0;
+ range.start.column = 0
+ } else {
+ range.start.column = this.$clipColumnToRow(
+ range.start.row,
+ range.start.column
+ );
+ }
+
+ var len = this.doc.getLength() - 1;
+ if (range.end.row > len) {
+ range.end.row = len;
+ range.end.column = this.doc.getLine(len).length;
+ } else {
+ range.end.column = this.$clipColumnToRow(
+ range.end.row,
+ range.end.column
+ );
+ }
+ return range;
+ };
+
// WRAPMODE
this.$wrapLimit = 80;
this.$useWrapMode = false;
@@ -8766,13 +6392,13 @@ var EditSession = function(text, mode) {
if (useWrapMode) {
var len = this.getLength();
this.$wrapData = [];
- for (i = 0; i < len; i++) {
+ for (var i = 0; i < len; i++) {
this.$wrapData.push([]);
}
this.$updateWrapData(0, len - 1);
}
- this._dispatchEvent("changeWrapMode");
+ this._emit("changeWrapMode");
}
};
@@ -8790,7 +6416,7 @@ var EditSession = function(text, mode) {
this.$wrapLimitRange.max = max;
this.$modified = true;
// This will force a recalculation of the wrap limit
- this._dispatchEvent("changeWrapMode");
+ this._emit("changeWrapMode");
}
};
@@ -8804,7 +6430,7 @@ var EditSession = function(text, mode) {
if (this.$useWrapMode) {
this.$updateWrapData(0, this.getLength() - 1);
this.$resetRowCache(0)
- this._dispatchEvent("changeWrapLimit");
+ this._emit("changeWrapLimit");
}
return true;
}
@@ -8840,10 +6466,10 @@ var EditSession = function(text, mode) {
var useWrapMode = this.$useWrapMode;
var len;
var action = e.data.action;
- var firstRow = e.data.range.start.row,
- lastRow = e.data.range.end.row,
- start = e.data.range.start,
- end = e.data.range.end;
+ var firstRow = e.data.range.start.row;
+ var lastRow = e.data.range.end.row;
+ var start = e.data.range.start;
+ var end = e.data.range.end;
var removedFolds = null;
if (action.indexOf("Lines") != -1) {
@@ -8852,7 +6478,7 @@ var EditSession = function(text, mode) {
} else {
lastRow = firstRow;
}
- len = e.data.lines.length;
+ len = e.data.lines ? e.data.lines.length : lastRow - firstRow;
} else {
len = lastRow - firstRow;
}
@@ -8928,7 +6554,6 @@ var EditSession = function(text, mode) {
} else {
// Realign folds. E.g. if you add some new chars before a fold, the
// fold should "move" to the right.
- var column;
len = Math.abs(e.data.range.start.column - e.data.range.end.column);
if (action.indexOf("remove") != -1) {
// Get all the folds in the change range and remove them.
@@ -8963,9 +6588,11 @@ var EditSession = function(text, mode) {
var row = firstRow;
lastRow = Math.min(lastRow, lines.length - 1);
while (row <= lastRow) {
- foldLine = this.getFoldLine(row);
+ foldLine = this.getFoldLine(row, foldLine);
if (!foldLine) {
tokens = this.$getDisplayTokens(lang.stringTrimRight(lines[row]));
+ wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);
+ row ++;
} else {
tokens = [];
foldLine.walk(
@@ -8989,16 +6616,13 @@ var EditSession = function(text, mode) {
lines[foldLine.end.row].length + 1
);
// Remove spaces/tabs from the back of the token array.
- while (tokens.length != 0
- && tokens[tokens.length - 1] >= SPACE)
- {
+ while (tokens.length != 0 && tokens[tokens.length - 1] >= SPACE)
tokens.pop();
- }
- }
- wrapData[row] =
- this.$computeWrapSplits(tokens, wrapLimit, tabSize);
- row = this.getRowFoldEnd(row) + 1;
+ wrapData[foldLine.start.row]
+ = this.$computeWrapSplits(tokens, wrapLimit, tabSize);
+ row = foldLine.end.row + 1;
+ }
}
};
@@ -9007,16 +6631,16 @@ var EditSession = function(text, mode) {
CHAR_EXT = 2,
PLACEHOLDER_START = 3,
PLACEHOLDER_BODY = 4,
+ PUNCTUATION = 9,
SPACE = 10,
TAB = 11,
TAB_SPACE = 12;
- this.$computeWrapSplits = function(tokens, wrapLimit, tabSize) {
+ this.$computeWrapSplits = function(tokens, wrapLimit) {
if (tokens.length == 0) {
return [];
}
- var tabSize = this.getTabSize();
var splits = [];
var displayLength = tokens.length;
var lastSplit = 0, lastDocSplit = 0;
@@ -9029,11 +6653,11 @@ var EditSession = function(text, mode) {
var len = displayed.length;
displayed.join("").
// Get all the TAB_SPACEs.
- replace(/12/g, function(m) {
+ replace(/12/g, function() {
len -= 1;
}).
// Get all the CHAR_EXT/multipleWidth characters.
- replace(/2/g, function(m) {
+ replace(/2/g, function() {
len -= 1;
});
@@ -9050,7 +6674,7 @@ var EditSession = function(text, mode) {
// a split is simple.
if (tokens[split] >= SPACE) {
// Include all following spaces + tabs in this split as well.
- while (tokens[split] >= SPACE) {
+ while (tokens[split] >= SPACE) {
split ++;
}
addSplit(split);
@@ -9105,16 +6729,17 @@ var EditSession = function(text, mode) {
}
// === ELSE ===
- // Search for the first non space/tab/placeholder token backwards.
- for (split; split != lastSplit - 1; split--) {
- if (tokens[split] >= PLACEHOLDER_START) {
- split++;
- break;
- }
+ // Search for the first non space/tab/placeholder/punctuation token backwards.
+ var minSplit = Math.max(split - 10, lastSplit - 1);
+ while (split > minSplit && tokens[split] < PLACEHOLDER_START) {
+ split --;
+ }
+ while (split > minSplit && tokens[split] == PUNCTUATION) {
+ split --;
}
// If we found one, then add the split.
- if (split > lastSplit) {
- addSplit(split);
+ if (split > minSplit) {
+ addSplit(++split);
continue;
}
@@ -9122,7 +6747,7 @@ var EditSession = function(text, mode) {
split = lastSplit + wrapLimit;
// The split is inside of a CHAR or CHAR_EXT token and no space
// around -> force a split.
- addSplit(lastSplit + wrapLimit);
+ addSplit(split);
}
return splits;
}
@@ -9148,11 +6773,13 @@ var EditSession = function(text, mode) {
}
}
// Space
- else if(c == 32) {
+ else if (c == 32) {
arr.push(SPACE);
+ } else if((c > 39 && c < 48) || (c > 57 && c < 64)) {
+ arr.push(PUNCTUATION);
}
// full width characters
- else if (isFullWidth(c)) {
+ else if (c >= 0x1100 && isFullWidth(c)) {
arr.push(CHAR, CHAR_EXT);
} else {
arr.push(CHAR);
@@ -9188,7 +6815,7 @@ var EditSession = function(text, mode) {
screenColumn += this.getScreenTabSize(screenColumn);
}
// full width characters
- else if (isFullWidth(c)) {
+ else if (c >= 0x1100 && isFullWidth(c)) {
screenColumn += 2;
} else {
screenColumn += 1;
@@ -9264,12 +6891,11 @@ var EditSession = function(text, mode) {
column: 0
}
}
-
+
var line;
var docRow = 0;
var docColumn = 0;
var column;
- var foldLineRowLength;
var row = 0;
var rowLength = 0;
@@ -9284,11 +6910,9 @@ var EditSession = function(text, mode) {
}
}
var doCache = !rowCache.length || i == rowCache.length;
-
- // clamp row before clamping column, for selection on last line
- var maxRow = this.getLength() - 1;
- var foldLine = this.getNextFold(docRow);
+ var maxRow = this.getLength() - 1;
+ var foldLine = this.getNextFoldLine(docRow);
var foldStart = foldLine ? foldLine.start.row : Infinity;
while (row <= screenRow) {
@@ -9300,7 +6924,7 @@ var EditSession = function(text, mode) {
docRow++;
if (docRow > foldStart) {
docRow = foldLine.end.row+1;
- foldLine = this.getNextFold(docRow);
+ foldLine = this.getNextFoldLine(docRow, foldLine);
foldStart = foldLine ? foldLine.start.row : Infinity;
}
}
@@ -9312,18 +6936,24 @@ var EditSession = function(text, mode) {
}
}
- if (foldLine && foldLine.start.row <= docRow)
+ if (foldLine && foldLine.start.row <= docRow) {
line = this.getFoldDisplayLine(foldLine);
- else {
+ docRow = foldLine.start.row;
+ } else if (row + rowLength <= screenRow || docRow > maxRow) {
+ // clip at the end of the document
+ return {
+ row: maxRow,
+ column: this.getLine(maxRow).length
+ }
+ } else {
line = this.getLine(docRow);
foldLine = null;
}
- var splits = [];
if (this.$useWrapMode) {
- splits = this.$wrapData[docRow];
+ var splits = this.$wrapData[docRow];
if (splits) {
- column = splits[screenRow - row]
+ column = splits[screenRow - row];
if(screenRow > row && splits.length) {
docColumn = splits[screenRow - row - 1] || splits[splits.length - 1];
line = line.substring(docColumn);
@@ -9333,10 +6963,6 @@ var EditSession = function(text, mode) {
docColumn += this.$getStringScreenWidth(line, screenColumn)[1];
- // clip row at the end of the document
- if (row + splits.length < screenRow)
- docColumn = Number.MAX_VALUE;
-
// Need to do some clamping action here.
if (this.$useWrapMode) {
if (docColumn >= column) {
@@ -9352,7 +6978,7 @@ var EditSession = function(text, mode) {
if (foldLine) {
return foldLine.idxToPosition(docColumn);
}
-
+
return {
row: docRow,
column: docColumn
@@ -9363,13 +6989,11 @@ var EditSession = function(text, mode) {
// Normalize the passed in arguments.
if (typeof docColumn === "undefined")
var pos = this.$clipPositionToDocument(docRow.row, docRow.column);
- else
+ else
pos = this.$clipPositionToDocument(docRow, docColumn);
docRow = pos.row;
docColumn = pos.column;
-
- var LL = this.$rowCache.length;
var wrapData;
// Special case in wrapMode if the doc is at the end of the document.
@@ -9386,7 +7010,6 @@ var EditSession = function(text, mode) {
}
var screenRow = 0;
- var screenColumn = 0;
var foldStartRow = null;
var fold = null;
@@ -9410,7 +7033,7 @@ var EditSession = function(text, mode) {
}
var doCache = !rowCache.length || i == rowCache.length;
- var foldLine = this.getNextFold(row);
+ var foldLine = this.getNextFoldLine(row);
var foldStart = foldLine ?foldLine.start.row :Infinity;
while (row < docRow) {
@@ -9418,7 +7041,7 @@ var EditSession = function(text, mode) {
rowEnd = foldLine.end.row + 1;
if (rowEnd > docRow)
break;
- foldLine = this.getNextFold(rowEnd);
+ foldLine = this.getNextFoldLine(rowEnd, foldLine);
foldStart = foldLine ?foldLine.start.row :Infinity;
}
else {
@@ -9427,7 +7050,7 @@ var EditSession = function(text, mode) {
screenRow += this.getRowLength(row);
row = rowEnd;
-
+
if (doCache) {
rowCache.push({
docRow: row,
@@ -9475,24 +7098,29 @@ var EditSession = function(text, mode) {
this.getScreenLength = function() {
var screenRows = 0;
- var lastFoldLine = null;
- var foldLine = null;
+ var fold = null;
if (!this.$useWrapMode) {
screenRows = this.getLength();
// Remove the folded lines again.
var foldData = this.$foldData;
for (var i = 0; i < foldData.length; i++) {
- foldLine = foldData[i];
- screenRows -= foldLine.end.row - foldLine.start.row;
+ fold = foldData[i];
+ screenRows -= fold.end.row - fold.start.row;
}
} else {
- for (var row = 0; row < this.$wrapData.length; row++) {
- if (foldLine = this.getFoldLine(row, lastFoldLine)) {
- row = foldLine.end.row;
- screenRows += 1;
- } else {
- screenRows += this.$wrapData[row].length + 1;
+ var lastRow = this.$wrapData.length;
+ var row = 0, i = 0;
+ var fold = this.$foldData[i++];
+ var foldStart = fold ? fold.start.row :Infinity;
+
+ while (row < lastRow) {
+ screenRows += this.$wrapData[row].length + 1;
+ row ++;
+ if (row > foldStart) {
+ row = fold.end.row+1;
+ fold = this.$foldData[i++];
+ foldStart = fold ?fold.start.row :Infinity;
}
}
}
@@ -9541,7 +7169,8 @@ var EditSession = function(text, mode) {
}).call(EditSession.prototype);
-require("ace/edit_session/folding").Folding.call(EditSession.prototype);
+require("./edit_session/folding").Folding.call(EditSession.prototype);
+require("./edit_session/bracket_match").BracketMatch.call(EditSession.prototype);
exports.EditSession = EditSession;
});
@@ -9583,20 +7212,21 @@ exports.EditSession = EditSession;
*
* ***** END LICENSE BLOCK ***** */
-define('ace/selection', ['require', 'exports', 'module' , 'pilot/oop', 'pilot/lang', 'pilot/event_emitter', 'ace/range'], function(require, exports, module) {
+define('ace/selection', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/lib/event_emitter', 'ace/range'], function(require, exports, module) {
+"use strict";
-var oop = require("pilot/oop");
-var lang = require("pilot/lang");
-var EventEmitter = require("pilot/event_emitter").EventEmitter;
-var Range = require("ace/range").Range;
+var oop = require("./lib/oop");
+var lang = require("./lib/lang");
+var EventEmitter = require("./lib/event_emitter").EventEmitter;
+var Range = require("./range").Range;
/**
* Keeps cursor position and the text selection of an edit session.
- *
+ *
* The row/columns used in the selection are in document coordinates
* representing ths coordinates as thez appear in the document
* before applying soft wrap and folding.
- */
+ */
var Selection = function(session) {
this.session = session;
this.doc = session.getDocument();
@@ -9607,16 +7237,16 @@ var Selection = function(session) {
var _self = this;
this.selectionLead.on("change", function(e) {
- _self._dispatchEvent("changeCursor");
+ _self._emit("changeCursor");
if (!_self.$isEmpty)
- _self._dispatchEvent("changeSelection");
+ _self._emit("changeSelection");
if (!_self.$preventUpdateDesiredColumnOnChange && e.old.column != e.value.column)
_self.$updateDesiredColumn();
});
this.selectionAnchor.on("change", function() {
if (!_self.$isEmpty)
- _self._dispatchEvent("changeSelection");
+ _self._emit("changeSelection");
});
};
@@ -9648,7 +7278,7 @@ var Selection = function(session) {
if (this.$isEmpty) {
this.$isEmpty = false;
- this._dispatchEvent("changeSelection");
+ this._emit("changeSelection");
}
};
@@ -9708,7 +7338,7 @@ var Selection = function(session) {
this.clearSelection = function() {
if (!this.$isEmpty) {
this.$isEmpty = true;
- this._dispatchEvent("changeSelection");
+ this._emit("changeSelection");
}
};
@@ -9800,6 +7430,13 @@ var Selection = function(session) {
this.setSelectionRange(range);
};
+ // Selects a word including its right whitespace
+ this.selectAWord = function() {
+ var cursor = this.getCursor();
+ var range = this.session.getAWordRange(cursor.row, cursor.column);
+ this.setSelectionRange(range);
+ };
+
this.selectLine = function() {
var rowStart = this.selectionLead.row;
var rowEnd;
@@ -9925,19 +7562,31 @@ var Selection = function(session) {
this.session.nonTokenRe.lastIndex = 0;
this.session.tokenRe.lastIndex = 0;
- var fold;
- if (fold = this.session.getFoldAt(row, column, 1)) {
+ // skip folds
+ var fold = this.session.getFoldAt(row, column, 1);
+ if (fold) {
this.moveCursorTo(fold.end.row, fold.end.column);
return;
- } else if (column == line.length) {
- this.moveCursorRight();
- return;
}
- else if (match = this.session.nonTokenRe.exec(rightOfCursor)) {
+
+ // first skip space
+ if (match = this.session.nonTokenRe.exec(rightOfCursor)) {
column += this.session.nonTokenRe.lastIndex;
this.session.nonTokenRe.lastIndex = 0;
+ rightOfCursor = line.substring(column);
}
- else if (match = this.session.tokenRe.exec(rightOfCursor)) {
+
+ // if at line end proceed with next line
+ if (column >= line.length) {
+ this.moveCursorTo(row, line.length);
+ this.moveCursorRight();
+ if (row < this.doc.getLength() - 1)
+ this.moveCursorWordRight();
+ return;
+ }
+
+ // advance to the end of the next token
+ if (match = this.session.tokenRe.exec(rightOfCursor)) {
column += this.session.tokenRe.lastIndex;
this.session.tokenRe.lastIndex = 0;
}
@@ -9949,32 +7598,41 @@ var Selection = function(session) {
var row = this.selectionLead.row;
var column = this.selectionLead.column;
+ // skip folds
var fold;
if (fold = this.session.getFoldAt(row, column, -1)) {
this.moveCursorTo(fold.start.row, fold.start.column);
return;
}
- if (column == 0) {
- this.moveCursorLeft();
- return;
- }
-
var str = this.session.getFoldStringAt(row, column, -1);
if (str == null) {
str = this.doc.getLine(row).substring(0, column)
}
+
var leftOfCursor = lang.stringReverse(str);
-
var match;
this.session.nonTokenRe.lastIndex = 0;
this.session.tokenRe.lastIndex = 0;
-
+
+ // skip whitespace
if (match = this.session.nonTokenRe.exec(leftOfCursor)) {
column -= this.session.nonTokenRe.lastIndex;
+ leftOfCursor = leftOfCursor.slice(this.session.nonTokenRe.lastIndex);
this.session.nonTokenRe.lastIndex = 0;
}
- else if (match = this.session.tokenRe.exec(leftOfCursor)) {
+
+ // if at begin of the line proceed in line above
+ if (column <= 0) {
+ this.moveCursorTo(row, 0);
+ this.moveCursorLeft();
+ if (row > 0)
+ this.moveCursorWordLeft();
+ return;
+ }
+
+ // move to the begin of the word
+ if (match = this.session.tokenRe.exec(leftOfCursor)) {
column -= this.session.tokenRe.lastIndex;
this.session.tokenRe.lastIndex = 0;
}
@@ -9987,9 +7645,12 @@ var Selection = function(session) {
this.selectionLead.row,
this.selectionLead.column
);
- var screenCol = (chars == 0 && this.$desiredColumn) || screenPos.column;
+
+ var screenCol = (chars === 0 && this.$desiredColumn) || screenPos.column;
var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenCol);
- this.moveCursorTo(docPos.row, docPos.column + chars, chars == 0);
+
+ // move the cursor and update the desired column
+ this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0);
};
this.moveCursorToPosition = function(position) {
@@ -10003,11 +7664,11 @@ var Selection = function(session) {
row = fold.start.row;
column = fold.start.column;
}
-
+
this.$preventUpdateDesiredColumnOnChange = true;
this.selectionLead.setPosition(row, column);
this.$preventUpdateDesiredColumnOnChange = false;
-
+
if (!preventUpdateDesiredColumn)
this.$updateDesiredColumn(this.selectionLead.column);
};
@@ -10061,6 +7722,7 @@ exports.Selection = Selection;
* ***** END LICENSE BLOCK ***** */
define('ace/range', ['require', 'exports', 'module' ], function(require, exports, module) {
+"use strict";
var Range = function(startRow, startColumn, endRow, endColumn) {
this.start = {
@@ -10075,6 +7737,12 @@ var Range = function(startRow, startColumn, endRow, endColumn) {
};
(function() {
+ this.isEequal = function(range) {
+ return this.start.row == range.start.row &&
+ this.end.row == range.end.row &&
+ this.start.column == range.start.column &&
+ this.end.column == range.end.column
+ };
this.toString = function() {
return ("Range: [" + this.start.row + "/" + this.start.column +
@@ -10127,9 +7795,12 @@ var Range = function(startRow, startColumn, endRow, endColumn) {
}
}
+ this.comparePoint = function(p) {
+ return this.compare(p.row, p.column);
+ }
+
this.containsRange = function(range) {
- var cmp = this.compareRange(range);
- return (cmp == -1 || cmp == 0 || cmp == 1);
+ return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;
}
this.isEnd = function(row, column) {
@@ -10372,11 +8043,12 @@ exports.Range = Range;
* ***** END LICENSE BLOCK ***** */
define('ace/mode/text', ['require', 'exports', 'module' , 'ace/tokenizer', 'ace/mode/text_highlight_rules', 'ace/mode/behaviour', 'ace/unicode'], function(require, exports, module) {
+"use strict";
-var Tokenizer = require("ace/tokenizer").Tokenizer;
-var TextHighlightRules = require("ace/mode/text_highlight_rules").TextHighlightRules;
-var Behaviour = require("ace/mode/behaviour").Behaviour;
-var unicode = require("ace/unicode");
+var Tokenizer = require("../tokenizer").Tokenizer;
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+var Behaviour = require("./behaviour").Behaviour;
+var unicode = require("../unicode");
var Mode = function() {
this.$tokenizer = new Tokenizer(new TextHighlightRules().getRules());
@@ -10539,13 +8211,12 @@ var Mode = function() {
for (var key in behaviours) {
if (behaviours[key][action]) {
var ret = behaviours[key][action].apply(this, arguments);
- if (ret !== false) {
+ if (ret) {
return ret;
}
}
}
}
- return false;
}
}).call(Mode.prototype);
@@ -10590,8 +8261,10 @@ exports.Mode = Mode;
* ***** END LICENSE BLOCK ***** */
define('ace/tokenizer', ['require', 'exports', 'module' ], function(require, exports, module) {
+"use strict";
-var Tokenizer = function(rules) {
+var Tokenizer = function(rules, flag) {
+ flag = flag ? "g" + flag : "g";
this.rules = rules;
this.regExps = {};
@@ -10622,7 +8295,7 @@ var Tokenizer = function(rules) {
ruleRegExps.push(adjustedregex);
}
- this.regExps[key] = new RegExp("(?:(" + ruleRegExps.join(")|(") + ")|(.))", "g");
+ this.regExps[key] = new RegExp("(?:(" + ruleRegExps.join(")|(") + ")|(.))", flag);
}
};
@@ -10675,7 +8348,7 @@ var Tokenizer = function(rules) {
}
break;
}
- };
+ }
if (value[0]) {
if (typeof type == "string") {
@@ -10693,7 +8366,7 @@ var Tokenizer = function(rules) {
token = {
type: type[i],
value: value[i]
- }
+ };
}
}
}
@@ -10702,7 +8375,7 @@ var Tokenizer = function(rules) {
break;
lastIndex = re.lastIndex;
- };
+ }
if (token.type)
tokens.push(token);
@@ -10754,9 +8427,10 @@ exports.Tokenizer = Tokenizer;
*
* ***** END LICENSE BLOCK ***** */
-define('ace/mode/text_highlight_rules', ['require', 'exports', 'module' , 'pilot/lang'], function(require, exports, module) {
+define('ace/mode/text_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/lang'], function(require, exports, module) {
+"use strict";
-var lang = require("pilot/lang");
+var lang = require("../lib/lang");
var TextHighlightRules = function() {
@@ -10866,6 +8540,7 @@ exports.TextHighlightRules = TextHighlightRules;
* ***** END LICENSE BLOCK ***** */
define('ace/mode/behaviour', ['require', 'exports', 'module' ], function(require, exports, module) {
+"use strict";
var Behaviour = function() {
this.$behaviours = {};
@@ -10924,6 +8599,7 @@ var Behaviour = function() {
exports.Behaviour = Behaviour;
});define('ace/unicode', ['require', 'exports', 'module' ], function(require, exports, module) {
+"use strict";
/*
XRegExp Unicode plugin pack: Categories 1.0
@@ -11065,12 +8741,13 @@ function addUnicodePackage (pack) {
*
* ***** END LICENSE BLOCK ***** */
-define('ace/document', ['require', 'exports', 'module' , 'pilot/oop', 'pilot/event_emitter', 'ace/range', 'ace/anchor'], function(require, exports, module) {
+define('ace/document', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event_emitter', 'ace/range', 'ace/anchor'], function(require, exports, module) {
+"use strict";
-var oop = require("pilot/oop");
-var EventEmitter = require("pilot/event_emitter").EventEmitter;
-var Range = require("ace/range").Range;
-var Anchor = require("ace/anchor").Anchor;
+var oop = require("./lib/oop");
+var EventEmitter = require("./lib/event_emitter").EventEmitter;
+var Range = require("./range").Range;
+var Anchor = require("./anchor").Anchor;
var Document = function(text) {
this.$lines = [];
@@ -11117,7 +8794,7 @@ var Document = function(text) {
this.$detectNewLine = function(text) {
- var match = text.match(/^.*?(\r?\n)/m);
+ var match = text.match(/^.*?(\r\n|\r|\n)/m);
if (match) {
this.$autoNewLine = match[1];
} else {
@@ -11136,12 +8813,13 @@ var Document = function(text) {
case "auto":
return this.$autoNewLine;
}
- },
+ };
this.$autoNewLine = "\n";
this.$newLineMode = "auto";
this.setNewLineMode = function(newLineMode) {
- if (this.$newLineMode === newLineMode) return;
+ if (this.$newLineMode === newLineMode)
+ return;
this.$newLineMode = newLineMode;
};
@@ -11198,7 +8876,7 @@ var Document = function(text) {
position.column = this.getLine(length-1).length;
}
return position;
- }
+ };
this.insert = function(position, text) {
if (text.length == 0)
@@ -11236,9 +8914,9 @@ var Document = function(text) {
range: range,
lines: lines
};
- this._dispatchEvent("change", { data: delta });
+ this._emit("change", { data: delta });
return range.end;
- },
+ };
this.insertNewLine = function(position) {
position = this.$clipPosition(position);
@@ -11257,7 +8935,7 @@ var Document = function(text) {
range: Range.fromPoints(position, end),
text: this.getNewLineCharacter()
};
- this._dispatchEvent("change", { data: delta });
+ this._emit("change", { data: delta });
return end;
};
@@ -11281,7 +8959,7 @@ var Document = function(text) {
range: Range.fromPoints(position, end),
text: text
};
- this._dispatchEvent("change", { data: delta });
+ this._emit("change", { data: delta });
return end;
};
@@ -11333,7 +9011,7 @@ var Document = function(text) {
range: range,
text: removed
};
- this._dispatchEvent("change", { data: delta });
+ this._emit("change", { data: delta });
return range.start;
};
@@ -11354,7 +9032,7 @@ var Document = function(text) {
nl: this.getNewLineCharacter(),
lines: removed
};
- this._dispatchEvent("change", { data: delta });
+ this._emit("change", { data: delta });
return removed;
};
@@ -11372,7 +9050,7 @@ var Document = function(text) {
range: range,
text: this.getNewLineCharacter()
};
- this._dispatchEvent("change", { data: delta });
+ this._emit("change", { data: delta });
};
this.replace = function(range, text) {
@@ -11401,13 +9079,13 @@ var Document = function(text) {
var range = Range.fromPoints(delta.range.start, delta.range.end);
if (delta.action == "insertLines")
- this.insertLines(range.start.row, delta.lines)
+ this.insertLines(range.start.row, delta.lines);
else if (delta.action == "insertText")
- this.insert(range.start, delta.text)
+ this.insert(range.start, delta.text);
else if (delta.action == "removeLines")
- this.removeLines(range.start.row, range.end.row - 1)
+ this.removeLines(range.start.row, range.end.row - 1);
else if (delta.action == "removeText")
- this.remove(range)
+ this.remove(range);
}
};
@@ -11418,13 +9096,13 @@ var Document = function(text) {
var range = Range.fromPoints(delta.range.start, delta.range.end);
if (delta.action == "insertLines")
- this.removeLines(range.start.row, range.end.row - 1)
+ this.removeLines(range.start.row, range.end.row - 1);
else if (delta.action == "insertText")
- this.remove(range)
+ this.remove(range);
else if (delta.action == "removeLines")
- this.insertLines(range.start.row, delta.lines)
+ this.insertLines(range.start.row, delta.lines);
else if (delta.action == "removeText")
- this.insert(range.start, delta.text)
+ this.insert(range.start, delta.text);
}
};
@@ -11469,10 +9147,11 @@ exports.Document = Document;
*
* ***** END LICENSE BLOCK ***** */
-define('ace/anchor', ['require', 'exports', 'module' , 'pilot/oop', 'pilot/event_emitter'], function(require, exports, module) {
+define('ace/anchor', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event_emitter'], function(require, exports, module) {
+"use strict";
-var oop = require("pilot/oop");
-var EventEmitter = require("pilot/event_emitter").EventEmitter;
+var oop = require("./lib/oop");
+var EventEmitter = require("./lib/event_emitter").EventEmitter;
/**
* An Anchor is a floating pointer in the document. Whenever text is inserted or
@@ -11589,7 +9268,7 @@ var Anchor = exports.Anchor = function(doc, row, column) {
this.row = pos.row;
this.column = pos.column;
- this._dispatchEvent("change", {
+ this._emit("change", {
old: old,
value: pos
});
@@ -11661,10 +9340,11 @@ var Anchor = exports.Anchor = function(doc, row, column) {
*
* ***** END LICENSE BLOCK ***** */
-define('ace/background_tokenizer', ['require', 'exports', 'module' , 'pilot/oop', 'pilot/event_emitter'], function(require, exports, module) {
+define('ace/background_tokenizer', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event_emitter'], function(require, exports, module) {
+"use strict";
-var oop = require("pilot/oop");
-var EventEmitter = require("pilot/event_emitter").EventEmitter;
+var oop = require("./lib/oop");
+var EventEmitter = require("./lib/event_emitter").EventEmitter;
var BackgroundTokenizer = function(tokenizer, editor) {
this.running = false;
@@ -11726,7 +9406,7 @@ var BackgroundTokenizer = function(tokenizer, editor) {
first: firstRow,
last: lastRow
};
- this._dispatchEvent("update", {data: data});
+ this._emit("update", {data: data});
};
this.start = function(startRow) {
@@ -11756,8 +9436,8 @@ var BackgroundTokenizer = function(tokenizer, editor) {
};
this.$tokenizeRows = function(firstRow, lastRow) {
- if (!this.doc)
- return [];
+ if (!this.doc || isNaN(firstRow) || isNaN(lastRow))
+ return [{'state':'start','tokens':[]}];
var rows = [];
@@ -11837,11 +9517,13 @@ exports.BackgroundTokenizer = BackgroundTokenizer;
*
* ***** END LICENSE BLOCK ***** */
-define('ace/edit_session/folding', ['require', 'exports', 'module' , 'ace/range', 'ace/edit_session/fold_line', 'ace/edit_session/fold'], function(require, exports, module) {
+define('ace/edit_session/folding', ['require', 'exports', 'module' , 'ace/range', 'ace/edit_session/fold_line', 'ace/edit_session/fold', 'ace/token_iterator'], function(require, exports, module) {
+"use strict";
-var Range = require("ace/range").Range;
-var FoldLine = require("ace/edit_session/fold_line").FoldLine;
-var Fold = require("ace/edit_session/fold").Fold;
+var Range = require("../range").Range;
+var FoldLine = require("./fold_line").FoldLine;
+var Fold = require("./fold").Fold;
+var TokenIterator = require("../token_iterator").TokenIterator;
function Folding() {
/**
@@ -11853,7 +9535,7 @@ function Folding() {
var foldLine = this.getFoldLine(row);
if (!foldLine)
return null;
-
+
var folds = foldLine.folds;
for (var i = 0; i < folds.length; i++) {
var fold = folds[i];
@@ -11912,7 +9594,30 @@ function Folding() {
}
}
return foundFolds;
- }
+ };
+
+ /**
+ * Returns all folds in the document
+ */
+ this.getAllFolds = function() {
+ var folds = [];
+ var foldLines = this.$foldData;
+
+ function addFold(fold) {
+ folds.push(fold);
+ if (!fold.subFolds)
+ return;
+
+ for (var i = 0; i < fold.subFolds.length; i++)
+ addFold(fold.subFolds[i]);
+ }
+
+ for (var i = 0; i < foldLines.length; i++)
+ for (var j = 0; j < foldLines[i].folds.length; j++)
+ addFold(foldLines[i].folds[j]);
+
+ return folds;
+ };
/**
* Returns the string between folds at the given position.
@@ -11932,24 +9637,25 @@ function Folding() {
* fo|o<fold>bar<fold>wolrd -trim=00> "foo"
*/
this.getFoldStringAt = function(row, column, trim, foldLine) {
- var foldLine = foldLine || this.getFoldLine(row);
+ foldLine = foldLine || this.getFoldLine(row);
if (!foldLine)
return null;
-
+
var lastFold = {
end: { column: 0 }
};
// TODO: Refactor to use getNextFoldTo function.
+ var str, fold;
for (var i = 0; i < foldLine.folds.length; i++) {
- var fold = foldLine.folds[i];
+ fold = foldLine.folds[i];
var cmp = fold.range.compareEnd(row, column);
if (cmp == -1) {
- var str = this
+ str = this
.getLine(fold.start.row)
.substring(lastFold.end.column, fold.start.column);
break;
}
- else if (cmp == 0) {
+ else if (cmp === 0) {
return null;
}
lastFold = fold;
@@ -11960,10 +9666,10 @@ function Folding() {
if (trim == -1)
return str.substring(0, column - lastFold.end.column);
else if (trim == 1)
- return str.substring(column - lastFold.end.column)
+ return str.substring(column - lastFold.end.column);
else
return str;
- }
+ };
this.getFoldLine = function(docRow, startFoldLine) {
var foldData = this.$foldData;
@@ -11981,11 +9687,11 @@ function Folding() {
}
}
return null;
- }
+ };
// returns the fold which starts after or contains docRow
- this.getNextFold = function(docRow, startFoldLine) {
- var foldData = this.$foldData, ans;
+ this.getNextFoldLine = function(docRow, startFoldLine) {
+ var foldData = this.$foldData;
var i = 0;
if (startFoldLine)
i = foldData.indexOf(startFoldLine);
@@ -11998,7 +9704,7 @@ function Folding() {
}
}
return null;
- }
+ };
this.getFoldedRowCount = function(first, last) {
var foldData = this.$foldData, rowCount = last-first+1;
@@ -12022,7 +9728,7 @@ function Folding() {
}
}
return rowCount;
- }
+ };
this.$addFoldLine = function(foldLine) {
this.$foldData.push(foldLine);
@@ -12030,7 +9736,7 @@ function Folding() {
return a.start.row - b.start.row;
});
return foldLine;
- }
+ };
/**
* Adds a new fold.
@@ -12042,17 +9748,20 @@ function Folding() {
this.addFold = function(placeholder, range) {
var foldData = this.$foldData;
var added = false;
-
+ var fold;
+
if (placeholder instanceof Fold)
- var fold = placeholder;
+ fold = placeholder;
else
fold = new Fold(range, placeholder);
+ this.$clipRangeToDocument(fold.range);
+
var startRow = fold.start.row;
var startColumn = fold.start.column;
var endRow = fold.end.row;
var endColumn = fold.end.column;
-
+
// --- Some checking ---
if (fold.placeholder.length < 2)
throw "Placeholder has to be at least 2 characters";
@@ -12060,29 +9769,18 @@ function Folding() {
if (startRow == endRow && endColumn - startColumn < 2)
throw "The range has to be at least 2 characters width";
- var existingFold = this.getFoldAt(startRow, startColumn, 1);
+ var startFold = this.getFoldAt(startRow, startColumn, 1);
+ var endFold = this.getFoldAt(endRow, endColumn, -1);
+ if (startFold && endFold == startFold)
+ return startFold.addSubFold(fold);
+
if (
- existingFold
- && existingFold.range.isEnd(endRow, endColumn)
- && existingFold.range.isStart(startRow, startColumn)
+ (startFold && !startFold.range.isStart(startRow, startColumn))
+ || (endFold && !endFold.range.isEnd(endRow, endColumn))
) {
- return fold;
+ throw "A fold can't intersect already existing fold" + fold.range + startFold.range;
}
- existingFold = this.getFoldAt(startRow, startColumn, 1);
- if (existingFold && !existingFold.range.isStart(startRow, startColumn))
- throw "A fold can't start inside of an already existing fold";
-
- existingFold = this.getFoldAt(endRow, endColumn, -1);
- if (existingFold && !existingFold.range.isEnd(endRow, endColumn))
- throw "A fold can't end inside of an already existing fold";
-
- if (endRow >= this.doc.getLength())
- throw "End of fold is outside of the document.";
-
- if (endColumn > this.getLine(endRow).length || startColumn > this.getLine(startRow).length)
- throw "End of fold is outside of the document.";
-
// Check if there are folds in the range we create the new fold for.
var folds = this.getFoldsInRange(fold.range);
if (folds.length > 0) {
@@ -12104,7 +9802,7 @@ function Folding() {
added = true;
if (!fold.sameRow) {
// Check if we might have to merge two FoldLines.
- foldLineNext = foldData[i + 1];
+ var foldLineNext = foldData[i + 1];
if (foldLineNext && foldLineNext.start.row == endRow) {
// We need to merge!
foldLine.merge(foldLineNext);
@@ -12126,7 +9824,7 @@ function Folding() {
// Notify that fold data has changed.
this.$modified = true;
- this._dispatchEvent("changeFold", { data: fold });
+ this._emit("changeFold", { data: fold });
return fold;
};
@@ -12142,8 +9840,8 @@ function Folding() {
var startRow = foldLine.start.row;
var endRow = foldLine.end.row;
- var foldLines = this.$foldData,
- folds = foldLine.folds;
+ var foldLines = this.$foldData;
+ var folds = foldLine.folds;
// Simple case where there is only one fold in the FoldLine such that
// the entire fold line can get removed directly.
if (folds.length == 1) {
@@ -12169,13 +9867,13 @@ function Folding() {
folds.splice(folds.indexOf(fold), 1);
} else
// The fold goes over more then one row. This means remvoing this fold
- // will cause the fold line to get splitted up.
+ // will cause the fold line to get splitted up. newFoldLine is the second part
{
var newFoldLine = foldLine.split(fold.start.row, fold.start.column);
- newFoldLine.folds.shift();
- foldLine.start.row = folds[0].start.row;
- foldLine.start.column = folds[0].start.column;
- this.$addFoldLine(newFoldLine);
+ folds = newFoldLine.folds;
+ folds.shift();
+ newFoldLine.start.row = folds[0].start.row;
+ newFoldLine.start.column = folds[0].start.column;
}
if (this.$useWrapMode) {
@@ -12184,8 +9882,8 @@ function Folding() {
// Notify that fold data has changed.
this.$modified = true;
- this._dispatchEvent("changeFold", { data: fold });
- }
+ this._emit("changeFold", { data: fold });
+ };
this.removeFolds = function(folds) {
// We need to clone the folds array passed in as it might be the folds
@@ -12200,7 +9898,7 @@ function Folding() {
this.removeFold(fold);
}, this);
this.$modified = true;
- }
+ };
this.expandFold = function(fold) {
this.removeFold(fold);
@@ -12208,13 +9906,37 @@ function Folding() {
this.addFold(fold);
}, this);
fold.subFolds = [];
- }
+ };
this.expandFolds = function(folds) {
folds.forEach(function(fold) {
this.expandFold(fold);
}, this);
- }
+ };
+
+ this.unfold = function(location, expandInner) {
+ var range, folds;
+ if (location == null)
+ range = new Range(0, 0, this.getLength(), 0);
+ else if (typeof location == "number")
+ range = new Range(location, 0, location, this.getLine(location).length);
+ else if ("row" in location)
+ range = Range.fromPoints(location, location);
+ else
+ range = location;
+
+ folds = this.getFoldsInRange(range);
+ if (expandInner) {
+ this.removeFolds(folds);
+ } else {
+ // TODO: might need to remove and add folds in one go instead of using
+ // expandFolds several times.
+ while (folds.length) {
+ this.expandFolds(folds);
+ folds = this.getFoldsInRange(range);
+ }
+ }
+ };
/**
* Checks if a given documentRow is folded. This is true if there are some
@@ -12227,8 +9949,8 @@ function Folding() {
this.getRowFoldEnd = function(docRow, startFoldRow) {
var foldLine = this.getFoldLine(docRow, startFoldRow);
return (foldLine
- ? foldLine.end.row
- : docRow)
+ ? foldLine.end.row
+ : docRow);
};
this.getFoldDisplayLine = function(foldLine, endRow, endColumn, startRow, startColumn) {
@@ -12243,11 +9965,10 @@ function Folding() {
}
// Build the textline using the FoldLine walker.
- var line = "";
var doc = this.doc;
var textLine = "";
- foldLine.walk(function(placeholder, row, column, lastColumn, isNewRow) {
+ foldLine.walk(function(placeholder, row, column, lastColumn) {
if (row < startRow) {
return;
} else if (row == startRow) {
@@ -12279,7 +10000,6 @@ function Folding() {
};
this.$cloneFoldData = function() {
- var foldData = this.$foldData;
var fd = [];
fd = this.$foldData.map(function(foldLine) {
var folds = foldLine.folds.map(function(fold) {
@@ -12290,11 +10010,232 @@ function Folding() {
return fd;
};
+
+ this.toggleFold = function(tryToUnfold) {
+ var selection = this.selection;
+ var range = selection.getRange();
+ var fold;
+ var bracketPos;
+
+ if (range.isEmpty()) {
+ var cursor = range.start;
+ fold = this.getFoldAt(cursor.row, cursor.column);
+
+ if (fold) {
+ this.expandFold(fold);
+ return;
+ }
+ else if (bracketPos = this.findMatchingBracket(cursor)) {
+ if (range.comparePoint(bracketPos) == 1) {
+ range.end = bracketPos;
+ }
+ else {
+ range.start = bracketPos;
+ range.start.column++;
+ range.end.column--;
+ }
+ }
+ else if (bracketPos = this.findMatchingBracket({row: cursor.row, column: cursor.column + 1})) {
+ if (range.comparePoint(bracketPos) == 1)
+ range.end = bracketPos;
+ else
+ range.start = bracketPos;
+
+ range.start.column++;
+ }
+ else {
+ range = this.getCommentFoldRange(cursor.row, cursor.column) || range;
+ }
+ } else {
+ var folds = this.getFoldsInRange(range);
+ if (tryToUnfold && folds.length) {
+ this.expandFolds(folds);
+ return;
+ }
+ else if (folds.length == 1 ) {
+ fold = folds[0];
+ }
+ }
+
+ if (!fold)
+ fold = this.getFoldAt(range.start.row, range.start.column);
+
+ if (fold && fold.range.toString() == range.toString()) {
+ this.expandFold(fold);
+ return;
+ }
+
+ var placeholder = "...";
+ if (!range.isMultiLine()) {
+ placeholder = this.getTextRange(range);
+ if(placeholder.length < 4)
+ return;
+ placeholder = placeholder.trim().substring(0, 2) + "..";
+ }
+
+ this.addFold(placeholder, range);
+ };
+
+ this.getCommentFoldRange = function(row, column) {
+ var iterator = new TokenIterator(this, row, column);
+ var token = iterator.getCurrentToken();
+ if (token && /^comment|string/.test(token.type)) {
+ var range = new Range();
+ var re = new RegExp(token.type.replace(/\..*/, "\\."));
+ do {
+ token = iterator.stepBackward();
+ } while(token && re.test(token.type));
+
+ iterator.stepForward();
+ range.start.row = iterator.getCurrentTokenRow();
+ range.start.column = iterator.getCurrentTokenColumn() + 2;
+
+ iterator = new TokenIterator(this, row, column);
+
+ do {
+ token = iterator.stepForward();
+ } while(token && re.test(token.type));
+
+ token = iterator.stepBackward();
+
+ range.end.row = iterator.getCurrentTokenRow();
+ range.end.column = iterator.getCurrentTokenColumn() + token.value.length;
+ return range;
+ }
+ };
+
+ this.foldAll = function(startRow, endRow) {
+ var foldWidgets = this.foldWidgets;
+ endRow = endRow || foldWidgets.length;
+ for (var row = startRow || 0; row < endRow; row++) {
+ if (foldWidgets[row] == null)
+ foldWidgets[row] = this.getFoldWidget(row);
+ if (foldWidgets[row] != "start")
+ continue;
+
+ var range = this.getFoldWidgetRange(row);
+ // sometimes range can be incompatible with existing fold
+ // wouldn't it be better for addFold to return null istead of throwing?
+ if (range && range.end.row < endRow) try {
+ this.addFold("...", range);
+ } catch(e) {}
+ }
+ };
+
+ this.$foldStyles = {
+ "manual": 1,
+ "markbegin": 1,
+ "markbeginend": 1
+ };
+ this.$foldStyle = "markbegin";
+ this.setFoldStyle = function(style) {
+ if (!this.$foldStyles[style])
+ throw new Error("invalid fold style: " + style + "[" + Object.keys(this.$foldStyles).join(", ") + "]");
+
+ if (this.$foldStyle == style)
+ return;
+
+ this.$foldStyle = style;
+
+ if (style == "manual")
+ this.unfold();
+
+ // reset folding
+ var mode = this.$foldMode;
+ this.$setFolding(null);
+ this.$setFolding(mode);
+ };
+
+ // structured folding
+ this.$setFolding = function(foldMode) {
+ if (this.$foldMode == foldMode)
+ return;
+
+ this.$foldMode = foldMode;
+
+ this.removeListener('change', this.$updateFoldWidgets);
+ this._emit("changeAnnotation");
+
+ if (!foldMode || this.$foldStyle == "manual") {
+ this.foldWidgets = null;
+ return;
+ }
+
+ this.foldWidgets = [];
+ this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this, this.$foldStyle);
+ this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle);
+
+ this.$updateFoldWidgets = this.updateFoldWidgets.bind(this);
+ this.on('change', this.$updateFoldWidgets);
+
+ };
+
+ this.onFoldWidgetClick = function(row, e) {
+ var type = this.getFoldWidget(row);
+ var line = this.getLine(row);
+ var onlySubfolds = e.shiftKey;
+ var addSubfolds = onlySubfolds || e.ctrlKey || e.altKey || e.metaKey;
+ var fold;
+
+ if (type == "end")
+ fold = this.getFoldAt(row, 0, -1);
+ else
+ fold = this.getFoldAt(row, line.length, 1);
+
+ if (fold) {
+ if (addSubfolds)
+ this.removeFold(fold);
+ else
+ this.expandFold(fold);
+ return;
+ }
+
+ var range = this.getFoldWidgetRange(row);
+ if (range) {
+ // sometimes singleline folds can be missed by the code above
+ if (!range.isMultiLine()) {
+ fold = this.getFoldAt(range.start.row, range.start.column, 1);
+ if (fold && range.isEequal(fold.range)) {
+ this.removeFold(fold);
+ return;
+ }
+ }
+
+ if (!onlySubfolds)
+ this.addFold("...", range);
+
+ if (addSubfolds)
+ this.foldAll(range.start.row + 1, range.end.row);
+ } else {
+ if (addSubfolds)
+ this.foldAll(row + 1, this.getLength());
+ e.target.className += " invalid"
+ }
+ };
+
+ this.updateFoldWidgets = function(e) {
+ var delta = e.data;
+ var range = delta.range;
+ var firstRow = range.start.row;
+ var len = range.end.row - firstRow;
+
+ if (len === 0) {
+ this.foldWidgets[firstRow] = null;
+ } else if (delta.action == "removeText" || delta.action == "removeLines") {
+ this.foldWidgets.splice(firstRow, len + 1, null);
+ } else {
+ var args = Array(len + 1);
+ args.unshift(firstRow, 1);
+ this.foldWidgets.splice.apply(this.foldWidgets, args);
+ }
+ };
+
}
exports.Folding = Folding;
-});/* vim:ts=4:sts=4:sw=4:
+});
+/* vim:ts=4:sts=4:sw=4:
* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
@@ -12333,11 +10274,12 @@ exports.Folding = Folding;
* ***** END LICENSE BLOCK ***** */
define('ace/edit_session/fold_line', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
+"use strict";
-var Range = require("ace/range").Range;
+var Range = require("../range").Range;
/**
- * If the an array is passed in, the folds are expected to be sorted already.
+ * If an array is passed in, the folds are expected to be sorted already.
*/
function FoldLine(foldData, folds) {
this.foldData = foldData;
@@ -12605,6 +10547,7 @@ exports.FoldLine = FoldLine;
* ***** END LICENSE BLOCK ***** */
define('ace/edit_session/fold', ['require', 'exports', 'module' ], function(require, exports, module) {
+"use strict";
/**
* Simple fold-data struct.
@@ -12642,6 +10585,42 @@ var Fold = exports.Fold = function(range, placeholder) {
return fold;
};
+ this.addSubFold = function(fold) {
+ if (this.range.isEequal(fold))
+ return this;
+
+ if (!this.range.containsRange(fold))
+ throw "A fold can't intersect already existing fold" + fold.range + this.range;
+
+ var row = fold.range.start.row, column = fold.range.start.column;
+ for (var i = 0, cmp = -1; i < this.subFolds.length; i++) {
+ cmp = this.subFolds[i].range.compare(row, column);
+ if (cmp != 1)
+ break;
+ }
+ var afterStart = this.subFolds[i];
+
+ if (cmp == 0)
+ return afterStart.addSubFold(fold)
+
+ // cmp == -1
+ var row = fold.range.end.row, column = fold.range.end.column;
+ for (var j = i, cmp = -1; j < this.subFolds.length; j++) {
+ cmp = this.subFolds[j].range.compare(row, column);
+ if (cmp != 1)
+ break;
+ }
+ var afterEnd = this.subFolds[j];
+
+ if (cmp == 0)
+ throw "A fold can't intersect already existing fold" + fold.range + this.range;
+
+ var consumedFolds = this.subFolds.splice(i, j - i, fold)
+ fold.setFoldLine(this.foldLine);
+
+ return fold;
+ }
+
}).call(Fold.prototype);
});/* vim:ts=4:sts=4:sw=4:
@@ -12667,6 +10646,304 @@ var Fold = exports.Fold = function(range, placeholder) {
*
* Contributor(s):
* Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/token_iterator', ['require', 'exports', 'module' ], function(require, exports, module) {
+"use strict";
+
+var TokenIterator = function(session, initialRow, initialColumn) {
+ this.$session = session;
+ this.$row = initialRow;
+ this.$rowTokens = session.getTokens(initialRow, initialRow)[0].tokens;
+
+ var token = session.getTokenAt(initialRow, initialColumn);
+ this.$tokenIndex = token ? token.index : -1;
+};
+
+(function() {
+
+ this.stepBackward = function() {
+ this.$tokenIndex -= 1;
+
+ while (this.$tokenIndex < 0) {
+ this.$row -= 1;
+ if (this.$row < 0) {
+ this.$row = 0;
+ return null;
+ }
+
+ this.$rowTokens = this.$session.getTokens(this.$row, this.$row)[0].tokens;
+ this.$tokenIndex = this.$rowTokens.length - 1;
+ }
+
+ return this.$rowTokens[this.$tokenIndex];
+ };
+
+ this.stepForward = function() {
+ var rowCount = this.$session.getLength();
+ this.$tokenIndex += 1;
+
+ while (this.$tokenIndex >= this.$rowTokens.length) {
+ this.$row += 1;
+ if (this.$row >= rowCount) {
+ this.$row = rowCount - 1;
+ return null;
+ }
+
+ this.$rowTokens = this.$session.getTokens(this.$row, this.$row)[0].tokens;
+ this.$tokenIndex = 0;
+ }
+
+ return this.$rowTokens[this.$tokenIndex];
+ };
+
+ this.getCurrentToken = function () {
+ return this.$rowTokens[this.$tokenIndex];
+ };
+
+ this.getCurrentTokenRow = function () {
+ return this.$row;
+ };
+
+ this.getCurrentTokenColumn = function() {
+ var rowTokens = this.$rowTokens;
+ var tokenIndex = this.$tokenIndex;
+
+ // If a column was cached by EditSession.getTokenAt, then use it
+ var column = rowTokens[tokenIndex].start;
+ if (column !== undefined)
+ return column;
+
+ column = 0;
+ while (tokenIndex > 0) {
+ tokenIndex -= 1;
+ column += rowTokens[tokenIndex].value.length;
+ }
+
+ return column;
+ };
+
+}).call(TokenIterator.prototype);
+
+exports.TokenIterator = TokenIterator;
+});
+/* vim:ts=4:sts=4:sw=4:
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/edit_session/bracket_match', ['require', 'exports', 'module' , 'ace/token_iterator'], function(require, exports, module) {
+"use strict";
+
+var TokenIterator = require("../token_iterator").TokenIterator;
+
+function BracketMatch() {
+
+ this.findMatchingBracket = function(position) {
+ if (position.column == 0) return null;
+
+ var charBeforeCursor = this.getLine(position.row).charAt(position.column-1);
+ if (charBeforeCursor == "") return null;
+
+ var match = charBeforeCursor.match(/([\(\[\{])|([\)\]\}])/);
+ if (!match) {
+ return null;
+ }
+
+ if (match[1]) {
+ return this.$findClosingBracket(match[1], position);
+ } else {
+ return this.$findOpeningBracket(match[2], position);
+ }
+ };
+
+ this.$brackets = {
+ ")": "(",
+ "(": ")",
+ "]": "[",
+ "[": "]",
+ "{": "}",
+ "}": "{"
+ };
+
+ this.$findOpeningBracket = function(bracket, position) {
+ var openBracket = this.$brackets[bracket];
+ var depth = 1;
+
+ var iterator = new TokenIterator(this, position.row, position.column);
+ var token = iterator.getCurrentToken();
+ if (!token) return null;
+
+ // token.type contains a period-delimited list of token identifiers
+ // (e.g.: "constant.numeric" or "paren.lparen"). Create a pattern that
+ // matches any token containing the same identifiers or a subset. In
+ // addition, if token.type includes "rparen", then also match "lparen".
+ // So if type.token is "paren.rparen", then typeRe will match "lparen.paren".
+ var typeRe = new RegExp("(\\.?" +
+ token.type.replace(".", "|").replace("rparen", "lparen|rparen") + ")+");
+
+ // Start searching in token, just before the character at position.column
+ var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2;
+ var value = token.value;
+
+ while (true) {
+
+ while (valueIndex >= 0) {
+ var chr = value.charAt(valueIndex);
+ if (chr == openBracket) {
+ depth -= 1;
+ if (depth == 0) {
+ return {row: iterator.getCurrentTokenRow(),
+ column: valueIndex + iterator.getCurrentTokenColumn()};
+ }
+ }
+ else if (chr == bracket) {
+ depth += 1;
+ }
+ valueIndex -= 1;
+ }
+
+ // Scan backward through the document, looking for the next token
+ // whose type matches typeRe
+ do {
+ token = iterator.stepBackward();
+ } while (token && !typeRe.test(token.type));
+
+ if (token == null)
+ break;
+
+ value = token.value;
+ valueIndex = value.length - 1;
+ }
+
+ return null;
+ };
+
+ this.$findClosingBracket = function(bracket, position) {
+ var closingBracket = this.$brackets[bracket];
+ var depth = 1;
+
+ var iterator = new TokenIterator(this, position.row, position.column);
+ var token = iterator.getCurrentToken();
+ if (!token) return null;
+
+ // token.type contains a period-delimited list of token identifiers
+ // (e.g.: "constant.numeric" or "paren.lparen"). Create a pattern that
+ // matches any token containing the same identifiers or a subset. In
+ // addition, if token.type includes "lparen", then also match "rparen".
+ // So if type.token is "lparen.paren", then typeRe will match "paren.rparen".
+ var typeRe = new RegExp("(\\.?" +
+ token.type.replace(".", "|").replace("lparen", "lparen|rparen") + ")+");
+
+ // Start searching in token, after the character at position.column
+ var valueIndex = position.column - iterator.getCurrentTokenColumn();
+
+ while (true) {
+
+ var value = token.value;
+ var valueLength = value.length;
+ while (valueIndex < valueLength) {
+ var chr = value.charAt(valueIndex);
+ if (chr == closingBracket) {
+ depth -= 1;
+ if (depth == 0) {
+ return {row: iterator.getCurrentTokenRow(),
+ column: valueIndex + iterator.getCurrentTokenColumn()};
+ }
+ }
+ else if (chr == bracket) {
+ depth += 1;
+ }
+ valueIndex += 1;
+ }
+
+ // Scan forward through the document, looking for the next token
+ // whose type matches typeRe
+ do {
+ token = iterator.stepForward();
+ } while (token && !typeRe.test(token.type));
+
+ if (token == null)
+ break;
+
+ valueIndex = 0;
+ }
+
+ return null;
+ };
+}
+exports.BracketMatch = BracketMatch;
+
+});
+/* vim:ts=4:sts=4:sw=4:
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
* Mihai Sucan <mihai DOT sucan AT gmail DOT com>
*
* Alternatively, the contents of this file may be used under the terms of
@@ -12683,11 +10960,12 @@ var Fold = exports.Fold = function(range, placeholder) {
*
* ***** END LICENSE BLOCK ***** */
-define('ace/search', ['require', 'exports', 'module' , 'pilot/lang', 'pilot/oop', 'ace/range'], function(require, exports, module) {
+define('ace/search', ['require', 'exports', 'module' , 'ace/lib/lang', 'ace/lib/oop', 'ace/range'], function(require, exports, module) {
+"use strict";
-var lang = require("pilot/lang");
-var oop = require("pilot/oop");
-var Range = require("ace/range").Range;
+var lang = require("./lib/lang");
+var oop = require("./lib/oop");
+var Range = require("./range").Range;
var Search = function() {
this.$options = {
@@ -12735,20 +11013,28 @@ Search.SELECTION = 2;
};
this.findAll = function(session) {
- if (!this.$options.needle)
+ var options = this.$options;
+ if (!options.needle)
return [];
- if (this.$options.backwards) {
+ if (options.backwards) {
var iterator = this.$backwardMatchIterator(session);
} else {
iterator = this.$forwardMatchIterator(session);
}
+ var ignoreCursor = !options.start && options.wrap && options.scope == Search.ALL;
+ if (ignoreCursor)
+ options.start = {row: 0, column: 0};
+
var ranges = [];
iterator.forEach(function(range) {
ranges.push(range);
});
+ if (ignoreCursor)
+ options.start = null;
+
return ranges;
};
@@ -12859,8 +11145,8 @@ Search.SELECTION = 2;
this.$forwardLineIterator = function(session) {
var searchSelection = this.$options.scope == Search.SELECTION;
- var range = session.getSelection().getRange();
- var start = session.getSelection().getCursor();
+ var range = this.$options.range || session.getSelection().getRange();
+ var start = this.$options.start || range[searchSelection ? "start" : "end"];
var firstRow = searchSelection ? range.start.row : 0;
var firstColumn = searchSelection ? range.start.column : 0;
@@ -12921,8 +11207,8 @@ Search.SELECTION = 2;
this.$backwardLineIterator = function(session) {
var searchSelection = this.$options.scope == Search.SELECTION;
- var range = session.getSelection().getRange();
- var start = searchSelection ? range.end : range.start;
+ var range = this.$options.range || session.getSelection().getRange();
+ var start = this.$options.start || range[searchSelection ? "end" : "start"];
var firstRow = searchSelection ? range.start.row : 0;
var firstColumn = searchSelection ? range.start.column : 0;
@@ -12978,6 +11264,206 @@ Search.SELECTION = 2;
exports.Search = Search;
});
+define('ace/commands/command_manager', ['require', 'exports', 'module' , 'ace/lib/keys'], function(require, exports, module) {
+"use strict";
+
+var keyUtil = require("../lib/keys");
+
+var CommandManager = function(platform, commands) {
+ if (typeof platform !== "string")
+ throw new TypeError("'platform' argument must be either 'mac' or 'win'");
+
+ this.platform = platform;
+ this.commands = {};
+ this.commmandKeyBinding = {};
+
+ if (commands)
+ commands.forEach(this.addCommand, this);
+};
+
+(function() {
+
+ this.addCommand = function(command) {
+ if (this.commands[command.name])
+ this.removeCommand(command);
+
+ this.commands[command.name] = command;
+
+ if (command.bindKey) {
+ this._buildKeyHash(command);
+ }
+ };
+
+ this.removeCommand = function(command) {
+ var name = (typeof command === 'string' ? command : command.name);
+ command = this.commands[name];
+ delete this.commands[name];
+
+ // exaustive search is brute force but since removeCommand is
+ // not a performance critical operation this should be OK
+ var ckb = this.commmandKeyBinding;
+ for (var hashId in ckb) {
+ for (var key in ckb[hashId]) {
+ if (ckb[hashId][key] == command)
+ delete ckb[hashId][key];
+ }
+ }
+ };
+
+ this.addCommands = function(commands) {
+ Object.keys(commands).forEach(function(name) {
+ var command = commands[name];
+ if (typeof command === "string")
+ return this.bindKey(command, name);
+
+ if (typeof command === "function")
+ command = { exec: command };
+
+ if (!command.name)
+ command.name = name;
+
+ this.addCommand(command);
+ }, this);
+ };
+
+ this.removeCommands = function(commands) {
+ Object.keys(commands).forEach(function(name) {
+ this.removeCommand(commands[name]);
+ }, this);
+ };
+
+ this.bindKey = function(key, command) {
+ if(!key)
+ return;
+
+ var ckb = this.commmandKeyBinding;
+ key.split("|").forEach(function(keyPart) {
+ var binding = parseKeys(keyPart, command);
+ var hashId = binding.hashId;
+ (ckb[hashId] || (ckb[hashId] = {}))[binding.key] = command;
+ });
+ };
+
+ this.bindKeys = function(keyList) {
+ Object.keys(keyList).forEach(function(key) {
+ this.bindKey(key, keyList[key]);
+ }, this);
+ };
+
+ this._buildKeyHash = function(command) {
+ var binding = command.bindKey;
+ if (!binding)
+ return;
+
+ var key = typeof binding == "string" ? binding: binding[this.platform];
+ this.bindKey(key, command);
+ }
+
+ function parseKeys(keys, val, ret) {
+ var key;
+ var hashId = 0;
+ var parts = splitSafe(keys);
+
+ for (var i=0, l = parts.length; i < l; i++) {
+ if (keyUtil.KEY_MODS[parts[i]])
+ hashId = hashId | keyUtil.KEY_MODS[parts[i]];
+ else
+ key = parts[i] || "-"; //when empty, the splitSafe removed a '-'
+ }
+
+ return {
+ key: key,
+ hashId: hashId
+ }
+ }
+
+ function splitSafe(s, separator) {
+ return (s.toLowerCase()
+ .trim()
+ .split(new RegExp("[\\s ]*\\-[\\s ]*", "g"), 999));
+ }
+
+ this.findKeyCommand = function findKeyCommand(hashId, textOrKey) {
+ // Convert keyCode to the string representation.
+ if (typeof textOrKey == "number") {
+ textOrKey = keyUtil.keyCodeToString(textOrKey);
+ }
+
+ var ckbr = this.commmandKeyBinding;
+ return ckbr[hashId] && ckbr[hashId][textOrKey.toLowerCase()];
+ }
+
+ this.exec = function(command, editor, args) {
+ if (typeof command === 'string')
+ command = this.commands[command];
+
+ if (!command)
+ return false;
+
+ if (editor && editor.$readOnly && !command.readOnly)
+ return false;
+
+ command.exec(editor, args || {});
+ return true;
+ };
+
+ this.toggleRecording = function() {
+ if (this.$inReplay)
+ return;
+ if (this.recording) {
+ this.macro.pop();
+ this.exec = this.normal_exec;
+
+ if (!this.macro.length)
+ this.macro = this.oldMacro;
+
+ return this.recording = false;
+ }
+ this.oldMacro = this.macro;
+ this.macro = [];
+ this.normal_exec = this.exec;
+ this.exec = function(command, editor, args) {
+ this.macro.push([command, args]);
+ return this.normal_exec(command, editor, args);
+ };
+ return this.recording = true;
+ };
+
+ this.replay = function(editor) {
+ if (this.$inReplay || !this.macro)
+ return;
+
+ if (this.recording)
+ return this.toggleRecording();
+
+ try {
+ this.$inReplay = true;
+ this.macro.forEach(function(x) {
+ if (typeof x == "string")
+ this.exec(x, editor);
+ else
+ this.exec(x[0], editor, x[1]);
+ }, this)
+ } finally {
+ this.$inReplay = false;
+ }
+ };
+
+ this.trimMacro = function(m) {
+ return m.map(function(x){
+ if (typeof x[0] != "string")
+ x[0] = x[0].name;
+ if (!x[1])
+ x = x[0];
+ return x
+ })
+ }
+
+}).call(CommandManager.prototype);
+
+exports.CommandManager = CommandManager;
+
+});
/* vim:ts=4:sts=4:sw=4:
* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
@@ -13018,6 +11504,7 @@ exports.Search = Search;
* ***** END LICENSE BLOCK ***** */
define('ace/undomanager', ['require', 'exports', 'module' ], function(require, exports, module) {
+"use strict";
var UndoManager = function() {
this.reset();
@@ -13111,27 +11598,34 @@ exports.UndoManager = UndoManager;
*
* ***** END LICENSE BLOCK ***** */
-define('ace/virtual_renderer', ['require', 'exports', 'module' , 'pilot/oop', 'pilot/dom', 'pilot/event', 'pilot/useragent', 'ace/layer/gutter', 'ace/layer/marker', 'ace/layer/text', 'ace/layer/cursor', 'ace/scrollbar', 'ace/renderloop', 'pilot/event_emitter', 'text/ace/css/editor.css'], function(require, exports, module) {
+define('ace/virtual_renderer', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/dom', 'ace/lib/event', 'ace/lib/useragent', 'ace/layer/gutter', 'ace/layer/marker', 'ace/layer/text', 'ace/layer/cursor', 'ace/scrollbar', 'ace/renderloop', 'ace/lib/event_emitter', 'text!ace/css/editor.css'], function(require, exports, module) {
+"use strict";
-var oop = require("pilot/oop");
-var dom = require("pilot/dom");
-var event = require("pilot/event");
-var useragent = require("pilot/useragent");
-var GutterLayer = require("ace/layer/gutter").Gutter;
-var MarkerLayer = require("ace/layer/marker").Marker;
-var TextLayer = require("ace/layer/text").Text;
-var CursorLayer = require("ace/layer/cursor").Cursor;
-var ScrollBar = require("ace/scrollbar").ScrollBar;
-var RenderLoop = require("ace/renderloop").RenderLoop;
-var EventEmitter = require("pilot/event_emitter").EventEmitter;
-var editorCss = require("text/ace/css/editor.css");
+var oop = require("./lib/oop");
+var dom = require("./lib/dom");
+var event = require("./lib/event");
+var useragent = require("./lib/useragent");
+var GutterLayer = require("./layer/gutter").Gutter;
+var MarkerLayer = require("./layer/marker").Marker;
+var TextLayer = require("./layer/text").Text;
+var CursorLayer = require("./layer/cursor").Cursor;
+var ScrollBar = require("./scrollbar").ScrollBar;
+var RenderLoop = require("./renderloop").RenderLoop;
+var EventEmitter = require("./lib/event_emitter").EventEmitter;
+var editorCss = require("text!./css/editor.css");
-// import CSS once
-dom.importCssString(editorCss);
+dom.importCssString(editorCss, "ace_editor");
var VirtualRenderer = function(container, theme) {
+ var _self = this;
+
this.container = container;
- dom.addCssClass(this.container, "ace_editor");
+
+ // TODO: this breaks rendering in Cloud9 with multiple ace instances
+// // Imports CSS once per DOM document ('ace_editor' serves as an identifier).
+// dom.importCssString(editorCss, "ace_editor", container.ownerDocument);
+
+ dom.addCssClass(container, "ace_editor");
this.setTheme(theme);
@@ -13148,6 +11642,8 @@ var VirtualRenderer = function(container, theme) {
this.scroller.appendChild(this.content);
this.$gutterLayer = new GutterLayer(this.$gutter);
+ this.$gutterLayer.on("changeGutterWidth", this.onResize.bind(this, true));
+
this.$markerBack = new MarkerLayer(this.content);
var textLayer = this.$textLayer = new TextLayer(this.content);
@@ -13166,16 +11662,22 @@ var VirtualRenderer = function(container, theme) {
this.$horizScrollAlwaysVisible = true;
this.scrollBar = new ScrollBar(container);
- this.scrollBar.addEventListener("scroll", this.onScroll.bind(this));
+ this.scrollBar.addEventListener("scroll", function(e) {
+ _self.session.setScrollTop(e.data);
+ });
this.scrollTop = 0;
+ this.scrollLeft = 0;
+
+ event.addListener(this.scroller, "scroll", function() {
+ _self.session.setScrollLeft(_self.scroller.scrollLeft);
+ });
this.cursorPos = {
row : 0,
column : 0
};
- var _self = this;
this.$textLayer.addEventListener("changeCharaterSize", function() {
_self.characterWidth = textLayer.getCharacterWidth();
_self.lineHeight = textLayer.getLineHeight();
@@ -13184,8 +11686,6 @@ var VirtualRenderer = function(container, theme) {
_self.$loop.schedule(_self.CHANGE_FULL);
});
- event.addListener(this.$gutter, "click", this.$onGutterClick.bind(this));
- event.addListener(this.$gutter, "dblclick", this.$onGutterClick.bind(this));
this.$size = {
width: 0,
@@ -13208,7 +11708,10 @@ var VirtualRenderer = function(container, theme) {
height : 1
};
- this.$loop = new RenderLoop(this.$renderChanges.bind(this));
+ this.$loop = new RenderLoop(
+ this.$renderChanges.bind(this),
+ this.container.ownerDocument.defaultView
+ );
this.$loop.schedule(this.CHANGE_FULL);
this.setPadding(4);
@@ -13299,7 +11802,7 @@ var VirtualRenderer = function(container, theme) {
this.scrollBar.setHeight(size.scrollerHeight);
if (this.session) {
- this.scrollToY(this.getScrollTop());
+ this.session.setScrollTop(this.getScrollTop());
changes = changes | this.CHANGE_FULL;
}
}
@@ -13310,7 +11813,7 @@ var VirtualRenderer = function(container, theme) {
var gutterWidth = this.showGutter ? this.$gutter.offsetWidth : 0;
this.scroller.style.left = gutterWidth + "px";
- size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBar.getWidth())
+ size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBar.getWidth());
this.scroller.style.width = size.scrollerWidth + "px";
if (this.session.getUseWrapMode() && this.adjustWrapLimit() || force)
@@ -13320,22 +11823,12 @@ var VirtualRenderer = function(container, theme) {
this.$loop.schedule(changes);
};
- this.adjustWrapLimit = function(){
+ this.adjustWrapLimit = function() {
var availableWidth = this.$size.scrollerWidth - this.$padding * 2;
- var limit = Math.floor(availableWidth / this.characterWidth) - 1;
+ var limit = Math.floor(availableWidth / this.characterWidth);
return this.session.adjustWrapLimit(limit);
};
- this.$onGutterClick = function(e) {
- var pageX = event.getDocumentX(e);
- var pageY = event.getDocumentY(e);
-
- this._dispatchEvent("gutter" + e.type, {
- row: this.screenToTextCoordinates(pageX, pageY).row,
- htmlEvent: e
- });
- };
-
this.setShowInvisibles = function(showInvisibles) {
if (this.$textLayer.setShowInvisibles(showInvisibles))
this.$loop.schedule(this.CHANGE_TEXT);
@@ -13393,7 +11886,7 @@ var VirtualRenderer = function(container, theme) {
}
var style = this.$printMarginEl.style;
- style.left = ((this.characterWidth * this.$printMarginColumn) + this.$padding * 2) + "px";
+ style.left = ((this.characterWidth * this.$printMarginColumn) + this.$padding) + "px";
style.visibility = this.$showPrintMargin ? "visible" : "hidden";
};
@@ -13411,8 +11904,12 @@ var VirtualRenderer = function(container, theme) {
this.moveTextAreaToCursor = function(textarea) {
// in IE the native cursor always shines through
+ // this persists in IE9
if (useragent.isIE)
return;
+
+ if (this.layerConfig.lastRow === 0)
+ return;
var pos = this.$cursorLayer.getPixelPosition();
if (!pos)
@@ -13421,7 +11918,7 @@ var VirtualRenderer = function(container, theme) {
var bounds = this.content.getBoundingClientRect();
var offset = this.layerConfig.offset;
- textarea.style.left = (bounds.left + pos.left + this.$padding) + "px";
+ textarea.style.left = (bounds.left + pos.left) + "px";
textarea.style.top = (bounds.top + pos.top - this.scrollTop + offset) + "px";
};
@@ -13465,10 +11962,6 @@ var VirtualRenderer = function(container, theme) {
}
};
- this.onScroll = function(e) {
- this.scrollToY(e.data);
- };
-
this.$updateScrollBar = function() {
this.scrollBar.setInnerHeight(this.layerConfig.maxHeight);
this.scrollBar.setScrollTop(this.scrollTop);
@@ -13552,7 +12045,6 @@ var VirtualRenderer = function(container, theme) {
var minHeight = this.$size.scrollerHeight + this.lineHeight;
var longestLine = this.$getLongestLine();
- var widthChanged = this.layerConfig.width != longestLine;
var horizScroll = this.$horizScrollAlwaysVisible || this.$size.scrollerWidth - longestLine < 0;
var horizScrollChanged = this.$horizScroll !== horizScroll;
@@ -13561,7 +12053,7 @@ var VirtualRenderer = function(container, theme) {
this.scroller.style.overflowX = horizScroll ? "scroll" : "hidden";
var maxHeight = this.session.getScreenLength() * this.lineHeight;
- this.scrollTop = Math.max(0, Math.min(this.scrollTop, maxHeight - this.$size.scrollerHeight));
+ this.session.setScrollTop(Math.max(0, Math.min(this.scrollTop, maxHeight - this.$size.scrollerHeight)));
var lineCount = Math.ceil(minHeight / this.lineHeight) - 1;
var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight));
@@ -13607,7 +12099,7 @@ var VirtualRenderer = function(container, theme) {
this.$gutterLayer.element.style.marginTop = (-offset) + "px";
this.content.style.marginTop = (-offset) + "px";
- this.content.style.width = longestLine + "px";
+ this.content.style.width = longestLine + 2 * this.$padding + "px";
this.content.style.height = minHeight + "px";
// scroller.scrollWidth was smaller than scrollLeft we needed
@@ -13649,11 +12141,11 @@ var VirtualRenderer = function(container, theme) {
};
this.$getLongestLine = function() {
- var charCount = this.session.getScreenWidth() + 1;
+ var charCount = this.session.getScreenWidth();
if (this.$textLayer.showInvisibles)
charCount += 1;
- return Math.max(this.$size.scrollerWidth, Math.round(charCount * this.characterWidth));
+ return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth));
};
this.updateFrontMarkers = function() {
@@ -13705,37 +12197,39 @@ var VirtualRenderer = function(container, theme) {
var pos = this.$cursorLayer.getPixelPosition();
- var left = pos.left + this.$padding;
+ var left = pos.left;
var top = pos.top;
if (this.scrollTop > top) {
- this.scrollToY(top);
+ this.session.setScrollTop(top);
}
if (this.scrollTop + this.$size.scrollerHeight < top + this.lineHeight) {
- this.scrollToY(top + this.lineHeight - this.$size.scrollerHeight);
+ this.session.setScrollTop(top + this.lineHeight - this.$size.scrollerHeight);
}
- var scrollLeft = this.scroller.scrollLeft;
+ var scrollLeft = this.scrollLeft;
if (scrollLeft > left) {
+ if (left < this.$padding + 2 * this.layerConfig.characterWidth)
+ left = 0;
this.scrollToX(left);
}
if (scrollLeft + this.$size.scrollerWidth < left + this.characterWidth) {
- if (left > this.layerConfig.width)
- this.$desiredScrollLeft = left + 2 * this.characterWidth;
+ if (left > this.layerConfig.width + 2 * this.$padding)
+ this.$desiredScrollLeft = left;
else
this.scrollToX(Math.round(left + this.characterWidth - this.$size.scrollerWidth));
}
};
this.getScrollTop = function() {
- return this.scrollTop;
+ return this.session.getScrollTop();
};
this.getScrollLeft = function() {
- return this.scroller.scrollLeft;
+ return this.session.getScrollTop();
};
this.getScrollTopRow = function() {
@@ -13747,7 +12241,7 @@ var VirtualRenderer = function(container, theme) {
};
this.scrollToRow = function(row) {
- this.scrollToY(row * this.lineHeight);
+ this.session.setScrollTop(row * this.lineHeight);
};
this.scrollToLine = function(line, center) {
@@ -13760,13 +12254,12 @@ var VirtualRenderer = function(container, theme) {
if (center) {
offset -= this.$size.scrollerHeight / 2;
}
- this.scrollToY(offset);
+ this.session.setScrollTop(offset);
};
this.scrollToY = function(scrollTop) {
// after calling scrollBar.setScrollTop
// scrollbar sends us event with same scrollTop. ignore it
- scrollTop = Math.max(0, scrollTop);
if (this.scrollTop !== scrollTop) {
this.$loop.schedule(this.CHANGE_SCROLL);
this.scrollTop = scrollTop;
@@ -13778,20 +12271,33 @@ var VirtualRenderer = function(container, theme) {
scrollLeft = 0;
this.scroller.scrollLeft = scrollLeft;
+ scrollLeft = this.scroller.scrollLeft;
};
this.scrollBy = function(deltaX, deltaY) {
- deltaY && this.scrollToY(this.scrollTop + deltaY);
- deltaX && this.scrollToX(this.scroller.scrollLeft + deltaX);
+ deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY);
+ deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX);
+ };
+
+ this.isScrollableBy = function(deltaX, deltaY) {
+ if (deltaY < 0 && this.session.getScrollTop() > 0)
+ return true;
+ if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight < this.layerConfig.maxHeight)
+ return true;
+ // todo: handle horizontal scrolling
};
this.screenToTextCoordinates = function(pageX, pageY) {
var canvasPos = this.scroller.getBoundingClientRect();
- var col = Math.round((pageX + this.scroller.scrollLeft - canvasPos.left - this.$padding - dom.getPageScrollLeft())
- / this.characterWidth);
- var row = Math.floor((pageY + this.scrollTop - canvasPos.top - dom.getPageScrollTop())
- / this.lineHeight);
+ var col = Math.round(
+ (pageX + this.scrollLeft - canvasPos.left - this.$padding - dom.getPageScrollLeft())
+ / this.characterWidth
+ );
+ var row = Math.floor(
+ (pageY + this.scrollTop - canvasPos.top - dom.getPageScrollTop())
+ / this.lineHeight
+ );
return this.session.screenToDocumentPosition(row, Math.max(col, 0));
};
@@ -13804,8 +12310,8 @@ var VirtualRenderer = function(container, theme) {
var y = pos.row * this.lineHeight;
return {
- pageX: canvasPos.left + x - this.getScrollLeft(),
- pageY: canvasPos.top + y - this.getScrollTop()
+ pageX: canvasPos.left + x - this.scrollLeft,
+ pageY: canvasPos.top + y - this.scrollTop
};
};
@@ -13864,6 +12370,12 @@ var VirtualRenderer = function(container, theme) {
}
function afterLoad(theme) {
+ dom.importCssString(
+ theme.cssText,
+ theme.cssClass,
+ _self.container.ownerDocument
+ );
+
if (_self.$theme)
dom.removeCssClass(_self.container, _self.$theme);
@@ -13872,6 +12384,11 @@ var VirtualRenderer = function(container, theme) {
if (_self.$theme)
dom.addCssClass(_self.container, _self.$theme);
+ if (theme && theme.isDark)
+ dom.addCssClass(_self.container, "ace_dark");
+ else
+ dom.removeCssClass(_self.container, "ace_dark");
+
// force re-measure of the gutter width
if (_self.$size) {
_self.$size.width = 0;
@@ -13944,14 +12461,20 @@ exports.VirtualRenderer = VirtualRenderer;
*
* ***** END LICENSE BLOCK ***** */
-define('ace/layer/gutter', ['require', 'exports', 'module' , 'pilot/dom'], function(require, exports, module) {
+define('ace/layer/gutter', ['require', 'exports', 'module' , 'ace/lib/dom', 'ace/lib/oop', 'ace/lib/event_emitter'], function(require, exports, module) {
+"use strict";
-var dom = require("pilot/dom");
+var dom = require("../lib/dom");
+var oop = require("../lib/oop");
+var EventEmitter = require("../lib/event_emitter").EventEmitter;
var Gutter = function(parentEl) {
this.element = dom.createElement("div");
this.element.className = "ace_layer ace_gutter-layer";
parentEl.appendChild(this.element);
+ this.setShowFoldWidgets(this.$showFoldWidgets);
+
+ this.gutterWidth = 0;
this.$breakpoints = [];
this.$annotations = [];
@@ -13960,6 +12483,8 @@ var Gutter = function(parentEl) {
(function() {
+ oop.implement(this, EventEmitter);
+
this.setSession = function(session) {
this.session = session;
};
@@ -13968,7 +12493,7 @@ var Gutter = function(parentEl) {
if (!this.$decorations[row])
this.$decorations[row] = "";
this.$decorations[row] += " ace_" + className;
- }
+ };
this.removeGutterDecoration = function(row, className){
this.$decorations[row] = this.$decorations[row].replace(" ace_" + className, "");
@@ -13991,7 +12516,9 @@ var Gutter = function(parentEl) {
};
for (var i=0; i<rowAnnotations.length; i++) {
var annotation = rowAnnotations[i];
- rowInfo.text.push(annotation.text.replace(/"/g, "&quot;").replace(/'/g, "&#8217;").replace(/</, "&lt;"));
+ var annoText = annotation.text.replace(/"/g, "&quot;").replace(/'/g, "&#8217;").replace(/</, "&lt;");
+ if (rowInfo.text.indexOf(annoText) === -1)
+ rowInfo.text.push(annoText);
var type = annotation.type;
if (type == "error")
rowInfo.className = "ace_error";
@@ -14010,13 +12537,14 @@ var Gutter = function(parentEl) {
var html = [];
var i = config.firstRow;
var lastRow = config.lastRow;
- var fold = this.session.getNextFold(i);
+ var fold = this.session.getNextFoldLine(i);
var foldStart = fold ? fold.start.row : Infinity;
+ var foldWidgets = this.$showFoldWidgets && this.session.foldWidgets;
while (true) {
if(i > foldStart) {
i = fold.end.row + 1;
- fold = this.session.getNextFold(i);
+ fold = this.session.getNextFoldLine(i, fold);
foldStart = fold ?fold.start.row :Infinity;
}
if(i > lastRow)
@@ -14030,9 +12558,22 @@ var Gutter = function(parentEl) {
"' title='", annotation.text.join("\n"),
"' style='height:", config.lineHeight, "px;'>", (i+1));
+ if (foldWidgets) {
+ var c = foldWidgets[i];
+ // check if cached value is invalidated and we need to recompute
+ if (c == null)
+ c = foldWidgets[i] = this.session.getFoldWidget(i);
+ if (c)
+ html.push(
+ "<span class='ace_fold-widget ", c,
+ c == "start" && i == foldStart && i < fold.end.row ? " closed" : " open",
+ "'></span>"
+ );
+ }
+
var wrappedRowLength = this.session.getRowLength(i) - 1;
while (wrappedRowLength--) {
- html.push("</div><div class='ace_gutter-cell' style='height:", config.lineHeight, "px'>&brvbar;</div>");
+ html.push("</div><div class='ace_gutter-cell' style='height:", config.lineHeight, "px'>\xA6");
}
html.push("</div>");
@@ -14041,6 +12582,26 @@ var Gutter = function(parentEl) {
}
this.element = dom.setInnerHtml(this.element, html.join(""));
this.element.style.height = config.minHeight + "px";
+
+ var gutterWidth = this.element.offsetWidth;
+ if (gutterWidth !== this.gutterWidth) {
+ this.gutterWidth = gutterWidth;
+ this._emit("changeGutterWidth", gutterWidth);
+ }
+ };
+
+ this.$showFoldWidgets = true;
+ this.setShowFoldWidgets = function(show) {
+ if (show)
+ dom.addCssClass(this.element, "ace_folding-enabled");
+ else
+ dom.removeCssClass(this.element, "ace_folding-enabled");
+
+ this.$showFoldWidgets = show;
+ };
+
+ this.getShowFoldWidgets = function() {
+ return this.$showFoldWidgets;
};
}).call(Gutter.prototype);
@@ -14087,10 +12648,11 @@ exports.Gutter = Gutter;
*
* ***** END LICENSE BLOCK ***** */
-define('ace/layer/marker', ['require', 'exports', 'module' , 'ace/range', 'pilot/dom'], function(require, exports, module) {
+define('ace/layer/marker', ['require', 'exports', 'module' , 'ace/range', 'ace/lib/dom'], function(require, exports, module) {
+"use strict";
-var Range = require("ace/range").Range;
-var dom = require("pilot/dom");
+var Range = require("../range").Range;
+var dom = require("../lib/dom");
var Marker = function(parentEl) {
this.element = dom.createElement("div");
@@ -14190,10 +12752,11 @@ var Marker = function(parentEl) {
* Draws a multi line marker, where lines span the full width
*/
this.drawMultiLineMarker = function(stringBuilder, range, clazz, layerConfig, type) {
- // from selection start to the end of the line
var padding = type === "background" ? 0 : this.$padding;
+ var layerWidth = layerConfig.width + 2 * this.$padding - padding;
+ // from selection start to the end of the line
var height = layerConfig.lineHeight;
- var width = Math.round(layerConfig.width - (range.start.column * layerConfig.characterWidth));
+ var width = Math.round(layerWidth - (range.start.column * layerConfig.characterWidth));
var top = this.$getTop(range.start.row, layerConfig);
var left = Math.round(
padding + range.start.column * layerConfig.characterWidth
@@ -14224,12 +12787,11 @@ var Marker = function(parentEl) {
if (height < 0)
return;
top = this.$getTop(range.start.row + 1, layerConfig);
- width = layerConfig.width;
stringBuilder.push(
"<div class='", clazz, "' style='",
"height:", height, "px;",
- "width:", width, "px;",
+ "width:", layerWidth, "px;",
"top:", top, "px;",
"left:", padding, "px;'></div>"
);
@@ -14291,6 +12853,7 @@ exports.Marker = Marker;
* Fabian Jakobs <fabian AT ajax DOT org>
* Julian Viereck <julian DOT viereck AT gmail DOT com>
* Mihai Sucan <mihai.sucan@gmail.com>
+ * Irakli Gozalishvili <rfobic@gmail.com> (http://jeditoolkit.com)
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
@@ -14306,18 +12869,18 @@ exports.Marker = Marker;
*
* ***** END LICENSE BLOCK ***** */
-define('ace/layer/text', ['require', 'exports', 'module' , 'pilot/oop', 'pilot/dom', 'pilot/lang', 'pilot/useragent', 'pilot/event_emitter'], function(require, exports, module) {
+define('ace/layer/text', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/dom', 'ace/lib/lang', 'ace/lib/useragent', 'ace/lib/event_emitter'], function(require, exports, module) {
+"use strict";
-var oop = require("pilot/oop");
-var dom = require("pilot/dom");
-var lang = require("pilot/lang");
-var useragent = require("pilot/useragent");
-var EventEmitter = require("pilot/event_emitter").EventEmitter;
+var oop = require("../lib/oop");
+var dom = require("../lib/dom");
+var lang = require("../lib/lang");
+var useragent = require("../lib/useragent");
+var EventEmitter = require("../lib/event_emitter").EventEmitter;
var Text = function(parentEl) {
this.element = dom.createElement("div");
this.element.className = "ace_layer ace_text-layer";
- this.element.style.width = "auto";
parentEl.appendChild(this.element);
this.$characterSize = this.$measureSizes() || {width: 0, height: 0};
@@ -14328,10 +12891,10 @@ var Text = function(parentEl) {
oop.implement(this, EventEmitter);
- this.EOF_CHAR = "&para;";
- this.EOL_CHAR = "&not;";
- this.TAB_CHAR = "&rarr;";
- this.SPACE_CHAR = "&middot;";
+ this.EOF_CHAR = "\xB6"; //"&para;";
+ this.EOL_CHAR = "\xAC"; //"&not;";
+ this.TAB_CHAR = "\u2192"; //"&rarr;";
+ this.SPACE_CHAR = "\xB7"; //"&middot;";
this.$padding = 0;
this.setPadding = function(padding) {
@@ -14351,7 +12914,7 @@ var Text = function(parentEl) {
var size = this.$measureSizes();
if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) {
this.$characterSize = size;
- this._dispatchEvent("changeCharaterSize", {data: size});
+ this._emit("changeCharaterSize", {data: size});
}
};
@@ -14389,8 +12952,8 @@ var Text = function(parentEl) {
// Note: characterWidth can be a float!
measureNode.innerHTML = lang.stringRepeat("Xy", n);
- if (document.body) {
- document.body.appendChild(measureNode);
+ if (this.element.ownerDocument.body) {
+ this.element.ownerDocument.body.appendChild(measureNode);
} else {
var container = this.element.parentNode;
while (!dom.hasCssClass(container, "ace_editor"))
@@ -14468,6 +13031,7 @@ var Text = function(parentEl) {
var foldLine = this.session.getFoldLine(row);
if (foldLine) {
if (foldLine.containsRow(first)) {
+ first = foldLine.start.row;
break;
} else {
row = foldLine.end.row;
@@ -14483,7 +13047,7 @@ var Text = function(parentEl) {
var html = [];
var tokens = this.session.getTokens(i, i);
- this.$renderLine(html, i, tokens[0].tokens, true);
+ this.$renderLine(html, i, tokens[0].tokens, !this.$useLineGroups());
lineElement = dom.setInnerHtml(lineElement, html.join(""));
i = this.session.getRowFoldEnd(i);
@@ -14525,18 +13089,18 @@ var Text = function(parentEl) {
};
this.$renderLinesFragment = function(config, firstRow, lastRow) {
- var fragment = document.createDocumentFragment(),
+ var fragment = this.element.ownerDocument.createDocumentFragment(),
row = firstRow,
- fold = this.session.getNextFold(row),
+ fold = this.session.getNextFoldLine(row),
foldStart = fold ?fold.start.row :Infinity;
while (true) {
- if(row > foldStart) {
+ if (row > foldStart) {
row = fold.end.row+1;
- fold = this.session.getNextFold(row);
+ fold = this.session.getNextFoldLine(row, fold);
foldStart = fold ?fold.start.row :Infinity;
}
- if(row > lastRow)
+ if (row > lastRow)
break;
var container = dom.createElement("div");
@@ -14552,9 +13116,14 @@ var Text = function(parentEl) {
// don't use setInnerHtml since we are working with an empty DIV
container.innerHTML = html.join("");
- var lines = container.childNodes
- while(lines.length)
- fragment.appendChild(lines[0]);
+ if (this.$useLineGroups()) {
+ container.className = 'ace_line_group';
+ fragment.appendChild(container);
+ } else {
+ var lines = container.childNodes
+ while(lines.length)
+ fragment.appendChild(lines[0]);
+ }
row++;
}
@@ -14569,18 +13138,21 @@ var Text = function(parentEl) {
var firstRow = config.firstRow, lastRow = config.lastRow;
var row = firstRow,
- fold = this.session.getNextFold(row),
+ fold = this.session.getNextFoldLine(row),
foldStart = fold ?fold.start.row :Infinity;
while (true) {
- if(row > foldStart) {
+ if (row > foldStart) {
row = fold.end.row+1;
- fold = this.session.getNextFold(row);
+ fold = this.session.getNextFoldLine(row, fold);
foldStart = fold ?fold.start.row :Infinity;
}
- if(row > lastRow)
+ if (row > lastRow)
break;
+ if (this.$useLineGroups())
+ html.push("<div class='ace_line_group'>")
+
// Get the tokens per line as there might be some lines in between
// beeing folded.
// OPTIMIZE: If there is a long block of unfolded lines, just make
@@ -14589,6 +13161,9 @@ var Text = function(parentEl) {
if (tokens.length == 1)
this.$renderLine(html, row, tokens[0].tokens, false);
+ if (this.$useLineGroups())
+ html.push("</div>"); // end the line group
+
row++;
}
this.element = dom.setInnerHtml(this.element, html.join(""));
@@ -14617,6 +13192,14 @@ var Text = function(parentEl) {
return "&amp;";
} else if (c == "<") {
return "&lt;";
+ } else if (c == "\u3000") {
+ // U+3000 is both invisible AND full-width, so must be handled uniquely
+ var classToUse = self.showInvisibles ? "ace_cjk ace_invisible" : "ace_cjk";
+ var space = self.showInvisibles ? self.SPACE_CHAR : "";
+ screenColumn += 1;
+ return "<span class='" + classToUse + "' style='width:" +
+ (self.config.characterWidth * 2) +
+ "px'>" + space + "</span>";
} else if (c.match(/[\v\f \u00a0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000]/)) {
if (self.showInvisibles) {
var space = new Array(c.length+1).join(self.SPACE_CHAR);
@@ -14636,7 +13219,10 @@ var Text = function(parentEl) {
if (!this.$textToken[token.type]) {
var classes = "ace_" + token.type.replace(/\./g, " ace_");
- stringBuilder.push("<span class='", classes, "'>", output, "</span>");
+ var style = "";
+ if (token.type == "fold")
+ style = " style='width:" + (token.value.length * this.config.characterWidth) + "px;' ";
+ stringBuilder.push("<span class='", classes, "'", style, ">", output, "</span>");
}
else {
stringBuilder.push(output);
@@ -14648,7 +13234,6 @@ var Text = function(parentEl) {
var chars = 0;
var split = 0;
var splitChars;
- var characterWidth = this.config.characterWidth;
var screenColumn = 0;
var self = this;
@@ -14710,7 +13295,8 @@ var Text = function(parentEl) {
else
stringBuilder.push("<span class='ace_invisible'>" + this.EOF_CHAR + "</span>");
}
- stringBuilder.push("</div>");
+ if (!onlyContents)
+ stringBuilder.push("</div>");
};
this.$renderLine = function(stringBuilder, row, tokens, onlyContents) {
@@ -14789,6 +13375,15 @@ var Text = function(parentEl) {
var splits = this.session.$useWrapMode?this.session.$wrapData[row]:null;
this.$renderLineCore(stringBuilder, row, renderTokens, splits, onlyContents);
};
+
+ this.$useLineGroups = function() {
+ // For the updateLines function to work correctly, it's important that the
+ // child nodes of this.element correspond on a 1-to-1 basis to rows in the
+ // document (as distinct from lines on the screen). For sessions that are
+ // wrapped, this means we need to add a layer to the node hierarchy (tagged
+ // with the class name ace_line_group).
+ return this.session.getUseWrapMode();
+ };
this.destroy = function() {
clearInterval(this.$pollSizeChangesTimer);
@@ -14841,9 +13436,10 @@ exports.Text = Text;
*
* ***** END LICENSE BLOCK ***** */
-define('ace/layer/cursor', ['require', 'exports', 'module' , 'pilot/dom'], function(require, exports, module) {
+define('ace/layer/cursor', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) {
+"use strict";
-var dom = require("pilot/dom");
+var dom = require("../lib/dom");
var Cursor = function(parentEl) {
this.element = dom.createElement("div");
@@ -14970,6 +13566,7 @@ exports.Cursor = Cursor;
*
* Contributor(s):
* Fabian Jakobs <fabian AT ajax DOT org>
+ * Irakli Gozalishvili <rfobic@gmail.com> (http://jeditoolkit.com)
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
@@ -14985,12 +13582,13 @@ exports.Cursor = Cursor;
*
* ***** END LICENSE BLOCK ***** */
-define('ace/scrollbar', ['require', 'exports', 'module' , 'pilot/oop', 'pilot/dom', 'pilot/event', 'pilot/event_emitter'], function(require, exports, module) {
+define('ace/scrollbar', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/dom', 'ace/lib/event', 'ace/lib/event_emitter'], function(require, exports, module) {
+"use strict";
-var oop = require("pilot/oop");
-var dom = require("pilot/dom");
-var event = require("pilot/event");
-var EventEmitter = require("pilot/event_emitter").EventEmitter;
+var oop = require("./lib/oop");
+var dom = require("./lib/dom");
+var event = require("./lib/event");
+var EventEmitter = require("./lib/event_emitter").EventEmitter;
var ScrollBar = function(parent) {
this.element = dom.createElement("div");
@@ -15004,8 +13602,10 @@ var ScrollBar = function(parent) {
// in OSX lion the scrollbars appear to have no width. In this case resize
// the to show the scrollbar but still pretend that the scrollbar has a width
// of 0px
- this.width = dom.scrollbarWidth();
- this.element.style.width = (this.width || 15) + "px";
+ // in Firefox 6+ scrollbar is hidden if element has the same width as scrollbar
+ // make element a little bit wider to retain scrollbar when page is zoomed
+ this.width = dom.scrollbarWidth(parent.ownerDocument);
+ this.element.style.width = (this.width || 15) + 5 + "px";
event.addListener(this.element, "scroll", this.onScroll.bind(this));
};
@@ -15014,7 +13614,7 @@ var ScrollBar = function(parent) {
oop.implement(this, EventEmitter);
this.onScroll = function() {
- this._dispatchEvent("scroll", {data: this.element.scrollTop});
+ this._emit("scroll", {data: this.element.scrollTop});
};
this.getWidth = function() {
@@ -15059,6 +13659,7 @@ exports.ScrollBar = ScrollBar;
*
* Contributor(s):
* Fabian Jakobs <fabian AT ajax DOT org>
+ * Irakli Gozalishvili <rfobic@gmail.com> (http://jeditoolkit.com)
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
@@ -15074,14 +13675,16 @@ exports.ScrollBar = ScrollBar;
*
* ***** END LICENSE BLOCK ***** */
-define('ace/renderloop', ['require', 'exports', 'module' , 'pilot/event'], function(require, exports, module) {
+define('ace/renderloop', ['require', 'exports', 'module' , 'ace/lib/event'], function(require, exports, module) {
+"use strict";
-var event = require("pilot/event");
+var event = require("./lib/event");
-var RenderLoop = function(onRender) {
+var RenderLoop = function(onRender, win) {
this.onRender = onRender;
this.pending = false;
this.changes = 0;
+ this.window = win || window;
};
(function() {
@@ -15093,54 +13696,304 @@ var RenderLoop = function(onRender) {
if (!this.pending) {
this.pending = true;
var _self = this;
- this.setTimeoutZero(function() {
+ event.nextTick(function() {
_self.pending = false;
- var changes = _self.changes;
- _self.changes = 0;
- _self.onRender(changes);
- })
+ var changes;
+ while (changes = _self.changes) {
+ _self.changes = 0;
+ _self.onRender(changes);
+ }
+ }, this.window);
}
};
- this.setTimeoutZero = window.requestAnimationFrame ||
- window.webkitRequestAnimationFrame ||
- window.mozRequestAnimationFrame ||
- window.oRequestAnimationFrame ||
- window.msRequestAnimationFrame;
-
- if (this.setTimeoutZero) {
-
- this.setTimeoutZero = this.setTimeoutZero.bind(window)
- } else if (window.postMessage) {
-
- this.messageName = "zero-timeout-message";
-
- this.setTimeoutZero = function(callback) {
- if (!this.attached) {
- var _self = this;
- event.addListener(window, "message", function(e) {
- if (_self.callback && e.data == _self.messageName) {
- event.stopPropagation(e);
- _self.callback();
- }
- });
- this.attached = true;
- }
- this.callback = callback;
- window.postMessage(this.messageName, "*");
- }
-
- } else {
-
- this.setTimeoutZero = function(callback) {
- setTimeout(callback, 0);
- }
- }
-
}).call(RenderLoop.prototype);
exports.RenderLoop = RenderLoop;
});
+define("text!ace/css/editor.css", [], "@import url(//fonts.googleapis.com/css?family=Droid+Sans+Mono);\n" +
+ "\n" +
+ "\n" +
+ ".ace_editor {\n" +
+ " position: absolute;\n" +
+ " overflow: hidden;\n" +
+ " font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Droid Sans Mono', 'Courier New', monospace;\n" +
+ " font-size: 12px;\n" +
+ "}\n" +
+ "\n" +
+ ".ace_scroller {\n" +
+ " position: absolute;\n" +
+ " overflow-x: scroll;\n" +
+ " overflow-y: hidden;\n" +
+ "}\n" +
+ "\n" +
+ ".ace_content {\n" +
+ " position: absolute;\n" +
+ " box-sizing: border-box;\n" +
+ " -moz-box-sizing: border-box;\n" +
+ " -webkit-box-sizing: border-box;\n" +
+ " cursor: text;\n" +
+ "}\n" +
+ "\n" +
+ "/* setting pointer-events: auto; on node under the mouse, which changes during scroll,\n" +
+ " will break mouse wheel scrolling in Safari */\n" +
+ ".ace_content * {\n" +
+ " pointer-events: none;\n" +
+ "}\n" +
+ "\n" +
+ ".ace_composition {\n" +
+ " position: absolute;\n" +
+ " background: #555;\n" +
+ " color: #DDD;\n" +
+ " z-index: 4;\n" +
+ "}\n" +
+ "\n" +
+ ".ace_gutter .ace_layer {\n" +
+ " position: relative;\n" +
+ " min-width: 54px;\n" +
+ " text-align: right;\n" +
+ "}\n" +
+ "\n" +
+ ".ace_gutter {\n" +
+ " position: absolute;\n" +
+ " overflow : hidden;\n" +
+ " height: 100%;\n" +
+ " width: auto;\n" +
+ " cursor: default;\n" +
+ "}\n" +
+ "\n" +
+ ".ace_gutter-cell {\n" +
+ " padding-left: 19px;\n" +
+ " padding-right: 6px;\n" +
+ "}\n" +
+ "\n" +
+ ".ace_gutter-cell.ace_error {\n" +
+ " background-image: url(\"data:image/gif,GIF89a%10%00%10%00%D5%00%00%F5or%F5%87%88%F5nr%F4ns%EBmq%F5z%7F%DDJT%DEKS%DFOW%F1Yc%F2ah%CE(7%CE)8%D18E%DD%40M%F2KZ%EBU%60%F4%60m%DCir%C8%16(%C8%19*%CE%255%F1%3FR%F1%3FS%E6%AB%B5%CA%5DI%CEn%5E%F7%A2%9A%C9G%3E%E0a%5B%F7%89%85%F5yy%F6%82%80%ED%82%80%FF%BF%BF%E3%C4%C4%FF%FF%FF%FF%FF%FF%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00!%F9%04%01%00%00%25%00%2C%00%00%00%00%10%00%10%00%00%06p%C0%92pH%2C%1A%8F%C8%D2H%93%E1d4%23%E4%88%D3%09mB%1DN%B48%F5%90%40%60%92G%5B%94%20%3E%22%D2%87%24%FA%20%24%C5%06A%00%20%B1%07%02B%A38%89X.v%17%82%11%13q%10%0Fi%24%0F%8B%10%7BD%12%0Ei%09%92%09%0EpD%18%15%24%0A%9Ci%05%0C%18F%18%0B%07%04%01%04%06%A0H%18%12%0D%14%0D%12%A1I%B3%B4%B5IA%00%3B\");\n" +
+ " background-repeat: no-repeat;\n" +
+ " background-position: 2px center;\n" +
+ "}\n" +
+ "\n" +
+ ".ace_gutter-cell.ace_warning {\n" +
+ " background-image: url(\"data:image/gif,GIF89a%10%00%10%00%D5%00%00%FF%DBr%FF%DE%81%FF%E2%8D%FF%E2%8F%FF%E4%96%FF%E3%97%FF%E5%9D%FF%E6%9E%FF%EE%C1%FF%C8Z%FF%CDk%FF%D0s%FF%D4%81%FF%D5%82%FF%D5%83%FF%DC%97%FF%DE%9D%FF%E7%B8%FF%CCl%7BQ%13%80U%15%82W%16%81U%16%89%5B%18%87%5B%18%8C%5E%1A%94d%1D%C5%83-%C9%87%2F%C6%84.%C6%85.%CD%8B2%C9%871%CB%8A3%CD%8B5%DC%98%3F%DF%9BB%E0%9CC%E1%A5U%CB%871%CF%8B5%D1%8D6%DB%97%40%DF%9AB%DD%99B%E3%B0p%E7%CC%AE%FF%FF%FF%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00!%F9%04%01%00%00%2F%00%2C%00%00%00%00%10%00%10%00%00%06a%C0%97pH%2C%1A%8FH%A1%ABTr%25%87%2B%04%82%F4%7C%B9X%91%08%CB%99%1C!%26%13%84*iJ9(%15G%CA%84%14%01%1A%97%0C%03%80%3A%9A%3E%81%84%3E%11%08%B1%8B%20%02%12%0F%18%1A%0F%0A%03'F%1C%04%0B%10%16%18%10%0B%05%1CF%1D-%06%07%9A%9A-%1EG%1B%A0%A1%A0U%A4%A5%A6BA%00%3B\");\n" +
+ " background-repeat: no-repeat;\n" +
+ " background-position: 2px center;\n" +
+ "}\n" +
+ "\n" +
+ ".ace_gutter-cell.ace_info {\n" +
+ " background-image: url(\"data:image/gif;base64,R0lGODlhEAAQAMQAAAAAAEFBQVJSUl5eXmRkZGtra39/f4WFhYmJiZGRkaampry8vMPDw8zMzNXV1dzc3OTk5Orq6vDw8P///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABQALAAAAAAQABAAAAUuICWOZGmeaBml5XGwFCQSBGyXRSAwtqQIiRuiwIM5BoYVbEFIyGCQoeJGrVptIQA7\");\n" +
+ " background-repeat: no-repeat;\n" +
+ " background-position: 2px center;\n" +
+ "}\n" +
+ "\n" +
+ ".ace_editor .ace_sb {\n" +
+ " position: absolute;\n" +
+ " overflow-x: hidden;\n" +
+ " overflow-y: scroll;\n" +
+ " right: 0;\n" +
+ "}\n" +
+ "\n" +
+ ".ace_editor .ace_sb div {\n" +
+ " position: absolute;\n" +
+ " width: 1px;\n" +
+ " left: 0;\n" +
+ "}\n" +
+ "\n" +
+ ".ace_editor .ace_print_margin_layer {\n" +
+ " z-index: 0;\n" +
+ " position: absolute;\n" +
+ " overflow: hidden;\n" +
+ " margin: 0;\n" +
+ " left: 0;\n" +
+ " height: 100%;\n" +
+ " width: 100%;\n" +
+ "}\n" +
+ "\n" +
+ ".ace_editor .ace_print_margin {\n" +
+ " position: absolute;\n" +
+ " height: 100%;\n" +
+ "}\n" +
+ "\n" +
+ ".ace_editor textarea {\n" +
+ " position: fixed;\n" +
+ " z-index: 0;\n" +
+ " width: 10px;\n" +
+ " height: 30px;\n" +
+ " opacity: 0;\n" +
+ " background: transparent;\n" +
+ " appearance: none;\n" +
+ " -moz-appearance: none;\n" +
+ " border: none;\n" +
+ " resize: none;\n" +
+ " outline: none;\n" +
+ " overflow: hidden;\n" +
+ "}\n" +
+ "\n" +
+ ".ace_layer {\n" +
+ " z-index: 1;\n" +
+ " position: absolute;\n" +
+ " overflow: hidden;\n" +
+ " white-space: nowrap;\n" +
+ " height: 100%;\n" +
+ " width: 100%;\n" +
+ " box-sizing: border-box;\n" +
+ " -moz-box-sizing: border-box;\n" +
+ " -webkit-box-sizing: border-box;\n" +
+ "}\n" +
+ "\n" +
+ ".ace_text-layer {\n" +
+ " color: black;\n" +
+ "}\n" +
+ "\n" +
+ ".ace_cjk {\n" +
+ " display: inline-block;\n" +
+ " text-align: center;\n" +
+ "}\n" +
+ "\n" +
+ ".ace_cursor-layer {\n" +
+ " z-index: 4;\n" +
+ "}\n" +
+ "\n" +
+ ".ace_cursor {\n" +
+ " z-index: 4;\n" +
+ " position: absolute;\n" +
+ "}\n" +
+ "\n" +
+ ".ace_cursor.ace_hidden {\n" +
+ " opacity: 0.2;\n" +
+ "}\n" +
+ "\n" +
+ ".ace_line {\n" +
+ " white-space: nowrap;\n" +
+ "}\n" +
+ "\n" +
+ ".ace_marker-layer .ace_step {\n" +
+ " position: absolute;\n" +
+ " z-index: 3;\n" +
+ "}\n" +
+ "\n" +
+ ".ace_marker-layer .ace_selection {\n" +
+ " position: absolute;\n" +
+ " z-index: 4;\n" +
+ "}\n" +
+ "\n" +
+ ".ace_marker-layer .ace_bracket {\n" +
+ " position: absolute;\n" +
+ " z-index: 5;\n" +
+ "}\n" +
+ "\n" +
+ ".ace_marker-layer .ace_active_line {\n" +
+ " position: absolute;\n" +
+ " z-index: 2;\n" +
+ "}\n" +
+ "\n" +
+ ".ace_marker-layer .ace_selected_word {\n" +
+ " position: absolute;\n" +
+ " z-index: 6;\n" +
+ " box-sizing: border-box;\n" +
+ " -moz-box-sizing: border-box;\n" +
+ " -webkit-box-sizing: border-box;\n" +
+ "}\n" +
+ "\n" +
+ ".ace_line .ace_fold {\n" +
+ " box-sizing: border-box;\n" +
+ " -moz-box-sizing: border-box;\n" +
+ " -webkit-box-sizing: border-box;\n" +
+ " \n" +
+ " display: inline-block;\n" +
+ " height: 11px;\n" +
+ " margin-top: -2px;\n" +
+ " vertical-align: middle;\n" +
+ "\n" +
+ " background-image: \n" +
+ " url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%11%00%00%00%09%08%06%00%00%00%D4%E8%C7%0C%00%00%03%1EiCCPICC%20Profile%00%00x%01%85T%DFk%D3P%14%FE%DAe%9D%B0%E1%8B%3Ag%11%09%3Eh%91ndStC%9C%B6kW%BA%CDZ%EA6%B7!H%9B%A6m%5C%9A%C6%24%ED~%B0%07%D9%8Bo%3A%C5w%F1%07%3E%F9%07%0C%D9%83o%7B%92%0D%C6%14a%F8%AC%88%22L%F6%22%B3%9E%9B4M'S%03%B9%F7%BB%DF%F9%EE9'%E7%E4%5E%A0%F9qZ%D3%14%2F%0F%14USO%C5%C2%FC%C4%E4%14%DF%F2%01%5E%1CC%2B%FChM%8B%86%16J%26G%40%0F%D3%B2y%EF%B3%F3%0E%1E%C6lt%EEo%DF%AB%FEc%D5%9A%95%0C%11%F0%1C%20%BE%945%C4%22%E1Y%A0i%5C%D4t%13%E0%D6%89%EF%9D15%C2%CDLsX%A7%04%09%1Fg8oc%81%E1%8C%8D%23%96f45%40%9A%09%C2%07%C5B%3AK%B8%408%98i%E0%F3%0D%D8%CE%81%14%E4'%26%A9%92.%8B%3C%ABER%2F%E5dE%B2%0C%F6%F0%1Fs%83%F2_%B0%A8%94%E9%9B%AD%E7%10%8Dm%9A%19N%D1%7C%8A%DE%1F9%7Dp%8C%E6%00%D5%C1%3F_%18%BDA%B8%9DpX6%E3%A35~B%CD%24%AE%11%26%BD%E7%EEti%98%EDe%9A%97Y)%12%25%1C%24%BCbT%AE3li%E6%0B%03%89%9A%E6%D3%ED%F4P%92%B0%9F4%BF43Y%F3%E3%EDP%95%04%EB1%C5%F5%F6KF%F4%BA%BD%D7%DB%91%93%07%E35%3E%A7)%D6%7F%40%FE%BD%F7%F5r%8A%E5y%92%F0%EB%B4%1E%8D%D5%F4%5B%92%3AV%DB%DB%E4%CD%A6%23%C3%C4wQ%3F%03HB%82%8E%1Cd(%E0%91B%0Ca%9Ac%C4%AA%F8L%16%19%22J%A4%D2itTy%B28%D6%3B(%93%96%ED%1CGx%C9_%0E%B8%5E%16%F5%5B%B2%B8%F6%E0%FB%9E%DD%25%D7%8E%BC%15%85%C5%B7%A3%D8Q%ED%B5%81%E9%BA%B2%13%9A%1B%7Fua%A5%A3n%E17%B9%E5%9B%1Bm%AB%0B%08Q%FE%8A%E5%B1H%5Ee%CAO%82Q%D7u6%E6%90S%97%FCu%0B%CF2%94%EE%25v%12X%0C%BA%AC%F0%5E%F8*l%0AO%85%17%C2%97%BF%D4%C8%CE%DE%AD%11%CB%80q%2C%3E%AB%9ES%CD%C6%EC%25%D2L%D2%EBd%B8%BF%8A%F5B%C6%18%F9%901CZ%9D%BE%24M%9C%8A9%F2%DAP%0B'%06w%82%EB%E6%E2%5C%2F%D7%07%9E%BB%CC%5D%E1%FA%B9%08%AD.r%23%8E%C2%17%F5E%7C!%F0%BE3%BE%3E_%B7o%88a%A7%DB%BE%D3d%EB%A31Z%EB%BB%D3%91%BA%A2%B1z%94%8F%DB'%F6%3D%8E%AA%13%19%B2%B1%BE%B1~V%08%2B%B4%A2cjJ%B3tO%00%03%25mN%97%F3%05%93%EF%11%84%0B%7C%88%AE-%89%8F%ABbW%90O%2B%0Ao%99%0C%5E%97%0CI%AFH%D9.%B0%3B%8F%ED%03%B6S%D6%5D%E6i_s9%F3*p%E9%1B%FD%C3%EB.7U%06%5E%19%C0%D1s.%17%A03u%E4%09%B0%7C%5E%2C%EB%15%DB%1F%3C%9E%B7%80%91%3B%DBc%AD%3Dma%BA%8B%3EV%AB%DBt.%5B%1E%01%BB%0F%AB%D5%9F%CF%AA%D5%DD%E7%E4%7F%0Bx%A3%FC%06%A9%23%0A%D6%C2%A1_2%00%00%00%09pHYs%00%00%0B%13%00%00%0B%13%01%00%9A%9C%18%00%00%00%B5IDAT(%15%A5%91%3D%0E%02!%10%85ac%E1%05%D6%CE%D6%C6%CE%D2%E8%ED%CD%DE%C0%C6%D6N.%E0V%F8%3D%9Ca%891XH%C2%BE%D9y%3F%90!%E6%9C%C3%BFk%E5%011%C6-%F5%C8N%04%DF%BD%FF%89%DFt%83DN%60%3E%F3%AB%A0%DE%1A%5Dg%BE%10Q%97%1B%40%9C%A8o%10%8F%5E%828%B4%1B%60%87%F6%02%26%85%1Ch%1E%C1%2B%5Bk%FF%86%EE%B7j%09%9A%DA%9B%ACe%A3%F9%EC%DA!9%B4%D5%A6%81%86%86%98%CC%3C%5B%40%FA%81%B3%E9%CB%23%94%C16Azo%05%D4%E1%C1%95a%3B%8A'%A0%E8%CC%17%22%85%1D%BA%00%A2%FA%DC%0A%94%D1%D1%8D%8B%3A%84%17B%C7%60%1A%25Z%FC%8D%00%00%00%00IEND%AEB%60%82\"),\n" +
+ " url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%05%00%00%007%08%06%00%00%00%C4%DD%80C%00%00%03%1EiCCPICC%20Profile%00%00x%01%85T%DFk%D3P%14%FE%DAe%9D%B0%E1%8B%3Ag%11%09%3Eh%91ndStC%9C%B6kW%BA%CDZ%EA6%B7!H%9B%A6m%5C%9A%C6%24%ED~%B0%07%D9%8Bo%3A%C5w%F1%07%3E%F9%07%0C%D9%83o%7B%92%0D%C6%14a%F8%AC%88%22L%F6%22%B3%9E%9B4M'S%03%B9%F7%BB%DF%F9%EE9'%E7%E4%5E%A0%F9qZ%D3%14%2F%0F%14USO%C5%C2%FC%C4%E4%14%DF%F2%01%5E%1CC%2B%FChM%8B%86%16J%26G%40%0F%D3%B2y%EF%B3%F3%0E%1E%C6lt%EEo%DF%AB%FEc%D5%9A%95%0C%11%F0%1C%20%BE%945%C4%22%E1Y%A0i%5C%D4t%13%E0%D6%89%EF%9D15%C2%CDLsX%A7%04%09%1Fg8oc%81%E1%8C%8D%23%96f45%40%9A%09%C2%07%C5B%3AK%B8%408%98i%E0%F3%0D%D8%CE%81%14%E4'%26%A9%92.%8B%3C%ABER%2F%E5dE%B2%0C%F6%F0%1Fs%83%F2_%B0%A8%94%E9%9B%AD%E7%10%8Dm%9A%19N%D1%7C%8A%DE%1F9%7Dp%8C%E6%00%D5%C1%3F_%18%BDA%B8%9DpX6%E3%A35~B%CD%24%AE%11%26%BD%E7%EEti%98%EDe%9A%97Y)%12%25%1C%24%BCbT%AE3li%E6%0B%03%89%9A%E6%D3%ED%F4P%92%B0%9F4%BF43Y%F3%E3%EDP%95%04%EB1%C5%F5%F6KF%F4%BA%BD%D7%DB%91%93%07%E35%3E%A7)%D6%7F%40%FE%BD%F7%F5r%8A%E5y%92%F0%EB%B4%1E%8D%D5%F4%5B%92%3AV%DB%DB%E4%CD%A6%23%C3%C4wQ%3F%03HB%82%8E%1Cd(%E0%91B%0Ca%9Ac%C4%AA%F8L%16%19%22J%A4%D2itTy%B28%D6%3B(%93%96%ED%1CGx%C9_%0E%B8%5E%16%F5%5B%B2%B8%F6%E0%FB%9E%DD%25%D7%8E%BC%15%85%C5%B7%A3%D8Q%ED%B5%81%E9%BA%B2%13%9A%1B%7Fua%A5%A3n%E17%B9%E5%9B%1Bm%AB%0B%08Q%FE%8A%E5%B1H%5Ee%CAO%82Q%D7u6%E6%90S%97%FCu%0B%CF2%94%EE%25v%12X%0C%BA%AC%F0%5E%F8*l%0AO%85%17%C2%97%BF%D4%C8%CE%DE%AD%11%CB%80q%2C%3E%AB%9ES%CD%C6%EC%25%D2L%D2%EBd%B8%BF%8A%F5B%C6%18%F9%901CZ%9D%BE%24M%9C%8A9%F2%DAP%0B'%06w%82%EB%E6%E2%5C%2F%D7%07%9E%BB%CC%5D%E1%FA%B9%08%AD.r%23%8E%C2%17%F5E%7C!%F0%BE3%BE%3E_%B7o%88a%A7%DB%BE%D3d%EB%A31Z%EB%BB%D3%91%BA%A2%B1z%94%8F%DB'%F6%3D%8E%AA%13%19%B2%B1%BE%B1~V%08%2B%B4%A2cjJ%B3tO%00%03%25mN%97%F3%05%93%EF%11%84%0B%7C%88%AE-%89%8F%ABbW%90O%2B%0Ao%99%0C%5E%97%0CI%AFH%D9.%B0%3B%8F%ED%03%B6S%D6%5D%E6i_s9%F3*p%E9%1B%FD%C3%EB.7U%06%5E%19%C0%D1s.%17%A03u%E4%09%B0%7C%5E%2C%EB%15%DB%1F%3C%9E%B7%80%91%3B%DBc%AD%3Dma%BA%8B%3EV%AB%DBt.%5B%1E%01%BB%0F%AB%D5%9F%CF%AA%D5%DD%E7%E4%7F%0Bx%A3%FC%06%A9%23%0A%D6%C2%A1_2%00%00%00%09pHYs%00%00%0B%13%00%00%0B%13%01%00%9A%9C%18%00%00%00%3AIDAT8%11c%FC%FF%FF%7F%18%03%1A%60%01%F2%3F%A0%891%80%04%FF%11-%F8%17%9BJ%E2%05%B1ZD%81v%26t%E7%80%F8%A3%82h%A12%1A%20%A3%01%02%0F%01%BA%25%06%00%19%C0%0D%AEF%D5%3ES%00%00%00%00IEND%AEB%60%82\");\n" +
+ " background-repeat: no-repeat, repeat-x;\n" +
+ " background-position: center center, top left;\n" +
+ " color: transparent;\n" +
+ "\n" +
+ " border: 1px solid black;\n" +
+ " -moz-border-radius: 2px;\n" +
+ " -webkit-border-radius: 2px;\n" +
+ " border-radius: 2px;\n" +
+ " \n" +
+ " cursor: pointer;\n" +
+ " pointer-events: auto;\n" +
+ "}\n" +
+ "\n" +
+ ".ace_dark .ace_fold {\n" +
+ "}\n" +
+ "\n" +
+ ".ace_fold:hover{\n" +
+ " background-image: \n" +
+ " url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%11%00%00%00%09%08%06%00%00%00%D4%E8%C7%0C%00%00%03%1EiCCPICC%20Profile%00%00x%01%85T%DFk%D3P%14%FE%DAe%9D%B0%E1%8B%3Ag%11%09%3Eh%91ndStC%9C%B6kW%BA%CDZ%EA6%B7!H%9B%A6m%5C%9A%C6%24%ED~%B0%07%D9%8Bo%3A%C5w%F1%07%3E%F9%07%0C%D9%83o%7B%92%0D%C6%14a%F8%AC%88%22L%F6%22%B3%9E%9B4M'S%03%B9%F7%BB%DF%F9%EE9'%E7%E4%5E%A0%F9qZ%D3%14%2F%0F%14USO%C5%C2%FC%C4%E4%14%DF%F2%01%5E%1CC%2B%FChM%8B%86%16J%26G%40%0F%D3%B2y%EF%B3%F3%0E%1E%C6lt%EEo%DF%AB%FEc%D5%9A%95%0C%11%F0%1C%20%BE%945%C4%22%E1Y%A0i%5C%D4t%13%E0%D6%89%EF%9D15%C2%CDLsX%A7%04%09%1Fg8oc%81%E1%8C%8D%23%96f45%40%9A%09%C2%07%C5B%3AK%B8%408%98i%E0%F3%0D%D8%CE%81%14%E4'%26%A9%92.%8B%3C%ABER%2F%E5dE%B2%0C%F6%F0%1Fs%83%F2_%B0%A8%94%E9%9B%AD%E7%10%8Dm%9A%19N%D1%7C%8A%DE%1F9%7Dp%8C%E6%00%D5%C1%3F_%18%BDA%B8%9DpX6%E3%A35~B%CD%24%AE%11%26%BD%E7%EEti%98%EDe%9A%97Y)%12%25%1C%24%BCbT%AE3li%E6%0B%03%89%9A%E6%D3%ED%F4P%92%B0%9F4%BF43Y%F3%E3%EDP%95%04%EB1%C5%F5%F6KF%F4%BA%BD%D7%DB%91%93%07%E35%3E%A7)%D6%7F%40%FE%BD%F7%F5r%8A%E5y%92%F0%EB%B4%1E%8D%D5%F4%5B%92%3AV%DB%DB%E4%CD%A6%23%C3%C4wQ%3F%03HB%82%8E%1Cd(%E0%91B%0Ca%9Ac%C4%AA%F8L%16%19%22J%A4%D2itTy%B28%D6%3B(%93%96%ED%1CGx%C9_%0E%B8%5E%16%F5%5B%B2%B8%F6%E0%FB%9E%DD%25%D7%8E%BC%15%85%C5%B7%A3%D8Q%ED%B5%81%E9%BA%B2%13%9A%1B%7Fua%A5%A3n%E17%B9%E5%9B%1Bm%AB%0B%08Q%FE%8A%E5%B1H%5Ee%CAO%82Q%D7u6%E6%90S%97%FCu%0B%CF2%94%EE%25v%12X%0C%BA%AC%F0%5E%F8*l%0AO%85%17%C2%97%BF%D4%C8%CE%DE%AD%11%CB%80q%2C%3E%AB%9ES%CD%C6%EC%25%D2L%D2%EBd%B8%BF%8A%F5B%C6%18%F9%901CZ%9D%BE%24M%9C%8A9%F2%DAP%0B'%06w%82%EB%E6%E2%5C%2F%D7%07%9E%BB%CC%5D%E1%FA%B9%08%AD.r%23%8E%C2%17%F5E%7C!%F0%BE3%BE%3E_%B7o%88a%A7%DB%BE%D3d%EB%A31Z%EB%BB%D3%91%BA%A2%B1z%94%8F%DB'%F6%3D%8E%AA%13%19%B2%B1%BE%B1~V%08%2B%B4%A2cjJ%B3tO%00%03%25mN%97%F3%05%93%EF%11%84%0B%7C%88%AE-%89%8F%ABbW%90O%2B%0Ao%99%0C%5E%97%0CI%AFH%D9.%B0%3B%8F%ED%03%B6S%D6%5D%E6i_s9%F3*p%E9%1B%FD%C3%EB.7U%06%5E%19%C0%D1s.%17%A03u%E4%09%B0%7C%5E%2C%EB%15%DB%1F%3C%9E%B7%80%91%3B%DBc%AD%3Dma%BA%8B%3EV%AB%DBt.%5B%1E%01%BB%0F%AB%D5%9F%CF%AA%D5%DD%E7%E4%7F%0Bx%A3%FC%06%A9%23%0A%D6%C2%A1_2%00%00%00%09pHYs%00%00%0B%13%00%00%0B%13%01%00%9A%9C%18%00%00%00%B5IDAT(%15%A5%91%3D%0E%02!%10%85ac%E1%05%D6%CE%D6%C6%CE%D2%E8%ED%CD%DE%C0%C6%D6N.%E0V%F8%3D%9Ca%891XH%C2%BE%D9y%3F%90!%E6%9C%C3%BFk%E5%011%C6-%F5%C8N%04%DF%BD%FF%89%DFt%83DN%60%3E%F3%AB%A0%DE%1A%5Dg%BE%10Q%97%1B%40%9C%A8o%10%8F%5E%828%B4%1B%60%87%F6%02%26%85%1Ch%1E%C1%2B%5Bk%FF%86%EE%B7j%09%9A%DA%9B%ACe%A3%F9%EC%DA!9%B4%D5%A6%81%86%86%98%CC%3C%5B%40%FA%81%B3%E9%CB%23%94%C16Azo%05%D4%E1%C1%95a%3B%8A'%A0%E8%CC%17%22%85%1D%BA%00%A2%FA%DC%0A%94%D1%D1%8D%8B%3A%84%17B%C7%60%1A%25Z%FC%8D%00%00%00%00IEND%AEB%60%82\"),\n" +
+ " url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%05%00%00%007%08%06%00%00%00%C4%DD%80C%00%00%03%1EiCCPICC%20Profile%00%00x%01%85T%DFk%D3P%14%FE%DAe%9D%B0%E1%8B%3Ag%11%09%3Eh%91ndStC%9C%B6kW%BA%CDZ%EA6%B7!H%9B%A6m%5C%9A%C6%24%ED~%B0%07%D9%8Bo%3A%C5w%F1%07%3E%F9%07%0C%D9%83o%7B%92%0D%C6%14a%F8%AC%88%22L%F6%22%B3%9E%9B4M'S%03%B9%F7%BB%DF%F9%EE9'%E7%E4%5E%A0%F9qZ%D3%14%2F%0F%14USO%C5%C2%FC%C4%E4%14%DF%F2%01%5E%1CC%2B%FChM%8B%86%16J%26G%40%0F%D3%B2y%EF%B3%F3%0E%1E%C6lt%EEo%DF%AB%FEc%D5%9A%95%0C%11%F0%1C%20%BE%945%C4%22%E1Y%A0i%5C%D4t%13%E0%D6%89%EF%9D15%C2%CDLsX%A7%04%09%1Fg8oc%81%E1%8C%8D%23%96f45%40%9A%09%C2%07%C5B%3AK%B8%408%98i%E0%F3%0D%D8%CE%81%14%E4'%26%A9%92.%8B%3C%ABER%2F%E5dE%B2%0C%F6%F0%1Fs%83%F2_%B0%A8%94%E9%9B%AD%E7%10%8Dm%9A%19N%D1%7C%8A%DE%1F9%7Dp%8C%E6%00%D5%C1%3F_%18%BDA%B8%9DpX6%E3%A35~B%CD%24%AE%11%26%BD%E7%EEti%98%EDe%9A%97Y)%12%25%1C%24%BCbT%AE3li%E6%0B%03%89%9A%E6%D3%ED%F4P%92%B0%9F4%BF43Y%F3%E3%EDP%95%04%EB1%C5%F5%F6KF%F4%BA%BD%D7%DB%91%93%07%E35%3E%A7)%D6%7F%40%FE%BD%F7%F5r%8A%E5y%92%F0%EB%B4%1E%8D%D5%F4%5B%92%3AV%DB%DB%E4%CD%A6%23%C3%C4wQ%3F%03HB%82%8E%1Cd(%E0%91B%0Ca%9Ac%C4%AA%F8L%16%19%22J%A4%D2itTy%B28%D6%3B(%93%96%ED%1CGx%C9_%0E%B8%5E%16%F5%5B%B2%B8%F6%E0%FB%9E%DD%25%D7%8E%BC%15%85%C5%B7%A3%D8Q%ED%B5%81%E9%BA%B2%13%9A%1B%7Fua%A5%A3n%E17%B9%E5%9B%1Bm%AB%0B%08Q%FE%8A%E5%B1H%5Ee%CAO%82Q%D7u6%E6%90S%97%FCu%0B%CF2%94%EE%25v%12X%0C%BA%AC%F0%5E%F8*l%0AO%85%17%C2%97%BF%D4%C8%CE%DE%AD%11%CB%80q%2C%3E%AB%9ES%CD%C6%EC%25%D2L%D2%EBd%B8%BF%8A%F5B%C6%18%F9%901CZ%9D%BE%24M%9C%8A9%F2%DAP%0B'%06w%82%EB%E6%E2%5C%2F%D7%07%9E%BB%CC%5D%E1%FA%B9%08%AD.r%23%8E%C2%17%F5E%7C!%F0%BE3%BE%3E_%B7o%88a%A7%DB%BE%D3d%EB%A31Z%EB%BB%D3%91%BA%A2%B1z%94%8F%DB'%F6%3D%8E%AA%13%19%B2%B1%BE%B1~V%08%2B%B4%A2cjJ%B3tO%00%03%25mN%97%F3%05%93%EF%11%84%0B%7C%88%AE-%89%8F%ABbW%90O%2B%0Ao%99%0C%5E%97%0CI%AFH%D9.%B0%3B%8F%ED%03%B6S%D6%5D%E6i_s9%F3*p%E9%1B%FD%C3%EB.7U%06%5E%19%C0%D1s.%17%A03u%E4%09%B0%7C%5E%2C%EB%15%DB%1F%3C%9E%B7%80%91%3B%DBc%AD%3Dma%BA%8B%3EV%AB%DBt.%5B%1E%01%BB%0F%AB%D5%9F%CF%AA%D5%DD%E7%E4%7F%0Bx%A3%FC%06%A9%23%0A%D6%C2%A1_2%00%00%00%09pHYs%00%00%0B%13%00%00%0B%13%01%00%9A%9C%18%00%00%003IDAT8%11c%FC%FF%FF%7F%3E%03%1A%60%01%F2%3F%A3%891%80%04%FFQ%26%F8w%C0%B43%A1%DB%0C%E2%8F%0A%A2%85%CAh%80%8C%06%08%3C%04%E8%96%18%00%A3S%0D%CD%CF%D8%C1%9D%00%00%00%00IEND%AEB%60%82\");\n" +
+ " background-repeat: no-repeat, repeat-x;\n" +
+ " background-position: center center, top left;\n" +
+ "}\n" +
+ "\n" +
+ ".ace_dragging .ace_content {\n" +
+ " cursor: move;\n" +
+ "}\n" +
+ "\n" +
+ ".ace_folding-enabled .ace_gutter-cell {\n" +
+ " padding-right: 13px;\n" +
+ "}\n" +
+ "\n" +
+ ".ace_fold-widget {\n" +
+ " box-sizing: border-box;\n" +
+ " -moz-box-sizing: border-box;\n" +
+ " -webkit-box-sizing: border-box;\n" +
+ "\n" +
+ " margin: 0 -12px 1px 1px;\n" +
+ " display: inline-block;\n" +
+ " height: 14px;\n" +
+ " width: 11px;\n" +
+ " vertical-align: text-bottom;\n" +
+ " \n" +
+ " background-image: url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%05%00%00%00%05%08%06%00%00%00%8Do%26%E5%00%00%004IDATx%DAe%8A%B1%0D%000%0C%C2%F2%2CK%96%BC%D0%8F9%81%88H%E9%D0%0E%96%C0%10%92%3E%02%80%5E%82%E4%A9*-%EEsw%C8%CC%11%EE%96w%D8%DC%E9*Eh%0C%151(%00%00%00%00IEND%AEB%60%82\");\n" +
+ " background-repeat: no-repeat;\n" +
+ " background-position: center 5px;\n" +
+ "\n" +
+ " border-radius: 3px;\n" +
+ "}\n" +
+ "\n" +
+ ".ace_fold-widget.end {\n" +
+ " background-image: url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%05%00%00%00%05%08%06%00%00%00%8Do%26%E5%00%00%004IDATx%DAm%C7%C1%09%000%08C%D1%8C%ECE%C8E(%8E%EC%02)%1EZJ%F1%C1'%04%07I%E1%E5%EE%CAL%F5%A2%99%99%22%E2%D6%1FU%B5%FE0%D9x%A7%26Wz5%0E%D5%00%00%00%00IEND%AEB%60%82\");\n" +
+ "}\n" +
+ "\n" +
+ ".ace_fold-widget.closed {\n" +
+ " background-image: url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%03%00%00%00%06%08%06%00%00%00%06%E5%24%0C%00%00%009IDATx%DA5%CA%C1%09%000%08%03%C0%AC*(%3E%04%C1%0D%BA%B1%23%A4Uh%E0%20%81%C0%CC%F8%82%81%AA%A2%AArGfr%88%08%11%11%1C%DD%7D%E0%EE%5B%F6%F6%CB%B8%05Q%2F%E9tai%D9%00%00%00%00IEND%AEB%60%82\");\n" +
+ "}\n" +
+ "\n" +
+ ".ace_fold-widget:hover {\n" +
+ " border: 1px solid rgba(0, 0, 0, 0.3);\n" +
+ " background-color: rgba(255, 255, 255, 0.2);\n" +
+ " -moz-box-shadow:inset 0 1px 1px rgba(255, 255, 255, 0.7);\n" +
+ " -moz-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\n" +
+ " -webkit-box-shadow:inset 0 1px 1px rgba(255, 255, 255, 0.7);\n" +
+ " -webkit-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\n" +
+ " box-shadow:inset 0 1px 1px rgba(255, 255, 255, 0.7);\n" +
+ " box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\n" +
+ " background-position: center 4px;\n" +
+ "}\n" +
+ "\n" +
+ ".ace_fold-widget:active {\n" +
+ " border: 1px solid rgba(0, 0, 0, 0.4);\n" +
+ " background-color: rgba(0, 0, 0, 0.05);\n" +
+ " -moz-box-shadow:inset 0 1px 1px rgba(255, 255, 255);\n" +
+ " -moz-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\n" +
+ " -webkit-box-shadow:inset 0 1px 1px rgba(255, 255, 255);\n" +
+ " -webkit-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\n" +
+ " box-shadow:inset 0 1px 1px rgba(255, 255, 255);\n" +
+ " box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\n" +
+ "}\n" +
+ "\n" +
+ ".ace_fold-widget.invalid {\n" +
+ " background-color: #FFB4B4;\n" +
+ " border-color: #DE5555;\n" +
+ "}\n" +
+ "");
+
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
@@ -15178,11 +14031,12 @@ exports.RenderLoop = RenderLoop;
*
* ***** END LICENSE BLOCK ***** */
-define('ace/theme/textmate', ['require', 'exports', 'module' , 'pilot/dom'], function(require, exports, module) {
-
- var dom = require("pilot/dom");
+define('ace/theme/textmate', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) {
+"use strict";
- var cssText = ".ace-tm .ace_editor {\
+exports.isDark = false;
+exports.cssClass = "ace-tm";
+exports.cssText = ".ace-tm .ace_editor {\
border: 2px solid rgb(159, 159, 159);\
}\
\
@@ -15191,19 +14045,8 @@ define('ace/theme/textmate', ['require', 'exports', 'module' , 'pilot/dom'], fun
}\
\
.ace-tm .ace_gutter {\
- width: 50px;\
background: #e8e8e8;\
color: #333;\
- overflow : hidden;\
-}\
-\
-.ace-tm .ace_gutter-layer {\
- width: 100%;\
- text-align: right;\
-}\
-\
-.ace-tm .ace_gutter-layer .ace_gutter-cell {\
- padding-right: 6px;\
}\
\
.ace-tm .ace_print_margin {\
@@ -15211,6 +14054,10 @@ define('ace/theme/textmate', ['require', 'exports', 'module' , 'pilot/dom'], fun
background: #e8e8e8;\
}\
\
+.ace-tm .ace_fold {\
+ background-color: #0000A2;\
+}\
+\
.ace-tm .ace_text-layer {\
cursor: text;\
}\
@@ -15249,11 +14096,6 @@ define('ace/theme/textmate', ['require', 'exports', 'module' , 'pilot/dom'], fun
color: white;\
}\
\
-.ace-tm .ace_line .ace_fold {\
- background-color: #E4E4E4;\
- border-radius: 3px;\
-}\
-\
.ace-tm .ace_line .ace_support.ace_function {\
color: rgb(60, 76, 114);\
}\
@@ -15299,6 +14141,22 @@ define('ace/theme/textmate', ['require', 'exports', 'module' , 'pilot/dom'], fun
color: rgb(104, 104, 91);\
}\
\
+.ace-tm .ace_entity.ace_name.ace_function {\
+ color: #0000A2;\
+}\
+\
+.ace-tm .ace_markup.ace_markupine {\
+ text-decoration:underline;\
+}\
+\
+.ace-tm .ace_markup.ace_heading {\
+ color: rgb(12, 7, 255);\
+}\
+\
+.ace-tm .ace_markup.ace_list {\
+ color:rgb(185, 6, 144);\
+}\
+\
.ace-tm .ace_marker-layer .ace_selection {\
background: rgb(181, 213, 255);\
}\
@@ -15325,1995 +14183,24 @@ define('ace/theme/textmate', ['require', 'exports', 'module' , 'pilot/dom'], fun
border: 1px solid rgb(200, 200, 250);\
}\
\
+.ace-tm .ace_meta.ace_tag {\
+ color:rgb(28, 2, 255);\
+}\
+\
.ace-tm .ace_string.ace_regex {\
color: rgb(255, 0, 0)\
}";
- // import CSS once
- dom.importCssString(cssText);
-
- exports.cssClass = "ace-tm";
+var dom = require("../lib/dom");
+dom.importCssString(exports.cssText, exports.cssClass);
});
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is DomTemplate.
- *
- * The Initial Developer of the Original Code is Mozilla.
- * Portions created by the Initial Developer are Copyright (C) 2009
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Joe Walker (jwalker@mozilla.com) (original author)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('pilot/environment', ['require', 'exports', 'module' , 'pilot/settings'], function(require, exports, module) {
-
-
-var settings = require("pilot/settings").settings;
-
-/**
- * Create an environment object
- */
-function create() {
- return {
- settings: settings
- };
-};
-
-exports.create = create;
-
-
-});
-define("text/cockpit/ui/cli_view.css", [], "" +
- "#cockpitInput { padding-left: 16px; }" +
- "" +
- ".cptOutput { overflow: auto; position: absolute; z-index: 999; display: none; }" +
- "" +
- ".cptCompletion { padding: 0; position: absolute; z-index: -1000; }" +
- ".cptCompletion.VALID { background: #FFF; }" +
- ".cptCompletion.INCOMPLETE { background: #DDD; }" +
- ".cptCompletion.INVALID { background: #DDD; }" +
- ".cptCompletion span { color: #FFF; }" +
- ".cptCompletion span.INCOMPLETE { color: #DDD; border-bottom: 2px dotted #F80; }" +
- ".cptCompletion span.INVALID { color: #DDD; border-bottom: 2px dotted #F00; }" +
- "span.cptPrompt { color: #66F; font-weight: bold; }" +
- "" +
- "" +
- ".cptHints {" +
- " color: #000;" +
- " position: absolute;" +
- " border: 1px solid rgba(230, 230, 230, 0.8);" +
- " background: rgba(250, 250, 250, 0.8);" +
- " -moz-border-radius-topleft: 10px;" +
- " -moz-border-radius-topright: 10px;" +
- " border-top-left-radius: 10px; border-top-right-radius: 10px;" +
- " z-index: 1000;" +
- " padding: 8px;" +
- " display: none;" +
- "}" +
- "" +
- ".cptFocusPopup { display: block; }" +
- ".cptFocusPopup.cptNoPopup { display: none; }" +
- "" +
- ".cptHints ul { margin: 0; padding: 0 15px; }" +
- "" +
- ".cptGt { font-weight: bold; font-size: 120%; }" +
- "");
-
-define("text/cockpit/ui/request_view.css", [], "" +
- ".cptRowIn {" +
- " display: box; display: -moz-box; display: -webkit-box;" +
- " box-orient: horizontal; -moz-box-orient: horizontal; -webkit-box-orient: horizontal;" +
- " box-align: center; -moz-box-align: center; -webkit-box-align: center;" +
- " color: #333;" +
- " background-color: #EEE;" +
- " width: 100%;" +
- " font-family: consolas, courier, monospace;" +
- "}" +
- ".cptRowIn > * { padding-left: 2px; padding-right: 2px; }" +
- ".cptRowIn > img { cursor: pointer; }" +
- ".cptHover { display: none; }" +
- ".cptRowIn:hover > .cptHover { display: block; }" +
- ".cptRowIn:hover > .cptHover.cptHidden { display: none; }" +
- ".cptOutTyped {" +
- " box-flex: 1; -moz-box-flex: 1; -webkit-box-flex: 1;" +
- " font-weight: bold; color: #000; font-size: 120%;" +
- "}" +
- ".cptRowOutput { padding-left: 10px; line-height: 1.2em; }" +
- ".cptRowOutput strong," +
- ".cptRowOutput b," +
- ".cptRowOutput th," +
- ".cptRowOutput h1," +
- ".cptRowOutput h2," +
- ".cptRowOutput h3 { color: #000; }" +
- ".cptRowOutput a { font-weight: bold; color: #666; text-decoration: none; }" +
- ".cptRowOutput a: hover { text-decoration: underline; cursor: pointer; }" +
- ".cptRowOutput input[type=password]," +
- ".cptRowOutput input[type=text]," +
- ".cptRowOutput textarea {" +
- " color: #000; font-size: 120%;" +
- " background: transparent; padding: 3px;" +
- " border-radius: 5px; -moz-border-radius: 5px; -webkit-border-radius: 5px;" +
- "}" +
- ".cptRowOutput table," +
- ".cptRowOutput td," +
- ".cptRowOutput th { border: 0; padding: 0 2px; }" +
- ".cptRowOutput .right { text-align: right; }" +
- "");
-
-define("text/ace/css/editor.css", [], ".ace_editor {" +
- " position: absolute;" +
- " overflow: hidden;" +
- " font-family: Monaco, \"Menlo\", \"Courier New\", monospace;" +
- " font-size: 12px;" +
- "}" +
- "" +
- ".ace_scroller {" +
- " position: absolute;" +
- " overflow-x: scroll;" +
- " overflow-y: hidden;" +
- "}" +
- "" +
- ".ace_content {" +
- " position: absolute;" +
- " box-sizing: border-box;" +
- " -moz-box-sizing: border-box;" +
- " -webkit-box-sizing: border-box;" +
- "}" +
- "" +
- ".ace_composition {" +
- " position: absolute;" +
- " background: #555;" +
- " color: #DDD;" +
- " z-index: 4;" +
- "}" +
- "" +
- ".ace_gutter {" +
- " position: absolute;" +
- " overflow-x: hidden;" +
- " overflow-y: hidden;" +
- " height: 100%;" +
- "}" +
- "" +
- ".ace_gutter-cell.ace_error {" +
- " background-image: url(\"data:image/gif,GIF89a%10%00%10%00%D5%00%00%F5or%F5%87%88%F5nr%F4ns%EBmq%F5z%7F%DDJT%DEKS%DFOW%F1Yc%F2ah%CE(7%CE)8%D18E%DD%40M%F2KZ%EBU%60%F4%60m%DCir%C8%16(%C8%19*%CE%255%F1%3FR%F1%3FS%E6%AB%B5%CA%5DI%CEn%5E%F7%A2%9A%C9G%3E%E0a%5B%F7%89%85%F5yy%F6%82%80%ED%82%80%FF%BF%BF%E3%C4%C4%FF%FF%FF%FF%FF%FF%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00!%F9%04%01%00%00%25%00%2C%00%00%00%00%10%00%10%00%00%06p%C0%92pH%2C%1A%8F%C8%D2H%93%E1d4%23%E4%88%D3%09mB%1DN%B48%F5%90%40%60%92G%5B%94%20%3E%22%D2%87%24%FA%20%24%C5%06A%00%20%B1%07%02B%A38%89X.v%17%82%11%13q%10%0Fi%24%0F%8B%10%7BD%12%0Ei%09%92%09%0EpD%18%15%24%0A%9Ci%05%0C%18F%18%0B%07%04%01%04%06%A0H%18%12%0D%14%0D%12%A1I%B3%B4%B5IA%00%3B\");" +
- " background-repeat: no-repeat;" +
- " background-position: 4px center;" +
- "}" +
- "" +
- ".ace_gutter-cell.ace_warning {" +
- " background-image: url(\"data:image/gif,GIF89a%10%00%10%00%D5%00%00%FF%DBr%FF%DE%81%FF%E2%8D%FF%E2%8F%FF%E4%96%FF%E3%97%FF%E5%9D%FF%E6%9E%FF%EE%C1%FF%C8Z%FF%CDk%FF%D0s%FF%D4%81%FF%D5%82%FF%D5%83%FF%DC%97%FF%DE%9D%FF%E7%B8%FF%CCl%7BQ%13%80U%15%82W%16%81U%16%89%5B%18%87%5B%18%8C%5E%1A%94d%1D%C5%83-%C9%87%2F%C6%84.%C6%85.%CD%8B2%C9%871%CB%8A3%CD%8B5%DC%98%3F%DF%9BB%E0%9CC%E1%A5U%CB%871%CF%8B5%D1%8D6%DB%97%40%DF%9AB%DD%99B%E3%B0p%E7%CC%AE%FF%FF%FF%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00!%F9%04%01%00%00%2F%00%2C%00%00%00%00%10%00%10%00%00%06a%C0%97pH%2C%1A%8FH%A1%ABTr%25%87%2B%04%82%F4%7C%B9X%91%08%CB%99%1C!%26%13%84*iJ9(%15G%CA%84%14%01%1A%97%0C%03%80%3A%9A%3E%81%84%3E%11%08%B1%8B%20%02%12%0F%18%1A%0F%0A%03'F%1C%04%0B%10%16%18%10%0B%05%1CF%1D-%06%07%9A%9A-%1EG%1B%A0%A1%A0U%A4%A5%A6BA%00%3B\");" +
- " background-repeat: no-repeat;" +
- " background-position: 4px center;" +
- "}" +
- "" +
- ".ace_editor .ace_sb {" +
- " position: absolute;" +
- " overflow-x: hidden;" +
- " overflow-y: scroll;" +
- " right: 0;" +
- "}" +
- "" +
- ".ace_editor .ace_sb div {" +
- " position: absolute;" +
- " width: 1px;" +
- " left: 0;" +
- "}" +
- "" +
- ".ace_editor .ace_print_margin_layer {" +
- " z-index: 0;" +
- " position: absolute;" +
- " overflow: hidden;" +
- " margin: 0;" +
- " left: 0;" +
- " height: 100%;" +
- " width: 100%;" +
- "}" +
- "" +
- ".ace_editor .ace_print_margin {" +
- " position: absolute;" +
- " height: 100%;" +
- "}" +
- "" +
- ".ace_editor textarea {" +
- " position: fixed;" +
- " z-index: -1;" +
- " width: 10px;" +
- " height: 30px;" +
- " opacity: 0;" +
- " background: transparent;" +
- " appearance: none;" +
- " -moz-appearance: none;" +
- " border: none;" +
- " resize: none;" +
- " outline: none;" +
- " overflow: hidden;" +
- "}" +
- "" +
- ".ace_layer {" +
- " z-index: 1;" +
- " position: absolute;" +
- " overflow: hidden;" +
- " white-space: nowrap;" +
- " height: 100%;" +
- " width: 100%;" +
- "}" +
- "" +
- ".ace_text-layer {" +
- " color: black;" +
- "}" +
- "" +
- ".ace_cjk {" +
- " display: inline-block;" +
- " text-align: center;" +
- "}" +
- "" +
- ".ace_cursor-layer {" +
- " z-index: 4;" +
- " cursor: text;" +
- " /* setting pointer-events: none; here will break mouse wheel scrolling in Safari */" +
- "}" +
- "" +
- ".ace_cursor {" +
- " z-index: 4;" +
- " position: absolute;" +
- "}" +
- "" +
- ".ace_cursor.ace_hidden {" +
- " opacity: 0.2;" +
- "}" +
- "" +
- ".ace_line {" +
- " white-space: nowrap;" +
- "}" +
- "" +
- ".ace_marker-layer {" +
- " cursor: text;" +
- " pointer-events: none;" +
- "}" +
- "" +
- ".ace_marker-layer .ace_step {" +
- " position: absolute;" +
- " z-index: 3;" +
- "}" +
- "" +
- ".ace_marker-layer .ace_selection {" +
- " position: absolute;" +
- " z-index: 4;" +
- "}" +
- "" +
- ".ace_marker-layer .ace_bracket {" +
- " position: absolute;" +
- " z-index: 5;" +
- "}" +
- "" +
- ".ace_marker-layer .ace_active_line {" +
- " position: absolute;" +
- " z-index: 2;" +
- "}" +
- "" +
- ".ace_marker-layer .ace_selected_word {" +
- " position: absolute;" +
- " z-index: 6;" +
- " box-sizing: border-box;" +
- " -moz-box-sizing: border-box;" +
- " -webkit-box-sizing: border-box;" +
- "}" +
- "" +
- ".ace_line .ace_fold {" +
- " cursor: pointer;" +
- "}" +
- "" +
- ".ace_dragging .ace_marker-layer, .ace_dragging .ace_text-layer {" +
- " cursor: move;" +
- "}" +
- "");
-
-define("text/build/demo/styles.css", [], "html {" +
- " height: 100%;" +
- " width: 100%;" +
- " overflow: hidden;" +
- "}" +
- "" +
- "body {" +
- " overflow: hidden;" +
- " margin: 0;" +
- " padding: 0;" +
- " height: 100%;" +
- " width: 100%;" +
- " font-family: Arial, Helvetica, sans-serif, Tahoma, Verdana, sans-serif;" +
- " font-size: 12px;" +
- " background: rgb(14, 98, 165);" +
- " color: white;" +
- "}" +
- "" +
- "#logo {" +
- " padding: 15px;" +
- " margin-left: 65px;" +
- "}" +
- "" +
- "#editor {" +
- " position: absolute;" +
- " top: 0px;" +
- " left: 280px;" +
- " bottom: 0px;" +
- " right: 0px;" +
- " background: white;" +
- "}" +
- "" +
- "#controls {" +
- " padding: 5px;" +
- "}" +
- "" +
- "#controls td {" +
- " text-align: right;" +
- "}" +
- "" +
- "#controls td + td {" +
- " text-align: left;" +
- "}" +
- "" +
- "#cockpitInput {" +
- " position: absolute;" +
- " left: 280px;" +
- " right: 0px;" +
- " bottom: 0;" +
- "" +
- " border: none; outline: none;" +
- " font-family: consolas, courier, monospace;" +
- " font-size: 120%;" +
- "}" +
- "" +
- "#cockpitOutput {" +
- " padding: 10px;" +
- " margin: 0 15px;" +
- " border: 1px solid #AAA;" +
- " -moz-border-radius-topleft: 10px;" +
- " -moz-border-radius-topright: 10px;" +
- " border-top-left-radius: 4px; border-top-right-radius: 4px;" +
- " background: #DDD; color: #000;" +
- "}");
-
-define("text/build_support/style.css", [], "body {" +
- " margin:0;" +
- " padding:0;" +
- " background-color:#e6f5fc;" +
- " " +
- "}" +
- "" +
- "H2, H3, H4 {" +
- " font-family:Trebuchet MS;" +
- " font-weight:bold;" +
- " margin:0;" +
- " padding:0;" +
- "}" +
- "" +
- "H2 {" +
- " font-size:28px;" +
- " color:#263842;" +
- " padding-bottom:6px;" +
- "}" +
- "" +
- "H3 {" +
- " font-family:Trebuchet MS;" +
- " font-weight:bold;" +
- " font-size:22px;" +
- " color:#253741;" +
- " margin-top:43px;" +
- " margin-bottom:8px;" +
- "}" +
- "" +
- "H4 {" +
- " font-family:Trebuchet MS;" +
- " font-weight:bold;" +
- " font-size:21px;" +
- " color:#222222;" +
- " margin-bottom:4px;" +
- "}" +
- "" +
- "P {" +
- " padding:13px 0;" +
- " margin:0;" +
- " line-height:22px;" +
- "}" +
- "" +
- "UL{" +
- " line-height : 22px;" +
- "}" +
- "" +
- "PRE{" +
- " background : #333;" +
- " color : white;" +
- " padding : 10px;" +
- "}" +
- "" +
- "#header {" +
- " height : 227px;" +
- " position:relative;" +
- " overflow:hidden;" +
- " background: url(images/background.png) repeat-x 0 0;" +
- " border-bottom:1px solid #c9e8fa; " +
- "}" +
- "" +
- "#header .content .signature {" +
- " font-family:Trebuchet MS;" +
- " font-size:11px;" +
- " color:#ebe4d6;" +
- " position:absolute;" +
- " bottom:5px;" +
- " right:42px;" +
- " letter-spacing : 1px;" +
- "}" +
- "" +
- ".content {" +
- " width:970px;" +
- " position:relative;" +
- " overflow:hidden;" +
- " margin:0 auto;" +
- "}" +
- "" +
- "#header .content {" +
- " height:184px;" +
- " margin-top:22px;" +
- "}" +
- "" +
- "#header .content .logo {" +
- " width : 282px;" +
- " height : 184px;" +
- " background:url(images/logo.png) no-repeat 0 0;" +
- " position:absolute;" +
- " top:0;" +
- " left:0;" +
- "}" +
- "" +
- "#header .content .title {" +
- " width : 605px;" +
- " height : 58px;" +
- " background:url(images/ace.png) no-repeat 0 0;" +
- " position:absolute;" +
- " top:98px;" +
- " left:329px;" +
- "}" +
- "" +
- "#wrapper {" +
- " background:url(images/body_background.png) repeat-x 0 0;" +
- " min-height:250px;" +
- "}" +
- "" +
- "#wrapper .content {" +
- " font-family:Arial;" +
- " font-size:14px;" +
- " color:#222222;" +
- " width:1000px;" +
- "}" +
- "" +
- "#wrapper .content .column1 {" +
- " position:relative;" +
- " overflow:hidden;" +
- " float:left;" +
- " width:315px;" +
- " margin-right:31px;" +
- "}" +
- "" +
- "#wrapper .content .column2 {" +
- " position:relative;" +
- " overflow:hidden;" +
- " float:left;" +
- " width:600px;" +
- " padding-top:47px;" +
- "}" +
- "" +
- ".fork_on_github {" +
- " width:310px;" +
- " height:80px;" +
- " background:url(images/fork_on_github.png) no-repeat 0 0;" +
- " position:relative;" +
- " overflow:hidden;" +
- " margin-top:49px;" +
- " cursor:pointer;" +
- "}" +
- "" +
- ".fork_on_github:hover {" +
- " background-position:0 -80px;" +
- "}" +
- "" +
- ".divider {" +
- " height:3px;" +
- " background-color:#bedaea;" +
- " margin-bottom:3px;" +
- "}" +
- "" +
- ".menu {" +
- " padding:23px 0 0 24px;" +
- "}" +
- "" +
- "UL.content-list {" +
- " padding:15px;" +
- " margin:0;" +
- "}" +
- "" +
- "UL.menu-list {" +
- " padding:0;" +
- " margin:0 0 20px 0;" +
- " list-style-type:none;" +
- " line-height : 16px;" +
- "}" +
- "" +
- "UL.menu-list LI {" +
- " color:#2557b4;" +
- " font-family:Trebuchet MS;" +
- " font-size:14px;" +
- " padding:7px 0;" +
- " border-bottom:1px dotted #d6e2e7;" +
- "}" +
- "" +
- "UL.menu-list LI:last-child {" +
- " border-bottom:0;" +
- "}" +
- "" +
- "A {" +
- " color:#2557b4;" +
- " text-decoration:none;" +
- "}" +
- "" +
- "A:hover {" +
- " text-decoration:underline;" +
- "}" +
- "" +
- "P#first{" +
- " background : rgba(255,255,255,0.5);" +
- " padding : 20px;" +
- " font-size : 16px;" +
- " line-height : 24px;" +
- " margin : 0 0 20px 0;" +
- "}" +
- "" +
- "#footer {" +
- " height:40px;" +
- " position:relative;" +
- " overflow:hidden;" +
- " background:url(images/bottombar.png) repeat-x 0 0;" +
- " position:relative;" +
- " margin-top:40px;" +
- "}" +
- "" +
- "UL.menu-footer {" +
- " padding:0;" +
- " margin:8px 11px 0 0;" +
- " list-style-type:none;" +
- " float:right;" +
- "}" +
- "" +
- "UL.menu-footer LI {" +
- " color:white;" +
- " font-family:Arial;" +
- " font-size:12px;" +
- " display:inline-block;" +
- " margin:0 1px;" +
- "}" +
- "" +
- "UL.menu-footer LI A {" +
- " color:#8dd0ff;" +
- " text-decoration:none;" +
- "}" +
- "" +
- "UL.menu-footer LI A:hover {" +
- " text-decoration:underline;" +
- "}" +
- "" +
- "" +
- "" +
- "" +
- "");
-
-define("text/demo/styles.css", [], "html {" +
- " height: 100%;" +
- " width: 100%;" +
- " overflow: hidden;" +
- "}" +
- "" +
- "body {" +
- " overflow: hidden;" +
- " margin: 0;" +
- " padding: 0;" +
- " height: 100%;" +
- " width: 100%;" +
- " font-family: Arial, Helvetica, sans-serif, Tahoma, Verdana, sans-serif;" +
- " font-size: 12px;" +
- " background: rgb(14, 98, 165);" +
- " color: white;" +
- "}" +
- "" +
- "#logo {" +
- " padding: 15px;" +
- " margin-left: 65px;" +
- "}" +
- "" +
- "#editor {" +
- " position: absolute;" +
- " top: 0px;" +
- " left: 280px;" +
- " bottom: 0px;" +
- " right: 0px;" +
- " background: white;" +
- "}" +
- "" +
- "#controls {" +
- " padding: 5px;" +
- "}" +
- "" +
- "#controls td {" +
- " text-align: right;" +
- "}" +
- "" +
- "#controls td + td {" +
- " text-align: left;" +
- "}" +
- "" +
- "#cockpitInput {" +
- " position: absolute;" +
- " left: 280px;" +
- " right: 0px;" +
- " bottom: 0;" +
- "" +
- " border: none; outline: none;" +
- " font-family: consolas, courier, monospace;" +
- " font-size: 120%;" +
- "}" +
- "" +
- "#cockpitOutput {" +
- " padding: 10px;" +
- " margin: 0 15px;" +
- " border: 1px solid #AAA;" +
- " -moz-border-radius-topleft: 10px;" +
- " -moz-border-radius-topright: 10px;" +
- " border-top-left-radius: 4px; border-top-right-radius: 4px;" +
- " background: #DDD; color: #000;" +
- "}");
-
-define("text/deps/csslint/demos/demo.css", [], "@charset \"UTF-8\";" +
- "" +
- "@import url(\"booya.css\") print,screen;" +
- "@import \"whatup.css\" screen;" +
- "@import \"wicked.css\";" +
- "" +
- "@namespace \"http://www.w3.org/1999/xhtml\";" +
- "@namespace svg \"http://www.w3.org/2000/svg\";" +
- "" +
- "li.inline #foo {" +
- " background: url(\"something.png\");" +
- " display: inline;" +
- " padding-left: 3px;" +
- " padding-right: 7px;" +
- " border-right: 1px dotted #066;" +
- "}" +
- "" +
- "li.last.first {" +
- " display: inline;" +
- " padding-left: 3px !important;" +
- " padding-right: 3px;" +
- " border-right: 0px;" +
- "}" +
- "" +
- "@media print {" +
- " li.inline {" +
- " color: black;" +
- " }" +
- "" +
- "" +
- "@charset \"UTF-8\"; " +
- "" +
- "@page {" +
- " margin: 10%;" +
- " counter-increment: page;" +
- "" +
- " @top-center {" +
- " font-family: sans-serif;" +
- " font-weight: bold;" +
- " font-size: 2em;" +
- " content: counter(page);" +
- " }" +
- "}");
-
-define("text/deps/requirejs/dist/ie.css", [], "" +
- "body .sect {" +
- " display: none;" +
- "}" +
- "" +
- "" +
- "#content ul.index {" +
- " list-style: none;" +
- "}" +
- "");
-
-define("text/deps/requirejs/dist/main.css", [], "@font-face {" +
- " font-family: Inconsolata;" +
- " src: url(\"fonts/Inconsolata.ttf\");" +
- "}" +
- "" +
- "* {" +
- " -moz-box-sizing: border-box;" +
- " -webkit-box-sizing: border-box;" +
- " box-sizing: border-box;" +
- " margin: 0;" +
- " padding: 0;" +
- "}" +
- "" +
- "body {" +
- " font-size: 12px;" +
- " line-height: 21px;" +
- " background-color: #fff;" +
- " font-family: \"Helvetica Neue\", Helvetica, Arial, Verdana, sans-serif;" +
- " color: #0a0a0a;" +
- "}" +
- "" +
- "#wrapper {" +
- " margin: 0;" +
- "}" +
- "" +
- "#grid {" +
- " position: fixed;" +
- " top: 0;" +
- " left: 0;" +
- " width: 796px;" +
- " background-image: url(\"i/grid.png\");" +
- " z-index: 100;" +
- "}" +
- "" +
- "pre {" +
- " line-height: 18px;" +
- " font-size: 13px;" +
- " margin: 7px 0 21px;" +
- " padding: 5px 10px;" +
- " overflow: auto;" +
- " background-color: #fafafa;" +
- " border: 1px solid #e6e6e6;" +
- " -moz-border-radius: 5px;" +
- " -webkit-border-radius: 5px;" +
- " border-radius: 5px;" +
- " -moz-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.05);" +
- " -webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.05);" +
- " box-shadow: 0 2px 5px rgba(0, 0, 0, 0.05);" +
- "}" +
- "" +
- "/*" +
- " typography stuff" +
- "*/" +
- ".mono {" +
- " font-family: \"Inconsolata\", Andale Mono, Monaco, Monospace;" +
- "}" +
- "" +
- ".sans {" +
- " font-family: \"Helvetica Neue\", Helvetica, Arial, Verdana, sans-serif;" +
- "}" +
- "" +
- ".serif {" +
- " font-family: \"Georgia\", Times New Roman, Times, serif;" +
- "}" +
- "" +
- "a {" +
- " color: #2e87dd;" +
- " text-decoration: none;" +
- "}" +
- "" +
- "a:hover {" +
- " text-decoration: underline;" +
- "}" +
- "" +
- "/*" +
- " navigation" +
- "*/" +
- "" +
- "#navBg {" +
- " background-color: #f2f2f2;" +
- " background-image: url(\"i/shadow.png\");" +
- " background-position: right top;" +
- " background-repeat: repeat-y;" +
- " width: 220px;" +
- " position: fixed;" +
- " top: 0;" +
- " left: 0;" +
- " z-index: 0;" +
- "}" +
- "" +
- "#nav {" +
- " background-image: url(\"i/logo.png\");" +
- " background-repeat: no-repeat;" +
- " background-position: center 10px;" +
- " width: 220px;" +
- " float: left;" +
- " margin: 0;" +
- " padding: 150px 20px 0;" +
- " font-size: 13px;" +
- " text-shadow: 1px 1px #fff;" +
- " position: relative;" +
- " z-index: 1;" +
- "}" +
- "" +
- "#nav .homeImageLink {" +
- " position: absolute;" +
- " display: block;" +
- " top: 10px;" +
- " left: 0;" +
- " width: 220px;" +
- " height: 138px;" +
- "}" +
- "#nav ul {" +
- " list-style-type:none;" +
- " padding: 0;" +
- " margin: 21px 0 0 0;" +
- "}" +
- "" +
- "#nav ul li {" +
- " width: 100%;" +
- "}" +
- "" +
- "#nav ul li.version {" +
- " text-align: center;" +
- " color: #4d4d4d;" +
- "}" +
- "" +
- "#nav h1 {" +
- " color: #4d4d4d;" +
- " text-align: center;" +
- " font-size: 15px;" +
- " font-weight: normal;" +
- " text-transform: uppercase;" +
- " letter-spacing: 3px;" +
- "}" +
- "" +
- "span.spacer {" +
- " color: #2e87dd;" +
- " margin: 0 3px 0 5px;" +
- " background-image: url(\"i/dot.png\");" +
- " background-repeat: repeat-x;" +
- " background-position: left 13px;" +
- "}" +
- "" +
- "/*" +
- " icons" +
- "*/" +
- "" +
- "span.icon {" +
- " width: 16px;" +
- " display: block;" +
- " background-image: url(\"i/sprite.png\");" +
- " background-repeat: no-repeat;" +
- "}" +
- "" +
- "span.icon.home {" +
- " background-position: center 5px;" +
- "}" +
- "" +
- "span.icon.start {" +
- " background-position: center -27px;" +
- "}" +
- "" +
- "span.icon.download {" +
- " background-position: center -59px;" +
- "}" +
- "" +
- "span.icon.api {" +
- " background-position: center -89px;" +
- "}" +
- "" +
- "span.icon.optimize {" +
- " background-position: center -119px;" +
- "}" +
- "" +
- "span.icon.script {" +
- " background-position: center -150px;" +
- "}" +
- "" +
- "span.icon.question {" +
- " background-position: center -182px;" +
- "}" +
- "" +
- "span.icon.requirement {" +
- " background-position: center -214px;" +
- "}" +
- "" +
- "span.icon.history {" +
- " background-position: center -247px;" +
- "}" +
- "" +
- "span.icon.help {" +
- " background-position: center -279px;" +
- "}" +
- "" +
- "span.icon.blog {" +
- " background-position: center -311px;" +
- "}" +
- "" +
- "span.icon.twitter {" +
- " background-position: center -343px;" +
- "}" +
- "" +
- "span.icon.git {" +
- " background-position: center -375px;" +
- "}" +
- "" +
- "span.icon.fork {" +
- " background-position: center -407px;" +
- "}" +
- "" +
- "/*" +
- " content" +
- "*/" +
- "" +
- "#content {" +
- " margin: 0 0 0 220px;" +
- " padding: 0 20px;" +
- " background-color: #fff;" +
- " font-family: \"Georgia\", Times New Roman, Times, serif;" +
- " position: relative;" +
- "}" +
- "" +
- "#content p {" +
- " padding: 7px 0;" +
- " color: #333;" +
- " font-size: 14px;" +
- "}" +
- "" +
- "#content h1," +
- "#content h2," +
- "#content h3," +
- "#content h4," +
- "#content h5 {" +
- " font-weight: normal;" +
- " padding: 21px 0 7px;" +
- "}" +
- "" +
- "#content h1 {" +
- " font-size: 21px;" +
- "}" +
- "" +
- "#content h2 {" +
- " padding: 0 0 18px 0;" +
- " margin: 0 0 7px 0;" +
- " font-weight: normal;" +
- " font-size: 21px;" +
- " line-height: 24px;" +
- " text-align: center;" +
- " color: #222;" +
- " background-image: url(\"i/arrow.png\");" +
- " background-repeat: no-repeat;" +
- " background-position: center bottom;" +
- " font-family: \"Inconsolata\", Andale Mono, Monaco, Monospace;" +
- " text-transform: uppercase;" +
- " letter-spacing: 2px;" +
- " text-shadow: 1px 1px 0 #fff;" +
- "}" +
- "" +
- "#content h2 a {" +
- " color: #222;" +
- "}" +
- "" +
- "#content h2 a:hover," +
- "#content h3 a:hover," +
- "#content h4 a:hover {" +
- " text-decoration: none;" +
- "}" +
- "" +
- "span.sectionMark {" +
- " display: block;" +
- " color: #aaa;" +
- " text-shadow: 1px 1px 0 #fff;" +
- " font-size: 15px;" +
- " font-family: \"Inconsolata\", Andale Mono, Monaco, Monospace;" +
- "}" +
- "" +
- "#content h3 {" +
- " font-size: 17px;" +
- "}" +
- "" +
- "#content h4 {" +
- " padding-top: 0;" +
- " font-size: 15px;" +
- "}" +
- "" +
- "#content h5 {" +
- " font-size: 10px;" +
- "}" +
- "" +
- "#content ul {" +
- " list-style-type: disc;" +
- "}" +
- "" +
- "#content ul," +
- "#content ol {" +
- " /* border-left: 1px solid #333; */" +
- " color: #333;" +
- " font-size: 14px;" +
- " list-style-position: outside;" +
- " margin: 7px 0 21px 0;" +
- " /* padding: 0 0 0 28px; */" +
- "}" +
- "" +
- "#content ul {" +
- " font-style: italic;" +
- "}" +
- "" +
- "#content ol {" +
- " border: none;" +
- " list-style-position: inside;" +
- " padding: 0;" +
- " font-family: \"Georgia\", Times New Roman, Times, serif;" +
- "}" +
- "" +
- "#content ul ul," +
- "#content ol ol {" +
- " border: none;" +
- " padding: 0;" +
- " margin: 0 0 0 28px;" +
- "}" +
- "" +
- "#content .section {" +
- " padding: 48px 0;" +
- " background-image: url(\"i/line.png\");" +
- " background-repeat: no-repeat;" +
- " background-position: center bottom;" +
- " width: 576px;" +
- " margin: 0 auto;" +
- "}" +
- "" +
- "#content .section .subSection {" +
- " padding: 0 0 0 48px;" +
- " margin: 28px 0 0 0;" +
- " display: block;" +
- " border-left: 2px solid #ddd;" +
- "}" +
- "" +
- "#content .section:last-child {" +
- " background-image: none;" +
- "}" +
- "" +
- "#content .note {" +
- " color: #222;" +
- " background-color: #ffff99;" +
- " padding: 5px 10px;" +
- " margin: 7px 0;" +
- " display: inline-block;" +
- "}" +
- "" +
- "/*" +
- " page directory" +
- "*/" +
- "" +
- "#content #directory.section {" +
- " background-color: #fff;" +
- " width: 576px;" +
- "}" +
- "" +
- "#content #directory.section ul ul ul {" +
- " margin: 0 0 0 48px;" +
- "}" +
- "" +
- "#content #directory.section ul ul li {" +
- " background-image: url(\"i/sprite.png\");" +
- " background-repeat: no-repeat;" +
- " background-position: left -437px;" +
- " padding-left: 18px;" +
- " font-style: normal;" +
- "}" +
- "" +
- "#content #directory h1 {" +
- " padding: 0 0 65px 0;" +
- " margin: 0 0 14px 0;" +
- " font-weight: normal;" +
- " font-size: 21px;" +
- " text-align: center;" +
- " text-transform: uppercase;" +
- " letter-spacing: 2px;" +
- " color: #222;" +
- " background-image: url(\"i/arrow-x.png\");" +
- " background-repeat: no-repeat;" +
- " background-position: center bottom;" +
- " font-family: \"Inconsolata\", Andale Mono, Monaco, Monospace;" +
- "}" +
- "" +
- "" +
- "#content ul.index {" +
- " padding: 0;" +
- " background-color: transparent;" +
- " border: none;" +
- " -moz-box-shadow: none;" +
- " font-style: normal;" +
- " font-family: \"Inconsolata\", Andale Mono, Monaco, Monospace;" +
- "}" +
- "" +
- "#content ul.index li {" +
- " width: 100%;" +
- " font-size: 15px;" +
- " color: #333;" +
- " padding: 0 0 7px 0;" +
- "}" +
- "" +
- "" +
- "/*" +
- " intro page specific" +
- "*/" +
- "" +
- "#content #intro {" +
- " width: 576px;" +
- " margin: 0 auto;" +
- " padding: 21px 0;" +
- "}" +
- "" +
- "#content #intro p," +
- "#content #intro h1 {" +
- " font-size: 19px;" +
- " line-height: 28px;" +
- " color: green;" +
- " letter-spacing: 2px;" +
- " padding: 0 0 28px 0;" +
- "}" +
- "" +
- "#content #intro p:last-child," +
- "#content #intro h1:last-child {" +
- " padding: 0;" +
- "}" +
- "" +
- "#content #intro p a {" +
- " color: green;" +
- " text-decoration: underline;" +
- "}" +
- "" +
- "/*" +
- " download page" +
- "*/" +
- "" +
- "#content h4 a.download {" +
- " -webkit-border-radius: 5px;" +
- " -moz-border-radius: 5px;" +
- " background-color: #F2F2F2;" +
- " background-image: url(\"i/sprite.png\"), -moz-linear-gradient(center top , #FAFAFA 0%, #F2F2F2 100%);" +
- " background-image: url(\"i/sprite.png\"), -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #f2f2f2));" +
- " background-position: 7px -58px, center center;" +
- " background-repeat: no-repeat, no-repeat;" +
- " border: 1px solid #CCCCCC;" +
- " color: #333333;" +
- " font-size: 12px;" +
- " margin: 0 0 0 5px;" +
- " padding: 0 10px 0 25px;" +
- " text-shadow: 1px 1px 0 #FFFFFF;" +
- "}" +
- "" +
- "/*" +
- " footer" +
- "*/" +
- "#footer {" +
- " color: #4d4d4d;" +
- " padding: 65px 20px 20px;" +
- " margin: 20px 0 0 220px;" +
- " text-align: center;" +
- " display: block;" +
- " font-size: 13px;" +
- " background-image: url(\"i/arrow-x.png\");" +
- " background-repeat: no-repeat;" +
- " background-position: center top;" +
- " background-color: #fff;" +
- "}" +
- "" +
- "#footer .line {" +
- " display: block;" +
- "}" +
- "" +
- "#footer .line a {" +
- " color: #4d4d4d;" +
- " text-decoration: underline;" +
- "}" +
- "" +
- "/*" +
- " Pygments manni style" +
- "*/" +
- "" +
- "code {background-color: #fafafa; color: #333;}" +
- "" +
- "code .comment {color: green; font-style: italic}" +
- "code .comment.preproc {color: #099; font-style: normal}" +
- "code .comment.special {font-weight: bold}" +
- "" +
- "code .keyword {color: #069; font-weight: bold}" +
- "code .keyword.pseudo {font-weight: normal}" +
- "code .keyword.type {color: #078}" +
- "" +
- "code .operator {color: #555}" +
- "code .operator.word {color: #000; font-weight: bold}" +
- "" +
- "code .name.builtin {color: #366}" +
- "code .name.function {color: #c0f}" +
- "code .name.class {color: #0a8; font-weight: bold}" +
- "code .name.namespace {color: #0cf; font-weight: bold}" +
- "code .name.exception {color: #c00; font-weight: bold}" +
- "code .name.variable {color: #033}" +
- "code .name.constant {color: #360}" +
- "code .name.label {color: #99f}" +
- "code .name.entity {color: #999; font-weight: bold}" +
- "code .name.attribute {color: #309}" +
- "code .name.tag {color: #309; font-weight: bold}" +
- "code .name.decorator {color: #99f}" +
- "" +
- "code .string {color: #c30}" +
- "code .string.doc {font-style: italic}" +
- "code .string.interpol {color: #a00}" +
- "code .string.escape {color: #c30; font-weight: bold}" +
- "code .string.regex {color: #3aa}" +
- "code .string.symbol {color: #fc3}" +
- "code .string.other {color: #c30}" +
- "" +
- "code .number {color: #f60}" +
- "" +
- "" +
- "/*" +
- " webkit scroll bars" +
- "*/" +
- "" +
- "pre::-webkit-scrollbar {" +
- " width: 6px;" +
- " height: 6px;" +
- "}" +
- "" +
- "pre::-webkit-scrollbar-button:start:decrement," +
- "pre::-webkit-scrollbar-button:end:increment {" +
- " display: block;" +
- " height: 0;" +
- " width: 0;" +
- "}" +
- "" +
- "pre::-webkit-scrollbar-button:vertical:increment," +
- "pre::-webkit-scrollbar-button:horizontal:increment {" +
- " background-color: transparent;" +
- " display: block;" +
- " height: 0;" +
- " width: 0;" +
- "}" +
- "" +
- "pre::-webkit-scrollbar-track-piece {" +
- " -webkit-border-radius: 3px;" +
- "}" +
- "" +
- "pre::-webkit-scrollbar-thumb:vertical {" +
- " background-color: #aaa;" +
- " -webkit-border-radius: 3px;" +
- "" +
- "}" +
- "" +
- "pre::-webkit-scrollbar-thumb:horizontal {" +
- " background-color: #aaa;" +
- " -webkit-border-radius: 3px;" +
- "}" +
- "" +
- "/*" +
- " hbox" +
- "*/" +
- "" +
- ".hbox {" +
- " display: -webkit-box;" +
- " -webkit-box-orient: horizontal;" +
- " -webkit-box-align: stretch;" +
- "" +
- " display: -moz-box;" +
- " -moz-box-orient: horizontal;" +
- " -moz-box-align: stretch;" +
- "" +
- " display: box;" +
- " box-orient: horizontal;" +
- " box-align: stretch;" +
- "" +
- " width: 100%;" +
- "}" +
- "" +
- ".hbox > * {" +
- " -webkit-box-flex: 0;" +
- " -moz-box-flex: 0;" +
- " box-flex: 0;" +
- " display: block;" +
- "}" +
- "" +
- ".vbox {" +
- " display: -webkit-box;" +
- " -webkit-box-orient: vertical;" +
- " -webkit-box-align: stretch;" +
- "" +
- " display: -moz-box;" +
- " -moz-box-orient: vertical;" +
- " -moz-box-align: stretch;" +
- "" +
- " display: box;" +
- " box-orient: vertical;" +
- " box-align: stretch;" +
- "}" +
- "" +
- ".vbox > * {" +
- " -webkit-box-flex: 0;" +
- " -moz-box-flex: 0;" +
- " box-flex: 0;" +
- " display: block;" +
- "}" +
- "" +
- ".spacer {" +
- " -webkit-box-flex: 1;" +
- " -moz-box-flex: 1;" +
- " box-flex: 1;" +
- "}" +
- "" +
- ".reverse {" +
- " -webkit-box-direction: reverse;" +
- " -moz-box-direction: reverse;" +
- " box-direction: reverse;" +
- "}" +
- "" +
- ".boxFlex0 {" +
- " -webkit-box-flex: 0;" +
- " -moz-box-flex: 0;" +
- " box-flex: 0;" +
- "}" +
- "" +
- ".boxFlex1, .boxFlex {" +
- " -webkit-box-flex: 1;" +
- " -moz-box-flex: 1;" +
- " box-flex: 1;" +
- "}" +
- "" +
- ".boxFlex2 {" +
- " -webkit-box-flex: 2;" +
- " -moz-box-flex: 2;" +
- " box-flex: 2;" +
- "}" +
- "" +
- ".boxGroup1 {" +
- " -webkit-box-flex-group: 1;" +
- " -moz-box-flex-group: 1;" +
- " box-flex-group: 1;" +
- "}" +
- "" +
- ".boxGroup2 {" +
- " -webkit-box-flex-group: 2;" +
- " -moz-box-flex-group: 2;" +
- " box-flex-group: 2;" +
- "}" +
- "" +
- ".start {" +
- " -webkit-box-pack: start;" +
- " -moz-box-pack: start;" +
- " box-pack: start;" +
- "}" +
- "" +
- ".end {" +
- " -webkit-box-pack: end;" +
- " -moz-box-pack: end;" +
- " box-pack: end;" +
- "}" +
- "" +
- ".center {" +
- " -webkit-box-pack: center;" +
- " -moz-box-pack: center;" +
- " box-pack: center;" +
- "}" +
- "" +
- "/*" +
- " clearfix" +
- "*/" +
- "" +
- ".clearfix:after {" +
- " content: \".\";" +
- " display: block;" +
- " clear: both;" +
- " visibility: hidden;" +
- " line-height: 0;" +
- " height: 0;" +
- "}" +
- "" +
- "html[xmlns] .clearfix {" +
- " display: block;" +
- "}" +
- "" +
- "* html .clearfix {" +
- " height: 1%;" +
- "}");
-
-define("text/lib/ace/css/editor.css", [], ".ace_editor {" +
- " position: absolute;" +
- " overflow: hidden;" +
- " font-family: Monaco, \"Menlo\", \"Courier New\", monospace;" +
- " font-size: 12px;" +
- "}" +
- "" +
- ".ace_scroller {" +
- " position: absolute;" +
- " overflow-x: scroll;" +
- " overflow-y: hidden;" +
- "}" +
- "" +
- ".ace_content {" +
- " position: absolute;" +
- " box-sizing: border-box;" +
- " -moz-box-sizing: border-box;" +
- " -webkit-box-sizing: border-box;" +
- "}" +
- "" +
- ".ace_composition {" +
- " position: absolute;" +
- " background: #555;" +
- " color: #DDD;" +
- " z-index: 4;" +
- "}" +
- "" +
- ".ace_gutter {" +
- " position: absolute;" +
- " overflow-x: hidden;" +
- " overflow-y: hidden;" +
- " height: 100%;" +
- "}" +
- "" +
- ".ace_gutter-cell.ace_error {" +
- " background-image: url(\"data:image/gif,GIF89a%10%00%10%00%D5%00%00%F5or%F5%87%88%F5nr%F4ns%EBmq%F5z%7F%DDJT%DEKS%DFOW%F1Yc%F2ah%CE(7%CE)8%D18E%DD%40M%F2KZ%EBU%60%F4%60m%DCir%C8%16(%C8%19*%CE%255%F1%3FR%F1%3FS%E6%AB%B5%CA%5DI%CEn%5E%F7%A2%9A%C9G%3E%E0a%5B%F7%89%85%F5yy%F6%82%80%ED%82%80%FF%BF%BF%E3%C4%C4%FF%FF%FF%FF%FF%FF%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00!%F9%04%01%00%00%25%00%2C%00%00%00%00%10%00%10%00%00%06p%C0%92pH%2C%1A%8F%C8%D2H%93%E1d4%23%E4%88%D3%09mB%1DN%B48%F5%90%40%60%92G%5B%94%20%3E%22%D2%87%24%FA%20%24%C5%06A%00%20%B1%07%02B%A38%89X.v%17%82%11%13q%10%0Fi%24%0F%8B%10%7BD%12%0Ei%09%92%09%0EpD%18%15%24%0A%9Ci%05%0C%18F%18%0B%07%04%01%04%06%A0H%18%12%0D%14%0D%12%A1I%B3%B4%B5IA%00%3B\");" +
- " background-repeat: no-repeat;" +
- " background-position: 4px center;" +
- "}" +
- "" +
- ".ace_gutter-cell.ace_warning {" +
- " background-image: url(\"data:image/gif,GIF89a%10%00%10%00%D5%00%00%FF%DBr%FF%DE%81%FF%E2%8D%FF%E2%8F%FF%E4%96%FF%E3%97%FF%E5%9D%FF%E6%9E%FF%EE%C1%FF%C8Z%FF%CDk%FF%D0s%FF%D4%81%FF%D5%82%FF%D5%83%FF%DC%97%FF%DE%9D%FF%E7%B8%FF%CCl%7BQ%13%80U%15%82W%16%81U%16%89%5B%18%87%5B%18%8C%5E%1A%94d%1D%C5%83-%C9%87%2F%C6%84.%C6%85.%CD%8B2%C9%871%CB%8A3%CD%8B5%DC%98%3F%DF%9BB%E0%9CC%E1%A5U%CB%871%CF%8B5%D1%8D6%DB%97%40%DF%9AB%DD%99B%E3%B0p%E7%CC%AE%FF%FF%FF%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00!%F9%04%01%00%00%2F%00%2C%00%00%00%00%10%00%10%00%00%06a%C0%97pH%2C%1A%8FH%A1%ABTr%25%87%2B%04%82%F4%7C%B9X%91%08%CB%99%1C!%26%13%84*iJ9(%15G%CA%84%14%01%1A%97%0C%03%80%3A%9A%3E%81%84%3E%11%08%B1%8B%20%02%12%0F%18%1A%0F%0A%03'F%1C%04%0B%10%16%18%10%0B%05%1CF%1D-%06%07%9A%9A-%1EG%1B%A0%A1%A0U%A4%A5%A6BA%00%3B\");" +
- " background-repeat: no-repeat;" +
- " background-position: 4px center;" +
- "}" +
- "" +
- ".ace_editor .ace_sb {" +
- " position: absolute;" +
- " overflow-x: hidden;" +
- " overflow-y: scroll;" +
- " right: 0;" +
- "}" +
- "" +
- ".ace_editor .ace_sb div {" +
- " position: absolute;" +
- " width: 1px;" +
- " left: 0;" +
- "}" +
- "" +
- ".ace_editor .ace_print_margin_layer {" +
- " z-index: 0;" +
- " position: absolute;" +
- " overflow: hidden;" +
- " margin: 0;" +
- " left: 0;" +
- " height: 100%;" +
- " width: 100%;" +
- "}" +
- "" +
- ".ace_editor .ace_print_margin {" +
- " position: absolute;" +
- " height: 100%;" +
- "}" +
- "" +
- ".ace_editor textarea {" +
- " position: fixed;" +
- " z-index: -1;" +
- " width: 10px;" +
- " height: 30px;" +
- " opacity: 0;" +
- " background: transparent;" +
- " appearance: none;" +
- " -moz-appearance: none;" +
- " border: none;" +
- " resize: none;" +
- " outline: none;" +
- " overflow: hidden;" +
- "}" +
- "" +
- ".ace_layer {" +
- " z-index: 1;" +
- " position: absolute;" +
- " overflow: hidden;" +
- " white-space: nowrap;" +
- " height: 100%;" +
- " width: 100%;" +
- "}" +
- "" +
- ".ace_text-layer {" +
- " color: black;" +
- "}" +
- "" +
- ".ace_cjk {" +
- " display: inline-block;" +
- " text-align: center;" +
- "}" +
- "" +
- ".ace_cursor-layer {" +
- " z-index: 4;" +
- " cursor: text;" +
- " /* setting pointer-events: none; here will break mouse wheel scrolling in Safari */" +
- "}" +
- "" +
- ".ace_cursor {" +
- " z-index: 4;" +
- " position: absolute;" +
- "}" +
- "" +
- ".ace_cursor.ace_hidden {" +
- " opacity: 0.2;" +
- "}" +
- "" +
- ".ace_line {" +
- " white-space: nowrap;" +
- "}" +
- "" +
- ".ace_marker-layer {" +
- " cursor: text;" +
- " pointer-events: none;" +
- "}" +
- "" +
- ".ace_marker-layer .ace_step {" +
- " position: absolute;" +
- " z-index: 3;" +
- "}" +
- "" +
- ".ace_marker-layer .ace_selection {" +
- " position: absolute;" +
- " z-index: 4;" +
- "}" +
- "" +
- ".ace_marker-layer .ace_bracket {" +
- " position: absolute;" +
- " z-index: 5;" +
- "}" +
- "" +
- ".ace_marker-layer .ace_active_line {" +
- " position: absolute;" +
- " z-index: 2;" +
- "}" +
- "" +
- ".ace_marker-layer .ace_selected_word {" +
- " position: absolute;" +
- " z-index: 6;" +
- " box-sizing: border-box;" +
- " -moz-box-sizing: border-box;" +
- " -webkit-box-sizing: border-box;" +
- "}" +
- "" +
- ".ace_line .ace_fold {" +
- " cursor: pointer;" +
- "}" +
- "" +
- ".ace_dragging .ace_marker-layer, .ace_dragging .ace_text-layer {" +
- " cursor: move;" +
- "}" +
- "");
-
-define("text/node_modules/uglify-js/docstyle.css", [], "html { font-family: \"Lucida Grande\",\"Trebuchet MS\",sans-serif; font-size: 12pt; }" +
- "body { max-width: 60em; }" +
- ".title { text-align: center; }" +
- ".todo { color: red; }" +
- ".done { color: green; }" +
- ".tag { background-color:lightblue; font-weight:normal }" +
- ".target { }" +
- ".timestamp { color: grey }" +
- ".timestamp-kwd { color: CadetBlue }" +
- "p.verse { margin-left: 3% }" +
- "pre {" +
- " border: 1pt solid #AEBDCC;" +
- " background-color: #F3F5F7;" +
- " padding: 5pt;" +
- " font-family: monospace;" +
- " font-size: 90%;" +
- " overflow:auto;" +
- "}" +
- "pre.src {" +
- " background-color: #eee; color: #112; border: 1px solid #000;" +
- "}" +
- "table { border-collapse: collapse; }" +
- "td, th { vertical-align: top; }" +
- "dt { font-weight: bold; }" +
- "div.figure { padding: 0.5em; }" +
- "div.figure p { text-align: center; }" +
- ".linenr { font-size:smaller }" +
- ".code-highlighted {background-color:#ffff00;}" +
- ".org-info-js_info-navigation { border-style:none; }" +
- "#org-info-js_console-label { font-size:10px; font-weight:bold;" +
- " white-space:nowrap; }" +
- ".org-info-js_search-highlight {background-color:#ffff00; color:#000000;" +
- " font-weight:bold; }" +
- "" +
- "sup {" +
- " vertical-align: baseline;" +
- " position: relative;" +
- " top: -0.5em;" +
- " font-size: 80%;" +
- "}" +
- "" +
- "sup a:link, sup a:visited {" +
- " text-decoration: none;" +
- " color: #c00;" +
- "}" +
- "" +
- "sup a:before { content: \"[\"; color: #999; }" +
- "sup a:after { content: \"]\"; color: #999; }" +
- "" +
- "h1.title { border-bottom: 4px solid #000; padding-bottom: 5px; margin-bottom: 2em; }" +
- "" +
- "#postamble {" +
- " color: #777;" +
- " font-size: 90%;" +
- " padding-top: 1em; padding-bottom: 1em; border-top: 1px solid #999;" +
- " margin-top: 2em;" +
- " padding-left: 2em;" +
- " padding-right: 2em;" +
- " text-align: right;" +
- "}" +
- "" +
- "#postamble p { margin: 0; }" +
- "" +
- "#footnotes { border-top: 1px solid #000; }" +
- "" +
- "h1 { font-size: 200% }" +
- "h2 { font-size: 175% }" +
- "h3 { font-size: 150% }" +
- "h4 { font-size: 125% }" +
- "" +
- "h1, h2, h3, h4 { font-family: \"Bookman\",Georgia,\"Times New Roman\",serif; font-weight: normal; }" +
- "" +
- "@media print {" +
- " html { font-size: 11pt; }" +
- "}" +
- "");
-
-define("text/support/cockpit/lib/cockpit/ui/cli_view.css", [], "" +
- "#cockpitInput { padding-left: 16px; }" +
- "" +
- ".cptOutput { overflow: auto; position: absolute; z-index: 999; display: none; }" +
- "" +
- ".cptCompletion { padding: 0; position: absolute; z-index: -1000; }" +
- ".cptCompletion.VALID { background: #FFF; }" +
- ".cptCompletion.INCOMPLETE { background: #DDD; }" +
- ".cptCompletion.INVALID { background: #DDD; }" +
- ".cptCompletion span { color: #FFF; }" +
- ".cptCompletion span.INCOMPLETE { color: #DDD; border-bottom: 2px dotted #F80; }" +
- ".cptCompletion span.INVALID { color: #DDD; border-bottom: 2px dotted #F00; }" +
- "span.cptPrompt { color: #66F; font-weight: bold; }" +
- "" +
- "" +
- ".cptHints {" +
- " color: #000;" +
- " position: absolute;" +
- " border: 1px solid rgba(230, 230, 230, 0.8);" +
- " background: rgba(250, 250, 250, 0.8);" +
- " -moz-border-radius-topleft: 10px;" +
- " -moz-border-radius-topright: 10px;" +
- " border-top-left-radius: 10px; border-top-right-radius: 10px;" +
- " z-index: 1000;" +
- " padding: 8px;" +
- " display: none;" +
- "}" +
- "" +
- ".cptFocusPopup { display: block; }" +
- ".cptFocusPopup.cptNoPopup { display: none; }" +
- "" +
- ".cptHints ul { margin: 0; padding: 0 15px; }" +
- "" +
- ".cptGt { font-weight: bold; font-size: 120%; }" +
- "");
-
-define("text/support/cockpit/lib/cockpit/ui/request_view.css", [], "" +
- ".cptRowIn {" +
- " display: box; display: -moz-box; display: -webkit-box;" +
- " box-orient: horizontal; -moz-box-orient: horizontal; -webkit-box-orient: horizontal;" +
- " box-align: center; -moz-box-align: center; -webkit-box-align: center;" +
- " color: #333;" +
- " background-color: #EEE;" +
- " width: 100%;" +
- " font-family: consolas, courier, monospace;" +
- "}" +
- ".cptRowIn > * { padding-left: 2px; padding-right: 2px; }" +
- ".cptRowIn > img { cursor: pointer; }" +
- ".cptHover { display: none; }" +
- ".cptRowIn:hover > .cptHover { display: block; }" +
- ".cptRowIn:hover > .cptHover.cptHidden { display: none; }" +
- ".cptOutTyped {" +
- " box-flex: 1; -moz-box-flex: 1; -webkit-box-flex: 1;" +
- " font-weight: bold; color: #000; font-size: 120%;" +
- "}" +
- ".cptRowOutput { padding-left: 10px; line-height: 1.2em; }" +
- ".cptRowOutput strong," +
- ".cptRowOutput b," +
- ".cptRowOutput th," +
- ".cptRowOutput h1," +
- ".cptRowOutput h2," +
- ".cptRowOutput h3 { color: #000; }" +
- ".cptRowOutput a { font-weight: bold; color: #666; text-decoration: none; }" +
- ".cptRowOutput a: hover { text-decoration: underline; cursor: pointer; }" +
- ".cptRowOutput input[type=password]," +
- ".cptRowOutput input[type=text]," +
- ".cptRowOutput textarea {" +
- " color: #000; font-size: 120%;" +
- " background: transparent; padding: 3px;" +
- " border-radius: 5px; -moz-border-radius: 5px; -webkit-border-radius: 5px;" +
- "}" +
- ".cptRowOutput table," +
- ".cptRowOutput td," +
- ".cptRowOutput th { border: 0; padding: 0 2px; }" +
- ".cptRowOutput .right { text-align: right; }" +
- "");
-
-define("text/tool/Theme.tmpl.css", [], ".%cssClass% .ace_editor {" +
- " border: 2px solid rgb(159, 159, 159);" +
- "}" +
- "" +
- ".%cssClass% .ace_editor.ace_focus {" +
- " border: 2px solid #327fbd;" +
- "}" +
- "" +
- ".%cssClass% .ace_gutter {" +
- " width: 50px;" +
- " background: #e8e8e8;" +
- " color: #333;" +
- " overflow : hidden;" +
- "}" +
- "" +
- ".%cssClass% .ace_gutter-layer {" +
- " width: 100%;" +
- " text-align: right;" +
- "}" +
- "" +
- ".%cssClass% .ace_gutter-layer .ace_gutter-cell {" +
- " padding-right: 6px;" +
- "}" +
- "" +
- ".%cssClass% .ace_print_margin {" +
- " width: 1px;" +
- " background: %printMargin%;" +
- "}" +
- "" +
- ".%cssClass% .ace_scroller {" +
- " background-color: %background%;" +
- "}" +
- "" +
- ".%cssClass% .ace_text-layer {" +
- " cursor: text;" +
- " color: %foreground%;" +
- "}" +
- "" +
- ".%cssClass% .ace_cursor {" +
- " border-left: 2px solid %cursor%;" +
- "}" +
- "" +
- ".%cssClass% .ace_cursor.ace_overwrite {" +
- " border-left: 0px;" +
- " border-bottom: 1px solid %overwrite%;" +
- "}" +
- " " +
- ".%cssClass% .ace_marker-layer .ace_selection {" +
- " background: %selection%;" +
- "}" +
- "" +
- ".%cssClass% .ace_marker-layer .ace_step {" +
- " background: %step%;" +
- "}" +
- "" +
- ".%cssClass% .ace_marker-layer .ace_bracket {" +
- " margin: -1px 0 0 -1px;" +
- " border: 1px solid %bracket%;" +
- "}" +
- "" +
- ".%cssClass% .ace_marker-layer .ace_active_line {" +
- " background: %active_line%;" +
- "}" +
- "" +
- " " +
- ".%cssClass% .ace_invisible {" +
- " %invisible%" +
- "}" +
- "" +
- ".%cssClass% .ace_keyword {" +
- " %keyword%" +
- "}" +
- "" +
- ".%cssClass% .ace_keyword.ace_operator {" +
- " %keyword.operator%" +
- "}" +
- "" +
- ".%cssClass% .ace_constant {" +
- " %constant%" +
- "}" +
- "" +
- ".%cssClass% .ace_constant.ace_language {" +
- " %constant.language%" +
- "}" +
- "" +
- ".%cssClass% .ace_constant.ace_library {" +
- " %constant.library%" +
- "}" +
- "" +
- ".%cssClass% .ace_constant.ace_numeric {" +
- " %constant.numeric%" +
- "}" +
- "" +
- ".%cssClass% .ace_invalid {" +
- " %invalid%" +
- "}" +
- "" +
- ".%cssClass% .ace_invalid.ace_illegal {" +
- " %invalid.illegal%" +
- "}" +
- "" +
- ".%cssClass% .ace_invalid.ace_deprecated {" +
- " %invalid.deprecated%" +
- "}" +
- "" +
- ".%cssClass% .ace_support {" +
- " %support%" +
- "}" +
- "" +
- ".%cssClass% .ace_support.ace_function {" +
- " %support.function%" +
- "}" +
- "" +
- ".%cssClass% .ace_function.ace_buildin {" +
- " %function.buildin%" +
- "}" +
- "" +
- ".%cssClass% .ace_string {" +
- " %string%" +
- "}" +
- "" +
- ".%cssClass% .ace_string.ace_regexp {" +
- " %string.regexp%" +
- "}" +
- "" +
- ".%cssClass% .ace_comment {" +
- " %comment%" +
- "}" +
- "" +
- ".%cssClass% .ace_comment.ace_doc {" +
- " %comment.doc%" +
- "}" +
- "" +
- ".%cssClass% .ace_comment.ace_doc.ace_tag {" +
- " %comment.doc.tag%" +
- "}" +
- "" +
- ".%cssClass% .ace_variable {" +
- " %variable%" +
- "}" +
- "" +
- ".%cssClass% .ace_variable.ace_language {" +
- " %variable.language%" +
- "}" +
- "" +
- ".%cssClass% .ace_xml_pe {" +
- " %xml_pe%" +
- "}" +
- "" +
- ".%cssClass% .ace_collab.ace_user1 {" +
- " %collab.user1% " +
- "}");
-
-define("text/styles.css", [], "html {" +
- " height: 100%;" +
- " width: 100%;" +
- " overflow: hidden;" +
- "}" +
- "" +
- "body {" +
- " overflow: hidden;" +
- " margin: 0;" +
- " padding: 0;" +
- " height: 100%;" +
- " width: 100%;" +
- " font-family: Arial, Helvetica, sans-serif, Tahoma, Verdana, sans-serif;" +
- " font-size: 12px;" +
- " background: rgb(14, 98, 165);" +
- " color: white;" +
- "}" +
- "" +
- "#logo {" +
- " padding: 15px;" +
- " margin-left: 65px;" +
- "}" +
- "" +
- "#editor {" +
- " position: absolute;" +
- " top: 0px;" +
- " left: 280px;" +
- " bottom: 0px;" +
- " right: 0px;" +
- " background: white;" +
- "}" +
- "" +
- "#controls {" +
- " padding: 5px;" +
- "}" +
- "" +
- "#controls td {" +
- " text-align: right;" +
- "}" +
- "" +
- "#controls td + td {" +
- " text-align: left;" +
- "}" +
- "" +
- "#cockpitInput {" +
- " position: absolute;" +
- " left: 280px;" +
- " right: 0px;" +
- " bottom: 0;" +
- "" +
- " border: none; outline: none;" +
- " font-family: consolas, courier, monospace;" +
- " font-size: 120%;" +
- "}" +
- "" +
- "#cockpitOutput {" +
- " padding: 10px;" +
- " margin: 0 15px;" +
- " border: 1px solid #AAA;" +
- " -moz-border-radius-topleft: 10px;" +
- " -moz-border-radius-topright: 10px;" +
- " border-top-left-radius: 4px; border-top-right-radius: 4px;" +
- " background: #DDD; color: #000;" +
- "}");
-
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Mozilla Skywriter.
- *
- * The Initial Developer of the Original Code is
- * Mozilla.
- * Portions created by the Initial Developer are Copyright (C) 2009
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Kevin Dangoor (kdangoor@mozilla.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-require(["ace/ace"], function(ace) {
- window.ace = ace;
-}); \ No newline at end of file
+;
+ (function() {
+ window.require(["ace/ace"], function(a) {
+ if (!window.ace)
+ window.ace = {};
+ for (var key in a) if (a.hasOwnProperty(key))
+ ace[key] = a[key];
+ });
+ })();
+ \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/ace.js b/apps/files_texteditor/js/aceeditor/ace.js
index d3b0ccc3f46..d8f08d58878 100644
--- a/apps/files_texteditor/js/aceeditor/ace.js
+++ b/apps/files_texteditor/js/aceeditor/ace.js
@@ -1 +1 @@
-(function(){var a=function(){return this}();if(a.require&&a.define)require.packaged=!0;else{var b=function(a,c,d){typeof a!="string"?b.original?b.original.apply(window,arguments):(console.error("dropping module because define wasn't a string."),console.trace()):(arguments.length==2&&(d=c),define.modules||(define.modules={}),define.modules[a]=d)};a.define&&(b.original=a.define),a.define=b;var c=function(a,b){if(Object.prototype.toString.call(a)==="[object Array]"){var e=[];for(var f=0,g=a.length;f<g;++f){var h=d(a[f]);if(!h&&c.original)return c.original.apply(window,arguments);e.push(h)}b&&b.apply(null,e)}else{if(typeof a=="string"){var i=d(a);if(!i&&c.original)return c.original.apply(window,arguments);b&&b();return i}if(c.original)return c.original.apply(window,arguments)}};a.require&&(c.original=a.require),a.require=c,require.packaged=!0;var d=function(a){var b=define.modules[a];if(b==null){console.error("Missing module: "+a);return null}if(typeof b=="function"){var c={};b(require,c,{id:a,uri:""}),define.modules[a]=c;return c}return b}}})(),define("pilot/fixoldbrowsers",["require","exports","module"],function(a,b,c){if(!Function.prototype.bind){var d=Array.prototype.slice;Function.prototype.bind=function(a){var b=this;if(typeof b.apply!="function"||typeof b.call!="function")return new TypeError;var c=d.call(arguments),e=function f(){if(this instanceof f){var a=Object.create(b.prototype);b.apply(a,c.concat(d.call(arguments)));return a}return b.call.apply(b,c.concat(d.call(arguments)))};e.length=typeof b=="function"?Math.max(b.length-c.length,0):0;return e}}var e=Function.prototype.call,f=Array.prototype,g=Object.prototype,h=e.bind(g.hasOwnProperty),i,j,k,l,m;if(m=h(g,"__defineGetter__"))i=e.bind(g.__defineGetter__),j=e.bind(g.__defineSetter__),k=e.bind(g.__lookupGetter__),l=e.bind(g.__lookupSetter__);Array.isArray||(Array.isArray=function(a){return Object.prototype.toString.call(a)==="[object Array]"}),Array.prototype.forEach||(Array.prototype.forEach=function(a,b){var c=+this.length;for(var d=0;d<c;d++)d in this&&a.call(b,this[d],d,this)}),Array.prototype.map||(Array.prototype.map=function(a){var b=+this.length;if(typeof a!="function")throw new TypeError;var c=Array(b),d=arguments[1];for(var e=0;e<b;e++)e in this&&(c[e]=a.call(d,this[e],e,this));return c}),Array.prototype.filter||(Array.prototype.filter=function(a){var b=[],c=arguments[1];for(var d=0;d<this.length;d++)a.call(c,this[d])&&b.push(this[d]);return b}),Array.prototype.every||(Array.prototype.every=function(a){var b=arguments[1];for(var c=0;c<this.length;c++)if(!a.call(b,this[c]))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(a){var b=arguments[1];for(var c=0;c<this.length;c++)if(a.call(b,this[c]))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(a){var b=+this.length;if(typeof a!="function")throw new TypeError;if(b===0&&arguments.length===1)throw new TypeError;var c=0;if(arguments.length>=2)var d=arguments[1];else do{if(c in this){d=this[c++];break}if(++c>=b)throw new TypeError}while(!0);for(;c<b;c++)c in this&&(d=a.call(null,d,this[c],c,this));return d}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(a){var b=+this.length;if(typeof a!="function")throw new TypeError;if(b===0&&arguments.length===1)throw new TypeError;var c=b-1;if(arguments.length>=2)var d=arguments[1];else do{if(c in this){d=this[c--];break}if(--c<0)throw new TypeError}while(!0);for(;c>=0;c--)c in this&&(d=a.call(null,d,this[c],c,this));return d}),Array.prototype.indexOf||(Array.prototype.indexOf=function(a){var b=this.length;if(!b)return-1;var c=arguments[1]||0;if(c>=b)return-1;c<0&&(c+=b);for(;c<b;c++){if(!h(this,c))continue;if(a===this[c])return c}return-1}),Array.prototype.lastIndexOf||(Array.prototype.lastIndexOf=function(a){var b=this.length;if(!b)return-1;var c=arguments[1]||b;c<0&&(c+=b),c=Math.min(c,b-1);for(;c>=0;c--){if(!h(this,c))continue;if(a===this[c])return c}return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(a){return a.__proto__||a.constructor.prototype});if(!Object.getOwnPropertyDescriptor){var n="Object.getOwnPropertyDescriptor called on a non-object: ";Object.getOwnPropertyDescriptor=function(a,b){if(typeof a!="object"&&typeof a!="function"||a===null)throw new TypeError(n+a);if(!h(a,b))return undefined;var c,d,e;c={enumerable:!0,configurable:!0};if(m){var f=a.__proto__;a.__proto__=g;var d=k(a,b),e=l(a,b);a.__proto__=f;if(d||e){d&&(descriptor.get=d),e&&(descriptor.set=e);return descriptor}}descriptor.value=a[b];return descriptor}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(a){return Object.keys(a)}),Object.create||(Object.create=function(a,b){var c;if(a===null)c={"__proto__":null};else{if(typeof a!="object")throw new TypeError("typeof prototype["+typeof a+"] != 'object'");var d=function(){};d.prototype=a,c=new d,c.__proto__=a}typeof b!="undefined"&&Object.defineProperties(c,b);return c});if(!Object.defineProperty){var o="Property description must be an object: ",p="Object.defineProperty called on non-object: ",q="getters & setters can not be defined on this javascript engine";Object.defineProperty=function(a,b,c){if(typeof a!="object"&&typeof a!="function")throw new TypeError(p+a);if(typeof a!="object"||a===null)throw new TypeError(o+c);if(h(c,"value"))if(m&&(k(a,b)||l(a,b))){var d=a.__proto__;a.__proto__=g,delete a[b],a[b]=c.value,a.prototype}else a[b]=c.value;else{if(!m)throw new TypeError(q);h(c,"get")&&i(a,b,c.get),h(c,"set")&&j(a,b,c.set)}return a}}Object.defineProperties||(Object.defineProperties=function(a,b){for(var c in b)h(b,c)&&Object.defineProperty(a,c,b[c]);return a}),Object.seal||(Object.seal=function(a){return a}),Object.freeze||(Object.freeze=function(a){return a});try{Object.freeze(function(){})}catch(r){Object.freeze=function(a){return function b(b){return typeof b=="function"?b:a(b)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(a){return a}),Object.isSealed||(Object.isSealed=function(a){return!1}),Object.isFrozen||(Object.isFrozen=function(a){return!1}),Object.isExtensible||(Object.isExtensible=function(a){return!0});if(!Object.keys){var s=!0,t=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],u=t.length;for(var v in{toString:null})s=!1;Object.keys=function W(a){if(typeof a!="object"&&typeof a!="function"||a===null)throw new TypeError("Object.keys called on a non-object");var W=[];for(var b in a)h(a,b)&&W.push(b);if(s)for(var c=0,d=u;c<d;c++){var e=t[c];h(a,e)&&W.push(e)}return W}}Date.prototype.toISOString||(Date.prototype.toISOString=function(){return this.getUTCFullYear()+"-"+(this.getUTCMonth()+1)+"-"+this.getUTCDate()+"T"+this.getUTCHours()+":"+this.getUTCMinutes()+":"+this.getUTCSeconds()+"Z"}),Date.now||(Date.now=function(){return(new Date).getTime()}),Date.prototype.toJSON||(Date.prototype.toJSON=function(a){if(typeof this.toISOString!="function")throw new TypeError;return this.toISOString()}),isNaN(Date.parse("T00:00"))&&(Date=function(a){var b=function(c,d,e,f,g,h,i){var j=arguments.length;if(this instanceof a){var k=j===1&&String(c)===c?new a(b.parse(c)):j>=7?new a(c,d,e,f,g,h,i):j>=6?new a(c,d,e,f,g,h):j>=5?new a(c,d,e,f,g):j>=4?new a(c,d,e,f):j>=3?new a(c,d,e):j>=2?new a(c,d):j>=1?new a(c):new a;k.constructor=b;return k}return a.apply(this,arguments)},c=new RegExp("^(?:((?:[+-]\\d\\d)?\\d\\d\\d\\d)(?:-(\\d\\d)(?:-(\\d\\d))?)?)?(?:T(\\d\\d):(\\d\\d)(?::(\\d\\d)(?:\\.(\\d\\d\\d))?)?)?(?:Z|([+-])(\\d\\d):(\\d\\d))?$");for(var d in a)b[d]=a[d];b.now=a.now,b.UTC=a.UTC,b.prototype=a.prototype,b.prototype.constructor=b,b.parse=function e(b){var d=c.exec(b);if(d){d.shift();var e=d[0]===undefined;for(var f=0;f<10;f++){if(f===7)continue;d[f]=+(d[f]||(f<3?1:0)),f===1&&d[f]--}if(e)return((d[3]*60+d[4])*60+d[5])*1e3+d[6];var g=(d[8]*60+d[9])*60*1e3;d[6]==="-"&&(g=-g);return a.UTC.apply(this,d.slice(0,7))+g}return a.parse.apply(this,arguments)};return b}(Date));if(!String.prototype.trim){var w=/^\s\s*/,x=/\s\s*$/;String.prototype.trim=function(){return String(this).replace(w,"").replace(x,"")}}}),define("ace/ace",["require","exports","module","pilot/index","pilot/fixoldbrowsers","pilot/plugin_manager","pilot/dom","pilot/event","ace/editor","ace/edit_session","ace/undomanager","ace/virtual_renderer","ace/theme/textmate","pilot/environment"],function(a,b,c){a("pilot/index"),a("pilot/fixoldbrowsers");var d=a("pilot/plugin_manager").catalog;d.registerPlugins(["pilot/index"]);var e=a("pilot/dom"),f=a("pilot/event"),g=a("ace/editor").Editor,h=a("ace/edit_session").EditSession,i=a("ace/undomanager").UndoManager,j=a("ace/virtual_renderer").VirtualRenderer;b.edit=function(b){typeof b=="string"&&(b=document.getElementById(b));var c=new h(e.getInnerText(b));c.setUndoManager(new i),b.innerHTML="";var k=new g(new j(b,a("ace/theme/textmate")));k.setSession(c);var l=a("pilot/environment").create();d.startupPlugins({env:l}).then(function(){l.document=c,l.editor=k,k.resize(),f.addListener(window,"resize",function(){k.resize()}),b.env=l}),k.env=l;return k}}),define("pilot/index",["require","exports","module","pilot/fixoldbrowsers","pilot/types/basic","pilot/types/command","pilot/types/settings","pilot/commands/settings","pilot/commands/basic","pilot/settings/canon","pilot/canon"],function(a,b,c){b.startup=function(b,c){a("pilot/fixoldbrowsers"),a("pilot/types/basic").startup(b,c),a("pilot/types/command").startup(b,c),a("pilot/types/settings").startup(b,c),a("pilot/commands/settings").startup(b,c),a("pilot/commands/basic").startup(b,c),a("pilot/settings/canon").startup(b,c),a("pilot/canon").startup(b,c)},b.shutdown=function(b,c){a("pilot/types/basic").shutdown(b,c),a("pilot/types/command").shutdown(b,c),a("pilot/types/settings").shutdown(b,c),a("pilot/commands/settings").shutdown(b,c),a("pilot/commands/basic").shutdown(b,c),a("pilot/settings/canon").shutdown(b,c),a("pilot/canon").shutdown(b,c)}}),define("pilot/types/basic",["require","exports","module","pilot/types"],function(a,b,c){function m(a){if(a instanceof e)this.subtype=a;else{if(typeof a!="string")throw new Error("Can' handle array subtype");this.subtype=d.getType(a);if(this.subtype==null)throw new Error("Unknown array subtype: "+a)}}function l(a){if(typeof a.defer!="function")throw new Error("Instances of DeferredType need typeSpec.defer to be a function that returns a type");Object.keys(a).forEach(function(b){this[b]=a[b]},this)}function j(a){if(!Array.isArray(a.data)&&typeof a.data!="function")throw new Error("instances of SelectionType need typeSpec.data to be an array or function that returns an array:"+JSON.stringify(a));Object.keys(a).forEach(function(b){this[b]=a[b]},this)}var d=a("pilot/types"),e=d.Type,f=d.Conversion,g=d.Status,h=new e;h.stringify=function(a){return a},h.parse=function(a){if(typeof a!="string")throw new Error("non-string passed to text.parse()");return new f(a)},h.name="text";var i=new e;i.stringify=function(a){return a?""+a:null},i.parse=function(a){if(typeof a!="string")throw new Error("non-string passed to number.parse()");if(a.replace(/\s/g,"").length===0)return new f(null,g.INCOMPLETE,"");var b=new f(parseInt(a,10));isNaN(b.value)&&(b.status=g.INVALID,b.message="Can't convert \""+a+'" to a number.');return b},i.decrement=function(a){return a-1},i.increment=function(a){return a+1},i.name="number",j.prototype=new e,j.prototype.stringify=function(a){return a},j.prototype.parse=function(a){if(typeof a!="string")throw new Error("non-string passed to parse()");if(!this.data)throw new Error("Missing data on selection type extension.");var b=typeof this.data=="function"?this.data():this.data,c=!1,d,e=[];b.forEach(function(b){a==b?(d=this.fromString(b),c=!0):b.indexOf(a)===0&&e.push(this.fromString(b))},this);if(c)return new f(d);this.noMatch&&this.noMatch();if(e.length>0){var h="Possibilities"+(a.length===0?"":" for '"+a+"'");return new f(null,g.INCOMPLETE,h,e)}var h="Can't use '"+a+"'.";return new f(null,g.INVALID,h,e)},j.prototype.fromString=function(a){return a},j.prototype.decrement=function(a){var b=typeof this.data=="function"?this.data():this.data,c;if(a==null)c=b.length-1;else{var d=this.stringify(a),c=b.indexOf(d);c=c===0?b.length-1:c-1}return this.fromString(b[c])},j.prototype.increment=function(a){var b=typeof this.data=="function"?this.data():this.data,c;if(a==null)c=0;else{var d=this.stringify(a),c=b.indexOf(d);c=c===b.length-1?0:c+1}return this.fromString(b[c])},j.prototype.name="selection",b.SelectionType=j;var k=new j({name:"bool",data:["true","false"],stringify:function(a){return""+a},fromString:function(a){return a==="true"?!0:!1}});l.prototype=new e,l.prototype.stringify=function(a){return this.defer().stringify(a)},l.prototype.parse=function(a){return this.defer().parse(a)},l.prototype.decrement=function(a){var b=this.defer();return b.decrement?b.decrement(a):undefined},l.prototype.increment=function(a){var b=this.defer();return b.increment?b.increment(a):undefined},l.prototype.name="deferred",b.DeferredType=l,m.prototype=new e,m.prototype.stringify=function(a){return a.join(" ")},m.prototype.parse=function(a){return this.defer().parse(a)},m.prototype.name="array";var n=!1;b.startup=function(){n||(n=!0,d.registerType(h),d.registerType(i),d.registerType(k),d.registerType(j),d.registerType(l),d.registerType(m))},b.shutdown=function(){n=!1,d.unregisterType(h),d.unregisterType(i),d.unregisterType(k),d.unregisterType(j),d.unregisterType(l),d.unregisterType(m)}}),define("pilot/types",["require","exports","module"],function(a,b,c){function h(a,b){if(a.substr(-2)==="[]"){var c=a.slice(0,-2);return new g.array(c)}var d=g[a];typeof d=="function"&&(d=new d(b));return d}function f(){}function e(a,b,c,e){this.value=a,this.status=b||d.VALID,this.message=c,this.predictions=e||[]}var d={VALID:{toString:function(){return"VALID"},valueOf:function(){return 0}},INCOMPLETE:{toString:function(){return"INCOMPLETE"},valueOf:function(){return 1}},INVALID:{toString:function(){return"INVALID"},valueOf:function(){return 2}},combine:function(a){var b=d.VALID;for(var c=0;c<a.length;c++)a[c].valueOf()>b.valueOf()&&(b=a[c]);return b}};b.Status=d,b.Conversion=e,f.prototype={stringify:function(a){throw new Error("not implemented")},parse:function(a){throw new Error("not implemented")},name:undefined,increment:function(a){return undefined},decrement:function(a){return undefined},getDefault:function(){return this.parse("")}},b.Type=f;var g={};b.registerType=function(a){if(typeof a=="object"){if(!(a instanceof f))throw new Error("Can't registerType using: "+a);if(!a.name)throw new Error("All registered types must have a name");g[a.name]=a}else{if(typeof a!="function")throw new Error("Unknown type: "+a);if(!a.prototype.name)throw new Error("All registered types must have a name");g[a.prototype.name]=a}},b.registerTypes=function(a){Object.keys(a).forEach(function(c){var d=a[c];d.name=c,b.registerType(d)})},b.deregisterType=function(a){delete g[a.name]},b.getType=function(a){if(typeof a=="string")return h(a);if(typeof a=="object"){if(!a.name)throw new Error("Missing 'name' member to typeSpec");return h(a.name,a)}throw new Error("Can't extract type from "+a)}}),define("pilot/types/command",["require","exports","module","pilot/canon","pilot/types/basic","pilot/types"],function(a,b,c){var d=a("pilot/canon"),e=a("pilot/types/basic").SelectionType,f=a("pilot/types"),g=new e({name:"command",data:function(){return d.getCommandNames()},stringify:function(a){return a.name},fromString:function(a){return d.getCommand(a)}});b.startup=function(){f.registerType(g)},b.shutdown=function(){f.unregisterType(g)}}),define("pilot/canon",["require","exports","module","pilot/console","pilot/stacktrace","pilot/oop","pilot/useragent","pilot/keys","pilot/event_emitter","pilot/typecheck","pilot/catalog","pilot/types","pilot/lang"],function(a,b,c){function J(a){a=a||{},this.command=a.command,this.args=a.args,this.typed=a.typed,this._begunOutput=!1,this.start=new Date,this.end=null,this.completed=!1,this.error=!1}function G(a,b,c,e,f){function h(){a.exec(b,g.args,g),!g.isAsync&&!g.isDone&&g.done()}typeof a=="string"&&(a=q[a]);if(!a)return!1;var g=new J({sender:c,command:a,args:e||{},typed:f});if(g.getStatus()==l.INVALID){d.error("Canon.exec: Invalid parameter(s) passed to "+a.name);return!1}if(g.getStatus()==l.INCOMPLETE){var i,j=b[c];if(!j||!j.getArgsProvider||!(i=j.getArgsProvider()))i=F;i(g,function(){g.getStatus()==l.VALID&&h()});return!0}h();return!0}function F(a,b){var c=a.args,d=a.command.params;for(var e=0;e<d.length;e++){var f=d[e];if(a.getParamStatus(f)!=l.VALID||f.defaultValue===null){var g=f.description;f.defaultValue===null&&(g+=" (optional)");var h=prompt(g,f.defaultValue||"");if(!h){b();return}c[f.name]=h}}b()}function E(){return z}function D(a){return q[a]}function C(a){var b=typeof a=="string"?a:a.name;a=q[b],delete q[b],n.arrayRemove(z,b);var c=r;for(var d in c)for(var e in c[d])for(var f in c[d][e])c[d][e][f]==a&&delete c[d][e][f];var g=s;for(var d in g)for(var e in g[d])g[d][e].forEach(function(b,c){b.command==a&&g[d][e].splice(c,1)})}function B(a,b){var c=b.type;b.type=m.getType(c);if(b.type==null)throw new Error("In "+a+"/"+b.name+": can't find type for: "+JSON.stringify(c))}function A(a){if(!a.name)throw new Error("All registered commands must have a name");a.params==null&&(a.params=[]);if(!Array.isArray(a.params))throw new Error("command.params must be an array in "+a.name);a.params.forEach(function(b){if(!b.name)throw new Error("In "+a.name+": all params must have a name");B(a.name,b)},this),q[a.name]=a,a.bindKey&&w(a),z.push(a.name),z.sort()}function y(a,b,c,d){var e=x(a,b,c,d);return e?G(e,a,b,{}):!1}function x(a,b,c,d){j.isNumber(d)&&(d=h.keyCodeToString(d));var e=(s[c]||{})[d]||[];for(var f=0;f<e.length;f++)if(e[f].sender(a,b,c,d))return e[f].command;var g=r[b];return g&&g[c]&&g[c][d]}function w(a){var b=a.bindKey,c=b[v],d=r,e=s;if(!b.sender)throw new Error("All key bindings must have a sender");if(!b.mac&&b.mac!==null)throw new Error("All key bindings must have a mac key binding");if(!b.win&&b.win!==null)throw new Error("All key bindings must have a windows key binding");if(!!b[v])if(typeof b.sender=="string"){var f=t(b.sender,"\\|",null,!0);f.forEach(function(b){d[b]||(d[b]={}),c.split("|").forEach(function(c){u(c,a,d[b])})})}else{if(!j.isFunction(b.sender))throw new Error("Key binding must have a sender that is a string or function");var g={command:a,sender:b.sender};keyData=u(c),e[keyData.hashId]||(e[keyData.hashId]={}),e[keyData.hashId][keyData.key]?e[keyData.hashId][keyData.key].push(g):e[keyData.hashId][keyData.key]=[g]}}function u(a,b,c){var d,e=0,f=t(a,"\\-",null,!0),g=0,i=f.length;for(;g<i;++g)h.KEY_MODS[f[g]]?e=e|h.KEY_MODS[f[g]]:d=f[g]||"-";if(c==null)return{key:d,hashId:e};(c[e]||(c[e]={}))[d]=b}function t(a,b,c,d){return(d&&a.toLowerCase()||a).replace(/(?:^\s+|\n|\s+$)/g,"").split(new RegExp("[\\s ]*"+b+"[\\s ]*","g"),c||999)}var d=a("pilot/console"),e=a("pilot/stacktrace").Trace,f=a("pilot/oop"),g=a("pilot/useragent"),h=a("pilot/keys"),i=a("pilot/event_emitter").EventEmitter,j=a("pilot/typecheck"),k=a("pilot/catalog"),l=a("pilot/types").Status,m=a("pilot/types"),n=a("pilot/lang"),o={name:"command",description:"A command is a bit of functionality with optional typed arguments which can do something small like moving the cursor around the screen, or large like cloning a project from VCS.",indexOn:"name"};b.startup=function(a,b){k.addExtensionSpec(o)},b.shutdown=function(a,b){k.removeExtensionSpec(o)};var p={name:"thing",description:"thing is an example command",params:[{name:"param1",description:"an example parameter",type:"text",defaultValue:null}],exec:function(a,b,c){thing()}},q={},r={},s={},v=g.isMac?"mac":"win",z=[];b.removeCommand=C,b.addCommand=A,b.getCommand=D,b.getCommandNames=E,b.findKeyCommand=x,b.exec=G,b.execKeyCommand=y,b.upgradeType=B,f.implement(b,i);var H=[],I=100;f.implement(J.prototype,i),J.prototype.getParamStatus=function(a){var b=this.args||{};if(a.name in b){if(b[a.name]==null)return a.defaultValue===null?l.VALID:l.INCOMPLETE;var c,d=b[a.name].toString();try{c=a.type.parse(d)}catch(e){return l.INVALID}if(c.status!=l.VALID)return c.status}else if(a.defaultValue===undefined)return l.INCOMPLETE;return l.VALID},J.prototype.getParamNameStatus=function(a){var b=this.command.params||[];for(var c=0;c<b.length;c++)if(b[c].name==a)return this.getParamStatus(b[c]);throw"Parameter '"+a+"' not defined on command '"+this.command.name+"'"},J.prototype.getStatus=function(){var a=this.args||{},b=this.command.params;if(!b||b.length==0)return l.VALID;var c=[];for(var d=0;d<b.length;d++)c.push(this.getParamStatus(b[d]));return l.combine(c)},J.prototype._beginOutput=function(){this._begunOutput=!0,this.outputs=[],H.push(this);while(H.length>I)H.shiftObject();b._dispatchEvent("output",{requests:H,request:this})},J.prototype.doneWithError=function(a){this.error=!0,this.done(a)},J.prototype.async=function(){this.isAsync=!0,this._begunOutput||this._beginOutput()},J.prototype.output=function(a){this._begunOutput||this._beginOutput(),typeof a!="string"&&!(a instanceof Node)&&(a=a.toString()),this.outputs.push(a),this.isDone=!0,this._dispatchEvent("output",{});return this},J.prototype.done=function(a){this.completed=!0,this.end=new Date,this.duration=this.end.getTime()-this.start.getTime(),a&&this.output(a),this.isDone||(this.isDone=!0,this._dispatchEvent("output",{}))},b.Request=J}),define("pilot/console",["require","exports","module"],function(a,b,c){var d=function(){},e=["assert","count","debug","dir","dirxml","error","group","groupEnd","info","log","profile","profileEnd","time","timeEnd","trace","warn"];typeof window=="undefined"?e.forEach(function(a){b[a]=function(){var b=Array.prototype.slice.call(arguments),c={op:"log",method:a,args:b};postMessage(JSON.stringify(c))}}):e.forEach(function(a){window.console&&window.console[a]?b[a]=Function.prototype.bind.call(window.console[a],window.console):b[a]=d})}),define("pilot/stacktrace",["require","exports","module","pilot/useragent","pilot/console"],function(a,b,c){function i(){}function g(a){for(var b=0;b<a.length;++b){var c=a[b];typeof c=="object"?a[b]="#object":typeof c=="function"?a[b]="#function":typeof c=="string"&&(a[b]='"'+c+'"')}return a.join(",")}var d=a("pilot/useragent"),e=a("pilot/console"),f=function(){return d.isGecko?"firefox":d.isOpera?"opera":"other"}(),h={chrome:function(a){var b=a.stack;if(!b){e.log(a);return[]}return b.replace(/^.*?\n/,"").replace(/^.*?\n/,"").replace(/^.*?\n/,"").replace(/^[^\(]+?[\n$]/gm,"").replace(/^\s+at\s+/gm,"").replace(/^Object.<anonymous>\s*\(/gm,"{anonymous}()@").split("\n")},firefox:function(a){var b=a.stack;if(!b){e.log(a);return[]}b=b.replace(/(?:\n@:0)?\s+$/m,""),b=b.replace(/^\(/gm,"{anonymous}(");return b.split("\n")},opera:function(a){var b=a.message.split("\n"),c="{anonymous}",d=/Line\s+(\d+).*?script\s+(http\S+)(?:.*?in\s+function\s+(\S+))?/i,e,f,g;for(e=4,f=0,g=b.length;e<g;e+=2)d.test(b[e])&&(b[f++]=(RegExp.$3?RegExp.$3+"()@"+RegExp.$2+RegExp.$1:c+"()@"+RegExp.$2+":"+RegExp.$1)+" -- "+b[e+1].replace(/^\s+/,""));b.splice(f,b.length-f);return b},other:function(a){var b="{anonymous}",c=/function\s*([\w\-$]+)?\s*\(/i,d=[],e=0,f,h,i=10;while(a&&d.length<i){f=c.test(a.toString())?RegExp.$1||b:b,h=Array.prototype.slice.call(a.arguments),d[e++]=f+"("+g(h)+")";if(a===a.caller&&window.opera)break;a=a.caller}return d}};i.prototype={sourceCache:{},ajax:function(a){var b=this.createXMLHTTPObject();if(!!b){b.open("GET",a,!1),b.setRequestHeader("User-Agent","XMLHTTP/1.0"),b.send("");return b.responseText}},createXMLHTTPObject:function(){var a,b=[function(){return new XMLHttpRequest},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml3.XMLHTTP")},function(){return new ActiveXObject("Microsoft.XMLHTTP")}];for(var c=0;c<b.length;c++)try{a=b[c](),this.createXMLHTTPObject=b[c];return a}catch(d){}},getSource:function(a){a in this.sourceCache||(this.sourceCache[a]=this.ajax(a).split("\n"));return this.sourceCache[a]},guessFunctions:function(a){for(var b=0;b<a.length;++b){var c=/{anonymous}\(.*\)@(\w+:\/\/([-\w\.]+)+(:\d+)?[^:]+):(\d+):?(\d+)?/,d=a[b],e=c.exec(d);if(e){var f=e[1],g=e[4];if(f&&g){var h=this.guessFunctionName(f,g);a[b]=d.replace("{anonymous}",h)}}}return a},guessFunctionName:function(a,b){try{return this.guessFunctionNameFromLines(b,this.getSource(a))}catch(c){return"getSource failed with url: "+a+", exception: "+c.toString()}},guessFunctionNameFromLines:function(a,b){var c=/function ([^(]*)\(([^)]*)\)/,d=/['"]?([0-9A-Za-z_]+)['"]?\s*[:=]\s*(function|eval|new Function)/,e="",f=10;for(var g=0;g<f;++g){e=b[a-g]+e;if(e!==undefined){var h=d.exec(e);if(h)return h[1];h=c.exec(e);if(h&&h[1])return h[1]}}return"(?)"}};var j=new i,k=[/http:\/\/localhost:4020\/sproutcore.js:/];b.ignoreFramesMatching=function(a){k.push(a)},b.Trace=function(a,b){this._ex=a,this._stack=h[f](a),b&&(this._stack=j.guessFunctions(this._stack))},b.Trace.prototype.log=function(a){a<=0&&(a=999999999);var b=0;for(var c=0;c<this._stack.length&&b<a;c++){var d=this._stack[c],f=!0;k.forEach(function(a){a.test(d)&&(f=!1)}),f&&(e.debug(d),b++)}}}),define("pilot/useragent",["require","exports","module"],function(a,b,c){var d=(navigator.platform.match(/mac|win|linux/i)||["other"])[0].toLowerCase(),e=navigator.userAgent,f=navigator.appVersion;b.isWin=d=="win",b.isMac=d=="mac",b.isLinux=d=="linux",b.isIE=!1,b.isGecko=b.isMozilla=window.controllers&&window.navigator.product==="Gecko",b.isOldGecko=b.isGecko&&/rv\:1/.test(navigator.userAgent),b.isOpera=window.opera&&Object.prototype.toString.call(window.opera)=="[object Opera]",b.isWebKit=parseFloat(e.split("WebKit/")[1])||undefined,b.isChrome=parseFloat(e.split(" Chrome/")[1])||undefined,b.isAIR=e.indexOf("AdobeAIR")>=0,b.isIPad=e.indexOf("iPad")>=0,b.OS={LINUX:"LINUX",MAC:"MAC",WINDOWS:"WINDOWS"},b.getOS=function(){return b.isMac?b.OS.MAC:b.isLinux?b.OS.LINUX:b.OS.WINDOWS}}),define("pilot/oop",["require","exports","module"],function(a,b,c){b.inherits=function(){var a=function(){};return function(b,c){a.prototype=c.prototype,b.super_=c.prototype,b.prototype=new a,b.prototype.constructor=b}}(),b.mixin=function(a,b){for(var c in b)a[c]=b[c]},b.implement=function(a,c){b.mixin(a,c)}}),define("pilot/keys",["require","exports","module","pilot/oop"],function(a,b,c){var d=a("pilot/oop"),e=function(){var a={MODIFIER_KEYS:{16:"Shift",17:"Ctrl",18:"Alt",224:"Meta"},KEY_MODS:{ctrl:1,alt:2,option:2,shift:4,meta:8,command:8},FUNCTION_KEYS:{8:"Backspace",9:"Tab",13:"Return",19:"Pause",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"Left",38:"Up",39:"Right",40:"Down",44:"Print",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"Numlock",145:"Scrolllock"},PRINTABLE_KEYS:{32:" ",48:"0",49:"1",50:"2",51:"3",52:"4",53:"5",54:"6",55:"7",56:"8",57:"9",59:";",61:"=",65:"a",66:"b",67:"c",68:"d",69:"e",70:"f",71:"g",72:"h",73:"i",74:"j",75:"k",76:"l",77:"m",78:"n",79:"o",80:"p",81:"q",82:"r",83:"s",84:"t",85:"u",86:"v",87:"w",88:"x",89:"y",90:"z",107:"+",109:"-",110:".",188:",",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:'"'}};for(i in a.FUNCTION_KEYS){var b=a.FUNCTION_KEYS[i].toUpperCase();a[b]=parseInt(i,10)}d.mixin(a,a.MODIFIER_KEYS),d.mixin(a,a.PRINTABLE_KEYS),d.mixin(a,a.FUNCTION_KEYS);return a}();d.mixin(b,e),b.keyCodeToString=function(a){return(e[a]||String.fromCharCode(a)).toLowerCase()}}),define("pilot/event_emitter",["require","exports","module"],function(a,b,c){var d={};d._emit=d._dispatchEvent=function(a,b){this._eventRegistry=this._eventRegistry||{};var c=this._eventRegistry[a];if(!!c&&!!c.length){var b=b||{};b.type=a;for(var d=0;d<c.length;d++)c[d](b)}},d.on=d.addEventListener=function(a,b){this._eventRegistry=this._eventRegistry||{};var c=this._eventRegistry[a];if(!c)var c=this._eventRegistry[a]=[];c.indexOf(b)==-1&&c.push(b)},d.removeListener=d.removeEventListener=function(a,b){this._eventRegistry=this._eventRegistry||{};var c=this._eventRegistry[a];if(!!c){var d=c.indexOf(b);d!==-1&&c.splice(d,1)}},d.removeAllListeners=function(a){this._eventRegistry&&(this._eventRegistry[a]=[])},b.EventEmitter=d}),define("pilot/typecheck",["require","exports","module"],function(a,b,c){var d=Object.prototype.toString;b.isString=function(a){return a&&d.call(a)==="[object String]"},b.isBoolean=function(a){return a&&d.call(a)==="[object Boolean]"},b.isNumber=function(a){return a&&d.call(a)==="[object Number]"&&isFinite(a)},b.isObject=function(a){return a!==undefined&&(a===null||typeof a=="object"||Array.isArray(a)||b.isFunction(a))},b.isFunction=function(a){return a&&d.call(a)==="[object Function]"}}),define("pilot/catalog",["require","exports","module"],function(a,b,c){var d={};b.addExtensionSpec=function(a){d[a.name]=a},b.removeExtensionSpec=function(a){typeof a=="string"?delete d[a]:delete d[a.name]},b.getExtensionSpec=function(a){return d[a]},b.getExtensionSpecs=function(){return Object.keys(d)}}),define("pilot/lang",["require","exports","module"],function(a,b,c){b.stringReverse=function(a){return a.split("").reverse().join("")},b.stringRepeat=function(a,b){return Array(b+1).join(a)};var d=/^\s\s*/,e=/\s\s*$/;b.stringTrimLeft=function(a){return a.replace(d,"")},b.stringTrimRight=function(a){return a.replace(e,"")},b.copyObject=function(a){var b={};for(var c in a)b[c]=a[c];return b},b.copyArray=function(a){var b=[];for(i=0,l=a.length;i<l;i++)a[i]&&typeof a[i]=="object"?b[i]=this.copyObject(a[i]):b[i]=a[i];return b},b.deepCopy=function(a){if(typeof a!="object")return a;var b=a.constructor();for(var c in a)typeof a[c]=="object"?b[c]=this.deepCopy(a[c]):b[c]=a[c];return b},b.arrayToMap=function(a){var b={};for(var c=0;c<a.length;c++)b[a[c]]=1;return b},b.arrayRemove=function(a,b){for(var c=0;c<=a.length;c++)b===a[c]&&a.splice(c,1)},b.escapeRegExp=function(a){return a.replace(/([.*+?^${}()|[\]\/\\])/g,"\\$1")},b.deferredCall=function(a){var b=null,c=function(){b=null,a()},d=function(a){b||(b=setTimeout(c,a||0));return d};d.schedule=d,d.call=function(){this.cancel(),a();return d},d.cancel=function(){clearTimeout(b),b=null;return d};return d}}),define("pilot/types/settings",["require","exports","module","pilot/types/basic","pilot/types","pilot/settings"],function(a,b,c){var d=a("pilot/types/basic").SelectionType,e=a("pilot/types/basic").DeferredType,f=a("pilot/types"),g=a("pilot/settings").settings,h,i=new d({name:"setting",data:function(){return k.settings.getSettingNames()},stringify:function(a){h=a;return a.name},fromString:function(a){h=g.getSetting(a);return h},noMatch:function(){h=null}}),j=new e({name:"settingValue",defer:function(){return h?h.type:f.getType("text")},getDefault:function(){var a=this.parse("");if(h){var b=h.get();if(a.predictions.length===0)a.predictions.push(b);else{var c=!1;for(;;){var d=a.predictions.indexOf(b);if(d===-1)break;a.predictions.splice(d,1),c=!0}c&&a.predictions.push(b)}}return a}}),k;b.startup=function(a,b){k=a.env,f.registerType(i),f.registerType(j)},b.shutdown=function(a,b){f.unregisterType(i),f.unregisterType(j)}}),define("pilot/settings",["require","exports","module","pilot/console","pilot/oop","pilot/types","pilot/event_emitter","pilot/catalog"],function(a,b,c){function l(){}function k(a){this._deactivated={},this._settings={},this._settingNames=[],a&&this.setPersister(a)}function j(a,b){this._settings=b,Object.keys(a).forEach(function(b){this[b]=a[b]},this),this.type=f.getType(this.type);if(this.type==null)throw new Error("In "+this.name+": can't find type for: "+JSON.stringify(a.type));if(!this.name)throw new Error("Setting.name == undefined. Ignoring.",this);if(!this.defaultValue===undefined)throw new Error("Setting.defaultValue == undefined",this);this.onChange&&this.on("change",this.onChange.bind(this)),this.set(this.defaultValue)}var d=a("pilot/console"),e=a("pilot/oop"),f=a("pilot/types"),g=a("pilot/event_emitter").EventEmitter,h=a("pilot/catalog"),i={name:"setting",description:"A setting is something that the application offers as a way to customize how it works",register:"env.settings.addSetting",indexOn:"name"};b.startup=function(a,b){h.addExtensionSpec(i)},b.shutdown=function(a,b){h.removeExtensionSpec(i)},j.prototype={get:function(){return this.value},set:function(a){this.value!==a&&(this.value=a,this._settings.persister&&this._settings.persister.persistValue(this._settings,this.name,a),this._dispatchEvent("change",{setting:this,value:a}))},resetValue:function(){this.set(this.defaultValue)},toString:function(){return this.name}},e.implement(j.prototype,g),k.prototype={addSetting:function(a){var b=new j(a,this);this._settings[b.name]=b,this._settingNames.push(b.name),this._settingNames.sort()},addSettings:function(a){Object.keys(a).forEach(function(b){var c=a[b];"name"in c||(c.name=b),this.addSetting(c)},this)},removeSetting:function(a){var b=typeof a=="string"?a:a.name;a=this._settings[b],delete this._settings[b],util.arrayRemove(this._settingNames,b),settings.removeAllListeners("change")},removeSettings:function(a){Object.keys(a).forEach(function(b){var c=a[b];"name"in c||(c.name=b),this.removeSettings(c)},this)},getSettingNames:function(){return this._settingNames},getSetting:function(a){return this._settings[a]},setPersister:function(a){this._persister=a,a&&a.loadInitialValues(this)},resetAll:function(){this.getSettingNames().forEach(function(a){this.resetValue(a)},this)},_list:function(){var a=[];this.getSettingNames().forEach(function(b){a.push({key:b,value:this.getSetting(b).get()})},this);return a},_loadDefaultValues:function(){this._loadFromObject(this._getDefaultValues())},_loadFromObject:function(a){for(var b in a)if(a.hasOwnProperty(b)){var c=this._settings[b];if(c){var d=c.type.parse(a[b]);this.set(b,d)}else this.set(b,a[b])}},_saveToObject:function(){return this.getSettingNames().map(function(a){return this._settings[a].type.stringify(this.get(a))}.bind(this))},_getDefaultValues:function(){return this.getSettingNames().map(function(a){return this._settings[a].spec.defaultValue}.bind(this))}},b.settings=new k,l.prototype={loadInitialValues:function(a){a._loadDefaultValues();var b=cookie.get("settings");a._loadFromObject(JSON.parse(b))},persistValue:function(a,b,c){try{var e=JSON.stringify(a._saveToObject());cookie.set("settings",e)}catch(f){d.error("Unable to JSONify the settings! "+f);return}}},b.CookiePersister=l}),define("pilot/commands/settings",["require","exports","module","pilot/canon"],function(a,b,c){var d={name:"set",params:[{name:"setting",type:"setting",description:"The name of the setting to display or alter",defaultValue:null},{name:"value",type:"settingValue",description:"The new value for the chosen setting",defaultValue:null}],description:"define and show settings",exec:function(a,b,c){var d;if(!b.setting){var e=a.settings.getSettingNames();d="",e.sort(function(a,b){return a.localeCompare(b)}),e.forEach(function(b){var c=a.settings.getSetting(b),e="https://wiki.mozilla.org/Labs/Skywriter/Settings#"+c.name;d+='<a class="setting" href="'+e+'" title="View external documentation on setting: '+c.name+'" target="_blank">'+c.name+"</a> = "+c.value+"<br/>"})}else b.value===undefined?d="<strong>"+setting.name+"</strong> = "+setting.get():(b.setting.set(b.value),d="Setting: <strong>"+b.setting.name+"</strong> = "+b.setting.get());c.done(d)}},e={name:"unset",params:[{name:"setting",type:"setting",description:"The name of the setting to return to defaults"}],description:"unset a setting entirely",exec:function(a,b,c){var d=a.settings.get(b.setting);d?(d.reset(),c.done("Reset "+d.name+" to default: "+a.settings.get(b.setting))):c.doneWithError("No setting with the name <strong>"+b.setting+"</strong>.")}},f=a("pilot/canon");b.startup=function(a,b){f.addCommand(d),f.addCommand(e)},b.shutdown=function(a,b){f.removeCommand(d),f.removeCommand(e)}}),define("pilot/commands/basic",["require","exports","module","pilot/typecheck","pilot/canon"],function(require,exports,module){var checks=require("pilot/typecheck"),canon=require("pilot/canon"),helpCommandSpec={name:"help",params:[{name:"search",type:"text",description:"Search string to narrow the output.",defaultValue:null}],description:"Get help on the available commands.",exec:function(a,b,c){var d=[],e=canon.getCommand(b.search);if(e&&e.exec)d.push(e.description?e.description:"No description for "+b.search);else{var f=!1;e?(d.push("<h2>Sub-Commands of "+e.name+"</h2>"),d.push("<p>"+e.description+"</p>")):b.search?(b.search=="hidden"&&(b.search="",f=!0),d.push("<h2>Commands starting with '"+b.search+"':</h2>")):d.push("<h2>Available Commands:</h2>");var g=canon.getCommandNames();g.sort(),d.push("<table>");for(var h=0;h<g.length;h++){e=canon.getCommand(g[h]);if(!f&&e.hidden)continue;if(e.description===undefined)continue;if(b.search&&e.name.indexOf(b.search)!==0)continue;if(!b.search&&e.name.indexOf(" ")!=-1)continue;if(e&&e.name==b.search)continue;d.push("<tr>"),d.push('<th class="right">'+e.name+"</th>"),d.push("<td>"+e.description+"</td>"),d.push("</tr>")}d.push("</table>")}c.done(d.join(""))}},evalCommandSpec={name:"eval",params:[{name:"javascript",type:"text",description:"The JavaScript to evaluate"}],description:"evals given js code and show the result",hidden:!0,exec:function(env,args,request){var result,javascript=args.javascript;try{result=eval(javascript)}catch(e){result="<b>Error: "+e.message+"</b>"}var msg="",type="",x;if(checks.isFunction(result))msg=(result+"").replace(/\n/g,"<br>").replace(/ /g,"&#160"),type="function";else if(checks.isObject(result)){Array.isArray(result)?type="array":type="object";var items=[],value;for(x in result)result.hasOwnProperty(x)&&(checks.isFunction(result[x])?value="[function]":checks.isObject(result[x])?value="[object]":value=result[x],items.push({name:x,value:value}));items.sort(function(a,b){return a.name.toLowerCase()<b.name.toLowerCase()?-1:1});for(x=0;x<items.length;x++)msg+="<b>"+items[x].name+"</b>: "+items[x].value+"<br>"}else msg=result,type=typeof result;request.done("Result for eval <b>'"+javascript+"'</b>"+" (type: "+type+"): <br><br>"+msg)}},canon=require("pilot/canon");exports.startup=function(a,b){canon.addCommand(helpCommandSpec),canon.addCommand(evalCommandSpec)},exports.shutdown=function(a,b){canon.removeCommand(helpCommandSpec),canon.removeCommand(evalCommandSpec)}}),define("pilot/settings/canon",["require","exports","module"],function(a,b,c){var d={name:"historyLength",description:"How many typed commands do we recall for reference?",type:"number",defaultValue:50};b.startup=function(a,b){a.env.settings.addSetting(d)},b.shutdown=function(a,b){a.env.settings.removeSetting(d)}}),define("pilot/plugin_manager",["require","exports","module","pilot/promise"],function(a,b,c){var d=a("pilot/promise").Promise;b.REASONS={APP_STARTUP:1,APP_SHUTDOWN:2,PLUGIN_ENABLE:3,PLUGIN_DISABLE:4,PLUGIN_INSTALL:5,PLUGIN_UNINSTALL:6,PLUGIN_UPGRADE:7,PLUGIN_DOWNGRADE:8},b.Plugin=function(a){this.name=a,this.status=this.INSTALLED},b.Plugin.prototype={NEW:0,INSTALLED:1,REGISTERED:2,STARTED:3,UNREGISTERED:4,SHUTDOWN:5,install:function(b,c){var e=new d;if(this.status>this.NEW){e.resolve(this);return e}a([this.name],function(a){a.install&&a.install(b,c),this.status=this.INSTALLED,e.resolve(this)}.bind(this));return e},register:function(b,c){var e=new d;if(this.status!=this.INSTALLED){e.resolve(this);return e}a([this.name],function(a){a.register&&a.register(b,c),this.status=this.REGISTERED,e.resolve(this)}.bind(this));return e},startup:function(c,e){e=e||b.REASONS.APP_STARTUP;var f=new d;if(this.status!=this.REGISTERED){f.resolve(this);return f}a([this.name],function(a){a.startup&&a.startup(c,e),this.status=this.STARTED,f.resolve(this)}.bind(this));return f},shutdown:function(b,c){this.status==this.STARTED&&(pluginModule=a(this.name),pluginModule.shutdown&&pluginModule.shutdown(b,c))}},b.PluginCatalog=function(){this.plugins={}},b.PluginCatalog.prototype={registerPlugins:function(a,c,e){var f=[];a.forEach(function(a){var d=this.plugins[a];d===undefined&&(d=new b.Plugin(a),this.plugins[a]=d,f.push(d.register(c,e)))}.bind(this));return d.group(f)},startupPlugins:function(a,b){var c=[];for(var e in this.plugins){var f=this.plugins[e];c.push(f.startup(a,b))}return d.group(c)}},b.catalog=new b.PluginCatalog}),define("pilot/promise",["require","exports","module","pilot/console","pilot/stacktrace"],function(a,b,c){var d=a("pilot/console"),e=a("pilot/stacktrace").Trace,f=-1,g=0,h=1,i=0,j=!1,k=[],l=[];Promise=function(){this._status=g,this._value=undefined,this._onSuccessHandlers=[],this._onErrorHandlers=[],this._id=i++,k[this._id]=this},Promise.prototype.isPromise=!0,Promise.prototype.isComplete=function(){return this._status!=g},Promise.prototype.isResolved=function(){return this._status==h},Promise.prototype.isRejected=function(){return this._status==f},Promise.prototype.then=function(a,b){typeof a=="function"&&(this._status===h?a.call(null,this._value):this._status===g&&this._onSuccessHandlers.push(a)),typeof b=="function"&&(this._status===f?b.call(null,this._value):this._status===g&&this._onErrorHandlers.push(b));return this},Promise.prototype.chainPromise=function(a){var b=new Promise;b._chainedFrom=this,this.then(function(c){try{b.resolve(a(c))}catch(d){b.reject(d)}},function(a){b.reject(a)});return b},Promise.prototype.resolve=function(a){return this._complete(this._onSuccessHandlers,h,a,"resolve")},Promise.prototype.reject=function(a){return this._complete(this._onErrorHandlers,f,a,"reject")},Promise.prototype._complete=function(a,b,c,f){if(this._status!=g){d.group("Promise already closed"),d.error("Attempted "+f+"() with ",c),d.error("Previous status = ",this._status,", previous value = ",this._value),d.trace(),this._completeTrace&&(d.error("Trace of previous completion:"),this._completeTrace.log(5)),d.groupEnd();return this}j&&(this._completeTrace=new e(new Error)),this._status=b,this._value=c,a.forEach(function(a){a.call(null,this._value)},this),this._onSuccessHandlers.length=0,this._onErrorHandlers.length=0,delete k[this._id],l.push(this);while(l.length>20)l.shift();return this},Promise.group=function(a){a instanceof Array||(a=Array.prototype.slice.call(arguments));if(a.length===0)return(new Promise).resolve([]);var b=new Promise,c=[],d=0,e=function(e){return function(g){c[e]=g,d++,b._status!==f&&d===a.length&&b.resolve(c)}};a.forEach(function(a,c){var d=e(c),f=b.reject.bind(b);a.then(d,f)});return b},b.Promise=Promise,b._outstanding=k,b._recent=l}),define("pilot/dom",["require","exports","module"],function(a,b,c){var d="http://www.w3.org/1999/xhtml";b.createElement=function(a,b){return document.createElementNS?document.createElementNS(b||d,a):document.createElement(a)},b.setText=function(a,b){a.innerText!==undefined&&(a.innerText=b),a.textContent!==undefined&&(a.textContent=b)},document.documentElement.classList?(b.hasCssClass=function(a,b){return a.classList.contains(b)},b.addCssClass=function(a,b){a.classList.add(b)},b.removeCssClass=function(a,b){a.classList.remove(b)},b.toggleCssClass=function(a,b){return a.classList.toggle(b)}):(b.hasCssClass=function(a,b){var c=a.className.split(/\s+/g);return c.indexOf(b)!==-1},b.addCssClass=function(a,c){b.hasCssClass(a,c)||(a.className+=" "+c)},b.removeCssClass=function(a,b){var c=a.className.split(/\s+/g);for(;;){var d=c.indexOf(b);if(d==-1)break;c.splice(d,1)}a.className=c.join(" ")},b.toggleCssClass=function(a,b){var c=a.className.split(/\s+/g),d=!0;for(;;){var e=c.indexOf(b);if(e==-1)break;d=!1,c.splice(e,1)}d&&c.push(b),a.className=c.join(" ");return d}),b.setCssClass=function(a,c,d){d?b.addCssClass(a,c):b.removeCssClass(a,c)},b.importCssString=function(a,b){b=b||document;if(b.createStyleSheet){var c=b.createStyleSheet();c.cssText=a}else{var e=b.createElementNS?b.createElementNS(d,"style"):b.createElement("style");e.appendChild(b.createTextNode(a));var f=b.getElementsByTagName("head")[0]||b.documentElement;f.appendChild(e)}},b.getInnerWidth=function(a){return parseInt(b.computedStyle(a,"paddingLeft"))+parseInt(b.computedStyle(a,"paddingRight"))+a.clientWidth},b.getInnerHeight=function(a){return parseInt(b.computedStyle(a,"paddingTop"))+parseInt(b.computedStyle(a,"paddingBottom"))+a.clientHeight},window.pageYOffset!==undefined?(b.getPageScrollTop=function(){return window.pageYOffset},b.getPageScrollLeft=function(){return window.pageXOffset}):(b.getPageScrollTop=function(){return document.body.scrollTop},b.getPageScrollLeft=function(){return document.body.scrollLeft}),window.getComputedStyle?b.computedStyle=function(a,b){return b?(window.getComputedStyle(a,"")||{})[b]||"":window.getComputedStyle(a,"")||{}}:b.computedStyle=function(a,b){return b?a.currentStyle[b]:a.currentStyle},b.scrollbarWidth=function(){var a=b.createElement("p");a.style.width="100%",a.style.minWidth="0px",a.style.height="200px";var c=b.createElement("div"),d=c.style;d.position="absolute",d.left="-10000px",d.overflow="hidden",d.width="200px",d.minWidth="0px",d.height="150px",c.appendChild(a);var e=document.body||document.documentElement;e.appendChild(c);var f=a.offsetWidth;d.overflow="scroll";var g=a.offsetWidth;f==g&&(g=c.clientWidth),e.removeChild(c);return f-g},b.setInnerHtml=function(a,b){var c=a.cloneNode(!1);c.innerHTML=b,a.parentNode.replaceChild(c,a);return c},b.setInnerText=function(a,b){document.body&&"textContent"in document.body?a.textContent=b:a.innerText=b},b.getInnerText=function(a){return document.body&&"textContent"in document.body?a.textContent:a.innerText||a.textContent||""},b.getParentWindow=function(a){return a.defaultView||a.parentWindow},b.getSelectionStart=function(a){var b;try{b=a.selectionStart||0}catch(c){b=0}return b},b.setSelectionStart=function(a,b){return a.selectionStart=b},b.getSelectionEnd=function(a){var b;try{b=a.selectionEnd||0}catch(c){b=0}return b},b.setSelectionEnd=function(a,b){return a.selectionEnd=b}}),define("pilot/event",["require","exports","module","pilot/keys","pilot/useragent","pilot/dom"],function(a,b,c){function g(a,b,c){var f=0;e.isOpera&&e.isMac?f=0|(b.metaKey?1:0)|(b.altKey?2:0)|(b.shiftKey?4:0)|(b.ctrlKey?8:0):f=0|(b.ctrlKey?1:0)|(b.altKey?2:0)|(b.shiftKey?4:0)|(b.metaKey?8:0);if(c in d.MODIFIER_KEYS){switch(d.MODIFIER_KEYS[c]){case"Alt":f=2;break;case"Shift":f=4;break;case"Ctrl":f=1;break;default:f=8}c=0}f&8&&(c==91||c==93)&&(c=0);return f!=0||c in d.FUNCTION_KEYS?a(b,f,c):!1}var d=a("pilot/keys"),e=a("pilot/useragent"),f=a("pilot/dom");b.addListener=function(a,b,c){if(a.addEventListener)return a.addEventListener(b,c,!1);if(a.attachEvent){var d=function(){c(window.event)};c._wrapper=d,a.attachEvent("on"+b,d)}},b.removeListener=function(a,b,c){if(a.removeEventListener)return a.removeEventListener(b,c,!1);a.detachEvent&&a.detachEvent("on"+b,c._wrapper||c)},b.stopEvent=function(a){b.stopPropagation(a),b.preventDefault(a);return!1},b.stopPropagation=function(a){a.stopPropagation?a.stopPropagation():a.cancelBubble=!0},b.preventDefault=function(a){a.preventDefault?a.preventDefault():a.returnValue=!1},b.getDocumentX=function(a){return a.clientX?a.clientX+f.getPageScrollLeft():a.pageX},b.getDocumentY=function(a){return a.clientY?a.clientY+f.getPageScrollTop():a.pageY},b.getButton=function(a){if(a.type=="dblclick")return 0;if(a.type=="contextmenu")return 2;return a.preventDefault?a.button:{1:0,2:2,4:1}[a.button]},document.documentElement.setCapture?b.capture=function(a,c,d){function f(e){c&&c(e),d&&d(),b.removeListener(a,"mousemove",c),b.removeListener(a,"mouseup",f),b.removeListener(a,"losecapture",f),a.releaseCapture()}function e(a){c(a);return b.stopPropagation(a)}b.addListener(a,"mousemove",c),b.addListener(a,"mouseup",f),b.addListener(a,"losecapture",f),a.setCapture()}:b.capture=function(a,b,c){function e(a){b&&b(a),c&&c(),document.removeEventListener("mousemove",d,!0),document.removeEventListener("mouseup",e,!0),a.stopPropagation()}function d(a){b(a),a.stopPropagation()}document.addEventListener("mousemove",d,!0),document.addEventListener("mouseup",e,!0)},b.addMouseWheelListener=function(a,c){var d=function(a){a.wheelDelta!==undefined?a.wheelDeltaX!==undefined?(a.wheelX=-a.wheelDeltaX/8,a.wheelY=-a.wheelDeltaY/8):(a.wheelX=0,a.wheelY=-a.wheelDelta/8):a.axis&&a.axis==a.HORIZONTAL_AXIS?(a.wheelX=(a.detail||0)*5,a.wheelY=0):(a.wheelX=0,a.wheelY=(a.detail||0)*5),c(a)};b.addListener(a,"DOMMouseScroll",d),b.addListener(a,"mousewheel",d)},b.addMultiMouseDownListener=function(a,c,d,f,g){var h=0,i,j,k=function(a){h+=1,h==1&&(i=a.clientX,j=a.clientY,setTimeout(function(){h=0},f||600));var e=b.getButton(a)==c;if(!e||Math.abs(a.clientX-i)>5||Math.abs(a.clientY-j)>5)h=0;h==d&&(h=0,g(a));if(e)return b.preventDefault(a)};b.addListener(a,"mousedown",k),e.isIE&&b.addListener(a,"dblclick",k)},b.addCommandKeyListener=function(a,c){var d=b.addListener;if(e.isOldGecko){var f=null;d(a,"keydown",function(a){f=a.keyCode}),d(a,"keypress",function(a){return g(c,a,f)})}else{var h=null;d(a,"keydown",function(a){h=a.keyIdentifier||a.keyCode;return g(c,a,a.keyCode)}),e.isMac&&e.isOpera&&d(a,"keypress",function(a){var b=a.keyIdentifier||a.keyCode;if(h!==b)return g(c,a,a.keyCode);h=null})}}}),define("ace/editor",["require","exports","module","pilot/fixoldbrowsers","pilot/oop","pilot/event","pilot/lang","pilot/useragent","ace/keyboard/textinput","ace/mouse_handler","ace/keyboard/keybinding","ace/edit_session","ace/search","ace/range","pilot/event_emitter"],function(a,b,c){a("pilot/fixoldbrowsers");var d=a("pilot/oop"),e=a("pilot/event"),f=a("pilot/lang"),g=a("pilot/useragent"),h=a("ace/keyboard/textinput").TextInput,i=a("ace/mouse_handler").MouseHandler,j=a("ace/keyboard/keybinding").KeyBinding,k=a("ace/edit_session").EditSession,l=a("ace/search").Search,m=a("ace/range").Range,n=a("pilot/event_emitter").EventEmitter,o=function(a,b){var c=a.getContainerElement();this.container=c,this.renderer=a,this.textInput=new h(a.getTextAreaContainer(),this),this.keyBinding=new j(this),g.isIPad||(this.$mouseHandler=new i(this)),this.$blockScrolling=0,this.$search=(new l).set({wrap:!0}),this.setSession(b||new k(""))};(function(){d.implement(this,n),this.$forwardEvents={gutterclick:1,gutterdblclick:1},this.$originalAddEventListener=this.addEventListener,this.$originalRemoveEventListener=this.removeEventListener,this.addEventListener=function(a,b){return this.$forwardEvents[a]?this.renderer.addEventListener(a,b):this.$originalAddEventListener(a,b)},this.removeEventListener=function(a,b){return this.$forwardEvents[a]?this.renderer.removeEventListener(a,b):this.$originalRemoveEventListener(a,b)},this.setKeyboardHandler=function(a){this.keyBinding.setKeyboardHandler(a)},this.getKeyboardHandler=function(){return this.keyBinding.getKeyboardHandler()},this.setSession=function(a){if(this.session!=a){if(this.session){var b=this.session;this.session.removeEventListener("change",this.$onDocumentChange),this.session.removeEventListener("changeMode",this.$onChangeMode),this.session.removeEventListener("tokenizerUpdate",this.$onTokenizerUpdate),this.session.removeEventListener("changeTabSize",this.$onChangeTabSize),this.session.removeEventListener("changeWrapLimit",this.$onChangeWrapLimit),this.session.removeEventListener("changeWrapMode",this.$onChangeWrapMode),this.session.removeEventListener("onChangeFold",this.$onChangeFold),this.session.removeEventListener("changeFrontMarker",this.$onChangeFrontMarker),this.session.removeEventListener("changeBackMarker",this.$onChangeBackMarker),this.session.removeEventListener("changeBreakpoint",this.$onChangeBreakpoint),this.session.removeEventListener("changeAnnotation",this.$onChangeAnnotation),this.session.removeEventListener("changeOverwrite",this.$onCursorChange);var c=this.session.getSelection();c.removeEventListener("changeCursor",this.$onCursorChange),c.removeEventListener("changeSelection",this.$onSelectionChange),this.session.setScrollTopRow(this.renderer.getScrollTopRow())}this.session=a,this.$onDocumentChange=this.onDocumentChange.bind(this),a.addEventListener("change",this.$onDocumentChange),this.renderer.setSession(a),this.$onChangeMode=this.onChangeMode.bind(this),a.addEventListener("changeMode",this.$onChangeMode),this.$onTokenizerUpdate=this.onTokenizerUpdate.bind(this),a.addEventListener("tokenizerUpdate",this.$onTokenizerUpdate),this.$onChangeTabSize=this.renderer.updateText.bind(this.renderer),a.addEventListener("changeTabSize",this.$onChangeTabSize),this.$onChangeWrapLimit=this.onChangeWrapLimit.bind(this),a.addEventListener("changeWrapLimit",this.$onChangeWrapLimit),this.$onChangeWrapMode=this.onChangeWrapMode.bind(this),a.addEventListener("changeWrapMode",this.$onChangeWrapMode),this.$onChangeFold=this.onChangeFold.bind(this),a.addEventListener("changeFold",this.$onChangeFold),this.$onChangeFrontMarker=this.onChangeFrontMarker.bind(this),this.session.addEventListener("changeFrontMarker",this.$onChangeFrontMarker),this.$onChangeBackMarker=this.onChangeBackMarker.bind(this),this.session.addEventListener("changeBackMarker",this.$onChangeBackMarker),this.$onChangeBreakpoint=this.onChangeBreakpoint.bind(this),this.session.addEventListener("changeBreakpoint",this.$onChangeBreakpoint),this.$onChangeAnnotation=this.onChangeAnnotation.bind(this),this.session.addEventListener("changeAnnotation",this.$onChangeAnnotation),this.$onCursorChange=this.onCursorChange.bind(this),this.session.addEventListener("changeOverwrite",this.$onCursorChange),this.selection=a.getSelection(),this.selection.addEventListener("changeCursor",this.$onCursorChange),this.$onSelectionChange=this.onSelectionChange.bind(this),this.selection.addEventListener("changeSelection",this.$onSelectionChange),this.onChangeMode(),this.onCursorChange(),this.onSelectionChange(),this.onChangeFrontMarker(),this.onChangeBackMarker(),this.onChangeBreakpoint(),this.onChangeAnnotation(),this.session.getUseWrapMode()&&this.renderer.adjustWrapLimit(),this.renderer.scrollToRow(a.getScrollTopRow()),this.renderer.updateFull(),this._dispatchEvent("changeSession",{session:a,oldSession:b})}},this.getSession=function(){return this.session},this.getSelection=function(){return this.selection},this.resize=function(){this.renderer.onResize()},this.setTheme=function(a){this.renderer.setTheme(a)},this.getTheme=function(){return this.renderer.getTheme()},this.setStyle=function(a){this.renderer.setStyle(a)},this.unsetStyle=function(a){this.renderer.unsetStyle(a)},this.setFontSize=function(a){this.container.style.fontSize=a},this.$highlightBrackets=function(){this.session.$bracketHighlight&&(this.session.removeMarker(this.session.$bracketHighlight),this.session.$bracketHighlight=null);if(!this.$highlightPending){var a=this;this.$highlightPending=!0,setTimeout(function(){a.$highlightPending=!1;var b=a.session.findMatchingBracket(a.getCursorPosition());if(b){var c=new m(b.row,b.column,b.row,b.column+1);a.session.$bracketHighlight=a.session.addMarker(c,"ace_bracket","text")}},10)}},this.focus=function(){var a=this;g.isIE||setTimeout(function(){a.textInput.focus()}),this.textInput.focus()},this.isFocused=function(){return this.textInput.isFocused()},this.blur=function(){this.textInput.blur()},this.onFocus=function(){this.renderer.showCursor(),this.renderer.visualizeFocus(),this._dispatchEvent("focus")},this.onBlur=function(){this.renderer.hideCursor(),this.renderer.visualizeBlur(),this._dispatchEvent("blur")},this.onDocumentChange=function(a){var b=a.data,c=b.range;if(c.start.row==c.end.row&&b.action!="insertLines"&&b.action!="removeLines")var d=c.end.row;else d=Infinity;this.renderer.updateLines(c.start.row,d),this.renderer.updateCursor()},this.onTokenizerUpdate=function(a){var b=a.data;this.renderer.updateLines(b.first,b.last)},this.onCursorChange=function(a){this.renderer.updateCursor(),this.$blockScrolling||this.renderer.scrollCursorIntoView(),this.renderer.moveTextAreaToCursor(this.textInput.getElement()),this.$highlightBrackets(),this.$updateHighlightActiveLine()},this.$updateHighlightActiveLine=function(){var a=this.getSession();a.$highlightLineMarker&&a.removeMarker(a.$highlightLineMarker),a.$highlightLineMarker=null;if(this.getHighlightActiveLine()&&(this.getSelectionStyle()!="line"||!this.selection.isMultiLine())){var b=this.getCursorPosition(),c=this.session.getFoldLine(b.row),d;c?d=new m(c.start.row,0,c.end.row+1,0):d=new m(b.row,0,b.row+1,0),a.$highlightLineMarker=a.addMarker(d,"ace_active_line","background")}},this.onSelectionChange=function(a){var b=this.getSession();b.$selectionMarker&&b.removeMarker(b.$selectionMarker),b.$selectionMarker=null;if(!this.selection.isEmpty()){var c=this.selection.getRange(),d=this.getSelectionStyle();b.$selectionMarker=b.addMarker(c,"ace_selection",d)}else this.$updateHighlightActiveLine();this.$highlightSelectedWord&&this.session.getMode().highlightSelection(this)},this.onChangeFrontMarker=function(){this.renderer.updateFrontMarkers()},this.onChangeBackMarker=function(){this.renderer.updateBackMarkers()},this.onChangeBreakpoint=function(){this.renderer.setBreakpoints(this.session.getBreakpoints())},this.onChangeAnnotation=function(){this.renderer.setAnnotations(this.session.getAnnotations())},this.onChangeMode=function(){this.renderer.updateText()},this.onChangeWrapLimit=function(){this.renderer.updateFull()},this.onChangeWrapMode=function(){this.renderer.onResize(!0)},this.onChangeFold=function(){this.$updateHighlightActiveLine(),this.renderer.updateFull()},this.getCopyText=function(){return this.selection.isEmpty()?"":this.session.getTextRange(this.getSelectionRange())},this.onCut=function(){this.$readOnly||this.selection.isEmpty()||(this.session.remove(this.getSelectionRange()),this.clearSelection())},this.insert=function(a){if(!this.$readOnly){var b=this.session,c=b.getMode(),d=this.getCursorPosition();if(this.getBehavioursEnabled()){var e=c.transformAction(b.getState(d.row),"insertion",this,b,a);e&&(a=e.text)}a=a.replace("\t",this.session.getTabString());if(!this.selection.isEmpty()){var d=this.session.remove(this.getSelectionRange());this.clearSelection()}else if(this.session.getOverwrite()){var f=new m.fromPoints(d,d);f.end.column+=a.length,this.session.remove(f)}this.clearSelection();var g=d.column,h=b.getState(d.row),i=c.checkOutdent(h,b.getLine(d.row),a),j=b.getLine(d.row),k=c.getNextLineIndent(h,j.slice(0,d.column),b.getTabString()),l=b.insert(d,a);e&&e.selection&&(e.selection.length==2?this.selection.setSelectionRange(new m(d.row,g+e.selection[0],d.row,g+e.selection[1])):this.selection.setSelectionRange(new m(d.row+e.selection[0],e.selection[1],d.row+e.selection[2],e.selection[3])));var h=b.getState(d.row);if(b.getDocument().isNewLine(a)){this.moveCursorTo(d.row+1,0);var n=b.getTabSize(),o=Number.MAX_VALUE;for(var p=d.row+1;p<=l.row;++p){var q=0;j=b.getLine(p);for(var r=0;r<j.length;++r)if(j.charAt(r)=="\t")q+=n;else if(j.charAt(r)==" ")q+=1;else break;/[^\s]/.test(j)&&(o=Math.min(q,o))}for(var p=d.row+1;p<=l.row;++p){var s=o;j=b.getLine(p);for(var r=0;r<j.length&&s>0;++r)j.charAt(r)=="\t"?s-=n:j.charAt(r)==" "&&(s-=1);b.remove(new m(p,0,p,r))}b.indentRows(d.row+1,l.row,k)}else i&&c.autoOutdent(h,b,d.row)}},this.onTextInput=function(a,b){if(b&&a.length==1){var c=this.keyBinding.onCommandKey({},0,null,a);c||this.insert(a)}else this.keyBinding.onTextInput(a)},this.onCommandKey=function(a,b,c){this.keyBinding.onCommandKey(a,b,c)},this.setOverwrite=function(a){this.session.setOverwrite(a)},this.getOverwrite=function(){return this.session.getOverwrite()},this.toggleOverwrite=function(){this.session.toggleOverwrite()},this.setScrollSpeed=function(a){this.$mouseHandler.setScrollSpeed(a)},this.getScrollSpeed=function(){return this.$mouseHandler.getScrollSpeed()},this.$selectionStyle="line",this.setSelectionStyle=function(a){this.$selectionStyle!=a&&(this.$selectionStyle=a,this.onSelectionChange(),this._dispatchEvent("changeSelectionStyle",{data:a}))},this.getSelectionStyle=function(){return this.$selectionStyle},this.$highlightActiveLine=!0,this.setHighlightActiveLine=function(a){this.$highlightActiveLine!=a&&(this.$highlightActiveLine=a,this.$updateHighlightActiveLine())},this.getHighlightActiveLine=function(){return this.$highlightActiveLine},this.$highlightSelectedWord=!0,this.setHighlightSelectedWord=function(a){this.$highlightSelectedWord!=a&&(this.$highlightSelectedWord=a,a?this.session.getMode().highlightSelection(this):this.session.getMode().clearSelectionHighlight(this))},this.getHighlightSelectedWord=function(){return this.$highlightSelectedWord},this.setShowInvisibles=function(a){this.getShowInvisibles()!=a&&this.renderer.setShowInvisibles(a)},this.getShowInvisibles=function(){return this.renderer.getShowInvisibles()},this.setShowPrintMargin=function(a){this.renderer.setShowPrintMargin(a)},this.getShowPrintMargin=function(){return this.renderer.getShowPrintMargin()},this.setPrintMarginColumn=function(a){this.renderer.setPrintMarginColumn(a)},this.getPrintMarginColumn=function(){return this.renderer.getPrintMarginColumn()},this.$readOnly=!1,this.setReadOnly=function(a){this.$readOnly=a},this.getReadOnly=function(){return this.$readOnly},this.$modeBehaviours=!0,this.setBehavioursEnabled=function(a){this.$modeBehaviours=a},this.getBehavioursEnabled=function(){return this.$modeBehaviours},this.removeRight=function(){this.$readOnly||(this.selection.isEmpty()&&this.selection.selectRight(),this.session.remove(this.getSelectionRange()),this.clearSelection())},this.removeLeft=function(){if(!this.$readOnly){this.selection.isEmpty()&&this.selection.selectLeft();var a=this.getSelectionRange();if(this.getBehavioursEnabled()){var b=this.session,c=b.getState(a.start.row),d=b.getMode().transformAction(c,"deletion",this,b,a);d!==!1&&(a=d)}this.session.remove(a),this.clearSelection()}},this.removeWordRight=function(){this.$readOnly||(this.selection.isEmpty()&&this.selection.selectWordRight(),this.session.remove(this.getSelectionRange()),this.clearSelection())},this.removeWordLeft=function(){this.$readOnly||(this.selection.isEmpty()&&this.selection.selectWordLeft(),this.session.remove(this.getSelectionRange()),this.clearSelection())},this.removeToLineStart=function(){this.$readOnly||(this.selection.isEmpty()&&this.selection.selectLineStart(),this.session.remove(this.getSelectionRange()),this.clearSelection())},this.removeToLineEnd=function(){if(!this.$readOnly){this.selection.isEmpty()&&this.selection.selectLineEnd();var a=this.getSelectionRange();a.start.column==a.end.column&&a.start.row==a.end.row&&(a.end.column=0,a.end.row++),this.session.remove(a),this.clearSelection()}},this.splitLine=function(){if(!this.$readOnly){this.selection.isEmpty()||(this.session.remove(this.getSelectionRange()),this.clearSelection());var a=this.getCursorPosition();this.insert("\n"),this.moveCursorToPosition(a)}},this.transposeLetters=function(){if(!this.$readOnly){if(!this.selection.isEmpty())return;var a=this.getCursorPosition(),b=a.column;if(b==0)return;var c=this.session.getLine(a.row);if(b<c.length)var d=c.charAt(b)+c.charAt(b-1),e=new m(a.row,b-1,a.row,b+1);else var d=c.charAt(b-1)+c.charAt(b-2),e=new m(a.row,b-2,a.row,b);this.session.replace(e,d)}},this.indent=function(){if(!this.$readOnly){var a=this.session,b=this.getSelectionRange();if(!(b.start.row<b.end.row||b.start.column<b.end.column)){var d;if(this.session.getUseSoftTabs()){var e=a.getTabSize(),g=this.getCursorPosition(),h=a.documentToScreenColumn(g.row,g.column),i=e-h%e;d=f.stringRepeat(" ",i)}else d="\t";return this.onTextInput(d)}var c=this.$getSelectedRows();a.indentRows(c.first,c.last,"\t")}},this.blockOutdent=function(){if(!this.$readOnly){var a=this.session.getSelection();this.session.outdentRows(a.getRange())}},this.toggleCommentLines=function(){if(!this.$readOnly){var a=this.session.getState(this.getCursorPosition().row),b=this.$getSelectedRows();this.session.getMode().toggleCommentLines(a,this.session,b.first,b.last)}},this.removeLines=function(){if(!this.$readOnly){var a=this.$getSelectedRows();if(a.last==0||a.last+1<this.session.getLength())var b=new m(a.first,0,a.last+1,0);else var b=new m(a.first-1,this.session.getLine(a.first).length,a.last,this.session.getLine(a.last).length);this.session.remove(b),this.clearSelection()}},this.moveLinesDown=function(){this.$readOnly||this.$moveLines(function(a,b){return this.session.moveLinesDown(a,b)})},this.moveLinesUp=function(){this.$readOnly||this.$moveLines(function(a,b){return this.session.moveLinesUp(a,b)})},this.moveText=function(a,b){return this.$readOnly?null:this.session.moveText(a,b)},this.copyLinesUp=function(){this.$readOnly||this.$moveLines(function(a,b){this.session.duplicateLines(a,b);return 0})},this.copyLinesDown=function(){this.$readOnly||this.$moveLines(function(a,b){return this.session.duplicateLines(a,b)})},this.$moveLines=function(a){var b=this.$getSelectedRows(),c=a.call(this,b.first,b.last),d=this.selection;d.setSelectionAnchor(b.last+c+1,0),d.$moveSelection(function(){d.moveCursorTo(b.first+c,0)})},this.$getSelectedRows=function(){var a=this.getSelectionRange().collapseRows();return{first:a.start.row,last:a.end.row}},this.onCompositionStart=function(a){this.renderer.showComposition(this.getCursorPosition())},this.onCompositionUpdate=function(a){this.renderer.setCompositionText(a)},this.onCompositionEnd=function(){this.renderer.hideComposition()},this.getFirstVisibleRow=function(){return this.renderer.getFirstVisibleRow()},this.getLastVisibleRow=function(){return this.renderer.getLastVisibleRow()},this.isRowVisible=function(a){return a>=this.getFirstVisibleRow()&&a<=this.getLastVisibleRow()},this.$getVisibleRowCount=function(){return this.renderer.getScrollBottomRow()-this.renderer.getScrollTopRow()+1},this.$getPageDownRow=function(){return this.renderer.getScrollBottomRow()},this.$getPageUpRow=function(){var a=this.renderer.getScrollTopRow(),b=this.renderer.getScrollBottomRow();return a-(b-a)},this.selectPageDown=function(){var a=this.$getPageDownRow()+Math.floor(this.$getVisibleRowCount()/2);this.scrollPageDown();var b=this.getSelection(),c=this.session.documentToScreenPosition(b.getSelectionLead()),d=this.session.screenToDocumentPosition(a,c.column);b.selectTo(d.row,d.column)},this.selectPageUp=function(){var a=this.renderer.getScrollTopRow()-this.renderer.getScrollBottomRow(),b=this.$getPageUpRow()+Math.round(a/2);this.scrollPageUp();var c=this.getSelection(),d=this.session.documentToScreenPosition(c.getSelectionLead()),e=this.session.screenToDocumentPosition(b,d.column);c.selectTo(e.row,e.column)},this.gotoPageDown=function(){var a=this.$getPageDownRow(),b=this.getCursorPositionScreen().column;this.scrollToRow(a),this.getSelection().moveCursorToScreen(a,b)},this.gotoPageUp=function(){var a=this.$getPageUpRow(),b=this.getCursorPositionScreen().column;this.scrollToRow(a),this.getSelection().moveCursorToScreen(a,b)},this.scrollPageDown=function(){this.scrollToRow(this.$getPageDownRow())},this.scrollPageUp=function(){this.renderer.scrollToRow(this.$getPageUpRow())},this.scrollToRow=function(a){this.renderer.scrollToRow(a)},this.scrollToLine=function(a,b){this.renderer.scrollToLine(a,b)},this.centerSelection=function(){var a=this.getSelectionRange(),b=Math.floor(a.start.row+(a.end.row-a.start.row)/2);this.renderer.scrollToLine(b,!0)},this.getCursorPosition=function(){return this.selection.getCursor()},this.getCursorPositionScreen=function(){return this.session.documentToScreenPosition(this.getCursorPosition())},this.getSelectionRange=function(){return this.selection.getRange()},this.selectAll=function(){this.$blockScrolling+=1,this.selection.selectAll(),this.$blockScrolling-=1},this.clearSelection=function(){this.selection.clearSelection()},this.moveCursorTo=function(a,b){this.selection.moveCursorTo(a,b)},this.moveCursorToPosition=function(a){this.selection.moveCursorToPosition(a)},this.gotoLine=function(a,b){this.selection.clearSelection(),this.$blockScrolling+=1,this.moveCursorTo(a-1,b||0),this.$blockScrolling-=1,this.isRowVisible(this.getCursorPosition().row)||this.scrollToLine(a,!0)},this.navigateTo=function(a,b){this.clearSelection(),this.moveCursorTo(a,b)},this.navigateUp=function(a){this.selection.clearSelection(),a=a||1,this.selection.moveCursorBy(-a,0)},this.navigateDown=function(a){this.selection.clearSelection(),a=a||1,this.selection.moveCursorBy(a,0)},this.navigateLeft=function(a){if(!this.selection.isEmpty()){var b=this.getSelectionRange().start;this.moveCursorToPosition(b)}else{a=a||1;while(a--)this.selection.moveCursorLeft()}this.clearSelection()},this.navigateRight=function(a){if(!this.selection.isEmpty()){var b=this.getSelectionRange().end;this.moveCursorToPosition(b)}else{a=a||1;while(a--)this.selection.moveCursorRight()}this.clearSelection()},this.navigateLineStart=function(){this.selection.moveCursorLineStart(),this.clearSelection()},this.navigateLineEnd=function(){this.selection.moveCursorLineEnd(),this.clearSelection()},this.navigateFileEnd=function(){this.selection.moveCursorFileEnd(),this.clearSelection()},this.navigateFileStart=function(){this.selection.moveCursorFileStart(),this.clearSelection()},this.navigateWordRight=function(){this.selection.moveCursorWordRight(),this.clearSelection()},this.navigateWordLeft=function(){this.selection.moveCursorWordLeft(),this.clearSelection()},this.replace=function(a,b){b&&this.$search.set(b);var c=this.$search.find(this.session);!c||(this.$tryReplace(c,a),c!==null&&this.selection.setSelectionRange(c))},this.replaceAll=function(a,b){b&&this.$search.set(b);var c=this.$search.findAll(this.session);if(!!c.length){var d=this.getSelectionRange();this.clearSelection(),this.selection.moveCursorTo(0,0),this.$blockScrolling+=1;for(var e=c.length-1;e>=0;--e)this.$tryReplace(c[e],a);this.selection.setSelectionRange(d),this.$blockScrolling-=1}},this.$tryReplace=function(a,b){var c=this.session.getTextRange(a),b=this.$search.replace(c,b);if(b!==null){a.end=this.session.replace(a,b);return a}return null},this.getLastSearchOptions=function(){return this.$search.getOptions()},this.find=function(a,b){this.clearSelection(),b=b||{},b.needle=a,this.$search.set(b),this.$find()},this.findNext=function(a){a=a||{},typeof a.backwards=="undefined"&&(a.backwards=!1),this.$search.set(a),this.$find()},this.findPrevious=function(a){a=a||{},typeof a.backwards=="undefined"&&(a.backwards=!0),this.$search.set(a),this.$find()},this.$find=function(a){this.selection.isEmpty()||this.$search.set({needle:this.session.getTextRange(this.getSelectionRange())}),typeof a!="undefined"&&this.$search.set({backwards:a});var b=this.$search.find(this.session);b&&(this.gotoLine(b.end.row+1,b.end.column),this.selection.setSelectionRange(b))},this.undo=function(){this.session.getUndoManager().undo()},this.redo=function(){this.session.getUndoManager().redo()},this.destroy=function(){this.renderer.destroy()}}).call(o.prototype),b.Editor=o}),define("ace/keyboard/textinput",["require","exports","module","pilot/event","pilot/useragent","pilot/dom"],function(a,b,c){var d=a("pilot/event"),e=a("pilot/useragent"),f=a("pilot/dom"),g=function(a,b){function u(){return document.activeElement===c}function l(a){if(!i){var d=a||c.value;if(d){d.charCodeAt(d.length-1)==g.charCodeAt(0)?(d=d.slice(0,-1),d&&b.onTextInput(d,!j)):b.onTextInput(d,!j);if(!u())return!1}}i=!1,j=!1,c.value=g,c.select()}var c=f.createElement("textarea");c.style.left="-10000px",a.appendChild(c);var g=String.fromCharCode(0);l();var h=!1,i=!1,j=!1,k="",m=function(a){setTimeout(function(){h||l(a.data)},0)},n=function(a){e.isIE&&c.value.charCodeAt(0)>128||setTimeout(function(){h||l()},0)},o=function(a){h=!0,b.onCompositionStart(),e.isGecko||setTimeout(p,0)},p=function(){!h||b.onCompositionUpdate(c.value)},q=function(a){h=!1,b.onCompositionEnd()},r=function(a){i=!0;var d=b.getCopyText();d?c.value=d:a.preventDefault(),c.select(),setTimeout(function(){l()},0)},s=function(a){i=!0;var d=b.getCopyText();d?(c.value=d,b.onCut()):a.preventDefault(),c.select(),setTimeout(function(){l()},0)};d.addCommandKeyListener(c,b.onCommandKey.bind(b));if(e.isIE){var t={13:1,27:1};d.addListener(c,"keyup",function(a){h&&(!c.value||t[a.keyCode])&&setTimeout(q,0);(c.value.charCodeAt(0)|0)<129||(h?p():o())})}c.attachEvent?d.addListener(c,"propertychange",n):e.isChrome||e.isSafari?d.addListener(c,"textInput",m):e.isIE?d.addListener(c,"textinput",m):d.addListener(c,"input",m),d.addListener(c,"paste",function(a){j=!0,a.clipboardData&&a.clipboardData.getData?(l(a.clipboardData.getData("text/plain")),a.preventDefault()):n()}),e.isIE?(d.addListener(c,"beforecopy",function(a){var c=b.getCopyText();c?clipboardData.setData("Text",c):a.preventDefault()}),d.addListener(a,"keydown",function(a){if(a.ctrlKey&&a.keyCode==88){var c=b.getCopyText();c&&(clipboardData.setData("Text",c),b.onCut()),d.preventDefault(a)}})):(d.addListener(c,"copy",r),d.addListener(c,"cut",s)),d.addListener(c,"compositionstart",o),e.isGecko&&d.addListener(c,"text",p),e.isWebKit&&d.addListener(c,"keyup",p),d.addListener(c,"compositionend",q),d.addListener(c,"blur",function(){b.onBlur()}),d.addListener(c,"focus",function(){b.onFocus(),c.select()}),this.focus=function(){b.onFocus(),c.select(),c.focus()},this.blur=function(){c.blur()},this.isFocused=u,this.getElement=function(){return c},this.onContextMenu=function(a,b){a&&(k||(k=c.style.cssText),c.style.cssText="position:fixed; z-index:1000;left:"+(a.x-2)+"px; top:"+(a.y-2)+"px;"),b&&(c.value="")},this.onContextMenuClose=function(){setTimeout(function(){k&&(c.style.cssText=k,k=""),l()},0)}};b.TextInput=g}),define("ace/mouse_handler",["require","exports","module","pilot/event","pilot/dom","pilot/browser_focus"],function(a,b,c){var d=a("pilot/event"),e=a("pilot/dom"),f=a("pilot/browser_focus").BrowserFocus,g=0,h=1,i=2,j=250,k=5,l=function(a){this.editor=a,this.browserFocus=new f,d.addListener(a.container,"mousedown",function(b){a.focus();return d.preventDefault(b)}),d.addListener(a.container,"selectstart",function(a){return d.preventDefault(a)});var b=a.renderer.getMouseEventTarget();d.addListener(b,"mousedown",this.onMouseDown.bind(this)),d.addMultiMouseDownListener(b,0,2,500,this.onMouseDoubleClick.bind(this)),d.addMultiMouseDownListener(b,0,3,600,this.onMouseTripleClick.bind(this)),d.addMultiMouseDownListener(b,0,4,600,this.onMouseQuadClick.bind(this)),d.addMouseWheelListener(b,this.onMouseWheel.bind(this))};(function(){this.$scrollSpeed=1,this.setScrollSpeed=function(a){this.$scrollSpeed=a},this.getScrollSpeed=function(){return this.$scrollSpeed},this.$getEventPosition=function(a){var b=d.getDocumentX(a),c=d.getDocumentY(a),e=this.editor.renderer.screenToTextCoordinates(b,c);e.row=Math.max(0,Math.min(e.row,this.editor.session.getLength()-1));return e},this.$distance=function(a,b,c,d){return Math.sqrt(Math.pow(c-a,2)+Math.pow(d-b,2))},this.onMouseDown=function(a){function D(b){a.shiftKey?l.selection.selectToPosition(b):m.$clickSelection||(l.moveCursorToPosition(b),l.selection.clearSelection(b.row,b.column)),p=h}if(!(!this.browserFocus.isFocused()||(new Date).getTime()-this.browserFocus.lastFocus<20||!this.editor.isFocused())){var b=d.getDocumentX(a),c=d.getDocumentY(a),f=this.$getEventPosition(a),l=this.editor,m=this,n=l.getSelectionRange(),o=n.isEmpty(),p=g,q=!1,r=d.getButton(a);if(r!==0){o&&l.moveCursorToPosition(f),r==2&&(l.textInput.onContextMenu({x:b,y:c},o),d.capture(l.container,function(){},l.textInput.onContextMenuClose));return}var s=l.session.getFoldAt(f.row,f.column,1);if(s){l.selection.setSelectionRange(s.range);return}q=!l.getReadOnly()&&!o&&n.contains(f.row,f.column),q||D(f);var t,u,v=l.getOverwrite(),w=(new Date).getTime(),x,y,z=function(a){t=d.getDocumentX(a),u=d.getDocumentY(a)},A=function(){clearInterval(G),p==g?D(f):p==i&&B(),m.$clickSelection=null,p=g},B=function(){e.removeCssClass(l.container,"ace_dragging"),l.session.removeMarker(dragSelectionMarker),m.$clickSelection||x||(l.moveCursorToPosition(f),l.selection.clearSelection(f.row,f.column));if(!!x){if(y.contains(x.row,x.column)){x=null;return}l.clearSelection();var a=l.moveText(y,x);if(!a){x=null;return}l.selection.setSelectionRange(a)}},C=function(){if(t!==undefined&&u!==undefined){if(p==g){var a=m.$distance(b,c,t,u),d=(new Date).getTime();if(a>k){p=h;var f=l.renderer.screenToTextCoordinates(t,u);f.row=Math.max(0,Math.min(f.row,l.session.getLength()-1)),D(f)}else if(d-w>j){p=i,y=l.getSelectionRange();var n=l.getSelectionStyle();dragSelectionMarker=l.session.addMarker(y,"ace_selection",n),l.clearSelection(),e.addCssClass(l.container,"ace_dragging")}}p==i?F():p==h&&E()}},E=function(){var a=l.renderer.screenToTextCoordinates(t,u);a.row=Math.max(0,Math.min(a.row,l.session.getLength()-1));if(m.$clickSelection)if(m.$clickSelection.contains(a.row,a.column))l.selection.setSelectionRange(m.$clickSelection);else{if(m.$clickSelection.compare(a.row,a.column)==-1)var b=m.$clickSelection.end;else var b=m.$clickSelection.start;l.selection.setSelectionAnchor(b.row,b.column),l.selection.selectToPosition(a)}else l.selection.selectToPosition(a);l.renderer.scrollCursorIntoView()},F=function(){x=l.renderer.screenToTextCoordinates(t,u),x.row=Math.max(0,Math.min(x.row,l.session.getLength()-1)),l.moveCursorToPosition(x)};d.capture(l.container,z,A);var G=setInterval(C,20);return d.preventDefault(a)}},this.onMouseDoubleClick=function(a){var b=this.editor,c=this.$getEventPosition(a),d=b.session.getFoldAt(c.row,c.column,1);d?b.session.expandFold(d):(b.moveCursorToPosition(c),b.selection.selectWord(),this.$clickSelection=b.getSelectionRange())},this.onMouseTripleClick=function(a){var b=this.$getEventPosition(a);this.editor.moveCursorToPosition(b),this.editor.selection.selectLine(),this.$clickSelection=this.editor.getSelectionRange()},this.onMouseQuadClick=function(a){this.editor.selectAll(),this.$clickSelection=this.editor.getSelectionRange()},this.onMouseWheel=function(a){var b=this.$scrollSpeed*2;this.editor.renderer.scrollBy(a.wheelX*b,a.wheelY*b);return d.preventDefault(a)}}).call(l.prototype),b.MouseHandler=l}),define("pilot/browser_focus",["require","exports","module","pilot/oop","pilot/event","pilot/event_emitter"],function(a,b,c){var d=a("pilot/oop"),e=a("pilot/event"),f=a("pilot/event_emitter").EventEmitter,g=function(a){a=a||window,this.lastFocus=(new Date).getTime(),this._isFocused=!0;var b=this;e.addListener(a,"blur",function(a){b._setFocused(!1)}),e.addListener(a,"focus",function(a){b._setFocused(!0)})};(function(){d.implement(this,f),this.isFocused=function(){return this._isFocused},this._setFocused=function(a){this._isFocused!=a&&(a&&(this.lastFocus=(new Date).getTime()),this._isFocused=a,this._emit("changeFocus"))}}).call(g.prototype),b.BrowserFocus=g}),define("ace/keyboard/keybinding",["require","exports","module","pilot/useragent","pilot/keys","pilot/event","pilot/settings","pilot/canon","ace/commands/default_commands"],function(a,b,c){var d=a("pilot/useragent"),e=a("pilot/keys"),f=a("pilot/event"),g=a("pilot/settings").settings,h=a("pilot/canon");a("ace/commands/default_commands");var i=function(a){this.$editor=a,this.$data={},this.$keyboardHandler=null};(function(){this.setKeyboardHandler=function(a){this.$keyboardHandler!=a&&(this.$data={},this.$keyboardHandler=a)},this.getKeyboardHandler=function(){return this.$keyboardHandler},this.$callKeyboardHandler=function(a,b,c,d){var e={editor:this.$editor},g;this.$keyboardHandler&&(g=this.$keyboardHandler.handleKeyboard(this.$data,b,c,d,a));if(!g||!g.command)b!=0||d!=0?g={command:h.findKeyCommand(e,"editor",b,c)}:g={command:"inserttext",args:{text:c}};var i=!1;g&&(i=h.exec(g.command,e,"editor",g.args),i&&f.stopEvent(a));return i},this.onCommandKey=function(a,b,c,d){d||(d=e.keyCodeToString(c));return this.$callKeyboardHandler(a,b,d,c)},this.onTextInput=function(a){return this.$callKeyboardHandler({},0,a,0)}}).call(i.prototype),b.KeyBinding=i}),define("ace/commands/default_commands",["require","exports","module","pilot/lang","pilot/canon"],function(a,b,c){function f(a,b){return{win:a,mac:b,sender:"editor"}}var d=a("pilot/lang"),e=a("pilot/canon");e.addCommand({name:"null",exec:function(a,b,c){}}),e.addCommand({name:"selectall",bindKey:f("Ctrl-A","Command-A"),exec:function(a,b,c){a.editor.selectAll()}}),e.addCommand({name:"removeline",bindKey:f("Ctrl-D","Command-D"),exec:function(a,b,c){a.editor.removeLines()}}),e.addCommand({name:"gotoline",bindKey:f("Ctrl-L","Command-L"),exec:function(a,b,c){var d=parseInt(prompt("Enter line number:"));isNaN(d)||a.editor.gotoLine(d)}}),e.addCommand({name:"togglecomment",bindKey:f("Ctrl-7","Command-7"),exec:function(a,b,c){a.editor.toggleCommentLines()}}),e.addCommand({name:"findnext",bindKey:f("Ctrl-K","Command-G"),exec:function(a,b,c){a.editor.findNext()}}),e.addCommand({name:"findprevious",bindKey:f("Ctrl-Shift-K","Command-Shift-G"),exec:function(a,b,c){a.editor.findPrevious()}}),e.addCommand({name:"find",bindKey:f("Ctrl-F","Command-F"),exec:function(a,b,c){var d=prompt("Find:");a.editor.find(d)}}),e.addCommand({name:"replace",bindKey:f("Ctrl-R","Command-Option-F"),exec:function(a,b,c){var d=prompt("Find:");if(!!d){var e=prompt("Replacement:");if(!e)return;a.editor.replace(e,{needle:d})}}}),e.addCommand({name:"replaceall",bindKey:f("Ctrl-Shift-R","Command-Shift-Option-F"),exec:function(a,b,c){var d=prompt("Find:");if(!!d){var e=prompt("Replacement:");if(!e)return;a.editor.replaceAll(e,{needle:d})}}}),e.addCommand({name:"undo",bindKey:f("Ctrl-Z","Command-Z"),exec:function(a,b,c){a.editor.undo()}}),e.addCommand({name:"redo",bindKey:f("Ctrl-Shift-Z|Ctrl-Y","Command-Shift-Z|Command-Y"),exec:function(a,b,c){a.editor.redo()}}),e.addCommand({name:"overwrite",bindKey:f("Insert","Insert"),exec:function(a,b,c){a.editor.toggleOverwrite()}}),e.addCommand({name:"copylinesup",bindKey:f("Ctrl-Alt-Up","Command-Option-Up"),exec:function(a,b,c){a.editor.copyLinesUp()}}),e.addCommand({name:"movelinesup",bindKey:f("Alt-Up","Option-Up"),exec:function(a,b,c){a.editor.moveLinesUp()}}),e.addCommand({name:"selecttostart",bindKey:f("Ctrl-Shift-Home|Alt-Shift-Up","Command-Shift-Up"),exec:function(a,b,c){a.editor.getSelection().selectFileStart()}}),e.addCommand({name:"gotostart",bindKey:f("Ctrl-Home|Ctrl-Up","Command-Home|Command-Up"),exec:function(a,b,c){a.editor.navigateFileStart()}}),e.addCommand({name:"selectup",bindKey:f("Shift-Up","Shift-Up"),exec:function(a,b,c){a.editor.getSelection().selectUp()}}),e.addCommand({name:"golineup",bindKey:f("Up","Up|Ctrl-P"),exec:function(a,b,c){a.editor.navigateUp(b.times)}}),e.addCommand({name:"copylinesdown",bindKey:f("Ctrl-Alt-Down","Command-Option-Down"),exec:function(a,b,c){a.editor.copyLinesDown()}}),e.addCommand({name:"movelinesdown",bindKey:f("Alt-Down","Option-Down"),exec:function(a,b,c){a.editor.moveLinesDown()}}),e.addCommand({name:"selecttoend",bindKey:f("Ctrl-Shift-End|Alt-Shift-Down","Command-Shift-Down"),exec:function(a,b,c){a.editor.getSelection().selectFileEnd()}}),e.addCommand({name:"gotoend",bindKey:f("Ctrl-End|Ctrl-Down","Command-End|Command-Down"),exec:function(a,b,c){a.editor.navigateFileEnd()}}),e.addCommand({name:"selectdown",bindKey:f("Shift-Down","Shift-Down"),exec:function(a,b,c){a.editor.getSelection().selectDown()}}),e.addCommand({name:"golinedown",bindKey:f("Down","Down|Ctrl-N"),exec:function(a,b,c){a.editor.navigateDown(b.times)}}),e.addCommand({name:"selectwordleft",bindKey:f("Ctrl-Shift-Left","Option-Shift-Left"),exec:function(a,b,c){a.editor.getSelection().selectWordLeft()}}),e.addCommand({name:"gotowordleft",bindKey:f("Ctrl-Left","Option-Left"),exec:function(a,b,c){a.editor.navigateWordLeft()}}),e.addCommand({name:"selecttolinestart",bindKey:f("Alt-Shift-Left","Command-Shift-Left"),exec:function(a,b,c){a.editor.getSelection().selectLineStart()}}),e.addCommand({name:"gotolinestart",bindKey:f("Alt-Left|Home","Command-Left|Home|Ctrl-A"),exec:function(a,b,c){a.editor.navigateLineStart()}}),e.addCommand({name:"selectleft",bindKey:f("Shift-Left","Shift-Left"),exec:function(a,b,c){a.editor.getSelection().selectLeft()}}),e.addCommand({name:"gotoleft",bindKey:f("Left","Left|Ctrl-B"),exec:function(a,b,c){a.editor.navigateLeft(b.times)}}),e.addCommand({name:"selectwordright",bindKey:f("Ctrl-Shift-Right","Option-Shift-Right"),exec:function(a,b,c){a.editor.getSelection().selectWordRight()}}),e.addCommand({name:"gotowordright",bindKey:f("Ctrl-Right","Option-Right"),exec:function(a,b,c){a.editor.navigateWordRight()}}),e.addCommand({name:"selecttolineend",bindKey:f("Alt-Shift-Right","Command-Shift-Right"),exec:function(a,b,c){a.editor.getSelection().selectLineEnd()}}),e.addCommand({name:"gotolineend",bindKey:f("Alt-Right|End","Command-Right|End|Ctrl-E"),exec:function(a,b,c){a.editor.navigateLineEnd()}}),e.addCommand({name:"selectright",bindKey:f("Shift-Right","Shift-Right"),exec:function(a,b,c){a.editor.getSelection().selectRight()}}),e.addCommand({name:"gotoright",bindKey:f("Right","Right|Ctrl-F"),exec:function(a,b,c){a.editor.navigateRight(b.times)}}),e.addCommand({name:"selectpagedown",bindKey:f("Shift-PageDown","Shift-PageDown"),exec:function(a,b,c){a.editor.selectPageDown()}}),e.addCommand({name:"pagedown",bindKey:f(null,"PageDown"),exec:function(a,b,c){a.editor.scrollPageDown()}}),e.addCommand({name:"gotopagedown",bindKey:f("PageDown","Option-PageDown|Ctrl-V"),exec:function(a,b,c){a.editor.gotoPageDown()}}),e.addCommand({name:"selectpageup",bindKey:f("Shift-PageUp","Shift-PageUp"),exec:function(a,b,c){a.editor.selectPageUp()}}),e.addCommand({name:"pageup",bindKey:f(null,"PageUp"),exec:function(a,b,c){a.editor.scrollPageUp()}}),e.addCommand({name:"gotopageup",bindKey:f("PageUp","Option-PageUp"),exec:function(a,b,c){a.editor.gotoPageUp()}}),e.addCommand({name:"selectlinestart",bindKey:f("Shift-Home","Shift-Home"),exec:function(a,b,c){a.editor.getSelection().selectLineStart()}}),e.addCommand({name:"selectlineend",bindKey:f("Shift-End","Shift-End"),exec:function(a,b,c){a.editor.getSelection().selectLineEnd()}}),e.addCommand({name:"del",bindKey:f("Delete","Delete|Ctrl-D"),exec:function(a,b,c){a.editor.removeRight()}}),e.addCommand({name:"backspace",bindKey:f("Ctrl-Backspace|Command-Backspace|Option-Backspace|Shift-Backspace|Backspace","Ctrl-Backspace|Command-Backspace|Shift-Backspace|Backspace|Ctrl-H"),exec:function(a,b,c){a.editor.removeLeft()}}),e.addCommand({name:"removetolinestart",bindKey:f(null,"Option-Backspace"),exec:function(a,b,c){a.editor.removeToLineStart()}}),e.addCommand({name:"removetolineend",bindKey:f(null,"Ctrl-K"),exec:function(a,b,c){a.editor.removeToLineEnd()}}),e.addCommand({name:"removewordleft",bindKey:f("Ctrl-Backspace","Alt-Backspace|Ctrl-Alt-Backspace"),exec:function(a,b,c){a.editor.removeWordLeft()}}),e.addCommand({name:"removewordright",bindKey:f(null,"Alt-Delete"),exec:function(a,b,c){a.editor.removeWordRight()}}),e.addCommand({name:"outdent",bindKey:f("Shift-Tab","Shift-Tab"),exec:function(a,b,c){a.editor.blockOutdent()}}),e.addCommand({name:"indent",bindKey:f("Tab","Tab"),exec:function(a,b,c){a.editor.indent()}}),e.addCommand({name:"inserttext",exec:function(a,b,c){a.editor.insert(d.stringRepeat(b.text||"",b.times||1))}}),e.addCommand({name:"centerselection",bindKey:f(null,"Ctrl-L"),exec:function(a,b,c){a.editor.centerSelection()}}),e.addCommand({name:"splitline",bindKey:f(null,"Ctrl-O"),exec:function(a,b,c){a.editor.splitLine()}}),e.addCommand({name:"transposeletters",bindKey:f("Ctrl-T","Ctrl-T"),exec:function(a,b,c){a.editor.transposeLetters()}})}),define("ace/edit_session",["require","exports","module","pilot/oop","pilot/lang","pilot/event_emitter","ace/selection","ace/mode/text","ace/range","ace/document","ace/background_tokenizer","ace/edit_session/folding"],function(a,b,c){var d=a("pilot/oop"),e=a("pilot/lang"),f=a("pilot/event_emitter").EventEmitter,g=a("ace/selection").Selection,h=a("ace/mode/text").Mode,j=a("ace/range").Range,k=a("ace/document").Document,l=a("ace/background_tokenizer").BackgroundTokenizer,m=function(a,b){this.$modified=!0,this.$breakpoints=[],this.$frontMarkers={},this.$backMarkers={},this.$markerId=1,this.$rowCache=[],this.$wrapData=[],this.$foldData=[],this.$foldData.toString=function(){var a="";this.forEach(function(b){a+="\n"+b.toString()});return a},a instanceof k?this.setDocument(a):this.setDocument(new k(a)),this.selection=new g(this),b?this.setMode(b):this.setMode(new h)};(function(){function o(a){return a<4352?!1:a>=4352&&a<=4447||a>=4515&&a<=4519||a>=4602&&a<=4607||a>=9001&&a<=9002||a>=11904&&a<=11929||a>=11931&&a<=12019||a>=12032&&a<=12245||a>=12272&&a<=12283||a>=12288&&a<=12350||a>=12353&&a<=12438||a>=12441&&a<=12543||a>=12549&&a<=12589||a>=12593&&a<=12686||a>=12688&&a<=12730||a>=12736&&a<=12771||a>=12784&&a<=12830||a>=12832&&a<=12871||a>=12880&&a<=13054||a>=13056&&a<=19903||a>=19968&&a<=42124||a>=42128&&a<=42182||a>=43360&&a<=43388||a>=44032&&a<=55203||a>=55216&&a<=55238||a>=55243&&a<=55291||a>=63744&&a<=64255||a>=65040&&a<=65049||a>=65072&&a<=65106||a>=65108&&a<=65126||a>=65128&&a<=65131||a>=65281&&a<=65376||a>=65504&&a<=65510}d.implement(this,f),this.setDocument=function(a){if(this.doc)throw new Error("Document is already set");this.doc=a,a.on("change",this.onChange.bind(this)),this.on("changeFold",this.onChangeFold.bind(this))},this.getDocument=function(){return this.doc},this.$resetRowCache=function(a){if(a==0)this.$rowCache=[];else{var b=this.$rowCache;for(var c=0;c<b.length;c++)if(b[c].docRow>=a){b.splice(c,b.length);return}}},this.onChangeFold=function(a){var b=a.data;this.$resetRowCache(b.start.row)},this.onChange=function(a){var b=a.data;this.$modified=!0,this.$resetRowCache(b.range.start.row);var c=this.$updateInternalDataOnChange(a);!this.$fromUndo&&this.$undoManager&&!b.ignore&&(this.$deltasDoc.push(b),c&&c.length!=0&&this.$deltasFold.push({action:"removeFolds",folds:c}),this.$informUndoManager.schedule()),this.bgTokenizer.start(b.range.start.row),this._dispatchEvent("change",a)},this.setValue=function(a){this.doc.setValue(a),this.selection.moveCursorTo(0,0),this.selection.clearSelection(),this.$resetRowCache(0),this.$deltas=[],this.$deltasDoc=[],this.$deltasFold=[],this.getUndoManager().reset()},this.getValue=this.toString=function(){return this.doc.getValue()},this.getSelection=function(){return this.selection},this.getState=function(a){return this.bgTokenizer.getState(a)},this.getTokens=function(a,b){return this.bgTokenizer.getTokens(a,b)},this.setUndoManager=function(a){this.$undoManager=a,this.$resetRowCache(0),this.$deltas=[],this.$deltasDoc=[],this.$deltasFold=[],this.$informUndoManager&&this.$informUndoManager.cancel();if(a){var b=this;this.$syncInformUndoManager=function(){b.$informUndoManager.cancel(),b.$deltasFold.length&&(b.$deltas.push({group:"fold",deltas:b.$deltasFold}),b.$deltasFold=[]),b.$deltasDoc.length&&(b.$deltas.push({group:"doc",deltas:b.$deltasDoc}),b.$deltasDoc=[]),b.$deltas.length>0&&a.execute({action:"aceupdate",args:[b.$deltas,b]}),b.$deltas=[]},this.$informUndoManager=e.deferredCall(this.$syncInformUndoManager)}},this.$defaultUndoManager={undo:function(){},redo:function(){},reset:function(){}},this.getUndoManager=function(){return this.$undoManager||this.$defaultUndoManager},this.getTabString=function(){return this.getUseSoftTabs()?e.stringRepeat(" ",this.getTabSize()):"\t"},this.$useSoftTabs=!0,this.setUseSoftTabs=function(a){this.$useSoftTabs!==a&&(this.$useSoftTabs=a)},this.getUseSoftTabs=function(){return this.$useSoftTabs},this.$tabSize=4,this.setTabSize=function(a){!isNaN(a)&&this.$tabSize!==a&&(this.$modified=!0,this.$tabSize=a,this._dispatchEvent("changeTabSize"))},this.getTabSize=function(){return this.$tabSize},this.isTabStop=function(a){return this.$useSoftTabs&&a.column%this.$tabSize==0},this.$overwrite=!1,this.setOverwrite=function(a){this.$overwrite!=a&&(this.$overwrite=a,this._dispatchEvent("changeOverwrite"))},this.getOverwrite=function(){return this.$overwrite},this.toggleOverwrite=function(){this.setOverwrite(!this.$overwrite)},this.getBreakpoints=function(){return this.$breakpoints},this.setBreakpoints=function(a){this.$breakpoints=[];for(var b=0;b<a.length;b++)this.$breakpoints[a[b]]=!0;this._dispatchEvent("changeBreakpoint",{})},this.clearBreakpoints=function(){this.$breakpoints=[],this._dispatchEvent("changeBreakpoint",{})},this.setBreakpoint=function(a){this.$breakpoints[a]=!0,this._dispatchEvent("changeBreakpoint",{})},this.clearBreakpoint=function(a){delete this.$breakpoints[a],this._dispatchEvent("changeBreakpoint",{})},this.getBreakpoints=function(){return this.$breakpoints},this.addMarker=function(a,b,c,d){var e=this.$markerId++,f={range:a,type:c||"line",renderer:typeof c=="function"?c:null,clazz:b,inFront:!!d};d?(this.$frontMarkers[e]=f,this._dispatchEvent("changeFrontMarker")):(this.$backMarkers[e]=f,this._dispatchEvent("changeBackMarker"));return e},this.removeMarker=function(a){var b=this.$frontMarkers[a]||this.$backMarkers[a];if(!!b){var c=b.inFront?this.$frontMarkers:this.$backMarkers;b&&(delete c[a],this._dispatchEvent(b.inFront?"changeFrontMarker":"changeBackMarker"))}},this.getMarkers=function(a){return a?this.$frontMarkers:this.$backMarkers},this.setAnnotations=function(a){this.$annotations={};for(var b=0;b<a.length;b++){var c=a[b],d=c.row;this.$annotations[d]?this.$annotations[d].push(c):this.$annotations[d]=[c]}this._dispatchEvent("changeAnnotation",{})},this.getAnnotations=function(){return this.$annotations},this.clearAnnotations=function(){this.$annotations={},this._dispatchEvent("changeAnnotation",{})},this.$detectNewLine=function(a){var b=a.match(/^.*?(\r?\n)/m);b?this.$autoNewLine=b[1]:this.$autoNewLine="\n"},this.getWordRange=function(a,b){var c=this.getLine(a),d=!1;b>0&&(d=!!c.charAt(b-1).match(this.tokenRe)),d||(d=!!c.charAt(b).match(this.tokenRe));var e=d?this.tokenRe:this.nonTokenRe,f=b;if(f>0){do f--;while(f>=0&&c.charAt(f).match(e));f++}var g=b;while(g<c.length&&c.charAt(g).match(e))g++;return new j(a,f,a,g)},this.setNewLineMode=function(a){this.doc.setNewLineMode(a)},this.getNewLineMode=function(){return this.doc.getNewLineMode()},this.$useWorker=!0,this.setUseWorker=function(a){this.$useWorker!=a&&(this.$useWorker=a,this.$stopWorker(),a&&this.$startWorker())},this.getUseWorker=function(){return this.$useWorker},this.onReloadTokenizer=function(a){var b=a.data;this.bgTokenizer.start(b.first),this._dispatchEvent("tokenizerUpdate",a)},this.$mode=null,this.setMode=function(a){if(this.$mode!==a){this.$mode=a,this.$stopWorker(),this.$useWorker&&this.$startWorker();var b=a.getTokenizer();if(b.addEventListener!==undefined){var c=this.onReloadTokenizer.bind(this);b.addEventListener("update",c)}if(!this.bgTokenizer){this.bgTokenizer=new l(b);var d=this;this.bgTokenizer.addEventListener("update",function(a){d._dispatchEvent("tokenizerUpdate",a)})}else this.bgTokenizer.setTokenizer(b);this.bgTokenizer.setDocument(this.getDocument()),this.bgTokenizer.start(0),this.tokenRe=a.tokenRe,this.nonTokenRe=a.nonTokenRe,this._dispatchEvent("changeMode")}},this.$stopWorker=function(){this.$worker&&this.$worker.terminate(),this.$worker=null},this.$startWorker=function(){if(typeof Worker!="undefined"&&!a.noWorker)try{this.$worker=this.$mode.createWorker(this)}catch(b){console.log("Could not load worker"),console.log(b),this.$worker=null}else this.$worker=null},this.getMode=function(){return this.$mode},this.$scrollTop=0,this.setScrollTopRow=function(a){this.$scrollTop!==a&&(this.$scrollTop=a,this._dispatchEvent("changeScrollTop"))},this.getScrollTopRow=function(){return this.$scrollTop},this.getWidth=function(){this.$computeWidth();return this.width},this.getScreenWidth=function(){this.$computeWidth();return this.screenWidth},this.$computeWidth=function(a){if(this.$modified||a){this.$modified=!1;var b=this.doc.getAllLines(),c=0,d=0;for(var e=0;e<b.length;e++){var f=this.getFoldLine(e),g,h;g=b[e];if(f){var i=f.range.end;g=this.getFoldDisplayLine(f),e=i.row}h=g.length,c=Math.max(c,h),this.$useWrapMode||(d=Math.max(d,this.$getStringScreenWidth(g)[0]))}this.width=c,this.$useWrapMode?this.screenWidth=this.$wrapLimit:this.screenWidth=d}},this.getLine=function(a){return this.doc.getLine(a)},this.getLines=function(a,b){return this.doc.getLines(a,b)},this.getLength=function(){return this.doc.getLength()},this.getTextRange=function(a){return this.doc.getTextRange(a)},this.findMatchingBracket=function(a){if(a.column==0)return null;var b=this.getLine(a.row).charAt(a.column-1);if(b=="")return null;var c=b.match(/([\(\[\{])|([\)\]\}])/);return c?c[1]?this.$findClosingBracket(c[1],a):this.$findOpeningBracket(c[2],a):null},this.$brackets={")":"(","(":")","]":"[","[":"]","{":"}","}":"{"},this.$findOpeningBracket=function(a,b){var c=this.$brackets[a],d=b.column-2,e=b.row,f=1,g=this.getLine(e);for(;;){while(d>=0){var h=g.charAt(d);if(h==c){f-=1;if(f==0)return{row:e,column:d}}else h==a&&(f+=1);d-=1}e-=1;if(e<0)break;var g=this.getLine(e),d=g.length-1}return null},this.$findClosingBracket=function(a,b){var c=this.$brackets[a],d=b.column,e=b.row,f=1,g=this.getLine(e),h=this.getLength();for(;;){while(d<g.length){var i=g.charAt(d);if(i==c){f-=1;if(f==0)return{row:e,column:d}}else i==a&&(f+=1);d+=1}e+=1;if(e>=h)break;var g=this.getLine(e),d=0}return null},this.insert=function(a,b){return this.doc.insert(a,b)},this.remove=function(a){return this.doc.remove(a)},this.undoChanges=function(a,b){if(!!a.length){this.$fromUndo=!0;var c=null;for(var d=a.length-1;d!=-1;d--)delta=a[d],delta.group=="doc"?(this.doc.revertDeltas(delta.deltas),c=this.$getUndoSelection(delta.deltas,!0,c)):delta.deltas.forEach(function(a){this.addFolds(a.folds)},this);this.$fromUndo=!1,c&&!b&&this.selection.setSelectionRange(c);return c}},this.redoChanges=function(a,b){if(!!a.length){this.$fromUndo=!0;var c=null;for(var d=0;d<a.length;d++)delta=a[d],delta.group=="doc"&&(this.doc.applyDeltas(delta.deltas),c=this.$getUndoSelection(delta.deltas,!1,c));this.$fromUndo=!1,c&&!b&&this.selection.setSelectionRange(c);return c}},this.$getUndoSelection=function(a,b,c){function d(a){var c=a.action=="insertText"||a.action=="insertLines";return b?!c:c}var e=a[0],f,g,h=!1;d(e)?(f=e.range.clone(),h=!0):(f=j.fromPoints(e.range.start,e.range.start),h=!1);for(var i=1;i<a.length;i++)e=a[i],d(e)?(g=e.range.start,f.compare(g.row,g.column)==-1&&f.setStart(e.range.start),g=e.range.end,f.compare(g.row,g.column)==1&&f.setEnd(e.range.end),h=!0):(g=e.range.start,f.compare(g.row,g.column)==-1&&(f=j.fromPoints(e.range.start,e.range.start)),h=!1);if(c!=null){var k=c.compareRange(f);k==1?f.setStart(c.start):k==-1&&f.setEnd(c.end)}return f},this.replace=function(a,b){return this.doc.replace(a,b)},this.moveText=function(a,b){var c=this.getTextRange(a);this.remove(a);var d=b.row,e=b.column;!a.isMultiLine()&&a.start.row==d&&a.end.column<e&&(e-=c.length);if(a.isMultiLine()&&a.end.row<d){var f=this.doc.$split(c);d-=f.length-1}var g=d+a.end.row-a.start.row,h=a.isMultiLine()?a.end.column:e+a.end.column-a.start.column,i=new j(d,e,g,h);this.insert(i.start,c);return i},this.indentRows=function(a,b,c){c=c.replace(/\t/g,this.getTabString());for(var d=a;d<=b;d++)this.insert({row:d,column:0},c)},this.outdentRows=function(a){var b=a.collapseRows(),c=new j(0,0,0,0),d=this.getTabSize();for(var e=b.start.row;e<=b.end.row;++e){var f=this.getLine(e);c.start.row=e,c.end.row=e;for(var g=0;g<d;++g)if(f.charAt(g)!=" ")break;g<d&&f.charAt(g)=="\t"?(c.start.column=g,c.end.column=g+1):(c.start.column=0,c.end.column=g),this.remove(c)}},this.moveLinesUp=function(a,b){if(a<=0)return 0;var c=this.doc.removeLines(a,b);this.doc.insertLines(a-1,c);return-1},this.moveLinesDown=function(a,b){if(b>=this.doc.getLength()-1)return 0;var c=this.doc.removeLines(a,b);this.doc.insertLines(a+1,c);return 1},this.duplicateLines=function(a,b){var a=this.$clipRowToDocument(a),b=this.$clipRowToDocument(b),c=this.getLines(a,b);this.doc.insertLines(a,c);var d=b-a+1;return d},this.$clipRowToDocument=function(a){return Math.max(0,Math.min(a,this.doc.getLength()-1))},this.$clipPositionToDocument=function(a,b){b=Math.max(0,b);if(a<0)a=0,b=0;else{var c=this.doc.getLength();a>=c?(a=c-1,b=this.doc.getLine(c-1).length):b=Math.min(this.doc.getLine(a).length,b)}return{row:a,column:b}},this.$wrapLimit=80,this.$useWrapMode=!1,this.$wrapLimitRange={min:null,max:null},this.setUseWrapMode=function(a){if(a!=this.$useWrapMode){this.$useWrapMode=a,this.$modified=!0,this.$resetRowCache(0);if(a){var b=this.getLength();this.$wrapData=[];for(i=0;i<b;i++)this.$wrapData.push([]);this.$updateWrapData(0,b-1)}this._dispatchEvent("changeWrapMode")}},this.getUseWrapMode=function(){return this.$useWrapMode},this.setWrapLimitRange=function(a,b){if(this.$wrapLimitRange.min!==a||this.$wrapLimitRange.max!==b)this.$wrapLimitRange.min=a,this.$wrapLimitRange.max=b,this.$modified=!0,this._dispatchEvent("changeWrapMode")},this.adjustWrapLimit=function(a){var b=this.$constrainWrapLimit(a);if(b!=this.$wrapLimit&&b>0){this.$wrapLimit=b,this.$modified=!0,this.$useWrapMode&&(this.$updateWrapData(0,this.getLength()-1),this.$resetRowCache(0),this._dispatchEvent("changeWrapLimit"));return!0}return!1},this.$constrainWrapLimit=function(a){var b=this.$wrapLimitRange.min;b&&(a=Math.max(b,a));var c=this.$wrapLimitRange.max;c&&(a=Math.min(c,a));return Math.max(1,a)},this.getWrapLimit=function(){return this.$wrapLimit},this.getWrapLimitRange=function(){return{min:this.$wrapLimitRange.min,max:this.$wrapLimitRange.max}},this.$updateInternalDataOnChange=function(a){var b=this.$useWrapMode,c,d=a.data.action,e=a.data.range.start.row,f=a.data.range.end.row,g=a.data.range.start,h=a.data.range.end,i=null;d.indexOf("Lines")!=-1?(d=="insertLines"?f=e+a.data.lines.length:f=e,c=a.data.lines.length):c=f-e;if(c!=0)if(d.indexOf("remove")!=-1){b&&this.$wrapData.splice(e,c);var j=this.$foldData;i=this.getFoldsInRange(a.data.range),this.removeFolds(i);var k=this.getFoldLine(h.row),l=0;if(k){k.addRemoveChars(h.row,h.column,g.column-h.column),k.shiftRow(-c);var m=this.getFoldLine(e);m&&m!==k&&(m.merge(k),k=m),l=j.indexOf(k)+1}for(l;l<j.length;l++){var k=j[l];k.start.row>=h.row&&k.shiftRow(-c)}f=e}else{var n;if(b){n=[e,0];for(var o=0;o<c;o++)n.push([]);this.$wrapData.splice.apply(this.$wrapData,n)}var j=this.$foldData,k=this.getFoldLine(e),l=0;if(k){var p=k.range.compareInside(g.row,g.column);p==0?(k=k.split(g.row,g.column),k.shiftRow(c),k.addRemoveChars(f,0,h.column-g.column)):p==-1&&(k.addRemoveChars(e,0,h.column-g.column),k.shiftRow(c)),l=j.indexOf(k)+1}for(l;l<j.length;l++){var k=j[l];k.start.row>=e&&k.shiftRow(c)}}else{var q;c=Math.abs(a.data.range.start.column-a.data.range.end.column),d.indexOf("remove")!=-1&&(i=this.getFoldsInRange(a.data.range),this.removeFolds(i),c=-c);var k=this.getFoldLine(e);k&&k.addRemoveChars(e,g.column,c)}b&&this.$wrapData.length!=this.doc.getLength()&&console.error("doc.getLength() and $wrapData.length have to be the same!"),b&&this.$updateWrapData(e,f);return i},this.$updateWrapData=function(a,b){var c=this.doc.getAllLines(),d=this.getTabSize(),f=this.$wrapData,i=this.$wrapLimit,j,l,m=a;b=Math.min(b,c.length-1);while(m<=b){l=this.getFoldLine(m);if(!l)j=this.$getDisplayTokens(e.stringTrimRight(c[m]));else{j=[],l.walk(function(a,b,d,e){var f;if(a){f=this.$getDisplayTokens(a,j.length),f[0]=g;for(var i=1;i<f.length;i++)f[i]=h}else f=this.$getDisplayTokens(c[b].substring(e,d),j.length);j=j.concat(f)}.bind(this),l.end.row,c[l.end.row].length+1);while(j.length!=0&&j[j.length-1]>=k)j.pop()}f[m]=this.$computeWrapSplits(j,i,d),m=this.getRowFoldEnd(m)+1}};var b=1,c=2,g=3,h=4,k=10,m=11,n=12;this.$computeWrapSplits=function(a,b,c){function j(b){var c=a.slice(f,b),e=c.length;c.join("").replace(/12/g,function(a){e-=1}).replace(/2/g,function(a){e-=1}),i+=e,d.push(i),f=b}if(a.length==0)return[];var c=this.getTabSize(),d=[],e=a.length,f=0,i=0;while(e-f>b){var l=f+b;if(a[l]>=k){while(a[l]>=k)l++;j(l);continue}if(a[l]==g||a[l]==h){for(l;l!=f-1;l--)if(a[l]==g)break;if(l>f){j(l);continue}l=f+b;for(l;l<a.length;l++)if(a[l]!=h)break;if(l==a.length)break;j(l);continue}for(l;l!=f-1;l--)if(a[l]>=g){l++;break}if(l>f){j(l);continue}l=f+b,j(f+b)}return d},this.$getDisplayTokens=function(a,d){var e=[],f;d=d||0;for(var g=0;g<a.length;g++){var h=a.charCodeAt(g);if(h==9){f=this.getScreenTabSize(e.length+d),e.push(m);for(var i=1;i<f;i++)e.push(n)}else h==32?e.push(k):o(h)?e.push(b,c):e.push(b)}return e},this.$getStringScreenWidth=function(a,b,c){if(b==0)return[0,0];b==null&&(b=c+a.length*Math.max(this.getTabSize(),2)),c=c||0;var d,e;for(e=0;e<a.length;e++){d=a.charCodeAt(e),d==9?c+=this.getScreenTabSize(c):o(d)?c+=2:c+=1;if(c>b)break}return[c,e]},this.getRowLength=function(a){return!this.$useWrapMode||!this.$wrapData[a]?1:this.$wrapData[a].length+1},this.getRowHeight=function(a,b){return this.getRowLength(b)*a.lineHeight},this.getScreenLastRowColumn=function(a){return this.documentToScreenColumn(a,this.doc.getLine(a).length)},this.getDocumentLastRowColumn=function(a,b){var c=this.documentToScreenRow(a,b);return this.getScreenLastRowColumn(c)},this.getDocumentLastRowColumnPosition=function(a,b){var c=this.documentToScreenRow(a,b);return this.screenToDocumentPosition(c,Number.MAX_VALUE/10)},this.getRowSplitData=function(a){return this.$useWrapMode?this.$wrapData[a]:undefined},this.getScreenTabSize=function(a){return this.$tabSize-a%this.$tabSize},this.screenToDocumentRow=function(a,b){return this.screenToDocumentPosition(a,b).row},this.screenToDocumentColumn=function(a,b){return this.screenToDocumentPosition(a,b).column},this.screenToDocumentPosition=function(a,b){if(a<0)return{row:0,column:0};var c,d=0,e=0,f,g,h=0,i=0,j=this.$rowCache;for(var k=0;k<j.length;k++)if(j[k].screenRow<a)h=j[k].screenRow,d=j[k].docRow;else break;var l=!j.length||k==j.length,m=this.getLength()-1,n=this.getNextFold(d),o=n?n.start.row:Infinity;while(h<=a){i=this.getRowLength(d);if(h+i-1>=a||d>=m)break;h+=i,d++,d>o&&(d=n.end.row+1,n=this.getNextFold(d),o=n?n.start.row:Infinity),l&&j.push({docRow:d,screenRow:h})}n&&n.start.row<=d?c=this.getFoldDisplayLine(n):(c=this.getLine(d),n=null);var p=[];this.$useWrapMode&&(p=this.$wrapData[d],p&&(f=p[a-h],a>h&&p.length&&(e=p[a-h-1]||p[p.length-1],c=c.substring(e)))),e+=this.$getStringScreenWidth(c,b)[1],h+p.length<a&&(e=Number.MAX_VALUE),this.$useWrapMode?e>=f&&(e=f-1):e=Math.min(e,c.length);return n?n.idxToPosition(e):{row:d,column:e}},this.documentToScreenPosition=function(a,b){if(typeof b=="undefined")var c=this.$clipPositionToDocument(a.row,a.column);else c=this.$clipPositionToDocument(a,b);a=c.row,b=c.column;var d=this.$rowCache.length,e;if(this.$useWrapMode){e=this.$wrapData;if(a>e.length-1)return{row:this.getScreenLength(),column:e.length==0?0:e[e.length-1].length-1}}var f=0,g=0,h=null,i=null;i=this.getFoldAt(a,b,1),i&&(a=i.start.row,b=i.start.column);var j,k=0,l=this.$rowCache;for(var m=0;m<l.length;m++)if(l[m].docRow<a)f=l[m].screenRow,k=l[m].docRow;else break;var n=!l.length||m==l.length,o=this.getNextFold(k),p=o?o.start.row:Infinity;while(k<a){if(k>=p){j=o.end.row+1;if(j>a)break;o=this.getNextFold(j),p=o?o.start.row:Infinity}else j=k+1;f+=this.getRowLength(k),k=j,n&&l.push({docRow:k,screenRow:f})}var q="";o&&k>=p?(q=this.getFoldDisplayLine(o,a,b),h=o.start.row):(q=this.getLine(a).substring(0,b),h=a);if(this.$useWrapMode){var r=e[h],s=0;while(q.length>=r[s])f++,s++;q=q.substring(r[s-1]||0,q.length)}return{row:f,column:this.$getStringScreenWidth(q)[0]}},this.documentToScreenColumn=function(a,b){return this.documentToScreenPosition(a,b).column},this.documentToScreenRow=function(a,b){return this.documentToScreenPosition(a,b).row},this.getScreenLength=function(){var a=0,b=null,c=null;if(!this.$useWrapMode){a=this.getLength();var d=this.$foldData;for(var e=0;e<d.length;e++)c=d[e],a-=c.end.row-c.start.row}else for(var f=0;f<this.$wrapData.length;f++)(c=this.getFoldLine(f,b))?(f=c.end.row,a+=1):a+=this.$wrapData[f].length+1;return a}}).call(m.prototype),a("ace/edit_session/folding").Folding.call(m.prototype),b.EditSession=m}),define("ace/selection",["require","exports","module","pilot/oop","pilot/lang","pilot/event_emitter","ace/range"],function(a,b,c){var d=a("pilot/oop"),e=a("pilot/lang"),f=a("pilot/event_emitter").EventEmitter,g=a("ace/range").Range,h=function(a){this.session=a,this.doc=a.getDocument(),this.clearSelection(),this.selectionLead=this.doc.createAnchor(0,0),this.selectionAnchor=this.doc.createAnchor(0,0);var b=this;this.selectionLead.on("change",function(a){b._dispatchEvent("changeCursor"),b.$isEmpty||b._dispatchEvent("changeSelection"),!b.$preventUpdateDesiredColumnOnChange&&a.old.column!=a.value.column&&b.$updateDesiredColumn()}),this.selectionAnchor.on("change",function(){b.$isEmpty||b._dispatchEvent("changeSelection")})};(function(){d.implement(this,f),this.isEmpty=function(){return this.$isEmpty||this.selectionAnchor.row==this.selectionLead.row&&this.selectionAnchor.column==this.selectionLead.column},this.isMultiLine=function(){return this.isEmpty()?!1:this.getRange().isMultiLine()},this.getCursor=function(){return this.selectionLead.getPosition()},this.setSelectionAnchor=function(a,b){this.selectionAnchor.setPosition(a,b),this.$isEmpty&&(this.$isEmpty=!1,this._dispatchEvent("changeSelection"))},this.getSelectionAnchor=function(){return this.$isEmpty?this.getSelectionLead():this.selectionAnchor.getPosition()},this.getSelectionLead=function(){return this.selectionLead.getPosition()},this.shiftSelection=function(a){if(this.$isEmpty)this.moveCursorTo(this.selectionLead.row,this.selectionLead.column+a);else{var b=this.getSelectionAnchor(),c=this.getSelectionLead(),d=this.isBackwards();(!d||b.column!==0)&&this.setSelectionAnchor(b.row,b.column+a),(d||c.column!==0)&&this.$moveSelection(function(){this.moveCursorTo(c.row,c.column+a)})}},this.isBackwards=function(){var a=this.selectionAnchor,b=this.selectionLead;return a.row>b.row||a.row==b.row&&a.column>b.column},this.getRange=function(){var a=this.selectionAnchor,b=this.selectionLead;return this.isEmpty()?g.fromPoints(b,b):this.isBackwards()?g.fromPoints(b,a):g.fromPoints(a,b)},this.clearSelection=function(){this.$isEmpty||(this.$isEmpty=!0,this._dispatchEvent("changeSelection"))},this.selectAll=function(){var a=this.doc.getLength()-1;this.setSelectionAnchor(a,this.doc.getLine(a).length),this.moveCursorTo(0,0)},this.setSelectionRange=function(a,b){b?(this.setSelectionAnchor(a.end.row,a.end.column),this.selectTo(a.start.row,a.start.column)):(this.setSelectionAnchor(a.start.row,a.start.column),this.selectTo(a.end.row,a.end.column)),this.$updateDesiredColumn()},this.$updateDesiredColumn=function(){var a=this.getCursor();this.$desiredColumn=this.session.documentToScreenColumn(a.row,a.column)},this.$moveSelection=function(a){var b=this.selectionLead;this.$isEmpty&&this.setSelectionAnchor(b.row,b.column),a.call(this)},this.selectTo=function(a,b){this.$moveSelection(function(){this.moveCursorTo(a,b)})},this.selectToPosition=function(a){this.$moveSelection(function(){this.moveCursorToPosition(a)})},this.selectUp=function(){this.$moveSelection(this.moveCursorUp)},this.selectDown=function(){this.$moveSelection(this.moveCursorDown)},this.selectRight=function(){this.$moveSelection(this.moveCursorRight)},this.selectLeft=function(){this.$moveSelection(this.moveCursorLeft)},this.selectLineStart=function(){this.$moveSelection(this.moveCursorLineStart)},this.selectLineEnd=function(){this.$moveSelection(this.moveCursorLineEnd)},this.selectFileEnd=function(){this.$moveSelection(this.moveCursorFileEnd)},this.selectFileStart=function(){this.$moveSelection(this.moveCursorFileStart)},this.selectWordRight=function(){this.$moveSelection(this.moveCursorWordRight)},this.selectWordLeft=function(){this.$moveSelection(this.moveCursorWordLeft)},this.selectWord=function(){var a=this.getCursor(),b=this.session.getWordRange(a.row,a.column);this.setSelectionRange(b)},this.selectLine=function(){var a=this.selectionLead.row,b,c=this.session.getFoldLine(a);c?(a=c.start.row,b=c.end.row):b=a,this.setSelectionAnchor(a,0),this.$moveSelection(function(){this.moveCursorTo(b+1,0)})},this.moveCursorUp=function(){this.moveCursorBy(-1,0)},this.moveCursorDown=function(){this.moveCursorBy(1,0)},this.moveCursorLeft=function(){var a=this.selectionLead.getPosition(),b;if(b=this.session.getFoldAt(a.row,a.column,-1))this.moveCursorTo(b.start.row,b.start.column);else if(a.column==0)a.row>0&&this.moveCursorTo(a.row-1,this.doc.getLine(a.row-1).length);else{var c=this.session.getTabSize();this.session.isTabStop(a)&&this.doc.getLine(a.row).slice(a.column-c,a.column).split(" ").length-1==c?this.moveCursorBy(0,-c):this.moveCursorBy(0,-1)}},this.moveCursorRight=function(){var a=this.selectionLead.getPosition(),b;if(b=this.session.getFoldAt(a.row,a.column,1))this.moveCursorTo(b.end.row,b.end.column);else if(this.selectionLead.column==this.doc.getLine(this.selectionLead.row).length)this.selectionLead.row<this.doc.getLength()-1&&this.moveCursorTo(this.selectionLead.row+1,0);else{var c=this.session.getTabSize(),a=this.selectionLead;this.session.isTabStop(a)&&this.doc.getLine(a.row).slice(a.column,a.column+c).split(" ").length-1==c?this.moveCursorBy(0,c):this.moveCursorBy(0,1)}},this.moveCursorLineStart=function(){var a=this.selectionLead.row,b=this.selectionLead.column,c=this.session.documentToScreenRow(a,b),d=this.session.screenToDocumentPosition(c,0),e=this.session.getDisplayLine(a,null,d.row,d.column),f=e.match(/^\s*/);f[0].length==b?this.moveCursorTo(d.row,d.column):this.moveCursorTo(d.row,d.column+f[0].length)},this.moveCursorLineEnd=function(){var a=this.selectionLead,b=this.session.getDocumentLastRowColumnPosition(a.row,a.column);this.moveCursorTo(b.row,b.column)},this.moveCursorFileEnd=function(){var a=this.doc.getLength()-1,b=this.doc.getLine(a).length;this.moveCursorTo(a,b)},this.moveCursorFileStart=function(){this.moveCursorTo(0,0)},this.moveCursorWordRight=function(){var a=this.selectionLead.row,b=this.selectionLead.column,c=this.doc.getLine(a),d=c.substring(b),e;this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0;var f;if(f=this.session.getFoldAt(a,b,1))this.moveCursorTo(f.end.row,f.end.column);else{if(b==c.length){this.moveCursorRight();return}if(e=this.session.nonTokenRe.exec(d))b+=this.session.nonTokenRe.lastIndex,this.session.nonTokenRe.lastIndex=0;else if(e=this.session.tokenRe.exec(d))b+=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0;this.moveCursorTo(a,b)}},this.moveCursorWordLeft=function(){var a=this.selectionLead.row,b=this.selectionLead.column,c;if(c=this.session.getFoldAt(a,b,-1))this.moveCursorTo(c.start.row,c.start.column);else{if(b==0){this.moveCursorLeft();return}var d=this.session.getFoldStringAt(a,b,-1);d==null&&(d=this.doc.getLine(a).substring(0,b));var f=e.stringReverse(d),g;this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0;if(g=this.session.nonTokenRe.exec(f))b-=this.session.nonTokenRe.lastIndex,this.session.nonTokenRe.lastIndex=0;else if(g=this.session.tokenRe.exec(f))b-=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0;this.moveCursorTo(a,b)}},this.moveCursorBy=function(a,b){var c=this.session.documentToScreenPosition(this.selectionLead.row,this.selectionLead.column),d=b==0&&this.$desiredColumn||c.column,e=this.session.screenToDocumentPosition(c.row+a,d);this.moveCursorTo(e.row,e.column+b,b==0)},this.moveCursorToPosition=function(a){this.moveCursorTo(a.row,a.column)},this.moveCursorTo=function(a,b,c){var d=this.session.getFoldAt(a,b,1);d&&(a=d.start.row,b=d.start.column),this.$preventUpdateDesiredColumnOnChange=!0,this.selectionLead.setPosition(a,b),this.$preventUpdateDesiredColumnOnChange=!1,c||this.$updateDesiredColumn(this.selectionLead.column)},this.moveCursorToScreen=function(a,b,c){var d=this.session.screenToDocumentPosition(a,b);a=d.row,b=d.column,this.moveCursorTo(a,b,c)}}).call(h.prototype),b.Selection=h}),define("ace/range",["require","exports","module"],function(a,b,c){var d=function(a,b,c,d){this.start={row:a,column:b},this.end={row:c,column:d}};(function(){this.toString=function(){return"Range: ["+this.start.row+"/"+this.start.column+"] -> ["+this.end.row+"/"+this.end.column+"]"},this.contains=function(a,b){return this.compare(a,b)==0},this.compareRange=function(a){var b,c=a.end,d=a.start;b=this.compare(c.row,c.column);if(b==1){b=this.compare(d.row,d.column);return b==1?2:b==0?1:0}if(b==-1)return-2;b=this.compare(d.row,d.column);return b==-1?-1:b==1?42:0},this.containsRange=function(a){var b=this.compareRange(a);return b==-1||b==0||b==1},this.isEnd=function(a,b){return this.end.row==a&&this.end.column==b},this.isStart=function(a,b){return this.start.row==a&&this.start.column==b},this.setStart=function(a,b){typeof a=="object"?(this.start.column=a.column,this.start.row=a.row):(this.start.row=a,this.start.column=b)},this.setEnd=function(a,b){typeof a=="object"?(this.end.column=a.column,this.end.row=a.row):(this.end.row=a,this.end.column=b)},this.inside=function(a,b){if(this.compare(a,b)==0)return this.isEnd(a,b)||this.isStart(a,b)?!1:!0;return!1},this.insideStart=function(a,b){if(this.compare(a,b)==0)return this.isEnd(a,b)?!1:!0;return!1},this.insideEnd=function(a,b){if(this.compare(a,b)==0)return this.isStart(a,b)?!1:!0;return!1},this.compare=function(a,b){if(!this.isMultiLine()&&a===this.start.row)return b<this.start.column?-1:b>this.end.column?1:0;return a<this.start.row?-1:a>this.end.row?1:this.start.row===a?b>=this.start.column?0:-1:this.end.row===a?b<=this.end.column?0:1:0},this.compareStart=function(a,b){return this.start.row==a&&this.start.column==b?-1:this.compare(a,b)},this.compareEnd=function(a,b){return this.end.row==a&&this.end.column==b?1:this.compare(a,b)},this.compareInside=function(a,b){return this.end.row==a&&this.end.column==b?1:this.start.row==a&&this.start.column==b?-1:this.compare(a,b)},this.clipRows=function(a,b){if(this.end.row>b)var c={row:b+1,column:0};if(this.start.row>b)var e={row:b+1,column:0};if(this.start.row<a)var e={row:a,column:0};if(this.end.row<a)var c={row:a,column:0};return d.fromPoints(e||this.start,c||this.end)},this.extend=function(a,b){var c=this.compare(a,b);if(c==0)return this;if(c==-1)var e={row:a,column:b};else var f={row:a,column:b};return d.fromPoints(e||this.start,f||this.end)},this.isEmpty=function(){return this.start.row==this.end.row&&this.start.column==this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return d.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new d(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new d(this.start.row,0,this.end.row,0)},this.toScreenRange=function(a){var b=a.documentToScreenPosition(this.start),c=a.documentToScreenPosition(this.end);return new d(b.row,b.column,c.row,c.column)}}).call(d.prototype),d.fromPoints=function(a,b){return new d(a.row,a.column,b.row,b.column)},b.Range=d}),define("ace/mode/text",["require","exports","module","ace/tokenizer","ace/mode/text_highlight_rules","ace/mode/behaviour","ace/unicode"],function(a,b,c){var d=a("ace/tokenizer").Tokenizer,e=a("ace/mode/text_highlight_rules").TextHighlightRules,f=a("ace/mode/behaviour").Behaviour,g=a("ace/unicode"),h=function(){this.$tokenizer=new d((new e).getRules()),this.$behaviour=new f};(function(){this.tokenRe=new RegExp("^["+g.packages.L+g.packages.Mn+g.packages.Mc+g.packages.Nd+g.packages.Pc+"\\$_]+","g"),this.nonTokenRe=new RegExp("^(?:[^"+g.packages.L+g.packages.Mn+g.packages.Mc+g.packages.Nd+g.packages.Pc+"\\$_]|s])+","g"),this.getTokenizer=function(){return this.$tokenizer},this.toggleCommentLines=function(a,b,c,d){},this.getNextLineIndent=function(a,b,c){return""},this.checkOutdent=function(a,b,c){return!1},this.autoOutdent=function(a,b,c){},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""},this.createWorker=function(a){return null},this.highlightSelection=function(a){var b=a.session;b.$selectionOccurrences||(b.$selectionOccurrences=[]),b.$selectionOccurrences.length&&this.clearSelectionHighlight(a);var c=a.getSelectionRange();if(!c.isEmpty()&&!c.isMultiLine()){var d=c.start.column-1,e=c.end.column+1,f=b.getLine(c.start.row),g=f.length,h=f.substring(Math.max(d,0),Math.min(e,g));if(d>=0&&/^[\w\d]/.test(h)||e<=g&&/[\w\d]$/.test(h))return;h=f.substring(c.start.column,c.end.column);if(!/^[\w\d]+$/.test(h))return;var i=a.getCursorPosition(),j={wrap:!0,wholeWord:!0,caseSensitive:!0,needle:h},k=a.$search.getOptions();a.$search.set(j);var l=a.$search.findAll(b);l.forEach(function(a){if(!a.contains(i.row,i.column)){var c=b.addMarker(a,"ace_selected_word","text");b.$selectionOccurrences.push(c)}}),a.$search.set(k)}},this.clearSelectionHighlight=function(a){!a.session.$selectionOccurrences||(a.session.$selectionOccurrences.forEach(function(b){a.session.removeMarker(b)}),a.session.$selectionOccurrences=[])},this.createModeDelegates=function(a){if(!!this.$embeds){this.$modes={};for(var b=0;b<this.$embeds.length;b++)a[this.$embeds[b]]&&(this.$modes[this.$embeds[b]]=new a[this.$embeds[b]]);var c=["toggleCommentLines","getNextLineIndent","checkOutdent","autoOutdent","transformAction"];for(var b=0;b<c.length;b++)(function(a){var d=c[b],e=a[d];a[c[b]]=function(){return this.$delegator(d,arguments,e)}})(this)}},this.$delegator=function(a,b,c){var d=b[0];for(var e=0;e<this.$embeds.length;e++){if(!this.$modes[this.$embeds[e]])continue;var f=d.split(this.$embeds[e]);if(!f[0]&&f[1]){b[0]=f[1];var g=this.$modes[this.$embeds[e]];return g[a].apply(g,b)}}var h=c.apply(this,b);return c?h:undefined},this.transformAction=function(a,b,c,d,e){if(this.$behaviour){var f=this.$behaviour.getBehaviours();for(var g in f)if(f[g][b]){var h=f[g][b].apply(this,arguments);if(h!==!1)return h}}return!1}}).call(h.prototype),b.Mode=h}),define("ace/tokenizer",["require","exports","module"],function(a,b,c){var d=function(a){this.rules=a,this.regExps={},this.matchMappings={};for(var b in this.rules){var c=this.rules[b],d=c,e=[],f=0,g=this.matchMappings[b]={};for(var h=0;h<d.length;h++){var i=(new RegExp("(?:("+d[h].regex+")|(.))")).exec("a").length-2,j=d[h].regex.replace(/\\([0-9]+)/g,function(a,b){return"\\"+(parseInt(b,10)+f+1)});g[f]={rule:h,len:i},f+=i,e.push(j)}this.regExps[b]=new RegExp("(?:("+e.join(")|(")+")|(.))","g")}};(function(){this.getLineTokens=function(a,b){var c=b,d=this.rules[c],e=this.matchMappings[c],f=this.regExps[c];f.lastIndex=0;var g,h=[],i=0,j={type:null,value:""};while(g=f.exec(a)){var k="text",l=null,m=[g[0]];for(var n=0;n<g.length-2;n++)if(g[n+1]!==undefined){l=d[e[n].rule],e[n].len>1&&(m=g.slice(n+2,n+1+e[n].len)),typeof l.token=="function"?k=l.token.apply(this,m):k=l.token;var o=l.next;o&&o!==c&&(c=o,d=this.rules[c],e=this.matchMappings[c],i=f.lastIndex,f=this.regExps[c],f.lastIndex=i);break}if(m[0]){typeof k=="string"&&(m=[m.join("")],k=[k]);for(var n=0;n<m.length;n++)(!l||l.merge||k[n]==="text")&&j.type===k[n]?j.value+=m[n]:(j.type&&h.push(j),j={type:k[n],value:m[n]})}if(i==a.length)break;i=f.lastIndex}j.type&&h.push(j);return{tokens:h,state:c}}}).call(d.prototype),b.Tokenizer=d}),define("ace/mode/text_highlight_rules",["require","exports","module","pilot/lang"],function(a,b,c){var d=a("pilot/lang"),e=function(){this.$rules={start:[{token:"empty_line",regex:"^$"},{token:"text",regex:".+"}]}};(function(){this.addRules=function(a,b){for(var c in a){var d=a[c];for(var e=0;e<d.length;e++){var f=d[e];f.next?f.next=b+f.next:f.next=b+c}this.$rules[b+c]=d}},this.getRules=function(){return this.$rules},this.embedRules=function(a,b,c,e){var f=(new a).getRules();if(e)for(var g=0;g<e.length;g++)e[g]=b+e[g];else{e=[];for(var h in f)e.push(b+h)}this.addRules(f,b);for(var g=0;g<e.length;g++)Array.prototype.unshift.apply(this.$rules[e[g]],d.deepCopy(c));this.$embeds||(this.$embeds=[]),this.$embeds.push(b)},this.getEmbeds=function(){return this.$embeds}}).call(e.prototype),b.TextHighlightRules=e}),define("ace/mode/behaviour",["require","exports","module"],function(a,b,c){var d=function(){this.$behaviours={}};(function(){this.add=function(a,b,c){switch(undefined){case this.$behaviours:this.$behaviours={};case this.$behaviours[a]:this.$behaviours[a]={}}this.$behaviours[a][b]=c},this.addBehaviours=function(a){for(var b in a)for(var c in a[b])this.add(b,c,a[b][c])},this.remove=function(a){this.$behaviours&&this.$behaviours[a]&&delete this.$behaviours[a]},this.inherit=function(a,b){if(typeof a=="function")var c=(new a).getBehaviours(b);else var c=a.getBehaviours(b);this.addBehaviours(c)},this.getBehaviours=function(a){if(!a)return this.$behaviours;var b={};for(var c=0;c<a.length;c++)this.$behaviours[a[c]]&&(b[a[c]]=this.$behaviours[a[c]]);return b}}).call(d.prototype),b.Behaviour=d}),define("ace/unicode",["require","exports","module"],function(a,b,c){function d(a){var c=/\w{4}/g;for(var d in a)b.packages[d]=a[d].replace(c,"\\u$&")}b.packages={},d({L:"0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05250531-055605590561-058705D0-05EA05F0-05F20621-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280904-0939093D09500958-0961097109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510D0-10FA10FC1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541AA71B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF11D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209421022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E218321842C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2D00-2D252D30-2D652D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2E2F300530063031-3035303B303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A65FA662-A66EA67F-A697A6A0-A6E5A717-A71FA722-A788A78BA78CA7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2A9CFAA00-AA28AA40-AA42AA44-AA4BAA60-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADB-AADDABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC",Ll:"0061-007A00AA00B500BA00DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02AF037103730377037B-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F0521052305250561-05871D00-1D2B1D62-1D771D79-1D9A1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF7210A210E210F2113212F21342139213C213D2146-2149214E21842C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7C2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2D00-2D25A641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76FA771-A778A77AA77CA77FA781A783A785A787A78CFB00-FB06FB13-FB17FF41-FF5A",Lu:"0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E0520052205240531-055610A0-10C51E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F214521832C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CEDA640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BFF21-FF3A",Lt:"01C501C801CB01F21F88-1F8F1F98-1F9F1FA8-1FAF1FBC1FCC1FFC",Lm:"02B0-02C102C6-02D102E0-02E402EC02EE0374037A0559064006E506E607F407F507FA081A0824082809710E460EC610FC17D718431AA71C78-1C7D1D2C-1D611D781D9B-1DBF2071207F2090-20942C7D2D6F2E2F30053031-3035303B309D309E30FC-30FEA015A4F8-A4FDA60CA67FA717-A71FA770A788A9CFAA70AADDFF70FF9EFF9F",Lo:"01BB01C0-01C3029405D0-05EA05F0-05F20621-063F0641-064A066E066F0671-06D306D506EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA0800-08150904-0939093D09500958-096109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E450E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10D0-10FA1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317DC1820-18421844-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C771CE9-1CEC1CEE-1CF12135-21382D30-2D652D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE3006303C3041-3096309F30A1-30FA30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A014A016-A48CA4D0-A4F7A500-A60BA610-A61FA62AA62BA66EA6A0-A6E5A7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2AA00-AA28AA40-AA42AA44-AA4BAA60-AA6FAA71-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADBAADCABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF66-FF6FFF71-FF9DFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC",M:"0300-036F0483-04890591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DE-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0903093C093E-094E0951-0955096209630981-098309BC09BE-09C409C709C809CB-09CD09D709E209E30A01-0A030A3C0A3E-0A420A470A480A4B-0A4D0A510A700A710A750A81-0A830ABC0ABE-0AC50AC7-0AC90ACB-0ACD0AE20AE30B01-0B030B3C0B3E-0B440B470B480B4B-0B4D0B560B570B620B630B820BBE-0BC20BC6-0BC80BCA-0BCD0BD70C01-0C030C3E-0C440C46-0C480C4A-0C4D0C550C560C620C630C820C830CBC0CBE-0CC40CC6-0CC80CCA-0CCD0CD50CD60CE20CE30D020D030D3E-0D440D46-0D480D4A-0D4D0D570D620D630D820D830DCA0DCF-0DD40DD60DD8-0DDF0DF20DF30E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F3E0F3F0F71-0F840F860F870F90-0F970F99-0FBC0FC6102B-103E1056-1059105E-10601062-10641067-106D1071-10741082-108D108F109A-109D135F1712-17141732-1734175217531772177317B6-17D317DD180B-180D18A91920-192B1930-193B19B0-19C019C819C91A17-1A1B1A55-1A5E1A60-1A7C1A7F1B00-1B041B34-1B441B6B-1B731B80-1B821BA1-1BAA1C24-1C371CD0-1CD21CD4-1CE81CED1CF21DC0-1DE61DFD-1DFF20D0-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66F-A672A67CA67DA6F0A6F1A802A806A80BA823-A827A880A881A8B4-A8C4A8E0-A8F1A926-A92DA947-A953A980-A983A9B3-A9C0AA29-AA36AA43AA4CAA4DAA7BAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE3-ABEAABECABEDFB1EFE00-FE0FFE20-FE26",Mn:"0300-036F0483-04870591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DF-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0902093C0941-0948094D0951-095509620963098109BC09C1-09C409CD09E209E30A010A020A3C0A410A420A470A480A4B-0A4D0A510A700A710A750A810A820ABC0AC1-0AC50AC70AC80ACD0AE20AE30B010B3C0B3F0B41-0B440B4D0B560B620B630B820BC00BCD0C3E-0C400C46-0C480C4A-0C4D0C550C560C620C630CBC0CBF0CC60CCC0CCD0CE20CE30D41-0D440D4D0D620D630DCA0DD2-0DD40DD60E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F71-0F7E0F80-0F840F860F870F90-0F970F99-0FBC0FC6102D-10301032-10371039103A103D103E10581059105E-10601071-1074108210851086108D109D135F1712-17141732-1734175217531772177317B7-17BD17C617C9-17D317DD180B-180D18A91920-19221927192819321939-193B1A171A181A561A58-1A5E1A601A621A65-1A6C1A73-1A7C1A7F1B00-1B031B341B36-1B3A1B3C1B421B6B-1B731B801B811BA2-1BA51BA81BA91C2C-1C331C361C371CD0-1CD21CD4-1CE01CE2-1CE81CED1DC0-1DE61DFD-1DFF20D0-20DC20E120E5-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66FA67CA67DA6F0A6F1A802A806A80BA825A826A8C4A8E0-A8F1A926-A92DA947-A951A980-A982A9B3A9B6-A9B9A9BCAA29-AA2EAA31AA32AA35AA36AA43AA4CAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE5ABE8ABEDFB1EFE00-FE0FFE20-FE26",Mc:"0903093E-09400949-094C094E0982098309BE-09C009C709C809CB09CC09D70A030A3E-0A400A830ABE-0AC00AC90ACB0ACC0B020B030B3E0B400B470B480B4B0B4C0B570BBE0BBF0BC10BC20BC6-0BC80BCA-0BCC0BD70C01-0C030C41-0C440C820C830CBE0CC0-0CC40CC70CC80CCA0CCB0CD50CD60D020D030D3E-0D400D46-0D480D4A-0D4C0D570D820D830DCF-0DD10DD8-0DDF0DF20DF30F3E0F3F0F7F102B102C10311038103B103C105610571062-10641067-106D108310841087-108C108F109A-109C17B617BE-17C517C717C81923-19261929-192B193019311933-193819B0-19C019C819C91A19-1A1B1A551A571A611A631A641A6D-1A721B041B351B3B1B3D-1B411B431B441B821BA11BA61BA71BAA1C24-1C2B1C341C351CE11CF2A823A824A827A880A881A8B4-A8C3A952A953A983A9B4A9B5A9BAA9BBA9BD-A9C0AA2FAA30AA33AA34AA4DAA7BABE3ABE4ABE6ABE7ABE9ABEAABEC",Me:"0488048906DE20DD-20E020E2-20E4A670-A672",N:"0030-003900B200B300B900BC-00BE0660-066906F0-06F907C0-07C90966-096F09E6-09EF09F4-09F90A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BF20C66-0C6F0C78-0C7E0CE6-0CEF0D66-0D750E50-0E590ED0-0ED90F20-0F331040-10491090-10991369-137C16EE-16F017E0-17E917F0-17F91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C5920702074-20792080-20892150-21822185-21892460-249B24EA-24FF2776-27932CFD30073021-30293038-303A3192-31953220-32293251-325F3280-328932B1-32BFA620-A629A6E6-A6EFA830-A835A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19",Nd:"0030-00390660-066906F0-06F907C0-07C90966-096F09E6-09EF0A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BEF0C66-0C6F0CE6-0CEF0D66-0D6F0E50-0E590ED0-0ED90F20-0F291040-10491090-109917E0-17E91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C59A620-A629A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19",Nl:"16EE-16F02160-21822185-218830073021-30293038-303AA6E6-A6EF",No:"00B200B300B900BC-00BE09F4-09F90BF0-0BF20C78-0C7E0D70-0D750F2A-0F331369-137C17F0-17F920702074-20792080-20892150-215F21892460-249B24EA-24FF2776-27932CFD3192-31953220-32293251-325F3280-328932B1-32BFA830-A835",P:"0021-00230025-002A002C-002F003A003B003F0040005B-005D005F007B007D00A100AB00B700BB00BF037E0387055A-055F0589058A05BE05C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F3A-0F3D0F850FD0-0FD4104A-104F10FB1361-13681400166D166E169B169C16EB-16ED1735173617D4-17D617D8-17DA1800-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD32010-20272030-20432045-20512053-205E207D207E208D208E2329232A2768-277527C527C627E6-27EF2983-299829D8-29DB29FC29FD2CF9-2CFC2CFE2CFF2E00-2E2E2E302E313001-30033008-30113014-301F3030303D30A030FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFD3EFD3FFE10-FE19FE30-FE52FE54-FE61FE63FE68FE6AFE6BFF01-FF03FF05-FF0AFF0C-FF0FFF1AFF1BFF1FFF20FF3B-FF3DFF3FFF5BFF5DFF5F-FF65",Pd:"002D058A05BE140018062010-20152E172E1A301C303030A0FE31FE32FE58FE63FF0D",Ps:"0028005B007B0F3A0F3C169B201A201E2045207D208D23292768276A276C276E27702772277427C527E627E827EA27EC27EE2983298529872989298B298D298F299129932995299729D829DA29FC2E222E242E262E283008300A300C300E3010301430163018301A301DFD3EFE17FE35FE37FE39FE3BFE3DFE3FFE41FE43FE47FE59FE5BFE5DFF08FF3BFF5BFF5FFF62",Pe:"0029005D007D0F3B0F3D169C2046207E208E232A2769276B276D276F27712773277527C627E727E927EB27ED27EF298429862988298A298C298E2990299229942996299829D929DB29FD2E232E252E272E293009300B300D300F3011301530173019301B301E301FFD3FFE18FE36FE38FE3AFE3CFE3EFE40FE42FE44FE48FE5AFE5CFE5EFF09FF3DFF5DFF60FF63",Pi:"00AB2018201B201C201F20392E022E042E092E0C2E1C2E20",Pf:"00BB2019201D203A2E032E052E0A2E0D2E1D2E21",Pc:"005F203F20402054FE33FE34FE4D-FE4FFF3F",Po:"0021-00230025-0027002A002C002E002F003A003B003F0040005C00A100B700BF037E0387055A-055F058905C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F850FD0-0FD4104A-104F10FB1361-1368166D166E16EB-16ED1735173617D4-17D617D8-17DA1800-18051807-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD3201620172020-20272030-2038203B-203E2041-20432047-205120532055-205E2CF9-2CFC2CFE2CFF2E002E012E06-2E082E0B2E0E-2E162E182E192E1B2E1E2E1F2E2A-2E2E2E302E313001-3003303D30FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFE10-FE16FE19FE30FE45FE46FE49-FE4CFE50-FE52FE54-FE57FE5F-FE61FE68FE6AFE6BFF01-FF03FF05-FF07FF0AFF0CFF0EFF0FFF1AFF1BFF1FFF20FF3CFF61FF64FF65",S:"0024002B003C-003E005E0060007C007E00A2-00A900AC00AE-00B100B400B600B800D700F702C2-02C502D2-02DF02E5-02EB02ED02EF-02FF03750384038503F604820606-0608060B060E060F06E906FD06FE07F609F209F309FA09FB0AF10B700BF3-0BFA0C7F0CF10CF20D790E3F0F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-139917DB194019E0-19FF1B61-1B6A1B74-1B7C1FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE20442052207A-207C208A-208C20A0-20B8210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B2140-2144214A-214D214F2190-2328232B-23E82400-24262440-244A249C-24E92500-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE27C0-27C427C7-27CA27CC27D0-27E527F0-29822999-29D729DC-29FB29FE-2B4C2B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F309B309C319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A700-A716A720A721A789A78AA828-A82BA836-A839AA77-AA79FB29FDFCFDFDFE62FE64-FE66FE69FF04FF0BFF1C-FF1EFF3EFF40FF5CFF5EFFE0-FFE6FFE8-FFEEFFFCFFFD",Sm:"002B003C-003E007C007E00AC00B100D700F703F60606-060820442052207A-207C208A-208C2140-2144214B2190-2194219A219B21A021A321A621AE21CE21CF21D221D421F4-22FF2308-230B23202321237C239B-23B323DC-23E125B725C125F8-25FF266F27C0-27C427C7-27CA27CC27D0-27E527F0-27FF2900-29822999-29D729DC-29FB29FE-2AFF2B30-2B442B47-2B4CFB29FE62FE64-FE66FF0BFF1C-FF1EFF5CFF5EFFE2FFE9-FFEC",Sc:"002400A2-00A5060B09F209F309FB0AF10BF90E3F17DB20A0-20B8A838FDFCFE69FF04FFE0FFE1FFE5FFE6",Sk:"005E006000A800AF00B400B802C2-02C502D2-02DF02E5-02EB02ED02EF-02FF0375038403851FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE309B309CA700-A716A720A721A789A78AFF3EFF40FFE3",So:"00A600A700A900AE00B000B60482060E060F06E906FD06FE07F609FA0B700BF3-0BF80BFA0C7F0CF10CF20D790F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-1399194019E0-19FF1B61-1B6A1B74-1B7C210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B214A214C214D214F2195-2199219C-219F21A121A221A421A521A7-21AD21AF-21CD21D021D121D321D5-21F32300-2307230C-231F2322-2328232B-237B237D-239A23B4-23DB23E2-23E82400-24262440-244A249C-24E92500-25B625B8-25C025C2-25F72600-266E2670-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE2800-28FF2B00-2B2F2B452B462B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A828-A82BA836A837A839AA77-AA79FDFDFFE4FFE8FFEDFFEEFFFCFFFD",Z:"002000A01680180E2000-200A20282029202F205F3000",Zs:"002000A01680180E2000-200A202F205F3000",Zl:"2028",Zp:"2029",C:"0000-001F007F-009F00AD03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-0605061C061D0620065F06DD070E070F074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17B417B517DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF200B-200F202A-202E2060-206F20722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-F8FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFD-FF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFFBFFFEFFFF",Cc:"0000-001F007F-009F",Cf:"00AD0600-060306DD070F17B417B5200B-200F202A-202E2060-2064206A-206FFEFFFFF9-FFFB",Co:"E000-F8FF",Cs:"D800-DFFF",Cn:"03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-05FF06040605061C061D0620065F070E074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF2065-206920722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-D7FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFDFEFEFF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFF8FFFEFFFF"})}),define("ace/document",["require","exports","module","pilot/oop","pilot/event_emitter","ace/range","ace/anchor"],function(a,b,c){var d=a("pilot/oop"),e=a("pilot/event_emitter").EventEmitter,f=a("ace/range").Range,g=a("ace/anchor").Anchor,h=function(a){this.$lines=[],Array.isArray(a)?this.insertLines(0,a):a.length==0?this.$lines=[""]:this.insert({row:0,column:0},a)};(function(){d.implement(this,e),this.setValue=function(a){var b=this.getLength();this.remove(new f(0,0,b,this.getLine(b-1).length)),this.insert({row:0,column:0},a)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(a,b){return new g(this,a,b)},"aaa".split(/a/).length==0?this.$split=function(a){return a.replace(/\r\n|\r/g,"\n").split("\n")}:this.$split=function(a){return a.split(/\r\n|\r|\n/)},this.$detectNewLine=function(a){var b=a.match(/^.*?(\r?\n)/m);b?this.$autoNewLine=b[1]:this.$autoNewLine="\n"},this.getNewLineCharacter=function(){switch(this.$newLineMode){case"windows":return"\r\n";case"unix":return"\n";case"auto":return this.$autoNewLine}},this.$autoNewLine="\n",this.$newLineMode="auto",this.setNewLineMode=function(a){this.$newLineMode!==a&&(this.$newLineMode=a)},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(a){return a=="\r\n"||a=="\r"||a=="\n"},this.getLine=function(a){return this.$lines[a]||""},this.getLines=function(a,b){return this.$lines.slice(a,b+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(a){if(a.start.row==a.end.row)return this.$lines[a.start.row].substring(a.start.column,a.end.column);var b=[];b.push(this.$lines[a.start.row].substring(a.start.column)),b.push.apply(b,this.getLines(a.start.row+1,a.end.row-1)),b.push(this.$lines[a.end.row].substring(0,a.end.column));return b.join(this.getNewLineCharacter())},this.$clipPosition=function(a){var b=this.getLength();a.row>=b&&(a.row=Math.max(0,b-1),a.column=this.getLine(b-1).length);return a},this.insert=function(a,b){if(b.length==0)return a;a=this.$clipPosition(a),this.getLength()<=1&&this.$detectNewLine(b);var c=this.$split(b),d=c.splice(0,1)[0],e=c.length==0?null:c.splice(c.length-1,1)[0];a=this.insertInLine(a,d),e!==null&&(a=this.insertNewLine(a),a=this.insertLines(a.row,c),a=this.insertInLine(a,e||""));return a},this.insertLines=function(a,b){if(b.length==0)return{row:a,column:0};var c=[a,0];c.push.apply(c,b),this.$lines.splice.apply(this.$lines,c);var d=new f(a,0,a+b.length,0),e={action:"insertLines",range:d,lines:b};this._dispatchEvent("change",{data:e});return d.end},this.insertNewLine=function(a){a=this.$clipPosition(a);var b=this.$lines[a.row]||"";this.$lines[a.row]=b.substring(0,a.column),this.$lines.splice(a.row+1,0,b.substring(a.column,b.length));var c={row:a.row+1,column:0},d={action:"insertText",range:f.fromPoints(a,c),text:this.getNewLineCharacter()};this._dispatchEvent("change",{data:d});return c},this.insertInLine=function(a,b){if(b.length==0)return a;var c=this.$lines[a.row]||"";this.$lines[a.row]=c.substring(0,a.column)+b+c.substring(a.column);var d={row:a.row,column:a.column+b.length},e={action:"insertText",range:f.fromPoints(a,d),text:b};this._dispatchEvent("change",{data:e});return d},this.remove=function(a){a.start=this.$clipPosition(a.start),a.end=this.$clipPosition(a.end);if(a.isEmpty())return a.start;var b=a.start.row,c=a.end.row;if(a.isMultiLine()){var d=a.start.column==0?b:b+1,e=c-1;a.end.column>0&&this.removeInLine(c,0,a.end.column),e>=d&&this.removeLines(d,e),d!=b&&(this.removeInLine(b,a.start.column,this.getLine(b).length),this.removeNewLine(a.start.row))}else this.removeInLine(b,a.start.column,a.end.column);return a.start},this.removeInLine=function(a,b,c){if(b!=c){var d=new f(a,b,a,c),e=this.getLine(a),g=e.substring(b,c),h=e.substring(0,b)+e.substring(c,e.length);this.$lines.splice(a,1,h);var i={action:"removeText",range:d,text:g};this._dispatchEvent("change",{data:i});return d.start}},this.removeLines=function(a,b){var c=new f(a,0,b+1,0),d=this.$lines.splice(a,b-a+1),e={action:"removeLines",range:c,nl:this.getNewLineCharacter(),lines:d};this._dispatchEvent("change",{data:e});return d},this.removeNewLine=function(a){var b=this.getLine(a),c=this.getLine(a+1),d=new f(a,b.length,a+1,0),e=b+c;this.$lines.splice(a,2,e);var g={action:"removeText",range:d,text:this.getNewLineCharacter()};this._dispatchEvent("change",{data:g})},this.replace=function(a,b){if(b.length==0&&a.isEmpty())return a.start;if(b==this.getTextRange(a))return a.end;this.remove(a);if(b)var c=this.insert(a.start,b);else c=a.start;return c},this.applyDeltas=function(a){for(var b=0;b<a.length;b++){var c=a[b],d=f.fromPoints(c.range.start,c.range.end);c.action=="insertLines"?this.insertLines(d.start.row,c.lines):c.action=="insertText"?this.insert(d.start,c.text):c.action=="removeLines"?this.removeLines(d.start.row,d.end.row-1):c.action=="removeText"&&this.remove(d)}},this.revertDeltas=function(a){for(var b=a.length-1;b>=0;b--){var c=a[b],d=f.fromPoints(c.range.start,c.range.end);c.action=="insertLines"?this.removeLines(d.start.row,d.end.row-1):c.action=="insertText"?this.remove(d):c.action=="removeLines"?this.insertLines(d.start.row,c.lines):c.action=="removeText"&&this.insert(d.start,c.text)}}}).call(h.prototype),b.Document=h}),define("ace/anchor",["require","exports","module","pilot/oop","pilot/event_emitter"],function(a,b,c){var d=a("pilot/oop"),e=a("pilot/event_emitter").EventEmitter,f=b.Anchor=function(a,b,c){this.document=a,typeof c=="undefined"?this.setPosition(b.row,b.column):this.setPosition(b,c),this.$onChange=this.onChange.bind(this),a.on("change",this.$onChange)};(function(){d.implement(this,e),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.onChange=function(a){var b=a.data,c=b.range;if(c.start.row!=c.end.row||c.start.row==this.row){if(c.start.row>this.row)return;if(c.start.row==this.row&&c.start.column>this.column)return;var d=this.row,e=this.column;b.action==="insertText"?c.start.row===d&&c.start.column<=e?c.start.row===c.end.row?e+=c.end.column-c.start.column:(e-=c.start.column,d+=c.end.row-c.start.row):c.start.row!==c.end.row&&c.start.row<d&&(d+=c.end.row-c.start.row):b.action==="insertLines"?c.start.row<=d&&(d+=c.end.row-c.start.row):b.action=="removeText"?c.start.row==d&&c.start.column<e?c.end.column>=e?e=c.start.column:e=Math.max(0,e-(c.end.column-c.start.column)):c.start.row!==c.end.row&&c.start.row<d?(c.end.row==d&&(e=Math.max(0,e-c.end.column)+c.start.column),d-=c.end.row-c.start.row):c.end.row==d&&(d-=c.end.row-c.start.row,e=Math.max(0,e-c.end.column)+c.start.column):b.action=="removeLines"&&c.start.row<=d&&(c.end.row<=d?d-=c.end.row-c.start.row:(d=c.start.row,e=0)),this.setPosition(d,e,!0)}},this.setPosition=function(a,b,c){var d;c?d={row:a,column:b}:d=this.$clipPositionToDocument(a,b);if(this.row!=d.row||this.column!=d.column){var e={row:this.row,column:this.column};this.row=d.row,this.column=d.column,this._dispatchEvent("change",{old:e,value:d})}},this.detach=function(){this.document.removeEventListener("change",this.$onChange)},this.$clipPositionToDocument=function(a,b){var c={};a>=this.document.getLength()?(c.row=Math.max(0,this.document.getLength()-1),c.column=this.document.getLine(c.row).length):a<0?(c.row=0,c.column=0):(c.row=a,c.column=Math.min(this.document.getLine(c.row).length,Math.max(0,b))),b<0&&(c.column=0);return c}}).call(f.prototype)}),define("ace/background_tokenizer",["require","exports","module","pilot/oop","pilot/event_emitter"],function(a,b,c){var d=a("pilot/oop"),e=a("pilot/event_emitter").EventEmitter,f=function(a,b){this.running=!1,this.lines=[],this.currentLine=0,this.tokenizer=a;var c=this;this.$worker=function(){if(!!c.running){var a=new Date,b=c.currentLine,d=c.doc,e=0,f=d.getLength();while(c.currentLine<f){c.lines[c.currentLine]=c.$tokenizeRows(c.currentLine,c.currentLine)[0],c.currentLine++,e+=1;if(e%5==0&&new Date-a>20){c.fireUpdateEvent(b,c.currentLine-1),c.running=setTimeout(c.$worker,20);return}}c.running=!1,c.fireUpdateEvent(b,f-1)}}};(function(){d.implement(this,e),this.setTokenizer=function(a){this.tokenizer=a,this.lines=[],this.start(0)},this.setDocument=function(a){this.doc=a,this.lines=[],this.stop()},this.fireUpdateEvent=function(a,b){var c={first:a,last:b};this._dispatchEvent("update",{data:c})},this.start=function(a){this.currentLine=Math.min(a||0,this.currentLine,this.doc.getLength()),this.lines.splice(this.currentLine,this.lines.length),this.stop(),this.running=setTimeout(this.$worker,700)},this.stop=function(){this.running&&clearTimeout(this.running),this.running=!1},this.getTokens=function(a,b){return this.$tokenizeRows(a,b)},this.getState=function(a){return this.$tokenizeRows(a,a)[0].state},this.$tokenizeRows=function(a,b){if(!this.doc)return[];var c=[],d="start",e=!1;a>0&&this.lines[a-1]?(d=this.lines[a-1].state,e=!0):a==0?(d="start",e=!0):this.lines.length>0&&(d=this.lines[this.lines.length-1].state);var f=this.doc.getLines(a,b);for(var g=a;g<=b;g++)if(!this.lines[g]){var h=this.tokenizer.getLineTokens(f[g-a]||"",d),d=h.state;c.push(h),e&&(this.lines[g]=h)}else{var h=this.lines[g];d=h.state,c.push(h)}return c}}).call(f.prototype),b.BackgroundTokenizer=f}),define("ace/edit_session/folding",["require","exports","module","ace/range","ace/edit_session/fold_line","ace/edit_session/fold"],function(a,b,c){function g(){this.getFoldAt=function(a,b,c){var d=this.getFoldLine(a);if(!d)return null;var e=d.folds;for(var f=0;f<e.length;f++){var g=e[f];if(g.range.contains(a,b)){if(c==1&&g.range.isEnd(a,b))continue;if(c==-1&&g.range.isStart(a,b))continue;return g}}},this.getFoldsInRange=function(a){a=a.clone();var b=a.start,c=a.end,d=this.$foldData,e=[];b.column+=1,c.column-=1;for(var f=0;f<d.length;f++){var g=d[f].range.compareRange(a);if(g==2)continue;if(g==-2)break;var h=d[f].folds;for(var i=0;i<h.length;i++){var j=h[i];g=j.range.compareRange(a);if(g==-2)break;if(g==2)continue;if(g==42)break;e.push(j)}}return e},this.getFoldStringAt=function(a,b,c,d){var d=d||this.getFoldLine(a);if(!d)return null;var e={end:{column:0}};for(var f=0;f<d.folds.length;f++){var g=d.folds[f],h=g.range.compareEnd(a,b);if(h==-1){var i=this.getLine(g.start.row).substring(e.end.column,g.start.column);break}if(h==0)return null;e=g}i||(i=this.getLine(g.start.row).substring(e.end.column));return c==-1?i.substring(0,b-e.end.column):c==1?i.substring(b-e.end.column):i},this.getFoldLine=function(a,b){var c=this.$foldData,d=0;b&&(d=c.indexOf(b)),d==-1&&(d=0);for(d;d<c.length;d++){var e=c[d];if(e.start.row<=a&&e.end.row>=a)return e;if(e.end.row>a)return null}return null},this.getNextFold=function(a,b){var c=this.$foldData,d,e=0;b&&(e=c.indexOf(b)),e==-1&&(e=0);for(e;e<c.length;e++){var f=c[e];if(f.end.row>=a)return f}return null},this.getFoldedRowCount=function(a,b){var c=this.$foldData,d=b-a+1;for(var e=0;e<c.length;e++){var f=c[e],g=f.end.row,h=f.start.row;if(g>=b){h<b&&(h>=a?d-=b-h:d=0);break}g>=a&&(h>=a?d-=g-h:d-=g-a+1)}return d},this.$addFoldLine=function(a){this.$foldData.push(a),this.$foldData.sort(function(a,b){return a.start.row-b.start.row});return a},this.addFold=function(a,b){var c=this.$foldData,d=!1;if(a instanceof f)var g=a;else g=new f(b,a);var h=g.start.row,i=g.start.column,j=g.end.row,k=g.end.column;if(g.placeholder.length<2)throw"Placeholder has to be at least 2 characters";if(h==j&&k-i<2)throw"The range has to be at least 2 characters width";var l=this.getFoldAt(h,i,1);if(l&&l.range.isEnd(j,k)&&l.range.isStart(h,i))return g;l=this.getFoldAt(h,i,1);if(l&&!l.range.isStart(h,i))throw"A fold can't start inside of an already existing fold";l=this.getFoldAt(j,k,-1);if(l&&!l.range.isEnd(j,k))throw"A fold can't end inside of an already existing fold";if(j>=this.doc.getLength())throw"End of fold is outside of the document.";if(k>this.getLine(j).length||i>this.getLine(h).length)throw"End of fold is outside of the document.";var m=this.getFoldsInRange(g.range);m.length>0&&(this.removeFolds(m),g.subFolds=m);for(var n=0;n<c.length;n++){var o=c[n];if(j==o.start.row){o.addFold(g),d=!0;break}if(h==o.end.row){o.addFold(g),d=!0;if(!g.sameRow){foldLineNext=c[n+1];if(foldLineNext&&foldLineNext.start.row==j){o.merge(foldLineNext);break}}break}if(j<=o.start.row)break}d||(o=this.$addFoldLine(new e(this.$foldData,g))),this.$useWrapMode&&this.$updateWrapData(o.start.row,o.start.row),this.$modified=!0,this._dispatchEvent("changeFold",{data:g});return g},this.addFolds=function(a){a.forEach(function(a){this.addFold(a)},this)},this.removeFold=function(a){var b=a.foldLine,c=b.start.row,d=b.end.row,e=this.$foldData,f=b.folds;if(f.length==1)e.splice(e.indexOf(b),1);else if(b.range.isEnd(a.end.row,a.end.column))f.pop(),b.end.row=f[f.length-1].end.row,b.end.column=f[f.length-1].end.column;else if(b.range.isStart(a.start.row,a.start.column))f.shift(),b.start.row=f[0].start.row,b.start.column=f[0].start.column;else if(a.sameRow)f.splice(f.indexOf(a),1);else{var g=b.split(a.start.row,a.start.column);g.folds.shift(),b.start.row=f[0].start.row,b.start.column=f[0].start.column,this.$addFoldLine(g)}this.$useWrapMode&&this.$updateWrapData(c,d),this.$modified=!0,this._dispatchEvent("changeFold",{data:a})},this.removeFolds=function(a){var b=[];for(var c=0;c<a.length;c++)b.push(a[c]);b.forEach(function(a){this.removeFold(a)},this),this.$modified=!0},this.expandFold=function(a){this.removeFold(a),a.subFolds.forEach(function(a){this.addFold(a)},this),a.subFolds=[]},this.expandFolds=function(a){a.forEach(function(a){this.expandFold(a)},this)},this.isRowFolded=function(a,b){return!!this.getFoldLine(a,b)},this.getRowFoldEnd=function(a,b){var c=this.getFoldLine(a,b);return c?c.end.row:a},this.getFoldDisplayLine=function(a,b,c,d,e){d==null&&(d=a.start.row,e=0),b==null&&(b=a.end.row,c=this.getLine(b).length);var f="",g=this.doc,h="";a.walk(function(a,b,c,f,i){if(!(b<d)){if(b==d){if(c<e)return;f=Math.max(e,f)}a?h+=a:h+=g.getLine(b).substring(f,c)}}.bind(this),b,c);return h},this.getDisplayLine=function(a,b,c,d){var e=this.getFoldLine(a);if(!e){var f;f=this.doc.getLine(a);return f.substring(d||0,b||f.length)}return this.getFoldDisplayLine(e,a,b,c,d)},this.$cloneFoldData=function(){var a=this.$foldData,b=[];b=this.$foldData.map(function(a){var c=a.folds.map(function(a){return a.clone()});return new e(b,c)});return b}}var d=a("ace/range").Range,e=a("ace/edit_session/fold_line").FoldLine,f=a("ace/edit_session/fold").Fold;b.Folding=g}),define("ace/edit_session/fold_line",["require","exports","module","ace/range"],function(a,b,c){function e(a,b){this.foldData=a,Array.isArray(b)?this.folds=b:b=this.folds=[b];var c=b[b.length-1];this.range=new d(b[0].start.row,b[0].start.column,c.end.row,c.end.column),this.start=this.range.start,this.end=this.range.end,this.folds.forEach(function(a){a.setFoldLine(this)},this)}var d=a("ace/range").Range;(function(){this.shiftRow=function(a){this.start.row+=a,this.end.row+=a,this.folds.forEach(function(b){b.start.row+=a,b.end.row+=a})},this.addFold=function(a){if(a.sameRow){if(a.start.row<this.startRow||a.endRow>this.endRow)throw"Can't add a fold to this FoldLine as it has no connection";this.folds.push(a),this.folds.sort(function(a,b){return-a.range.compareEnd(b.start.row,b.start.column)}),this.range.compareEnd(a.start.row,a.start.column)>0?(this.end.row=a.end.row,this.end.column=a.end.column):this.range.compareStart(a.end.row,a.end.column)<0&&(this.start.row=a.start.row,this.start.column=a.start.column)}else if(a.start.row==this.end.row)this.folds.push(a),this.end.row=a.end.row,this.end.column=a.end.column;else if(a.end.row==this.start.row)this.folds.unshift(a),this.start.row=a.start.row,this.start.column=a.start.column;else throw"Trying to add fold to FoldRow that doesn't have a matching row";a.foldLine=this},this.containsRow=function(a){return a>=this.start.row&&a<=this.end.row},this.walk=function(a,b,c){var d=0,e=this.folds,f,g,h,i=!0;b==null&&(b=this.end.row,c=this.end.column);for(var j=0;j<e.length;j++){f=e[j],g=f.range.compareStart(b,c);if(g==-1){a(null,b,c,d,i);return}h=a(null,f.start.row,f.start.column,d,i),h=!h&&a(f.placeholder,f.start.row,f.start.column,d);if(h||g==0)return;i=!f.sameRow,d=f.end.column}a(null,b,c,d,i)},this.getNextFoldTo=function(a,b){var c,d;for(var e=0;e<this.folds.length;e++){c=this.folds[e],d=c.range.compareEnd(a,b);if(d==-1)return{fold:c,kind:"after"};if(d==0)return{fold:c,kind:"inside"}}return null},this.addRemoveChars=function(a,b,c){var d=this.getNextFoldTo(a,b),e,f;if(d){e=d.fold;if(d.kind=="inside"&&e.start.column!=b&&e.start.row!=a)throw"Moving characters inside of a fold should never be reached";if(e.start.row==a){f=this.folds;var g=f.indexOf(e);g==0&&(this.start.column+=c);for(g;g<f.length;g++){e=f[g],e.start.column+=c;if(!e.sameRow)return;e.end.column+=c}this.end.column+=c}}},this.split=function(a,b){var c=this.getNextFoldTo(a,b).fold,d=this.folds,f=this.foldData;if(!c)return null;var g=d.indexOf(c),h=d[g-1];this.end.row=h.end.row,this.end.column=h.end.column,d=d.splice(g,d.length-g);var i=new e(f,d);f.splice(f.indexOf(this)+1,0,i);return i},this.merge=function(a){var b=a.folds;for(var c=0;c<b.length;c++)this.addFold(b[c]);var d=this.foldData;d.splice(d.indexOf(a),1)},this.toString=function(){var a=[this.range.toString()+": ["];this.folds.forEach(function(b){a.push(" "+b.toString())}),a.push("]");return a.join("\n")},this.idxToPosition=function(a){var b=0,c;for(var d=0;d<this.folds.length;d++){var c=this.folds[d];a-=c.start.column-b;if(a<0)return{row:c.start.row,column:c.start.column+a};a-=c.placeholder.length;if(a<0)return c.start;b=c.end.column}return{row:this.end.row,column:this.end.column+a}}}).call(e.prototype),b.FoldLine=e}),define("ace/edit_session/fold",["require","exports","module"],function(a,b,c){var d=b.Fold=function(a,b){this.foldLine=null,this.placeholder=b,this.range=a,this.start=a.start,this.end=a.end,this.sameRow=a.start.row==a.end.row,this.subFolds=[]};(function(){this.toString=function(){return'"'+this.placeholder+'" '+this.range.toString()},this.setFoldLine=function(a){this.foldLine=a,this.subFolds.forEach(function(b){b.setFoldLine(a)})},this.clone=function(){var a=this.range.clone(),b=new d(a,this.placeholder);this.subFolds.forEach(function(a){b.subFolds.push(a.clone())});return b}}).call(d.prototype)}),define("ace/search",["require","exports","module","pilot/lang","pilot/oop","ace/range"],function(a,b,c){var d=a("pilot/lang"),e=a("pilot/oop"),f=a("ace/range").Range,g=function(){this.$options={needle:"",backwards:!1,wrap:!1,caseSensitive:!1,wholeWord:!1,scope:g.ALL,regExp:!1}};g.ALL=1,g.SELECTION=2,function(){this.set=function(a){e.mixin(this.$options,a);return this},this.getOptions=function(){return d.copyObject(this.$options)},this.find=function(a){if(!this.$options.needle)return null;if(this.$options.backwards)var b=this.$backwardMatchIterator(a);else b=this.$forwardMatchIterator(a);var c=null;b.forEach(function(a){c=a;return!0});return c},this.findAll=function(a){if(!this.$options.needle)return[];if(this.$options.backwards)var b=this.$backwardMatchIterator(a);else b=this.$forwardMatchIterator(a);var c=[];b.forEach(function(a){c.push(a)});return c},this.replace=function(a,b){var c=this.$assembleRegExp(),d=c.exec(a);return d&&d[0].length==a.length?this.$options.regExp?a.replace(c,b):b:null},this.$forwardMatchIterator=function(a){var b=this.$assembleRegExp(),c=this;return{forEach:function(d){c.$forwardLineIterator(a).forEach(function(a,e,f){e&&(a=a.substring(e));var g=[];a.replace(b,function(a){var b=arguments[arguments.length-2];g.push({str:a,offset:e+b});return a});for(var h=0;h<g.length;h++){var i=g[h],j=c.$rangeFromMatch(f,i.offset,i.str.length);if(d(j))return!0}})}}},this.$backwardMatchIterator=function(a){var b=this.$assembleRegExp(),c=this;return{forEach:function(d){c.$backwardLineIterator(a).forEach(function(a,e,f){e&&(a=a.substring(e));var g=[];a.replace(b,function(a,b){g.push({str:a,offset:e+b});return a});for(var h=g.length-1;h>=0;h--){var i=g[h],j=c.$rangeFromMatch(f,i.offset,i.str.length);if(d(j))return!0}})}}},this.$rangeFromMatch=function(a,b,c){return new f(a,b,a,b+c)},this.$assembleRegExp=function(){if(this.$options.regExp)var a=this.$options.needle;else a=d.escapeRegExp(this.$options.needle);this.$options.wholeWord&&(a="\\b"+a+"\\b");var b="g";this.$options.caseSensitive||(b+="i");var c=new RegExp(a,b);return c},this.$forwardLineIterator=function(a){function k(e){var f=a.getLine(e);b&&e==c.end.row&&(f=f.substring(0,c.end.column)),j&&e==d.row&&(f=f.substring(0,d.column));return f}var b=this.$options.scope==g.SELECTION,c=a.getSelection().getRange(),d=a.getSelection().getCursor(),e=b?c.start.row:0,f=b?c.start.column:0,h=b?c.end.row:a.getLength()-1,i=this.$options.wrap,j=!1;return{forEach:function(a){var b=d.row,c=k(b),g=d.column,l=!1;j=!1;while(!a(c,g,b)){if(l)return;b++,g=0;if(b>h)if(i)b=e,g=f,j=!0;else return;b==d.row&&(l=!0),c=k(b)}}}},this.$backwardLineIterator=function(a){var b=this.$options.scope==g.SELECTION,c=a.getSelection().getRange(),d=b?c.end:c.start,e=b?c.start.row:0,f=b?c.start.column:0,h=b?c.end.row:a.getLength()-1,i=this.$options.wrap;return{forEach:function(g){var j=d.row,k=a.getLine(j).substring(0,d.column),l=0,m=!1,n=!1;while(!g(k,l,j)){if(m)return;j--,l=0;if(j<e)if(i)j=h,n=!0;else return;j==d.row&&(m=!0),k=a.getLine(j),b&&(j==e?l=f:j==h&&(k=k.substring(0,c.end.column))),n&&j==d.row&&(l=d.column)}}}}}.call(g.prototype),b.Search=g}),define("ace/undomanager",["require","exports","module"],function(a,b,c){var d=function(){this.reset()};(function(){this.execute=function(a){var b=a.args[0];this.$doc=a.args[1],this.$undoStack.push(b),this.$redoStack=[]},this.undo=function(a){var b=this.$undoStack.pop(),c=null;b&&(c=this.$doc.undoChanges(b,a),this.$redoStack.push(b));return c},this.redo=function(a){var b=this.$redoStack.pop(),c=null;b&&(c=this.$doc.redoChanges(b,a),this.$undoStack.push(b));return c},this.reset=function(){this.$undoStack=[],this.$redoStack=[]},this.hasUndo=function(){return this.$undoStack.length>0},this.hasRedo=function(){return this.$redoStack.length>0}}).call(d.prototype),b.UndoManager=d}),define("ace/virtual_renderer",["require","exports","module","pilot/oop","pilot/dom","pilot/event","pilot/useragent","ace/layer/gutter","ace/layer/marker","ace/layer/text","ace/layer/cursor","ace/scrollbar","ace/renderloop","pilot/event_emitter","text/ace/css/editor.css"],function(a,b,c){var d=a("pilot/oop"),e=a("pilot/dom"),f=a("pilot/event"),g=a("pilot/useragent"),h=a("ace/layer/gutter").Gutter,i=a("ace/layer/marker").Marker,j=a("ace/layer/text").Text,k=a("ace/layer/cursor").Cursor,l=a("ace/scrollbar").ScrollBar,m=a("ace/renderloop").RenderLoop,n=a("pilot/event_emitter").EventEmitter,o=a("text/ace/css/editor.css");e.importCssString(o);var p=function(a,b){this.container=a,e.addCssClass(this.container,"ace_editor"),this.setTheme(b),this.$gutter=e.createElement("div"),this.$gutter.className="ace_gutter",this.container.appendChild(this.$gutter),this.scroller=e.createElement("div"),this.scroller.className="ace_scroller",this.container.appendChild(this.scroller),this.content=e.createElement("div"),this.content.className="ace_content",this.scroller.appendChild(this.content),this.$gutterLayer=new h(this.$gutter),this.$markerBack=new i(this.content);var c=this.$textLayer=new j(this.content);this.canvas=c.element,this.$markerFront=new i(this.content),this.characterWidth=c.getCharacterWidth(),this.lineHeight=c.getLineHeight(),this.$cursorLayer=new k(this.content),this.$cursorPadding=8,this.$horizScroll=!0,this.$horizScrollAlwaysVisible=!0,this.scrollBar=new l(a),this.scrollBar.addEventListener("scroll",this.onScroll.bind(this)),this.scrollTop=0,this.cursorPos={row:0,column:0};var d=this;this.$textLayer.addEventListener("changeCharaterSize",function(){d.characterWidth=c.getCharacterWidth(),d.lineHeight=c.getLineHeight(),d.$updatePrintMargin(),d.onResize(!0),d.$loop.schedule(d.CHANGE_FULL)}),f.addListener(this.$gutter,"click",this.$onGutterClick.bind(this)),f.addListener(this.$gutter,"dblclick",this.$onGutterClick.bind(this)),this.$size={width:0,height:0,scrollerHeight:0,scrollerWidth:0},this.layerConfig={width:1,padding:0,firstRow:0,firstRowScreen:0,lastRow:0,lineHeight:1,characterWidth:1,minHeight:1,maxHeight:1,offset:0,height:1},this.$loop=new m(this.$renderChanges.bind(this)),this.$loop.schedule(this.CHANGE_FULL),this.setPadding(4),this.$updatePrintMargin()};(function(){this.showGutter=!0,this.CHANGE_CURSOR=1,this.CHANGE_MARKER=2,this.CHANGE_GUTTER=4,this.CHANGE_SCROLL=8,this.CHANGE_LINES=16,this.CHANGE_TEXT=32,this.CHANGE_SIZE=64,this.CHANGE_MARKER_BACK=128,this.CHANGE_MARKER_FRONT=256,this.CHANGE_FULL=512,d.implement(this,n),this.setSession=function(a){this.session=a,this.$cursorLayer.setSession(a),this.$markerBack.setSession(a),this.$markerFront.setSession(a),this.$gutterLayer.setSession(a),this.$textLayer.setSession(a),this.$loop.schedule(this.CHANGE_FULL)},this.updateLines=function(a,b){b===undefined&&(b=Infinity),this.$changedLines?(this.$changedLines.firstRow>a&&(this.$changedLines.firstRow=a),this.$changedLines.lastRow<b&&(this.$changedLines.lastRow=b)):this.$changedLines={firstRow:a,lastRow:b},this.$loop.schedule(this.CHANGE_LINES)},this.updateText=function(){this.$loop.schedule(this.CHANGE_TEXT)},this.updateFull=function(){this.$loop.schedule(this.CHANGE_FULL)},this.updateFontSize=function(){this.$textLayer.checkForSizeChanges()},this.onResize=function(a){var b=this.CHANGE_SIZE,c=this.$size,d=e.getInnerHeight(this.container);if(a||c.height!=d)c.height=d,this.scroller.style.height=d+"px",c.scrollerHeight=this.scroller.clientHeight,this.scrollBar.setHeight(c.scrollerHeight),this.session&&(this.scrollToY(this.getScrollTop()),b=b|this.CHANGE_FULL);var f=e.getInnerWidth(this.container);if(a||c.width!=f){c.width=f;var g=this.showGutter?this.$gutter.offsetWidth:0;this.scroller.style.left=g+"px",c.scrollerWidth=Math.max(0,f-g-this.scrollBar.getWidth()),this.scroller.style.width=c.scrollerWidth+"px";if(this.session.getUseWrapMode()&&this.adjustWrapLimit()||a)b=b|this.CHANGE_FULL}this.$loop.schedule(b)},this.adjustWrapLimit=function(){var a=this.$size.scrollerWidth-this.$padding*2,b=Math.floor(a/this.characterWidth)-1;return this.session.adjustWrapLimit(b)},this.$onGutterClick=function(a){var b=f.getDocumentX(a),c=f.getDocumentY(a);this._dispatchEvent("gutter"+a.type,{row:this.screenToTextCoordinates(b,c).row,htmlEvent:a})},this.setShowInvisibles=function(a){this.$textLayer.setShowInvisibles(a)&&this.$loop.schedule(this.CHANGE_TEXT)},this.getShowInvisibles=function(){return this.$textLayer.showInvisibles},this.$showPrintMargin=!0,this.setShowPrintMargin=function(a){this.$showPrintMargin=a,this.$updatePrintMargin()},this.getShowPrintMargin=function(){return this.$showPrintMargin},this.$printMarginColumn=80,this.setPrintMarginColumn=function(a){this.$printMarginColumn=a,this.$updatePrintMargin()},this.getPrintMarginColumn=function(){return this.$printMarginColumn},this.getShowGutter=function(){return this.showGutter},this.setShowGutter=function(a){this.showGutter!==a&&(this.$gutter.style.display=a?"block":"none",this.showGutter=a,this.onResize(!0))},this.$updatePrintMargin=function(){var a;if(!!this.$showPrintMargin||!!this.$printMarginEl){this.$printMarginEl||(a=e.createElement("div"),a.className="ace_print_margin_layer",this.$printMarginEl=e.createElement("div"),this.$printMarginEl.className="ace_print_margin",a.appendChild(this.$printMarginEl),this.content.insertBefore(a,this.$textLayer.element));var b=this.$printMarginEl.style;b.left=this.characterWidth*this.$printMarginColumn+this.$padding*2+"px",b.visibility=this.$showPrintMargin?"visible":"hidden"}},this.getContainerElement=function(){return this.container},this.getMouseEventTarget=function(){return this.content},this.getTextAreaContainer=function(){return this.container},this.moveTextAreaToCursor=function(a){if(!g.isIE){var b=this.$cursorLayer.getPixelPosition();if(!b)return;var c=this.content.getBoundingClientRect(),d=this.layerConfig.offset;a.style.left=c.left+b.left+this.$padding+"px",a.style.top=c.top+b.top-this.scrollTop+d+"px"}},this.getFirstVisibleRow=function(){return this.layerConfig.firstRow},this.getFirstFullyVisibleRow=function(){return this.layerConfig.firstRow+(this.layerConfig.offset===0?0:1)},this.getLastFullyVisibleRow=function(){var a=Math.floor((this.layerConfig.height+this.layerConfig.offset)/this.layerConfig.lineHeight);return this.layerConfig.firstRow-1+a},this.getLastVisibleRow=function(){return this.layerConfig.lastRow},this.$padding=null,this.setPadding=function(a){this.$padding=a,this.$textLayer.setPadding(a),this.$cursorLayer.setPadding(a),this.$markerFront.setPadding(a),this.$markerBack.setPadding(a),this.$loop.schedule(this.CHANGE_FULL),this.$updatePrintMargin()},this.getHScrollBarAlwaysVisible=function(){return this.$horizScrollAlwaysVisible},this.setHScrollBarAlwaysVisible=function(a){this.$horizScrollAlwaysVisible!=a&&(this.$horizScrollAlwaysVisible=a,(!this.$horizScrollAlwaysVisible||!this.$horizScroll)&&this.$loop.schedule(this.CHANGE_SCROLL))},this.onScroll=function(a){this.scrollToY(a.data)},this.$updateScrollBar=function(){this.scrollBar.setInnerHeight(this.layerConfig.maxHeight),this.scrollBar.setScrollTop(this.scrollTop)},this.$renderChanges=function(a){if(!!a&&!!this.session){(a&this.CHANGE_FULL||a&this.CHANGE_SIZE||a&this.CHANGE_TEXT||a&this.CHANGE_LINES||a&this.CHANGE_SCROLL)&&this.$computeLayerConfig();if(a&this.CHANGE_FULL){this.$textLayer.update(this.layerConfig),this.showGutter&&this.$gutterLayer.update(this.layerConfig),this.$markerBack.update(this.layerConfig),this.$markerFront.update(this.layerConfig),this.$cursorLayer.update(this.layerConfig),this.$updateScrollBar();return}if(a&this.CHANGE_SCROLL){a&this.CHANGE_TEXT||a&this.CHANGE_LINES?this.$textLayer.update(this.layerConfig):this.$textLayer.scrollLines(this.layerConfig),this.showGutter&&this.$gutterLayer.update(this.layerConfig),this.$markerBack.update(this.layerConfig),this.$markerFront.update(this.layerConfig),this.$cursorLayer.update(this.layerConfig),this.$updateScrollBar();return}a&this.CHANGE_TEXT?(this.$textLayer.update(this.layerConfig),this.showGutter&&this.$gutterLayer.update(this.layerConfig)):a&this.CHANGE_LINES?(this.$updateLines(),this.$updateScrollBar(),this.showGutter&&this.$gutterLayer.update(this.layerConfig)):a&this.CHANGE_GUTTER&&this.showGutter&&this.$gutterLayer.update(this.layerConfig),a&this.CHANGE_CURSOR&&this.$cursorLayer.update(this.layerConfig),a&(this.CHANGE_MARKER|this.CHANGE_MARKER_FRONT)&&this.$markerFront.update(this.layerConfig),a&(this.CHANGE_MARKER|this.CHANGE_MARKER_BACK)&&this.$markerBack.update(this.layerConfig),a&this.CHANGE_SIZE&&this.$updateScrollBar()}},this.$computeLayerConfig=function(){var a=this.session,b=this.scrollTop%this.lineHeight,c=this.$size.scrollerHeight+this.lineHeight,d=this.$getLongestLine(),e=this.layerConfig.width!=d,f=this.$horizScrollAlwaysVisible||this.$size.scrollerWidth-d<0,g=this.$horizScroll!==f;this.$horizScroll=f,g&&(this.scroller.style.overflowX=f?"scroll":"hidden");var h=this.session.getScreenLength()*this.lineHeight;this.scrollTop=Math.max(0,Math.min(this.scrollTop,h-this.$size.scrollerHeight));var i=Math.ceil(c/this.lineHeight)-1,j=Math.max(0,Math.round((this.scrollTop-b)/this.lineHeight)),k=j+i,l,m,n={lineHeight:this.lineHeight};j=a.screenToDocumentRow(j,0);var o=a.getFoldLine(j);o&&(j=o.start.row),l=a.documentToScreenRow(j,0),m=a.getRowHeight(n,j),k=Math.min(a.screenToDocumentRow(k,0),a.getLength()-1),c=this.$size.scrollerHeight+a.getRowHeight(n,k)+m,b=this.scrollTop-l*this.lineHeight,this.layerConfig={width:d,padding:this.$padding,firstRow:j,firstRowScreen:l,lastRow:k,lineHeight:this.lineHeight,characterWidth:this.characterWidth,minHeight:c,maxHeight:h,offset:b,height:this.$size.scrollerHeight},this.$gutterLayer.element.style.marginTop=-b+"px",this.content.style.marginTop=-b+"px",this.content.style.width=d+"px",this.content.style.height=c+"px",this.$desiredScrollLeft&&(this.scrollToX(this.$desiredScrollLeft),this.$desiredScrollLeft=0),g&&this.onResize(!0)},this.$updateLines=function(){var a=this.$changedLines.firstRow,b=this.$changedLines.lastRow;this.$changedLines=null;var c=this.layerConfig;if(c.width!=this.$getLongestLine())return this.$textLayer.update(c);if(!(a>c.lastRow+1)){if(b<c.firstRow)return;if(b===Infinity){this.showGutter&&this.$gutterLayer.update(c),this.$textLayer.update(c);return}this.$textLayer.updateLines(c,a,b)}},this.$getLongestLine=function(){var a=this.session.getScreenWidth()+1;this.$textLayer.showInvisibles&&(a+=1);return Math.max(this.$size.scrollerWidth,Math.round(a*this.characterWidth))},this.updateFrontMarkers=function(){this.$markerFront.setMarkers(this.session.getMarkers(!0)),this.$loop.schedule(this.CHANGE_MARKER_FRONT)},this.updateBackMarkers=function(){this.$markerBack.setMarkers(this.session.getMarkers()),this.$loop.schedule(this.CHANGE_MARKER_BACK)},this.addGutterDecoration=function(a,b){this.$gutterLayer.addGutterDecoration(a,b),this.$loop.schedule(this.CHANGE_GUTTER)},this.removeGutterDecoration=function(a,b){this.$gutterLayer.removeGutterDecoration(a,b),this.$loop.schedule(this.CHANGE_GUTTER)},this.setBreakpoints=function(a){this.$gutterLayer.setBreakpoints(a),this.$loop.schedule(this.CHANGE_GUTTER)},this.setAnnotations=function(a){this.$gutterLayer.setAnnotations(a),this.$loop.schedule(this.CHANGE_GUTTER)},this.updateCursor=function(){this.$loop.schedule(this.CHANGE_CURSOR)},this.hideCursor=function(){this.$cursorLayer.hideCursor()},this.showCursor=function(){this.$cursorLayer.showCursor()},this.scrollCursorIntoView=function(){if(this.$size.scrollerHeight!==0){var a=this.$cursorLayer.getPixelPosition(),b=a.left+this.$padding,c=a.top;this.scrollTop>c&&this.scrollToY(c),this.scrollTop+this.$size.scrollerHeight<c+this.lineHeight&&this.scrollToY(c+this.lineHeight-this.$size.scrollerHeight);var d=this.scroller.scrollLeft;d>b&&this.scrollToX(b),d+this.$size.scrollerWidth<b+this.characterWidth&&(b>this.layerConfig.width?this.$desiredScrollLeft=b+2*this.characterWidth:this.scrollToX(Math.round(b+this.characterWidth-this.$size.scrollerWidth)))}},this.getScrollTop=function(){return this.scrollTop},this.getScrollLeft=function(){return this.scroller.scrollLeft},this.getScrollTopRow=function(){return this.scrollTop/this.lineHeight},this.getScrollBottomRow=function(){return Math.max(0,Math.floor((this.scrollTop+this.$size.scrollerHeight)/this.lineHeight)-1)},this.scrollToRow=function(a){this.scrollToY(a*this.lineHeight)},this.scrollToLine=function(a,b){var c={lineHeight:this.lineHeight},d=0;for(var e=1;e<a;e++)d+=this.session.getRowHeight(c,e-1);b&&(d-=this.$size.scrollerHeight/2),this.scrollToY(d)},this.scrollToY=function(a){a=Math.max(0,a),this.scrollTop!==a&&(this.$loop.schedule(this.CHANGE_SCROLL),this.scrollTop=a)},this.scrollToX=function(a){a<=this.$padding&&(a=0),this.scroller.scrollLeft=a},this.scrollBy=function(a,b){b&&this.scrollToY(this.scrollTop+b),a&&this.scrollToX(this.scroller.scrollLeft+a)},this.screenToTextCoordinates=function(a,b){var c=this.scroller.getBoundingClientRect(),d=Math.round((a+this.scroller.scrollLeft-c.left-this.$padding-e.getPageScrollLeft())/this.characterWidth),f=Math.floor((b+this.scrollTop-c.top-e.getPageScrollTop())/this.lineHeight);return this.session.screenToDocumentPosition(f,Math.max(d,0))},this.textToScreenCoordinates=function(a,b){var c=this.scroller.getBoundingClientRect(),d=this.session.documentToScreenPosition(a,b),e=this.$padding+Math.round(d.column*this.characterWidth),f=d.row*this.lineHeight;return{pageX:c.left+e-this.getScrollLeft(),pageY:c.top+f-this.getScrollTop()}},this.visualizeFocus=function(){e.addCssClass(this.container,"ace_focus")},this.visualizeBlur=function(){e.removeCssClass(this.container,"ace_focus")},this.showComposition=function(a){this.$composition||(this.$composition=e.createElement("div"),this.$composition.className="ace_composition",this.content.appendChild(this.$composition)),this.$composition.innerHTML="&#160;";var b=this.$cursorLayer.getPixelPosition(),c=this.$composition.style;c.top=b.top+"px",c.left=b.left+this.$padding+"px",c.height=this.lineHeight+"px",this.hideCursor()},this.setCompositionText=function(a){e.setInnerText(this.$composition,a)},this.hideComposition=function(){this.showCursor();if(!!this.$composition){var a=this.$composition.style;a.top="-10000px",a.left="-10000px"}},this.setTheme=function(b){function d(a){c.$theme&&e.removeCssClass(c.container,c.$theme),c.$theme=a?a.cssClass:null,c.$theme&&e.addCssClass(c.container,c.$theme),c.$size&&(c.$size.width=0,c.onResize())}var c=this;this.$themeValue=b,!b||typeof b=="string"?(b=b||"ace/theme/textmate",a([b],function(a){d(a)})):d(b)},this.getTheme=function(){return this.$themeValue},this.setStyle=function(a){e.addCssClass(this.container,a)},this.unsetStyle=function(a){e.removeCssClass(this.container,a)},this.destroy=function(){this.$textLayer.destroy(),this.$cursorLayer.destroy()}}).call(p.prototype),b.VirtualRenderer=p}),define("ace/layer/gutter",["require","exports","module","pilot/dom"],function(a,b,c){var d=a("pilot/dom"),e=function(a){this.element=d.createElement("div"),this.element.className="ace_layer ace_gutter-layer",a.appendChild(this.element),this.$breakpoints=[],this.$annotations=[],this.$decorations=[]};(function(){this.setSession=function(a){this.session=a},this.addGutterDecoration=function(a,b){this.$decorations[a]||(this.$decorations[a]=""),this.$decorations[a]+=" ace_"+b},this.removeGutterDecoration=function(a,b){this.$decorations[a]=this.$decorations[a].replace(" ace_"+b,"")},this.setBreakpoints=function(a){this.$breakpoints=a.concat()},this.setAnnotations=function(a){this.$annotations=[];for(var b in a)if(a.hasOwnProperty(b)){var c=a[b];if(!c)continue;var d=this.$annotations[b]={text:[]};for(var e=0;e<c.length;e++){var f=c[e];d.text.push(f.text.replace(/"/g,"&quot;").replace(/'/g,"&#8217;").replace(/</,"&lt;"));var g=f.type;g=="error"?d.className="ace_error":g=="warning"&&d.className!="ace_error"?d.className="ace_warning":g=="info"&&!d.className&&(d.className="ace_info")}}},this.update=function(a){this.$config=a;var b={className:"",text:[]},c=[],e=a.firstRow,f=a.lastRow,g=this.session.getNextFold(e),h=g?g.start.row:Infinity;for(;;){e>h&&(e=g.end.row+1,g=this.session.getNextFold(e),h=g?g.start.row:Infinity);if(e>f)break;var i=this.$annotations[e]||b;c.push("<div class='ace_gutter-cell",this.$decorations[e]||"",this.$breakpoints[e]?" ace_breakpoint ":" ",i.className,"' title='",i.text.join("\n"),"' style='height:",a.lineHeight,"px;'>",e+1);var j=this.session.getRowLength(e)-1;while(j--)c.push("</div><div class='ace_gutter-cell' style='height:",a.lineHeight,"px'>&brvbar;</div>");c.push("</div>"),e++}this.element=d.setInnerHtml(this.element,c.join("")),this.element.style.height=a.minHeight+"px"}}).call(e.prototype),b.Gutter=e}),define("ace/layer/marker",["require","exports","module","ace/range","pilot/dom"],function(a,b,c){var d=a("ace/range").Range,e=a("pilot/dom"),f=function(a){this.element=e.createElement("div"),this.element.className="ace_layer ace_marker-layer",a.appendChild(this.element)};(function(){this.$padding=0,this.setPadding=function(a){this.$padding=a},this.setSession=function(a){this.session=a},this.setMarkers=function(a){this.markers=a},this.update=function(a){var a=a||this.config;if(!!a){this.config=a;var b=[];for(var c in this.markers){var d=this.markers[c],f=d.range.clipRows(a.firstRow,a.lastRow);if(f.isEmpty())continue;f=f.toScreenRange(this.session);if(d.renderer){var g=this.$getTop(f.start.row,a),h=Math.round(this.$padding+f.start.column*a.characterWidth);d.renderer(b,f,h,g,a)}else f.isMultiLine()?d.type=="text"?this.drawTextMarker(b,f,d.clazz,a):this.drawMultiLineMarker(b,f,d.clazz,a,d.type):this.drawSingleLineMarker(b,f,d.clazz,a,null,d.type)}this.element=e.setInnerHtml(this.element,b.join(""))}},this.$getTop=function(a,b){return(a-b.firstRowScreen)*b.lineHeight},this.drawTextMarker=function(a,b,c,e){var f=b.start.row,g=new d(f,b.start.column,f,this.session.getScreenLastRowColumn(f));this.drawSingleLineMarker(a,g,c,e,1,"text"),f=b.end.row,g=new d(f,0,f,b.end.column),this.drawSingleLineMarker(a,g,c,e,0,"text");for(f=b.start.row+1;f<b.end.row;f++)g.start.row=f,g.end.row=f,g.end.column=this.session.getScreenLastRowColumn(f),this.drawSingleLineMarker(a,g,c,e,1,"text")},this.drawMultiLineMarker=function(a,b,c,d,e){var f=e==="background"?0:this.$padding,g=d.lineHeight,h=Math.round(d.width-b.start.column*d.characterWidth),i=this.$getTop(b.start.row,d),j=Math.round(f+b.start.column*d.characterWidth);a.push("<div class='",c,"' style='","height:",g,"px;","width:",h,"px;","top:",i,"px;","left:",j,"px;'></div>"),i=this.$getTop(b.end.row,d),h=Math.round(b.end.column*d.characterWidth),a.push("<div class='",c,"' style='","height:",g,"px;","width:",h,"px;","top:",i,"px;","left:",f,"px;'></div>"),g=(b.end.row-b.start.row-1)*d.lineHeight;g<0||(i=this.$getTop(b.start.row+1,d),h=d.width,a.push("<div class='",c,"' style='","height:",g,"px;","width:",h,"px;","top:",i,"px;","left:",f,"px;'></div>"))},this.drawSingleLineMarker=function(a,b,c,d,e,f){var g=f==="background"?0:this.$padding,h=d.lineHeight;if(f==="background")var i=d.width;else i=Math.round((b.end.column+(e||0)-b.start.column)*d.characterWidth);var j=this.$getTop(b.start.row,d),k=Math.round(g+b.start.column*d.characterWidth);a.push("<div class='",c,"' style='","height:",h,"px;","width:",i,"px;","top:",j,"px;","left:",k,"px;'></div>")}}).call(f.prototype),b.Marker=f}),define("ace/layer/text",["require","exports","module","pilot/oop","pilot/dom","pilot/lang","pilot/useragent","pilot/event_emitter"],function(a,b,c){var d=a("pilot/oop"),e=a("pilot/dom"),f=a("pilot/lang"),g=a("pilot/useragent"),h=a("pilot/event_emitter").EventEmitter,i=function(a){this.element=e.createElement("div"),this.element.className="ace_layer ace_text-layer",this.element.style.width="auto",a.appendChild(this.element),this.$characterSize=this.$measureSizes()||{width:0,height:0},this.$pollSizeChanges()};(function(){d.implement(this,h),this.EOF_CHAR="&para;",this.EOL_CHAR="&not;",this.TAB_CHAR="&rarr;",this.SPACE_CHAR="&middot;",this.$padding=0,this.setPadding=function(a){this.$padding=a,this.element.style.padding="0 "+a+"px"},this.getLineHeight=function(){return this.$characterSize.height||1},this.getCharacterWidth=function(){return this.$characterSize.width||1},this.checkForSizeChanges=function(){var a=this.$measureSizes();a&&(this.$characterSize.width!==a.width||this.$characterSize.height!==a.height)&&(this.$characterSize=a,this._dispatchEvent("changeCharaterSize",{data:a}))},this.$pollSizeChanges=function(){var a=this;this.$pollSizeChangesTimer=setInterval(function(){a.checkForSizeChanges()},500)},this.$fontStyles={fontFamily:1,fontSize:1,fontWeight:1,fontStyle:1,lineHeight:1},this.$measureSizes=function(){var a=1e3;if(!this.$measureNode){var b=this.$measureNode=e.createElement("div"),c=b.style;c.width=c.height="auto",c.left=c.top=-a*40+"px",c.visibility="hidden",c.position="absolute",c.overflow="visible",c.whiteSpace="nowrap",b.innerHTML=f.stringRepeat("Xy",a);if(document.body)document.body.appendChild(b);else{var d=this.element.parentNode;while(!e.hasCssClass(d,"ace_editor"))d=d.parentNode;d.appendChild(b)}}var c=this.$measureNode.style,g=e.computedStyle(this.element);for(var h in this.$fontStyles)c[h]=g[h];var i={height:this.$measureNode.offsetHeight,width:this.$measureNode.offsetWidth/(a*2)};return i.width==0&&i.height==0?null:i},this.setSession=function(a){this.session=a},this.showInvisibles=!1,this.setShowInvisibles=function(a){if(this.showInvisibles==a)return!1;this.showInvisibles=a;return!0},this.$tabStrings=[],this.$computeTabString=function(){var a=this.session.getTabSize(),b=this.$tabStrings=[0];for(var c=1;c<a+1;c++)this.showInvisibles?b.push("<span class='ace_invisible'>"+this.TAB_CHAR+Array(c).join("&#160;")+"</span>"):b.push(Array(c+1).join("&#160;"))},this.updateLines=function(a,b,c){this.$computeTabString(),(this.config.lastRow!=a.lastRow||this.config.firstRow!=a.firstRow)&&this.scrollLines(a),this.config=a;var d=Math.max(b,a.firstRow),f=Math.min(c,a.lastRow),g=this.element.childNodes,h=0;for(var i=a.firstRow;i<d;i++){var j=this.session.getFoldLine(i);if(j){if(j.containsRow(d))break;i=j.end.row}h++}for(var k=d;k<=f;k++){var l=g[h++];if(!l)continue;var m=[],n=this.session.getTokens(k,k);this.$renderLine(m,k,n[0].tokens,!0),l=e.setInnerHtml(l,m.join("")),k=this.session.getRowFoldEnd(k)}},this.scrollLines=function(a){this.$computeTabString();var b=this.config;this.config=a;if(!b||b.lastRow<a.firstRow)return this.update(a);if(a.lastRow<b.firstRow)return this.update(a);var c=this.element;if(b.firstRow<a.firstRow)for(var d=this.session.getFoldedRowCount(b.firstRow,a.firstRow-1);d>0;d--)c.removeChild(c.firstChild);if(b.lastRow>a.lastRow)for(var d=this.session.getFoldedRowCount(a.lastRow+1,b.lastRow);d>0;d--)c.removeChild(c.lastChild);if(a.firstRow<b.firstRow){var e=this.$renderLinesFragment(a,a.firstRow,b.firstRow-1);c.firstChild?c.insertBefore(e,c.firstChild):c.appendChild(e)}if(a.lastRow>b.lastRow){var e=this.$renderLinesFragment(a,b.lastRow+1,a.lastRow);c.appendChild(e)}},this.$renderLinesFragment=function(a,b,c){var d=document.createDocumentFragment(),f=b,g=this.session.getNextFold(f),h=g?g.start.row:Infinity;for(;;){f>h&&(f=g.end.row+1,g=this.session.getNextFold(f),h=g?g.start.row:Infinity);if(f>c)break;var i=e.createElement("div"),j=[],k=this.session.getTokens(f,f);k.length==1&&this.$renderLine(j,f,k[0].tokens,!1),i.innerHTML=j.join("");var l=i.childNodes;while(l.length)d.appendChild(l[0]);f++}return d},this.update=function(a){this.$computeTabString(),this.config=a;var b=[],c=a.firstRow,d=a.lastRow,f=c,g=this.session.getNextFold(f),h=g?g.start.row:Infinity;for(;;){f>h&&(f=g.end.row+1,g=this.session.getNextFold(f),h=g?g.start.row:Infinity);if(f>d)break;var i=this.session.getTokens(f,f);i.length==1&&this.$renderLine(b,f,i[0].tokens,!1),f++}this.element=e.setInnerHtml(this.element,b.join(""))},this.$textToken={text:!0,rparen:!0,lparen:!0},this.$renderToken=function(a,b,c,d){var e=this,f=/\t|&|<|( +)|([\v\f \u00a0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000])|[\u1100-\u115F]|[\u11A3-\u11A7]|[\u11FA-\u11FF]|[\u2329-\u232A]|[\u2E80-\u2E99]|[\u2E9B-\u2EF3]|[\u2F00-\u2FD5]|[\u2FF0-\u2FFB]|[\u3000-\u303E]|[\u3041-\u3096]|[\u3099-\u30FF]|[\u3105-\u312D]|[\u3131-\u318E]|[\u3190-\u31BA]|[\u31C0-\u31E3]|[\u31F0-\u321E]|[\u3220-\u3247]|[\u3250-\u32FE]|[\u3300-\u4DBF]|[\u4E00-\uA48C]|[\uA490-\uA4C6]|[\uA960-\uA97C]|[\uAC00-\uD7A3]|[\uD7B0-\uD7C6]|[\uD7CB-\uD7FB]|[\uF900-\uFAFF]|[\uFE10-\uFE19]|[\uFE30-\uFE52]|[\uFE54-\uFE66]|[\uFE68-\uFE6B]|[\uFF01-\uFF60]|[\uFFE0-\uFFE6]/g,h=function(a,c,d,f,h){if(a.charCodeAt(0)==32)return Array(a.length+1).join("&#160;");if(a=="\t"){var i=e.session.getScreenTabSize(b+f);b+=i-1;return e.$tabStrings[i]}if(a=="&")return g.isOldGecko?"&":"&amp;";if(a=="<")return"&lt;";if(a.match(/[\v\f \u00a0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000]/)){if(e.showInvisibles){var j=Array(a.length+1).join(e.SPACE_CHAR);return"<span class='ace_invisible'>"+j+"</span>"}return"&#160;"}b+=1;return"<span class='ace_cjk' style='width:"+e.config.characterWidth*2+"px'>"+a+"</span>"},i=d.replace(f,h);if(!this.$textToken[c.type]){var j="ace_"+c.type.replace(/\./g," ace_");a.push("<span class='",j,"'>",i,"</span>")}else a.push(i);return b+d.length},this.$renderLineCore=function(a,b,c,d,e){var f=0,g=0,h,i=this.config.characterWidth,j=0,k=this;!d||d.length==0?h=Number.MAX_VALUE:h=d[0],e||a.push("<div class='ace_line' style='height:",this.config.lineHeight,"px","'>");for(var l=0;l<c.length;l++){var m=c[l],n=m.value;if(f+n.length<h)j=k.$renderToken(a,j,m,n),f+=n.length;else{while(f+n.length>=h)j=k.$renderToken(a,j,m,n.substring(0,h-f)),n=n.substring(h-f),f=h,e||a.push("</div>","<div class='ace_line' style='height:",this.config.lineHeight,"px","'>"),g++,j=0,h=d[g]||Number.MAX_VALUE;n.length!=0&&(f+=n.length,j=k.$renderToken(a,j,m,n))}}this.showInvisibles&&(b!==this.session.getLength()-1?a.push("<span class='ace_invisible'>"+this.EOL_CHAR+"</span>"):a.push("<span class='ace_invisible'>"+this.EOF_CHAR+"</span>")),a.push("</div>")},this.$renderLine=function(a,b,c,d){if(!this.session.isRowFolded(b)){var e=this.session.getRowSplitData(b);this.$renderLineCore(a,b,c,e,d)}else this.$renderFoldLine(a,b,c,d)},this.$renderFoldLine=function(a,b,c,d){function h(a,b,c){var d=0,e=0;while(e+a[d].value.length<b){e+=a[d].value.length,d++;if(d==a.length)return}if(e!=b){var f=a[d].value.substring(b-e);f.length>c-b&&(f=f.substring(0,c-b)),g.push({type:a[d].type,value:f}),e=b+f.length,d+=1}while(e<c){var f=a[d].value;f.length+e>c&&(f=f.substring(0,c-e)),g.push({type:a[d].type,value:f}),e+=f.length,d+=1}}var e=this.session,f=e.getFoldLine(b),g=[];f.walk(function(a,b,d,e,f){a?g.push({type:"fold",value:a}):(f&&(c=this.session.getTokens(b,b)[0].tokens),c.length!=0&&h(c,e,d))}.bind(this),f.end.row,this.session.getLine(f.end.row).length);var i=this.session.$useWrapMode?this.session.$wrapData[b]:null;this.$renderLineCore(a,b,g,i,d)},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.$measureNode&&this.$measureNode.parentNode.removeChild(this.$measureNode),delete this.$measureNode}}).call(i.prototype),b.Text=i}),define("ace/layer/cursor",["require","exports","module","pilot/dom"],function(a,b,c){var d=a("pilot/dom"),e=function(a){this.element=d.createElement("div"),this.element.className="ace_layer ace_cursor-layer",a.appendChild(this.element),this.cursor=d.createElement("div"),this.cursor.className="ace_cursor ace_hidden",this.element.appendChild(this.cursor),this.isVisible=!1};(function(){this.$padding=0,this.setPadding=function(a){this.$padding=a},this.setSession=function(a){this.session=a},this.hideCursor=function(){this.isVisible=!1,d.addCssClass(this.cursor,"ace_hidden"),clearInterval(this.blinkId)},this.showCursor=function(){this.isVisible=!0,d.removeCssClass(this.cursor,"ace_hidden"),this.cursor.style.visibility="visible",this.restartTimer()},this.restartTimer=function(){clearInterval(this.blinkId);if(!!this.isVisible){var a=this.cursor;this.blinkId=setInterval(function(){a.style.visibility="hidden",setTimeout(function(){a.style.visibility="visible"},400)},1e3)}},this.getPixelPosition=function(a){if(!this.config||!this.session)return{left:0,top:0};var b=this.session.selection.getCursor(),c=this.session.documentToScreenPosition(b),d=Math.round(this.$padding+c.column*this.config.characterWidth),e=(c.row-(a?this.config.firstRowScreen:0))*this.config.lineHeight;return{left:d,top:e}},this.update=function(a){this.config=a,this.pixelPos=this.getPixelPosition(!0),this.cursor.style.left=this.pixelPos.left+"px",this.cursor.style.top=this.pixelPos.top+"px",this.cursor.style.width=a.characterWidth+"px",this.cursor.style.height=a.lineHeight+"px";var b=this.session.getOverwrite();b!=this.overwrite&&(this.overwrite=b,b?d.addCssClass(this.cursor,"ace_overwrite"):d.removeCssClass(this.cursor,"ace_overwrite")),this.restartTimer()},this.destroy=function(){clearInterval(this.blinkId)}}).call(e.prototype),b.Cursor=e}),define("ace/scrollbar",["require","exports","module","pilot/oop","pilot/dom","pilot/event","pilot/event_emitter"],function(a,b,c){var d=a("pilot/oop"),e=a("pilot/dom"),f=a("pilot/event"),g=a("pilot/event_emitter").EventEmitter,h=function(a){this.element=e.createElement("div"),this.element.className="ace_sb",this.inner=e.createElement("div"),this.element.appendChild(this.inner),a.appendChild(this.element),this.width=e.scrollbarWidth(),this.element.style.width=(this.width||15)+"px",f.addListener(this.element,"scroll",this.onScroll.bind(this))};(function(){d.implement(this,g),this.onScroll=function(){this._dispatchEvent("scroll",{data:this.element.scrollTop})},this.getWidth=function(){return this.width},this.setHeight=function(a){this.element.style.height=a+"px"},this.setInnerHeight=function(a){this.inner.style.height=a+"px"},this.setScrollTop=function(a){this.element.scrollTop=a}}).call(h.prototype),b.ScrollBar=h}),define("ace/renderloop",["require","exports","module","pilot/event"],function(a,b,c){var d=a("pilot/event"),e=function(a){this.onRender=a,this.pending=!1,this.changes=0};(function(){this.schedule=function(a){this.changes=this.changes|a;if(!this.pending){this.pending=!0;var b=this;this.setTimeoutZero(function(){b.pending=!1;var a=b.changes;b.changes=0,b.onRender(a)})}},this.setTimeoutZero=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame,this.setTimeoutZero?this.setTimeoutZero=this.setTimeoutZero.bind(window):window.postMessage?(this.messageName="zero-timeout-message",this.setTimeoutZero=function(a){if(!this.attached){var b=this;d.addListener(window,"message",function(a){b.callback&&a.data==b.messageName&&(d.stopPropagation(a),b.callback())}),this.attached=!0}this.callback=a,window.postMessage(this.messageName,"*")}):this.setTimeoutZero=function(a){setTimeout(a,0)}}).call(e.prototype),b.RenderLoop=e}),define("ace/theme/textmate",["require","exports","module","pilot/dom"],function(a,b,c){var d=a("pilot/dom"),e=".ace-tm .ace_editor {\n border: 2px solid rgb(159, 159, 159);\n}\n\n.ace-tm .ace_editor.ace_focus {\n border: 2px solid #327fbd;\n}\n\n.ace-tm .ace_gutter {\n width: 50px;\n background: #e8e8e8;\n color: #333;\n overflow : hidden;\n}\n\n.ace-tm .ace_gutter-layer {\n width: 100%;\n text-align: right;\n}\n\n.ace-tm .ace_gutter-layer .ace_gutter-cell {\n padding-right: 6px;\n}\n\n.ace-tm .ace_print_margin {\n width: 1px;\n background: #e8e8e8;\n}\n\n.ace-tm .ace_text-layer {\n cursor: text;\n}\n\n.ace-tm .ace_cursor {\n border-left: 2px solid black;\n}\n\n.ace-tm .ace_cursor.ace_overwrite {\n border-left: 0px;\n border-bottom: 1px solid black;\n}\n \n.ace-tm .ace_line .ace_invisible {\n color: rgb(191, 191, 191);\n}\n\n.ace-tm .ace_line .ace_keyword {\n color: blue;\n}\n\n.ace-tm .ace_line .ace_constant.ace_buildin {\n color: rgb(88, 72, 246);\n}\n\n.ace-tm .ace_line .ace_constant.ace_language {\n color: rgb(88, 92, 246);\n}\n\n.ace-tm .ace_line .ace_constant.ace_library {\n color: rgb(6, 150, 14);\n}\n\n.ace-tm .ace_line .ace_invalid {\n background-color: rgb(153, 0, 0);\n color: white;\n}\n\n.ace-tm .ace_line .ace_fold {\n background-color: #E4E4E4;\n border-radius: 3px;\n}\n\n.ace-tm .ace_line .ace_support.ace_function {\n color: rgb(60, 76, 114);\n}\n\n.ace-tm .ace_line .ace_support.ace_constant {\n color: rgb(6, 150, 14);\n}\n\n.ace-tm .ace_line .ace_support.ace_type,\n.ace-tm .ace_line .ace_support.ace_class {\n color: rgb(109, 121, 222);\n}\n\n.ace-tm .ace_line .ace_keyword.ace_operator {\n color: rgb(104, 118, 135);\n}\n\n.ace-tm .ace_line .ace_string {\n color: rgb(3, 106, 7);\n}\n\n.ace-tm .ace_line .ace_comment {\n color: rgb(76, 136, 107);\n}\n\n.ace-tm .ace_line .ace_comment.ace_doc {\n color: rgb(0, 102, 255);\n}\n\n.ace-tm .ace_line .ace_comment.ace_doc.ace_tag {\n color: rgb(128, 159, 191);\n}\n\n.ace-tm .ace_line .ace_constant.ace_numeric {\n color: rgb(0, 0, 205);\n}\n\n.ace-tm .ace_line .ace_variable {\n color: rgb(49, 132, 149);\n}\n\n.ace-tm .ace_line .ace_xml_pe {\n color: rgb(104, 104, 91);\n}\n\n.ace-tm .ace_marker-layer .ace_selection {\n background: rgb(181, 213, 255);\n}\n\n.ace-tm .ace_marker-layer .ace_step {\n background: rgb(252, 255, 0);\n}\n\n.ace-tm .ace_marker-layer .ace_stack {\n background: rgb(164, 229, 101);\n}\n\n.ace-tm .ace_marker-layer .ace_bracket {\n margin: -1px 0 0 -1px;\n border: 1px solid rgb(192, 192, 192);\n}\n\n.ace-tm .ace_marker-layer .ace_active_line {\n background: rgba(0, 0, 0, 0.07);\n}\n\n.ace-tm .ace_marker-layer .ace_selected_word {\n background: rgb(250, 250, 255);\n border: 1px solid rgb(200, 200, 250);\n}\n\n.ace-tm .ace_string.ace_regex {\n color: rgb(255, 0, 0)\n}";d.importCssString(e),b.cssClass="ace-tm"}),define("pilot/environment",["require","exports","module","pilot/settings"],function(a,b,c){function e(){return{settings:d}}var d=a("pilot/settings").settings;b.create=e}),define("text/cockpit/ui/cli_view.css",[],"#cockpitInput { padding-left: 16px; }.cptOutput { overflow: auto; position: absolute; z-index: 999; display: none; }.cptCompletion { padding: 0; position: absolute; z-index: -1000; }.cptCompletion.VALID { background: #FFF; }.cptCompletion.INCOMPLETE { background: #DDD; }.cptCompletion.INVALID { background: #DDD; }.cptCompletion span { color: #FFF; }.cptCompletion span.INCOMPLETE { color: #DDD; border-bottom: 2px dotted #F80; }.cptCompletion span.INVALID { color: #DDD; border-bottom: 2px dotted #F00; }span.cptPrompt { color: #66F; font-weight: bold; }.cptHints { color: #000; position: absolute; border: 1px solid rgba(230, 230, 230, 0.8); background: rgba(250, 250, 250, 0.8); -moz-border-radius-topleft: 10px; -moz-border-radius-topright: 10px; border-top-left-radius: 10px; border-top-right-radius: 10px; z-index: 1000; padding: 8px; display: none;}.cptFocusPopup { display: block; }.cptFocusPopup.cptNoPopup { display: none; }.cptHints ul { margin: 0; padding: 0 15px; }.cptGt { font-weight: bold; font-size: 120%; }"),define("text/cockpit/ui/request_view.css",[],".cptRowIn { display: box; display: -moz-box; display: -webkit-box; box-orient: horizontal; -moz-box-orient: horizontal; -webkit-box-orient: horizontal; box-align: center; -moz-box-align: center; -webkit-box-align: center; color: #333; background-color: #EEE; width: 100%; font-family: consolas, courier, monospace;}.cptRowIn > * { padding-left: 2px; padding-right: 2px; }.cptRowIn > img { cursor: pointer; }.cptHover { display: none; }.cptRowIn:hover > .cptHover { display: block; }.cptRowIn:hover > .cptHover.cptHidden { display: none; }.cptOutTyped { box-flex: 1; -moz-box-flex: 1; -webkit-box-flex: 1; font-weight: bold; color: #000; font-size: 120%;}.cptRowOutput { padding-left: 10px; line-height: 1.2em; }.cptRowOutput strong,.cptRowOutput b,.cptRowOutput th,.cptRowOutput h1,.cptRowOutput h2,.cptRowOutput h3 { color: #000; }.cptRowOutput a { font-weight: bold; color: #666; text-decoration: none; }.cptRowOutput a: hover { text-decoration: underline; cursor: pointer; }.cptRowOutput input[type=password],.cptRowOutput input[type=text],.cptRowOutput textarea { color: #000; font-size: 120%; background: transparent; padding: 3px; border-radius: 5px; -moz-border-radius: 5px; -webkit-border-radius: 5px;}.cptRowOutput table,.cptRowOutput td,.cptRowOutput th { border: 0; padding: 0 2px; }.cptRowOutput .right { text-align: right; }"),define("text/ace/css/editor.css",[],'.ace_editor { position: absolute; overflow: hidden; font-family: Monaco, "Menlo", "Courier New", monospace; font-size: 12px;}.ace_scroller { position: absolute; overflow-x: scroll; overflow-y: hidden;}.ace_content { position: absolute; box-sizing: border-box; -moz-box-sizing: border-box; -webkit-box-sizing: border-box;}.ace_composition { position: absolute; background: #555; color: #DDD; z-index: 4;}.ace_gutter { position: absolute; overflow-x: hidden; overflow-y: hidden; height: 100%;}.ace_gutter-cell.ace_error { background-image: url("data:image/gif,GIF89a%10%00%10%00%D5%00%00%F5or%F5%87%88%F5nr%F4ns%EBmq%F5z%7F%DDJT%DEKS%DFOW%F1Yc%F2ah%CE(7%CE)8%D18E%DD%40M%F2KZ%EBU%60%F4%60m%DCir%C8%16(%C8%19*%CE%255%F1%3FR%F1%3FS%E6%AB%B5%CA%5DI%CEn%5E%F7%A2%9A%C9G%3E%E0a%5B%F7%89%85%F5yy%F6%82%80%ED%82%80%FF%BF%BF%E3%C4%C4%FF%FF%FF%FF%FF%FF%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00!%F9%04%01%00%00%25%00%2C%00%00%00%00%10%00%10%00%00%06p%C0%92pH%2C%1A%8F%C8%D2H%93%E1d4%23%E4%88%D3%09mB%1DN%B48%F5%90%40%60%92G%5B%94%20%3E%22%D2%87%24%FA%20%24%C5%06A%00%20%B1%07%02B%A38%89X.v%17%82%11%13q%10%0Fi%24%0F%8B%10%7BD%12%0Ei%09%92%09%0EpD%18%15%24%0A%9Ci%05%0C%18F%18%0B%07%04%01%04%06%A0H%18%12%0D%14%0D%12%A1I%B3%B4%B5IA%00%3B"); background-repeat: no-repeat; background-position: 4px center;}.ace_gutter-cell.ace_warning { background-image: url("data:image/gif,GIF89a%10%00%10%00%D5%00%00%FF%DBr%FF%DE%81%FF%E2%8D%FF%E2%8F%FF%E4%96%FF%E3%97%FF%E5%9D%FF%E6%9E%FF%EE%C1%FF%C8Z%FF%CDk%FF%D0s%FF%D4%81%FF%D5%82%FF%D5%83%FF%DC%97%FF%DE%9D%FF%E7%B8%FF%CCl%7BQ%13%80U%15%82W%16%81U%16%89%5B%18%87%5B%18%8C%5E%1A%94d%1D%C5%83-%C9%87%2F%C6%84.%C6%85.%CD%8B2%C9%871%CB%8A3%CD%8B5%DC%98%3F%DF%9BB%E0%9CC%E1%A5U%CB%871%CF%8B5%D1%8D6%DB%97%40%DF%9AB%DD%99B%E3%B0p%E7%CC%AE%FF%FF%FF%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00!%F9%04%01%00%00%2F%00%2C%00%00%00%00%10%00%10%00%00%06a%C0%97pH%2C%1A%8FH%A1%ABTr%25%87%2B%04%82%F4%7C%B9X%91%08%CB%99%1C!%26%13%84*iJ9(%15G%CA%84%14%01%1A%97%0C%03%80%3A%9A%3E%81%84%3E%11%08%B1%8B%20%02%12%0F%18%1A%0F%0A%03\'F%1C%04%0B%10%16%18%10%0B%05%1CF%1D-%06%07%9A%9A-%1EG%1B%A0%A1%A0U%A4%A5%A6BA%00%3B"); background-repeat: no-repeat; background-position: 4px center;}.ace_editor .ace_sb { position: absolute; overflow-x: hidden; overflow-y: scroll; right: 0;}.ace_editor .ace_sb div { position: absolute; width: 1px; left: 0;}.ace_editor .ace_print_margin_layer { z-index: 0; position: absolute; overflow: hidden; margin: 0; left: 0; height: 100%; width: 100%;}.ace_editor .ace_print_margin { position: absolute; height: 100%;}.ace_editor textarea { position: fixed; z-index: -1; width: 10px; height: 30px; opacity: 0; background: transparent; appearance: none; -moz-appearance: none; border: none; resize: none; outline: none; overflow: hidden;}.ace_layer { z-index: 1; position: absolute; overflow: hidden; white-space: nowrap; height: 100%; width: 100%;}.ace_text-layer { color: black;}.ace_cjk { display: inline-block; text-align: center;}.ace_cursor-layer { z-index: 4; cursor: text; /* setting pointer-events: none; here will break mouse wheel scrolling in Safari */}.ace_cursor { z-index: 4; position: absolute;}.ace_cursor.ace_hidden { opacity: 0.2;}.ace_line { white-space: nowrap;}.ace_marker-layer { cursor: text; pointer-events: none;}.ace_marker-layer .ace_step { position: absolute; z-index: 3;}.ace_marker-layer .ace_selection { position: absolute; z-index: 4;}.ace_marker-layer .ace_bracket { position: absolute; z-index: 5;}.ace_marker-layer .ace_active_line { position: absolute; z-index: 2;}.ace_marker-layer .ace_selected_word { position: absolute; z-index: 6; box-sizing: border-box; -moz-box-sizing: border-box; -webkit-box-sizing: border-box;}.ace_line .ace_fold { cursor: pointer;}.ace_dragging .ace_marker-layer, .ace_dragging .ace_text-layer { cursor: move;}'),define("text/build/demo/styles.css",[],"html { height: 100%; width: 100%; overflow: hidden;}body { overflow: hidden; margin: 0; padding: 0; height: 100%; width: 100%; font-family: Arial, Helvetica, sans-serif, Tahoma, Verdana, sans-serif; font-size: 12px; background: rgb(14, 98, 165); color: white;}#logo { padding: 15px; margin-left: 65px;}#editor { position: absolute; top: 0px; left: 280px; bottom: 0px; right: 0px; background: white;}#controls { padding: 5px;}#controls td { text-align: right;}#controls td + td { text-align: left;}#cockpitInput { position: absolute; left: 280px; right: 0px; bottom: 0; border: none; outline: none; font-family: consolas, courier, monospace; font-size: 120%;}#cockpitOutput { padding: 10px; margin: 0 15px; border: 1px solid #AAA; -moz-border-radius-topleft: 10px; -moz-border-radius-topright: 10px; border-top-left-radius: 4px; border-top-right-radius: 4px; background: #DDD; color: #000;}"),define("text/build_support/style.css",[],"body { margin:0; padding:0; background-color:#e6f5fc; }H2, H3, H4 { font-family:Trebuchet MS; font-weight:bold; margin:0; padding:0;}H2 { font-size:28px; color:#263842; padding-bottom:6px;}H3 { font-family:Trebuchet MS; font-weight:bold; font-size:22px; color:#253741; margin-top:43px; margin-bottom:8px;}H4 { font-family:Trebuchet MS; font-weight:bold; font-size:21px; color:#222222; margin-bottom:4px;}P { padding:13px 0; margin:0; line-height:22px;}UL{ line-height : 22px;}PRE{ background : #333; color : white; padding : 10px;}#header { height : 227px; position:relative; overflow:hidden; background: url(images/background.png) repeat-x 0 0; border-bottom:1px solid #c9e8fa; }#header .content .signature { font-family:Trebuchet MS; font-size:11px; color:#ebe4d6; position:absolute; bottom:5px; right:42px; letter-spacing : 1px;}.content { width:970px; position:relative; overflow:hidden; margin:0 auto;}#header .content { height:184px; margin-top:22px;}#header .content .logo { width : 282px; height : 184px; background:url(images/logo.png) no-repeat 0 0; position:absolute; top:0; left:0;}#header .content .title { width : 605px; height : 58px; background:url(images/ace.png) no-repeat 0 0; position:absolute; top:98px; left:329px;}#wrapper { background:url(images/body_background.png) repeat-x 0 0; min-height:250px;}#wrapper .content { font-family:Arial; font-size:14px; color:#222222; width:1000px;}#wrapper .content .column1 { position:relative; overflow:hidden; float:left; width:315px; margin-right:31px;}#wrapper .content .column2 { position:relative; overflow:hidden; float:left; width:600px; padding-top:47px;}.fork_on_github { width:310px; height:80px; background:url(images/fork_on_github.png) no-repeat 0 0; position:relative; overflow:hidden; margin-top:49px; cursor:pointer;}.fork_on_github:hover { background-position:0 -80px;}.divider { height:3px; background-color:#bedaea; margin-bottom:3px;}.menu { padding:23px 0 0 24px;}UL.content-list { padding:15px; margin:0;}UL.menu-list { padding:0; margin:0 0 20px 0; list-style-type:none; line-height : 16px;}UL.menu-list LI { color:#2557b4; font-family:Trebuchet MS; font-size:14px; padding:7px 0; border-bottom:1px dotted #d6e2e7;}UL.menu-list LI:last-child { border-bottom:0;}A { color:#2557b4; text-decoration:none;}A:hover { text-decoration:underline;}P#first{ background : rgba(255,255,255,0.5); padding : 20px; font-size : 16px; line-height : 24px; margin : 0 0 20px 0;}#footer { height:40px; position:relative; overflow:hidden; background:url(images/bottombar.png) repeat-x 0 0; position:relative; margin-top:40px;}UL.menu-footer { padding:0; margin:8px 11px 0 0; list-style-type:none; float:right;}UL.menu-footer LI { color:white; font-family:Arial; font-size:12px; display:inline-block; margin:0 1px;}UL.menu-footer LI A { color:#8dd0ff; text-decoration:none;}UL.menu-footer LI A:hover { text-decoration:underline;}"),define("text/demo/styles.css",[],"html { height: 100%; width: 100%; overflow: hidden;}body { overflow: hidden; margin: 0; padding: 0; height: 100%; width: 100%; font-family: Arial, Helvetica, sans-serif, Tahoma, Verdana, sans-serif; font-size: 12px; background: rgb(14, 98, 165); color: white;}#logo { padding: 15px; margin-left: 65px;}#editor { position: absolute; top: 0px; left: 280px; bottom: 0px; right: 0px; background: white;}#controls { padding: 5px;}#controls td { text-align: right;}#controls td + td { text-align: left;}#cockpitInput { position: absolute; left: 280px; right: 0px; bottom: 0; border: none; outline: none; font-family: consolas, courier, monospace; font-size: 120%;}#cockpitOutput { padding: 10px; margin: 0 15px; border: 1px solid #AAA; -moz-border-radius-topleft: 10px; -moz-border-radius-topright: 10px; border-top-left-radius: 4px; border-top-right-radius: 4px; background: #DDD; color: #000;}"),define("text/deps/csslint/demos/demo.css",[],'@charset "UTF-8";@import url("booya.css") print,screen;@import "whatup.css" screen;@import "wicked.css";@namespace "http://www.w3.org/1999/xhtml";@namespace svg "http://www.w3.org/2000/svg";li.inline #foo { background: url("something.png"); display: inline; padding-left: 3px; padding-right: 7px; border-right: 1px dotted #066;}li.last.first { display: inline; padding-left: 3px !important; padding-right: 3px; border-right: 0px;}@media print { li.inline { color: black; }@charset "UTF-8"; @page { margin: 10%; counter-increment: page; @top-center { font-family: sans-serif; font-weight: bold; font-size: 2em; content: counter(page); }}'),define("text/deps/requirejs/dist/ie.css",[],"body .sect { display: none;}#content ul.index { list-style: none;}"),define("text/deps/requirejs/dist/main.css",[],'@font-face { font-family: Inconsolata; src: url("fonts/Inconsolata.ttf");}* { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; margin: 0; padding: 0;}body { font-size: 12px; line-height: 21px; background-color: #fff; font-family: "Helvetica Neue", Helvetica, Arial, Verdana, sans-serif; color: #0a0a0a;}#wrapper { margin: 0;}#grid { position: fixed; top: 0; left: 0; width: 796px; background-image: url("i/grid.png"); z-index: 100;}pre { line-height: 18px; font-size: 13px; margin: 7px 0 21px; padding: 5px 10px; overflow: auto; background-color: #fafafa; border: 1px solid #e6e6e6; -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; -moz-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.05); -webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.05); box-shadow: 0 2px 5px rgba(0, 0, 0, 0.05);}/* typography stuff*/.mono { font-family: "Inconsolata", Andale Mono, Monaco, Monospace;}.sans { font-family: "Helvetica Neue", Helvetica, Arial, Verdana, sans-serif;}.serif { font-family: "Georgia", Times New Roman, Times, serif;}a { color: #2e87dd; text-decoration: none;}a:hover { text-decoration: underline;}/* navigation*/#navBg { background-color: #f2f2f2; background-image: url("i/shadow.png"); background-position: right top; background-repeat: repeat-y; width: 220px; position: fixed; top: 0; left: 0; z-index: 0;}#nav { background-image: url("i/logo.png"); background-repeat: no-repeat; background-position: center 10px; width: 220px; float: left; margin: 0; padding: 150px 20px 0; font-size: 13px; text-shadow: 1px 1px #fff; position: relative; z-index: 1;}#nav .homeImageLink { position: absolute; display: block; top: 10px; left: 0; width: 220px; height: 138px;}#nav ul { list-style-type:none; padding: 0; margin: 21px 0 0 0;}#nav ul li { width: 100%;}#nav ul li.version { text-align: center; color: #4d4d4d;}#nav h1 { color: #4d4d4d; text-align: center; font-size: 15px; font-weight: normal; text-transform: uppercase; letter-spacing: 3px;}span.spacer { color: #2e87dd; margin: 0 3px 0 5px; background-image: url("i/dot.png"); background-repeat: repeat-x; background-position: left 13px;}/* icons*/span.icon { width: 16px; display: block; background-image: url("i/sprite.png"); background-repeat: no-repeat;}span.icon.home { background-position: center 5px;}span.icon.start { background-position: center -27px;}span.icon.download { background-position: center -59px;}span.icon.api { background-position: center -89px;}span.icon.optimize { background-position: center -119px;}span.icon.script { background-position: center -150px;}span.icon.question { background-position: center -182px;}span.icon.requirement { background-position: center -214px;}span.icon.history { background-position: center -247px;}span.icon.help { background-position: center -279px;}span.icon.blog { background-position: center -311px;}span.icon.twitter { background-position: center -343px;}span.icon.git { background-position: center -375px;}span.icon.fork { background-position: center -407px;}/* content*/#content { margin: 0 0 0 220px; padding: 0 20px; background-color: #fff; font-family: "Georgia", Times New Roman, Times, serif; position: relative;}#content p { padding: 7px 0; color: #333; font-size: 14px;}#content h1,#content h2,#content h3,#content h4,#content h5 { font-weight: normal; padding: 21px 0 7px;}#content h1 { font-size: 21px;}#content h2 { padding: 0 0 18px 0; margin: 0 0 7px 0; font-weight: normal; font-size: 21px; line-height: 24px; text-align: center; color: #222; background-image: url("i/arrow.png"); background-repeat: no-repeat; background-position: center bottom; font-family: "Inconsolata", Andale Mono, Monaco, Monospace; text-transform: uppercase; letter-spacing: 2px; text-shadow: 1px 1px 0 #fff;}#content h2 a { color: #222;}#content h2 a:hover,#content h3 a:hover,#content h4 a:hover { text-decoration: none;}span.sectionMark { display: block; color: #aaa; text-shadow: 1px 1px 0 #fff; font-size: 15px; font-family: "Inconsolata", Andale Mono, Monaco, Monospace;}#content h3 { font-size: 17px;}#content h4 { padding-top: 0; font-size: 15px;}#content h5 { font-size: 10px;}#content ul { list-style-type: disc;}#content ul,#content ol { /* border-left: 1px solid #333; */ color: #333; font-size: 14px; list-style-position: outside; margin: 7px 0 21px 0; /* padding: 0 0 0 28px; */}#content ul { font-style: italic;}#content ol { border: none; list-style-position: inside; padding: 0; font-family: "Georgia", Times New Roman, Times, serif;}#content ul ul,#content ol ol { border: none; padding: 0; margin: 0 0 0 28px;}#content .section { padding: 48px 0; background-image: url("i/line.png"); background-repeat: no-repeat; background-position: center bottom; width: 576px; margin: 0 auto;}#content .section .subSection { padding: 0 0 0 48px; margin: 28px 0 0 0; display: block; border-left: 2px solid #ddd;}#content .section:last-child { background-image: none;}#content .note { color: #222; background-color: #ffff99; padding: 5px 10px; margin: 7px 0; display: inline-block;}/* page directory*/#content #directory.section { background-color: #fff; width: 576px;}#content #directory.section ul ul ul { margin: 0 0 0 48px;}#content #directory.section ul ul li { background-image: url("i/sprite.png"); background-repeat: no-repeat; background-position: left -437px; padding-left: 18px; font-style: normal;}#content #directory h1 { padding: 0 0 65px 0; margin: 0 0 14px 0; font-weight: normal; font-size: 21px; text-align: center; text-transform: uppercase; letter-spacing: 2px; color: #222; background-image: url("i/arrow-x.png"); background-repeat: no-repeat; background-position: center bottom; font-family: "Inconsolata", Andale Mono, Monaco, Monospace;}#content ul.index { padding: 0; background-color: transparent; border: none; -moz-box-shadow: none; font-style: normal; font-family: "Inconsolata", Andale Mono, Monaco, Monospace;}#content ul.index li { width: 100%; font-size: 15px; color: #333; padding: 0 0 7px 0;}/* intro page specific*/#content #intro { width: 576px; margin: 0 auto; padding: 21px 0;}#content #intro p,#content #intro h1 { font-size: 19px; line-height: 28px; color: green; letter-spacing: 2px; padding: 0 0 28px 0;}#content #intro p:last-child,#content #intro h1:last-child { padding: 0;}#content #intro p a { color: green; text-decoration: underline;}/* download page*/#content h4 a.download { -webkit-border-radius: 5px; -moz-border-radius: 5px; background-color: #F2F2F2; background-image: url("i/sprite.png"), -moz-linear-gradient(center top , #FAFAFA 0%, #F2F2F2 100%); background-image: url("i/sprite.png"), -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa), color-stop(100%, #f2f2f2)); background-position: 7px -58px, center center; background-repeat: no-repeat, no-repeat; border: 1px solid #CCCCCC; color: #333333; font-size: 12px; margin: 0 0 0 5px; padding: 0 10px 0 25px; text-shadow: 1px 1px 0 #FFFFFF;}/* footer*/#footer { color: #4d4d4d; padding: 65px 20px 20px; margin: 20px 0 0 220px; text-align: center; display: block; font-size: 13px; background-image: url("i/arrow-x.png"); background-repeat: no-repeat; background-position: center top; background-color: #fff;}#footer .line { display: block;}#footer .line a { color: #4d4d4d; text-decoration: underline;}/* Pygments manni style*/code {background-color: #fafafa; color: #333;}code .comment {color: green; font-style: italic}code .comment.preproc {color: #099; font-style: normal}code .comment.special {font-weight: bold}code .keyword {color: #069; font-weight: bold}code .keyword.pseudo {font-weight: normal}code .keyword.type {color: #078}code .operator {color: #555}code .operator.word {color: #000; font-weight: bold}code .name.builtin {color: #366}code .name.function {color: #c0f}code .name.class {color: #0a8; font-weight: bold}code .name.namespace {color: #0cf; font-weight: bold}code .name.exception {color: #c00; font-weight: bold}code .name.variable {color: #033}code .name.constant {color: #360}code .name.label {color: #99f}code .name.entity {color: #999; font-weight: bold}code .name.attribute {color: #309}code .name.tag {color: #309; font-weight: bold}code .name.decorator {color: #99f}code .string {color: #c30}code .string.doc {font-style: italic}code .string.interpol {color: #a00}code .string.escape {color: #c30; font-weight: bold}code .string.regex {color: #3aa}code .string.symbol {color: #fc3}code .string.other {color: #c30}code .number {color: #f60}/* webkit scroll bars*/pre::-webkit-scrollbar { width: 6px; height: 6px;}pre::-webkit-scrollbar-button:start:decrement,pre::-webkit-scrollbar-button:end:increment { display: block; height: 0; width: 0;}pre::-webkit-scrollbar-button:vertical:increment,pre::-webkit-scrollbar-button:horizontal:increment { background-color: transparent; display: block; height: 0; width: 0;}pre::-webkit-scrollbar-track-piece { -webkit-border-radius: 3px;}pre::-webkit-scrollbar-thumb:vertical { background-color: #aaa; -webkit-border-radius: 3px;}pre::-webkit-scrollbar-thumb:horizontal { background-color: #aaa; -webkit-border-radius: 3px;}/* hbox*/.hbox {\tdisplay: -webkit-box;\t-webkit-box-orient: horizontal;\t-webkit-box-align: stretch;\tdisplay: -moz-box;\t-moz-box-orient: horizontal;\t-moz-box-align: stretch;\tdisplay: box;\tbox-orient: horizontal;\tbox-align: stretch;\twidth: 100%;}.hbox > * {\t-webkit-box-flex: 0;\t-moz-box-flex: 0;\tbox-flex: 0;\tdisplay: block;}.vbox {\tdisplay: -webkit-box;\t-webkit-box-orient: vertical;\t-webkit-box-align: stretch;\tdisplay: -moz-box;\t-moz-box-orient: vertical;\t-moz-box-align: stretch;\tdisplay: box;\tbox-orient: vertical;\tbox-align: stretch;}.vbox > * {\t-webkit-box-flex: 0;\t-moz-box-flex: 0;\tbox-flex: 0;\tdisplay: block;}.spacer {\t-webkit-box-flex: 1;\t-moz-box-flex: 1;\tbox-flex: 1;}.reverse {\t-webkit-box-direction: reverse;\t-moz-box-direction: reverse;\tbox-direction: reverse;}.boxFlex0 {\t-webkit-box-flex: 0;\t-moz-box-flex: 0;\tbox-flex: 0;}.boxFlex1, .boxFlex {\t-webkit-box-flex: 1;\t-moz-box-flex: 1;\tbox-flex: 1;}.boxFlex2 {\t-webkit-box-flex: 2;\t-moz-box-flex: 2;\tbox-flex: 2;}.boxGroup1 {\t-webkit-box-flex-group: 1;\t-moz-box-flex-group: 1;\tbox-flex-group: 1;}.boxGroup2 {\t-webkit-box-flex-group: 2;\t-moz-box-flex-group: 2;\tbox-flex-group: 2;}.start {\t-webkit-box-pack: start;\t-moz-box-pack: start;\tbox-pack: start;}.end {\t-webkit-box-pack: end;\t-moz-box-pack: end;\tbox-pack: end;}.center {\t-webkit-box-pack: center;\t-moz-box-pack: center;\tbox-pack: center;}/* clearfix*/.clearfix:after {\tcontent: ".";\tdisplay: block;\tclear: both;\tvisibility: hidden;\tline-height: 0;\theight: 0;}html[xmlns] .clearfix {\tdisplay: block;}* html .clearfix {\theight: 1%;}'),define("text/lib/ace/css/editor.css",[],'.ace_editor { position: absolute; overflow: hidden; font-family: Monaco, "Menlo", "Courier New", monospace; font-size: 12px;}.ace_scroller { position: absolute; overflow-x: scroll; overflow-y: hidden;}.ace_content { position: absolute; box-sizing: border-box; -moz-box-sizing: border-box; -webkit-box-sizing: border-box;}.ace_composition { position: absolute; background: #555; color: #DDD; z-index: 4;}.ace_gutter { position: absolute; overflow-x: hidden; overflow-y: hidden; height: 100%;}.ace_gutter-cell.ace_error { background-image: url("data:image/gif,GIF89a%10%00%10%00%D5%00%00%F5or%F5%87%88%F5nr%F4ns%EBmq%F5z%7F%DDJT%DEKS%DFOW%F1Yc%F2ah%CE(7%CE)8%D18E%DD%40M%F2KZ%EBU%60%F4%60m%DCir%C8%16(%C8%19*%CE%255%F1%3FR%F1%3FS%E6%AB%B5%CA%5DI%CEn%5E%F7%A2%9A%C9G%3E%E0a%5B%F7%89%85%F5yy%F6%82%80%ED%82%80%FF%BF%BF%E3%C4%C4%FF%FF%FF%FF%FF%FF%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00!%F9%04%01%00%00%25%00%2C%00%00%00%00%10%00%10%00%00%06p%C0%92pH%2C%1A%8F%C8%D2H%93%E1d4%23%E4%88%D3%09mB%1DN%B48%F5%90%40%60%92G%5B%94%20%3E%22%D2%87%24%FA%20%24%C5%06A%00%20%B1%07%02B%A38%89X.v%17%82%11%13q%10%0Fi%24%0F%8B%10%7BD%12%0Ei%09%92%09%0EpD%18%15%24%0A%9Ci%05%0C%18F%18%0B%07%04%01%04%06%A0H%18%12%0D%14%0D%12%A1I%B3%B4%B5IA%00%3B"); background-repeat: no-repeat; background-position: 4px center;}.ace_gutter-cell.ace_warning { background-image: url("data:image/gif,GIF89a%10%00%10%00%D5%00%00%FF%DBr%FF%DE%81%FF%E2%8D%FF%E2%8F%FF%E4%96%FF%E3%97%FF%E5%9D%FF%E6%9E%FF%EE%C1%FF%C8Z%FF%CDk%FF%D0s%FF%D4%81%FF%D5%82%FF%D5%83%FF%DC%97%FF%DE%9D%FF%E7%B8%FF%CCl%7BQ%13%80U%15%82W%16%81U%16%89%5B%18%87%5B%18%8C%5E%1A%94d%1D%C5%83-%C9%87%2F%C6%84.%C6%85.%CD%8B2%C9%871%CB%8A3%CD%8B5%DC%98%3F%DF%9BB%E0%9CC%E1%A5U%CB%871%CF%8B5%D1%8D6%DB%97%40%DF%9AB%DD%99B%E3%B0p%E7%CC%AE%FF%FF%FF%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00!%F9%04%01%00%00%2F%00%2C%00%00%00%00%10%00%10%00%00%06a%C0%97pH%2C%1A%8FH%A1%ABTr%25%87%2B%04%82%F4%7C%B9X%91%08%CB%99%1C!%26%13%84*iJ9(%15G%CA%84%14%01%1A%97%0C%03%80%3A%9A%3E%81%84%3E%11%08%B1%8B%20%02%12%0F%18%1A%0F%0A%03\'F%1C%04%0B%10%16%18%10%0B%05%1CF%1D-%06%07%9A%9A-%1EG%1B%A0%A1%A0U%A4%A5%A6BA%00%3B"); background-repeat: no-repeat; background-position: 4px center;}.ace_editor .ace_sb { position: absolute; overflow-x: hidden; overflow-y: scroll; right: 0;}.ace_editor .ace_sb div { position: absolute; width: 1px; left: 0;}.ace_editor .ace_print_margin_layer { z-index: 0; position: absolute; overflow: hidden; margin: 0; left: 0; height: 100%; width: 100%;}.ace_editor .ace_print_margin { position: absolute; height: 100%;}.ace_editor textarea { position: fixed; z-index: -1; width: 10px; height: 30px; opacity: 0; background: transparent; appearance: none; -moz-appearance: none; border: none; resize: none; outline: none; overflow: hidden;}.ace_layer { z-index: 1; position: absolute; overflow: hidden; white-space: nowrap; height: 100%; width: 100%;}.ace_text-layer { color: black;}.ace_cjk { display: inline-block; text-align: center;}.ace_cursor-layer { z-index: 4; cursor: text; /* setting pointer-events: none; here will break mouse wheel scrolling in Safari */}.ace_cursor { z-index: 4; position: absolute;}.ace_cursor.ace_hidden { opacity: 0.2;}.ace_line { white-space: nowrap;}.ace_marker-layer { cursor: text; pointer-events: none;}.ace_marker-layer .ace_step { position: absolute; z-index: 3;}.ace_marker-layer .ace_selection { position: absolute; z-index: 4;}.ace_marker-layer .ace_bracket { position: absolute; z-index: 5;}.ace_marker-layer .ace_active_line { position: absolute; z-index: 2;}.ace_marker-layer .ace_selected_word { position: absolute; z-index: 6; box-sizing: border-box; -moz-box-sizing: border-box; -webkit-box-sizing: border-box;}.ace_line .ace_fold { cursor: pointer;}.ace_dragging .ace_marker-layer, .ace_dragging .ace_text-layer { cursor: move;}'),define("text/node_modules/uglify-js/docstyle.css",[],'html { font-family: "Lucida Grande","Trebuchet MS",sans-serif; font-size: 12pt; }body { max-width: 60em; }.title { text-align: center; }.todo { color: red; }.done { color: green; }.tag { background-color:lightblue; font-weight:normal }.target { }.timestamp { color: grey }.timestamp-kwd { color: CadetBlue }p.verse { margin-left: 3% }pre { border: 1pt solid #AEBDCC; background-color: #F3F5F7; padding: 5pt; font-family: monospace; font-size: 90%; overflow:auto;}pre.src { background-color: #eee; color: #112; border: 1px solid #000;}table { border-collapse: collapse; }td, th { vertical-align: top; }dt { font-weight: bold; }div.figure { padding: 0.5em; }div.figure p { text-align: center; }.linenr { font-size:smaller }.code-highlighted {background-color:#ffff00;}.org-info-js_info-navigation { border-style:none; }#org-info-js_console-label { font-size:10px; font-weight:bold; white-space:nowrap; }.org-info-js_search-highlight {background-color:#ffff00; color:#000000; font-weight:bold; }sup { vertical-align: baseline; position: relative; top: -0.5em; font-size: 80%;}sup a:link, sup a:visited { text-decoration: none; color: #c00;}sup a:before { content: "["; color: #999; }sup a:after { content: "]"; color: #999; }h1.title { border-bottom: 4px solid #000; padding-bottom: 5px; margin-bottom: 2em; }#postamble { color: #777; font-size: 90%; padding-top: 1em; padding-bottom: 1em; border-top: 1px solid #999; margin-top: 2em; padding-left: 2em; padding-right: 2em; text-align: right;}#postamble p { margin: 0; }#footnotes { border-top: 1px solid #000; }h1 { font-size: 200% }h2 { font-size: 175% }h3 { font-size: 150% }h4 { font-size: 125% }h1, h2, h3, h4 { font-family: "Bookman",Georgia,"Times New Roman",serif; font-weight: normal; }@media print { html { font-size: 11pt; }}'),define("text/support/cockpit/lib/cockpit/ui/cli_view.css",[],"#cockpitInput { padding-left: 16px; }.cptOutput { overflow: auto; position: absolute; z-index: 999; display: none; }.cptCompletion { padding: 0; position: absolute; z-index: -1000; }.cptCompletion.VALID { background: #FFF; }.cptCompletion.INCOMPLETE { background: #DDD; }.cptCompletion.INVALID { background: #DDD; }.cptCompletion span { color: #FFF; }.cptCompletion span.INCOMPLETE { color: #DDD; border-bottom: 2px dotted #F80; }.cptCompletion span.INVALID { color: #DDD; border-bottom: 2px dotted #F00; }span.cptPrompt { color: #66F; font-weight: bold; }.cptHints { color: #000; position: absolute; border: 1px solid rgba(230, 230, 230, 0.8); background: rgba(250, 250, 250, 0.8); -moz-border-radius-topleft: 10px; -moz-border-radius-topright: 10px; border-top-left-radius: 10px; border-top-right-radius: 10px; z-index: 1000; padding: 8px; display: none;}.cptFocusPopup { display: block; }.cptFocusPopup.cptNoPopup { display: none; }.cptHints ul { margin: 0; padding: 0 15px; }.cptGt { font-weight: bold; font-size: 120%; }"),define("text/support/cockpit/lib/cockpit/ui/request_view.css",[],".cptRowIn { display: box; display: -moz-box; display: -webkit-box; box-orient: horizontal; -moz-box-orient: horizontal; -webkit-box-orient: horizontal; box-align: center; -moz-box-align: center; -webkit-box-align: center; color: #333; background-color: #EEE; width: 100%; font-family: consolas, courier, monospace;}.cptRowIn > * { padding-left: 2px; padding-right: 2px; }.cptRowIn > img { cursor: pointer; }.cptHover { display: none; }.cptRowIn:hover > .cptHover { display: block; }.cptRowIn:hover > .cptHover.cptHidden { display: none; }.cptOutTyped { box-flex: 1; -moz-box-flex: 1; -webkit-box-flex: 1; font-weight: bold; color: #000; font-size: 120%;}.cptRowOutput { padding-left: 10px; line-height: 1.2em; }.cptRowOutput strong,.cptRowOutput b,.cptRowOutput th,.cptRowOutput h1,.cptRowOutput h2,.cptRowOutput h3 { color: #000; }.cptRowOutput a { font-weight: bold; color: #666; text-decoration: none; }.cptRowOutput a: hover { text-decoration: underline; cursor: pointer; }.cptRowOutput input[type=password],.cptRowOutput input[type=text],.cptRowOutput textarea { color: #000; font-size: 120%; background: transparent; padding: 3px; border-radius: 5px; -moz-border-radius: 5px; -webkit-border-radius: 5px;}.cptRowOutput table,.cptRowOutput td,.cptRowOutput th { border: 0; padding: 0 2px; }.cptRowOutput .right { text-align: right; }"),define("text/tool/Theme.tmpl.css",[],".%cssClass% .ace_editor { border: 2px solid rgb(159, 159, 159);}.%cssClass% .ace_editor.ace_focus { border: 2px solid #327fbd;}.%cssClass% .ace_gutter { width: 50px; background: #e8e8e8; color: #333; overflow : hidden;}.%cssClass% .ace_gutter-layer { width: 100%; text-align: right;}.%cssClass% .ace_gutter-layer .ace_gutter-cell { padding-right: 6px;}.%cssClass% .ace_print_margin { width: 1px; background: %printMargin%;}.%cssClass% .ace_scroller { background-color: %background%;}.%cssClass% .ace_text-layer { cursor: text; color: %foreground%;}.%cssClass% .ace_cursor { border-left: 2px solid %cursor%;}.%cssClass% .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid %overwrite%;} .%cssClass% .ace_marker-layer .ace_selection { background: %selection%;}.%cssClass% .ace_marker-layer .ace_step { background: %step%;}.%cssClass% .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid %bracket%;}.%cssClass% .ace_marker-layer .ace_active_line { background: %active_line%;} .%cssClass% .ace_invisible { %invisible%}.%cssClass% .ace_keyword { %keyword%}.%cssClass% .ace_keyword.ace_operator { %keyword.operator%}.%cssClass% .ace_constant { %constant%}.%cssClass% .ace_constant.ace_language { %constant.language%}.%cssClass% .ace_constant.ace_library { %constant.library%}.%cssClass% .ace_constant.ace_numeric { %constant.numeric%}.%cssClass% .ace_invalid { %invalid%}.%cssClass% .ace_invalid.ace_illegal { %invalid.illegal%}.%cssClass% .ace_invalid.ace_deprecated { %invalid.deprecated%}.%cssClass% .ace_support { %support%}.%cssClass% .ace_support.ace_function { %support.function%}.%cssClass% .ace_function.ace_buildin { %function.buildin%}.%cssClass% .ace_string { %string%}.%cssClass% .ace_string.ace_regexp { %string.regexp%}.%cssClass% .ace_comment { %comment%}.%cssClass% .ace_comment.ace_doc { %comment.doc%}.%cssClass% .ace_comment.ace_doc.ace_tag { %comment.doc.tag%}.%cssClass% .ace_variable { %variable%}.%cssClass% .ace_variable.ace_language { %variable.language%}.%cssClass% .ace_xml_pe { %xml_pe%}.%cssClass% .ace_collab.ace_user1 { %collab.user1% }"),define("text/styles.css",[],"html { height: 100%; width: 100%; overflow: hidden;}body { overflow: hidden; margin: 0; padding: 0; height: 100%; width: 100%; font-family: Arial, Helvetica, sans-serif, Tahoma, Verdana, sans-serif; font-size: 12px; background: rgb(14, 98, 165); color: white;}#logo { padding: 15px; margin-left: 65px;}#editor { position: absolute; top: 0px; left: 280px; bottom: 0px; right: 0px; background: white;}#controls { padding: 5px;}#controls td { text-align: right;}#controls td + td { text-align: left;}#cockpitInput { position: absolute; left: 280px; right: 0px; bottom: 0; border: none; outline: none; font-family: consolas, courier, monospace; font-size: 120%;}#cockpitOutput { padding: 10px; margin: 0 15px; border: 1px solid #AAA; -moz-border-radius-topleft: 10px; -moz-border-radius-topright: 10px; border-top-left-radius: 4px; border-top-right-radius: 4px; background: #DDD; color: #000;}"),require(["ace/ace"],function(a){window.ace=a}) \ No newline at end of file
+(function(){function g(a){var e=function(a,b){return d("",a,b)};e.packaged=!0;var f=b;a&&(b[a]||(b[a]={}),f=b[a]),f.define&&(c.original=f.define),f.define=c,f.require&&(d.original=f.require),f.require=e}var a="",b=function(){return this}();if(typeof requirejs!="undefined")return;var c=function(a,b,d){if(typeof a!="string"){c.original?c.original.apply(window,arguments):(console.error("dropping module because define wasn't a string."),console.trace());return}arguments.length==2&&(d=b),c.modules||(c.modules={}),c.modules[a]=d},d=function(a,b,c){if(Object.prototype.toString.call(b)==="[object Array]"){var e=[];for(var g=0,h=b.length;g<h;++g){var i=f(a,b[g]);if(!i&&d.original)return d.original.apply(window,arguments);e.push(i)}c&&c.apply(null,e)}else{if(typeof b=="string"){var j=f(a,b);return!j&&d.original?d.original.apply(window,arguments):(c&&c(),j)}if(d.original)return d.original.apply(window,arguments)}},e=function(a,b){if(b.indexOf("!")!==-1){var c=b.split("!");return e(a,c[0])+"!"+e(a,c[1])}if(b.charAt(0)=="."){var d=a.split("/").slice(0,-1).join("/");b=d+"/"+b;while(b.indexOf(".")!==-1&&f!=b){var f=b;b=b.replace(/\/\.\//,"/").replace(/[^\/]+\/\.\.\//,"")}}return b},f=function(a,b){b=e(a,b);var f=c.modules[b];if(!f)return null;if(typeof f=="function"){var g={},h={id:b,uri:"",exports:g,packaged:!0},i=function(a,c){return d(b,a,c)},j=f(i,g,h);return g=j||h.exports,c.modules[b]=g,g}return f};g(a)})(),define("ace/ace",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/dom","ace/lib/event","ace/editor","ace/edit_session","ace/undomanager","ace/virtual_renderer","ace/theme/textmate"],function(a,b,c){"use strict",a("./lib/fixoldbrowsers");var d=a("./lib/dom"),e=a("./lib/event"),f=a("./editor").Editor,g=a("./edit_session").EditSession,h=a("./undomanager").UndoManager,i=a("./virtual_renderer").VirtualRenderer;b.edit=function(b){typeof b=="string"&&(b=document.getElementById(b));var c=new g(d.getInnerText(b));c.setUndoManager(new h),b.innerHTML="";var j=new f(new i(b,a("./theme/textmate")));j.setSession(c);var k={};return k.document=c,k.editor=j,j.resize(),e.addListener(window,"resize",function(){j.resize()}),b.env=k,j.env=k,j}}),define("ace/lib/fixoldbrowsers",["require","exports","module","ace/lib/regexp","ace/lib/es5-shim"],function(a,b,c){"use strict",a("./regexp"),a("./es5-shim")}),define("ace/lib/regexp",["require","exports","module"],function(a,b,c){function g(a){return(a.global?"g":"")+(a.ignoreCase?"i":"")+(a.multiline?"m":"")+(a.extended?"x":"")+(a.sticky?"y":"")}function h(a,b,c){if(Array.prototype.indexOf)return a.indexOf(b,c);for(var d=c||0;d<a.length;d++)if(a[d]===b)return d;return-1}"use strict";var d={exec:RegExp.prototype.exec,test:RegExp.prototype.test,match:String.prototype.match,replace:String.prototype.replace,split:String.prototype.split},e=d.exec.call(/()??/,"")[1]===undefined,f=function(){var a=/^/g;return d.test.call(a,""),!a.lastIndex}();RegExp.prototype.exec=function(a){var b=d.exec.apply(this,arguments),c,i;if(b){!e&&b.length>1&&h(b,"")>-1&&(i=RegExp(this.source,d.replace.call(g(this),"g","")),d.replace.call(a.slice(b.index),i,function(){for(var a=1;a<arguments.length-2;a++)arguments[a]===undefined&&(b[a]=undefined)}));if(this._xregexp&&this._xregexp.captureNames)for(var j=1;j<b.length;j++)c=this._xregexp.captureNames[j-1],c&&(b[c]=b[j]);!f&&this.global&&!b[0].length&&this.lastIndex>b.index&&this.lastIndex--}return b},f||(RegExp.prototype.test=function(a){var b=d.exec.call(this,a);return b&&this.global&&!b[0].length&&this.lastIndex>b.index&&this.lastIndex--,!!b})}),define("ace/lib/es5-shim",["require","exports","module"],function(a,b,c){function p(a){try{return Object.defineProperty(a,"sentinel",{}),"sentinel"in a}catch(b){}}Function.prototype.bind||(Function.prototype.bind=function(a){var b=this;if(typeof b!="function")throw new TypeError;var c=g.call(arguments,1),d=function(){if(this instanceof d){var e=function(){};e.prototype=b.prototype;var f=new e,h=b.apply(f,c.concat(g.call(arguments)));return h!==null&&Object(h)===h?h:f}return b.apply(a,c.concat(g.call(arguments)))};return d});var d=Function.prototype.call,e=Array.prototype,f=Object.prototype,g=e.slice,h=d.bind(f.toString),i=d.bind(f.hasOwnProperty),j,k,l,m,n;if(n=i(f,"__defineGetter__"))j=d.bind(f.__defineGetter__),k=d.bind(f.__defineSetter__),l=d.bind(f.__lookupGetter__),m=d.bind(f.__lookupSetter__);Array.isArray||(Array.isArray=function(a){return h(a)=="[object Array]"}),Array.prototype.forEach||(Array.prototype.forEach=function(a){var b=G(this),c=arguments[1],d=0,e=b.length>>>0;if(h(a)!="[object Function]")throw new TypeError;while(d<e)d in b&&a.call(c,b[d],d,b),d++}),Array.prototype.map||(Array.prototype.map=function(a){var b=G(this),c=b.length>>>0,d=Array(c),e=arguments[1];if(h(a)!="[object Function]")throw new TypeError;for(var f=0;f<c;f++)f in b&&(d[f]=a.call(e,b[f],f,b));return d}),Array.prototype.filter||(Array.prototype.filter=function(a){var b=G(this),c=b.length>>>0,d=[],e=arguments[1];if(h(a)!="[object Function]")throw new TypeError;for(var f=0;f<c;f++)f in b&&a.call(e,b[f],f,b)&&d.push(b[f]);return d}),Array.prototype.every||(Array.prototype.every=function(a){var b=G(this),c=b.length>>>0,d=arguments[1];if(h(a)!="[object Function]")throw new TypeError;for(var e=0;e<c;e++)if(e in b&&!a.call(d,b[e],e,b))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(a){var b=G(this),c=b.length>>>0,d=arguments[1];if(h(a)!="[object Function]")throw new TypeError;for(var e=0;e<c;e++)if(e in b&&a.call(d,b[e],e,b))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(a){var b=G(this),c=b.length>>>0;if(h(a)!="[object Function]")throw new TypeError;if(!c&&arguments.length==1)throw new TypeError;var d=0,e;if(arguments.length>=2)e=arguments[1];else do{if(d in b){e=b[d++];break}if(++d>=c)throw new TypeError}while(!0);for(;d<c;d++)d in b&&(e=a.call(void 0,e,b[d],d,b));return e}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(a){var b=G(this),c=b.length>>>0;if(h(a)!="[object Function]")throw new TypeError;if(!c&&arguments.length==1)throw new TypeError;var d,e=c-1;if(arguments.length>=2)d=arguments[1];else do{if(e in b){d=b[e--];break}if(--e<0)throw new TypeError}while(!0);do e in this&&(d=a.call(void 0,d,b[e],e,b));while(e--);return d}),Array.prototype.indexOf||(Array.prototype.indexOf=function(a){var b=G(this),c=b.length>>>0;if(!c)return-1;var d=0;arguments.length>1&&(d=E(arguments[1])),d=d>=0?d:Math.max(0,c+d);for(;d<c;d++)if(d in b&&b[d]===a)return d;return-1}),Array.prototype.lastIndexOf||(Array.prototype.lastIndexOf=function(a){var b=G(this),c=b.length>>>0;if(!c)return-1;var d=c-1;arguments.length>1&&(d=Math.min(d,E(arguments[1]))),d=d>=0?d:c-Math.abs(d);for(;d>=0;d--)if(d in b&&a===b[d])return d;return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(a){return a.__proto__||(a.constructor?a.constructor.prototype:f)});if(!Object.getOwnPropertyDescriptor){var o="Object.getOwnPropertyDescriptor called on a non-object: ";Object.getOwnPropertyDescriptor=function(a,b){if(typeof a!="object"&&typeof a!="function"||a===null)throw new TypeError(o+a);if(!i(a,b))return;var c,d,e;c={enumerable:!0,configurable:!0};if(n){var g=a.__proto__;a.__proto__=f;var d=l(a,b),e=m(a,b);a.__proto__=g;if(d||e)return d&&(c.get=d),e&&(c.set=e),c}return c.value=a[b],c}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(a){return Object.keys(a)}),Object.create||(Object.create=function(a,b){var c;if(a===null)c={"__proto__":null};else{if(typeof a!="object")throw new TypeError("typeof prototype["+typeof a+"] != 'object'");var d=function(){};d.prototype=a,c=new d,c.__proto__=a}return b!==void 0&&Object.defineProperties(c,b),c});if(Object.defineProperty){var q=p({}),r=typeof document=="undefined"||p(document.createElement("div"));if(!q||!r)var s=Object.defineProperty}if(!Object.defineProperty||s){var t="Property description must be an object: ",u="Object.defineProperty called on non-object: ",v="getters & setters can not be defined on this javascript engine";Object.defineProperty=function(a,b,c){if(typeof a!="object"&&typeof a!="function"||a===null)throw new TypeError(u+a);if(typeof c!="object"&&typeof c!="function"||c===null)throw new TypeError(t+c);if(s)try{return s.call(Object,a,b,c)}catch(d){}if(i(c,"value"))if(n&&(l(a,b)||m(a,b))){var e=a.__proto__;a.__proto__=f,delete a[b],a[b]=c.value,a.__proto__=e}else a[b]=c.value;else{if(!n)throw new TypeError(v);i(c,"get")&&j(a,b,c.get),i(c,"set")&&k(a,b,c.set)}return a}}Object.defineProperties||(Object.defineProperties=function(a,b){for(var c in b)i(b,c)&&Object.defineProperty(a,c,b[c]);return a}),Object.seal||(Object.seal=function(a){return a}),Object.freeze||(Object.freeze=function(a){return a});try{Object.freeze(function(){})}catch(w){Object.freeze=function(a){return function b(b){return typeof b=="function"?b:a(b)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(a){return a}),Object.isSealed||(Object.isSealed=function(a){return!1}),Object.isFrozen||(Object.isFrozen=function(a){return!1}),Object.isExtensible||(Object.isExtensible=function(a){if(Object(a)===a)throw new TypeError;var b="";while(i(a,b))b+="?";a[b]=!0;var c=i(a,b);return delete a[b],c});if(!Object.keys){var x=!0,y=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],z=y.length;for(var A in{toString:null})x=!1;Object.keys=function bd(a){if(typeof a!="object"&&typeof a!="function"||a===null)throw new TypeError("Object.keys called on a non-object");var bd=[];for(var b in a)i(a,b)&&bd.push(b);if(x)for(var c=0,d=z;c<d;c++){var e=y[c];i(a,e)&&bd.push(e)}return bd}}if(!Date.prototype.toISOString||(new Date(-621987552e5)).toISOString().indexOf("-000001")===-1)Date.prototype.toISOString=function(){var a,b,c,d;if(!isFinite(this))throw new RangeError;a=[this.getUTCMonth()+1,this.getUTCDate(),this.getUTCHours(),this.getUTCMinutes(),this.getUTCSeconds()],d=this.getUTCFullYear(),d=(d<0?"-":d>9999?"+":"")+("00000"+Math.abs(d)).slice(0<=d&&d<=9999?-4:-6),b=a.length;while(b--)c=a[b],c<10&&(a[b]="0"+c);return d+"-"+a.slice(0,2).join("-")+"T"+a.slice(2).join(":")+"."+("000"+this.getUTCMilliseconds()).slice(-3)+"Z"};Date.now||(Date.now=function(){return(new Date).getTime()}),Date.prototype.toJSON||(Date.prototype.toJSON=function(a){if(typeof this.toISOString!="function")throw new TypeError;return this.toISOString()}),Date.parse("+275760-09-13T00:00:00.000Z")!==864e13&&(Date=function(a){var b=function e(b,c,d,f,g,h,i){var j=arguments.length;if(this instanceof a){var k=j==1&&String(b)===b?new a(e.parse(b)):j>=7?new a(b,c,d,f,g,h,i):j>=6?new a(b,c,d,f,g,h):j>=5?new a(b,c,d,f,g):j>=4?new a(b,c,d,f):j>=3?new a(b,c,d):j>=2?new a(b,c):j>=1?new a(b):new a;return k.constructor=e,k}return a.apply(this,arguments)},c=new RegExp("^(\\d{4}|[+-]\\d{6})(?:-(\\d{2})(?:-(\\d{2})(?:T(\\d{2}):(\\d{2})(?::(\\d{2})(?:\\.(\\d{3}))?)?(?:Z|(?:([-+])(\\d{2}):(\\d{2})))?)?)?)?$");for(var d in a)b[d]=a[d];return b.now=a.now,b.UTC=a.UTC,b.prototype=a.prototype,b.prototype.constructor=b,b.parse=function f(b){var d=c.exec(b);if(d){d.shift();for(var e=1;e<7;e++)d[e]=+(d[e]||(e<3?1:0)),e==1&&d[e]--;var f=+d.pop(),g=+d.pop(),h=d.pop(),i=0;if(h){if(g>23||f>59)return NaN;i=(g*60+f)*6e4*(h=="+"?-1:1)}var j=+d[0];return 0<=j&&j<=99?(d[0]=j+400,a.UTC.apply(this,d)+i-126227808e5):a.UTC.apply(this,d)+i}return a.parse.apply(this,arguments)},b}(Date));var B="\t\n \f\r   ᠎              \u2028\u2029";if(!String.prototype.trim||B.trim()){B="["+B+"]";var C=new RegExp("^"+B+B+"*"),D=new RegExp(B+B+"*$");String.prototype.trim=function(){return String(this).replace(C,"").replace(D,"")}}var E=function(a){return a=+a,a!==a?a=0:a!==0&&a!==1/0&&a!==-Infinity&&(a=(a>0||-1)*Math.floor(Math.abs(a))),a},F="a"[0]!="a",G=function(a){if(a==null)throw new TypeError;return F&&typeof a=="string"&&a?a.split(""):Object(a)}}),define("ace/lib/dom",["require","exports","module"],function(a,b,c){"use strict";var d="http://www.w3.org/1999/xhtml";b.createElement=function(a,b){return document.createElementNS?document.createElementNS(b||d,a):document.createElement(a)},b.setText=function(a,b){a.innerText!==undefined&&(a.innerText=b),a.textContent!==undefined&&(a.textContent=b)},b.hasCssClass=function(a,b){var c=a.className.split(/\s+/g);return c.indexOf(b)!==-1},b.addCssClass=function(a,c){b.hasCssClass(a,c)||(a.className+=" "+c)},b.removeCssClass=function(a,b){var c=a.className.split(/\s+/g);for(;;){var d=c.indexOf(b);if(d==-1)break;c.splice(d,1)}a.className=c.join(" ")},b.toggleCssClass=function(a,b){var c=a.className.split(/\s+/g),d=!0;for(;;){var e=c.indexOf(b);if(e==-1)break;d=!1,c.splice(e,1)}return d&&c.push(b),a.className=c.join(" "),d},b.setCssClass=function(a,c,d){d?b.addCssClass(a,c):b.removeCssClass(a,c)},b.hasCssString=function(a,b){var c=0,d;b=b||document;if(b.createStyleSheet&&(d=b.styleSheets)){while(c<d.length)if(d[c++].title===a)return!0}else if(d=b.getElementsByTagName("style"))while(c<d.length)if(d[c++].id===a)return!0;return!1},b.importCssString=function e(a,c,e){e=e||document;if(c&&b.hasCssString(c,e))return null;var f;if(e.createStyleSheet)f=e.createStyleSheet(),f.cssText=a,c&&(f.title=c);else{f=e.createElementNS?e.createElementNS(d,"style"):e.createElement("style"),f.appendChild(e.createTextNode(a)),c&&(f.id=c);var g=e.getElementsByTagName("head")[0]||e.documentElement;g.appendChild(f)}},b.importCssStylsheet=function(a,c){if(c.createStyleSheet)c.createStyleSheet(a);else{var d=b.createElement("link");d.rel="stylesheet",d.href=a;var e=c.getElementsByTagName("head")[0]||c.documentElement;e.appendChild(d)}},b.getInnerWidth=function(a){return parseInt(b.computedStyle(a,"paddingLeft"),10)+parseInt(b.computedStyle(a,"paddingRight"),10)+a.clientWidth},b.getInnerHeight=function(a){return parseInt(b.computedStyle(a,"paddingTop"),10)+parseInt(b.computedStyle(a,"paddingBottom"),10)+a.clientHeight},window.pageYOffset!==undefined?(b.getPageScrollTop=function(){return window.pageYOffset},b.getPageScrollLeft=function(){return window.pageXOffset}):(b.getPageScrollTop=function(){return document.body.scrollTop},b.getPageScrollLeft=function(){return document.body.scrollLeft}),window.getComputedStyle?b.computedStyle=function(a,b){return b?(window.getComputedStyle(a,"")||{})[b]||"":window.getComputedStyle(a,"")||{}}:b.computedStyle=function(a,b){return b?a.currentStyle[b]:a.currentStyle},b.scrollbarWidth=function(a){var c=b.createElement("p");c.style.width="100%",c.style.minWidth="0px",c.style.height="200px";var d=b.createElement("div"),e=d.style;e.position="absolute",e.left="-10000px",e.overflow="hidden",e.width="200px",e.minWidth="0px",e.height="150px",d.appendChild(c);var f=a.body||a.documentElement;f.appendChild(d);var g=c.offsetWidth;e.overflow="scroll";var h=c.offsetWidth;return g==h&&(h=d.clientWidth),f.removeChild(d),g-h},b.setInnerHtml=function(a,b){var c=a.cloneNode(!1);return c.innerHTML=b,a.parentNode.replaceChild(c,a),c},b.setInnerText=function(a,b){var c=a.ownerDocument;c.body&&"textContent"in c.body?a.textContent=b:a.innerText=b},b.getInnerText=function(a){var b=a.ownerDocument;return b.body&&"textContent"in b.body?a.textContent:a.innerText||a.textContent||""},b.getParentWindow=function(a){return a.defaultView||a.parentWindow}}),define("ace/lib/event",["require","exports","module","ace/lib/keys","ace/lib/useragent","ace/lib/dom"],function(a,b,c){function g(a,b,c){var f=0;e.isOpera&&e.isMac?f=0|(b.metaKey?1:0)|(b.altKey?2:0)|(b.shiftKey?4:0)|(b.ctrlKey?8:0):f=0|(b.ctrlKey?1:0)|(b.altKey?2:0)|(b.shiftKey?4:0)|(b.metaKey?8:0);if(c in d.MODIFIER_KEYS){switch(d.MODIFIER_KEYS[c]){case"Alt":f=2;break;case"Shift":f=4;break;case"Ctrl":f=1;break;default:f=8}c=0}return f&8&&(c==91||c==93)&&(c=0),!!f||c in d.FUNCTION_KEYS||c in d.PRINTABLE_KEYS?a(b,f,c):!1}"use strict";var d=a("./keys"),e=a("./useragent"),f=a("./dom");b.addListener=function(a,b,c){if(a.addEventListener)return a.addEventListener(b,c,!1);if(a.attachEvent){var d=function(){c(window.event)};c._wrapper=d,a.attachEvent("on"+b,d)}},b.removeListener=function(a,b,c){if(a.removeEventListener)return a.removeEventListener(b,c,!1);a.detachEvent&&a.detachEvent("on"+b,c._wrapper||c)},b.stopEvent=function(a){return b.stopPropagation(a),b.preventDefault(a),!1},b.stopPropagation=function(a){a.stopPropagation?a.stopPropagation():a.cancelBubble=!0},b.preventDefault=function(a){a.preventDefault?a.preventDefault():a.returnValue=!1},b.getDocumentX=function(a){return a.clientX?a.clientX+f.getPageScrollLeft():a.pageX},b.getDocumentY=function(a){return a.clientY?a.clientY+f.getPageScrollTop():a.pageY},b.getButton=function(a){return a.type=="dblclick"?0:a.type=="contextmenu"?2:a.preventDefault?a.button:{1:0,2:2,4:1}[a.button]},document.documentElement.setCapture?b.capture=function(a,c,d){function e(a){return c(a),b.stopPropagation(a)}function g(e){c(e),f||(f=!0,d(e)),b.removeListener(a,"mousemove",c),b.removeListener(a,"mouseup",g),b.removeListener(a,"losecapture",g),a.releaseCapture()}var f=!1;b.addListener(a,"mousemove",c),b.addListener(a,"mouseup",g),b.addListener(a,"losecapture",g),a.setCapture()}:b.capture=function(a,b,c){function d(a){b(a),a.stopPropagation()}function e(a){b&&b(a),c&&c(a),document.removeEventListener("mousemove",d,!0),document.removeEventListener("mouseup",e,!0),a.stopPropagation()}document.addEventListener("mousemove",d,!0),document.addEventListener("mouseup",e,!0)},b.addMouseWheelListener=function(a,c){var d=0,e=function(a){if(a.wheelDelta!==undefined){Math.abs(a.wheelDeltaY)>d&&(d=Math.abs(a.wheelDeltaY));if(d>5e3)var b=400;else var b=8;a.wheelDeltaX!==undefined?(a.wheelX=-a.wheelDeltaX/b,a.wheelY=-a.wheelDeltaY/b):(a.wheelX=0,a.wheelY=-a.wheelDelta/b)}else a.axis&&a.axis==a.HORIZONTAL_AXIS?(a.wheelX=(a.detail||0)*5,a.wheelY=0):(a.wheelX=0,a.wheelY=(a.detail||0)*5);c(a)};b.addListener(a,"DOMMouseScroll",e),b.addListener(a,"mousewheel",e)},b.addMultiMouseDownListener=function(a,c,d,f,g){var h=0,i,j,k=function(a){h+=1,h==1&&(i=a.clientX,j=a.clientY,setTimeout(function(){h=0},f||600));var e=b.getButton(a)==c;if(!e||Math.abs(a.clientX-i)>5||Math.abs(a.clientY-j)>5)h=0;h==d&&(h=0,g(a));if(e)return b.preventDefault(a)};b.addListener(a,"mousedown",k),e.isOldIE&&b.addListener(a,"dblclick",k)},b.addCommandKeyListener=function(a,c){var d=b.addListener;if(e.isOldGecko){var f=null;d(a,"keydown",function(a){f=a.keyCode}),d(a,"keypress",function(a){return g(c,a,f)})}else{var h=null;d(a,"keydown",function(a){return h=a.keyIdentifier||a.keyCode,g(c,a,a.keyCode)}),e.isMac&&e.isOpera&&d(a,"keypress",function(a){var b=a.keyIdentifier||a.keyCode;if(h!==b)return g(c,a,h);h=null})}};if(window.postMessage){var h=1;b.nextTick=function(a,c){c=c||window;var d="zero-timeout-message-"+h;b.addListener(c,"message",function e(f){f.data==d&&(b.stopPropagation(f),b.removeListener(c,"message",e),a())}),c.postMessage(d,"*")}}else b.nextTick=function(a,b){b=b||window,window.setTimeout(a,0)}}),define("ace/lib/keys",["require","exports","module","ace/lib/oop"],function(a,b,c){"use strict";var d=a("./oop"),e=function(){var a={MODIFIER_KEYS:{16:"Shift",17:"Ctrl",18:"Alt",224:"Meta"},KEY_MODS:{ctrl:1,alt:2,option:2,shift:4,meta:8,command:8},FUNCTION_KEYS:{8:"Backspace",9:"Tab",13:"Return",19:"Pause",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"Left",38:"Up",39:"Right",40:"Down",44:"Print",45:"Insert",46:"Delete",96:"Numpad0",97:"Numpad1",98:"Numpad2",99:"Numpad3",100:"Numpad4",101:"Numpad5",102:"Numpad6",103:"Numpad7",104:"Numpad8",105:"Numpad9",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"Numlock",145:"Scrolllock"},PRINTABLE_KEYS:{32:" ",48:"0",49:"1",50:"2",51:"3",52:"4",53:"5",54:"6",55:"7",56:"8",57:"9",59:";",61:"=",65:"a",66:"b",67:"c",68:"d",69:"e",70:"f",71:"g",72:"h",73:"i",74:"j",75:"k",76:"l",77:"m",78:"n",79:"o",80:"p",81:"q",82:"r",83:"s",84:"t",85:"u",86:"v",87:"w",88:"x",89:"y",90:"z",107:"+",109:"-",110:".",188:",",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:'"'}};for(var b in a.FUNCTION_KEYS){var c=a.FUNCTION_KEYS[b].toUpperCase();a[c]=parseInt(b,10)}return d.mixin(a,a.MODIFIER_KEYS),d.mixin(a,a.PRINTABLE_KEYS),d.mixin(a,a.FUNCTION_KEYS),a}();d.mixin(b,e),b.keyCodeToString=function(a){return(e[a]||String.fromCharCode(a)).toLowerCase()}}),define("ace/lib/oop",["require","exports","module"],function(a,b,c){"use strict",b.inherits=function(){var a=function(){};return function(b,c){a.prototype=c.prototype,b.super_=c.prototype,b.prototype=new a,b.prototype.constructor=b}}(),b.mixin=function(a,b){for(var c in b)a[c]=b[c]},b.implement=function(a,c){b.mixin(a,c)}}),define("ace/lib/useragent",["require","exports","module"],function(a,b,c){"use strict";var d=(navigator.platform.match(/mac|win|linux/i)||["other"])[0].toLowerCase(),e=navigator.userAgent;b.isWin=d=="win",b.isMac=d=="mac",b.isLinux=d=="linux",b.isIE=navigator.appName=="Microsoft Internet Explorer"&&parseFloat(navigator.userAgent.match(/MSIE ([0-9]+[\.0-9]+)/)[1]),b.isOldIE=b.isIE&&b.isIE<9,b.isGecko=b.isMozilla=window.controllers&&window.navigator.product==="Gecko",b.isOldGecko=b.isGecko&&parseInt((navigator.userAgent.match(/rv\:(\d+)/)||[])[1],10)<4,b.isOpera=window.opera&&Object.prototype.toString.call(window.opera)=="[object Opera]",b.isWebKit=parseFloat(e.split("WebKit/")[1])||undefined,b.isChrome=parseFloat(e.split(" Chrome/")[1])||undefined,b.isAIR=e.indexOf("AdobeAIR")>=0,b.isIPad=e.indexOf("iPad")>=0,b.isTouchPad=e.indexOf("TouchPad")>=0,b.OS={LINUX:"LINUX",MAC:"MAC",WINDOWS:"WINDOWS"},b.getOS=function(){return b.isMac?b.OS.MAC:b.isLinux?b.OS.LINUX:b.OS.WINDOWS}}),define("ace/editor",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/oop","ace/lib/lang","ace/lib/useragent","ace/keyboard/textinput","ace/mouse/mouse_handler","ace/mouse/fold_handler","ace/keyboard/keybinding","ace/edit_session","ace/search","ace/range","ace/lib/event_emitter","ace/commands/command_manager","ace/commands/default_commands"],function(a,b,c){"use strict",a("./lib/fixoldbrowsers");var d=a("./lib/oop"),e=a("./lib/lang"),f=a("./lib/useragent"),g=a("./keyboard/textinput").TextInput,h=a("./mouse/mouse_handler").MouseHandler,i=a("./mouse/fold_handler").FoldHandler,j=a("./keyboard/keybinding").KeyBinding,k=a("./edit_session").EditSession,l=a("./search").Search,m=a("./range").Range,n=a("./lib/event_emitter").EventEmitter,o=a("./commands/command_manager").CommandManager,p=a("./commands/default_commands").commands,q=function(a,b){var c=a.getContainerElement();this.container=c,this.renderer=a,this.textInput=new g(a.getTextAreaContainer(),this),this.keyBinding=new j(this),f.isIPad||(this.$mouseHandler=new h(this),new i(this)),this.$blockScrolling=0,this.$search=(new l).set({wrap:!0}),this.commands=new o(f.isMac?"mac":"win",p),this.setSession(b||new k(""))};((function(){d.implement(this,n),this.setKeyboardHandler=function(a){this.keyBinding.setKeyboardHandler(a)},this.getKeyboardHandler=function(){return this.keyBinding.getKeyboardHandler()},this.setSession=function(a){if(this.session==a)return;if(this.session){var b=this.session;this.session.removeEventListener("change",this.$onDocumentChange),this.session.removeEventListener("changeMode",this.$onChangeMode),this.session.removeEventListener("tokenizerUpdate",this.$onTokenizerUpdate),this.session.removeEventListener("changeTabSize",this.$onChangeTabSize),this.session.removeEventListener("changeWrapLimit",this.$onChangeWrapLimit),this.session.removeEventListener("changeWrapMode",this.$onChangeWrapMode),this.session.removeEventListener("onChangeFold",this.$onChangeFold),this.session.removeEventListener("changeFrontMarker",this.$onChangeFrontMarker),this.session.removeEventListener("changeBackMarker",this.$onChangeBackMarker),this.session.removeEventListener("changeBreakpoint",this.$onChangeBreakpoint),this.session.removeEventListener("changeAnnotation",this.$onChangeAnnotation),this.session.removeEventListener("changeOverwrite",this.$onCursorChange),this.session.removeEventListener("changeScrollTop",this.$onScrollTopChange),this.session.removeEventListener("changeLeftTop",this.$onScrollLeftChange);var c=this.session.getSelection();c.removeEventListener("changeCursor",this.$onCursorChange),c.removeEventListener("changeSelection",this.$onSelectionChange)}this.session=a,this.$onDocumentChange=this.onDocumentChange.bind(this),a.addEventListener("change",this.$onDocumentChange),this.renderer.setSession(a),this.$onChangeMode=this.onChangeMode.bind(this),a.addEventListener("changeMode",this.$onChangeMode),this.$onTokenizerUpdate=this.onTokenizerUpdate.bind(this),a.addEventListener("tokenizerUpdate",this.$onTokenizerUpdate),this.$onChangeTabSize=this.renderer.updateText.bind(this.renderer),a.addEventListener("changeTabSize",this.$onChangeTabSize),this.$onChangeWrapLimit=this.onChangeWrapLimit.bind(this),a.addEventListener("changeWrapLimit",this.$onChangeWrapLimit),this.$onChangeWrapMode=this.onChangeWrapMode.bind(this),a.addEventListener("changeWrapMode",this.$onChangeWrapMode),this.$onChangeFold=this.onChangeFold.bind(this),a.addEventListener("changeFold",this.$onChangeFold),this.$onChangeFrontMarker=this.onChangeFrontMarker.bind(this),this.session.addEventListener("changeFrontMarker",this.$onChangeFrontMarker),this.$onChangeBackMarker=this.onChangeBackMarker.bind(this),this.session.addEventListener("changeBackMarker",this.$onChangeBackMarker),this.$onChangeBreakpoint=this.onChangeBreakpoint.bind(this),this.session.addEventListener("changeBreakpoint",this.$onChangeBreakpoint),this.$onChangeAnnotation=this.onChangeAnnotation.bind(this),this.session.addEventListener("changeAnnotation",this.$onChangeAnnotation),this.$onCursorChange=this.onCursorChange.bind(this),this.session.addEventListener("changeOverwrite",this.$onCursorChange),this.$onScrollTopChange=this.onScrollTopChange.bind(this),this.session.addEventListener("changeScrollTop",this.$onScrollTopChange),this.$onScrollLeftChange=this.onScrollLeftChange.bind(this),this.session.addEventListener("changeScrollLeft",this.$onScrollLeftChange),this.selection=a.getSelection(),this.selection.addEventListener("changeCursor",this.$onCursorChange),this.$onSelectionChange=this.onSelectionChange.bind(this),this.selection.addEventListener("changeSelection",this.$onSelectionChange),this.onChangeMode(),this.onCursorChange(),this.onScrollTopChange(),this.onScrollLeftChange(),this.onSelectionChange(),this.onChangeFrontMarker(),this.onChangeBackMarker(),this.onChangeBreakpoint(),this.onChangeAnnotation(),this.session.getUseWrapMode()&&this.renderer.adjustWrapLimit(),this.renderer.updateFull(),this._emit("changeSession",{session:a,oldSession:b})},this.getSession=function(){return this.session},this.getSelection=function(){return this.selection},this.resize=function(){this.renderer.onResize()},this.setTheme=function(a){this.renderer.setTheme(a)},this.getTheme=function(){return this.renderer.getTheme()},this.setStyle=function(a){this.renderer.setStyle(a)},this.unsetStyle=function(a){this.renderer.unsetStyle(a)},this.setFontSize=function(a){this.container.style.fontSize=a},this.$highlightBrackets=function(){this.session.$bracketHighlight&&(this.session.removeMarker(this.session.$bracketHighlight),this.session.$bracketHighlight=null);if(this.$highlightPending)return;var a=this;this.$highlightPending=!0,setTimeout(function(){a.$highlightPending=!1;var b=a.session.findMatchingBracket(a.getCursorPosition());if(b){var c=new m(b.row,b.column,b.row,b.column+1);a.session.$bracketHighlight=a.session.addMarker(c,"ace_bracket","text")}},10)},this.focus=function(){var a=this;setTimeout(function(){a.textInput.focus()}),this.textInput.focus()},this.isFocused=function(){return this.textInput.isFocused()},this.blur=function(){this.textInput.blur()},this.onFocus=function(){this.renderer.showCursor(),this.renderer.visualizeFocus(),this._emit("focus")},this.onBlur=function(){this.renderer.hideCursor(),this.renderer.visualizeBlur(),this._emit("blur")},this.onDocumentChange=function(a){var b=a.data,c=b.range,d;c.start.row==c.end.row&&b.action!="insertLines"&&b.action!="removeLines"?d=c.end.row:d=Infinity,this.renderer.updateLines(c.start.row,d),this._emit("change",a),this.onCursorChange()},this.onTokenizerUpdate=function(a){var b=a.data;this.renderer.updateLines(b.first,b.last)},this.onScrollTopChange=function(){this.renderer.scrollToY(this.session.getScrollTop())},this.onScrollLeftChange=function(){this.renderer.scrollToX(this.session.getScrollLeft())},this.onCursorChange=function(){this.renderer.updateCursor(),this.$blockScrolling||this.renderer.scrollCursorIntoView(),this.renderer.moveTextAreaToCursor(this.textInput.getElement()),this.$highlightBrackets(),this.$updateHighlightActiveLine()},this.$updateHighlightActiveLine=function(){var a=this.getSession();a.$highlightLineMarker&&a.removeMarker(a.$highlightLineMarker),a.$highlightLineMarker=null;if(this.getHighlightActiveLine()&&(this.getSelectionStyle()!="line"||!this.selection.isMultiLine())){var b=this.getCursorPosition(),c=this.session.getFoldLine(b.row),d;c?d=new m(c.start.row,0,c.end.row+1,0):d=new m(b.row,0,b.row+1,0),a.$highlightLineMarker=a.addMarker(d,"ace_active_line","background")}},this.onSelectionChange=function(a){var b=this.getSession();b.$selectionMarker&&b.removeMarker(b.$selectionMarker),b.$selectionMarker=null;if(!this.selection.isEmpty()){var c=this.selection.getRange(),d=this.getSelectionStyle();b.$selectionMarker=b.addMarker(c,"ace_selection",d)}else this.$updateHighlightActiveLine();this.$highlightSelectedWord&&this.session.getMode().highlightSelection(this)},this.onChangeFrontMarker=function(){this.renderer.updateFrontMarkers()},this.onChangeBackMarker=function(){this.renderer.updateBackMarkers()},this.onChangeBreakpoint=function(){this.renderer.setBreakpoints(this.session.getBreakpoints())},this.onChangeAnnotation=function(){this.renderer.setAnnotations(this.session.getAnnotations())},this.onChangeMode=function(){this.renderer.updateText()},this.onChangeWrapLimit=function(){this.renderer.updateFull()},this.onChangeWrapMode=function(){this.renderer.onResize(!0)},this.onChangeFold=function(){this.$updateHighlightActiveLine(),this.renderer.updateFull()},this.getCopyText=function(){var a="";return this.selection.isEmpty()||(a=this.session.getTextRange(this.getSelectionRange())),this._emit("copy",a),a},this.onCut=function(){if(this.$readOnly)return;var a=this.getSelectionRange();this._emit("cut",a),this.selection.isEmpty()||(this.session.remove(a),this.clearSelection())},this.insert=function(a){var b=this.session,c=b.getMode(),d=this.getCursorPosition();if(this.getBehavioursEnabled()){var e=c.transformAction(b.getState(d.row),"insertion",this,b,a);e&&(a=e.text)}a=a.replace("\t",this.session.getTabString());if(!this.selection.isEmpty())d=this.session.remove(this.getSelectionRange()),this.clearSelection();else if(this.session.getOverwrite()){var f=new m.fromPoints(d,d);f.end.column+=a.length,this.session.remove(f)}this.clearSelection();var g=d.column,h=b.getState(d.row),i=c.checkOutdent(h,b.getLine(d.row),a),j=b.getLine(d.row),k=c.getNextLineIndent(h,j.slice(0,d.column),b.getTabString()),l=b.insert(d,a);e&&e.selection&&(e.selection.length==2?this.selection.setSelectionRange(new m(d.row,g+e.selection[0],d.row,g+e.selection[1])):this.selection.setSelectionRange(new m(d.row+e.selection[0],e.selection[1],d.row+e.selection[2],e.selection[3])));var h=b.getState(d.row);if(b.getDocument().isNewLine(a)){this.moveCursorTo(d.row+1,0);var n=b.getTabSize(),o=Number.MAX_VALUE;for(var p=d.row+1;p<=l.row;++p){var q=0;j=b.getLine(p);for(var r=0;r<j.length;++r)if(j.charAt(r)=="\t")q+=n;else if(j.charAt(r)==" ")q+=1;else break;/[^\s]/.test(j)&&(o=Math.min(q,o))}for(var p=d.row+1;p<=l.row;++p){var s=o;j=b.getLine(p);for(var r=0;r<j.length&&s>0;++r)j.charAt(r)=="\t"?s-=n:j.charAt(r)==" "&&(s-=1);b.remove(new m(p,0,p,r))}b.indentRows(d.row+1,l.row,k)}i&&c.autoOutdent(h,b,d.row)},this.onTextInput=function(a,b){b&&this._emit("paste",a),this.keyBinding.onTextInput(a,b)},this.onCommandKey=function(a,b,c){this.keyBinding.onCommandKey(a,b,c)},this.setOverwrite=function(a){this.session.setOverwrite(a)},this.getOverwrite=function(){return this.session.getOverwrite()},this.toggleOverwrite=function(){this.session.toggleOverwrite()},this.setScrollSpeed=function(a){this.$mouseHandler.setScrollSpeed(a)},this.getScrollSpeed=function(){return this.$mouseHandler.getScrollSpeed()},this.setDragDelay=function(a){this.$mouseHandler.setDragDelay(a)},this.getDragDelay=function(){return this.$mouseHandler.getDragDelay()},this.$selectionStyle="line",this.setSelectionStyle=function(a){if(this.$selectionStyle==a)return;this.$selectionStyle=a,this.onSelectionChange(),this._emit("changeSelectionStyle",{data:a})},this.getSelectionStyle=function(){return this.$selectionStyle},this.$highlightActiveLine=!0,this.setHighlightActiveLine=function(a){if(this.$highlightActiveLine==a)return;this.$highlightActiveLine=a,this.$updateHighlightActiveLine()},this.getHighlightActiveLine=function(){return this.$highlightActiveLine},this.$highlightSelectedWord=!0,this.setHighlightSelectedWord=function(a){if(this.$highlightSelectedWord==a)return;this.$highlightSelectedWord=a,a?this.session.getMode().highlightSelection(this):this.session.getMode().clearSelectionHighlight(this)},this.getHighlightSelectedWord=function(){return this.$highlightSelectedWord},this.setShowInvisibles=function(a){if(this.getShowInvisibles()==a)return;this.renderer.setShowInvisibles(a)},this.getShowInvisibles=function(){return this.renderer.getShowInvisibles()},this.setShowPrintMargin=function(a){this.renderer.setShowPrintMargin(a)},this.getShowPrintMargin=function(){return this.renderer.getShowPrintMargin()},this.setPrintMarginColumn=function(a){this.renderer.setPrintMarginColumn(a)},this.getPrintMarginColumn=function(){return this.renderer.getPrintMarginColumn()},this.$readOnly=!1,this.setReadOnly=function(a){this.$readOnly=a},this.getReadOnly=function(){return this.$readOnly},this.$modeBehaviours=!0,this.setBehavioursEnabled=function(a){this.$modeBehaviours=a},this.getBehavioursEnabled=function(){return this.$modeBehaviours},this.setShowFoldWidgets=function(a){var b=this.renderer.$gutterLayer;if(b.getShowFoldWidgets()==a)return;this.renderer.$gutterLayer.setShowFoldWidgets(a),this.$showFoldWidgets=a,this.renderer.updateFull()},this.getShowFoldWidgets=function(){return this.renderer.$gutterLayer.getShowFoldWidgets()},this.remove=function(a){this.selection.isEmpty()&&(a=="left"?this.selection.selectLeft():this.selection.selectRight());var b=this.getSelectionRange();if(this.getBehavioursEnabled()){var c=this.session,d=c.getState(b.start.row),e=c.getMode().transformAction(d,"deletion",this,c,b);e&&(b=e)}this.session.remove(b),this.clearSelection()},this.removeWordRight=function(){this.selection.isEmpty()&&this.selection.selectWordRight(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeWordLeft=function(){this.selection.isEmpty()&&this.selection.selectWordLeft(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineStart=function(){this.selection.isEmpty()&&this.selection.selectLineStart(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineEnd=function(){this.selection.isEmpty()&&this.selection.selectLineEnd();var a=this.getSelectionRange();a.start.column==a.end.column&&a.start.row==a.end.row&&(a.end.column=0,a.end.row++),this.session.remove(a),this.clearSelection()},this.splitLine=function(){this.selection.isEmpty()||(this.session.remove(this.getSelectionRange()),this.clearSelection());var a=this.getCursorPosition();this.insert("\n"),this.moveCursorToPosition(a)},this.transposeLetters=function(){if(!this.selection.isEmpty())return;var a=this.getCursorPosition(),b=a.column;if(b===0)return;var c=this.session.getLine(a.row),d,e;b<c.length?(d=c.charAt(b)+c.charAt(b-1),e=new m(a.row,b-1,a.row,b+1)):(d=c.charAt(b-1)+c.charAt(b-2),e=new m(a.row,b-2,a.row,b)),this.session.replace(e,d)},this.toLowerCase=function(){var a=this.getSelectionRange();this.selection.isEmpty()&&this.selection.selectWord();var b=this.getSelectionRange(),c=this.session.getTextRange(b);this.session.replace(b,c.toLowerCase()),this.selection.setSelectionRange(a)},this.toUpperCase=function(){var a=this.getSelectionRange();this.selection.isEmpty()&&this.selection.selectWord();var b=this.getSelectionRange(),c=this.session.getTextRange(b);this.session.replace(b,c.toUpperCase()),this.selection.setSelectionRange(a)},this.indent=function(){var a=this.session,b=this.getSelectionRange();if(!(b.start.row<b.end.row||b.start.column<b.end.column)){var d;if(this.session.getUseSoftTabs()){var f=a.getTabSize(),g=this.getCursorPosition(),h=a.documentToScreenColumn(g.row,g.column),i=f-h%f;d=e.stringRepeat(" ",i)}else d="\t";return this.insert(d)}var c=this.$getSelectedRows();a.indentRows(c.first,c.last,"\t")},this.blockOutdent=function(){var a=this.session.getSelection();this.session.outdentRows(a.getRange())},this.toggleCommentLines=function(){var a=this.session.getState(this.getCursorPosition().row),b=this.$getSelectedRows();this.session.getMode().toggleCommentLines(a,this.session,b.first,b.last)},this.removeLines=function(){var a=this.$getSelectedRows(),b;a.first===0||a.last+1<this.session.getLength()?b=new m(a.first,0,a.last+1,0):b=new m(a.first-1,this.session.getLine(a.first-1).length,a.last,this.session.getLine(a.last).length),this.session.remove(b),this.clearSelection()},this.moveLinesDown=function(){this.$moveLines(function(a,b){return this.session.moveLinesDown(a,b)})},this.moveLinesUp=function(){this.$moveLines(function(a,b){return this.session.moveLinesUp(a,b)})},this.moveText=function(a,b){return this.$readOnly?null:this.session.moveText(a,b)},this.copyLinesUp=function(){this.$moveLines(function(a,b){return this.session.duplicateLines(a,b),0})},this.copyLinesDown=function(){this.$moveLines(function(a,b){return this.session.duplicateLines(a,b)})},this.$moveLines=function(a){var b=this.$getSelectedRows(),c=this.selection;if(!c.isMultiLine())var d=c.getRange(),e=c.isBackwards();var f=a.call(this,b.first,b.last);d?(d.start.row+=f,d.end.row+=f,c.setSelectionRange(d,e)):(c.setSelectionAnchor(b.last+f+1,0),c.$moveSelection(function(){c.moveCursorTo(b.first+f,0)}))},this.$getSelectedRows=function(){var a=this.getSelectionRange().collapseRows();return{first:a.start.row,last:a.end.row}},this.onCompositionStart=function(a){this.renderer.showComposition(this.getCursorPosition())},this.onCompositionUpdate=function(a){this.renderer.setCompositionText(a)},this.onCompositionEnd=function(){this.renderer.hideComposition()},this.getFirstVisibleRow=function(){return this.renderer.getFirstVisibleRow()},this.getLastVisibleRow=function(){return this.renderer.getLastVisibleRow()},this.isRowVisible=function(a){return a>=this.getFirstVisibleRow()&&a<=this.getLastVisibleRow()},this.isRowFullyVisible=function(a){return a>=this.renderer.getFirstFullyVisibleRow()&&a<=this.renderer.getLastFullyVisibleRow()},this.$getVisibleRowCount=function(){return this.renderer.getScrollBottomRow()-this.renderer.getScrollTopRow()+1},this.$getPageDownRow=function(){return this.renderer.getScrollBottomRow()},this.$getPageUpRow=function(){var a=this.renderer.getScrollTopRow(),b=this.renderer.getScrollBottomRow();return a-(b-a)},this.selectPageDown=function(){var a=this.$getPageDownRow()+Math.floor(this.$getVisibleRowCount()/2);this.scrollPageDown();var b=this.getSelection(),c=this.session.documentToScreenPosition(b.getSelectionLead()),d=this.session.screenToDocumentPosition(a,c.column);b.selectTo(d.row,d.column)},this.selectPageUp=function(){var a=this.renderer.getScrollTopRow()-this.renderer.getScrollBottomRow(),b=this.$getPageUpRow()+Math.round(a/2);this.scrollPageUp();var c=this.getSelection(),d=this.session.documentToScreenPosition(c.getSelectionLead()),e=this.session.screenToDocumentPosition(b,d.column);c.selectTo(e.row,e.column)},this.gotoPageDown=function(){var a=this.$getPageDownRow(),b=this.getCursorPositionScreen().column;this.scrollToRow(a),this.getSelection().moveCursorToScreen(a,b)},this.gotoPageUp=function(){var a=this.$getPageUpRow(),b=this.getCursorPositionScreen().column;this.scrollToRow(a),this.getSelection().moveCursorToScreen(a,b)},this.scrollPageDown=function(){this.scrollToRow(this.$getPageDownRow())},this.scrollPageUp=function(){this.renderer.scrollToRow(this.$getPageUpRow())},this.scrollToRow=function(a){this.renderer.scrollToRow(a)},this.scrollToLine=function(a,b){this.renderer.scrollToLine(a,b)},this.centerSelection=function(){var a=this.getSelectionRange(),b=Math.floor(a.start.row+(a.end.row-a.start.row)/2);this.renderer.scrollToLine(b,!0)},this.getCursorPosition=function(){return this.selection.getCursor()},this.getCursorPositionScreen=function(){return this.session.documentToScreenPosition(this.getCursorPosition())},this.getSelectionRange=function(){return this.selection.getRange()},this.selectAll=function(){this.$blockScrolling+=1,this.selection.selectAll(),this.$blockScrolling-=1},this.clearSelection=function(){this.selection.clearSelection()},this.moveCursorTo=function(a,b){this.selection.moveCursorTo(a,b)},this.moveCursorToPosition=function(a){this.selection.moveCursorToPosition(a)},this.jumpToMatching=function(){var a=this.getCursorPosition(),b=this.session.findMatchingBracket(a);b||(a.column+=1,b=this.session.findMatchingBracket(a)),b||(a.column-=2,b=this.session.findMatchingBracket(a)),b&&(this.clearSelection(),this.moveCursorTo(b.row,b.column))},this.gotoLine=function(a,b){this.selection.clearSelection(),this.session.unfold({row:a-1,column:b||0}),this.$blockScrolling+=1,this.moveCursorTo(a-1,b||0),this.$blockScrolling-=1,this.isRowFullyVisible(this.getCursorPosition().row)||this.scrollToLine(a,!0)},this.navigateTo=function(a,b){this.clearSelection(),this.moveCursorTo(a,b)},this.navigateUp=function(a){this.selection.clearSelection(),a=a||1,this.selection.moveCursorBy(-a,0)},this.navigateDown=function(a){this.selection.clearSelection(),a=a||1,this.selection.moveCursorBy(a,0)},this.navigateLeft=function(a){if(!this.selection.isEmpty()){var b=this.getSelectionRange().start;this.moveCursorToPosition(b)}else{a=a||1;while(a--)this.selection.moveCursorLeft()}this.clearSelection()},this.navigateRight=function(a){if(!this.selection.isEmpty()){var b=this.getSelectionRange().end;this.moveCursorToPosition(b)}else{a=a||1;while(a--)this.selection.moveCursorRight()}this.clearSelection()},this.navigateLineStart=function(){this.selection.moveCursorLineStart(),this.clearSelection()},this.navigateLineEnd=function(){this.selection.moveCursorLineEnd(),this.clearSelection()},this.navigateFileEnd=function(){this.selection.moveCursorFileEnd(),this.clearSelection()},this.navigateFileStart=function(){this.selection.moveCursorFileStart(),this.clearSelection()},this.navigateWordRight=function(){this.selection.moveCursorWordRight(),this.clearSelection()},this.navigateWordLeft=function(){this.selection.moveCursorWordLeft(),this.clearSelection()},this.replace=function(a,b){b&&this.$search.set(b);var c=this.$search.find(this.session);if(!c)return;this.$tryReplace(c,a),c!==null&&this.selection.setSelectionRange(c)},this.replaceAll=function(a,b){b&&this.$search.set(b);var c=this.$search.findAll(this.session);if(!c.length)return;var d=this.getSelectionRange();this.clearSelection(),this.selection.moveCursorTo(0,0),this.$blockScrolling+=1;for(var e=c.length-1;e>=0;--e)this.$tryReplace(c[e],a);this.selection.setSelectionRange(d),this.$blockScrolling-=1},this.$tryReplace=function(a,b){var c=this.session.getTextRange(a);return b=this.$search.replace(c,b),b!==null?(a.end=this.session.replace(a,b),a):null},this.getLastSearchOptions=function(){return this.$search.getOptions()},this.find=function(a,b){this.clearSelection(),b=b||{},b.needle=a,this.$search.set(b),this.$find()},this.findNext=function(a){a=a||{},typeof a.backwards=="undefined"&&(a.backwards=!1),this.$search.set(a),this.$find()},this.findPrevious=function(a){a=a||{},typeof a.backwards=="undefined"&&(a.backwards=!0),this.$search.set(a),this.$find()},this.$find=function(a){this.selection.isEmpty()||this.$search.set({needle:this.session.getTextRange(this.getSelectionRange())}),typeof a!="undefined"&&this.$search.set({backwards:a});var b=this.$search.find(this.session);b&&(this.session.unfold(b),this.gotoLine(b.end.row+1,b.end.column),this.selection.setSelectionRange(b))},this.undo=function(){this.session.getUndoManager().undo()},this.redo=function(){this.session.getUndoManager().redo()},this.destroy=function(){this.renderer.destroy()}})).call(q.prototype),b.Editor=q}),define("ace/lib/lang",["require","exports","module"],function(a,b,c){"use strict",b.stringReverse=function(a){return a.split("").reverse().join("")},b.stringRepeat=function(a,b){return(new Array(b+1)).join(a)};var d=/^\s\s*/,e=/\s\s*$/;b.stringTrimLeft=function(a){return a.replace(d,"")},b.stringTrimRight=function(a){return a.replace(e,"")},b.copyObject=function(a){var b={};for(var c in a)b[c]=a[c];return b},b.copyArray=function(a){var b=[];for(var c=0,d=a.length;c<d;c++)a[c]&&typeof a[c]=="object"?b[c]=this.copyObject(a[c]):b[c]=a[c];return b},b.deepCopy=function(a){if(typeof a!="object")return a;var b=a.constructor();for(var c in a)typeof a[c]=="object"?b[c]=this.deepCopy(a[c]):b[c]=a[c];return b},b.arrayToMap=function(a){var b={};for(var c=0;c<a.length;c++)b[a[c]]=1;return b},b.arrayRemove=function(a,b){for(var c=0;c<=a.length;c++)b===a[c]&&a.splice(c,1)},b.escapeRegExp=function(a){return a.replace(/([.*+?^${}()|[\]\/\\])/g,"\\$1")},b.deferredCall=function(a){var b=null,c=function(){b=null,a()},d=function(a){return d.cancel(),b=setTimeout(c,a||0),d};return d.schedule=d,d.call=function(){return this.cancel(),a(),d},d.cancel=function(){return clearTimeout(b),b=null,d},d}}),define("ace/keyboard/textinput",["require","exports","module","ace/lib/event","ace/lib/useragent","ace/lib/dom"],function(a,b,c){"use strict";var d=a("../lib/event"),e=a("../lib/useragent"),f=a("../lib/dom"),g=function(a,b){function l(){try{c.select()}catch(a){}}function m(a){if(!i){var d=a||c.value;if(d){d.charCodeAt(d.length-1)==g.charCodeAt(0)?(d=d.slice(0,-1),d&&b.onTextInput(d,j)):b.onTextInput(d,j);if(!v())return!1}}i=!1,j=!1,c.value=g,l()}function v(){return document.activeElement===c}var c=f.createElement("textarea");e.isTouchPad&&c.setAttribute("x-palm-disable-auto-cap",!0),c.style.left="-10000px",c.style.position="fixed",a.insertBefore(c,a.firstChild);var g=String.fromCharCode(0);m();var h=!1,i=!1,j=!1,k="",n=function(a){setTimeout(function(){h||m(a.data)},0)},o=function(a){if(e.isOldIE&&c.value.charCodeAt(0)>128)return;setTimeout(function(){h||m()},0)},p=function(a){h=!0,b.onCompositionStart(),e.isGecko||setTimeout(q,0)},q=function(){if(!h)return;b.onCompositionUpdate(c.value)},r=function(a){h=!1,b.onCompositionEnd()},s=function(a){i=!0;var d=b.getCopyText();d?c.value=d:a.preventDefault(),l(),setTimeout(function(){m()},0)},t=function(a){i=!0;var d=b.getCopyText();d?(c.value=d,b.onCut()):a.preventDefault(),l(),setTimeout(function(){m()},0)};d.addCommandKeyListener(c,b.onCommandKey.bind(b));if(e.isOldIE){var u={13:1,27:1};d.addListener(c,"keyup",function(a){h&&(!c.value||u[a.keyCode])&&setTimeout(r,0);if((c.value.charCodeAt(0)|0)<129)return;h?q():p()})}"onpropertychange"in c&&!("oninput"in c)?d.addListener(c,"propertychange",o):d.addListener(c,"input",n),d.addListener(c,"paste",function(a){j=!0,a.clipboardData&&a.clipboardData.getData?(m(a.clipboardData.getData("text/plain")),a.preventDefault()):o()}),"onbeforecopy"in c&&typeof clipboardData!="undefined"?(d.addListener(c,"beforecopy",function(a){var c=b.getCopyText();c?clipboardData.setData("Text",c):a.preventDefault()}),d.addListener(a,"keydown",function(a){if(a.ctrlKey&&a.keyCode==88){var c=b.getCopyText();c&&(clipboardData.setData("Text",c),b.onCut()),d.preventDefault(a)}})):(d.addListener(c,"copy",s),d.addListener(c,"cut",t)),d.addListener(c,"compositionstart",p),e.isGecko&&d.addListener(c,"text",q),e.isWebKit&&d.addListener(c,"keyup",q),d.addListener(c,"compositionend",r),d.addListener(c,"blur",function(){b.onBlur()}),d.addListener(c,"focus",function(){b.onFocus(),l()}),this.focus=function(){b.onFocus(),l(),c.focus()},this.blur=function(){c.blur()},this.isFocused=v,this.getElement=function(){return c},this.onContextMenu=function(a,b){a&&(k||(k=c.style.cssText),c.style.cssText="position:fixed; z-index:1000;left:"+(a.x-2)+"px; top:"+(a.y-2)+"px;"),b&&(c.value="")},this.onContextMenuClose=function(){setTimeout(function(){k&&(c.style.cssText=k,k=""),m()},0)}};b.TextInput=g}),define("ace/mouse/mouse_handler",["require","exports","module","ace/lib/event","ace/mouse/default_handlers","ace/mouse/default_gutter_handler","ace/mouse/mouse_event"],function(a,b,c){"use strict";var d=a("../lib/event"),e=a("./default_handlers").DefaultHandlers,f=a("./default_gutter_handler").GutterHandler,g=a("./mouse_event").MouseEvent,h=function(a){this.editor=a,new e(a),new f(a),d.addListener(a.container,"mousedown",function(b){return a.focus(),d.preventDefault(b)}),d.addListener(a.container,"selectstart",function(a){return d.preventDefault(a)});var b=a.renderer.getMouseEventTarget();d.addListener(b,"mousedown",this.onMouseEvent.bind(this,"mousedown")),d.addListener(b,"click",this.onMouseEvent.bind(this,"click")),d.addListener(b,"mousemove",this.onMouseMove.bind(this,"mousemove")),d.addMultiMouseDownListener(b,0,2,500,this.onMouseEvent.bind(this,"dblclick")),d.addMultiMouseDownListener(b,0,3,600,this.onMouseEvent.bind(this,"tripleclick")),d.addMultiMouseDownListener(b,0,4,600,this.onMouseEvent.bind(this,"quadclick")),d.addMouseWheelListener(a.container,this.onMouseWheel.bind(this,"mousewheel"));var c=a.renderer.$gutter;d.addListener(c,"mousedown",this.onMouseEvent.bind(this,"guttermousedown")),d.addListener(c,"click",this.onMouseEvent.bind(this,"gutterclick")),d.addListener(c,"dblclick",this.onMouseEvent.bind(this,"gutterdblclick")),d.addListener(c,"mousemove",this.onMouseMove.bind(this,"gutter"))};((function(){this.$scrollSpeed=1,this.setScrollSpeed=function(a){this.$scrollSpeed=a},this.getScrollSpeed=function(){return this.$scrollSpeed},this.onMouseEvent=function(a,b){this.editor._emit(a,new g(b,this.editor))},this.$dragDelay=250,this.setDragDelay=function(a){this.$dragDelay=a},this.getDragDelay=function(){return this.$dragDelay},this.onMouseMove=function(a,b){var c=this.editor._eventRegistry&&this.editor._eventRegistry.mousemove;if(!c||!c.length)return;this.editor._emit(a,new g(b,this.editor))},this.onMouseWheel=function(a,b){var c=new g(b,this.editor);c.speed=this.$scrollSpeed*2,c.wheelX=b.wheelX,c.wheelY=b.wheelY,this.editor._emit(a,c)}})).call(h.prototype),b.MouseHandler=h}),define("ace/mouse/default_handlers",["require","exports","module","ace/lib/event","ace/lib/dom","ace/lib/browser_focus"],function(a,b,c){function k(a){this.editor=a,this.$clickSelection=null,this.browserFocus=new f,a.setDefaultHandler("mousedown",this.onMouseDown.bind(this)),a.setDefaultHandler("dblclick",this.onDoubleClick.bind(this)),a.setDefaultHandler("tripleclick",this.onTripleClick.bind(this)),a.setDefaultHandler("quadclick",this.onQuadClick.bind(this)),a.setDefaultHandler("mousewheel",this.onScroll.bind(this))}function l(a,b,c,d){return Math.sqrt(Math.pow(c-a,2)+Math.pow(d-b,2))}"use strict";var d=a("../lib/event"),e=a("../lib/dom"),f=a("../lib/browser_focus").BrowserFocus,g=0,h=1,i=2,j=5;((function(){this.onMouseDown=function(a){function C(b){a.getShiftKey()?m.selection.selectToPosition(b):n.$clickSelection||(m.moveCursorToPosition(b),m.selection.clearSelection(b.row,b.column)),q=h}var b=a.inSelection(),c=a.pageX,f=a.pageY,k=a.getDocumentPosition(),m=this.editor,n=this,o=m.getSelectionRange(),p=o.isEmpty(),q=g;if(b&&(!this.browserFocus.isFocused()||(new Date).getTime()-this.browserFocus.lastFocus<20||!m.isFocused())){m.focus();return}var r=a.getButton();if(r!==0){p&&m.moveCursorToPosition(k),r==2&&(m.textInput.onContextMenu({x:a.clientX,y:a.clientY},p),d.capture(m.container,function(){},m.textInput.onContextMenuClose));return}b||C(k);var s=c,t=f,u=(new Date).getTime(),v,w,x,y=function(a){s=d.getDocumentX(a),t=d.getDocumentY(a)},z=function(a){clearInterval(F),q==g?C(k):q==i&&A(a),n.$clickSelection=null,q=g},A=function(a){e.removeCssClass(m.container,"ace_dragging"),m.session.removeMarker(x),m.$mouseHandler.$clickSelection||v||(m.moveCursorToPosition(k),m.selection.clearSelection(k.row,k.column));if(!v)return;if(w.contains(v.row,v.column)){v=null;return}m.clearSelection();if(a&&(a.ctrlKey||a.altKey))var b=m.session,c=b.insert(v,b.getTextRange(w));else var c=m.moveText(w,v);if(!c){v=null;return}m.selection.setSelectionRange(c)},B=function(){if(q==g){var a=l(c,f,s,t),b=(new Date).getTime();if(a>j){q=h;var d=m.renderer.screenToTextCoordinates(s,t);d.row=Math.max(0,Math.min(d.row,m.session.getLength()-1)),C(d)}else if(b-u>m.getDragDelay()){q=i,w=m.getSelectionRange();var k=m.getSelectionStyle();x=m.session.addMarker(w,"ace_selection",k),m.clearSelection(),e.addCssClass(m.container,"ace_dragging")}}q==i?E():q==h&&D()},D=function(){var a,b=m.renderer.screenToTextCoordinates(s,t);b.row=Math.max(0,Math.min(b.row,m.session.getLength()-1)),n.$clickSelection?n.$clickSelection.contains(b.row,b.column)?m.selection.setSelectionRange(n.$clickSelection):(n.$clickSelection.compare(b.row,b.column)==-1?a=n.$clickSelection.end:a=n.$clickSelection.start,m.selection.setSelectionAnchor(a.row,a.column),m.selection.selectToPosition(b)):m.selection.selectToPosition(b),m.renderer.scrollCursorIntoView()},E=function(){v=m.renderer.screenToTextCoordinates(s,t),v.row=Math.max(0,Math.min(v.row,m.session.getLength()-1)),m.moveCursorToPosition(v)};d.capture(m.container,y,z);var F=setInterval(B,20);return a.preventDefault()},this.onDoubleClick=function(a){var b=a.getDocumentPosition(),c=this.editor;c.moveCursorToPosition(b),c.selection.selectWord(),this.$clickSelection=c.getSelectionRange()},this.onTripleClick=function(a){var b=a.getDocumentPosition(),c=this.editor;c.moveCursorToPosition(b),c.selection.selectLine(),this.$clickSelection=c.getSelectionRange()},this.onQuadClick=function(a){var b=this.editor;b.selectAll(),this.$clickSelection=b.getSelectionRange()},this.onScroll=function(a){var b=this.editor;b.renderer.scrollBy(a.wheelX*a.speed,a.wheelY*a.speed);if(b.renderer.isScrollableBy(a.wheelX*a.speed,a.wheelY*a.speed))return a.preventDefault()}})).call(k.prototype),b.DefaultHandlers=k}),define("ace/lib/browser_focus",["require","exports","module","ace/lib/oop","ace/lib/event","ace/lib/event_emitter"],function(a,b,c){"use strict";var d=a("./oop"),e=a("./event"),f=a("./event_emitter").EventEmitter,g=function(a){a=a||window,this.lastFocus=(new Date).getTime(),this._isFocused=!0;var b=this;"onfocusin"in a.document?(e.addListener(a.document,"focusin",function(a){b._setFocused(!0)}),e.addListener(a.document,"focusout",function(a){b._setFocused(!!a.toElement)})):(e.addListener(a,"blur",function(a){b._setFocused(!1)}),e.addListener(a,"focus",function(a){b._setFocused(!0)}))};((function(){d.implement(this,f),this.isFocused=function(){return this._isFocused},this._setFocused=function(a){if(this._isFocused==a)return;a&&(this.lastFocus=(new Date).getTime()),this._isFocused=a,this._emit("changeFocus")}})).call(g.prototype),b.BrowserFocus=g}),define("ace/lib/event_emitter",["require","exports","module"],function(a,b,c){"use strict";var d={};d._emit=d._dispatchEvent=function(a,b){this._eventRegistry=this._eventRegistry||{},this._defaultHandlers=this._defaultHandlers||{};var c=this._eventRegistry[a]||[],d=this._defaultHandlers[a];if(!c.length&&!d)return;b=b||{},b.type=a,b.stopPropagation||(b.stopPropagation=function(){this.propagationStopped=!0}),b.preventDefault||(b.preventDefault=function(){this.defaultPrevented=!0});for(var e=0;e<c.length;e++){c[e](b);if(b.propagationStopped)break}d&&!b.defaultPrevented&&d(b)},d.setDefaultHandler=function(a,b){this._defaultHandlers=this._defaultHandlers||{};if(this._defaultHandlers[a])throw new Error("The default handler for '"+a+"' is already set");this._defaultHandlers[a]=b},d.on=d.addEventListener=function(a,b){this._eventRegistry=this._eventRegistry||{};var c=this._eventRegistry[a];if(!c)var c=this._eventRegistry[a]=[];c.indexOf(b)==-1&&c.push(b)},d.removeListener=d.removeEventListener=function(a,b){this._eventRegistry=this._eventRegistry||{};var c=this._eventRegistry[a];if(!c)return;var d=c.indexOf(b);d!==-1&&c.splice(d,1)},d.removeAllListeners=function(a){this._eventRegistry&&(this._eventRegistry[a]=[])},b.EventEmitter=d}),define("ace/mouse/default_gutter_handler",["require","exports","module"],function(a,b,c){function d(a){a.setDefaultHandler("gutterclick",function(b){var c=b.getDocumentPosition().row,d=a.session.selection;d.moveCursorTo(c,0),d.selectLine()})}"use strict",b.GutterHandler=d}),define("ace/mouse/mouse_event",["require","exports","module","ace/lib/event"],function(a,b,c){"use strict";var d=a("../lib/event"),e=b.MouseEvent=function(a,b){this.domEvent=a,this.editor=b,this.pageX=d.getDocumentX(a),this.pageY=d.getDocumentY(a),this.clientX=a.clientX,this.clientY=a.clientY,this.$pos=null,this.$inSelection=null,this.propagationStopped=!1,this.defaultPrevented=!1};((function(){this.stopPropagation=function(){d.stopPropagation(this.domEvent),this.propagationStopped=!0},this.preventDefault=function(){d.preventDefault(this.domEvent),this.defaultPrevented=!0},this.stop=function(){this.stopPropagation(),this.preventDefault()},this.getDocumentPosition=function(){if(this.$pos)return this.$pos;var a=d.getDocumentX(this.domEvent),b=d.getDocumentY(this.domEvent);return this.$pos=this.editor.renderer.screenToTextCoordinates(a,b),this.$pos.row=Math.max(0,Math.min(this.$pos.row,this.editor.session.getLength()-1)),this.$pos},this.inSelection=function(){if(this.$inSelection!==null)return this.$inSelection;var a=this.editor;if(a.getReadOnly())this.$inSelection=!1;else{var b=a.getSelectionRange();if(b.isEmpty())this.$inSelection=!1;else{var c=this.getDocumentPosition();this.$inSelection=b.contains(c.row,c.column)}}return this.$inSelection},this.getButton=function(){return d.getButton(this.domEvent)},this.getShiftKey=function(){return this.domEvent.shiftKey},this.getAccelKey=function(){return this.domEvent.ctrlKey||this.domEvent.metaKey}})).call(e.prototype)}),define("ace/mouse/fold_handler",["require","exports","module"],function(a,b,c){function d(a){a.on("click",function(b){var c=b.getDocumentPosition(),d=a.session,e=d.getFoldAt(c.row,c.column,1);e&&(b.getAccelKey()?d.removeFold(e):d.expandFold(e),b.stop())}),a.on("gutterclick",function(b){if(b.domEvent.target.className.indexOf("ace_fold-widget")!=-1){var c=b.getDocumentPosition().row;a.session.onFoldWidgetClick(c,b.domEvent),b.stop()}})}"use strict",b.FoldHandler=d}),define("ace/keyboard/keybinding",["require","exports","module","ace/lib/keys","ace/lib/event","ace/commands/default_commands"],function(a,b,c){"use strict";var d=a("../lib/keys"),e=a("../lib/event");a("../commands/default_commands");var f=function(a){this.$editor=a,this.$data={},this.$handlers=[this]};((function(){this.setKeyboardHandler=function(a){if(this.$handlers[this.$handlers.length-1]==a)return;this.$data={},this.$handlers=a?[this,a]:[this]},this.addKeyboardHandler=function(a){this.removeKeyboardHandler(a),this.$handlers.push(a)},this.removeKeyboardHandler=function(a){var b=this.$handlers.indexOf(a);return b==-1?!1:(this.$handlers.splice(b,1),!0)},this.getKeyboardHandler=function(){return this.$handlers[this.$handlers.length-1]},this.$callKeyboardHandlers=function(a,b,c,d){var f;for(var g=this.$handlers.length;g--;){f=this.$handlers[g].handleKeyboard(this.$data,a,b,c,d);if(f&&f.command)break}if(!f||!f.command)return!1;var h=!1,i=this.$editor.commands;return f.command!="null"?h=i.exec(f.command,this.$editor,f.args):h=!0,h&&d&&e.stopEvent(d),h},this.handleKeyboard=function(a,b,c){return{command:this.$editor.commands.findKeyCommand(b,c)}},this.onCommandKey=function(a,b,c){var e=d.keyCodeToString(c);this.$callKeyboardHandlers(b,e,c,a)},this.onTextInput=function(a,b){var c=!1;!b&&a.length==1&&(c=this.$callKeyboardHandlers(0,a)),c||this.$editor.commands.exec("insertstring",this.$editor,a)}})).call(f.prototype),b.KeyBinding=f}),define("ace/commands/default_commands",["require","exports","module","ace/lib/lang"],function(a,b,c){function e(a,b){return{win:a,mac:b}}"use strict";var d=a("../lib/lang");b.commands=[{name:"selectall",bindKey:e("Ctrl-A","Command-A"),exec:function(a){a.selectAll()},readOnly:!0},{name:"centerselection",bindKey:e(null,"Ctrl-L"),exec:function(a){a.centerSelection()},readOnly:!0},{name:"gotoline",bindKey:e("Ctrl-L","Command-L"),exec:function(a){var b=parseInt(prompt("Enter line number:"),10);isNaN(b)||a.gotoLine(b)},readOnly:!0},{name:"fold",bindKey:e("Alt-L","Alt-L"),exec:function(a){a.session.toggleFold(!1)},readOnly:!0},{name:"unfold",bindKey:e("Alt-Shift-L","Alt-Shift-L"),exec:function(a){a.session.toggleFold(!0)},readOnly:!0},{name:"foldall",bindKey:e("Alt-0","Alt-0"),exec:function(a){a.session.foldAll()},readOnly:!0},{name:"unfoldall",bindKey:e("Alt-Shift-0","Alt-Shift-0"),exec:function(a){a.session.unfold()},readOnly:!0},{name:"findnext",bindKey:e("Ctrl-K","Command-G"),exec:function(a){a.findNext()},readOnly:!0},{name:"findprevious",bindKey:e("Ctrl-Shift-K","Command-Shift-G"),exec:function(a){a.findPrevious()},readOnly:!0},{name:"find",bindKey:e("Ctrl-F","Command-F"),exec:function(a){var b=prompt("Find:",a.getCopyText());a.find(b)},readOnly:!0},{name:"overwrite",bindKey:e("Insert","Insert"),exec:function(a){a.toggleOverwrite()},readOnly:!0},{name:"selecttostart",bindKey:e("Ctrl-Shift-Home|Alt-Shift-Up","Command-Shift-Up"),exec:function(a){a.getSelection().selectFileStart()},readOnly:!0},{name:"gotostart",bindKey:e("Ctrl-Home|Ctrl-Up","Command-Home|Command-Up"),exec:function(a){a.navigateFileStart()},readOnly:!0},{name:"selectup",bindKey:e("Shift-Up","Shift-Up"),exec:function(a){a.getSelection().selectUp()},readOnly:!0},{name:"golineup",bindKey:e("Up","Up|Ctrl-P"),exec:function(a,b){a.navigateUp(b.times)},readOnly:!0},{name:"selecttoend",bindKey:e("Ctrl-Shift-End|Alt-Shift-Down","Command-Shift-Down"),exec:function(a){a.getSelection().selectFileEnd()},readOnly:!0},{name:"gotoend",bindKey:e("Ctrl-End|Ctrl-Down","Command-End|Command-Down"),exec:function(a){a.navigateFileEnd()},readOnly:!0},{name:"selectdown",bindKey:e("Shift-Down","Shift-Down"),exec:function(a){a.getSelection().selectDown()},readOnly:!0},{name:"golinedown",bindKey:e("Down","Down|Ctrl-N"),exec:function(a,b){a.navigateDown(b.times)},readOnly:!0},{name:"selectwordleft",bindKey:e("Ctrl-Shift-Left","Option-Shift-Left"),exec:function(a){a.getSelection().selectWordLeft()},readOnly:!0},{name:"gotowordleft",bindKey:e("Ctrl-Left","Option-Left"),exec:function(a){a.navigateWordLeft()},readOnly:!0},{name:"selecttolinestart",bindKey:e("Alt-Shift-Left","Command-Shift-Left"),exec:function(a){a.getSelection().selectLineStart()},readOnly:!0},{name:"gotolinestart",bindKey:e("Alt-Left|Home","Command-Left|Home|Ctrl-A"),exec:function(a){a.navigateLineStart()},readOnly:!0},{name:"selectleft",bindKey:e("Shift-Left","Shift-Left"),exec:function(a){a.getSelection().selectLeft()},readOnly:!0},{name:"gotoleft",bindKey:e("Left","Left|Ctrl-B"),exec:function(a,b){a.navigateLeft(b.times)},readOnly:!0},{name:"selectwordright",bindKey:e("Ctrl-Shift-Right","Option-Shift-Right"),exec:function(a){a.getSelection().selectWordRight()},readOnly:!0},{name:"gotowordright",bindKey:e("Ctrl-Right","Option-Right"),exec:function(a){a.navigateWordRight()},readOnly:!0},{name:"selecttolineend",bindKey:e("Alt-Shift-Right","Command-Shift-Right"),exec:function(a){a.getSelection().selectLineEnd()},readOnly:!0},{name:"gotolineend",bindKey:e("Alt-Right|End","Command-Right|End|Ctrl-E"),exec:function(a){a.navigateLineEnd()},readOnly:!0},{name:"selectright",bindKey:e("Shift-Right","Shift-Right"),exec:function(a){a.getSelection().selectRight()},readOnly:!0},{name:"gotoright",bindKey:e("Right","Right|Ctrl-F"),exec:function(a,b){a.navigateRight(b.times)},readOnly:!0},{name:"selectpagedown",bindKey:e("Shift-PageDown","Shift-PageDown"),exec:function(a){a.selectPageDown()},readOnly:!0},{name:"pagedown",bindKey:e(null,"PageDown"),exec:function(a){a.scrollPageDown()},readOnly:!0},{name:"gotopagedown",bindKey:e("PageDown","Option-PageDown|Ctrl-V"),exec:function(a){a.gotoPageDown()},readOnly:!0},{name:"selectpageup",bindKey:e("Shift-PageUp","Shift-PageUp"),exec:function(a){a.selectPageUp()},readOnly:!0},{name:"pageup",bindKey:e(null,"PageUp"),exec:function(a){a.scrollPageUp()},readOnly:!0},{name:"gotopageup",bindKey:e("PageUp","Option-PageUp"),exec:function(a){a.gotoPageUp()},readOnly:!0},{name:"selectlinestart",bindKey:e("Shift-Home","Shift-Home"),exec:function(a){a.getSelection().selectLineStart()},readOnly:!0},{name:"selectlineend",bindKey:e("Shift-End","Shift-End"),exec:function(a){a.getSelection().selectLineEnd()},readOnly:!0},{name:"togglerecording",bindKey:e("Ctrl-Alt-E","Command-Option-E"),exec:function(a){a.commands.toggleRecording()},readOnly:!0},{name:"replaymacro",bindKey:e("Ctrl-Shift-E","Command-Shift-E"),exec:function(a){a.commands.replay(a)},readOnly:!0},{name:"removeline",bindKey:e("Ctrl-D","Command-D"),exec:function(a){a.removeLines()}},{name:"togglecomment",bindKey:e("Ctrl-7","Command-7"),exec:function(a){a.toggleCommentLines()}},{name:"replace",bindKey:e("Ctrl-R","Command-Option-F"),exec:function(a){var b=prompt("Find:",a.getCopyText());if(!b)return;var c=prompt("Replacement:");if(!c)return;a.replace(c,{needle:b})}},{name:"replaceall",bindKey:e("Ctrl-Shift-R","Command-Shift-Option-F"),exec:function(a){var b=prompt("Find:");if(!b)return;var c=prompt("Replacement:");if(!c)return;a.replaceAll(c,{needle:b})}},{name:"undo",bindKey:e("Ctrl-Z","Command-Z"),exec:function(a){a.undo()}},{name:"redo",bindKey:e("Ctrl-Shift-Z|Ctrl-Y","Command-Shift-Z|Command-Y"),exec:function(a){a.redo()}},{name:"copylinesup",bindKey:e("Ctrl-Alt-Up","Command-Option-Up"),exec:function(a){a.copyLinesUp()}},{name:"movelinesup",bindKey:e("Alt-Up","Option-Up"),exec:function(a){a.moveLinesUp()}},{name:"copylinesdown",bindKey:e("Ctrl-Alt-Down","Command-Option-Down"),exec:function(a){a.copyLinesDown()}},{name:"movelinesdown",bindKey:e("Alt-Down","Option-Down"),exec:function(a){a.moveLinesDown()}},{name:"del",bindKey:e("Delete","Delete|Ctrl-D"),exec:function(a){a.remove("right")}},{name:"backspace",bindKey:e("Ctrl-Backspace|Command-Backspace|Option-Backspace|Shift-Backspace|Backspace","Ctrl-Backspace|Command-Backspace|Shift-Backspace|Backspace|Ctrl-H"),exec:function(a){a.remove("left")}},{name:"removetolinestart",bindKey:e("Alt-Backspace","Option-Backspace"),exec:function(a){a.removeToLineStart()}},{name:"removetolineend",bindKey:e("Alt-Delete","Ctrl-K"),exec:function(a){a.removeToLineEnd()}},{name:"removewordleft",bindKey:e("Ctrl-Backspace","Alt-Backspace|Ctrl-Alt-Backspace"),exec:function(a){a.removeWordLeft()}},{name:"removewordright",bindKey:e("Ctrl-Delete","Alt-Delete"),exec:function(a){a.removeWordRight()}},{name:"outdent",bindKey:e("Shift-Tab","Shift-Tab"),exec:function(a){a.blockOutdent()}},{name:"indent",bindKey:e("Tab","Tab"),exec:function(a){a.indent()}},{name:"insertstring",exec:function(a,b){a.insert(b)}},{name:"inserttext",exec:function(a,b){a.insert(d.stringRepeat(b.text||"",b.times||1))}},{name:"splitline",bindKey:e(null,"Ctrl-O"),exec:function(a){a.splitLine()}},{name:"transposeletters",bindKey:e("Ctrl-T","Ctrl-T"),exec:function(a){a.transposeLetters()}},{name:"touppercase",bindKey:e("Ctrl-U","Ctrl-U"),exec:function(a){a.toUpperCase()}},{name:"tolowercase",bindKey:e("Ctrl-Shift-U","Ctrl-Shift-U"),exec:function(a){a.toLowerCase()}},{name:"jumptomatching",bindKey:e("Ctrl-Shift-P","Ctrl-Shift-P"),exec:function(a){a.jumpToMatching()}}]}),define("ace/edit_session",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter","ace/selection","ace/mode/text","ace/range","ace/document","ace/background_tokenizer","ace/edit_session/folding","ace/edit_session/bracket_match"],function(a,b,c){"use strict";var d=a("./lib/oop"),e=a("./lib/lang"),f=a("./lib/event_emitter").EventEmitter,g=a("./selection").Selection,h=a("./mode/text").Mode,i=a("./range").Range,j=a("./document").Document,k=a("./background_tokenizer").BackgroundTokenizer,l=function(a,b){this.$modified=!0,this.$breakpoints=[],this.$frontMarkers={},this.$backMarkers={},this.$markerId=1,this.$rowCache=[],this.$wrapData=[],this.$foldData=[],this.$undoSelect=!0,this.$foldData.toString=function(){var a="";return this.forEach(function(b){a+="\n"+b.toString()}),a},a instanceof j?this.setDocument(a):this.setDocument(new j(a)),this.selection=new g(this),b?this.setMode(b):this.setMode(new h)};((function(){function o(a){return a<4352?!1:a>=4352&&a<=4447||a>=4515&&a<=4519||a>=4602&&a<=4607||a>=9001&&a<=9002||a>=11904&&a<=11929||a>=11931&&a<=12019||a>=12032&&a<=12245||a>=12272&&a<=12283||a>=12288&&a<=12350||a>=12353&&a<=12438||a>=12441&&a<=12543||a>=12549&&a<=12589||a>=12593&&a<=12686||a>=12688&&a<=12730||a>=12736&&a<=12771||a>=12784&&a<=12830||a>=12832&&a<=12871||a>=12880&&a<=13054||a>=13056&&a<=19903||a>=19968&&a<=42124||a>=42128&&a<=42182||a>=43360&&a<=43388||a>=44032&&a<=55203||a>=55216&&a<=55238||a>=55243&&a<=55291||a>=63744&&a<=64255||a>=65040&&a<=65049||a>=65072&&a<=65106||a>=65108&&a<=65126||a>=65128&&a<=65131||a>=65281&&a<=65376||a>=65504&&a<=65510}d.implement(this,f),this.setDocument=function(a){if(this.doc)throw new Error("Document is already set");this.doc=a,a.on("change",this.onChange.bind(this)),this.on("changeFold",this.onChangeFold.bind(this)),this.bgTokenizer&&(this.bgTokenizer.setDocument(this.getDocument()),this.bgTokenizer.start(0))},this.getDocument=function(){return this.doc},this.$resetRowCache=function(a){if(a==0){this.$rowCache=[];return}var b=this.$rowCache;for(var c=0;c<b.length;c++)if(b[c].docRow>=a){b.splice(c,b.length);return}},this.onChangeFold=function(a){var b=a.data;this.$resetRowCache(b.start.row)},this.onChange=function(a){var b=a.data;this.$modified=!0,this.$resetRowCache(b.range.start.row);var c=this.$updateInternalDataOnChange(a);!this.$fromUndo&&this.$undoManager&&!b.ignore&&(this.$deltasDoc.push(b),c&&c.length!=0&&this.$deltasFold.push({action:"removeFolds",folds:c}),this.$informUndoManager.schedule()),this.bgTokenizer.start(b.range.start.row),this._emit("change",a)},this.setValue=function(a){this.doc.setValue(a),this.selection.moveCursorTo(0,0),this.selection.clearSelection(),this.$resetRowCache(0),this.$deltas=[],this.$deltasDoc=[],this.$deltasFold=[],this.getUndoManager().reset()},this.getValue=this.toString=function(){return this.doc.getValue()},this.getSelection=function(){return this.selection},this.getState=function(a){return this.bgTokenizer.getState(a)},this.getTokens=function(a,b){return this.bgTokenizer.getTokens(a,b)},this.getTokenAt=function(a,b){var c=this.bgTokenizer.getTokens(a,a)[0].tokens,d,e=0;if(b==null)f=c.length-1,e=this.getLine(a).length;else for(var f=0;f<c.length;f++){e+=c[f].value.length;if(e>=b)break}return d=c[f],d?(d.index=f,d.start=e-d.value.length,d):null},this.setUndoManager=function(a){this.$undoManager=a,this.$resetRowCache(0),this.$deltas=[],this.$deltasDoc=[],this.$deltasFold=[],this.$informUndoManager&&this.$informUndoManager.cancel();if(a){var b=this;this.$syncInformUndoManager=function(){b.$informUndoManager.cancel(),b.$deltasFold.length&&(b.$deltas.push({group:"fold",deltas:b.$deltasFold}),b.$deltasFold=[]),b.$deltasDoc.length&&(b.$deltas.push({group:"doc",deltas:b.$deltasDoc}),b.$deltasDoc=[]),b.$deltas.length>0&&a.execute({action:"aceupdate",args:[b.$deltas,b]}),b.$deltas=[]},this.$informUndoManager=e.deferredCall(this.$syncInformUndoManager)}},this.$defaultUndoManager={undo:function(){},redo:function(){},reset:function(){}},this.getUndoManager=function(){return this.$undoManager||this.$defaultUndoManager},this.getTabString=function(){return this.getUseSoftTabs()?e.stringRepeat(" ",this.getTabSize()):"\t"},this.$useSoftTabs=!0,this.setUseSoftTabs=function(a){if(this.$useSoftTabs===a)return;this.$useSoftTabs=a},this.getUseSoftTabs=function(){return this.$useSoftTabs},this.$tabSize=4,this.setTabSize=function(a){if(isNaN(a)||this.$tabSize===a)return;this.$modified=!0,this.$tabSize=a,this._emit("changeTabSize")},this.getTabSize=function(){return this.$tabSize},this.isTabStop=function(a){return this.$useSoftTabs&&a.column%this.$tabSize==0},this.$overwrite=!1,this.setOverwrite=function(a){if(this.$overwrite==a)return;this.$overwrite=a,this._emit("changeOverwrite")},this.getOverwrite=function(){return this.$overwrite},this.toggleOverwrite=function(){this.setOverwrite(!this.$overwrite)},this.getBreakpoints=function(){return this.$breakpoints},this.setBreakpoints=function(a){this.$breakpoints=[];for(var b=0;b<a.length;b++)this.$breakpoints[a[b]]=!0;this._emit("changeBreakpoint",{})},this.clearBreakpoints=function(){this.$breakpoints=[],this._emit("changeBreakpoint",{})},this.setBreakpoint=function(a){this.$breakpoints[a]=!0,this._emit("changeBreakpoint",{})},this.clearBreakpoint=function(a){delete this.$breakpoints[a],this._emit("changeBreakpoint",{})},this.getBreakpoints=function(){return this.$breakpoints},this.addMarker=function(a,b,c,d){var e=this.$markerId++,f={range:a,type:c||"line",renderer:typeof c=="function"?c:null,clazz:b,inFront:!!d};return d?(this.$frontMarkers[e]=f,this._emit("changeFrontMarker")):(this.$backMarkers[e]=f,this._emit("changeBackMarker")),e},this.removeMarker=function(a){var b=this.$frontMarkers[a]||this.$backMarkers[a];if(!b)return;var c=b.inFront?this.$frontMarkers:this.$backMarkers;b&&(delete c[a],this._emit(b.inFront?"changeFrontMarker":"changeBackMarker"))},this.getMarkers=function(a){return a?this.$frontMarkers:this.$backMarkers},this.setAnnotations=function(a){this.$annotations={};for(var b=0;b<a.length;b++){var c=a[b],d=c.row;this.$annotations[d]?this.$annotations[d].push(c):this.$annotations[d]=[c]}this._emit("changeAnnotation",{})},this.getAnnotations=function(){return this.$annotations||{}},this.clearAnnotations=function(){this.$annotations={},this._emit("changeAnnotation",{})},this.$detectNewLine=function(a){var b=a.match(/^.*?(\r?\n)/m);b?this.$autoNewLine=b[1]:this.$autoNewLine="\n"},this.getWordRange=function(a,b){var c=this.getLine(a),d=!1;b>0&&(d=!!c.charAt(b-1).match(this.tokenRe)),d||(d=!!c.charAt(b).match(this.tokenRe));var e=d?this.tokenRe:this.nonTokenRe,f=b;if(f>0){do f--;while(f>=0&&c.charAt(f).match(e));f++}var g=b;while(g<c.length&&c.charAt(g).match(e))g++;return new i(a,f,a,g)},this.getAWordRange=function(a,b){var c=this.getWordRange(a,b),d=this.getLine(c.end.row);while(d.charAt(c.end.column).match(/[ \t]/))c.end.column+=1;return c},this.setNewLineMode=function(a){this.doc.setNewLineMode(a)},this.getNewLineMode=function(){return this.doc.getNewLineMode()},this.$useWorker=!0,this.setUseWorker=function(a){if(this.$useWorker==a)return;this.$useWorker=a,this.$stopWorker(),a&&this.$startWorker()},this.getUseWorker=function(){return this.$useWorker},this.onReloadTokenizer=function(a){var b=a.data;this.bgTokenizer.start(b.first),this._emit("tokenizerUpdate",a)},this.$mode=null,this.setMode=function(a){if(this.$mode===a)return;this.$mode=a,this.$stopWorker(),this.$useWorker&&this.$startWorker();var b=a.getTokenizer();if(b.addEventListener!==undefined){var c=this.onReloadTokenizer.bind(this);b.addEventListener("update",c)}if(!this.bgTokenizer){this.bgTokenizer=new k(b);var d=this;this.bgTokenizer.addEventListener("update",function(a){d._emit("tokenizerUpdate",a)})}else this.bgTokenizer.setTokenizer(b);this.bgTokenizer.setDocument(this.getDocument()),this.bgTokenizer.start(0),this.tokenRe=a.tokenRe,this.nonTokenRe=a.nonTokenRe,this.$setFolding(a.foldingRules),this._emit("changeMode")},this.$stopWorker=function(){this.$worker&&this.$worker.terminate(),this.$worker=null},this.$startWorker=function(){if(typeof Worker!="undefined"&&!a.noWorker)try{this.$worker=this.$mode.createWorker(this)}catch(b){console.log("Could not load worker"),console.log(b),this.$worker=null}else this.$worker=null},this.getMode=function(){return this.$mode},this.$scrollTop=0,this.setScrollTop=function(a){a=Math.round(Math.max(0,a));if(this.$scrollTop===a)return;this.$scrollTop=a,this._emit("changeScrollTop",a)},this.getScrollTop=function(){return this.$scrollTop},this.$scrollLeft=0,this.setScrollLeft=function(a){a=Math.round(Math.max(0,a));if(this.$scrollLeft===a)return;this.$scrollLeft=a,this._emit("changeScrollLeft",a)},this.getScrollLeft=function(){return this.$scrollLeft},this.getWidth=function(){return this.$computeWidth(),this.width},this.getScreenWidth=function(){return this.$computeWidth(),this.screenWidth},this.$computeWidth=function(a){if(this.$modified||a){this.$modified=!1;var b=this.doc.getAllLines(),c=0,d=0;for(var e=0;e<b.length;e++){var f=this.getFoldLine(e),g,h;g=b[e];if(f){var i=f.range.end;g=this.getFoldDisplayLine(f),e=i.row}h=g.length,c=Math.max(c,h),this.$useWrapMode||(d=Math.max(d,this.$getStringScreenWidth(g)[0]))}this.width=c,this.$useWrapMode?this.screenWidth=this.$wrapLimit:this.screenWidth=d}},this.getLine=function(a){return this.doc.getLine(a)},this.getLines=function(a,b){return this.doc.getLines(a,b)},this.getLength=function(){return this.doc.getLength()},this.getTextRange=function(a){return this.doc.getTextRange(a)},this.insert=function(a,b){return this.doc.insert(a,b)},this.remove=function(a){return this.doc.remove(a)},this.undoChanges=function(a,b){if(!a.length)return;this.$fromUndo=!0;var c=null;for(var d=a.length-1;d!=-1;d--){var e=a[d];e.group=="doc"?(this.doc.revertDeltas(e.deltas),c=this.$getUndoSelection(e.deltas,!0,c)):e.deltas.forEach(function(a){this.addFolds(a.folds)},this)}return this.$fromUndo=!1,c&&this.$undoSelect&&!b&&this.selection.setSelectionRange(c),c},this.redoChanges=function(a,b){if(!a.length)return;this.$fromUndo=!0;var c=null;for(var d=0;d<a.length;d++){var e=a[d];e.group=="doc"&&(this.doc.applyDeltas(e.deltas),c=this.$getUndoSelection(e.deltas,!1,c))}return this.$fromUndo=!1,c&&this.$undoSelect&&!b&&this.selection.setSelectionRange(c),c},this.setUndoSelect=function(a){this.$undoSelect=a},this.$getUndoSelection=function(a,b,c){function d(a){var c=a.action=="insertText"||a.action=="insertLines";return b?!c:c}var e=a[0],f,g,h=!1;d(e)?(f=e.range.clone(),h=!0):(f=i.fromPoints(e.range.start,e.range.start),h=!1);for(var j=1;j<a.length;j++)e=a[j],d(e)?(g=e.range.start,f.compare(g.row,g.column)==-1&&f.setStart(e.range.start),g=e.range.end,f.compare(g.row,g.column)==1&&f.setEnd(e.range.end),h=!0):(g=e.range.start,f.compare(g.row,g.column)==-1&&(f=i.fromPoints(e.range.start,e.range.start)),h=!1);if(c!=null){var k=c.compareRange(f);k==1?f.setStart(c.start):k==-1&&f.setEnd(c.end)}return f},this.replace=function(a,b){return this.doc.replace(a,b)},this.moveText=function(a,b){var c=this.getTextRange(a);this.remove(a);var d=b.row,e=b.column;!a.isMultiLine()&&a.start.row==d&&a.end.column<e&&(e-=c.length);if(a.isMultiLine()&&a.end.row<d){var f=this.doc.$split(c);d-=f.length-1}var g=d+a.end.row-a.start.row,h=a.isMultiLine()?a.end.column:e+a.end.column-a.start.column,j=new i(d,e,g,h);return this.insert(j.start,c),j},this.indentRows=function(a,b,c){c=c.replace(/\t/g,this.getTabString());for(var d=a;d<=b;d++)this.insert({row:d,column:0},c)},this.outdentRows=function(a){var b=a.collapseRows(),c=new i(0,0,0,0),d=this.getTabSize();for(var e=b.start.row;e<=b.end.row;++e){var f=this.getLine(e);c.start.row=e,c.end.row=e;for(var g=0;g<d;++g)if(f.charAt(g)!=" ")break;g<d&&f.charAt(g)=="\t"?(c.start.column=g,c.end.column=g+1):(c.start.column=0,c.end.column=g),this.remove(c)}},this.moveLinesUp=function(a,b){if(a<=0)return 0;var c=this.doc.removeLines(a,b);return this.doc.insertLines(a-1,c),-1},this.moveLinesDown=function(a,b){if(b>=this.doc.getLength()-1)return 0;var c=this.doc.removeLines(a,b);return this.doc.insertLines(a+1,c),1},this.duplicateLines=function(a,b){var a=this.$clipRowToDocument(a),b=this.$clipRowToDocument(b),c=this.getLines(a,b);this.doc.insertLines(a,c);var d=b-a+1;return d},this.$clipRowToDocument=function(a){return Math.max(0,Math.min(a,this.doc.getLength()-1))},this.$clipColumnToRow=function(a,b){return b<0?0:Math.min(this.doc.getLine(a).length,b)},this.$clipPositionToDocument=function(a,b){b=Math.max(0,b);if(a<0)a=0,b=0;else{var c=this.doc.getLength();a>=c?(a=c-1,b=this.doc.getLine(c-1).length):b=Math.min(this.doc.getLine(a).length,b)}return{row:a,column:b}},this.$clipRangeToDocument=function(a){a.start.row<0?(a.start.row=0,a.start.column=0):a.start.column=this.$clipColumnToRow(a.start.row,a.start.column);var b=this.doc.getLength()-1;return a.end.row>b?(a.end.row=b,a.end.column=this.doc.getLine(b).length):a.end.column=this.$clipColumnToRow(a.end.row,a.end.column),a},this.$wrapLimit=80,this.$useWrapMode=!1,this.$wrapLimitRange={min:null,max:null},this.setUseWrapMode=function(a){if(a!=this.$useWrapMode){this.$useWrapMode=a,this.$modified=!0,this.$resetRowCache(0);if(a){var b=this.getLength();this.$wrapData=[];for(var c=0;c<b;c++)this.$wrapData.push([]);this.$updateWrapData(0,b-1)}this._emit("changeWrapMode")}},this.getUseWrapMode=function(){return this.$useWrapMode},this.setWrapLimitRange=function(a,b){if(this.$wrapLimitRange.min!==a||this.$wrapLimitRange.max!==b)this.$wrapLimitRange.min=a,this.$wrapLimitRange.max=b,this.$modified=!0,this._emit("changeWrapMode")},this.adjustWrapLimit=function(a){var b=this.$constrainWrapLimit(a);return b!=this.$wrapLimit&&b>0?(this.$wrapLimit=b,this.$modified=!0,this.$useWrapMode&&(this.$updateWrapData(0,this.getLength()-1),this.$resetRowCache(0),this._emit("changeWrapLimit")),!0):!1},this.$constrainWrapLimit=function(a){var b=this.$wrapLimitRange.min;b&&(a=Math.max(b,a));var c=this.$wrapLimitRange.max;return c&&(a=Math.min(c,a)),Math.max(1,a)},this.getWrapLimit=function(){return this.$wrapLimit},this.getWrapLimitRange=function(){return{min:this.$wrapLimitRange.min,max:this.$wrapLimitRange.max}},this.$updateInternalDataOnChange=function(a){var b=this.$useWrapMode,c,d=a.data.action,e=a.data.range.start.row,f=a.data.range.end.row,g=a.data.range.start,h=a.data.range.end,i=null;d.indexOf("Lines")!=-1?(d=="insertLines"?f=e+a.data.lines.length:f=e,c=a.data.lines?a.data.lines.length:f-e):c=f-e;if(c!=0)if(d.indexOf("remove")!=-1){b&&this.$wrapData.splice(e,c);var j=this.$foldData;i=this.getFoldsInRange(a.data.range),this.removeFolds(i);var k=this.getFoldLine(h.row),l=0;if(k){k.addRemoveChars(h.row,h.column,g.column-h.column),k.shiftRow(-c);var m=this.getFoldLine(e);m&&m!==k&&(m.merge(k),k=m),l=j.indexOf(k)+1}for(l;l<j.length;l++){var k=j[l];k.start.row>=h.row&&k.shiftRow(-c)}f=e}else{var n;if(b){n=[e,0];for(var o=0;o<c;o++)n.push([]);this.$wrapData.splice.apply(this.$wrapData,n)}var j=this.$foldData,k=this.getFoldLine(e),l=0;if(k){var p=k.range.compareInside(g.row,g.column);p==0?(k=k.split(g.row,g.column),k.shiftRow(c),k.addRemoveChars(f,0,h.column-g.column)):p==-1&&(k.addRemoveChars(e,0,h.column-g.column),k.shiftRow(c)),l=j.indexOf(k)+1}for(l;l<j.length;l++){var k=j[l];k.start.row>=e&&k.shiftRow(c)}}else{c=Math.abs(a.data.range.start.column-a.data.range.end.column),d.indexOf("remove")!=-1&&(i=this.getFoldsInRange(a.data.range),this.removeFolds(i),c=-c);var k=this.getFoldLine(e);k&&k.addRemoveChars(e,g.column,c)}return b&&this.$wrapData.length!=this.doc.getLength()&&console.error("doc.getLength() and $wrapData.length have to be the same!"),b&&this.$updateWrapData(e,f),i},this.$updateWrapData=function(a,b){var c=this.doc.getAllLines(),d=this.getTabSize(),f=this.$wrapData,i=this.$wrapLimit,j,k,m=a;b=Math.min(b,c.length-1);while(m<=b){k=this.getFoldLine(m,k);if(!k)j=this.$getDisplayTokens(e.stringTrimRight(c[m])),f[m]=this.$computeWrapSplits(j,i,d),m++;else{j=[],k.walk(function(a,b,d,e){var f;if(a){f=this.$getDisplayTokens(a,j.length),f[0]=g;for(var i=1;i<f.length;i++)f[i]=h}else f=this.$getDisplayTokens(c[b].substring(e,d),j.length);j=j.concat(f)}.bind(this),k.end.row,c[k.end.row].length+1);while(j.length!=0&&j[j.length-1]>=l)j.pop();f[k.start.row]=this.$computeWrapSplits(j,i,d),m=k.end.row+1}}};var b=1,c=2,g=3,h=4,j=9,l=10,m=11,n=12;this.$computeWrapSplits=function(a,b){function i(b){var d=a.slice(e,b),g=d.length;d.join("").replace(/12/g,function(){g-=1}).replace(/2/g,function(){g-=1}),f+=g,c.push(f),e=b}if(a.length==0)return[];var c=[],d=a.length,e=0,f=0;while(d-e>b){var k=e+b;if(a[k]>=l){while(a[k]>=l)k++;i(k);continue}if(a[k]==g||a[k]==h){for(k;k!=e-1;k--)if(a[k]==g)break;if(k>e){i(k);continue}k=e+b;for(k;k<a.length;k++)if(a[k]!=h)break;if(k==a.length)break;i(k);continue}var m=Math.max(k-10,e-1);while(k>m&&a[k]<g)k--;while(k>m&&a[k]==j)k--;if(k>m){i(++k);continue}k=e+b,i(k)}return c},this.$getDisplayTokens=function(a,d){var e=[],f;d=d||0;for(var g=0;g<a.length;g++){var h=a.charCodeAt(g);if(h==9){f=this.getScreenTabSize(e.length+d),e.push(m);for(var i=1;i<f;i++)e.push(n)}else h==32?e.push(l):h>39&&h<48||h>57&&h<64?e.push(j):h>=4352&&o(h)?e.push(b,c):e.push(b)}return e},this.$getStringScreenWidth=function(a,b,c){if(b==0)return[0,0];b==null&&(b=c+a.length*Math.max(this.getTabSize(),2)),c=c||0;var d,e;for(e=0;e<a.length;e++){d=a.charCodeAt(e),d==9?c+=this.getScreenTabSize(c):d>=4352&&o(d)?c+=2:c+=1;if(c>b)break}return[c,e]},this.getRowLength=function(a){return!this.$useWrapMode||!this.$wrapData[a]?1:this.$wrapData[a].length+1},this.getRowHeight=function(a,b){return this.getRowLength(b)*a.lineHeight},this.getScreenLastRowColumn=function(a){return this.documentToScreenColumn(a,this.doc.getLine(a).length)},this.getDocumentLastRowColumn=function(a,b){var c=this.documentToScreenRow(a,b);return this.getScreenLastRowColumn(c)},this.getDocumentLastRowColumnPosition=function(a,b){var c=this.documentToScreenRow(a,b);return this.screenToDocumentPosition(c,Number.MAX_VALUE/10)},this.getRowSplitData=function(a){return this.$useWrapMode?this.$wrapData[a]:undefined},this.getScreenTabSize=function(a){return this.$tabSize-a%this.$tabSize},this.screenToDocumentRow=function(a,b){return this.screenToDocumentPosition(a,b).row},this.screenToDocumentColumn=function(a,b){return this.screenToDocumentPosition(a,b).column},this.screenToDocumentPosition=function(a,b){if(a<0)return{row:0,column:0};var c,d=0,e=0,f,g=0,h=0,i=this.$rowCache;for(var j=0;j<i.length;j++)if(i[j].screenRow<a)g=i[j].screenRow,d=i[j].docRow;else break;var k=!i.length||j==i.length,l=this.getLength()-1,m=this.getNextFoldLine(d),n=m?m.start.row:Infinity;while(g<=a){h=this.getRowLength(d);if(g+h-1>=a||d>=l)break;g+=h,d++,d>n&&(d=m.end.row+1,m=this.getNextFoldLine(d,m),n=m?m.start.row:Infinity),k&&i.push({docRow:d,screenRow:g})}if(m&&m.start.row<=d)c=this.getFoldDisplayLine(m),d=m.start.row;else{if(g+h<=a||d>l)return{row:l,column:this.getLine(l).length};c=this.getLine(d),m=null}if(this.$useWrapMode){var o=this.$wrapData[d];o&&(f=o[a-g],a>g&&o.length&&(e=o[a-g-1]||o[o.length-1],c=c.substring(e)))}return e+=this.$getStringScreenWidth(c,b)[1],this.$useWrapMode?e>=f&&(e=f-1):e=Math.min(e,c.length),m?m.idxToPosition(e):{row:d,column:e}},this.documentToScreenPosition=function(a,b){if(typeof b=="undefined")var c=this.$clipPositionToDocument(a.row,a.column);else c=this.$clipPositionToDocument(a,b);a=c.row,b=c.column;var d;if(this.$useWrapMode){d=this.$wrapData;if(a>d.length-1)return{row:this.getScreenLength(),column:d.length==0?0:d[d.length-1].length-1}}var e=0,f=null,g=null;g=this.getFoldAt(a,b,1),g&&(a=g.start.row,b=g.start.column);var h,i=0,j=this.$rowCache;for(var k=0;k<j.length;k++)if(j[k].docRow<a)e=j[k].screenRow,i=j[k].docRow;else break;var l=!j.length||k==j.length,m=this.getNextFoldLine(i),n=m?m.start.row:Infinity;while(i<a){if(i>=n){h=m.end.row+1;if(h>a)break;m=this.getNextFoldLine(h,m),n=m?m.start.row:Infinity}else h=i+1;e+=this.getRowLength(i),i=h,l&&j.push({docRow:i,screenRow:e})}var o="";m&&i>=n?(o=this.getFoldDisplayLine(m,a,b),f=m.start.row):(o=this.getLine(a).substring(0,b),f=a);if(this.$useWrapMode){var p=d[f],q=0;while(o.length>=p[q])e++,q++;o=o.substring(p[q-1]||0,o.length)}return{row:e,column:this.$getStringScreenWidth(o)[0]}},this.documentToScreenColumn=function(a,b){return this.documentToScreenPosition(a,b).column},this.documentToScreenRow=function(a,b){return this.documentToScreenPosition(a,b).row},this.getScreenLength=function(){var a=0,b=null;if(!this.$useWrapMode){a=this.getLength();var c=this.$foldData;for(var d=0;d<c.length;d++)b=c[d],a-=b.end.row-b.start.row}else{var e=this.$wrapData.length,f=0,d=0,b=this.$foldData[d++],g=b?b.start.row:Infinity;while(f<e)a+=this.$wrapData[f].length+1,f++,f>g&&(f=b.end.row+1,b=this.$foldData[d++],g=b?b.start.row:Infinity)}return a}})).call(l.prototype),a("./edit_session/folding").Folding.call(l.prototype),a("./edit_session/bracket_match").BracketMatch.call(l.prototype),b.EditSession=l}),define("ace/selection",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter","ace/range"],function(a,b,c){"use strict";var d=a("./lib/oop"),e=a("./lib/lang"),f=a("./lib/event_emitter").EventEmitter,g=a("./range").Range,h=function(a){this.session=a,this.doc=a.getDocument(),this.clearSelection(),this.selectionLead=this.doc.createAnchor(0,0),this.selectionAnchor=this.doc.createAnchor(0,0);var b=this;this.selectionLead.on("change",function(a){b._emit("changeCursor"),b.$isEmpty||b._emit("changeSelection"),!b.$preventUpdateDesiredColumnOnChange&&a.old.column!=a.value.column&&b.$updateDesiredColumn()}),this.selectionAnchor.on("change",function(){b.$isEmpty||b._emit("changeSelection")})};((function(){d.implement(this,f),this.isEmpty=function(){return this.$isEmpty||this.selectionAnchor.row==this.selectionLead.row&&this.selectionAnchor.column==this.selectionLead.column},this.isMultiLine=function(){return this.isEmpty()?!1:this.getRange().isMultiLine()},this.getCursor=function(){return this.selectionLead.getPosition()},this.setSelectionAnchor=function(a,b){this.selectionAnchor.setPosition(a,b),this.$isEmpty&&(this.$isEmpty=!1,this._emit("changeSelection"))},this.getSelectionAnchor=function(){return this.$isEmpty?this.getSelectionLead():this.selectionAnchor.getPosition()},this.getSelectionLead=function(){return this.selectionLead.getPosition()},this.shiftSelection=function(a){if(this.$isEmpty){this.moveCursorTo(this.selectionLead.row,this.selectionLead.column+a);return}var b=this.getSelectionAnchor(),c=this.getSelectionLead(),d=this.isBackwards();(!d||b.column!==0)&&this.setSelectionAnchor(b.row,b.column+a),(d||c.column!==0)&&this.$moveSelection(function(){this.moveCursorTo(c.row,c.column+a)})},this.isBackwards=function(){var a=this.selectionAnchor,b=this.selectionLead;return a.row>b.row||a.row==b.row&&a.column>b.column},this.getRange=function(){var a=this.selectionAnchor,b=this.selectionLead;return this.isEmpty()?g.fromPoints(b,b):this.isBackwards()?g.fromPoints(b,a):g.fromPoints(a,b)},this.clearSelection=function(){this.$isEmpty||(this.$isEmpty=!0,this._emit("changeSelection"))},this.selectAll=function(){var a=this.doc.getLength()-1;this.setSelectionAnchor(a,this.doc.getLine(a).length),this.moveCursorTo(0,0)},this.setSelectionRange=function(a,b){b?(this.setSelectionAnchor(a.end.row,a.end.column),this.selectTo(a.start.row,a.start.column)):(this.setSelectionAnchor(a.start.row,a.start.column),this.selectTo(a.end.row,a.end.column)),this.$updateDesiredColumn()},this.$updateDesiredColumn=function(){var a=this.getCursor();this.$desiredColumn=this.session.documentToScreenColumn(a.row,a.column)},this.$moveSelection=function(a){var b=this.selectionLead;this.$isEmpty&&this.setSelectionAnchor(b.row,b.column),a.call(this)},this.selectTo=function(a,b){this.$moveSelection(function(){this.moveCursorTo(a,b)})},this.selectToPosition=function(a){this.$moveSelection(function(){this.moveCursorToPosition(a)})},this.selectUp=function(){this.$moveSelection(this.moveCursorUp)},this.selectDown=function(){this.$moveSelection(this.moveCursorDown)},this.selectRight=function(){this.$moveSelection(this.moveCursorRight)},this.selectLeft=function(){this.$moveSelection(this.moveCursorLeft)},this.selectLineStart=function(){this.$moveSelection(this.moveCursorLineStart)},this.selectLineEnd=function(){this.$moveSelection(this.moveCursorLineEnd)},this.selectFileEnd=function(){this.$moveSelection(this.moveCursorFileEnd)},this.selectFileStart=function(){this.$moveSelection(this.moveCursorFileStart)},this.selectWordRight=function(){this.$moveSelection(this.moveCursorWordRight)},this.selectWordLeft=function(){this.$moveSelection(this.moveCursorWordLeft)},this.selectWord=function(){var a=this.getCursor(),b=this.session.getWordRange(a.row,a.column);this.setSelectionRange(b)},this.selectAWord=function(){var a=this.getCursor(),b=this.session.getAWordRange(a.row,a.column);this.setSelectionRange(b)},this.selectLine=function(){var a=this.selectionLead.row,b,c=this.session.getFoldLine(a);c?(a=c.start.row,b=c.end.row):b=a,this.setSelectionAnchor(a,0),this.$moveSelection(function(){this.moveCursorTo(b+1,0)})},this.moveCursorUp=function(){this.moveCursorBy(-1,0)},this.moveCursorDown=function(){this.moveCursorBy(1,0)},this.moveCursorLeft=function(){var a=this.selectionLead.getPosition(),b;if(b=this.session.getFoldAt(a.row,a.column,-1))this.moveCursorTo(b.start.row,b.start.column);else if(a.column==0)a.row>0&&this.moveCursorTo(a.row-1,this.doc.getLine(a.row-1).length);else{var c=this.session.getTabSize();this.session.isTabStop(a)&&this.doc.getLine(a.row).slice(a.column-c,a.column).split(" ").length-1==c?this.moveCursorBy(0,-c):this.moveCursorBy(0,-1)}},this.moveCursorRight=function(){var a=this.selectionLead.getPosition(),b;if(b=this.session.getFoldAt(a.row,a.column,1))this.moveCursorTo(b.end.row,b.end.column);else if(this.selectionLead.column==this.doc.getLine(this.selectionLead.row).length)this.selectionLead.row<this.doc.getLength()-1&&this.moveCursorTo(this.selectionLead.row+1,0);else{var c=this.session.getTabSize(),a=this.selectionLead;this.session.isTabStop(a)&&this.doc.getLine(a.row).slice(a.column,a.column+c).split(" ").length-1==c?this.moveCursorBy(0,c):this.moveCursorBy(0,1)}},this.moveCursorLineStart=function(){var a=this.selectionLead.row,b=this.selectionLead.column,c=this.session.documentToScreenRow(a,b),d=this.session.screenToDocumentPosition(c,0),e=this.session.getDisplayLine(a,null,d.row,d.column),f=e.match(/^\s*/);f[0].length==b?this.moveCursorTo(d.row,d.column):this.moveCursorTo(d.row,d.column+f[0].length)},this.moveCursorLineEnd=function(){var a=this.selectionLead,b=this.session.getDocumentLastRowColumnPosition(a.row,a.column);this.moveCursorTo(b.row,b.column)},this.moveCursorFileEnd=function(){var a=this.doc.getLength()-1,b=this.doc.getLine(a).length;this.moveCursorTo(a,b)},this.moveCursorFileStart=function(){this.moveCursorTo(0,0)},this.moveCursorWordRight=function(){var a=this.selectionLead.row,b=this.selectionLead.column,c=this.doc.getLine(a),d=c.substring(b),e;this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0;var f=this.session.getFoldAt(a,b,1);if(f){this.moveCursorTo(f.end.row,f.end.column);return}if(e=this.session.nonTokenRe.exec(d))b+=this.session.nonTokenRe.lastIndex,this.session.nonTokenRe.lastIndex=0,d=c.substring(b);if(b>=c.length){this.moveCursorTo(a,c.length),this.moveCursorRight(),a<this.doc.getLength()-1&&this.moveCursorWordRight();return}if(e=this.session.tokenRe.exec(d))b+=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0;this.moveCursorTo(a,b)},this.moveCursorWordLeft=function(){var a=this.selectionLead.row,b=this.selectionLead.column,c;if(c=this.session.getFoldAt(a,b,-1)){this.moveCursorTo(c.start.row,c.start.column);return}var d=this.session.getFoldStringAt(a,b,-1);d==null&&(d=this.doc.getLine(a).substring(0,b));var f=e.stringReverse(d),g;this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0;if(g=this.session.nonTokenRe.exec(f))b-=this.session.nonTokenRe.lastIndex,f=f.slice(this.session.nonTokenRe.lastIndex),this.session.nonTokenRe.lastIndex=0;if(b<=0){this.moveCursorTo(a,0),this.moveCursorLeft(),a>0&&this.moveCursorWordLeft();return}if(g=this.session.tokenRe.exec(f))b-=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0;this.moveCursorTo(a,b)},this.moveCursorBy=function(a,b){var c=this.session.documentToScreenPosition(this.selectionLead.row,this.selectionLead.column),d=b===0&&this.$desiredColumn||c.column,e=this.session.screenToDocumentPosition(c.row+a,d);this.moveCursorTo(e.row,e.column+b,b===0)},this.moveCursorToPosition=function(a){this.moveCursorTo(a.row,a.column)},this.moveCursorTo=function(a,b,c){var d=this.session.getFoldAt(a,b,1);d&&(a=d.start.row,b=d.start.column),this.$preventUpdateDesiredColumnOnChange=!0,this.selectionLead.setPosition(a,b),this.$preventUpdateDesiredColumnOnChange=!1,c||this.$updateDesiredColumn(this.selectionLead.column)},this.moveCursorToScreen=function(a,b,c){var d=this.session.screenToDocumentPosition(a,b);a=d.row,b=d.column,this.moveCursorTo(a,b,c)}})).call(h.prototype),b.Selection=h}),define("ace/range",["require","exports","module"],function(a,b,c){"use strict";var d=function(a,b,c,d){this.start={row:a,column:b},this.end={row:c,column:d}};((function(){this.isEequal=function(a){return this.start.row==a.start.row&&this.end.row==a.end.row&&this.start.column==a.start.column&&this.end.column==a.end.column},this.toString=function(){return"Range: ["+this.start.row+"/"+this.start.column+"] -> ["+this.end.row+"/"+this.end.column+"]"},this.contains=function(a,b){return this.compare(a,b)==0},this.compareRange=function(a){var b,c=a.end,d=a.start;return b=this.compare(c.row,c.column),b==1?(b=this.compare(d.row,d.column),b==1?2:b==0?1:0):b==-1?-2:(b=this.compare(d.row,d.column),b==-1?-1:b==1?42:0)},this.comparePoint=function(a){return this.compare(a.row,a.column)},this.containsRange=function(a){return this.comparePoint(a.start)==0&&this.comparePoint(a.end)==0},this.isEnd=function(a,b){return this.end.row==a&&this.end.column==b},this.isStart=function(a,b){return this.start.row==a&&this.start.column==b},this.setStart=function(a,b){typeof a=="object"?(this.start.column=a.column,this.start.row=a.row):(this.start.row=a,this.start.column=b)},this.setEnd=function(a,b){typeof a=="object"?(this.end.column=a.column,this.end.row=a.row):(this.end.row=a,this.end.column=b)},this.inside=function(a,b){return this.compare(a,b)==0?this.isEnd(a,b)||this.isStart(a,b)?!1:!0:!1},this.insideStart=function(a,b){return this.compare(a,b)==0?this.isEnd(a,b)?!1:!0:!1},this.insideEnd=function(a,b){return this.compare(a,b)==0?this.isStart(a,b)?!1:!0:!1},this.compare=function(a,b){return!this.isMultiLine()&&a===this.start.row?b<this.start.column?-1:b>this.end.column?1:0:a<this.start.row?-1:a>this.end.row?1:this.start.row===a?b>=this.start.column?0:-1:this.end.row===a?b<=this.end.column?0:1:0},this.compareStart=function(a,b){return this.start.row==a&&this.start.column==b?-1:this.compare(a,b)},this.compareEnd=function(a,b){return this.end.row==a&&this.end.column==b?1:this.compare(a,b)},this.compareInside=function(a,b){return this.end.row==a&&this.end.column==b?1:this.start.row==a&&this.start.column==b?-1:this.compare(a,b)},this.clipRows=function(a,b){if(this.end.row>b)var c={row:b+1,column:0};if(this.start.row>b)var e={row:b+1,column:0};if(this.start.row<a)var e={row:a,column:0};if(this.end.row<a)var c={row:a,column:0};return d.fromPoints(e||this.start,c||this.end)},this.extend=function(a,b){var c=this.compare(a,b);if(c==0)return this;if(c==-1)var e={row:a,column:b};else var f={row:a,column:b};return d.fromPoints(e||this.start,f||this.end)},this.isEmpty=function(){return this.start.row==this.end.row&&this.start.column==this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return d.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new d(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new d(this.start.row,0,this.end.row,0)},this.toScreenRange=function(a){var b=a.documentToScreenPosition(this.start),c=a.documentToScreenPosition(this.end);return new d(b.row,b.column,c.row,c.column)}})).call(d.prototype),d.fromPoints=function(a,b){return new d(a.row,a.column,b.row,b.column)},b.Range=d}),define("ace/mode/text",["require","exports","module","ace/tokenizer","ace/mode/text_highlight_rules","ace/mode/behaviour","ace/unicode"],function(a,b,c){"use strict";var d=a("../tokenizer").Tokenizer,e=a("./text_highlight_rules").TextHighlightRules,f=a("./behaviour").Behaviour,g=a("../unicode"),h=function(){this.$tokenizer=new d((new e).getRules()),this.$behaviour=new f};((function(){this.tokenRe=new RegExp("^["+g.packages.L+g.packages.Mn+g.packages.Mc+g.packages.Nd+g.packages.Pc+"\\$_]+","g"),this.nonTokenRe=new RegExp("^(?:[^"+g.packages.L+g.packages.Mn+g.packages.Mc+g.packages.Nd+g.packages.Pc+"\\$_]|s])+","g"),this.getTokenizer=function(){return this.$tokenizer},this.toggleCommentLines=function(a,b,c,d){},this.getNextLineIndent=function(a,b,c){return""},this.checkOutdent=function(a,b,c){return!1},this.autoOutdent=function(a,b,c){},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""},this.createWorker=function(a){return null},this.highlightSelection=function(a){var b=a.session;b.$selectionOccurrences||(b.$selectionOccurrences=[]),b.$selectionOccurrences.length&&this.clearSelectionHighlight(a);var c=a.getSelectionRange();if(c.isEmpty()||c.isMultiLine())return;var d=c.start.column-1,e=c.end.column+1,f=b.getLine(c.start.row),g=f.length,h=f.substring(Math.max(d,0),Math.min(e,g));if(d>=0&&/^[\w\d]/.test(h)||e<=g&&/[\w\d]$/.test(h))return;h=f.substring(c.start.column,c.end.column);if(!/^[\w\d]+$/.test(h))return;var i=a.getCursorPosition(),j={wrap:!0,wholeWord:!0,caseSensitive:!0,needle:h},k=a.$search.getOptions();a.$search.set(j);var l=a.$search.findAll(b);l.forEach(function(a){if(!a.contains(i.row,i.column)){var c=b.addMarker(a,"ace_selected_word","text");b.$selectionOccurrences.push(c)}}),a.$search.set(k)},this.clearSelectionHighlight=function(a){if(!a.session.$selectionOccurrences)return;a.session.$selectionOccurrences.forEach(function(b){a.session.removeMarker(b)}),a.session.$selectionOccurrences=[]},this.createModeDelegates=function(a){if(!this.$embeds)return;this.$modes={};for(var b=0;b<this.$embeds.length;b++)a[this.$embeds[b]]&&(this.$modes[this.$embeds[b]]=new a[this.$embeds[b]]);var c=["toggleCommentLines","getNextLineIndent","checkOutdent","autoOutdent","transformAction"];for(var b=0;b<c.length;b++)(function(a){var d=c[b],e=a[d];a[c[b]]=function(){return this.$delegator(d,arguments,e)}})(this)},this.$delegator=function(a,b,c){var d=b[0];for(var e=0;e<this.$embeds.length;e++){if(!this.$modes[this.$embeds[e]])continue;var f=d.split(this.$embeds[e]);if(!f[0]&&f[1]){b[0]=f[1];var g=this.$modes[this.$embeds[e]];return g[a].apply(g,b)}}var h=c.apply(this,b);return c?h:undefined},this.transformAction=function(a,b,c,d,e){if(this.$behaviour){var f=this.$behaviour.getBehaviours();for(var g in f)if(f[g][b]){var h=f[g][b].apply(this,arguments);if(h)return h}}}})).call(h.prototype),b.Mode=h}),define("ace/tokenizer",["require","exports","module"],function(a,b,c){"use strict";var d=function(a,b){b=b?"g"+b:"g",this.rules=a,this.regExps={},this.matchMappings={};for(var c in this.rules){var d=this.rules[c],e=d,f=[],g=0,h=this.matchMappings[c]={};for(var i=0;i<e.length;i++){var j=(new RegExp("(?:("+e[i].regex+")|(.))")).exec("a").length-2,k=e[i].regex.replace(/\\([0-9]+)/g,function(a,b){return"\\"+(parseInt(b,10)+g+1)});h[g]={rule:i,len:j},g+=j,f.push(k)}this.regExps[c]=new RegExp("(?:("+f.join(")|(")+")|(.))",b)}};((function(){this.getLineTokens=function(a,b){var c=b,d=this.rules[c],e=this.matchMappings[c],f=this.regExps[c];f.lastIndex=0;var g,h=[],i=0,j={type:null,value:""};while(g=f.exec(a)){var k="text",l=null,m=[g[0]];for(var n=0;n<g.length-2;n++)if(g[n+1]!==undefined){l=d[e[n].rule],e[n].len>1&&(m=g.slice(n+2,n+1+e[n].len)),typeof l.token=="function"?k=l.token.apply(this,m):k=l.token;var o=l.next;o&&o!==c&&(c=o,d=this.rules[c],e=this.matchMappings[c],i=f.lastIndex,f=this.regExps[c],f.lastIndex=i);break}if(m[0]){typeof k=="string"&&(m=[m.join("")],k=[k]);for(var n=0;n<m.length;n++)(!l||l.merge||k[n]==="text")&&j.type===k[n]?j.value+=m[n]:(j.type&&h.push(j),j={type:k[n],value:m[n]})}if(i==a.length)break;i=f.lastIndex}return j.type&&h.push(j),{tokens:h,state:c}}})).call(d.prototype),b.Tokenizer=d}),define("ace/mode/text_highlight_rules",["require","exports","module","ace/lib/lang"],function(a,b,c){"use strict";var d=a("../lib/lang"),e=function(){this.$rules={start:[{token:"empty_line",regex:"^$"},{token:"text",regex:".+"}]}};((function(){this.addRules=function(a,b){for(var c in a){var d=a[c];for(var e=0;e<d.length;e++){var f=d[e];f.next?f.next=b+f.next:f.next=b+c}this.$rules[b+c]=d}},this.getRules=function(){return this.$rules},this.embedRules=function(a,b,c,e){var f=(new a).getRules();if(e)for(var g=0;g<e.length;g++)e[g]=b+e[g];else{e=[];for(var h in f)e.push(b+h)}this.addRules(f,b);for(var g=0;g<e.length;g++)Array.prototype.unshift.apply(this.$rules[e[g]],d.deepCopy(c));this.$embeds||(this.$embeds=[]),this.$embeds.push(b)},this.getEmbeds=function(){return this.$embeds}})).call(e.prototype),b.TextHighlightRules=e}),define("ace/mode/behaviour",["require","exports","module"],function(a,b,c){"use strict";var d=function(){this.$behaviours={}};((function(){this.add=function(a,b,c){switch(undefined){case this.$behaviours:this.$behaviours={};case this.$behaviours[a]:this.$behaviours[a]={}}this.$behaviours[a][b]=c},this.addBehaviours=function(a){for(var b in a)for(var c in a[b])this.add(b,c,a[b][c])},this.remove=function(a){this.$behaviours&&this.$behaviours[a]&&delete this.$behaviours[a]},this.inherit=function(a,b){if(typeof a=="function")var c=(new a).getBehaviours(b);else var c=a.getBehaviours(b);this.addBehaviours(c)},this.getBehaviours=function(a){if(!a)return this.$behaviours;var b={};for(var c=0;c<a.length;c++)this.$behaviours[a[c]]&&(b[a[c]]=this.$behaviours[a[c]]);return b}})).call(d.prototype),b.Behaviour=d}),define("ace/unicode",["require","exports","module"],function(a,b,c){function d(a){var c=/\w{4}/g;for(var d in a)b.packages[d]=a[d].replace(c,"\\u$&")}"use strict",b.packages={},d({L:"0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05250531-055605590561-058705D0-05EA05F0-05F20621-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280904-0939093D09500958-0961097109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510D0-10FA10FC1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541AA71B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF11D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209421022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E218321842C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2D00-2D252D30-2D652D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2E2F300530063031-3035303B303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A65FA662-A66EA67F-A697A6A0-A6E5A717-A71FA722-A788A78BA78CA7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2A9CFAA00-AA28AA40-AA42AA44-AA4BAA60-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADB-AADDABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC",Ll:"0061-007A00AA00B500BA00DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02AF037103730377037B-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F0521052305250561-05871D00-1D2B1D62-1D771D79-1D9A1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF7210A210E210F2113212F21342139213C213D2146-2149214E21842C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7C2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2D00-2D25A641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76FA771-A778A77AA77CA77FA781A783A785A787A78CFB00-FB06FB13-FB17FF41-FF5A",Lu:"0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E0520052205240531-055610A0-10C51E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F214521832C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CEDA640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BFF21-FF3A",Lt:"01C501C801CB01F21F88-1F8F1F98-1F9F1FA8-1FAF1FBC1FCC1FFC",Lm:"02B0-02C102C6-02D102E0-02E402EC02EE0374037A0559064006E506E607F407F507FA081A0824082809710E460EC610FC17D718431AA71C78-1C7D1D2C-1D611D781D9B-1DBF2071207F2090-20942C7D2D6F2E2F30053031-3035303B309D309E30FC-30FEA015A4F8-A4FDA60CA67FA717-A71FA770A788A9CFAA70AADDFF70FF9EFF9F",Lo:"01BB01C0-01C3029405D0-05EA05F0-05F20621-063F0641-064A066E066F0671-06D306D506EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA0800-08150904-0939093D09500958-096109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E450E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10D0-10FA1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317DC1820-18421844-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C771CE9-1CEC1CEE-1CF12135-21382D30-2D652D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE3006303C3041-3096309F30A1-30FA30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A014A016-A48CA4D0-A4F7A500-A60BA610-A61FA62AA62BA66EA6A0-A6E5A7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2AA00-AA28AA40-AA42AA44-AA4BAA60-AA6FAA71-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADBAADCABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF66-FF6FFF71-FF9DFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC",M:"0300-036F0483-04890591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DE-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0903093C093E-094E0951-0955096209630981-098309BC09BE-09C409C709C809CB-09CD09D709E209E30A01-0A030A3C0A3E-0A420A470A480A4B-0A4D0A510A700A710A750A81-0A830ABC0ABE-0AC50AC7-0AC90ACB-0ACD0AE20AE30B01-0B030B3C0B3E-0B440B470B480B4B-0B4D0B560B570B620B630B820BBE-0BC20BC6-0BC80BCA-0BCD0BD70C01-0C030C3E-0C440C46-0C480C4A-0C4D0C550C560C620C630C820C830CBC0CBE-0CC40CC6-0CC80CCA-0CCD0CD50CD60CE20CE30D020D030D3E-0D440D46-0D480D4A-0D4D0D570D620D630D820D830DCA0DCF-0DD40DD60DD8-0DDF0DF20DF30E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F3E0F3F0F71-0F840F860F870F90-0F970F99-0FBC0FC6102B-103E1056-1059105E-10601062-10641067-106D1071-10741082-108D108F109A-109D135F1712-17141732-1734175217531772177317B6-17D317DD180B-180D18A91920-192B1930-193B19B0-19C019C819C91A17-1A1B1A55-1A5E1A60-1A7C1A7F1B00-1B041B34-1B441B6B-1B731B80-1B821BA1-1BAA1C24-1C371CD0-1CD21CD4-1CE81CED1CF21DC0-1DE61DFD-1DFF20D0-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66F-A672A67CA67DA6F0A6F1A802A806A80BA823-A827A880A881A8B4-A8C4A8E0-A8F1A926-A92DA947-A953A980-A983A9B3-A9C0AA29-AA36AA43AA4CAA4DAA7BAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE3-ABEAABECABEDFB1EFE00-FE0FFE20-FE26",Mn:"0300-036F0483-04870591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DF-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0902093C0941-0948094D0951-095509620963098109BC09C1-09C409CD09E209E30A010A020A3C0A410A420A470A480A4B-0A4D0A510A700A710A750A810A820ABC0AC1-0AC50AC70AC80ACD0AE20AE30B010B3C0B3F0B41-0B440B4D0B560B620B630B820BC00BCD0C3E-0C400C46-0C480C4A-0C4D0C550C560C620C630CBC0CBF0CC60CCC0CCD0CE20CE30D41-0D440D4D0D620D630DCA0DD2-0DD40DD60E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F71-0F7E0F80-0F840F860F870F90-0F970F99-0FBC0FC6102D-10301032-10371039103A103D103E10581059105E-10601071-1074108210851086108D109D135F1712-17141732-1734175217531772177317B7-17BD17C617C9-17D317DD180B-180D18A91920-19221927192819321939-193B1A171A181A561A58-1A5E1A601A621A65-1A6C1A73-1A7C1A7F1B00-1B031B341B36-1B3A1B3C1B421B6B-1B731B801B811BA2-1BA51BA81BA91C2C-1C331C361C371CD0-1CD21CD4-1CE01CE2-1CE81CED1DC0-1DE61DFD-1DFF20D0-20DC20E120E5-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66FA67CA67DA6F0A6F1A802A806A80BA825A826A8C4A8E0-A8F1A926-A92DA947-A951A980-A982A9B3A9B6-A9B9A9BCAA29-AA2EAA31AA32AA35AA36AA43AA4CAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE5ABE8ABEDFB1EFE00-FE0FFE20-FE26",Mc:"0903093E-09400949-094C094E0982098309BE-09C009C709C809CB09CC09D70A030A3E-0A400A830ABE-0AC00AC90ACB0ACC0B020B030B3E0B400B470B480B4B0B4C0B570BBE0BBF0BC10BC20BC6-0BC80BCA-0BCC0BD70C01-0C030C41-0C440C820C830CBE0CC0-0CC40CC70CC80CCA0CCB0CD50CD60D020D030D3E-0D400D46-0D480D4A-0D4C0D570D820D830DCF-0DD10DD8-0DDF0DF20DF30F3E0F3F0F7F102B102C10311038103B103C105610571062-10641067-106D108310841087-108C108F109A-109C17B617BE-17C517C717C81923-19261929-192B193019311933-193819B0-19C019C819C91A19-1A1B1A551A571A611A631A641A6D-1A721B041B351B3B1B3D-1B411B431B441B821BA11BA61BA71BAA1C24-1C2B1C341C351CE11CF2A823A824A827A880A881A8B4-A8C3A952A953A983A9B4A9B5A9BAA9BBA9BD-A9C0AA2FAA30AA33AA34AA4DAA7BABE3ABE4ABE6ABE7ABE9ABEAABEC",Me:"0488048906DE20DD-20E020E2-20E4A670-A672",N:"0030-003900B200B300B900BC-00BE0660-066906F0-06F907C0-07C90966-096F09E6-09EF09F4-09F90A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BF20C66-0C6F0C78-0C7E0CE6-0CEF0D66-0D750E50-0E590ED0-0ED90F20-0F331040-10491090-10991369-137C16EE-16F017E0-17E917F0-17F91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C5920702074-20792080-20892150-21822185-21892460-249B24EA-24FF2776-27932CFD30073021-30293038-303A3192-31953220-32293251-325F3280-328932B1-32BFA620-A629A6E6-A6EFA830-A835A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19",Nd:"0030-00390660-066906F0-06F907C0-07C90966-096F09E6-09EF0A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BEF0C66-0C6F0CE6-0CEF0D66-0D6F0E50-0E590ED0-0ED90F20-0F291040-10491090-109917E0-17E91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C59A620-A629A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19",Nl:"16EE-16F02160-21822185-218830073021-30293038-303AA6E6-A6EF",No:"00B200B300B900BC-00BE09F4-09F90BF0-0BF20C78-0C7E0D70-0D750F2A-0F331369-137C17F0-17F920702074-20792080-20892150-215F21892460-249B24EA-24FF2776-27932CFD3192-31953220-32293251-325F3280-328932B1-32BFA830-A835",P:"0021-00230025-002A002C-002F003A003B003F0040005B-005D005F007B007D00A100AB00B700BB00BF037E0387055A-055F0589058A05BE05C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F3A-0F3D0F850FD0-0FD4104A-104F10FB1361-13681400166D166E169B169C16EB-16ED1735173617D4-17D617D8-17DA1800-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD32010-20272030-20432045-20512053-205E207D207E208D208E2329232A2768-277527C527C627E6-27EF2983-299829D8-29DB29FC29FD2CF9-2CFC2CFE2CFF2E00-2E2E2E302E313001-30033008-30113014-301F3030303D30A030FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFD3EFD3FFE10-FE19FE30-FE52FE54-FE61FE63FE68FE6AFE6BFF01-FF03FF05-FF0AFF0C-FF0FFF1AFF1BFF1FFF20FF3B-FF3DFF3FFF5BFF5DFF5F-FF65",Pd:"002D058A05BE140018062010-20152E172E1A301C303030A0FE31FE32FE58FE63FF0D",Ps:"0028005B007B0F3A0F3C169B201A201E2045207D208D23292768276A276C276E27702772277427C527E627E827EA27EC27EE2983298529872989298B298D298F299129932995299729D829DA29FC2E222E242E262E283008300A300C300E3010301430163018301A301DFD3EFE17FE35FE37FE39FE3BFE3DFE3FFE41FE43FE47FE59FE5BFE5DFF08FF3BFF5BFF5FFF62",Pe:"0029005D007D0F3B0F3D169C2046207E208E232A2769276B276D276F27712773277527C627E727E927EB27ED27EF298429862988298A298C298E2990299229942996299829D929DB29FD2E232E252E272E293009300B300D300F3011301530173019301B301E301FFD3FFE18FE36FE38FE3AFE3CFE3EFE40FE42FE44FE48FE5AFE5CFE5EFF09FF3DFF5DFF60FF63",Pi:"00AB2018201B201C201F20392E022E042E092E0C2E1C2E20",Pf:"00BB2019201D203A2E032E052E0A2E0D2E1D2E21",Pc:"005F203F20402054FE33FE34FE4D-FE4FFF3F",Po:"0021-00230025-0027002A002C002E002F003A003B003F0040005C00A100B700BF037E0387055A-055F058905C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F850FD0-0FD4104A-104F10FB1361-1368166D166E16EB-16ED1735173617D4-17D617D8-17DA1800-18051807-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD3201620172020-20272030-2038203B-203E2041-20432047-205120532055-205E2CF9-2CFC2CFE2CFF2E002E012E06-2E082E0B2E0E-2E162E182E192E1B2E1E2E1F2E2A-2E2E2E302E313001-3003303D30FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFE10-FE16FE19FE30FE45FE46FE49-FE4CFE50-FE52FE54-FE57FE5F-FE61FE68FE6AFE6BFF01-FF03FF05-FF07FF0AFF0CFF0EFF0FFF1AFF1BFF1FFF20FF3CFF61FF64FF65",S:"0024002B003C-003E005E0060007C007E00A2-00A900AC00AE-00B100B400B600B800D700F702C2-02C502D2-02DF02E5-02EB02ED02EF-02FF03750384038503F604820606-0608060B060E060F06E906FD06FE07F609F209F309FA09FB0AF10B700BF3-0BFA0C7F0CF10CF20D790E3F0F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-139917DB194019E0-19FF1B61-1B6A1B74-1B7C1FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE20442052207A-207C208A-208C20A0-20B8210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B2140-2144214A-214D214F2190-2328232B-23E82400-24262440-244A249C-24E92500-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE27C0-27C427C7-27CA27CC27D0-27E527F0-29822999-29D729DC-29FB29FE-2B4C2B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F309B309C319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A700-A716A720A721A789A78AA828-A82BA836-A839AA77-AA79FB29FDFCFDFDFE62FE64-FE66FE69FF04FF0BFF1C-FF1EFF3EFF40FF5CFF5EFFE0-FFE6FFE8-FFEEFFFCFFFD",Sm:"002B003C-003E007C007E00AC00B100D700F703F60606-060820442052207A-207C208A-208C2140-2144214B2190-2194219A219B21A021A321A621AE21CE21CF21D221D421F4-22FF2308-230B23202321237C239B-23B323DC-23E125B725C125F8-25FF266F27C0-27C427C7-27CA27CC27D0-27E527F0-27FF2900-29822999-29D729DC-29FB29FE-2AFF2B30-2B442B47-2B4CFB29FE62FE64-FE66FF0BFF1C-FF1EFF5CFF5EFFE2FFE9-FFEC",Sc:"002400A2-00A5060B09F209F309FB0AF10BF90E3F17DB20A0-20B8A838FDFCFE69FF04FFE0FFE1FFE5FFE6",Sk:"005E006000A800AF00B400B802C2-02C502D2-02DF02E5-02EB02ED02EF-02FF0375038403851FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE309B309CA700-A716A720A721A789A78AFF3EFF40FFE3",So:"00A600A700A900AE00B000B60482060E060F06E906FD06FE07F609FA0B700BF3-0BF80BFA0C7F0CF10CF20D790F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-1399194019E0-19FF1B61-1B6A1B74-1B7C210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B214A214C214D214F2195-2199219C-219F21A121A221A421A521A7-21AD21AF-21CD21D021D121D321D5-21F32300-2307230C-231F2322-2328232B-237B237D-239A23B4-23DB23E2-23E82400-24262440-244A249C-24E92500-25B625B8-25C025C2-25F72600-266E2670-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE2800-28FF2B00-2B2F2B452B462B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A828-A82BA836A837A839AA77-AA79FDFDFFE4FFE8FFEDFFEEFFFCFFFD",Z:"002000A01680180E2000-200A20282029202F205F3000",Zs:"002000A01680180E2000-200A202F205F3000",Zl:"2028",Zp:"2029",C:"0000-001F007F-009F00AD03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-0605061C061D0620065F06DD070E070F074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17B417B517DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF200B-200F202A-202E2060-206F20722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-F8FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFD-FF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFFBFFFEFFFF",Cc:"0000-001F007F-009F",Cf:"00AD0600-060306DD070F17B417B5200B-200F202A-202E2060-2064206A-206FFEFFFFF9-FFFB",Co:"E000-F8FF",Cs:"D800-DFFF",Cn:"03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-05FF06040605061C061D0620065F070E074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF2065-206920722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-D7FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFDFEFEFF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFF8FFFEFFFF"})}),define("ace/document",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/range","ace/anchor"],function(a,b,c){"use strict";var d=a("./lib/oop"),e=a("./lib/event_emitter").EventEmitter,f=a("./range").Range,g=a("./anchor").Anchor,h=function(a){this.$lines=[],Array.isArray(a)?this.insertLines(0,a):a.length==0?this.$lines=[""]:this.insert({row:0,column:0},a)};((function(){d.implement(this,e),this.setValue=function(a){var b=this.getLength();this.remove(new f(0,0,b,this.getLine(b-1).length)),this.insert({row:0,column:0},a)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(a,b){return new g(this,a,b)},"aaa".split(/a/).length==0?this.$split=function(a){return a.replace(/\r\n|\r/g,"\n").split("\n")}:this.$split=function(a){return a.split(/\r\n|\r|\n/)},this.$detectNewLine=function(a){var b=a.match(/^.*?(\r\n|\r|\n)/m);b?this.$autoNewLine=b[1]:this.$autoNewLine="\n"},this.getNewLineCharacter=function(){switch(this.$newLineMode){case"windows":return"\r\n";case"unix":return"\n";case"auto":return this.$autoNewLine}},this.$autoNewLine="\n",this.$newLineMode="auto",this.setNewLineMode=function(a){if(this.$newLineMode===a)return;this.$newLineMode=a},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(a){return a=="\r\n"||a=="\r"||a=="\n"},this.getLine=function(a){return this.$lines[a]||""},this.getLines=function(a,b){return this.$lines.slice(a,b+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(a){if(a.start.row==a.end.row)return this.$lines[a.start.row].substring(a.start.column,a.end.column);var b=[];return b.push(this.$lines[a.start.row].substring(a.start.column)),b.push.apply(b,this.getLines(a.start.row+1,a.end.row-1)),b.push(this.$lines[a.end.row].substring(0,a.end.column)),b.join(this.getNewLineCharacter())},this.$clipPosition=function(a){var b=this.getLength();return a.row>=b&&(a.row=Math.max(0,b-1),a.column=this.getLine(b-1).length),a},this.insert=function(a,b){if(b.length==0)return a;a=this.$clipPosition(a),this.getLength()<=1&&this.$detectNewLine(b);var c=this.$split(b),d=c.splice(0,1)[0],e=c.length==0?null:c.splice(c.length-1,1)[0];return a=this.insertInLine(a,d),e!==null&&(a=this.insertNewLine(a),a=this.insertLines(a.row,c),a=this.insertInLine(a,e||"")),a},this.insertLines=function(a,b){if(b.length==0)return{row:a,column:0};var c=[a,0];c.push.apply(c,b),this.$lines.splice.apply(this.$lines,c);var d=new f(a,0,a+b.length,0),e={action:"insertLines",range:d,lines:b};return this._emit("change",{data:e}),d.end},this.insertNewLine=function(a){a=this.$clipPosition(a);var b=this.$lines[a.row]||"";this.$lines[a.row]=b.substring(0,a.column),this.$lines.splice(a.row+1,0,b.substring(a.column,b.length));var c={row:a.row+1,column:0},d={action:"insertText",range:f.fromPoints(a,c),text:this.getNewLineCharacter()};return this._emit("change",{data:d}),c},this.insertInLine=function(a,b){if(b.length==0)return a;var c=this.$lines[a.row]||"";this.$lines[a.row]=c.substring(0,a.column)+b+c.substring(a.column);var d={row:a.row,column:a.column+b.length},e={action:"insertText",range:f.fromPoints(a,d),text:b};return this._emit("change",{data:e}),d},this.remove=function(a){a.start=this.$clipPosition(a.start),a.end=this.$clipPosition(a.end);if(a.isEmpty())return a.start;var b=a.start.row,c=a.end.row;if(a.isMultiLine()){var d=a.start.column==0?b:b+1,e=c-1;a.end.column>0&&this.removeInLine(c,0,a.end.column),e>=d&&this.removeLines(d,e),d!=b&&(this.removeInLine(b,a.start.column,this.getLine(b).length),this.removeNewLine(a.start.row))}else this.removeInLine(b,a.start.column,a.end.column);return a.start},this.removeInLine=function(a,b,c){if(b==c)return;var d=new f(a,b,a,c),e=this.getLine(a),g=e.substring(b,c),h=e.substring(0,b)+e.substring(c,e.length);this.$lines.splice(a,1,h);var i={action:"removeText",range:d,text:g};return this._emit("change",{data:i}),d.start},this.removeLines=function(a,b){var c=new f(a,0,b+1,0),d=this.$lines.splice(a,b-a+1),e={action:"removeLines",range:c,nl:this.getNewLineCharacter(),lines:d};return this._emit("change",{data:e}),d},this.removeNewLine=function(a){var b=this.getLine(a),c=this.getLine(a+1),d=new f(a,b.length,a+1,0),e=b+c;this.$lines.splice(a,2,e);var g={action:"removeText",range:d,text:this.getNewLineCharacter()};this._emit("change",{data:g})},this.replace=function(a,b){if(b.length==0&&a.isEmpty())return a.start;if(b==this.getTextRange(a))return a.end;this.remove(a);if(b)var c=this.insert(a.start,b);else c=a.start;return c},this.applyDeltas=function(a){for(var b=0;b<a.length;b++){var c=a[b],d=f.fromPoints(c.range.start,c.range.end);c.action=="insertLines"?this.insertLines(d.start.row,c.lines):c.action=="insertText"?this.insert(d.start,c.text):c.action=="removeLines"?this.removeLines(d.start.row,d.end.row-1):c.action=="removeText"&&this.remove(d)}},this.revertDeltas=function(a){for(var b=a.length-1;b>=0;b--){var c=a[b],d=f.fromPoints(c.range.start,c.range.end);c.action=="insertLines"?this.removeLines(d.start.row,d.end.row-1):c.action=="insertText"?this.remove(d):c.action=="removeLines"?this.insertLines(d.start.row,c.lines):c.action=="removeText"&&this.insert(d.start,c.text)}}})).call(h.prototype),b.Document=h}),define("ace/anchor",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"],function(a,b,c){"use strict";var d=a("./lib/oop"),e=a("./lib/event_emitter").EventEmitter,f=b.Anchor=function(a,b,c){this.document=a,typeof c=="undefined"?this.setPosition(b.row,b.column):this.setPosition(b,c),this.$onChange=this.onChange.bind(this),a.on("change",this.$onChange)};((function(){d.implement(this,e),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.onChange=function(a){var b=a.data,c=b.range;if(c.start.row==c.end.row&&c.start.row!=this.row)return;if(c.start.row>this.row)return;if(c.start.row==this.row&&c.start.column>this.column)return;var d=this.row,e=this.column;b.action==="insertText"?c.start.row===d&&c.start.column<=e?c.start.row===c.end.row?e+=c.end.column-c.start.column:(e-=c.start.column,d+=c.end.row-c.start.row):c.start.row!==c.end.row&&c.start.row<d&&(d+=c.end.row-c.start.row):b.action==="insertLines"?c.start.row<=d&&(d+=c.end.row-c.start.row):b.action=="removeText"?c.start.row==d&&c.start.column<e?c.end.column>=e?e=c.start.column:e=Math.max(0,e-(c.end.column-c.start.column)):c.start.row!==c.end.row&&c.start.row<d?(c.end.row==d&&(e=Math.max(0,e-c.end.column)+c.start.column),d-=c.end.row-c.start.row):c.end.row==d&&(d-=c.end.row-c.start.row,e=Math.max(0,e-c.end.column)+c.start.column):b.action=="removeLines"&&c.start.row<=d&&(c.end.row<=d?d-=c.end.row-c.start.row:(d=c.start.row,e=0)),this.setPosition(d,e,!0)},this.setPosition=function(a,b,c){var d;c?d={row:a,column:b}:d=this.$clipPositionToDocument(a,b);if(this.row==d.row&&this.column==d.column)return;var e={row:this.row,column:this.column};this.row=d.row,this.column=d.column,this._emit("change",{old:e,value:d})},this.detach=function(){this.document.removeEventListener("change",this.$onChange)},this.$clipPositionToDocument=function(a,b){var c={};return a>=this.document.getLength()?(c.row=Math.max(0,this.document.getLength()-1),c.column=this.document.getLine(c.row).length):a<0?(c.row=0,c.column=0):(c.row=a,c.column=Math.min(this.document.getLine(c.row).length,Math.max(0,b))),b<0&&(c.column=0),c}})).call(f.prototype)}),define("ace/background_tokenizer",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"],function(a,b,c){"use strict";var d=a("./lib/oop"),e=a("./lib/event_emitter").EventEmitter,f=function(a,b){this.running=!1,this.lines=[],this.currentLine=0,this.tokenizer=a;var c=this;this.$worker=function(){if(!c.running)return;var a=new Date,b=c.currentLine,d=c.doc,e=0,f=d.getLength();while(c.currentLine<f){c.lines[c.currentLine]=c.$tokenizeRows(c.currentLine,c.currentLine)[0],c.currentLine++,e+=1;if(e%5==0&&new Date-a>20){c.fireUpdateEvent(b,c.currentLine-1),c.running=setTimeout(c.$worker,20);return}}c.running=!1,c.fireUpdateEvent(b,f-1)}};((function(){d.implement(this,e),this.setTokenizer=function(a){this.tokenizer=a,this.lines=[],this.start(0)},this.setDocument=function(a){this.doc=a,this.lines=[],this.stop()},this.fireUpdateEvent=function(a,b){var c={first:a,last:b};this._emit("update",{data:c})},this.start=function(a){this.currentLine=Math.min(a||0,this.currentLine,this.doc.getLength()),this.lines.splice(this.currentLine,this.lines.length),this.stop(),this.running=setTimeout(this.$worker,700)},this.stop=function(){this.running&&clearTimeout(this.running),this.running=!1},this.getTokens=function(a,b){return this.$tokenizeRows(a,b)},this.getState=function(a){return this.$tokenizeRows(a,a)[0].state},this.$tokenizeRows=function(a,b){if(!this.doc||isNaN(a)||isNaN(b))return[{state:"start",tokens:[]}];var c=[],d="start",e=!1;a>0&&this.lines[a-1]?(d=this.lines[a-1].state,e=!0):a==0?(d="start",e=!0):this.lines.length>0&&(d=this.lines[this.lines.length-1].state);var f=this.doc.getLines(a,b);for(var g=a;g<=b;g++)if(!this.lines[g]){var h=this.tokenizer.getLineTokens(f[g-a]||"",d),d=h.state;c.push(h),e&&(this.lines[g]=h)}else{var h=this.lines[g];d=h.state,c.push(h)}return c}})).call(f.prototype),b.BackgroundTokenizer=f}),define("ace/edit_session/folding",["require","exports","module","ace/range","ace/edit_session/fold_line","ace/edit_session/fold","ace/token_iterator"],function(a,b,c){function h(){this.getFoldAt=function(a,b,c){var d=this.getFoldLine(a);if(!d)return null;var e=d.folds;for(var f=0;f<e.length;f++){var g=e[f];if(g.range.contains(a,b)){if(c==1&&g.range.isEnd(a,b))continue;if(c==-1&&g.range.isStart(a,b))continue;return g}}},this.getFoldsInRange=function(a){a=a.clone();var b=a.start,c=a.end,d=this.$foldData,e=[];b.column+=1,c.column-=1;for(var f=0;f<d.length;f++){var g=d[f].range.compareRange(a);if(g==2)continue;if(g==-2)break;var h=d[f].folds;for(var i=0;i<h.length;i++){var j=h[i];g=j.range.compareRange(a);if(g==-2)break;if(g==2)continue;if(g==42)break;e.push(j)}}return e},this.getAllFolds=function(){function c(b){a.push(b);if(!b.subFolds)return;for(var d=0;d<b.subFolds.length;d++)c(b.subFolds[d])}var a=[],b=this.$foldData;for(var d=0;d<b.length;d++)for(var e=0;e<b[d].folds.length;e++)c(b[d].folds[e]);return a},this.getFoldStringAt=function(a,b,c,d){d=d||this.getFoldLine(a);if(!d)return null;var e={end:{column:0}},f,g;for(var h=0;h<d.folds.length;h++){g=d.folds[h];var i=g.range.compareEnd(a,b);if(i==-1){f=this.getLine(g.start.row).substring(e.end.column,g.start.column);break}if(i===0)return null;e=g}return f||(f=this.getLine(g.start.row).substring(e.end.column)),c==-1?f.substring(0,b-e.end.column):c==1?f.substring(b-e.end.column):f},this.getFoldLine=function(a,b){var c=this.$foldData,d=0;b&&(d=c.indexOf(b)),d==-1&&(d=0);for(d;d<c.length;d++){var e=c[d];if(e.start.row<=a&&e.end.row>=a)return e;if(e.end.row>a)return null}return null},this.getNextFoldLine=function(a,b){var c=this.$foldData,d=0;b&&(d=c.indexOf(b)),d==-1&&(d=0);for(d;d<c.length;d++){var e=c[d];if(e.end.row>=a)return e}return null},this.getFoldedRowCount=function(a,b){var c=this.$foldData,d=b-a+1;for(var e=0;e<c.length;e++){var f=c[e],g=f.end.row,h=f.start.row;if(g>=b){h<b&&(h>=a?d-=b-h:d=0);break}g>=a&&(h>=a?d-=g-h:d-=g-a+1)}return d},this.$addFoldLine=function(a){return this.$foldData.push(a),this.$foldData.sort(function(a,b){return a.start.row-b.start.row}),a},this.addFold=function(a,b){var c=this.$foldData,d=!1,g;a instanceof f?g=a:g=new f(b,a),this.$clipRangeToDocument(g.range);var h=g.start.row,i=g.start.column,j=g.end.row,k=g.end.column;if(g.placeholder.length<2)throw"Placeholder has to be at least 2 characters";if(h==j&&k-i<2)throw"The range has to be at least 2 characters width";var l=this.getFoldAt(h,i,1),m=this.getFoldAt(j,k,-1);if(l&&m==l)return l.addSubFold(g);if(l&&!l.range.isStart(h,i)||m&&!m.range.isEnd(j,k))throw"A fold can't intersect already existing fold"+g.range+l.range;var n=this.getFoldsInRange(g.range);n.length>0&&(this.removeFolds(n),g.subFolds=n);for(var o=0;o<c.length;o++){var p=c[o];if(j==p.start.row){p.addFold(g),d=!0;break}if(h==p.end.row){p.addFold(g),d=!0;if(!g.sameRow){var q=c[o+1];if(q&&q.start.row==j){p.merge(q);break}}break}if(j<=p.start.row)break}return d||(p=this.$addFoldLine(new e(this.$foldData,g))),this.$useWrapMode&&this.$updateWrapData(p.start.row,p.start.row),this.$modified=!0,this._emit("changeFold",{data:g}),g},this.addFolds=function(a){a.forEach(function(a){this.addFold(a)},this)},this.removeFold=function(a){var b=a.foldLine,c=b.start.row,d=b.end.row,e=this.$foldData,f=b.folds;if(f.length==1)e.splice(e.indexOf(b),1);else if(b.range.isEnd(a.end.row,a.end.column))f.pop(),b.end.row=f[f.length-1].end.row,b.end.column=f[f.length-1].end.column;else if(b.range.isStart(a.start.row,a.start.column))f.shift(),b.start.row=f[0].start.row,b.start.column=f[0].start.column;else if(a.sameRow)f.splice(f.indexOf(a),1);else{var g=b.split(a.start.row,a.start.column);f=g.folds,f.shift(),g.start.row=f[0].start.row,g.start.column=f[0].start.column}this.$useWrapMode&&this.$updateWrapData(c,d),this.$modified=!0,this._emit("changeFold",{data:a})},this.removeFolds=function(a){var b=[];for(var c=0;c<a.length;c++)b.push(a[c]);b.forEach(function(a){this.removeFold(a)},this),this.$modified=!0},this.expandFold=function(a){this.removeFold(a),a.subFolds.forEach(function(a){this.addFold(a)},this),a.subFolds=[]},this.expandFolds=function(a){a.forEach(function(a){this.expandFold(a)},this)},this.unfold=function(a,b){var c,e;a==null?c=new d(0,0,this.getLength(),0):typeof a=="number"?c=new d(a,0,a,this.getLine(a).length):"row"in a?c=d.fromPoints(a,a):c=a,e=this.getFoldsInRange(c);if(b)this.removeFolds(e);else while(e.length)this.expandFolds(e),e=this.getFoldsInRange(c)},this.isRowFolded=function(a,b){return!!this.getFoldLine(a,b)},this.getRowFoldEnd=function(a,b){var c=this.getFoldLine(a,b);return c?c.end.row:a},this.getFoldDisplayLine=function(a,b,c,d,e){d==null&&(d=a.start.row,e=0),b==null&&(b=a.end.row,c=this.getLine(b).length);var f=this.doc,g="";return a.walk(function(a,b,c,h){if(b<d)return;if(b==d){if(c<e)return;h=Math.max(e,h)}a?g+=a:g+=f.getLine(b).substring(h,c)}.bind(this),b,c),g},this.getDisplayLine=function(a,b,c,d){var e=this.getFoldLine(a);if(!e){var f;return f=this.doc.getLine(a),f.substring(d||0,b||f.length)}return this.getFoldDisplayLine(e,a,b,c,d)},this.$cloneFoldData=function(){var a=[];return a=this.$foldData.map(function(b){var c=b.folds.map(function(a){return a.clone()});return new e(a,c)}),a},this.toggleFold=function(a){var b=this.selection,c=b.getRange(),d,e;if(c.isEmpty()){var f=c.start;d=this.getFoldAt(f.row,f.column);if(d){this.expandFold(d);return}(e=this.findMatchingBracket(f))?c.comparePoint(e)==1?c.end=e:(c.start=e,c.start.column++,c.end.column--):(e=this.findMatchingBracket({row:f.row,column:f.column+1}))?(c.comparePoint(e)==1?c.end=e:c.start=e,c.start.column++):c=this.getCommentFoldRange(f.row,f.column)||c}else{var g=this.getFoldsInRange(c);if(a&&g.length){this.expandFolds(g);return}g.length==1&&(d=g[0])}d||(d=this.getFoldAt(c.start.row,c.start.column));if(d&&d.range.toString()==c.toString()){this.expandFold(d);return}var h="...";if(!c.isMultiLine()){h=this.getTextRange(c);if(h.length<4)return;h=h.trim().substring(0,2)+".."}this.addFold(h,c)},this.getCommentFoldRange=function(a,b){var c=new g(this,a,b),e=c.getCurrentToken();if(e&&/^comment|string/.test(e.type)){var f=new d,h=new RegExp(e.type.replace(/\..*/,"\\."));do e=c.stepBackward();while(e&&h.test(e.type));c.stepForward(),f.start.row=c.getCurrentTokenRow(),f.start.column=c.getCurrentTokenColumn()+2,c=new g(this,a,b);do e=c.stepForward();while(e&&h.test(e.type));return e=c.stepBackward(),f.end.row=c.getCurrentTokenRow(),f.end.column=c.getCurrentTokenColumn()+e.value.length,f}},this.foldAll=function(a,b){var c=this.foldWidgets;b=b||c.length;for(var d=a||0;d<b;d++){c[d]==null&&(c[d]=this.getFoldWidget(d));if(c[d]!="start")continue;var e=this.getFoldWidgetRange(d);if(e&&e.end.row<b)try{this.addFold("...",e)}catch(f){}}},this.$foldStyles={manual:1,markbegin:1,markbeginend:1},this.$foldStyle="markbegin",this.setFoldStyle=function(a){if(!this.$foldStyles[a])throw new Error("invalid fold style: "+a+"["+Object.keys(this.$foldStyles).join(", ")+"]");if(this.$foldStyle==a)return;this.$foldStyle=a,a=="manual"&&this.unfold();var b=this.$foldMode;this.$setFolding(null),this.$setFolding(b)},this.$setFolding=function(a){if(this.$foldMode==a)return;this.$foldMode=a,this.removeListener("change",this.$updateFoldWidgets),this._emit("changeAnnotation");if(!a||this.$foldStyle=="manual"){this.foldWidgets=null;return}this.foldWidgets=[],this.getFoldWidget=a.getFoldWidget.bind(a,this,this.$foldStyle),this.getFoldWidgetRange=a.getFoldWidgetRange.bind(a,this,this.$foldStyle),this.$updateFoldWidgets=this.updateFoldWidgets.bind(this),this.on("change",this.$updateFoldWidgets)},this.onFoldWidgetClick=function(a,b){var c=this.getFoldWidget(a),d=this.getLine(a),e=b.shiftKey,f=e||b.ctrlKey||b.altKey||b.metaKey,g;c=="end"?g=this.getFoldAt(a,0,-1):g=this.getFoldAt(a,d.length,1);if(g){f?this.removeFold(g):this.expandFold(g);return}var h=this.getFoldWidgetRange(a);if(h){if(!h.isMultiLine()){g=this.getFoldAt(h.start.row,h.start.column,1);if(g&&h.isEequal(g.range)){this.removeFold(g);return}}e||this.addFold("...",h),f&&this.foldAll(h.start.row+1,h.end.row)}else f&&this.foldAll(a+1,this.getLength()),b.target.className+=" invalid"},this.updateFoldWidgets=function(a){var b=a.data,c=b.range,d=c.start.row,e=c.end.row-d;if(e===0)this.foldWidgets[d]=null;else if(b.action=="removeText"||b.action=="removeLines")this.foldWidgets.splice(d,e+1,null);else{var f=Array(e+1);f.unshift(d,1),this.foldWidgets.splice.apply(this.foldWidgets,f)}}}"use strict";var d=a("../range").Range,e=a("./fold_line").FoldLine,f=a("./fold").Fold,g=a("../token_iterator").TokenIterator;b.Folding=h}),define("ace/edit_session/fold_line",["require","exports","module","ace/range"],function(a,b,c){function e(a,b){this.foldData=a,Array.isArray(b)?this.folds=b:b=this.folds=[b];var c=b[b.length-1];this.range=new d(b[0].start.row,b[0].start.column,c.end.row,c.end.column),this.start=this.range.start,this.end=this.range.end,this.folds.forEach(function(a){a.setFoldLine(this)},this)}"use strict";var d=a("../range").Range;((function(){this.shiftRow=function(a){this.start.row+=a,this.end.row+=a,this.folds.forEach(function(b){b.start.row+=a,b.end.row+=a})},this.addFold=function(a){if(a.sameRow){if(a.start.row<this.startRow||a.endRow>this.endRow)throw"Can't add a fold to this FoldLine as it has no connection";this.folds.push(a),this.folds.sort(function(a,b){return-a.range.compareEnd(b.start.row,b.start.column)}),this.range.compareEnd(a.start.row,a.start.column)>0?(this.end.row=a.end.row,this.end.column=a.end.column):this.range.compareStart(a.end.row,a.end.column)<0&&(this.start.row=a.start.row,this.start.column=a.start.column)}else if(a.start.row==this.end.row)this.folds.push(a),this.end.row=a.end.row,this.end.column=a.end.column;else if(a.end.row==this.start.row)this.folds.unshift(a),this.start.row=a.start.row,this.start.column=a.start.column;else throw"Trying to add fold to FoldRow that doesn't have a matching row";a.foldLine=this},this.containsRow=function(a){return a>=this.start.row&&a<=this.end.row},this.walk=function(a,b,c){var d=0,e=this.folds,f,g,h,i=!0;b==null&&(b=this.end.row,c=this.end.column);for(var j=0;j<e.length;j++){f=e[j],g=f.range.compareStart(b,c);if(g==-1){a(null,b,c,d,i);return}h=a(null,f.start.row,f.start.column,d,i),h=!h&&a(f.placeholder,f.start.row,f.start.column,d);if(h||g==0)return;i=!f.sameRow,d=f.end.column}a(null,b,c,d,i)},this.getNextFoldTo=function(a,b){var c,d;for(var e=0;e<this.folds.length;e++){c=this.folds[e],d=c.range.compareEnd(a,b);if(d==-1)return{fold:c,kind:"after"};if(d==0)return{fold:c,kind:"inside"}}return null},this.addRemoveChars=function(a,b,c){var d=this.getNextFoldTo(a,b),e,f;if(d){e=d.fold;if(d.kind=="inside"&&e.start.column!=b&&e.start.row!=a)throw"Moving characters inside of a fold should never be reached";if(e.start.row==a){f=this.folds;var g=f.indexOf(e);g==0&&(this.start.column+=c);for(g;g<f.length;g++){e=f[g],e.start.column+=c;if(!e.sameRow)return;e.end.column+=c}this.end.column+=c}}},this.split=function(a,b){var c=this.getNextFoldTo(a,b).fold,d=this.folds,f=this.foldData;if(!c)return null;var g=d.indexOf(c),h=d[g-1];this.end.row=h.end.row,this.end.column=h.end.column,d=d.splice(g,d.length-g);var i=new e(f,d);return f.splice(f.indexOf(this)+1,0,i),i},this.merge=function(a){var b=a.folds;for(var c=0;c<b.length;c++)this.addFold(b[c]);var d=this.foldData;d.splice(d.indexOf(a),1)},this.toString=function(){var a=[this.range.toString()+": ["];return this.folds.forEach(function(b){a.push(" "+b.toString())}),a.push("]"),a.join("\n")},this.idxToPosition=function(a){var b=0,c;for(var d=0;d<this.folds.length;d++){var c=this.folds[d];a-=c.start.column-b;if(a<0)return{row:c.start.row,column:c.start.column+a};a-=c.placeholder.length;if(a<0)return c.start;b=c.end.column}return{row:this.end.row,column:this.end.column+a}}})).call(e.prototype),b.FoldLine=e}),define("ace/edit_session/fold",["require","exports","module"],function(a,b,c){"use strict";var d=b.Fold=function(a,b){this.foldLine=null,this.placeholder=b,this.range=a,this.start=a.start,this.end=a.end,this.sameRow=a.start.row==a.end.row,this.subFolds=[]};((function(){this.toString=function(){return'"'+this.placeholder+'" '+this.range.toString()},this.setFoldLine=function(a){this.foldLine=a,this.subFolds.forEach(function(b){b.setFoldLine(a)})},this.clone=function(){var a=this.range.clone(),b=new d(a,this.placeholder);return this.subFolds.forEach(function(a){b.subFolds.push(a.clone())}),b},this.addSubFold=function(a){if(this.range.isEequal(a))return this;if(!this.range.containsRange(a))throw"A fold can't intersect already existing fold"+a.range+this.range;var b=a.range.start.row,c=a.range.start.column;for(var d=0,e=-1;d<this.subFolds.length;d++){e=this.subFolds[d].range.compare(b,c);if(e!=1)break}var f=this.subFolds[d];if(e==0)return f.addSubFold(a);var b=a.range.end.row,c=a.range.end.column;for(var g=d,e=-1;g<this.subFolds.length;g++){e=this.subFolds[g].range.compare(b,c);if(e!=1)break}var h=this.subFolds[g];if(e==0)throw"A fold can't intersect already existing fold"+a.range+this.range;var i=this.subFolds.splice(d,g-d,a);return a.setFoldLine(this.foldLine),a}})).call(d.prototype)}),define("ace/token_iterator",["require","exports","module"],function(a,b,c){"use strict";var d=function(a,b,c){this.$session=a,this.$row=b,this.$rowTokens=a.getTokens(b,b)[0].tokens;var d=a.getTokenAt(b,c);this.$tokenIndex=d?d.index:-1};((function(){this.stepBackward=function(){this.$tokenIndex-=1;while(this.$tokenIndex<0){this.$row-=1;if(this.$row<0)return this.$row=0,null;this.$rowTokens=this.$session.getTokens(this.$row,this.$row)[0].tokens,this.$tokenIndex=this.$rowTokens.length-1}return this.$rowTokens[this.$tokenIndex]},this.stepForward=function(){var a=this.$session.getLength();this.$tokenIndex+=1;while(this.$tokenIndex>=this.$rowTokens.length){this.$row+=1;if(this.$row>=a)return this.$row=a-1,null;this.$rowTokens=this.$session.getTokens(this.$row,this.$row)[0].tokens,this.$tokenIndex=0}return this.$rowTokens[this.$tokenIndex]},this.getCurrentToken=function(){return this.$rowTokens[this.$tokenIndex]},this.getCurrentTokenRow=function(){return this.$row},this.getCurrentTokenColumn=function(){var a=this.$rowTokens,b=this.$tokenIndex,c=a[b].start;if(c!==undefined)return c;c=0;while(b>0)b-=1,c+=a[b].value.length;return c}})).call(d.prototype),b.TokenIterator=d}),define("ace/edit_session/bracket_match",["require","exports","module","ace/token_iterator"],function(a,b,c){function e(){this.findMatchingBracket=function(a){if(a.column==0)return null;var b=this.getLine(a.row).charAt(a.column-1);if(b=="")return null;var c=b.match(/([\(\[\{])|([\)\]\}])/);return c?c[1]?this.$findClosingBracket(c[1],a):this.$findOpeningBracket(c[2],a):null},this.$brackets={")":"(","(":")","]":"[","[":"]","{":"}","}":"{"},this.$findOpeningBracket=function(a,b){var c=this.$brackets[a],e=1,f=new d(this,b.row,b.column),g=f.getCurrentToken();if(!g)return null;var h=new RegExp("(\\.?"+g.type.replace(".","|").replace("rparen","lparen|rparen")+")+"),i=b.column-f.getCurrentTokenColumn()-2,j=g.value;for(;;){while(i>=0){var k=j.charAt(i);if(k==c){e-=1;if(e==0)return{row:f.getCurrentTokenRow(),column:i+f.getCurrentTokenColumn()}}else k==a&&(e+=1);i-=1}do g=f.stepBackward();while(g&&!h.test(g.type));if(g==null)break;j=g.value,i=j.length-1}return null},this.$findClosingBracket=function(a,b){var c=this.$brackets[a],e=1,f=new d(this,b.row,b.column),g=f.getCurrentToken();if(!g)return null;var h=new RegExp("(\\.?"+g.type.replace(".","|").replace("lparen","lparen|rparen")+")+"),i=b.column-f.getCurrentTokenColumn();for(;;){var j=g.value,k=j.length;while(i<k){var l=j.charAt(i);if(l==c){e-=1;if(e==0)return{row:f.getCurrentTokenRow(),column:i+f.getCurrentTokenColumn()}}else l==a&&(e+=1);i+=1}do g=f.stepForward();while(g&&!h.test(g.type));if(g==null)break;i=0}return null}}"use strict";var d=a("../token_iterator").TokenIterator;b.BracketMatch=e}),define("ace/search",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"],function(a,b,c){"use strict";var d=a("./lib/lang"),e=a("./lib/oop"),f=a("./range").Range,g=function(){this.$options={needle:"",backwards:!1,wrap:!1,caseSensitive:!1,wholeWord:!1,scope:g.ALL,regExp:!1}};g.ALL=1,g.SELECTION=2,function(){this.set=function(a){return e.mixin(this.$options,a),this},this.getOptions=function(){return d.copyObject(this.$options)},this.find=function(a){if(!this.$options.needle)return null;if(this.$options.backwards)var b=this.$backwardMatchIterator(a);else b=this.$forwardMatchIterator(a);var c=null;return b.forEach(function(a){return c=a,!0}),c},this.findAll=function(a){var b=this.$options;if(!b.needle)return[];if(b.backwards)var c=this.$backwardMatchIterator(a);else c=this.$forwardMatchIterator(a);var d=!b.start&&b.wrap&&b.scope==g.ALL;d&&(b.start={row:0,column:0});var e=[];return c.forEach(function(a){e.push(a)}),d&&(b.start=null),e},this.replace=function(a,b){var c=this.$assembleRegExp(),d=c.exec(a);return d&&d[0].length==a.length?this.$options.regExp?a.replace(c,b):b:null},this.$forwardMatchIterator=function(a){var b=this.$assembleRegExp(),c=this;return{forEach:function(d){c.$forwardLineIterator(a).forEach(function(a,e,f){e&&(a=a.substring(e));var g=[];a.replace(b,function(a){var b=arguments[arguments.length-2];return g.push({str:a,offset:e+b}),a});for(var h=0;h<g.length;h++){var i=g[h],j=c.$rangeFromMatch(f,i.offset,i.str.length);if(d(j))return!0}})}}},this.$backwardMatchIterator=function(a){var b=this.$assembleRegExp(),c=this;return{forEach:function(d){c.$backwardLineIterator(a).forEach(function(a,e,f){e&&(a=a.substring(e));var g=[];a.replace(b,function(a,b){return g.push({str:a,offset:e+b}),a});for(var h=g.length-1;h>=0;h--){var i=g[h],j=c.$rangeFromMatch(f,i.offset,i.str.length);if(d(j))return!0}})}}},this.$rangeFromMatch=function(a,b,c){return new f(a,b,a,b+c)},this.$assembleRegExp=function(){if(this.$options.regExp)var a=this.$options.needle;else a=d.escapeRegExp(this.$options.needle);this.$options.wholeWord&&(a="\\b"+a+"\\b");var b="g";this.$options.caseSensitive||(b+="i");var c=new RegExp(a,b);return c},this.$forwardLineIterator=function(a){function k(e){var f=a.getLine(e);return b&&e==c.end.row&&(f=f.substring(0,c.end.column)),j&&e==d.row&&(f=f.substring(0,d.column)),f}var b=this.$options.scope==g.SELECTION,c=this.$options.range||a.getSelection().getRange(),d=this.$options.start||c[b?"start":"end"],e=b?c.start.row:0,f=b?c.start.column:0,h=b?c.end.row:a.getLength()-1,i=this.$options.wrap,j=!1;return{forEach:function(a){var b=d.row,c=k(b),g=d.column,l=!1;j=!1;while(!a(c,g,b)){if(l)return;b++,g=0;if(b>h)if(i)b=e,g=f,j=!0;else return;b==d.row&&(l=!0),c=k(b)}}}},this.$backwardLineIterator=function(a){var b=this.$options.scope==g.SELECTION,c=this.$options.range||a.getSelection().getRange(),d=this.$options.start||c[b?"end":"start"],e=b?c.start.row:0,f=b?c.start.column:0,h=b?c.end.row:a.getLength()-1,i=this.$options.wrap;return{forEach:function(g){var j=d.row,k=a.getLine(j).substring(0,d.column),l=0,m=!1,n=!1;while(!g(k,l,j)){if(m)return;j--,l=0;if(j<e)if(i)j=h,n=!0;else return;j==d.row&&(m=!0),k=a.getLine(j),b&&(j==e?l=f:j==h&&(k=k.substring(0,c.end.column))),n&&j==d.row&&(l=d.column)}}}}}.call(g.prototype),b.Search=g}),define("ace/commands/command_manager",["require","exports","module","ace/lib/keys"],function(a,b,c){"use strict";var d=a("../lib/keys"),e=function(a,b){if(typeof a!="string")throw new TypeError("'platform' argument must be either 'mac' or 'win'");this.platform=a,this.commands={},this.commmandKeyBinding={},b&&b.forEach(this.addCommand,this)};((function(){function a(a,c,e){var f,g=0,h=b(a);for(var i=0,j=h.length;i<j;i++)d.KEY_MODS[h[i]]?g|=d.KEY_MODS[h[i]]:f=h[i]||"-";return{key:f,hashId:g}}function b(a,b){return a.toLowerCase().trim().split(new RegExp("[\\s ]*\\-[\\s ]*","g"),999)}this.addCommand=function(a){this.commands[a.name]&&this.removeCommand(a),this.commands[a.name]=a,a.bindKey&&this._buildKeyHash(a)},this.removeCommand=function(a){var b=typeof a=="string"?a:a.name;a=this.commands[b],delete this.commands[b];var c=this.commmandKeyBinding;for(var d in c)for(var e in c[d])c[d][e]==a&&delete c[d][e]},this.addCommands=function(a){Object.keys(a).forEach(function(b){var c=a[b];if(typeof c=="string")return this.bindKey(c,b);typeof c=="function"&&(c={exec:c}),c.name||(c.name=b),this.addCommand(c)},this)},this.removeCommands=function(a){Object.keys(a).forEach(function(b){this.removeCommand(a[b])},this)},this.bindKey=function(b,c){if(!b)return;var d=this.commmandKeyBinding;b.split("|").forEach(function(b){var e=a(b,c),f=e.hashId;(d[f]||(d[f]={}))[e.key]=c})},this.bindKeys=function(a){Object.keys(a).forEach(function(b){this.bindKey(b,a[b])},this)},this._buildKeyHash=function(a){var b=a.bindKey;if(!b)return;var c=typeof b=="string"?b:b[this.platform];this.bindKey(c,a)},this.findKeyCommand=function c(a,b){typeof b=="number"&&(b=d.keyCodeToString(b));var c=this.commmandKeyBinding;return c[a]&&c[a][b.toLowerCase()]},this.exec=function(a,b,c){return typeof a=="string"&&(a=this.commands[a]),a?b&&b.$readOnly&&!a.readOnly?!1:(a.exec(b,c||{}),!0):!1},this.toggleRecording=function(){if(this.$inReplay)return;return this.recording?(this.macro.pop(),this.exec=this.normal_exec,this.macro.length||(this.macro=this.oldMacro),this.recording=!1):(this.oldMacro=this.macro,this.macro=[],this.normal_exec=this.exec,this.exec=function(a,b,c){return this.macro.push([a,c]),this.normal_exec(a,b,c)},this.recording=!0)},this.replay=function(a){if(this.$inReplay||!this.macro)return;if(this.recording)return this.toggleRecording();try{this.$inReplay=!0,this.macro.forEach(function(b){typeof b=="string"?this.exec(b,a):this.exec(b[0],a,b[1])},this)}finally{this.$inReplay=!1}},this.trimMacro=function(a){return a.map(function(a){return typeof a[0]!="string"&&(a[0]=a[0].name),a[1]||(a=a[0]),a})}})).call(e.prototype),b.CommandManager=e}),define("ace/undomanager",["require","exports","module"],function(a,b,c){"use strict";var d=function(){this.reset()};((function(){this.execute=function(a){var b=a.args[0];this.$doc=a.args[1],this.$undoStack.push(b),this.$redoStack=[]},this.undo=function(a){var b=this.$undoStack.pop(),c=null;return b&&(c=this.$doc.undoChanges(b,a),this.$redoStack.push(b)),c},this.redo=function(a){var b=this.$redoStack.pop(),c=null;return b&&(c=this.$doc.redoChanges(b,a),this.$undoStack.push(b)),c},this.reset=function(){this.$undoStack=[],this.$redoStack=[]},this.hasUndo=function(){return this.$undoStack.length>0},this.hasRedo=function(){return this.$redoStack.length>0}})).call(d.prototype),b.UndoManager=d}),define("ace/virtual_renderer",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/event","ace/lib/useragent","ace/layer/gutter","ace/layer/marker","ace/layer/text","ace/layer/cursor","ace/scrollbar","ace/renderloop","ace/lib/event_emitter","text!ace/css/editor.css"],function(a,b,c){"use strict";var d=a("./lib/oop"),e=a("./lib/dom"),f=a("./lib/event"),g=a("./lib/useragent"),h=a("./layer/gutter").Gutter,i=a("./layer/marker").Marker,j=a("./layer/text").Text,k=a("./layer/cursor").Cursor,l=a("./scrollbar").ScrollBar,m=a("./renderloop").RenderLoop,n=a("./lib/event_emitter").EventEmitter,o=a("text!./css/editor.css");e.importCssString(o,"ace_editor");var p=function(a,b){var c=this;this.container=a,e.addCssClass(a,"ace_editor"),this.setTheme(b),this.$gutter=e.createElement("div"),this.$gutter.className="ace_gutter",this.container.appendChild(this.$gutter),this.scroller=e.createElement("div"),this.scroller.className="ace_scroller",this.container.appendChild(this.scroller),this.content=e.createElement("div"),this.content.className="ace_content",this.scroller.appendChild(this.content),this.$gutterLayer=new h(this.$gutter),this.$gutterLayer.on("changeGutterWidth",this.onResize.bind(this,!0)),this.$markerBack=new i(this.content);var d=this.$textLayer=new j(this.content);this.canvas=d.element,this.$markerFront=new i(this.content),this.characterWidth=d.getCharacterWidth(),this.lineHeight=d.getLineHeight(),this.$cursorLayer=new k(this.content),this.$cursorPadding=8,this.$horizScroll=!0,this.$horizScrollAlwaysVisible=!0,this.scrollBar=new l(a),this.scrollBar.addEventListener("scroll",function(a){c.session.setScrollTop(a.data)}),this.scrollTop=0,this.scrollLeft=0,f.addListener(this.scroller,"scroll",function(){c.session.setScrollLeft(c.scroller.scrollLeft)}),this.cursorPos={row:0,column:0},this.$textLayer.addEventListener("changeCharaterSize",function(){c.characterWidth=d.getCharacterWidth(),c.lineHeight=d.getLineHeight(),c.$updatePrintMargin(),c.onResize(!0),c.$loop.schedule(c.CHANGE_FULL)}),this.$size={width:0,height:0,scrollerHeight:0,scrollerWidth:0},this.layerConfig={width:1,padding:0,firstRow:0,firstRowScreen:0,lastRow:0,lineHeight:1,characterWidth:1,minHeight:1,maxHeight:1,offset:0,height:1},this.$loop=new m(this.$renderChanges.bind(this),this.container.ownerDocument.defaultView),this.$loop.schedule(this.CHANGE_FULL),this.setPadding(4),this.$updatePrintMargin()};((function(){this.showGutter=!0,this.CHANGE_CURSOR=1,this.CHANGE_MARKER=2,this.CHANGE_GUTTER=4,this.CHANGE_SCROLL=8,this.CHANGE_LINES=16,this.CHANGE_TEXT=32,this.CHANGE_SIZE=64,this.CHANGE_MARKER_BACK=128,this.CHANGE_MARKER_FRONT=256,this.CHANGE_FULL=512,d.implement(this,n),this.setSession=function(a){this.session=a,this.$cursorLayer.setSession(a),this.$markerBack.setSession(a),this.$markerFront.setSession(a),this.$gutterLayer.setSession(a),this.$textLayer.setSession(a),this.$loop.schedule(this.CHANGE_FULL)},this.updateLines=function(a,b){b===undefined&&(b=Infinity),this.$changedLines?(this.$changedLines.firstRow>a&&(this.$changedLines.firstRow=a),this.$changedLines.lastRow<b&&(this.$changedLines.lastRow=b)):this.$changedLines={firstRow:a,lastRow:b},this.$loop.schedule(this.CHANGE_LINES)},this.updateText=function(){this.$loop.schedule(this.CHANGE_TEXT)},this.updateFull=function(){this.$loop.schedule(this.CHANGE_FULL)},this.updateFontSize=function(){this.$textLayer.checkForSizeChanges()},this.onResize=function(a){var b=this.CHANGE_SIZE,c=this.$size,d=e.getInnerHeight(this.container);if(a||c.height!=d)c.height=d,this.scroller.style.height=d+"px",c.scrollerHeight=this.scroller.clientHeight,this.scrollBar.setHeight(c.scrollerHeight),this.session&&(this.session.setScrollTop(this.getScrollTop()),b|=this.CHANGE_FULL);var f=e.getInnerWidth(this.container);if(a||c.width!=f){c.width=f;var g=this.showGutter?this.$gutter.offsetWidth:0;this.scroller.style.left=g+"px",c.scrollerWidth=Math.max(0,f-g-this.scrollBar.getWidth()),this.scroller.style.width=c.scrollerWidth+"px";if(this.session.getUseWrapMode()&&this.adjustWrapLimit()||a)b|=this.CHANGE_FULL}this.$loop.schedule(b)},this.adjustWrapLimit=function(){var a=this.$size.scrollerWidth-this.$padding*2,b=Math.floor(a/this.characterWidth);return this.session.adjustWrapLimit(b)},this.setShowInvisibles=function(a){this.$textLayer.setShowInvisibles(a)&&this.$loop.schedule(this.CHANGE_TEXT)},this.getShowInvisibles=function(){return this.$textLayer.showInvisibles},this.$showPrintMargin=!0,this.setShowPrintMargin=function(a){this.$showPrintMargin=a,this.$updatePrintMargin()},this.getShowPrintMargin=function(){return this.$showPrintMargin},this.$printMarginColumn=80,this.setPrintMarginColumn=function(a){this.$printMarginColumn=a,this.$updatePrintMargin()},this.getPrintMarginColumn=function(){return this.$printMarginColumn},this.getShowGutter=function(){return this.showGutter},this.setShowGutter=function(a){if(this.showGutter===a)return;this.$gutter.style.display=a?"block":"none",this.showGutter=a,this.onResize(!0)},this.$updatePrintMargin=function(){var a;if(!this.$showPrintMargin&&!this.$printMarginEl)return;this.$printMarginEl||(a=e.createElement("div"),a.className="ace_print_margin_layer",this.$printMarginEl=e.createElement("div"),this.$printMarginEl.className="ace_print_margin",a.appendChild(this.$printMarginEl),this.content.insertBefore(a,this.$textLayer.element));var b=this.$printMarginEl.style;b.left=this.characterWidth*this.$printMarginColumn+this.$padding+"px",b.visibility=this.$showPrintMargin?"visible":"hidden"},this.getContainerElement=function(){return this.container},this.getMouseEventTarget=function(){return this.content},this.getTextAreaContainer=function(){return this.container},this.moveTextAreaToCursor=function(a){if(g.isIE)return;if(this.layerConfig.lastRow===0)return;var b=this.$cursorLayer.getPixelPosition();if(!b)return;var c=this.content.getBoundingClientRect(),d=this.layerConfig.offset;a.style.left=c.left+b.left+"px",a.style.top=c.top+b.top-this.scrollTop+d+"px"},this.getFirstVisibleRow=function(){return this.layerConfig.firstRow},this.getFirstFullyVisibleRow=function(){return this.layerConfig.firstRow+(this.layerConfig.offset===0?0:1)},this.getLastFullyVisibleRow=function(){var a=Math.floor((this.layerConfig.height+this.layerConfig.offset)/this.layerConfig.lineHeight);return this.layerConfig.firstRow-1+a},this.getLastVisibleRow=function(){return this.layerConfig.lastRow},this.$padding=null,this.setPadding=function(a){this.$padding=a,this.$textLayer.setPadding(a),this.$cursorLayer.setPadding(a),this.$markerFront.setPadding(a),this.$markerBack.setPadding(a),this.$loop.schedule(this.CHANGE_FULL),this.$updatePrintMargin()},this.getHScrollBarAlwaysVisible=function(){return this.$horizScrollAlwaysVisible},this.setHScrollBarAlwaysVisible=function(a){this.$horizScrollAlwaysVisible!=a&&(this.$horizScrollAlwaysVisible=a,(!this.$horizScrollAlwaysVisible||!this.$horizScroll)&&this.$loop.schedule(this.CHANGE_SCROLL))},this.$updateScrollBar=function(){this.scrollBar.setInnerHeight(this.layerConfig.maxHeight),this.scrollBar.setScrollTop(this.scrollTop)},this.$renderChanges=function(a){if(!a||!this.session)return;(a&this.CHANGE_FULL||a&this.CHANGE_SIZE||a&this.CHANGE_TEXT||a&this.CHANGE_LINES||a&this.CHANGE_SCROLL)&&this.$computeLayerConfig();if(a&this.CHANGE_FULL){this.$textLayer.update(this.layerConfig),this.showGutter&&this.$gutterLayer.update(this.layerConfig),this.$markerBack.update(this.layerConfig),this.$markerFront.update(this.layerConfig),this.$cursorLayer.update(this.layerConfig),this.$updateScrollBar();return}if(a&this.CHANGE_SCROLL){a&this.CHANGE_TEXT||a&this.CHANGE_LINES?this.$textLayer.update(this.layerConfig):this.$textLayer.scrollLines(this.layerConfig),this.showGutter&&this.$gutterLayer.update(this.layerConfig),this.$markerBack.update(this.layerConfig),this.$markerFront.update(this.layerConfig),this.$cursorLayer.update(this.layerConfig),this.$updateScrollBar();return}a&this.CHANGE_TEXT?(this.$textLayer.update(this.layerConfig),this.showGutter&&this.$gutterLayer.update(this.layerConfig)):a&this.CHANGE_LINES?(this.$updateLines(),this.$updateScrollBar(),this.showGutter&&this.$gutterLayer.update(this.layerConfig)):a&this.CHANGE_GUTTER&&this.showGutter&&this.$gutterLayer.update(this.layerConfig),a&this.CHANGE_CURSOR&&this.$cursorLayer.update(this.layerConfig),a&(this.CHANGE_MARKER|this.CHANGE_MARKER_FRONT)&&this.$markerFront.update(this.layerConfig),a&(this.CHANGE_MARKER|this.CHANGE_MARKER_BACK)&&this.$markerBack.update(this.layerConfig),a&this.CHANGE_SIZE&&this.$updateScrollBar()},this.$computeLayerConfig=function(){var a=this.session,b=this.scrollTop%this.lineHeight,c=this.$size.scrollerHeight+this.lineHeight,d=this.$getLongestLine(),e=this.$horizScrollAlwaysVisible||this.$size.scrollerWidth-d<0,f=this.$horizScroll!==e;this.$horizScroll=e,f&&(this.scroller.style.overflowX=e?"scroll":"hidden");var g=this.session.getScreenLength()*this.lineHeight;this.session.setScrollTop(Math.max(0,Math.min(this.scrollTop,g-this.$size.scrollerHeight)));var h=Math.ceil(c/this.lineHeight)-1,i=Math.max(0,Math.round((this.scrollTop-b)/this.lineHeight)),j=i+h,k,l,m={lineHeight:this.lineHeight};i=a.screenToDocumentRow(i,0);var n=a.getFoldLine(i);n&&(i=n.start.row),k=a.documentToScreenRow(i,0),l=a.getRowHeight(m,i),j=Math.min(a.screenToDocumentRow(j,0),a.getLength()-1),c=this.$size.scrollerHeight+a.getRowHeight(m,j)+l,b=this.scrollTop-k*this.lineHeight,this.layerConfig={width:d,padding:this.$padding,firstRow:i,firstRowScreen:k,lastRow:j,lineHeight:this.lineHeight,characterWidth:this.characterWidth,minHeight:c,maxHeight:g,offset:b,height:this.$size.scrollerHeight},this.$gutterLayer.element.style.marginTop=-b+"px",this.content.style.marginTop=-b+"px",this.content.style.width=d+2*this.$padding+"px",this.content.style.height=c+"px",this.$desiredScrollLeft&&(this.scrollToX(this.$desiredScrollLeft),this.$desiredScrollLeft=0),f&&this.onResize(!0)},this.$updateLines=function(){var a=this.$changedLines.firstRow,b=this.$changedLines.lastRow;this.$changedLines=null;var c=this.layerConfig;if(c.width!=this.$getLongestLine())return this.$textLayer.update(c);if(a>c.lastRow+1)return;if(b<c.firstRow)return;if(b===Infinity){this.showGutter&&this.$gutterLayer.update(c),this.$textLayer.update(c);return}this.$textLayer.updateLines(c,a,b)},this.$getLongestLine=function(){var a=this.session.getScreenWidth();return this.$textLayer.showInvisibles&&(a+=1),Math.max(this.$size.scrollerWidth-2*this.$padding,Math.round(a*this.characterWidth))},this.updateFrontMarkers=function(){this.$markerFront.setMarkers(this.session.getMarkers(!0)),this.$loop.schedule(this.CHANGE_MARKER_FRONT)},this.updateBackMarkers=function(){this.$markerBack.setMarkers(this.session.getMarkers()),this.$loop.schedule(this.CHANGE_MARKER_BACK)},this.addGutterDecoration=function(a,b){this.$gutterLayer.addGutterDecoration(a,b),this.$loop.schedule(this.CHANGE_GUTTER)},this.removeGutterDecoration=function(a,b){this.$gutterLayer.removeGutterDecoration(a,b),this.$loop.schedule(this.CHANGE_GUTTER)},this.setBreakpoints=function(a){this.$gutterLayer.setBreakpoints(a),this.$loop.schedule(this.CHANGE_GUTTER)},this.setAnnotations=function(a){this.$gutterLayer.setAnnotations(a),this.$loop.schedule(this.CHANGE_GUTTER)},this.updateCursor=function(){this.$loop.schedule(this.CHANGE_CURSOR)},this.hideCursor=function(){this.$cursorLayer.hideCursor()},this.showCursor=function(){this.$cursorLayer.showCursor()},this.scrollCursorIntoView=function(){if(this.$size.scrollerHeight===0)return;var a=this.$cursorLayer.getPixelPosition(),b=a.left,c=a.top;this.scrollTop>c&&this.session.setScrollTop(c),this.scrollTop+this.$size.scrollerHeight<c+this.lineHeight&&this.session.setScrollTop(c+this.lineHeight-this.$size.scrollerHeight);var d=this.scrollLeft;d>b&&(b<this.$padding+2*this.layerConfig.characterWidth&&(b=0),this.scrollToX(b)),d+this.$size.scrollerWidth<b+this.characterWidth&&(b>this.layerConfig.width+2*this.$padding?this.$desiredScrollLeft=b:this.scrollToX(Math.round(b+this.characterWidth-this.$size.scrollerWidth)))},this.getScrollTop=function(){return this.session.getScrollTop()},this.getScrollLeft=function(){return this.session.getScrollTop()},this.getScrollTopRow=function(){return this.scrollTop/this.lineHeight},this.getScrollBottomRow=function(){return Math.max(0,Math.floor((this.scrollTop+this.$size.scrollerHeight)/this.lineHeight)-1)},this.scrollToRow=function(a){this.session.setScrollTop(a*this.lineHeight)},this.scrollToLine=function(a,b){var c={lineHeight:this.lineHeight},d=0;for(var e=1;e<a;e++)d+=this.session.getRowHeight(c,e-1);b&&(d-=this.$size.scrollerHeight/2),this.session.setScrollTop(d)},this.scrollToY=function(a){this.scrollTop!==a&&(this.$loop.schedule(this.CHANGE_SCROLL),this.scrollTop=a)},this.scrollToX=function(a){a<=this.$padding&&(a=0),this.scroller.scrollLeft=a,a=this.scroller.scrollLeft},this.scrollBy=function(a,b){b&&this.session.setScrollTop(this.session.getScrollTop()+b),a&&this.session.setScrollLeft(this.session.getScrollLeft()+a)},this.isScrollableBy=function(a,b){if(b<0&&this.session.getScrollTop()>0)return!0;if(b>0&&this.session.getScrollTop()+this.$size.scrollerHeight<this.layerConfig.maxHeight)return!0},this.screenToTextCoordinates=function(a,b){var c=this.scroller.getBoundingClientRect(),d=Math.round((a+this.scrollLeft-c.left-this.$padding-e.getPageScrollLeft())/this.characterWidth),f=Math.floor((b+this.scrollTop-c.top-e.getPageScrollTop())/this.lineHeight);return this.session.screenToDocumentPosition(f,Math.max(d,0))},this.textToScreenCoordinates=function(a,b){var c=this.scroller.getBoundingClientRect(),d=this.session.documentToScreenPosition(a,b),e=this.$padding+Math.round(d.column*this.characterWidth),f=d.row*this.lineHeight;return{pageX:c.left+e-this.scrollLeft,pageY:c.top+f-this.scrollTop}},this.visualizeFocus=function(){e.addCssClass(this.container,"ace_focus")},this.visualizeBlur=function(){e.removeCssClass(this.container,"ace_focus")},this.showComposition=function(a){this.$composition||(this.$composition=e.createElement("div"),this.$composition.className="ace_composition",this.content.appendChild(this.$composition)),this.$composition.innerHTML="&#160;";var b=this.$cursorLayer.getPixelPosition(),c=this.$composition.style;c.top=b.top+"px",c.left=b.left+this.$padding+"px",c.height=this.lineHeight+"px",this.hideCursor()},this.setCompositionText=function(a){e.setInnerText(this.$composition,a)},this.hideComposition=function(){this.showCursor();if(!this.$composition)return;var a=this.$composition.style;a.top="-10000px",a.left="-10000px"},this.setTheme=function(b){function d(a){e.importCssString(a.cssText,a.cssClass,c.container.ownerDocument),c.$theme&&e.removeCssClass(c.container,c.$theme),c.$theme=a?a.cssClass:null,c.$theme&&e.addCssClass(c.container,c.$theme),a&&a.isDark?e.addCssClass(c.container,"ace_dark"):e.removeCssClass(c.container,"ace_dark"),c.$size&&(c.$size.width=0,c.onResize())}var c=this;this.$themeValue=b,!b||typeof b=="string"?(b=b||"ace/theme/textmate",a([b],function(a){d(a)})):d(b)},this.getTheme=function(){return this.$themeValue},this.setStyle=function(a){e.addCssClass(this.container,a)},this.unsetStyle=function(a){e.removeCssClass(this.container,a)},this.destroy=function(){this.$textLayer.destroy(),this.$cursorLayer.destroy()}})).call(p.prototype),b.VirtualRenderer=p}),define("ace/layer/gutter",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/event_emitter"],function(a,b,c){"use strict";var d=a("../lib/dom"),e=a("../lib/oop"),f=a("../lib/event_emitter").EventEmitter,g=function(a){this.element=d.createElement("div"),this.element.className="ace_layer ace_gutter-layer",a.appendChild(this.element),this.setShowFoldWidgets(this.$showFoldWidgets),this.gutterWidth=0,this.$breakpoints=[],this.$annotations=[],this.$decorations=[]};((function(){e.implement(this,f),this.setSession=function(a){this.session=a},this.addGutterDecoration=function(a,b){this.$decorations[a]||(this.$decorations[a]=""),this.$decorations[a]+=" ace_"+b},this.removeGutterDecoration=function(a,b){this.$decorations[a]=this.$decorations[a].replace(" ace_"+b,"")},this.setBreakpoints=function(a){this.$breakpoints=a.concat()},this.setAnnotations=function(a){this.$annotations=[];for(var b in a)if(a.hasOwnProperty(b)){var c=a[b];if(!c)continue;var d=this.$annotations[b]={text:[]};for(var e=0;e<c.length;e++){var f=c[e],g=f.text.replace(/"/g,"&quot;").replace(/'/g,"&#8217;").replace(/</,"&lt;");d.text.indexOf(g)===-1&&d.text.push(g);var h=f.type;h=="error"?d.className="ace_error":h=="warning"&&d.className!="ace_error"?d.className="ace_warning":h=="info"&&!d.className&&(d.className="ace_info")}}},this.update=function(a){this.$config=a;var b={className:"",text:[]},c=[],e=a.firstRow,f=a.lastRow,g=this.session.getNextFoldLine(e),h=g?g.start.row:Infinity,i=this.$showFoldWidgets&&this.session.foldWidgets;for(;;){e>h&&(e=g.end.row+1,g=this.session.getNextFoldLine(e,g),h=g?g.start.row:Infinity);if(e>f)break;var j=this.$annotations[e]||b;c.push("<div class='ace_gutter-cell",this.$decorations[e]||"",this.$breakpoints[e]?" ace_breakpoint ":" ",j.className,"' title='",j.text.join("\n"),"' style='height:",a.lineHeight,"px;'>",e+1);if(i){var k=i[e];k==null&&(k=i[e]=this.session.getFoldWidget(e)),k&&c.push("<span class='ace_fold-widget ",k,k=="start"&&e==h&&e<g.end.row?" closed":" open","'></span>")}var l=this.session.getRowLength(e)-1;while(l--)c.push("</div><div class='ace_gutter-cell' style='height:",a.lineHeight,"px'>¦");c.push("</div>"),e++}this.element=d.setInnerHtml(this.element,c.join("")),this.element.style.height=a.minHeight+"px";var m=this.element.offsetWidth;m!==this.gutterWidth&&(this.gutterWidth=m,this._emit("changeGutterWidth",m))},this.$showFoldWidgets=!0,this.setShowFoldWidgets=function(a){a?d.addCssClass(this.element,"ace_folding-enabled"):d.removeCssClass(this.element,"ace_folding-enabled"),this.$showFoldWidgets=a},this.getShowFoldWidgets=function(){return this.$showFoldWidgets}})).call(g.prototype),b.Gutter=g}),define("ace/layer/marker",["require","exports","module","ace/range","ace/lib/dom"],function(a,b,c){"use strict";var d=a("../range").Range,e=a("../lib/dom"),f=function(a){this.element=e.createElement("div"),this.element.className="ace_layer ace_marker-layer",a.appendChild(this.element)};((function(){this.$padding=0,this.setPadding=function(a){this.$padding=a},this.setSession=function(a){this.session=a},this.setMarkers=function(a){this.markers=a},this.update=function(a){var a=a||this.config;if(!a)return;this.config=a;var b=[];for(var c in this.markers){var d=this.markers[c],f=d.range.clipRows(a.firstRow,a.lastRow);if(f.isEmpty())continue;f=f.toScreenRange(this.session);if(d.renderer){var g=this.$getTop(f.start.row,a),h=Math.round(this.$padding+f.start.column*a.characterWidth);d.renderer(b,f,h,g,a)}else f.isMultiLine()?d.type=="text"?this.drawTextMarker(b,f,d.clazz,a):this.drawMultiLineMarker(b,f,d.clazz,a,d.type):this.drawSingleLineMarker(b,f,d.clazz,a,null,d.type)}this.element=e.setInnerHtml(this.element,b.join(""))},this.$getTop=function(a,b){return(a-b.firstRowScreen)*b.lineHeight},this.drawTextMarker=function(a,b,c,e){var f=b.start.row,g=new d(f,b.start.column,f,this.session.getScreenLastRowColumn(f));this.drawSingleLineMarker(a,g,c,e,1,"text"),f=b.end.row,g=new d(f,0,f,b.end.column),this.drawSingleLineMarker(a,g,c,e,0,"text");for(f=b.start.row+1;f<b.end.row;f++)g.start.row=f,g.end.row=f,g.end.column=this.session.getScreenLastRowColumn(f),this.drawSingleLineMarker(a,g,c,e,1,"text")},this.drawMultiLineMarker=function(a,b,c,d,e){var f=e==="background"?0:this.$padding,g=d.width+2*this.$padding-f,h=d.lineHeight,i=Math.round(g-b.start.column*d.characterWidth),j=this.$getTop(b.start.row,d),k=Math.round(f+b.start.column*d.characterWidth);a.push("<div class='",c,"' style='","height:",h,"px;","width:",i,"px;","top:",j,"px;","left:",k,"px;'></div>"),j=this.$getTop(b.end.row,d),i=Math.round(b.end.column*d.characterWidth),a.push("<div class='",c,"' style='","height:",h,"px;","width:",i,"px;","top:",j,"px;","left:",f,"px;'></div>"),h=(b.end.row-b.start.row-1)*d.lineHeight;if(h<0)return;j=this.$getTop(b.start.row+1,d),a.push("<div class='",c,"' style='","height:",h,"px;","width:",g,"px;","top:",j,"px;","left:",f,"px;'></div>")},this.drawSingleLineMarker=function(a,b,c,d,e,f){var g=f==="background"?0:this.$padding,h=d.lineHeight;if(f==="background")var i=d.width;else i=Math.round((b.end.column+(e||0)-b.start.column)*d.characterWidth);var j=this.$getTop(b.start.row,d),k=Math.round(g+b.start.column*d.characterWidth);a.push("<div class='",c,"' style='","height:",h,"px;","width:",i,"px;","top:",j,"px;","left:",k,"px;'></div>")}})).call(f.prototype),b.Marker=f}),define("ace/layer/text",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/lib/event_emitter"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("../lib/dom"),f=a("../lib/lang"),g=a("../lib/useragent"),h=a("../lib/event_emitter").EventEmitter,i=function(a){this.element=e.createElement("div"),this.element.className="ace_layer ace_text-layer",a.appendChild(this.element),this.$characterSize=this.$measureSizes()||{width:0,height:0},this.$pollSizeChanges()};((function(){d.implement(this,h),this.EOF_CHAR="¶",this.EOL_CHAR="¬",this.TAB_CHAR="→",this.SPACE_CHAR="·",this.$padding=0,this.setPadding=function(a){this.$padding=a,this.element.style.padding="0 "+a+"px"},this.getLineHeight=function(){return this.$characterSize.height||1},this.getCharacterWidth=function(){return this.$characterSize.width||1},this.checkForSizeChanges=function(){var a=this.$measureSizes();a&&(this.$characterSize.width!==a.width||this.$characterSize.height!==a.height)&&(this.$characterSize=a,this._emit("changeCharaterSize",{data:a}))},this.$pollSizeChanges=function(){var a=this;this.$pollSizeChangesTimer=setInterval(function(){a.checkForSizeChanges()},500)},this.$fontStyles={fontFamily:1,fontSize:1,fontWeight:1,fontStyle:1,lineHeight:1},this.$measureSizes=function(){var a=1e3;if(!this.$measureNode){var b=this.$measureNode=e.createElement("div"),c=b.style;c.width=c.height="auto",c.left=c.top=-a*40+"px",c.visibility="hidden",c.position="absolute",c.overflow="visible",c.whiteSpace="nowrap",b.innerHTML=f.stringRepeat("Xy",a);if(this.element.ownerDocument.body)this.element.ownerDocument.body.appendChild(b);else{var d=this.element.parentNode;while(!e.hasCssClass(d,"ace_editor"))d=d.parentNode;d.appendChild(b)}}var c=this.$measureNode.style,g=e.computedStyle(this.element);for(var h in this.$fontStyles)c[h]=g[h];var i={height:this.$measureNode.offsetHeight,width:this.$measureNode.offsetWidth/(a*2)};return i.width==0&&i.height==0?null:i},this.setSession=function(a){this.session=a},this.showInvisibles=!1,this.setShowInvisibles=function(a){return this.showInvisibles==a?!1:(this.showInvisibles=a,!0)},this.$tabStrings=[],this.$computeTabString=function(){var a=this.session.getTabSize(),b=this.$tabStrings=[0];for(var c=1;c<a+1;c++)this.showInvisibles?b.push("<span class='ace_invisible'>"+this.TAB_CHAR+(new Array(c)).join("&#160;")+"</span>"):b.push((new Array(c+1)).join("&#160;"))},this.updateLines=function(a,b,c){this.$computeTabString(),(this.config.lastRow!=a.lastRow||this.config.firstRow!=a.firstRow)&&this.scrollLines(a),this.config=a;var d=Math.max(b,a.firstRow),f=Math.min(c,a.lastRow),g=this.element.childNodes,h=0;for(var i=a.firstRow;i<d;i++){var j=this.session.getFoldLine(i);if(j){if(j.containsRow(d)){d=j.start.row;break}i=j.end.row}h++}for(var k=d;k<=f;k++){var l=g[h++];if(!l)continue;var m=[],n=this.session.getTokens(k,k);this.$renderLine(m,k,n[0].tokens,!this.$useLineGroups()),l=e.setInnerHtml(l,m.join("")),k=this.session.getRowFoldEnd(k)}},this.scrollLines=function(a){this.$computeTabString();var b=this.config;this.config=a;if(!b||b.lastRow<a.firstRow)return this.update(a);if(a.lastRow<b.firstRow)return this.update(a);var c=this.element;if(b.firstRow<a.firstRow)for(var d=this.session.getFoldedRowCount(b.firstRow,a.firstRow-1);d>0;d--)c.removeChild(c.firstChild);if(b.lastRow>a.lastRow)for(var d=this.session.getFoldedRowCount(a.lastRow+1,b.lastRow);d>0;d--)c.removeChild(c.lastChild);if(a.firstRow<b.firstRow){var e=this.$renderLinesFragment(a,a.firstRow,b.firstRow-1);c.firstChild?c.insertBefore(e,c.firstChild):c.appendChild(e)}if(a.lastRow>b.lastRow){var e=this.$renderLinesFragment(a,b.lastRow+1,a.lastRow);c.appendChild(e)}},this.$renderLinesFragment=function(a,b,c){var d=this.element.ownerDocument.createDocumentFragment(),f=b,g=this.session.getNextFoldLine(f),h=g?g.start.row:Infinity;for(;;){f>h&&(f=g.end.row+1,g=this.session.getNextFoldLine(f,g),h=g?g.start.row:Infinity);if(f>c)break;var i=e.createElement("div"),j=[],k=this.session.getTokens(f,f);k.length==1&&this.$renderLine(j,f,k[0].tokens,!1),i.innerHTML=j.join("");if(this.$useLineGroups())i.className="ace_line_group",d.appendChild(i);else{var l=i.childNodes;while(l.length)d.appendChild(l[0])}f++}return d},this.update=function(a){this.$computeTabString(),this.config=a;var b=[],c=a.firstRow,d=a.lastRow,f=c,g=this.session.getNextFoldLine(f),h=g?g.start.row:Infinity;for(;;){f>h&&(f=g.end.row+1,g=this.session.getNextFoldLine(f,g),h=g?g.start.row:Infinity);if(f>d)break;this.$useLineGroups()&&b.push("<div class='ace_line_group'>");var i=this.session.getTokens(f,f);i.length==1&&this.$renderLine(b,f,i[0].tokens,!1),this.$useLineGroups()&&b.push("</div>"),f++}this.element=e.setInnerHtml(this.element,b.join(""))},this.$textToken={text:!0,rparen:!0,lparen:!0},this.$renderToken=function(a,b,c,d){var e=this,f=/\t|&|<|( +)|([\v\f \u00a0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000])|[\u1100-\u115F]|[\u11A3-\u11A7]|[\u11FA-\u11FF]|[\u2329-\u232A]|[\u2E80-\u2E99]|[\u2E9B-\u2EF3]|[\u2F00-\u2FD5]|[\u2FF0-\u2FFB]|[\u3000-\u303E]|[\u3041-\u3096]|[\u3099-\u30FF]|[\u3105-\u312D]|[\u3131-\u318E]|[\u3190-\u31BA]|[\u31C0-\u31E3]|[\u31F0-\u321E]|[\u3220-\u3247]|[\u3250-\u32FE]|[\u3300-\u4DBF]|[\u4E00-\uA48C]|[\uA490-\uA4C6]|[\uA960-\uA97C]|[\uAC00-\uD7A3]|[\uD7B0-\uD7C6]|[\uD7CB-\uD7FB]|[\uF900-\uFAFF]|[\uFE10-\uFE19]|[\uFE30-\uFE52]|[\uFE54-\uFE66]|[\uFE68-\uFE6B]|[\uFF01-\uFF60]|[\uFFE0-\uFFE6]/g,h=function(a,c,d,f,h){if(a.charCodeAt(0)==32)return(new Array(a.length+1)).join("&#160;");if(a=="\t"){var i=e.session.getScreenTabSize(b+f);return b+=i-1,e.$tabStrings[i]}if(a=="&")return g.isOldGecko?"&":"&amp;";if(a=="<")return"&lt;";if(a==" "){var j=e.showInvisibles?"ace_cjk ace_invisible":"ace_cjk",k=e.showInvisibles?e.SPACE_CHAR:"";return b+=1,"<span class='"+j+"' style='width:"+e.config.characterWidth*2+"px'>"+k+"</span>"}if(a.match(/[\v\f \u00a0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000]/)){if(e.showInvisibles){var k=(new Array(a.length+1)).join(e.SPACE_CHAR);return"<span class='ace_invisible'>"+k+"</span>"}return"&#160;"}return b+=1,"<span class='ace_cjk' style='width:"+e.config.characterWidth*2+"px'>"+a+"</span>"},i=d.replace(f,h);if(!this.$textToken[c.type]){var j="ace_"+c.type.replace(/\./g," ace_"),k="";c.type=="fold"&&(k=" style='width:"+c.value.length*this.config.characterWidth+"px;' "),a.push("<span class='",j,"'",k,">",i,"</span>")}else a.push(i);return b+d.length},this.$renderLineCore=function(a,b,c,d,e){var f=0,g=0,h,i=0,j=this;!d||d.length==0?h=Number.MAX_VALUE:h=d[0],e||a.push("<div class='ace_line' style='height:",this.config.lineHeight,"px","'>");for(var k=0;k<c.length;k++){var l=c[k],m=l.value;if(f+m.length<h)i=j.$renderToken(a,i,l,m),f+=m.length;else{while(f+m.length>=h)i=j.$renderToken(a,i,l,m.substring(0,h-f)),m=m.substring(h-f),f=h,e||a.push("</div>","<div class='ace_line' style='height:",this.config.lineHeight,"px","'>"),g++,i=0,h=d[g]||Number.MAX_VALUE;m.length!=0&&(f+=m.length,i=j.$renderToken(a,i,l,m))}}this.showInvisibles&&(b!==this.session.getLength()-1?a.push("<span class='ace_invisible'>"+this.EOL_CHAR+"</span>"):a.push("<span class='ace_invisible'>"+this.EOF_CHAR+"</span>")),e||a.push("</div>")},this.$renderLine=function(a,b,c,d){if(!this.session.isRowFolded(b)){var e=this.session.getRowSplitData(b);this.$renderLineCore(a,b,c,e,d)}else this.$renderFoldLine(a,b,c,d)},this.$renderFoldLine=function(a,b,c,d){function h(a,b,c){var d=0,e=0;while(e+a[d].value.length<b){e+=a[d].value.length,d++;if(d==a.length)return}if(e!=b){var f=a[d].value.substring(b-e);f.length>c-b&&(f=f.substring(0,c-b)),g.push({type:a[d].type,value:f}),e=b+f.length,d+=1}while(e<c){var f=a[d].value;f.length+e>c&&(f=f.substring(0,c-e)),g.push({type:a[d].type,value:f}),e+=f.length,d+=1}}var e=this.session,f=e.getFoldLine(b),g=[];f.walk(function(a,b,d,e,f){a?g.push({type:"fold",value:a}):(f&&(c=this.session.getTokens(b,b)[0].tokens),c.length!=0&&h(c,e,d))}.bind(this),f.end.row,this.session.getLine(f.end.row).length);var i=this.session.$useWrapMode?this.session.$wrapData[b]:null;this.$renderLineCore(a,b,g,i,d)},this.$useLineGroups=function(){return this.session.getUseWrapMode()},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.$measureNode&&this.$measureNode.parentNode.removeChild(this.$measureNode),delete this.$measureNode}})).call(i.prototype),b.Text=i}),define("ace/layer/cursor",["require","exports","module","ace/lib/dom"],function(a,b,c){"use strict";var d=a("../lib/dom"),e=function(a){this.element=d.createElement("div"),this.element.className="ace_layer ace_cursor-layer",a.appendChild(this.element),this.cursor=d.createElement("div"),this.cursor.className="ace_cursor ace_hidden",this.element.appendChild(this.cursor),this.isVisible=!1};((function(){this.$padding=0,this.setPadding=function(a){this.$padding=a},this.setSession=function(a){this.session=a},this.hideCursor=function(){this.isVisible=!1,d.addCssClass(this.cursor,"ace_hidden"),clearInterval(this.blinkId)},this.showCursor=function(){this.isVisible=!0,d.removeCssClass(this.cursor,"ace_hidden"),this.cursor.style.visibility="visible",this.restartTimer()},this.restartTimer=function(){clearInterval(this.blinkId);if(!this.isVisible)return;var a=this.cursor;this.blinkId=setInterval(function(){a.style.visibility="hidden",setTimeout(function(){a.style.visibility="visible"},400)},1e3)},this.getPixelPosition=function(a){if(!this.config||!this.session)return{left:0,top:0};var b=this.session.selection.getCursor(),c=this.session.documentToScreenPosition(b),d=Math.round(this.$padding+c.column*this.config.characterWidth),e=(c.row-(a?this.config.firstRowScreen:0))*this.config.lineHeight;return{left:d,top:e}},this.update=function(a){this.config=a,this.pixelPos=this.getPixelPosition(!0),this.cursor.style.left=this.pixelPos.left+"px",this.cursor.style.top=this.pixelPos.top+"px",this.cursor.style.width=a.characterWidth+"px",this.cursor.style.height=a.lineHeight+"px";var b=this.session.getOverwrite();b!=this.overwrite&&(this.overwrite=b,b?d.addCssClass(this.cursor,"ace_overwrite"):d.removeCssClass(this.cursor,"ace_overwrite")),this.restartTimer()},this.destroy=function(){clearInterval(this.blinkId)}})).call(e.prototype),b.Cursor=e}),define("ace/scrollbar",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/event","ace/lib/event_emitter"],function(a,b,c){"use strict";var d=a("./lib/oop"),e=a("./lib/dom"),f=a("./lib/event"),g=a("./lib/event_emitter").EventEmitter,h=function(a){this.element=e.createElement("div"),this.element.className="ace_sb",this.inner=e.createElement("div"),this.element.appendChild(this.inner),a.appendChild(this.element),this.width=e.scrollbarWidth(a.ownerDocument),this.element.style.width=(this.width||15)+5+"px",f.addListener(this.element,"scroll",this.onScroll.bind(this))};((function(){d.implement(this,g),this.onScroll=function(){this._emit("scroll",{data:this.element.scrollTop})},this.getWidth=function(){return this.width},this.setHeight=function(a){this.element.style.height=a+"px"},this.setInnerHeight=function(a){this.inner.style.height=a+"px"},this.setScrollTop=function(a){this.element.scrollTop=a}})).call(h.prototype),b.ScrollBar=h}),define("ace/renderloop",["require","exports","module","ace/lib/event"],function(a,b,c){"use strict";var d=a("./lib/event"),e=function(a,b){this.onRender=a,this.pending=!1,this.changes=0,this.window=b||window};((function(){this.schedule=function(a){this.changes=this.changes|a;if(!this.pending){this.pending=!0;var b=this;d.nextTick(function(){b.pending=!1;var a;while(a=b.changes)b.changes=0,b.onRender(a)},this.window)}}})).call(e.prototype),b.RenderLoop=e}),define("text!ace/css/editor.css",[],"@import url(//fonts.googleapis.com/css?family=Droid+Sans+Mono);\n\n\n.ace_editor {\n position: absolute;\n overflow: hidden;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Droid Sans Mono', 'Courier New', monospace;\n font-size: 12px;\n}\n\n.ace_scroller {\n position: absolute;\n overflow-x: scroll;\n overflow-y: hidden;\n}\n\n.ace_content {\n position: absolute;\n box-sizing: border-box;\n -moz-box-sizing: border-box;\n -webkit-box-sizing: border-box;\n cursor: text;\n}\n\n/* setting pointer-events: auto; on node under the mouse, which changes during scroll,\n will break mouse wheel scrolling in Safari */\n.ace_content * {\n pointer-events: none;\n}\n\n.ace_composition {\n position: absolute;\n background: #555;\n color: #DDD;\n z-index: 4;\n}\n\n.ace_gutter .ace_layer {\n position: relative;\n min-width: 54px;\n text-align: right;\n}\n\n.ace_gutter {\n position: absolute;\n overflow : hidden;\n height: 100%;\n width: auto;\n cursor: default;\n}\n\n.ace_gutter-cell {\n padding-left: 19px;\n padding-right: 6px;\n}\n\n.ace_gutter-cell.ace_error {\n background-image: url(\"data:image/gif,GIF89a%10%00%10%00%D5%00%00%F5or%F5%87%88%F5nr%F4ns%EBmq%F5z%7F%DDJT%DEKS%DFOW%F1Yc%F2ah%CE(7%CE)8%D18E%DD%40M%F2KZ%EBU%60%F4%60m%DCir%C8%16(%C8%19*%CE%255%F1%3FR%F1%3FS%E6%AB%B5%CA%5DI%CEn%5E%F7%A2%9A%C9G%3E%E0a%5B%F7%89%85%F5yy%F6%82%80%ED%82%80%FF%BF%BF%E3%C4%C4%FF%FF%FF%FF%FF%FF%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00!%F9%04%01%00%00%25%00%2C%00%00%00%00%10%00%10%00%00%06p%C0%92pH%2C%1A%8F%C8%D2H%93%E1d4%23%E4%88%D3%09mB%1DN%B48%F5%90%40%60%92G%5B%94%20%3E%22%D2%87%24%FA%20%24%C5%06A%00%20%B1%07%02B%A38%89X.v%17%82%11%13q%10%0Fi%24%0F%8B%10%7BD%12%0Ei%09%92%09%0EpD%18%15%24%0A%9Ci%05%0C%18F%18%0B%07%04%01%04%06%A0H%18%12%0D%14%0D%12%A1I%B3%B4%B5IA%00%3B\");\n background-repeat: no-repeat;\n background-position: 2px center;\n}\n\n.ace_gutter-cell.ace_warning {\n background-image: url(\"data:image/gif,GIF89a%10%00%10%00%D5%00%00%FF%DBr%FF%DE%81%FF%E2%8D%FF%E2%8F%FF%E4%96%FF%E3%97%FF%E5%9D%FF%E6%9E%FF%EE%C1%FF%C8Z%FF%CDk%FF%D0s%FF%D4%81%FF%D5%82%FF%D5%83%FF%DC%97%FF%DE%9D%FF%E7%B8%FF%CCl%7BQ%13%80U%15%82W%16%81U%16%89%5B%18%87%5B%18%8C%5E%1A%94d%1D%C5%83-%C9%87%2F%C6%84.%C6%85.%CD%8B2%C9%871%CB%8A3%CD%8B5%DC%98%3F%DF%9BB%E0%9CC%E1%A5U%CB%871%CF%8B5%D1%8D6%DB%97%40%DF%9AB%DD%99B%E3%B0p%E7%CC%AE%FF%FF%FF%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00!%F9%04%01%00%00%2F%00%2C%00%00%00%00%10%00%10%00%00%06a%C0%97pH%2C%1A%8FH%A1%ABTr%25%87%2B%04%82%F4%7C%B9X%91%08%CB%99%1C!%26%13%84*iJ9(%15G%CA%84%14%01%1A%97%0C%03%80%3A%9A%3E%81%84%3E%11%08%B1%8B%20%02%12%0F%18%1A%0F%0A%03'F%1C%04%0B%10%16%18%10%0B%05%1CF%1D-%06%07%9A%9A-%1EG%1B%A0%A1%A0U%A4%A5%A6BA%00%3B\");\n background-repeat: no-repeat;\n background-position: 2px center;\n}\n\n.ace_gutter-cell.ace_info {\n background-image: url(\"data:image/gif;base64,R0lGODlhEAAQAMQAAAAAAEFBQVJSUl5eXmRkZGtra39/f4WFhYmJiZGRkaampry8vMPDw8zMzNXV1dzc3OTk5Orq6vDw8P///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABQALAAAAAAQABAAAAUuICWOZGmeaBml5XGwFCQSBGyXRSAwtqQIiRuiwIM5BoYVbEFIyGCQoeJGrVptIQA7\");\n background-repeat: no-repeat;\n background-position: 2px center;\n}\n\n.ace_editor .ace_sb {\n position: absolute;\n overflow-x: hidden;\n overflow-y: scroll;\n right: 0;\n}\n\n.ace_editor .ace_sb div {\n position: absolute;\n width: 1px;\n left: 0;\n}\n\n.ace_editor .ace_print_margin_layer {\n z-index: 0;\n position: absolute;\n overflow: hidden;\n margin: 0;\n left: 0;\n height: 100%;\n width: 100%;\n}\n\n.ace_editor .ace_print_margin {\n position: absolute;\n height: 100%;\n}\n\n.ace_editor textarea {\n position: fixed;\n z-index: 0;\n width: 10px;\n height: 30px;\n opacity: 0;\n background: transparent;\n appearance: none;\n -moz-appearance: none;\n border: none;\n resize: none;\n outline: none;\n overflow: hidden;\n}\n\n.ace_layer {\n z-index: 1;\n position: absolute;\n overflow: hidden;\n white-space: nowrap;\n height: 100%;\n width: 100%;\n box-sizing: border-box;\n -moz-box-sizing: border-box;\n -webkit-box-sizing: border-box;\n}\n\n.ace_text-layer {\n color: black;\n}\n\n.ace_cjk {\n display: inline-block;\n text-align: center;\n}\n\n.ace_cursor-layer {\n z-index: 4;\n}\n\n.ace_cursor {\n z-index: 4;\n position: absolute;\n}\n\n.ace_cursor.ace_hidden {\n opacity: 0.2;\n}\n\n.ace_line {\n white-space: nowrap;\n}\n\n.ace_marker-layer .ace_step {\n position: absolute;\n z-index: 3;\n}\n\n.ace_marker-layer .ace_selection {\n position: absolute;\n z-index: 4;\n}\n\n.ace_marker-layer .ace_bracket {\n position: absolute;\n z-index: 5;\n}\n\n.ace_marker-layer .ace_active_line {\n position: absolute;\n z-index: 2;\n}\n\n.ace_marker-layer .ace_selected_word {\n position: absolute;\n z-index: 6;\n box-sizing: border-box;\n -moz-box-sizing: border-box;\n -webkit-box-sizing: border-box;\n}\n\n.ace_line .ace_fold {\n box-sizing: border-box;\n -moz-box-sizing: border-box;\n -webkit-box-sizing: border-box;\n \n display: inline-block;\n height: 11px;\n margin-top: -2px;\n vertical-align: middle;\n\n background-image: \n url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%11%00%00%00%09%08%06%00%00%00%D4%E8%C7%0C%00%00%03%1EiCCPICC%20Profile%00%00x%01%85T%DFk%D3P%14%FE%DAe%9D%B0%E1%8B%3Ag%11%09%3Eh%91ndStC%9C%B6kW%BA%CDZ%EA6%B7!H%9B%A6m%5C%9A%C6%24%ED~%B0%07%D9%8Bo%3A%C5w%F1%07%3E%F9%07%0C%D9%83o%7B%92%0D%C6%14a%F8%AC%88%22L%F6%22%B3%9E%9B4M'S%03%B9%F7%BB%DF%F9%EE9'%E7%E4%5E%A0%F9qZ%D3%14%2F%0F%14USO%C5%C2%FC%C4%E4%14%DF%F2%01%5E%1CC%2B%FChM%8B%86%16J%26G%40%0F%D3%B2y%EF%B3%F3%0E%1E%C6lt%EEo%DF%AB%FEc%D5%9A%95%0C%11%F0%1C%20%BE%945%C4%22%E1Y%A0i%5C%D4t%13%E0%D6%89%EF%9D15%C2%CDLsX%A7%04%09%1Fg8oc%81%E1%8C%8D%23%96f45%40%9A%09%C2%07%C5B%3AK%B8%408%98i%E0%F3%0D%D8%CE%81%14%E4'%26%A9%92.%8B%3C%ABER%2F%E5dE%B2%0C%F6%F0%1Fs%83%F2_%B0%A8%94%E9%9B%AD%E7%10%8Dm%9A%19N%D1%7C%8A%DE%1F9%7Dp%8C%E6%00%D5%C1%3F_%18%BDA%B8%9DpX6%E3%A35~B%CD%24%AE%11%26%BD%E7%EEti%98%EDe%9A%97Y)%12%25%1C%24%BCbT%AE3li%E6%0B%03%89%9A%E6%D3%ED%F4P%92%B0%9F4%BF43Y%F3%E3%EDP%95%04%EB1%C5%F5%F6KF%F4%BA%BD%D7%DB%91%93%07%E35%3E%A7)%D6%7F%40%FE%BD%F7%F5r%8A%E5y%92%F0%EB%B4%1E%8D%D5%F4%5B%92%3AV%DB%DB%E4%CD%A6%23%C3%C4wQ%3F%03HB%82%8E%1Cd(%E0%91B%0Ca%9Ac%C4%AA%F8L%16%19%22J%A4%D2itTy%B28%D6%3B(%93%96%ED%1CGx%C9_%0E%B8%5E%16%F5%5B%B2%B8%F6%E0%FB%9E%DD%25%D7%8E%BC%15%85%C5%B7%A3%D8Q%ED%B5%81%E9%BA%B2%13%9A%1B%7Fua%A5%A3n%E17%B9%E5%9B%1Bm%AB%0B%08Q%FE%8A%E5%B1H%5Ee%CAO%82Q%D7u6%E6%90S%97%FCu%0B%CF2%94%EE%25v%12X%0C%BA%AC%F0%5E%F8*l%0AO%85%17%C2%97%BF%D4%C8%CE%DE%AD%11%CB%80q%2C%3E%AB%9ES%CD%C6%EC%25%D2L%D2%EBd%B8%BF%8A%F5B%C6%18%F9%901CZ%9D%BE%24M%9C%8A9%F2%DAP%0B'%06w%82%EB%E6%E2%5C%2F%D7%07%9E%BB%CC%5D%E1%FA%B9%08%AD.r%23%8E%C2%17%F5E%7C!%F0%BE3%BE%3E_%B7o%88a%A7%DB%BE%D3d%EB%A31Z%EB%BB%D3%91%BA%A2%B1z%94%8F%DB'%F6%3D%8E%AA%13%19%B2%B1%BE%B1~V%08%2B%B4%A2cjJ%B3tO%00%03%25mN%97%F3%05%93%EF%11%84%0B%7C%88%AE-%89%8F%ABbW%90O%2B%0Ao%99%0C%5E%97%0CI%AFH%D9.%B0%3B%8F%ED%03%B6S%D6%5D%E6i_s9%F3*p%E9%1B%FD%C3%EB.7U%06%5E%19%C0%D1s.%17%A03u%E4%09%B0%7C%5E%2C%EB%15%DB%1F%3C%9E%B7%80%91%3B%DBc%AD%3Dma%BA%8B%3EV%AB%DBt.%5B%1E%01%BB%0F%AB%D5%9F%CF%AA%D5%DD%E7%E4%7F%0Bx%A3%FC%06%A9%23%0A%D6%C2%A1_2%00%00%00%09pHYs%00%00%0B%13%00%00%0B%13%01%00%9A%9C%18%00%00%00%B5IDAT(%15%A5%91%3D%0E%02!%10%85ac%E1%05%D6%CE%D6%C6%CE%D2%E8%ED%CD%DE%C0%C6%D6N.%E0V%F8%3D%9Ca%891XH%C2%BE%D9y%3F%90!%E6%9C%C3%BFk%E5%011%C6-%F5%C8N%04%DF%BD%FF%89%DFt%83DN%60%3E%F3%AB%A0%DE%1A%5Dg%BE%10Q%97%1B%40%9C%A8o%10%8F%5E%828%B4%1B%60%87%F6%02%26%85%1Ch%1E%C1%2B%5Bk%FF%86%EE%B7j%09%9A%DA%9B%ACe%A3%F9%EC%DA!9%B4%D5%A6%81%86%86%98%CC%3C%5B%40%FA%81%B3%E9%CB%23%94%C16Azo%05%D4%E1%C1%95a%3B%8A'%A0%E8%CC%17%22%85%1D%BA%00%A2%FA%DC%0A%94%D1%D1%8D%8B%3A%84%17B%C7%60%1A%25Z%FC%8D%00%00%00%00IEND%AEB%60%82\"),\n url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%05%00%00%007%08%06%00%00%00%C4%DD%80C%00%00%03%1EiCCPICC%20Profile%00%00x%01%85T%DFk%D3P%14%FE%DAe%9D%B0%E1%8B%3Ag%11%09%3Eh%91ndStC%9C%B6kW%BA%CDZ%EA6%B7!H%9B%A6m%5C%9A%C6%24%ED~%B0%07%D9%8Bo%3A%C5w%F1%07%3E%F9%07%0C%D9%83o%7B%92%0D%C6%14a%F8%AC%88%22L%F6%22%B3%9E%9B4M'S%03%B9%F7%BB%DF%F9%EE9'%E7%E4%5E%A0%F9qZ%D3%14%2F%0F%14USO%C5%C2%FC%C4%E4%14%DF%F2%01%5E%1CC%2B%FChM%8B%86%16J%26G%40%0F%D3%B2y%EF%B3%F3%0E%1E%C6lt%EEo%DF%AB%FEc%D5%9A%95%0C%11%F0%1C%20%BE%945%C4%22%E1Y%A0i%5C%D4t%13%E0%D6%89%EF%9D15%C2%CDLsX%A7%04%09%1Fg8oc%81%E1%8C%8D%23%96f45%40%9A%09%C2%07%C5B%3AK%B8%408%98i%E0%F3%0D%D8%CE%81%14%E4'%26%A9%92.%8B%3C%ABER%2F%E5dE%B2%0C%F6%F0%1Fs%83%F2_%B0%A8%94%E9%9B%AD%E7%10%8Dm%9A%19N%D1%7C%8A%DE%1F9%7Dp%8C%E6%00%D5%C1%3F_%18%BDA%B8%9DpX6%E3%A35~B%CD%24%AE%11%26%BD%E7%EEti%98%EDe%9A%97Y)%12%25%1C%24%BCbT%AE3li%E6%0B%03%89%9A%E6%D3%ED%F4P%92%B0%9F4%BF43Y%F3%E3%EDP%95%04%EB1%C5%F5%F6KF%F4%BA%BD%D7%DB%91%93%07%E35%3E%A7)%D6%7F%40%FE%BD%F7%F5r%8A%E5y%92%F0%EB%B4%1E%8D%D5%F4%5B%92%3AV%DB%DB%E4%CD%A6%23%C3%C4wQ%3F%03HB%82%8E%1Cd(%E0%91B%0Ca%9Ac%C4%AA%F8L%16%19%22J%A4%D2itTy%B28%D6%3B(%93%96%ED%1CGx%C9_%0E%B8%5E%16%F5%5B%B2%B8%F6%E0%FB%9E%DD%25%D7%8E%BC%15%85%C5%B7%A3%D8Q%ED%B5%81%E9%BA%B2%13%9A%1B%7Fua%A5%A3n%E17%B9%E5%9B%1Bm%AB%0B%08Q%FE%8A%E5%B1H%5Ee%CAO%82Q%D7u6%E6%90S%97%FCu%0B%CF2%94%EE%25v%12X%0C%BA%AC%F0%5E%F8*l%0AO%85%17%C2%97%BF%D4%C8%CE%DE%AD%11%CB%80q%2C%3E%AB%9ES%CD%C6%EC%25%D2L%D2%EBd%B8%BF%8A%F5B%C6%18%F9%901CZ%9D%BE%24M%9C%8A9%F2%DAP%0B'%06w%82%EB%E6%E2%5C%2F%D7%07%9E%BB%CC%5D%E1%FA%B9%08%AD.r%23%8E%C2%17%F5E%7C!%F0%BE3%BE%3E_%B7o%88a%A7%DB%BE%D3d%EB%A31Z%EB%BB%D3%91%BA%A2%B1z%94%8F%DB'%F6%3D%8E%AA%13%19%B2%B1%BE%B1~V%08%2B%B4%A2cjJ%B3tO%00%03%25mN%97%F3%05%93%EF%11%84%0B%7C%88%AE-%89%8F%ABbW%90O%2B%0Ao%99%0C%5E%97%0CI%AFH%D9.%B0%3B%8F%ED%03%B6S%D6%5D%E6i_s9%F3*p%E9%1B%FD%C3%EB.7U%06%5E%19%C0%D1s.%17%A03u%E4%09%B0%7C%5E%2C%EB%15%DB%1F%3C%9E%B7%80%91%3B%DBc%AD%3Dma%BA%8B%3EV%AB%DBt.%5B%1E%01%BB%0F%AB%D5%9F%CF%AA%D5%DD%E7%E4%7F%0Bx%A3%FC%06%A9%23%0A%D6%C2%A1_2%00%00%00%09pHYs%00%00%0B%13%00%00%0B%13%01%00%9A%9C%18%00%00%00%3AIDAT8%11c%FC%FF%FF%7F%18%03%1A%60%01%F2%3F%A0%891%80%04%FF%11-%F8%17%9BJ%E2%05%B1ZD%81v%26t%E7%80%F8%A3%82h%A12%1A%20%A3%01%02%0F%01%BA%25%06%00%19%C0%0D%AEF%D5%3ES%00%00%00%00IEND%AEB%60%82\");\n background-repeat: no-repeat, repeat-x;\n background-position: center center, top left;\n color: transparent;\n\n border: 1px solid black;\n -moz-border-radius: 2px;\n -webkit-border-radius: 2px;\n border-radius: 2px;\n \n cursor: pointer;\n pointer-events: auto;\n}\n\n.ace_dark .ace_fold {\n}\n\n.ace_fold:hover{\n background-image: \n url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%11%00%00%00%09%08%06%00%00%00%D4%E8%C7%0C%00%00%03%1EiCCPICC%20Profile%00%00x%01%85T%DFk%D3P%14%FE%DAe%9D%B0%E1%8B%3Ag%11%09%3Eh%91ndStC%9C%B6kW%BA%CDZ%EA6%B7!H%9B%A6m%5C%9A%C6%24%ED~%B0%07%D9%8Bo%3A%C5w%F1%07%3E%F9%07%0C%D9%83o%7B%92%0D%C6%14a%F8%AC%88%22L%F6%22%B3%9E%9B4M'S%03%B9%F7%BB%DF%F9%EE9'%E7%E4%5E%A0%F9qZ%D3%14%2F%0F%14USO%C5%C2%FC%C4%E4%14%DF%F2%01%5E%1CC%2B%FChM%8B%86%16J%26G%40%0F%D3%B2y%EF%B3%F3%0E%1E%C6lt%EEo%DF%AB%FEc%D5%9A%95%0C%11%F0%1C%20%BE%945%C4%22%E1Y%A0i%5C%D4t%13%E0%D6%89%EF%9D15%C2%CDLsX%A7%04%09%1Fg8oc%81%E1%8C%8D%23%96f45%40%9A%09%C2%07%C5B%3AK%B8%408%98i%E0%F3%0D%D8%CE%81%14%E4'%26%A9%92.%8B%3C%ABER%2F%E5dE%B2%0C%F6%F0%1Fs%83%F2_%B0%A8%94%E9%9B%AD%E7%10%8Dm%9A%19N%D1%7C%8A%DE%1F9%7Dp%8C%E6%00%D5%C1%3F_%18%BDA%B8%9DpX6%E3%A35~B%CD%24%AE%11%26%BD%E7%EEti%98%EDe%9A%97Y)%12%25%1C%24%BCbT%AE3li%E6%0B%03%89%9A%E6%D3%ED%F4P%92%B0%9F4%BF43Y%F3%E3%EDP%95%04%EB1%C5%F5%F6KF%F4%BA%BD%D7%DB%91%93%07%E35%3E%A7)%D6%7F%40%FE%BD%F7%F5r%8A%E5y%92%F0%EB%B4%1E%8D%D5%F4%5B%92%3AV%DB%DB%E4%CD%A6%23%C3%C4wQ%3F%03HB%82%8E%1Cd(%E0%91B%0Ca%9Ac%C4%AA%F8L%16%19%22J%A4%D2itTy%B28%D6%3B(%93%96%ED%1CGx%C9_%0E%B8%5E%16%F5%5B%B2%B8%F6%E0%FB%9E%DD%25%D7%8E%BC%15%85%C5%B7%A3%D8Q%ED%B5%81%E9%BA%B2%13%9A%1B%7Fua%A5%A3n%E17%B9%E5%9B%1Bm%AB%0B%08Q%FE%8A%E5%B1H%5Ee%CAO%82Q%D7u6%E6%90S%97%FCu%0B%CF2%94%EE%25v%12X%0C%BA%AC%F0%5E%F8*l%0AO%85%17%C2%97%BF%D4%C8%CE%DE%AD%11%CB%80q%2C%3E%AB%9ES%CD%C6%EC%25%D2L%D2%EBd%B8%BF%8A%F5B%C6%18%F9%901CZ%9D%BE%24M%9C%8A9%F2%DAP%0B'%06w%82%EB%E6%E2%5C%2F%D7%07%9E%BB%CC%5D%E1%FA%B9%08%AD.r%23%8E%C2%17%F5E%7C!%F0%BE3%BE%3E_%B7o%88a%A7%DB%BE%D3d%EB%A31Z%EB%BB%D3%91%BA%A2%B1z%94%8F%DB'%F6%3D%8E%AA%13%19%B2%B1%BE%B1~V%08%2B%B4%A2cjJ%B3tO%00%03%25mN%97%F3%05%93%EF%11%84%0B%7C%88%AE-%89%8F%ABbW%90O%2B%0Ao%99%0C%5E%97%0CI%AFH%D9.%B0%3B%8F%ED%03%B6S%D6%5D%E6i_s9%F3*p%E9%1B%FD%C3%EB.7U%06%5E%19%C0%D1s.%17%A03u%E4%09%B0%7C%5E%2C%EB%15%DB%1F%3C%9E%B7%80%91%3B%DBc%AD%3Dma%BA%8B%3EV%AB%DBt.%5B%1E%01%BB%0F%AB%D5%9F%CF%AA%D5%DD%E7%E4%7F%0Bx%A3%FC%06%A9%23%0A%D6%C2%A1_2%00%00%00%09pHYs%00%00%0B%13%00%00%0B%13%01%00%9A%9C%18%00%00%00%B5IDAT(%15%A5%91%3D%0E%02!%10%85ac%E1%05%D6%CE%D6%C6%CE%D2%E8%ED%CD%DE%C0%C6%D6N.%E0V%F8%3D%9Ca%891XH%C2%BE%D9y%3F%90!%E6%9C%C3%BFk%E5%011%C6-%F5%C8N%04%DF%BD%FF%89%DFt%83DN%60%3E%F3%AB%A0%DE%1A%5Dg%BE%10Q%97%1B%40%9C%A8o%10%8F%5E%828%B4%1B%60%87%F6%02%26%85%1Ch%1E%C1%2B%5Bk%FF%86%EE%B7j%09%9A%DA%9B%ACe%A3%F9%EC%DA!9%B4%D5%A6%81%86%86%98%CC%3C%5B%40%FA%81%B3%E9%CB%23%94%C16Azo%05%D4%E1%C1%95a%3B%8A'%A0%E8%CC%17%22%85%1D%BA%00%A2%FA%DC%0A%94%D1%D1%8D%8B%3A%84%17B%C7%60%1A%25Z%FC%8D%00%00%00%00IEND%AEB%60%82\"),\n url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%05%00%00%007%08%06%00%00%00%C4%DD%80C%00%00%03%1EiCCPICC%20Profile%00%00x%01%85T%DFk%D3P%14%FE%DAe%9D%B0%E1%8B%3Ag%11%09%3Eh%91ndStC%9C%B6kW%BA%CDZ%EA6%B7!H%9B%A6m%5C%9A%C6%24%ED~%B0%07%D9%8Bo%3A%C5w%F1%07%3E%F9%07%0C%D9%83o%7B%92%0D%C6%14a%F8%AC%88%22L%F6%22%B3%9E%9B4M'S%03%B9%F7%BB%DF%F9%EE9'%E7%E4%5E%A0%F9qZ%D3%14%2F%0F%14USO%C5%C2%FC%C4%E4%14%DF%F2%01%5E%1CC%2B%FChM%8B%86%16J%26G%40%0F%D3%B2y%EF%B3%F3%0E%1E%C6lt%EEo%DF%AB%FEc%D5%9A%95%0C%11%F0%1C%20%BE%945%C4%22%E1Y%A0i%5C%D4t%13%E0%D6%89%EF%9D15%C2%CDLsX%A7%04%09%1Fg8oc%81%E1%8C%8D%23%96f45%40%9A%09%C2%07%C5B%3AK%B8%408%98i%E0%F3%0D%D8%CE%81%14%E4'%26%A9%92.%8B%3C%ABER%2F%E5dE%B2%0C%F6%F0%1Fs%83%F2_%B0%A8%94%E9%9B%AD%E7%10%8Dm%9A%19N%D1%7C%8A%DE%1F9%7Dp%8C%E6%00%D5%C1%3F_%18%BDA%B8%9DpX6%E3%A35~B%CD%24%AE%11%26%BD%E7%EEti%98%EDe%9A%97Y)%12%25%1C%24%BCbT%AE3li%E6%0B%03%89%9A%E6%D3%ED%F4P%92%B0%9F4%BF43Y%F3%E3%EDP%95%04%EB1%C5%F5%F6KF%F4%BA%BD%D7%DB%91%93%07%E35%3E%A7)%D6%7F%40%FE%BD%F7%F5r%8A%E5y%92%F0%EB%B4%1E%8D%D5%F4%5B%92%3AV%DB%DB%E4%CD%A6%23%C3%C4wQ%3F%03HB%82%8E%1Cd(%E0%91B%0Ca%9Ac%C4%AA%F8L%16%19%22J%A4%D2itTy%B28%D6%3B(%93%96%ED%1CGx%C9_%0E%B8%5E%16%F5%5B%B2%B8%F6%E0%FB%9E%DD%25%D7%8E%BC%15%85%C5%B7%A3%D8Q%ED%B5%81%E9%BA%B2%13%9A%1B%7Fua%A5%A3n%E17%B9%E5%9B%1Bm%AB%0B%08Q%FE%8A%E5%B1H%5Ee%CAO%82Q%D7u6%E6%90S%97%FCu%0B%CF2%94%EE%25v%12X%0C%BA%AC%F0%5E%F8*l%0AO%85%17%C2%97%BF%D4%C8%CE%DE%AD%11%CB%80q%2C%3E%AB%9ES%CD%C6%EC%25%D2L%D2%EBd%B8%BF%8A%F5B%C6%18%F9%901CZ%9D%BE%24M%9C%8A9%F2%DAP%0B'%06w%82%EB%E6%E2%5C%2F%D7%07%9E%BB%CC%5D%E1%FA%B9%08%AD.r%23%8E%C2%17%F5E%7C!%F0%BE3%BE%3E_%B7o%88a%A7%DB%BE%D3d%EB%A31Z%EB%BB%D3%91%BA%A2%B1z%94%8F%DB'%F6%3D%8E%AA%13%19%B2%B1%BE%B1~V%08%2B%B4%A2cjJ%B3tO%00%03%25mN%97%F3%05%93%EF%11%84%0B%7C%88%AE-%89%8F%ABbW%90O%2B%0Ao%99%0C%5E%97%0CI%AFH%D9.%B0%3B%8F%ED%03%B6S%D6%5D%E6i_s9%F3*p%E9%1B%FD%C3%EB.7U%06%5E%19%C0%D1s.%17%A03u%E4%09%B0%7C%5E%2C%EB%15%DB%1F%3C%9E%B7%80%91%3B%DBc%AD%3Dma%BA%8B%3EV%AB%DBt.%5B%1E%01%BB%0F%AB%D5%9F%CF%AA%D5%DD%E7%E4%7F%0Bx%A3%FC%06%A9%23%0A%D6%C2%A1_2%00%00%00%09pHYs%00%00%0B%13%00%00%0B%13%01%00%9A%9C%18%00%00%003IDAT8%11c%FC%FF%FF%7F%3E%03%1A%60%01%F2%3F%A3%891%80%04%FFQ%26%F8w%C0%B43%A1%DB%0C%E2%8F%0A%A2%85%CAh%80%8C%06%08%3C%04%E8%96%18%00%A3S%0D%CD%CF%D8%C1%9D%00%00%00%00IEND%AEB%60%82\");\n background-repeat: no-repeat, repeat-x;\n background-position: center center, top left;\n}\n\n.ace_dragging .ace_content {\n cursor: move;\n}\n\n.ace_folding-enabled .ace_gutter-cell {\n padding-right: 13px;\n}\n\n.ace_fold-widget {\n box-sizing: border-box;\n -moz-box-sizing: border-box;\n -webkit-box-sizing: border-box;\n\n margin: 0 -12px 1px 1px;\n display: inline-block;\n height: 14px;\n width: 11px;\n vertical-align: text-bottom;\n \n background-image: url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%05%00%00%00%05%08%06%00%00%00%8Do%26%E5%00%00%004IDATx%DAe%8A%B1%0D%000%0C%C2%F2%2CK%96%BC%D0%8F9%81%88H%E9%D0%0E%96%C0%10%92%3E%02%80%5E%82%E4%A9*-%EEsw%C8%CC%11%EE%96w%D8%DC%E9*Eh%0C%151(%00%00%00%00IEND%AEB%60%82\");\n background-repeat: no-repeat;\n background-position: center 5px;\n\n border-radius: 3px;\n}\n\n.ace_fold-widget.end {\n background-image: url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%05%00%00%00%05%08%06%00%00%00%8Do%26%E5%00%00%004IDATx%DAm%C7%C1%09%000%08C%D1%8C%ECE%C8E(%8E%EC%02)%1EZJ%F1%C1'%04%07I%E1%E5%EE%CAL%F5%A2%99%99%22%E2%D6%1FU%B5%FE0%D9x%A7%26Wz5%0E%D5%00%00%00%00IEND%AEB%60%82\");\n}\n\n.ace_fold-widget.closed {\n background-image: url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%03%00%00%00%06%08%06%00%00%00%06%E5%24%0C%00%00%009IDATx%DA5%CA%C1%09%000%08%03%C0%AC*(%3E%04%C1%0D%BA%B1%23%A4Uh%E0%20%81%C0%CC%F8%82%81%AA%A2%AArGfr%88%08%11%11%1C%DD%7D%E0%EE%5B%F6%F6%CB%B8%05Q%2F%E9tai%D9%00%00%00%00IEND%AEB%60%82\");\n}\n\n.ace_fold-widget:hover {\n border: 1px solid rgba(0, 0, 0, 0.3);\n background-color: rgba(255, 255, 255, 0.2);\n -moz-box-shadow:inset 0 1px 1px rgba(255, 255, 255, 0.7);\n -moz-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\n -webkit-box-shadow:inset 0 1px 1px rgba(255, 255, 255, 0.7);\n -webkit-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\n box-shadow:inset 0 1px 1px rgba(255, 255, 255, 0.7);\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\n background-position: center 4px;\n}\n\n.ace_fold-widget:active {\n border: 1px solid rgba(0, 0, 0, 0.4);\n background-color: rgba(0, 0, 0, 0.05);\n -moz-box-shadow:inset 0 1px 1px rgba(255, 255, 255);\n -moz-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\n -webkit-box-shadow:inset 0 1px 1px rgba(255, 255, 255);\n -webkit-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\n box-shadow:inset 0 1px 1px rgba(255, 255, 255);\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\n}\n\n.ace_fold-widget.invalid {\n background-color: #FFB4B4;\n border-color: #DE5555;\n}\n"),define("ace/theme/textmate",["require","exports","module","ace/lib/dom"],function(a,b,c){"use strict",b.isDark=!1,b.cssClass="ace-tm",b.cssText=".ace-tm .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-tm .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-tm .ace_gutter { background: #e8e8e8; color: #333;}.ace-tm .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-tm .ace_fold { background-color: #0000A2;}.ace-tm .ace_text-layer { cursor: text;}.ace-tm .ace_cursor { border-left: 2px solid black;}.ace-tm .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid black;} .ace-tm .ace_line .ace_invisible { color: rgb(191, 191, 191);}.ace-tm .ace_line .ace_keyword { color: blue;}.ace-tm .ace_line .ace_constant.ace_buildin { color: rgb(88, 72, 246);}.ace-tm .ace_line .ace_constant.ace_language { color: rgb(88, 92, 246);}.ace-tm .ace_line .ace_constant.ace_library { color: rgb(6, 150, 14);}.ace-tm .ace_line .ace_invalid { background-color: rgb(153, 0, 0); color: white;}.ace-tm .ace_line .ace_support.ace_function { color: rgb(60, 76, 114);}.ace-tm .ace_line .ace_support.ace_constant { color: rgb(6, 150, 14);}.ace-tm .ace_line .ace_support.ace_type,.ace-tm .ace_line .ace_support.ace_class { color: rgb(109, 121, 222);}.ace-tm .ace_line .ace_keyword.ace_operator { color: rgb(104, 118, 135);}.ace-tm .ace_line .ace_string { color: rgb(3, 106, 7);}.ace-tm .ace_line .ace_comment { color: rgb(76, 136, 107);}.ace-tm .ace_line .ace_comment.ace_doc { color: rgb(0, 102, 255);}.ace-tm .ace_line .ace_comment.ace_doc.ace_tag { color: rgb(128, 159, 191);}.ace-tm .ace_line .ace_constant.ace_numeric { color: rgb(0, 0, 205);}.ace-tm .ace_line .ace_variable { color: rgb(49, 132, 149);}.ace-tm .ace_line .ace_xml_pe { color: rgb(104, 104, 91);}.ace-tm .ace_entity.ace_name.ace_function { color: #0000A2;}.ace-tm .ace_markup.ace_markupine { text-decoration:underline;}.ace-tm .ace_markup.ace_heading { color: rgb(12, 7, 255);}.ace-tm .ace_markup.ace_list { color:rgb(185, 6, 144);}.ace-tm .ace_marker-layer .ace_selection { background: rgb(181, 213, 255);}.ace-tm .ace_marker-layer .ace_step { background: rgb(252, 255, 0);}.ace-tm .ace_marker-layer .ace_stack { background: rgb(164, 229, 101);}.ace-tm .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid rgb(192, 192, 192);}.ace-tm .ace_marker-layer .ace_active_line { background: rgba(0, 0, 0, 0.07);}.ace-tm .ace_marker-layer .ace_selected_word { background: rgb(250, 250, 255); border: 1px solid rgb(200, 200, 250);}.ace-tm .ace_meta.ace_tag { color:rgb(28, 2, 255);}.ace-tm .ace_string.ace_regex { color: rgb(255, 0, 0)}";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}),function(){window.require(["ace/ace"],function(a){window.ace||(window.ace={});for(var b in a)a.hasOwnProperty(b)&&(ace[b]=a[b])})}() \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/cockpit-uncompressed.js b/apps/files_texteditor/js/aceeditor/cockpit-uncompressed.js
deleted file mode 100644
index ac7ef1ab169..00000000000
--- a/apps/files_texteditor/js/aceeditor/cockpit-uncompressed.js
+++ /dev/null
@@ -1,2504 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Mozilla Skywriter.
- *
- * The Initial Developer of the Original Code is
- * Mozilla.
- * Portions created by the Initial Developer are Copyright (C) 2009
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Kevin Dangoor (kdangoor@mozilla.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('cockpit/index', ['require', 'exports', 'module' , 'pilot/index', 'cockpit/cli', 'cockpit/ui/settings', 'cockpit/ui/cli_view', 'cockpit/commands/basic'], function(require, exports, module) {
-
-
-exports.startup = function(data, reason) {
- require('pilot/index');
- require('cockpit/cli').startup(data, reason);
- // window.testCli = require('cockpit/test/testCli');
-
- require('cockpit/ui/settings').startup(data, reason);
- require('cockpit/ui/cli_view').startup(data, reason);
- require('cockpit/commands/basic').startup(data, reason);
-};
-
-/*
-exports.shutdown(data, reason) {
-};
-*/
-
-
-});
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Skywriter.
- *
- * The Initial Developer of the Original Code is
- * Mozilla.
- * Portions created by the Initial Developer are Copyright (C) 2009
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Joe Walker (jwalker@mozilla.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('cockpit/cli', ['require', 'exports', 'module' , 'pilot/console', 'pilot/lang', 'pilot/oop', 'pilot/event_emitter', 'pilot/types', 'pilot/canon'], function(require, exports, module) {
-
-
-var console = require('pilot/console');
-var lang = require('pilot/lang');
-var oop = require('pilot/oop');
-var EventEmitter = require('pilot/event_emitter').EventEmitter;
-
-//var keyboard = require('keyboard/keyboard');
-var types = require('pilot/types');
-var Status = require('pilot/types').Status;
-var Conversion = require('pilot/types').Conversion;
-var canon = require('pilot/canon');
-
-/**
- * Normally type upgrade is done when the owning command is registered, but
- * out commandParam isn't part of a command, so it misses out.
- */
-exports.startup = function(data, reason) {
- canon.upgradeType('command', commandParam);
-};
-
-/**
- * The information required to tell the user there is a problem with their
- * input.
- * TODO: There a several places where {start,end} crop up. Perhaps we should
- * have a Cursor object.
- */
-function Hint(status, message, start, end, predictions) {
- this.status = status;
- this.message = message;
-
- if (typeof start === 'number') {
- this.start = start;
- this.end = end;
- this.predictions = predictions;
- }
- else {
- var arg = start;
- this.start = arg.start;
- this.end = arg.end;
- this.predictions = arg.predictions;
- }
-}
-Hint.prototype = {
-};
-/**
- * Loop over the array of hints finding the one we should display.
- * @param hints array of hints
- */
-Hint.sort = function(hints, cursor) {
- // Calculate 'distance from cursor'
- if (cursor !== undefined) {
- hints.forEach(function(hint) {
- if (hint.start === Argument.AT_CURSOR) {
- hint.distance = 0;
- }
- else if (cursor < hint.start) {
- hint.distance = hint.start - cursor;
- }
- else if (cursor > hint.end) {
- hint.distance = cursor - hint.end;
- }
- else {
- hint.distance = 0;
- }
- }, this);
- }
- // Sort
- hints.sort(function(hint1, hint2) {
- // Compare first based on distance from cursor
- if (cursor !== undefined) {
- var diff = hint1.distance - hint2.distance;
- if (diff != 0) {
- return diff;
- }
- }
- // otherwise go with hint severity
- return hint2.status - hint1.status;
- });
- // tidy-up
- if (cursor !== undefined) {
- hints.forEach(function(hint) {
- delete hint.distance;
- }, this);
- }
- return hints;
-};
-exports.Hint = Hint;
-
-/**
- * A Hint that arose as a result of a Conversion
- */
-function ConversionHint(conversion, arg) {
- this.status = conversion.status;
- this.message = conversion.message;
- if (arg) {
- this.start = arg.start;
- this.end = arg.end;
- }
- else {
- this.start = 0;
- this.end = 0;
- }
- this.predictions = conversion.predictions;
-};
-oop.inherits(ConversionHint, Hint);
-
-
-/**
- * We record where in the input string an argument comes so we can report errors
- * against those string positions.
- * We publish a 'change' event when-ever the text changes
- * @param emitter Arguments use something else to pass on change events.
- * Currently this will be the creating Requisition. This prevents dependency
- * loops and prevents us from needing to merge listener lists.
- * @param text The string (trimmed) that contains the argument
- * @param start The position of the text in the original input string
- * @param end See start
- * @param prefix Knowledge of quotation marks and whitespace used prior to the
- * text in the input string allows us to re-generate the original input from
- * the arguments.
- * @param suffix Any quotation marks and whitespace used after the text.
- * Whitespace is normally placed in the prefix to the succeeding argument, but
- * can be used here when this is the last argument.
- * @constructor
- */
-function Argument(emitter, text, start, end, prefix, suffix) {
- this.emitter = emitter;
- this.setText(text);
- this.start = start;
- this.end = end;
- this.prefix = prefix;
- this.suffix = suffix;
-}
-Argument.prototype = {
- /**
- * Return the result of merging these arguments.
- * TODO: What happens when we're merging arguments for the single string
- * case and some of the arguments are in quotation marks?
- */
- merge: function(following) {
- if (following.emitter != this.emitter) {
- throw new Error('Can\'t merge Arguments from different EventEmitters');
- }
- return new Argument(
- this.emitter,
- this.text + this.suffix + following.prefix + following.text,
- this.start, following.end,
- this.prefix,
- following.suffix);
- },
-
- /**
- * See notes on events in Assignment. We might need to hook changes here
- * into a CliRequisition so they appear of the command line.
- */
- setText: function(text) {
- if (text == null) {
- throw new Error('Illegal text for Argument: ' + text);
- }
- var ev = { argument: this, oldText: this.text, text: text };
- this.text = text;
- this.emitter._dispatchEvent('argumentChange', ev);
- },
-
- /**
- * Helper when we're putting arguments back together
- */
- toString: function() {
- // TODO: There is a bug here - we should re-escape escaped characters
- // But can we do that reliably?
- return this.prefix + this.text + this.suffix;
- }
-};
-
-/**
- * Merge an array of arguments into a single argument.
- * All Arguments in the array are expected to have the same emitter
- */
-Argument.merge = function(argArray, start, end) {
- start = (start === undefined) ? 0 : start;
- end = (end === undefined) ? argArray.length : end;
-
- var joined;
- for (var i = start; i < end; i++) {
- var arg = argArray[i];
- if (!joined) {
- joined = arg;
- }
- else {
- joined = joined.merge(arg);
- }
- }
- return joined;
-};
-
-/**
- * We sometimes need a way to say 'this error occurs where ever the cursor is'
- */
-Argument.AT_CURSOR = -1;
-
-
-/**
- * A link between a parameter and the data for that parameter.
- * The data for the parameter is available as in the preferred type and as
- * an Argument for the CLI.
- * <p>We also record validity information where applicable.
- * <p>For values, null and undefined have distinct definitions. null means
- * that a value has been provided, undefined means that it has not.
- * Thus, null is a valid default value, and common because it identifies an
- * parameter that is optional. undefined means there is no value from
- * the command line.
- * @constructor
- */
-function Assignment(param, requisition) {
- this.param = param;
- this.requisition = requisition;
- this.setValue(param.defaultValue);
-};
-Assignment.prototype = {
- /**
- * The parameter that we are assigning to
- * @readonly
- */
- param: undefined,
-
- /**
- * Report on the status of the last parse() conversion.
- * @see types.Conversion
- */
- conversion: undefined,
-
- /**
- * The current value in a type as specified by param.type
- */
- value: undefined,
-
- /**
- * The string version of the current value
- */
- arg: undefined,
-
- /**
- * The current value (i.e. not the string representation)
- * Use setValue() to mutate
- */
- value: undefined,
- setValue: function(value) {
- if (this.value === value) {
- return;
- }
-
- if (value === undefined) {
- this.value = this.param.defaultValue;
- this.conversion = this.param.getDefault ?
- this.param.getDefault() :
- this.param.type.getDefault();
- this.arg = undefined;
- } else {
- this.value = value;
- this.conversion = undefined;
- var text = (value == null) ? '' : this.param.type.stringify(value);
- if (this.arg) {
- this.arg.setText(text);
- }
- }
-
- this.requisition._assignmentChanged(this);
- },
-
- /**
- * The textual representation of the current value
- * Use setValue() to mutate
- */
- arg: undefined,
- setArgument: function(arg) {
- if (this.arg === arg) {
- return;
- }
- this.arg = arg;
- this.conversion = this.param.type.parse(arg.text);
- this.conversion.arg = arg; // TODO: make this automatic?
- this.value = this.conversion.value;
- this.requisition._assignmentChanged(this);
- },
-
- /**
- * Create a list of the hints associated with this parameter assignment.
- * Generally there will be only one hint generated because we're currently
- * only displaying one hint at a time, ordering by distance from cursor
- * and severity. Since distance from cursor will be the same for all hints
- * from this assignment all but the most severe will ever be used. It might
- * make sense with more experience to alter this to function to be getHint()
- */
- getHint: function() {
- // Allow the parameter to provide documentation
- if (this.param.getCustomHint && this.value && this.arg) {
- var hint = this.param.getCustomHint(this.value, this.arg);
- if (hint) {
- return hint;
- }
- }
-
- // If there is no argument, use the cursor position
- var message = '<strong>' + this.param.name + '</strong>: ';
- if (this.param.description) {
- // TODO: This should be a short description - do we need to trim?
- message += this.param.description.trim();
-
- // Ensure the help text ends with '. '
- if (message.charAt(message.length - 1) !== '.') {
- message += '.';
- }
- if (message.charAt(message.length - 1) !== ' ') {
- message += ' ';
- }
- }
- var status = Status.VALID;
- var start = this.arg ? this.arg.start : Argument.AT_CURSOR;
- var end = this.arg ? this.arg.end : Argument.AT_CURSOR;
- var predictions;
-
- // Non-valid conversions will have useful information to pass on
- if (this.conversion) {
- status = this.conversion.status;
- if (this.conversion.message) {
- message += this.conversion.message;
- }
- predictions = this.conversion.predictions;
- }
-
- // Hint if the param is required, but not provided
- var argProvided = this.arg && this.arg.text !== '';
- var dataProvided = this.value !== undefined || argProvided;
- if (this.param.defaultValue === undefined && !dataProvided) {
- status = Status.INVALID;
- message += '<strong>Required<\strong>';
- }
-
- return new Hint(status, message, start, end, predictions);
- },
-
- /**
- * Basically <tt>setValue(conversion.predictions[0])</tt> done in a safe
- * way.
- */
- complete: function() {
- if (this.conversion && this.conversion.predictions &&
- this.conversion.predictions.length > 0) {
- this.setValue(this.conversion.predictions[0]);
- }
- },
-
- /**
- * If the cursor is at 'position', do we have sufficient data to start
- * displaying the next hint. This is both complex and important.
- * For example, if the user has just typed:<ul>
- * <li>'set tabstop ' then they clearly want to know about the valid
- * values for the tabstop setting, so the hint is based on the next
- * parameter.
- * <li>'set tabstop' (without trailing space) - they will probably still
- * want to know about the valid values for the tabstop setting because
- * there is no confusion about the setting in question.
- * <li>'set tabsto' they've not finished typing a setting name so the hint
- * should be based on the current parameter.
- * <li>'set tabstop' (when there is an additional tabstopstyle setting) we
- * can't make assumptions about the setting - we're not finished.
- * </ul>
- * <p>Note that the input for 2 and 4 is identical, only the configuration
- * has changed, so hint display is environmental.
- *
- * <p>This function works out if the cursor is before the end of this
- * assignment (assuming that we've asked the same thing of the previous
- * assignment) and then attempts to work out if we should use the hint from
- * the next assignment even though technically the cursor is still inside
- * this one due to the rules above.
- */
- isPositionCaptured: function(position) {
- if (!this.arg) {
- return false;
- }
-
- // Note we don't check if position >= this.arg.start because that's
- // implied by the fact that we're asking the assignments in turn, and
- // we want to avoid thing falling between the cracks, but we do need
- // to check that the argument does have a position
- if (this.arg.start === -1) {
- return false;
- }
-
- // We're clearly done if the position is past the end of the text
- if (position > this.arg.end) {
- return false;
- }
-
- // If we're AT the end, the position is captured if either the status
- // is not valid or if there are other valid options including current
- if (position === this.arg.end) {
- return this.conversion.status !== Status.VALID ||
- this.conversion.predictions.length !== 0;
- }
-
- // Otherwise we're clearly inside
- return true;
- },
-
- /**
- * Replace the current value with the lower value if such a concept
- * exists.
- */
- decrement: function() {
- var replacement = this.param.type.decrement(this.value);
- if (replacement != null) {
- this.setValue(replacement);
- }
- },
-
- /**
- * Replace the current value with the higher value if such a concept
- * exists.
- */
- increment: function() {
- var replacement = this.param.type.increment(this.value);
- if (replacement != null) {
- this.setValue(replacement);
- }
- },
-
- /**
- * Helper when we're rebuilding command lines.
- */
- toString: function() {
- return this.arg ? this.arg.toString() : '';
- }
-};
-exports.Assignment = Assignment;
-
-
-/**
- * This is a special parameter to reflect the command itself.
- */
-var commandParam = {
- name: '__command',
- type: 'command',
- description: 'The command to execute',
-
- /**
- * Provide some documentation for a command.
- */
- getCustomHint: function(command, arg) {
- var docs = [];
- docs.push('<strong><tt> &gt; ');
- docs.push(command.name);
- if (command.params && command.params.length > 0) {
- command.params.forEach(function(param) {
- if (param.defaultValue === undefined) {
- docs.push(' [' + param.name + ']');
- }
- else {
- docs.push(' <em>[' + param.name + ']</em>');
- }
- }, this);
- }
- docs.push('</tt></strong><br/>');
-
- docs.push(command.description ? command.description : '(No description)');
- docs.push('<br/>');
-
- if (command.params && command.params.length > 0) {
- docs.push('<ul>');
- command.params.forEach(function(param) {
- docs.push('<li>');
- docs.push('<strong><tt>' + param.name + '</tt></strong>: ');
- docs.push(param.description ? param.description : '(No description)');
- if (param.defaultValue === undefined) {
- docs.push(' <em>[Required]</em>');
- }
- else if (param.defaultValue === null) {
- docs.push(' <em>[Optional]</em>');
- }
- else {
- docs.push(' <em>[Default: ' + param.defaultValue + ']</em>');
- }
- docs.push('</li>');
- }, this);
- docs.push('</ul>');
- }
-
- return new Hint(Status.VALID, docs.join(''), arg);
- }
-};
-
-/**
- * A Requisition collects the information needed to execute a command.
- * There is no point in a requisition for parameter-less commands because there
- * is no information to collect. A Requisition is a collection of assignments
- * of values to parameters, each handled by an instance of Assignment.
- * CliRequisition adds functions for parsing input from a command line to this
- * class.
- * <h2>Events<h2>
- * We publish the following events:<ul>
- * <li>argumentChange: The text of some argument has changed. It is likely that
- * any UI component displaying this argument will need to be updated. (Note that
- * this event is actually published by the Argument itself - see the docs for
- * Argument for more details)
- * The event object looks like: { argument: A, oldText: B, text: B }
- * <li>commandChange: The command has changed. It is likely that a UI
- * structure will need updating to match the parameters of the new command.
- * The event object looks like { command: A }
- * @constructor
- */
-function Requisition(env) {
- this.env = env;
- this.commandAssignment = new Assignment(commandParam, this);
-}
-
-Requisition.prototype = {
- /**
- * The command that we are about to execute.
- * @see setCommandConversion()
- * @readonly
- */
- commandAssignment: undefined,
-
- /**
- * The count of assignments. Excludes the commandAssignment
- * @readonly
- */
- assignmentCount: undefined,
-
- /**
- * The object that stores of Assignment objects that we are filling out.
- * The Assignment objects are stored under their param.name for named
- * lookup. Note: We make use of the property of Javascript objects that
- * they are not just hashmaps, but linked-list hashmaps which iterate in
- * insertion order.
- * Excludes the commandAssignment.
- */
- _assignments: undefined,
-
- /**
- * The store of hints generated by the assignments. We are trying to prevent
- * the UI from needing to access this in broad form, but instead use
- * methods that query part of this structure.
- */
- _hints: undefined,
-
- /**
- * When the command changes, we need to keep a bunch of stuff in sync
- */
- _assignmentChanged: function(assignment) {
- // This is all about re-creating Assignments
- if (assignment.param.name !== '__command') {
- return;
- }
-
- this._assignments = {};
-
- if (assignment.value) {
- assignment.value.params.forEach(function(param) {
- this._assignments[param.name] = new Assignment(param, this);
- }, this);
- }
-
- this.assignmentCount = Object.keys(this._assignments).length;
- this._dispatchEvent('commandChange', { command: assignment.value });
- },
-
- /**
- * Assignments have an order, so we need to store them in an array.
- * But we also need named access ...
- */
- getAssignment: function(nameOrNumber) {
- var name = (typeof nameOrNumber === 'string') ?
- nameOrNumber :
- Object.keys(this._assignments)[nameOrNumber];
- return this._assignments[name];
- },
-
- /**
- * Where parameter name == assignment names - they are the same.
- */
- getParameterNames: function() {
- return Object.keys(this._assignments);
- },
-
- /**
- * A *shallow* clone of the assignments.
- * This is useful for systems that wish to go over all the assignments
- * finding values one way or another and wish to trim an array as they go.
- */
- cloneAssignments: function() {
- return Object.keys(this._assignments).map(function(name) {
- return this._assignments[name];
- }, this);
- },
-
- /**
- * Collect the statuses from the Assignments.
- * The hints returned are sorted by severity
- */
- _updateHints: function() {
- // TODO: work out when to clear this out for the plain Requisition case
- // this._hints = [];
- this.getAssignments(true).forEach(function(assignment) {
- this._hints.push(assignment.getHint());
- }, this);
- Hint.sort(this._hints);
-
- // We would like to put some initial help here, but for anyone but
- // a complete novice a 'type help' message is very annoying, so we
- // need to find a way to only display this message once, or for
- // until the user click a 'close' button or similar
- // TODO: Add special case for '' input
- },
-
- /**
- * Returns the most severe status
- */
- getWorstHint: function() {
- return this._hints[0];
- },
-
- /**
- * Extract the names and values of all the assignments, and return as
- * an object.
- */
- getArgsObject: function() {
- var args = {};
- this.getAssignments().forEach(function(assignment) {
- args[assignment.param.name] = assignment.value;
- }, this);
- return args;
- },
-
- /**
- * Access the arguments as an array.
- * @param includeCommand By default only the parameter arguments are
- * returned unless (includeCommand === true), in which case the list is
- * prepended with commandAssignment.arg
- */
- getAssignments: function(includeCommand) {
- var args = [];
- if (includeCommand === true) {
- args.push(this.commandAssignment);
- }
- Object.keys(this._assignments).forEach(function(name) {
- args.push(this.getAssignment(name));
- }, this);
- return args;
- },
-
- /**
- * Reset all the assignments to their default values
- */
- setDefaultValues: function() {
- this.getAssignments().forEach(function(assignment) {
- assignment.setValue(undefined);
- }, this);
- },
-
- /**
- * Helper to call canon.exec
- */
- exec: function() {
- canon.exec(this.commandAssignment.value,
- this.env,
- "cli",
- this.getArgsObject(),
- this.toCanonicalString());
- },
-
- /**
- * Extract a canonical version of the input
- */
- toCanonicalString: function() {
- var line = [];
- line.push(this.commandAssignment.value.name);
- Object.keys(this._assignments).forEach(function(name) {
- var assignment = this._assignments[name];
- var type = assignment.param.type;
- // TODO: This will cause problems if there is a non-default value
- // after a default value. Also we need to decide when to use
- // named parameters in place of positional params. Both can wait.
- if (assignment.value !== assignment.param.defaultValue) {
- line.push(' ');
- line.push(type.stringify(assignment.value));
- }
- }, this);
- return line.join('');
- }
-};
-oop.implement(Requisition.prototype, EventEmitter);
-exports.Requisition = Requisition;
-
-
-/**
- * An object used during command line parsing to hold the various intermediate
- * data steps.
- * <p>The 'output' of the update is held in 2 objects: input.hints which is an
- * array of hints to display to the user. In the future this will become a
- * single value.
- * <p>The other output value is input.requisition which gives access to an
- * args object for use in executing the final command.
- *
- * <p>The majority of the functions in this class are called in sequence by the
- * constructor. Their task is to add to <tt>hints</tt> fill out the requisition.
- * <p>The general sequence is:<ul>
- * <li>_tokenize(): convert _typed into _parts
- * <li>_split(): convert _parts into _command and _unparsedArgs
- * <li>_assign(): convert _unparsedArgs into requisition
- * </ul>
- *
- * @param typed {string} The instruction as typed by the user so far
- * @param options {object} A list of optional named parameters. Can be any of:
- * <b>flags</b>: Flags for us to check against the predicates specified with the
- * commands. Defaulted to <tt>keyboard.buildFlags({ });</tt>
- * if not specified.
- * @constructor
- */
-function CliRequisition(env, options) {
- Requisition.call(this, env);
-
- if (options && options.flags) {
- /**
- * TODO: We were using a default of keyboard.buildFlags({ });
- * This allowed us to have commands that only existed in certain contexts
- * - i.e. Javascript specific commands.
- */
- this.flags = options.flags;
- }
-}
-oop.inherits(CliRequisition, Requisition);
-(function() {
- /**
- * Called by the UI when ever the user interacts with a command line input
- * @param input A structure that details the state of the input field.
- * It should look something like: { typed:a, cursor: { start:b, end:c } }
- * Where a is the contents of the input field, and b and c are the start
- * and end of the cursor/selection respectively.
- */
- CliRequisition.prototype.update = function(input) {
- this.input = input;
- this._hints = [];
-
- var args = this._tokenize(input.typed);
- this._split(args);
-
- if (this.commandAssignment.value) {
- this._assign(args);
- }
-
- this._updateHints();
- };
-
- /**
- * Return an array of Status scores so we can create a marked up
- * version of the command line input.
- */
- CliRequisition.prototype.getInputStatusMarkup = function() {
- // 'scores' is an array which tells us what chars are errors
- // Initialize with everything VALID
- var scores = this.toString().split('').map(function(ch) {
- return Status.VALID;
- });
- // For all chars in all hints, check and upgrade the score
- this._hints.forEach(function(hint) {
- for (var i = hint.start; i <= hint.end; i++) {
- if (hint.status > scores[i]) {
- scores[i] = hint.status;
- }
- }
- }, this);
- return scores;
- };
-
- /**
- * Reconstitute the input from the args
- */
- CliRequisition.prototype.toString = function() {
- return this.getAssignments(true).map(function(assignment) {
- return assignment.toString();
- }, this).join('');
- };
-
- var superUpdateHints = CliRequisition.prototype._updateHints;
- /**
- * Marks up hints in a number of ways:
- * - Makes INCOMPLETE hints that are not near the cursor INVALID since
- * they can't be completed by typing
- * - Finds the most severe hint, and annotates the array with it
- * - Finds the hint to display, and also annotates the array with it
- * TODO: I'm wondering if array annotation is evil and we should replace
- * this with an object. Need to find out more.
- */
- CliRequisition.prototype._updateHints = function() {
- superUpdateHints.call(this);
-
- // Not knowing about cursor positioning, the requisition and assignments
- // can't know this, but anything they mark as INCOMPLETE is actually
- // INVALID unless the cursor is actually inside that argument.
- var c = this.input.cursor;
- this._hints.forEach(function(hint) {
- var startInHint = c.start >= hint.start && c.start <= hint.end;
- var endInHint = c.end >= hint.start && c.end <= hint.end;
- var inHint = startInHint || endInHint;
- if (!inHint && hint.status === Status.INCOMPLETE) {
- hint.status = Status.INVALID;
- }
- }, this);
-
- Hint.sort(this._hints);
- };
-
- /**
- * Accessor for the hints array.
- * While we could just use the hints property, using getHints() is
- * preferred for symmetry with Requisition where it needs a function due to
- * lack of an atomic update system.
- */
- CliRequisition.prototype.getHints = function() {
- return this._hints;
- };
-
- /**
- * Look through the arguments attached to our assignments for the assignment
- * at the given position.
- */
- CliRequisition.prototype.getAssignmentAt = function(position) {
- var assignments = this.getAssignments(true);
- for (var i = 0; i < assignments.length; i++) {
- var assignment = assignments[i];
- if (!assignment.arg) {
- // There is no argument in this assignment, we've fallen off
- // the end of the obvious answers - it must be this one.
- return assignment;
- }
- if (assignment.isPositionCaptured(position)) {
- return assignment;
- }
- }
-
- return assignment;
- };
-
- /**
- * Split up the input taking into account ' and "
- */
- CliRequisition.prototype._tokenize = function(typed) {
- // For blank input, place a dummy empty argument into the list
- if (typed == null || typed.length === 0) {
- return [ new Argument(this, '', 0, 0, '', '') ];
- }
-
- var OUTSIDE = 1; // The last character was whitespace
- var IN_SIMPLE = 2; // The last character was part of a parameter
- var IN_SINGLE_Q = 3; // We're inside a single quote: '
- var IN_DOUBLE_Q = 4; // We're inside double quotes: "
-
- var mode = OUTSIDE;
-
- // First we un-escape. This list was taken from:
- // https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Core_Language_Features#Unicode
- // We are generally converting to their real values except for \', \"
- // and '\ ' which we are converting to unicode private characters so we
- // can distinguish them from ', " and ' ', which have special meaning.
- // They need swapping back post-split - see unescape2()
- typed = typed
- .replace(/\\\\/g, '\\')
- .replace(/\\b/g, '\b')
- .replace(/\\f/g, '\f')
- .replace(/\\n/g, '\n')
- .replace(/\\r/g, '\r')
- .replace(/\\t/g, '\t')
- .replace(/\\v/g, '\v')
- .replace(/\\n/g, '\n')
- .replace(/\\r/g, '\r')
- .replace(/\\ /g, '\uF000')
- .replace(/\\'/g, '\uF001')
- .replace(/\\"/g, '\uF002');
-
- function unescape2(str) {
- return str
- .replace(/\uF000/g, ' ')
- .replace(/\uF001/g, '\'')
- .replace(/\uF002/g, '"');
- }
-
- var i = 0;
- var start = 0; // Where did this section start?
- var prefix = '';
- var args = [];
-
- while (true) {
- if (i >= typed.length) {
- // There is nothing else to read - tidy up
- if (mode !== OUTSIDE) {
- var str = unescape2(typed.substring(start, i));
- args.push(new Argument(this, str, start, i, prefix, ''));
- }
- else {
- if (i !== start) {
- // There's a bunch of whitespace at the end of the
- // command add it to the last argument's suffix,
- // creating an empty argument if needed.
- var extra = typed.substring(start, i);
- var lastArg = args[args.length - 1];
- if (!lastArg) {
- lastArg = new Argument(this, '', i, i, extra, '');
- args.push(lastArg);
- }
- else {
- lastArg.suffix += extra;
- }
- }
- }
- break;
- }
-
- var c = typed[i];
- switch (mode) {
- case OUTSIDE:
- if (c === '\'') {
- prefix = typed.substring(start, i + 1);
- mode = IN_SINGLE_Q;
- start = i + 1;
- }
- else if (c === '"') {
- prefix = typed.substring(start, i + 1);
- mode = IN_DOUBLE_Q;
- start = i + 1;
- }
- else if (/ /.test(c)) {
- // Still whitespace, do nothing
- }
- else {
- prefix = typed.substring(start, i);
- mode = IN_SIMPLE;
- start = i;
- }
- break;
-
- case IN_SIMPLE:
- // There is an edge case of xx'xx which we are assuming to
- // be a single parameter (and same with ")
- if (c === ' ') {
- var str = unescape2(typed.substring(start, i));
- args.push(new Argument(this, str,
- start, i, prefix, ''));
- mode = OUTSIDE;
- start = i;
- prefix = '';
- }
- break;
-
- case IN_SINGLE_Q:
- if (c === '\'') {
- var str = unescape2(typed.substring(start, i));
- args.push(new Argument(this, str,
- start - 1, i + 1, prefix, c));
- mode = OUTSIDE;
- start = i + 1;
- prefix = '';
- }
- break;
-
- case IN_DOUBLE_Q:
- if (c === '"') {
- var str = unescape2(typed.substring(start, i));
- args.push(new Argument(this, str,
- start - 1, i + 1, prefix, c));
- mode = OUTSIDE;
- start = i + 1;
- prefix = '';
- }
- break;
- }
-
- i++;
- }
-
- return args;
- };
-
- /**
- * Looks in the canon for a command extension that matches what has been
- * typed at the command line.
- */
- CliRequisition.prototype._split = function(args) {
- var argsUsed = 1;
- var arg;
-
- while (argsUsed <= args.length) {
- var arg = Argument.merge(args, 0, argsUsed);
- this.commandAssignment.setArgument(arg);
-
- if (!this.commandAssignment.value) {
- // Not found. break with value == null
- break;
- }
-
- /*
- // Previously we needed a way to hide commands depending context.
- // We have not resurrected that feature yet.
- if (!keyboard.flagsMatch(command.predicates, this.flags)) {
- // If the predicates say 'no match' then go LA LA LA
- command = null;
- break;
- }
- */
-
- if (this.commandAssignment.value.exec) {
- // Valid command, break with command valid
- for (var i = 0; i < argsUsed; i++) {
- args.shift();
- }
- break;
- }
-
- argsUsed++;
- }
- };
-
- /**
- * Work out which arguments are applicable to which parameters.
- * <p>This takes #_command.params and #_unparsedArgs and creates a map of
- * param names to 'assignment' objects, which have the following properties:
- * <ul>
- * <li>param - The matching parameter.
- * <li>index - Zero based index into where the match came from on the input
- * <li>value - The matching input
- * </ul>
- */
- CliRequisition.prototype._assign = function(args) {
- if (args.length === 0) {
- this.setDefaultValues();
- return;
- }
-
- // Create an error if the command does not take parameters, but we have
- // been given them ...
- if (this.assignmentCount === 0) {
- // TODO: previously we were doing some extra work to avoid this if
- // we determined that we had args that were all whitespace, but
- // probably given our tighter tokenize() this won't be an issue?
- this._hints.push(new Hint(Status.INVALID,
- this.commandAssignment.value.name +
- ' does not take any parameters',
- Argument.merge(args)));
- return;
- }
-
- // Special case: if there is only 1 parameter, and that's of type
- // text we put all the params into the first param
- if (this.assignmentCount === 1) {
- var assignment = this.getAssignment(0);
- if (assignment.param.type.name === 'text') {
- assignment.setArgument(Argument.merge(args));
- return;
- }
- }
-
- var assignments = this.cloneAssignments();
- var names = this.getParameterNames();
-
- // Extract all the named parameters
- var used = [];
- assignments.forEach(function(assignment) {
- var namedArgText = '--' + assignment.name;
-
- var i = 0;
- while (true) {
- var arg = args[i];
- if (namedArgText !== arg.text) {
- i++;
- if (i >= args.length) {
- break;
- }
- continue;
- }
-
- // boolean parameters don't have values, default to false
- if (assignment.param.type.name === 'boolean') {
- assignment.setValue(true);
- }
- else {
- if (i + 1 < args.length) {
- // Missing value portion of this named param
- this._hints.push(new Hint(Status.INCOMPLETE,
- 'Missing value for: ' + namedArgText,
- args[i]));
- }
- else {
- args.splice(i + 1, 1);
- assignment.setArgument(args[i + 1]);
- }
- }
-
- lang.arrayRemove(names, assignment.name);
- args.splice(i, 1);
- // We don't need to i++ if we splice
- }
- }, this);
-
- // What's left are positional parameters assign in order
- names.forEach(function(name) {
- var assignment = this.getAssignment(name);
- if (args.length === 0) {
- // No more values
- assignment.setValue(undefined); // i.e. default
- }
- else {
- var arg = args[0];
- args.splice(0, 1);
- assignment.setArgument(arg);
- }
- }, this);
-
- if (args.length > 0) {
- var remaining = Argument.merge(args);
- this._hints.push(new Hint(Status.INVALID,
- 'Input \'' + remaining.text + '\' makes no sense.',
- remaining));
- }
- };
-
-})();
-exports.CliRequisition = CliRequisition;
-
-
-});
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Mozilla Skywriter.
- *
- * The Initial Developer of the Original Code is
- * Mozilla.
- * Portions created by the Initial Developer are Copyright (C) 2009
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Joe Walker (jwalker@mozilla.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('cockpit/ui/settings', ['require', 'exports', 'module' , 'pilot/types', 'pilot/types/basic'], function(require, exports, module) {
-
-
-var types = require("pilot/types");
-var SelectionType = require('pilot/types/basic').SelectionType;
-
-var direction = new SelectionType({
- name: 'direction',
- data: [ 'above', 'below' ]
-});
-
-var hintDirectionSetting = {
- name: "hintDirection",
- description: "Are hints shown above or below the command line?",
- type: "direction",
- defaultValue: "above"
-};
-
-var outputDirectionSetting = {
- name: "outputDirection",
- description: "Is the output window shown above or below the command line?",
- type: "direction",
- defaultValue: "above"
-};
-
-var outputHeightSetting = {
- name: "outputHeight",
- description: "What height should the output panel be?",
- type: "number",
- defaultValue: 300
-};
-
-exports.startup = function(data, reason) {
- types.registerType(direction);
- data.env.settings.addSetting(hintDirectionSetting);
- data.env.settings.addSetting(outputDirectionSetting);
- data.env.settings.addSetting(outputHeightSetting);
-};
-
-exports.shutdown = function(data, reason) {
- types.unregisterType(direction);
- data.env.settings.removeSetting(hintDirectionSetting);
- data.env.settings.removeSetting(outputDirectionSetting);
- data.env.settings.removeSetting(outputHeightSetting);
-};
-
-
-});
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Skywriter.
- *
- * The Initial Developer of the Original Code is
- * Mozilla.
- * Portions created by the Initial Developer are Copyright (C) 2009
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Joe Walker (jwalker@mozilla.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('cockpit/ui/cli_view', ['require', 'exports', 'module' , 'text!cockpit/ui/cli_view.css', 'pilot/event', 'pilot/dom', 'pilot/keys', 'pilot/canon', 'pilot/types', 'cockpit/cli', 'cockpit/ui/request_view'], function(require, exports, module) {
-
-
-var editorCss = require("text!cockpit/ui/cli_view.css");
-var event = require("pilot/event");
-var dom = require("pilot/dom");
-
-dom.importCssString(editorCss);
-
-var event = require("pilot/event");
-var keys = require("pilot/keys");
-var canon = require("pilot/canon");
-var Status = require('pilot/types').Status;
-
-var CliRequisition = require('cockpit/cli').CliRequisition;
-var Hint = require('cockpit/cli').Hint;
-var RequestView = require('cockpit/ui/request_view').RequestView;
-
-var NO_HINT = new Hint(Status.VALID, '', 0, 0);
-
-/**
- * On startup we need to:
- * 1. Add 3 sets of elements to the DOM for:
- * - command line output
- * - input hints
- * - completion
- * 2. Attach a set of events so the command line works
- */
-exports.startup = function(data, reason) {
- var cli = new CliRequisition(data.env);
- var cliView = new CliView(cli, data.env);
- data.env.cli = cli;
-};
-
-/**
- * A class to handle the simplest UI implementation
- */
-function CliView(cli, env) {
- cli.cliView = this;
- this.cli = cli;
- this.doc = document;
- this.win = dom.getParentWindow(this.doc);
- this.env = env;
-
- // TODO: we should have a better way to specify command lines???
- this.element = this.doc.getElementById('cockpitInput');
- if (!this.element) {
- // console.log('No element with an id of cockpit. Bailing on cli');
- return;
- }
-
- this.settings = env.settings;
- this.hintDirection = this.settings.getSetting('hintDirection');
- this.outputDirection = this.settings.getSetting('outputDirection');
- this.outputHeight = this.settings.getSetting('outputHeight');
-
- // If the requisition tells us something has changed, we use this to know
- // if we should ignore it
- this.isUpdating = false;
-
- this.createElements();
- this.update();
-}
-CliView.prototype = {
- /**
- * Create divs for completion, hints and output
- */
- createElements: function() {
- var input = this.element;
-
- this.element.spellcheck = false;
-
- this.output = this.doc.getElementById('cockpitOutput');
- this.popupOutput = (this.output == null);
- if (!this.output) {
- this.output = this.doc.createElement('div');
- this.output.id = 'cockpitOutput';
- this.output.className = 'cptOutput';
- input.parentNode.insertBefore(this.output, input.nextSibling);
-
- var setMaxOutputHeight = function() {
- this.output.style.maxHeight = this.outputHeight.get() + 'px';
- }.bind(this);
- this.outputHeight.addEventListener('change', setMaxOutputHeight);
- setMaxOutputHeight();
- }
-
- this.completer = this.doc.createElement('div');
- this.completer.className = 'cptCompletion VALID';
-
- this.completer.style.color = dom.computedStyle(input, "color");
- this.completer.style.fontSize = dom.computedStyle(input, "fontSize");
- this.completer.style.fontFamily = dom.computedStyle(input, "fontFamily");
- this.completer.style.fontWeight = dom.computedStyle(input, "fontWeight");
- this.completer.style.fontStyle = dom.computedStyle(input, "fontStyle");
- input.parentNode.insertBefore(this.completer, input.nextSibling);
-
- // Transfer background styling to the completer.
- this.completer.style.backgroundColor = input.style.backgroundColor;
- input.style.backgroundColor = 'transparent';
-
- this.hinter = this.doc.createElement('div');
- this.hinter.className = 'cptHints';
- input.parentNode.insertBefore(this.hinter, input.nextSibling);
-
- var resizer = this.resizer.bind(this);
- event.addListener(this.win, 'resize', resizer);
- this.hintDirection.addEventListener('change', resizer);
- this.outputDirection.addEventListener('change', resizer);
- resizer();
-
- canon.addEventListener('output', function(ev) {
- new RequestView(ev.request, this);
- }.bind(this));
- event.addCommandKeyListener(input, this.onCommandKey.bind(this));
- event.addListener(input, 'keyup', this.onKeyUp.bind(this));
-
- // cursor position affects hint severity. TODO: shortcuts for speed
- event.addListener(input, 'mouseup', function(ev) {
- this.isUpdating = true;
- this.update();
- this.isUpdating = false;
- }.bind(this));
-
- this.cli.addEventListener('argumentChange', this.onArgChange.bind(this));
-
- event.addListener(input, "focus", function() {
- dom.addCssClass(this.output, "cptFocusPopup");
- dom.addCssClass(this.hinter, "cptFocusPopup");
- }.bind(this));
-
- function hideOutput() {
- dom.removeCssClass(this.output, "cptFocusPopup");
- dom.removeCssClass(this.hinter, "cptFocusPopup");
- };
- event.addListener(input, "blur", hideOutput.bind(this));
- hideOutput.call(this);
- },
-
- /**
- * We need to see the output of the latest command entered
- */
- scrollOutputToBottom: function() {
- // Certain browsers have a bug such that scrollHeight is too small
- // when content does not fill the client area of the element
- var scrollHeight = Math.max(this.output.scrollHeight, this.output.clientHeight);
- this.output.scrollTop = scrollHeight - this.output.clientHeight;
- },
-
- /**
- * To be called on window resize or any time we want to align the elements
- * with the input box.
- */
- resizer: function() {
- var rect = this.element.getClientRects()[0];
-
- this.completer.style.top = rect.top + 'px';
- var height = rect.bottom - rect.top;
- this.completer.style.height = height + 'px';
- this.completer.style.lineHeight = height + 'px';
- this.completer.style.left = rect.left + 'px';
- var width = rect.right - rect.left;
- this.completer.style.width = width + 'px';
-
- if (this.hintDirection.get() === 'below') {
- this.hinter.style.top = rect.bottom + 'px';
- this.hinter.style.bottom = 'auto';
- }
- else {
- this.hinter.style.top = 'auto';
- this.hinter.style.bottom = (this.doc.documentElement.clientHeight - rect.top) + 'px';
- }
- this.hinter.style.left = (rect.left + 30) + 'px';
- this.hinter.style.maxWidth = (width - 110) + 'px';
-
- if (this.popupOutput) {
- if (this.outputDirection.get() === 'below') {
- this.output.style.top = rect.bottom + 'px';
- this.output.style.bottom = 'auto';
- }
- else {
- this.output.style.top = 'auto';
- this.output.style.bottom = (this.doc.documentElement.clientHeight - rect.top) + 'px';
- }
- this.output.style.left = rect.left + 'px';
- this.output.style.width = (width - 80) + 'px';
- }
- },
-
- /**
- * Ensure that TAB isn't handled by the browser
- */
-onCommandKey: function(ev, hashId, keyCode) {
- var stopEvent;
- if (keyCode === keys.TAB ||
- keyCode === keys.UP ||
- keyCode === keys.DOWN) {
- stopEvent = true;
- } else if (hashId != 0 || keyCode != 0) {
- stopEvent = canon.execKeyCommand(this.env, 'cli', hashId, keyCode);
- }
- stopEvent && event.stopEvent(ev);
- },
-
- /**
- * The main keyboard processing loop
- */
- onKeyUp: function(ev) {
- var handled;
- /*
- var handled = keyboardManager.processKeyEvent(ev, this, {
- isCommandLine: true, isKeyUp: true
- });
- */
-
- // RETURN does a special exec/highlight thing
- if (ev.keyCode === keys.RETURN) {
- var worst = this.cli.getWorstHint();
- // Deny RETURN unless the command might work
- if (worst.status === Status.VALID) {
- this.cli.exec();
- this.element.value = '';
- }
- else {
- // If we've denied RETURN because the command was not VALID,
- // select the part of the command line that is causing problems
- // TODO: if there are 2 errors are we picking the right one?
- dom.setSelectionStart(this.element, worst.start);
- dom.setSelectionEnd(this.element, worst.end);
- }
- }
-
- this.update();
-
- // Special actions which delegate to the assignment
- var current = this.cli.getAssignmentAt(dom.getSelectionStart(this.element));
- if (current) {
- // TAB does a special complete thing
- if (ev.keyCode === keys.TAB) {
- current.complete();
- this.update();
- }
-
- // UP/DOWN look for some history
- if (ev.keyCode === keys.UP) {
- current.increment();
- this.update();
- }
- if (ev.keyCode === keys.DOWN) {
- current.decrement();
- this.update();
- }
- }
-
- return handled;
- },
-
- /**
- * Actually parse the input and make sure we're all up to date
- */
- update: function() {
- this.isUpdating = true;
- var input = {
- typed: this.element.value,
- cursor: {
- start: dom.getSelectionStart(this.element),
- end: dom.getSelectionEnd(this.element.selectionEnd)
- }
- };
- this.cli.update(input);
-
- var display = this.cli.getAssignmentAt(input.cursor.start).getHint();
-
- // 1. Update the completer with prompt/error marker/TAB info
- dom.removeCssClass(this.completer, Status.VALID.toString());
- dom.removeCssClass(this.completer, Status.INCOMPLETE.toString());
- dom.removeCssClass(this.completer, Status.INVALID.toString());
-
- var completion = '<span class="cptPrompt">&gt;</span> ';
- if (this.element.value.length > 0) {
- var scores = this.cli.getInputStatusMarkup();
- completion += this.markupStatusScore(scores);
- }
-
- // Display the "-> prediction" at the end of the completer
- if (this.element.value.length > 0 &&
- display.predictions && display.predictions.length > 0) {
- var tab = display.predictions[0];
- completion += ' &nbsp;&#x21E5; ' + (tab.name ? tab.name : tab);
- }
- this.completer.innerHTML = completion;
- dom.addCssClass(this.completer, this.cli.getWorstHint().status.toString());
-
- // 2. Update the hint element
- var hint = '';
- if (this.element.value.length !== 0) {
- hint += display.message;
- if (display.predictions && display.predictions.length > 0) {
- hint += ': [ ';
- display.predictions.forEach(function(prediction) {
- hint += (prediction.name ? prediction.name : prediction);
- hint += ' | ';
- }, this);
- hint = hint.replace(/\| $/, ']');
- }
- }
-
- this.hinter.innerHTML = hint;
- if (hint.length === 0) {
- dom.addCssClass(this.hinter, 'cptNoPopup');
- }
- else {
- dom.removeCssClass(this.hinter, 'cptNoPopup');
- }
-
- this.isUpdating = false;
- },
-
- /**
- * Markup an array of Status values with spans
- */
- markupStatusScore: function(scores) {
- var completion = '';
- // Create mark-up
- var i = 0;
- var lastStatus = -1;
- while (true) {
- if (lastStatus !== scores[i]) {
- completion += '<span class=' + scores[i].toString() + '>';
- lastStatus = scores[i];
- }
- completion += this.element.value[i];
- i++;
- if (i === this.element.value.length) {
- completion += '</span>';
- break;
- }
- if (lastStatus !== scores[i]) {
- completion += '</span>';
- }
- }
-
- return completion;
- },
-
- /**
- * Update the input element to reflect the changed argument
- */
- onArgChange: function(ev) {
- if (this.isUpdating) {
- return;
- }
-
- var prefix = this.element.value.substring(0, ev.argument.start);
- var suffix = this.element.value.substring(ev.argument.end);
- var insert = typeof ev.text === 'string' ? ev.text : ev.text.name;
- this.element.value = prefix + insert + suffix;
- // Fix the cursor.
- var insertEnd = (prefix + insert).length;
- this.element.selectionStart = insertEnd;
- this.element.selectionEnd = insertEnd;
- }
-};
-exports.CliView = CliView;
-
-
-});
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Skywriter.
- *
- * The Initial Developer of the Original Code is
- * Mozilla.
- * Portions created by the Initial Developer are Copyright (C) 2009
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Joe Walker (jwalker@mozilla.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('cockpit/ui/request_view', ['require', 'exports', 'module' , 'pilot/dom', 'pilot/event', 'text!cockpit/ui/request_view.html', 'pilot/domtemplate', 'text!cockpit/ui/request_view.css'], function(require, exports, module) {
-
-var dom = require("pilot/dom");
-var event = require("pilot/event");
-var requestViewHtml = require("text!cockpit/ui/request_view.html");
-var Templater = require("pilot/domtemplate").Templater;
-
-var requestViewCss = require("text!cockpit/ui/request_view.css");
-dom.importCssString(requestViewCss);
-
-/**
- * Pull the HTML into the DOM, but don't add it to the document
- */
-var templates = document.createElement('div');
-templates.innerHTML = requestViewHtml;
-var row = templates.querySelector('.cptRow');
-
-/**
- * Work out the path for images.
- * TODO: This should probably live in some utility area somewhere
- */
-function imageUrl(path) {
- var dataUrl;
- try {
- dataUrl = require('text!cockpit/ui/' + path);
- } catch (e) { }
- if (dataUrl) {
- return dataUrl;
- }
-
- var filename = module.id.split('/').pop() + '.js';
- var imagePath;
-
- if (module.uri.substr(-filename.length) !== filename) {
- console.error('Can\'t work out path from module.uri/module.id');
- return path;
- }
-
- if (module.uri) {
- var end = module.uri.length - filename.length - 1;
- return module.uri.substr(0, end) + "/" + path;
- }
-
- return filename + path;
-}
-
-
-/**
- * Adds a row to the CLI output display
- */
-function RequestView(request, cliView) {
- this.request = request;
- this.cliView = cliView;
- this.imageUrl = imageUrl;
-
- // Elements attached to this by the templater. For info only
- this.rowin = null;
- this.rowout = null;
- this.output = null;
- this.hide = null;
- this.show = null;
- this.duration = null;
- this.throb = null;
-
- new Templater().processNode(row.cloneNode(true), this);
-
- this.cliView.output.appendChild(this.rowin);
- this.cliView.output.appendChild(this.rowout);
-
- this.request.addEventListener('output', this.onRequestChange.bind(this));
-};
-
-RequestView.prototype = {
- /**
- * A single click on an invocation line in the console copies the command to
- * the command line
- */
- copyToInput: function() {
- this.cliView.element.value = this.request.typed;
- },
-
- /**
- * A double click on an invocation line in the console executes the command
- */
- executeRequest: function(ev) {
- this.cliView.cli.update({
- typed: this.request.typed,
- cursor: { start:0, end:0 }
- });
- this.cliView.cli.exec();
- },
-
- hideOutput: function(ev) {
- this.output.style.display = 'none';
- dom.addCssClass(this.hide, 'cmd_hidden');
- dom.removeCssClass(this.show, 'cmd_hidden');
-
- event.stopPropagation(ev);
- },
-
- showOutput: function(ev) {
- this.output.style.display = 'block';
- dom.removeCssClass(this.hide, 'cmd_hidden');
- dom.addCssClass(this.show, 'cmd_hidden');
-
- event.stopPropagation(ev);
- },
-
- remove: function(ev) {
- this.cliView.output.removeChild(this.rowin);
- this.cliView.output.removeChild(this.rowout);
- event.stopPropagation(ev);
- },
-
- onRequestChange: function(ev) {
- this.duration.innerHTML = this.request.duration ?
- 'completed in ' + (this.request.duration / 1000) + ' sec ' :
- '';
-
- this.output.innerHTML = '';
- this.request.outputs.forEach(function(output) {
- var node;
- if (typeof output == 'string') {
- node = document.createElement('p');
- node.innerHTML = output;
- } else {
- node = output;
- }
- this.output.appendChild(node);
- }, this);
- this.cliView.scrollOutputToBottom();
-
- dom.setCssClass(this.output, 'cmd_error', this.request.error);
-
- this.throb.style.display = this.request.completed ? 'none' : 'block';
- }
-};
-exports.RequestView = RequestView;
-
-
-});
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is DomTemplate.
- *
- * The Initial Developer of the Original Code is Mozilla.
- * Portions created by the Initial Developer are Copyright (C) 2009
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Joe Walker (jwalker@mozilla.com) (original author)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('pilot/domtemplate', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-
-// WARNING: do not 'use_strict' without reading the notes in envEval;
-
-/**
- * A templater that allows one to quickly template DOM nodes.
- */
-function Templater() {
- this.scope = [];
-};
-
-/**
- * Recursive function to walk the tree processing the attributes as it goes.
- * @param node the node to process. If you pass a string in instead of a DOM
- * element, it is assumed to be an id for use with document.getElementById()
- * @param data the data to use for node processing.
- */
-Templater.prototype.processNode = function(node, data) {
- if (typeof node === 'string') {
- node = document.getElementById(node);
- }
- if (data === null || data === undefined) {
- data = {};
- }
- this.scope.push(node.nodeName + (node.id ? '#' + node.id : ''));
- try {
- // Process attributes
- if (node.attributes && node.attributes.length) {
- // We need to handle 'foreach' and 'if' first because they might stop
- // some types of processing from happening, and foreach must come first
- // because it defines new data on which 'if' might depend.
- if (node.hasAttribute('foreach')) {
- this.processForEach(node, data);
- return;
- }
- if (node.hasAttribute('if')) {
- if (!this.processIf(node, data)) {
- return;
- }
- }
- // Only make the node available once we know it's not going away
- data.__element = node;
- // It's good to clean up the attributes when we've processed them,
- // but if we do it straight away, we mess up the array index
- var attrs = Array.prototype.slice.call(node.attributes);
- for (var i = 0; i < attrs.length; i++) {
- var value = attrs[i].value;
- var name = attrs[i].name;
- this.scope.push(name);
- try {
- if (name === 'save') {
- // Save attributes are a setter using the node
- value = this.stripBraces(value);
- this.property(value, data, node);
- node.removeAttribute('save');
- } else if (name.substring(0, 2) === 'on') {
- // Event registration relies on property doing a bind
- value = this.stripBraces(value);
- var func = this.property(value, data);
- if (typeof func !== 'function') {
- this.handleError('Expected ' + value +
- ' to resolve to a function, but got ' + typeof func);
- }
- node.removeAttribute(name);
- var capture = node.hasAttribute('capture' + name.substring(2));
- node.addEventListener(name.substring(2), func, capture);
- if (capture) {
- node.removeAttribute('capture' + name.substring(2));
- }
- } else {
- // Replace references in all other attributes
- var self = this;
- var newValue = value.replace(/\$\{[^}]*\}/g, function(path) {
- return self.envEval(path.slice(2, -1), data, value);
- });
- // Remove '_' prefix of attribute names so the DOM won't try
- // to use them before we've processed the template
- if (name.charAt(0) === '_') {
- node.removeAttribute(name);
- node.setAttribute(name.substring(1), newValue);
- } else if (value !== newValue) {
- attrs[i].value = newValue;
- }
- }
- } finally {
- this.scope.pop();
- }
- }
- }
-
- // Loop through our children calling processNode. First clone them, so the
- // set of nodes that we visit will be unaffected by additions or removals.
- var childNodes = Array.prototype.slice.call(node.childNodes);
- for (var j = 0; j < childNodes.length; j++) {
- this.processNode(childNodes[j], data);
- }
-
- if (node.nodeType === Node.TEXT_NODE) {
- this.processTextNode(node, data);
- }
- } finally {
- this.scope.pop();
- }
-};
-
-/**
- * Handle <x if="${...}">
- * @param node An element with an 'if' attribute
- * @param data The data to use with envEval
- * @returns true if processing should continue, false otherwise
- */
-Templater.prototype.processIf = function(node, data) {
- this.scope.push('if');
- try {
- var originalValue = node.getAttribute('if');
- var value = this.stripBraces(originalValue);
- var recurse = true;
- try {
- var reply = this.envEval(value, data, originalValue);
- recurse = !!reply;
- } catch (ex) {
- this.handleError('Error with \'' + value + '\'', ex);
- recurse = false;
- }
- if (!recurse) {
- node.parentNode.removeChild(node);
- }
- node.removeAttribute('if');
- return recurse;
- } finally {
- this.scope.pop();
- }
-};
-
-/**
- * Handle <x foreach="param in ${array}"> and the special case of
- * <loop foreach="param in ${array}">
- * @param node An element with a 'foreach' attribute
- * @param data The data to use with envEval
- */
-Templater.prototype.processForEach = function(node, data) {
- this.scope.push('foreach');
- try {
- var originalValue = node.getAttribute('foreach');
- var value = originalValue;
-
- var paramName = 'param';
- if (value.charAt(0) === '$') {
- // No custom loop variable name. Use the default: 'param'
- value = this.stripBraces(value);
- } else {
- // Extract the loop variable name from 'NAME in ${ARRAY}'
- var nameArr = value.split(' in ');
- paramName = nameArr[0].trim();
- value = this.stripBraces(nameArr[1].trim());
- }
- node.removeAttribute('foreach');
- try {
- var self = this;
- // Process a single iteration of a loop
- var processSingle = function(member, clone, ref) {
- ref.parentNode.insertBefore(clone, ref);
- data[paramName] = member;
- self.processNode(clone, data);
- delete data[paramName];
- };
-
- // processSingle is no good for <loop> nodes where we want to work on
- // the childNodes rather than the node itself
- var processAll = function(scope, member) {
- self.scope.push(scope);
- try {
- if (node.nodeName === 'LOOP') {
- for (var i = 0; i < node.childNodes.length; i++) {
- var clone = node.childNodes[i].cloneNode(true);
- processSingle(member, clone, node);
- }
- } else {
- var clone = node.cloneNode(true);
- clone.removeAttribute('foreach');
- processSingle(member, clone, node);
- }
- } finally {
- self.scope.pop();
- }
- };
-
- var reply = this.envEval(value, data, originalValue);
- if (Array.isArray(reply)) {
- reply.forEach(function(data, i) {
- processAll('' + i, data);
- }, this);
- } else {
- for (var param in reply) {
- if (reply.hasOwnProperty(param)) {
- processAll(param, param);
- }
- }
- }
- node.parentNode.removeChild(node);
- } catch (ex) {
- this.handleError('Error with \'' + value + '\'', ex);
- }
- } finally {
- this.scope.pop();
- }
-};
-
-/**
- * Take a text node and replace it with another text node with the ${...}
- * sections parsed out. We replace the node by altering node.parentNode but
- * we could probably use a DOM Text API to achieve the same thing.
- * @param node The Text node to work on
- * @param data The data to use in calls to envEval
- */
-Templater.prototype.processTextNode = function(node, data) {
- // Replace references in other attributes
- var value = node.data;
- // We can't use the string.replace() with function trick (see generic
- // attribute processing in processNode()) because we need to support
- // functions that return DOM nodes, so we can't have the conversion to a
- // string.
- // Instead we process the string as an array of parts. In order to split
- // the string up, we first replace '${' with '\uF001$' and '}' with '\uF002'
- // We can then split using \uF001 or \uF002 to get an array of strings
- // where scripts are prefixed with $.
- // \uF001 and \uF002 are just unicode chars reserved for private use.
- value = value.replace(/\$\{([^}]*)\}/g, '\uF001$$$1\uF002');
- var parts = value.split(/\uF001|\uF002/);
- if (parts.length > 1) {
- parts.forEach(function(part) {
- if (part === null || part === undefined || part === '') {
- return;
- }
- if (part.charAt(0) === '$') {
- part = this.envEval(part.slice(1), data, node.data);
- }
- // It looks like this was done a few lines above but see envEval
- if (part === null) {
- part = "null";
- }
- if (part === undefined) {
- part = "undefined";
- }
- // if (isDOMElement(part)) { ... }
- if (typeof part.cloneNode !== 'function') {
- part = node.ownerDocument.createTextNode(part.toString());
- }
- node.parentNode.insertBefore(part, node);
- }, this);
- node.parentNode.removeChild(node);
- }
-};
-
-/**
- * Warn of string does not begin '${' and end '}'
- * @param str the string to check.
- * @return The string stripped of ${ and }, or untouched if it does not match
- */
-Templater.prototype.stripBraces = function(str) {
- if (!str.match(/\$\{.*\}/g)) {
- this.handleError('Expected ' + str + ' to match ${...}');
- return str;
- }
- return str.slice(2, -1);
-};
-
-/**
- * Combined getter and setter that works with a path through some data set.
- * For example:
- * <ul>
- * <li>property('a.b', { a: { b: 99 }}); // returns 99
- * <li>property('a', { a: { b: 99 }}); // returns { b: 99 }
- * <li>property('a', { a: { b: 99 }}, 42); // returns 99 and alters the
- * input data to be { a: { b: 42 }}
- * </ul>
- * @param path An array of strings indicating the path through the data, or
- * a string to be cut into an array using <tt>split('.')</tt>
- * @param data An object to look in for the <tt>path</tt> argument
- * @param newValue (optional) If defined, this value will replace the
- * original value for the data at the path specified.
- * @return The value pointed to by <tt>path</tt> before any
- * <tt>newValue</tt> is applied.
- */
-Templater.prototype.property = function(path, data, newValue) {
- this.scope.push(path);
- try {
- if (typeof path === 'string') {
- path = path.split('.');
- }
- var value = data[path[0]];
- if (path.length === 1) {
- if (newValue !== undefined) {
- data[path[0]] = newValue;
- }
- if (typeof value === 'function') {
- return function() {
- return value.apply(data, arguments);
- };
- }
- return value;
- }
- if (!value) {
- this.handleError('Can\'t find path=' + path);
- return null;
- }
- return this.property(path.slice(1), value, newValue);
- } finally {
- this.scope.pop();
- }
-};
-
-/**
- * Like eval, but that creates a context of the variables in <tt>env</tt> in
- * which the script is evaluated.
- * WARNING: This script uses 'with' which is generally regarded to be evil.
- * The alternative is to create a Function at runtime that takes X parameters
- * according to the X keys in the env object, and then call that function using
- * the values in the env object. This is likely to be slow, but workable.
- * @param script The string to be evaluated.
- * @param env The environment in which to eval the script.
- * @param context Optional debugging string in case of failure
- * @return The return value of the script, or the error message if the script
- * execution failed.
- */
-Templater.prototype.envEval = function(script, env, context) {
- with (env) {
- try {
- this.scope.push(context);
- return eval(script);
- } catch (ex) {
- this.handleError('Template error evaluating \'' + script + '\'', ex);
- return script;
- } finally {
- this.scope.pop();
- }
- }
-};
-
-/**
- * A generic way of reporting errors, for easy overloading in different
- * environments.
- * @param message the error message to report.
- * @param ex optional associated exception.
- */
-Templater.prototype.handleError = function(message, ex) {
- this.logError(message);
- this.logError('In: ' + this.scope.join(' > '));
- if (ex) {
- this.logError(ex);
- }
-};
-
-
-/**
- * A generic way of reporting errors, for easy overloading in different
- * environments.
- * @param message the error message to report.
- */
-Templater.prototype.logError = function(message) {
- window.console && window.console.log && console.log(message);
-};
-
-exports.Templater = Templater;
-
-
-});
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Skywriter.
- *
- * The Initial Developer of the Original Code is
- * Mozilla.
- * Portions created by the Initial Developer are Copyright (C) 2009
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Skywriter Team (skywriter@mozilla.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('cockpit/commands/basic', ['require', 'exports', 'module' , 'pilot/canon'], function(require, exports, module) {
-
-
-var canon = require('pilot/canon');
-
-/**
- * '!' command
- */
-var bangCommandSpec = {
- name: 'sh',
- description: 'Execute a system command (requires server support)',
- params: [
- {
- name: 'command',
- type: 'text',
- description: 'The string to send to the os shell.'
- }
- ],
- exec: function(env, args, request) {
- var req = new XMLHttpRequest();
- req.open('GET', '/exec?args=' + args.command, true);
- req.onreadystatechange = function(ev) {
- if (req.readyState == 4) {
- if (req.status == 200) {
- request.done('<pre>' + req.responseText + '</pre>');
- }
- }
- };
- req.send(null);
- }
-};
-
-var canon = require('pilot/canon');
-
-exports.startup = function(data, reason) {
- canon.addCommand(bangCommandSpec);
-};
-
-exports.shutdown = function(data, reason) {
- canon.removeCommand(bangCommandSpec);
-};
-
-
-});
-define("text!cockpit/ui/cli_view.css", [], "" +
- "#cockpitInput { padding-left: 16px; }" +
- "" +
- ".cptOutput { overflow: auto; position: absolute; z-index: 999; display: none; }" +
- "" +
- ".cptCompletion { padding: 0; position: absolute; z-index: -1000; }" +
- ".cptCompletion.VALID { background: #FFF; }" +
- ".cptCompletion.INCOMPLETE { background: #DDD; }" +
- ".cptCompletion.INVALID { background: #DDD; }" +
- ".cptCompletion span { color: #FFF; }" +
- ".cptCompletion span.INCOMPLETE { color: #DDD; border-bottom: 2px dotted #F80; }" +
- ".cptCompletion span.INVALID { color: #DDD; border-bottom: 2px dotted #F00; }" +
- "span.cptPrompt { color: #66F; font-weight: bold; }" +
- "" +
- "" +
- ".cptHints {" +
- " color: #000;" +
- " position: absolute;" +
- " border: 1px solid rgba(230, 230, 230, 0.8);" +
- " background: rgba(250, 250, 250, 0.8);" +
- " -moz-border-radius-topleft: 10px;" +
- " -moz-border-radius-topright: 10px;" +
- " border-top-left-radius: 10px; border-top-right-radius: 10px;" +
- " z-index: 1000;" +
- " padding: 8px;" +
- " display: none;" +
- "}" +
- "" +
- ".cptFocusPopup { display: block; }" +
- ".cptFocusPopup.cptNoPopup { display: none; }" +
- "" +
- ".cptHints ul { margin: 0; padding: 0 15px; }" +
- "" +
- ".cptGt { font-weight: bold; font-size: 120%; }" +
- "");
-
-define("text!cockpit/ui/request_view.css", [], "" +
- ".cptRowIn {" +
- " display: box; display: -moz-box; display: -webkit-box;" +
- " box-orient: horizontal; -moz-box-orient: horizontal; -webkit-box-orient: horizontal;" +
- " box-align: center; -moz-box-align: center; -webkit-box-align: center;" +
- " color: #333;" +
- " background-color: #EEE;" +
- " width: 100%;" +
- " font-family: consolas, courier, monospace;" +
- "}" +
- ".cptRowIn > * { padding-left: 2px; padding-right: 2px; }" +
- ".cptRowIn > img { cursor: pointer; }" +
- ".cptHover { display: none; }" +
- ".cptRowIn:hover > .cptHover { display: block; }" +
- ".cptRowIn:hover > .cptHover.cptHidden { display: none; }" +
- ".cptOutTyped {" +
- " box-flex: 1; -moz-box-flex: 1; -webkit-box-flex: 1;" +
- " font-weight: bold; color: #000; font-size: 120%;" +
- "}" +
- ".cptRowOutput { padding-left: 10px; line-height: 1.2em; }" +
- ".cptRowOutput strong," +
- ".cptRowOutput b," +
- ".cptRowOutput th," +
- ".cptRowOutput h1," +
- ".cptRowOutput h2," +
- ".cptRowOutput h3 { color: #000; }" +
- ".cptRowOutput a { font-weight: bold; color: #666; text-decoration: none; }" +
- ".cptRowOutput a: hover { text-decoration: underline; cursor: pointer; }" +
- ".cptRowOutput input[type=password]," +
- ".cptRowOutput input[type=text]," +
- ".cptRowOutput textarea {" +
- " color: #000; font-size: 120%;" +
- " background: transparent; padding: 3px;" +
- " border-radius: 5px; -moz-border-radius: 5px; -webkit-border-radius: 5px;" +
- "}" +
- ".cptRowOutput table," +
- ".cptRowOutput td," +
- ".cptRowOutput th { border: 0; padding: 0 2px; }" +
- ".cptRowOutput .right { text-align: right; }" +
- "");
-
-define("text!cockpit/ui/request_view.html", [], "" +
- "<div class=cptRow>" +
- " <!-- The div for the input (i.e. what was typed) -->" +
- " <div class=\"cptRowIn\" save=\"${rowin}\"" +
- " onclick=\"${copyToInput}\"" +
- " ondblclick=\"${executeRequest}\">" +
- "" +
- " <!-- What the user actually typed -->" +
- " <div class=\"cptGt\">&gt; </div>" +
- " <div class=\"cptOutTyped\">${request.typed}</div>" +
- "" +
- " <!-- The extra details that appear on hover -->" +
- " <div class=cptHover save=\"${duration}\"></div>" +
- " <img class=cptHover onclick=\"${hideOutput}\" save=\"${hide}\"" +
- " alt=\"Hide command output\" _src=\"${imageUrl('images/minus.png')}\"/>" +
- " <img class=\"cptHover cptHidden\" onclick=\"${showOutput}\" save=\"${show}\"" +
- " alt=\"Show command output\" _src=\"${imageUrl('images/plus.png')}\"/>" +
- " <img class=cptHover onclick=\"${remove}\"" +
- " alt=\"Remove this command from the history\"" +
- " _src=\"${imageUrl('images/closer.png')}\"/>" +
- "" +
- " </div>" +
- "" +
- " <!-- The div for the command output -->" +
- " <div class=\"cptRowOut\" save=\"${rowout}\">" +
- " <div class=\"cptRowOutput\" save=\"${output}\"></div>" +
- " <img _src=\"${imageUrl('images/throbber.gif')}\" save=\"${throb}\"/>" +
- " </div>" +
- "</div>" +
- "");
-
-define("text!cockpit/ui/images/closer.png", [], "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAj9JREFUeNp0ks+LUlEUx7/vV1o8Z8wUx3IEHcQmiBiQlomjRNCiZpEuEqF/oEUwq/6EhvoHggmRcJUQBM1CRJAW0aLIaGQimZJxJsWxyV/P9/R1zzWlFl04vPvOPZ9z7rnnK5imidmKRCIq+zxgdoPZ1T/ut8xeM3tcKpW6s1hhBkaj0Qj7bDebTX+324WmadxvsVigqipcLleN/d4rFoulORiLxTZY8ItOp8MBCpYkiYPj8Xjus9vtlORWoVB4KcTjcQc732dLpSRXvCZaAws6Q4WDdqsO52kNH+oCRFGEz+f7ydwBKRgMPmTXi49GI1x2D/DsznesB06ws2eDbI7w9HYN6bVjvGss4KAjwDAMq81mM2SW5Wa/3weBbz42UL9uYnVpiO2Nr9ANHSGXib2Wgm9tCYIggGKJEVkvlwgi5/FQRmTLxO6hgJVzI1x0T/fJrBtHJxPeL6tI/fsZLA6ot8lkQi8HRVbw94gkWYI5MaHrOjcCGSNRxZosy9y5cErDzn0Dqx7gcwO8WtBp4PndI35GMYqiUMUvBL5yOBz8yRfFNpbPmqgcCFh/IuHa1nR/YXGM8+oUpFhihEQiwcdRLpfVRqOBtWXWq34Gra6AXq8Hp2piZcmKT4cKnE4nwuHwdByVSmWQz+d32WCTlHG/qaHHREN9kgi0sYQfv0R4PB4EAgESQDKXy72fSy6VSnHJVatVf71eR7vd5n66mtfrRSgU4pLLZrOlf7RKK51Ok8g3/yPyR5lMZi7y3wIMAME4EigHWgKnAAAAAElFTkSuQmCC");
-
-define("text!cockpit/ui/images/dot_clear.gif", [], "data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAEBMgA7");
-
-define("text!cockpit/ui/images/minus.png", [], "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAAAXNSR0IArs4c6QAAAAZiS0dEANIA0gDS7KbF4AAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9kFGw4xMrIJw5EAAAHcSURBVCjPhZIxSxtxGMZ/976XhJA/RA5EAyJcFksnp64hjUPBoXRyCYLQTyD0UxScu0nFwalCQSgFCVk7dXAwUAiBDA2RO4W7yN1x9+9gcyhU+pteHt4H3pfncay1LOl0OgY4BN4Ar/7KP4BvwNFwOIyWu87S2O12O8DxfD73oygiSRIAarUaxhhWV1fHwMFgMBiWxl6v9y6Koi+3t7ckSUKtVkNVAcjzvNRWVlYwxry9vLz86uzs7HjAZDKZGGstjUaDfxHHMSLC5ubmHdB2VfVwNpuZ5clxHPMcRVFwc3PTXFtbO3RFZHexWJCmabnweAaoVqvlv4vFAhHZdVX1ZZqmOI5DURR8fz/lxbp9Yrz+7bD72SfPcwBU1XdF5N5aWy2KgqIoeBzPEnWVLMseYnAcRERdVR27rrsdxzGqyutP6898+GBsNBqo6i9XVS88z9sOggAR4X94noeqXoiIHPm+H9XrdYIgIAxDwjAkTVPCMESzBy3LMprNJr7v34nIkV5dXd2fn59fG2P2siwjSRIqlQrWWlSVJFcqlQqtVot2u40xZu/s7OxnWbl+v98BjkejkT+dTgmCoDxtY2ODra2tMXBweno6fNJVgP39fQN8eKbkH09OTsqS/wHFRdHPfTSfjwAAAABJRU5ErkJggg==");
-
-define("text!cockpit/ui/images/pinaction.png", [], "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAC7mlDQ1BJQ0MgUHJvZmlsZQAAeAGFVM9rE0EU/jZuqdAiCFprDrJ4kCJJWatoRdQ2/RFiawzbH7ZFkGQzSdZuNuvuJrWliOTi0SreRe2hB/+AHnrwZC9KhVpFKN6rKGKhFy3xzW5MtqXqwM5+8943731vdt8ADXLSNPWABOQNx1KiEWlsfEJq/IgAjqIJQTQlVdvsTiQGQYNz+Xvn2HoPgVtWw3v7d7J3rZrStpoHhP1A4Eea2Sqw7xdxClkSAog836Epx3QI3+PY8uyPOU55eMG1Dys9xFkifEA1Lc5/TbhTzSXTQINIOJT1cVI+nNeLlNcdB2luZsbIEL1PkKa7zO6rYqGcTvYOkL2d9H5Os94+wiHCCxmtP0a4jZ71jNU/4mHhpObEhj0cGDX0+GAVtxqp+DXCFF8QTSeiVHHZLg3xmK79VvJKgnCQOMpkYYBzWkhP10xu+LqHBX0m1xOv4ndWUeF5jxNn3tTd70XaAq8wDh0MGgyaDUhQEEUEYZiwUECGPBoxNLJyPyOrBhuTezJ1JGq7dGJEsUF7Ntw9t1Gk3Tz+KCJxlEO1CJL8Qf4qr8lP5Xn5y1yw2Fb3lK2bmrry4DvF5Zm5Gh7X08jjc01efJXUdpNXR5aseXq8muwaP+xXlzHmgjWPxHOw+/EtX5XMlymMFMXjVfPqS4R1WjE3359sfzs94i7PLrXWc62JizdWm5dn/WpI++6qvJPmVflPXvXx/GfNxGPiKTEmdornIYmXxS7xkthLqwviYG3HCJ2VhinSbZH6JNVgYJq89S9dP1t4vUZ/DPVRlBnM0lSJ93/CKmQ0nbkOb/qP28f8F+T3iuefKAIvbODImbptU3HvEKFlpW5zrgIXv9F98LZua6N+OPwEWDyrFq1SNZ8gvAEcdod6HugpmNOWls05Uocsn5O66cpiUsxQ20NSUtcl12VLFrOZVWLpdtiZ0x1uHKE5QvfEp0plk/qv8RGw/bBS+fmsUtl+ThrWgZf6b8C8/UXAeIuJAAAACXBIWXMAAAsTAAALEwEAmpwYAAAClklEQVQ4EX1TXUhUQRQ+Z3Zmd+9uN1q2P3UpZaEwcikKekkqLKggKHJ96MHe9DmLkCDa9U198Id8kErICmIlRAN96UdE6QdBW/tBA5Uic7E0zN297L17p5mb1zYjD3eYc+d83zlnON8g5xzWNUSEdUBkHTJasRWySPP7fw3hfwkk2GoNsc0vOaJRHo1GV/GiMctkTIJRFlpZli8opK+htmf83gXeG63oteOtra0u25e7TYJIJELb26vYCACTgUe1lXV86BTn745l+MsyHqs53S/Aq4VEUa9Y6ko14eYY4u3AyM3HYwdKU35DZyblGR2+qq6W0X2Nnh07xynnVYpHORx/E1/GvvqaAZUayjMjdM2f/Lgr5E+fV93zR4u3zKCLughsZqKwAzAxaz6dPY6JgjLUF+eSP5OpjmAw2E8DvldHSvJMKPg08aRor1tc4BuALu6mOwGWdQC3mKIqRsC8mKd8wYfD78/earzSYzdMDW9QgKb0Is8CBY1mQXOiaXAHEpMDE5XTJqIq4EiyxUqKlpfkF0pyV1OTAoFAhmTmyCCoDsZNZvIkUjELQpipo0sQqYZAswZHwsEEE10M0pq2SSZY9HqNcDicJcNTpBvQJz40UbSOTh1B8bDpuY0w9Hb3kkn9lPAlBLfhfD39XTtX/blFJqiqrjbkTi63Hbofj2uL4GMsmzFgbDJ/vmMgv/lB4syJ0oXO7d3j++vio6GFsYmD6cHJreWc3/jRVVHhsOYvM8iZ36mtjPDBk/xDZE8CoHlbrlAssbTxDdDJvdb536L7I6S7Vy++6Gi4Xi9BsUthJRaLOYSPz4XALKI4j4iObd/e5UtDKUjZzYyYRyGAJv01Zj8kC5cbs5WY83hQnv0DzCXl+r8APElkq0RU6oMAAAAASUVORK5CYII=");
-
-define("text!cockpit/ui/images/pinin.png", [], "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAC7mlDQ1BJQ0MgUHJvZmlsZQAAeAGFVM9rE0EU/jZuqdAiCFprDrJ4kCJJWatoRdQ2/RFiawzbH7ZFkGQzSdZuNuvuJrWliOTi0SreRe2hB/+AHnrwZC9KhVpFKN6rKGKhFy3xzW5MtqXqwM5+8943731vdt8ADXLSNPWABOQNx1KiEWlsfEJq/IgAjqIJQTQlVdvsTiQGQYNz+Xvn2HoPgVtWw3v7d7J3rZrStpoHhP1A4Eea2Sqw7xdxClkSAog836Epx3QI3+PY8uyPOU55eMG1Dys9xFkifEA1Lc5/TbhTzSXTQINIOJT1cVI+nNeLlNcdB2luZsbIEL1PkKa7zO6rYqGcTvYOkL2d9H5Os94+wiHCCxmtP0a4jZ71jNU/4mHhpObEhj0cGDX0+GAVtxqp+DXCFF8QTSeiVHHZLg3xmK79VvJKgnCQOMpkYYBzWkhP10xu+LqHBX0m1xOv4ndWUeF5jxNn3tTd70XaAq8wDh0MGgyaDUhQEEUEYZiwUECGPBoxNLJyPyOrBhuTezJ1JGq7dGJEsUF7Ntw9t1Gk3Tz+KCJxlEO1CJL8Qf4qr8lP5Xn5y1yw2Fb3lK2bmrry4DvF5Zm5Gh7X08jjc01efJXUdpNXR5aseXq8muwaP+xXlzHmgjWPxHOw+/EtX5XMlymMFMXjVfPqS4R1WjE3359sfzs94i7PLrXWc62JizdWm5dn/WpI++6qvJPmVflPXvXx/GfNxGPiKTEmdornIYmXxS7xkthLqwviYG3HCJ2VhinSbZH6JNVgYJq89S9dP1t4vUZ/DPVRlBnM0lSJ93/CKmQ0nbkOb/qP28f8F+T3iuefKAIvbODImbptU3HvEKFlpW5zrgIXv9F98LZua6N+OPwEWDyrFq1SNZ8gvAEcdod6HugpmNOWls05Uocsn5O66cpiUsxQ20NSUtcl12VLFrOZVWLpdtiZ0x1uHKE5QvfEp0plk/qv8RGw/bBS+fmsUtl+ThrWgZf6b8C8/UXAeIuJAAAACXBIWXMAAAsTAAALEwEAmpwYAAABZ0lEQVQ4Ea2TPUsDQRCGZ89Eo4FACkULEQs1CH4Uamfjn7GxEYJFIFXgChFsbPwzNnZioREkaiHBQtEiEEiMRm/dZ8OEGAxR4sBxx877Pju7M2estTJIxLrNuVwuMxQEx0ZkzcFHyRtjXt02559RtB2GYanTYzoryOfz+6l4Nbszf2niwffKmpGRo9sVW22mDgqFwp5C2gDMm+P32a3JB1N+n5JifUGeP9JeNxGryPLYjcwMP8rJ07Q9fZltQzyAstOJ2vVu5sKc1ZZkRBrOcKeb+HexPidvkpCN5JUcllZtpZFc5DgBWc5M2eysZuMuofMBSA4NWjx4PUCsXefMlI0QY3ewRg4NWi4ZTQsgrjYXema+e4VqtEMK6KXvu+4B9Bklt90vVKMeD2BI6DOt4rZ/Gk7WyKFBi4fNPIAJY0joM61SCCZ9tI1o0OIB8D+DBIkYaJRbCBH9mZgNt+bb++ufSSF/eX8BYcDeAzuQJVUAAAAASUVORK5CYII=");
-
-define("text!cockpit/ui/images/pinout.png", [], "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAC7mlDQ1BJQ0MgUHJvZmlsZQAAeAGFVM9rE0EU/jZuqdAiCFprDrJ4kCJJWatoRdQ2/RFiawzbH7ZFkGQzSdZuNuvuJrWliOTi0SreRe2hB/+AHnrwZC9KhVpFKN6rKGKhFy3xzW5MtqXqwM5+8943731vdt8ADXLSNPWABOQNx1KiEWlsfEJq/IgAjqIJQTQlVdvsTiQGQYNz+Xvn2HoPgVtWw3v7d7J3rZrStpoHhP1A4Eea2Sqw7xdxClkSAog836Epx3QI3+PY8uyPOU55eMG1Dys9xFkifEA1Lc5/TbhTzSXTQINIOJT1cVI+nNeLlNcdB2luZsbIEL1PkKa7zO6rYqGcTvYOkL2d9H5Os94+wiHCCxmtP0a4jZ71jNU/4mHhpObEhj0cGDX0+GAVtxqp+DXCFF8QTSeiVHHZLg3xmK79VvJKgnCQOMpkYYBzWkhP10xu+LqHBX0m1xOv4ndWUeF5jxNn3tTd70XaAq8wDh0MGgyaDUhQEEUEYZiwUECGPBoxNLJyPyOrBhuTezJ1JGq7dGJEsUF7Ntw9t1Gk3Tz+KCJxlEO1CJL8Qf4qr8lP5Xn5y1yw2Fb3lK2bmrry4DvF5Zm5Gh7X08jjc01efJXUdpNXR5aseXq8muwaP+xXlzHmgjWPxHOw+/EtX5XMlymMFMXjVfPqS4R1WjE3359sfzs94i7PLrXWc62JizdWm5dn/WpI++6qvJPmVflPXvXx/GfNxGPiKTEmdornIYmXxS7xkthLqwviYG3HCJ2VhinSbZH6JNVgYJq89S9dP1t4vUZ/DPVRlBnM0lSJ93/CKmQ0nbkOb/qP28f8F+T3iuefKAIvbODImbptU3HvEKFlpW5zrgIXv9F98LZua6N+OPwEWDyrFq1SNZ8gvAEcdod6HugpmNOWls05Uocsn5O66cpiUsxQ20NSUtcl12VLFrOZVWLpdtiZ0x1uHKE5QvfEp0plk/qv8RGw/bBS+fmsUtl+ThrWgZf6b8C8/UXAeIuJAAAACXBIWXMAAAsTAAALEwEAmpwYAAACyUlEQVQ4EW1TXUgUURQ+Z3ZmnVV3QV2xJbVSEIowQbAfLQx8McLoYX2qjB58MRSkP3vZppceYhGxgrZaIughlYpE7CHFWiiKyj9II0qxWmwlNh1Xtp2f27mz7GDlZX7uuXO+73zfuXeQMQYIgAyALppgyBtse32stsw86txkHhATn+FbfPfzxnPB+vR3RMJYuTwW6bbB4a6WS5O3Yu2VlXIesDiAamiQNKVlVXfx5I0GJ7DY7p0/+erU4dgeMJIA31WNxZmAgibOreXDqF55sY4SFUURqbi+nkjgwTyAbHhLX8yOLsSM2QRA3JRAAgd4RGPbVhkKEp8qeJ7PFyW3fw++YHtC7CkaD0amqyqihSwlMQQ0wa07IjPVI/vbexreIUrVaQV2D4RMQ/o7m12Mdfx4H3PfB9FNzTR1U2cO0Bi45aV6xNvFBNaoIAfbSiwLlqi9/hR/R3Nrhua+Oqi9TEKiB02C7YXz+Pba4MTDrpbLiMAxNgmXb+HpwVkZdoIrkn9isW7nRw/TZYaagZArAWyhfqsSDL/c9aTx7JUjGZCtYExRqCzAwGblwr6aFQ84nTo6qZ7XCeCVQNckE/KSWolvoQnxeoFFgIh8G/nA+kBAxxuQO5m9eFrwLIGJHgcyM63VFMhRSgNVyJr7og8y1vbTQpH8DIEVgxuYuexw0QECIalq5FYgEmpkgoFYltU/lnrqDz5osirSFpF7lrHAFKSWHYfEs+mY/82UnAStyMlW8sUPsVIciTZgz3jV1ebg0CEOpgPF22s1z1YQYKSXPJ1hbAhR8T26WdLhkuVfAzPR+YO1Ox5n58SmCcF6e3uzAoHA77RkevJdWH/3+f2O9TGf3w3fWQ2Hw5F/13mcsWAT+vv6DK4kFApJ/d3d1k+kJtbCrmxXHS3n8ER6b3CQbAqaEHVra6sGxcXW4SovLx+empxapS//FfwD9kpMJjMMBBAAAAAASUVORK5CYII=");
-
-define("text!cockpit/ui/images/pins.png", [], "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAQCAYAAABQrvyxAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGYklEQVRIDbVWe0yURxCf/R735o6DO0FBe0RFsaL4iLXGIKa2SY3P6JGa2GpjlJjUV9NosbU++tYUbEnaQIrVaKJBG7WiNFQFUWO1UUEsVg2CAgoeHHLewcH32O58cBdQsX9Y5+7LfrszOzO/2ZnZj1BKgTBiIwVGVvKd49OVVYunDlXn6wdBKh+ogXrv+DOz1melIb+3LM5fNv2XPYE5EHY+L3PJljN5zavHpJjsQNsA/JJEgyC2+WTjy3b0GfoJW8O4aoHtDwiHQrj5lw1LLyyb1bp5zAjJTus9klrVpdD6TqH2ngVO+0dsRJnp06cLIYU4fx7NnRI3bu7UIYOeJ/McnuY88q3k62gc0S4Dgf5qhICQtIXS2lqD7BhSduPk3YfyzXaANhBBJDxYdUqCywB2qS4RdyUuSkTF/VJxcbH5j8N7/75RuFrN3Zh8OS8zqf5m4UpPeenOyP42dbtBeuvVnCdkK1e4PfPouX03mo9se+c33M8wqDk5Ofqed8REUTicQhbySUxp9u3KlMSHTtrFU6Kyn03lz15PPpW25vsZeYSIKyiVURcqeZJOH9lTNZLfnxRjU/uwrjbEUBWsapcSO2Hq4k0VfZg9EzxdDNCEjDxgNqRDme9umz/btwlsHRIEePHgAf73RdnHZ6LTuIUBN7OBQ+c1Fdnp6cZ1BQUdeRuWZi97o3ktDQQkVeFFzqJARd1A5a0Vr7ta6Kp6TZjtZ+NTIOoKF6qDrL7e0QQIUCiqMMKk8Z1Q/SCSKvzocf2B6NEN0SQn/kTO6fKJ0zqjZUlQBSpJ0GjR77w0aoc1Pr6S5/kVJrNpakV5hR+LWKN4t7sLX+p0rx2vqSta64olIulUKUgCSXLWE1R4KPPSj+5vhm2hdDOG+CkQBmhhyyKq6SaFYWTn5bB3QJRNz54AuXKn8TJjhu0Wbv+wNEKQjVhnmKopjo4FxXmetCRnC4F7BhCiCUepqAepRh0TM/gjjzOOSK2NgWZPc05qampRWJHb7dbOffep2ednzLzgczlbrQA6gHYF9BYDh9GY+FjddMweHMscmMuep07gXlMQoqw9ALoYu5MJsak9QmJA2IvAgVmoCRciooyPujJtNCv1uHt3TmK9gegFKrG9kh6oXwZiIEAtBIjORGKNTWR/WeW8XVkbjuJepLAyloM8LmTN//njKZPbraATZaLjCHEww9Ei4FFiPg6Ja5gT6gxYgLgnRDHRQwJXbz2GOw0d4A3K4GXlUtMahJjYVxiYbrwOmxIS10bFnIBOSi6Tl9Jgs0zbOEX18wyEwgLPMrxD1Y4aCK8kmTpgYcpAF27Mzs42Hjx4kA8BICUlJfKArR7LcEvTB1xEC9AoEw9OPagWkVU/D1oesmK6U911zEczMVe01oZjiMggg6ux2Qk379qh4rYKet4GjrhhwEteBgBrH8BssoXEtbHzPpSBRRSpqlNpgAiUoxzHKxLRszoVuggIisxaDQWZqkQvQjAoax3NbDbLLGuUEABNGedXqSyLRupXgDT5JfAGZNLio9B0X8Uiwk4w77MDc1D4yejjWtykPS3DX01UDCY/GPQcVDe0QYT0CIxGFvUorfvBxZsRfVrUuWruMBAb/lXCUofoFNZfzGJtowXOX0vwUSFK4BgyMKm6P6s9wQUZld+jrYyMDC0iIQDaJdG4IyZQfL3RfbFcCBIlRgc+u3CjaTApuZ9KsANgG8PNzHlWWD3tCxd6kafNNiFp5HAalAkkJ0SCV2H3CgOD9Nc/FqrXuyb0Eocvfhq171p5eyuJ1omKJEP5rQGe/FOOnXtq335z8YmvYo9cHb2t8spIb3lVSseZW46FlGY/Sk9P50P2w20UlWJUkUHIushfc5PXGAzCo0PlD2pnpCYfCXga3lu+fPlevEhWrVrFyrN/Orfv87FOW9tlqb2Kc9pV8DzioMk3UNUbXM+8B/ATBr8C8CKdvGXWGD/9sqm3dkxtzA4McMjHMB8D2ftheYXo+qzt3pXvz8/PP/vk+v8537V+yYW87Zu+RZ1ZbrexoKAA/SBpaWn4+aL5w5zGk+/jW59JiMkESW5urpiVlWXENRb1H/Yf2I9txIxz5IdkX3TsraukpsbQjz6090yb4XsAvQoRE0YvJdamtIIbOnRoUVlZ2ftsLVQzIdEXHntsaZdimssVfCpFui109+BnWPsXaWLI/zactygAAAAASUVORK5CYII=");
-
-define("text!cockpit/ui/images/plus.png", [], "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAAAXNSR0IArs4c6QAAAAZiS0dEANIA0gDS7KbF4AAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9kFGw4yFTwuJTkAAAH7SURBVCjPdZKxa1NRFMZ/956XZMgFyyMlCZRA4hBx6lBcQ00GoYi4tEstFPwLAs7iLDi7FWuHThaUggihBDI5OWRoQAmBQFISQgvvpbwX3rsOaR4K+o2H8zvfOZxPWWtZqVarGaAJPAEe3ZW/A1+Bd+1221v1qhW4vb1dA44mk0nZ8zyCIAAgk8lgjGF9fb0PHF5cXLQTsF6vP/c879P19TVBEJDJZBARAKIoSmpra2sYY561Wq3PqtFouMBgMBgYay3ZbJZ/yfd9tNaUSqUboOKISPPq6sqsVvZ9H4AvL34B8PTj/QSO45jpdHovn883Ha31znw+JwzDpCEMQx4UloM8zyOdTif3zudztNY7jog8DMMQpRRxHPPt5TCBAEZvxlyOFTsfykRRBICIlB2t9a21Nh3HMXEc8+d7VhJHWCwWyzcohdZaHBHpO46z6fs+IsLj94XECaD4unCHL8FsNouI/HRE5Nx13c3ZbIbWOnG5HKtl+53TSq7rIiLnand31wUGnU7HjEYjlFLJZN/3yRnL1FMYY8jlcmxtbd0AFel2u7dnZ2eXxpi9xWJBEASkUimstYgIQSSkUimKxSKVSgVjzN7p6emPJHL7+/s14KjX65WHwyGz2SxZbWNjg2q12gcOT05O2n9lFeDg4MAAr/4T8rfHx8dJyH8DvvbYGzKvWukAAAAASUVORK5CYII=");
-
-define("text!cockpit/ui/images/throbber.gif", [], "data:image/gif;base64,R0lGODlh3AATAPQAAP///wAAAL6+vqamppycnLi4uLKyssjIyNjY2MTExNTU1Nzc3ODg4OTk5LCwsLy8vOjo6Ozs7MrKyvLy8vT09M7Ozvb29sbGxtDQ0O7u7tbW1sLCwqqqqvj4+KCgoJaWliH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAA3AATAAAF/yAgjmRpnmiqrmzrvnAsz3Rt33iu73zv/8CgcEgECAaEpHLJbDqf0Kh0Sq1ar9isdjoQtAQFg8PwKIMHnLF63N2438f0mv1I2O8buXjvaOPtaHx7fn96goR4hmuId4qDdX95c4+RG4GCBoyAjpmQhZN0YGYFXitdZBIVGAoKoq4CG6Qaswi1CBtkcG6ytrYJubq8vbfAcMK9v7q7D8O1ycrHvsW6zcTKsczNz8HZw9vG3cjTsMIYqQgDLAQGCQoLDA0QCwUHqfYSFw/xEPz88/X38Onr14+Bp4ADCco7eC8hQYMAEe57yNCew4IVBU7EGNDiRn8Z831cGLHhSIgdE/9chIeBgDoB7gjaWUWTlYAFE3LqzDCTlc9WOHfm7PkTqNCh54rePDqB6M+lR536hCpUqs2gVZM+xbrTqtGoWqdy1emValeXKwgcWABB5y1acFNZmEvXwoJ2cGfJrTv3bl69Ffj2xZt3L1+/fw3XRVw4sGDGcR0fJhxZsF3KtBTThZxZ8mLMgC3fRatCLYMIFCzwLEprg84OsDus/tvqdezZf13Hvr2B9Szdu2X3pg18N+68xXn7rh1c+PLksI/Dhe6cuO3ow3NfV92bdArTqC2Ebc3A8vjf5QWf15Bg7Nz17c2fj69+fnq+8N2Lty+fuP78/eV2X13neIcCeBRwxorbZrAxAJoCDHbgoG8RTshahQ9iSKEEzUmYIYfNWViUhheCGJyIP5E4oom7WWjgCeBBAJNv1DVV01MZdJhhjdkplWNzO/5oXI846njjVEIqR2OS2B1pE5PVscajkxhMycqLJgxQCwT40PjfAV4GqNSXYdZXJn5gSkmmmmJu1aZYb14V51do+pTOCmA00AqVB4hG5IJ9PvYnhIFOxmdqhpaI6GeHCtpooisuutmg+Eg62KOMKuqoTaXgicQWoIYq6qiklmoqFV0UoeqqrLbq6quwxirrrLTWauutJ4QAACH5BAkKAAAALAAAAADcABMAAAX/ICCOZGmeaKqubOu+cCzPdG3feK7vfO//wKBwSAQIBoSkcslsOp/QqHRKrVqv2Kx2OhC0BAXHx/EoCzboAcdhcLDdgwJ6nua03YZ8PMFPoBMca215eg98G36IgYNvDgOGh4lqjHd7fXOTjYV9nItvhJaIfYF4jXuIf4CCbHmOBZySdoOtj5eja59wBmYFXitdHhwSFRgKxhobBgUPAmdoyxoI0tPJaM5+u9PaCQZzZ9gP2tPcdM7L4tLVznPn6OQb18nh6NV0fu3i5OvP8/nd1qjwaasHcIPAcf/gBSyAAMMwBANYEAhWYQGDBhAyLihwYJiEjx8fYMxIcsGDAxVA/yYIOZIkBAaGPIK8INJlRpgrPeasaRPmx5QgJfB0abLjz50tSeIM+pFmUo0nQQIV+vRlTJUSnNq0KlXCSq09ozIFexEBAYkeNiwgOaEtn2LFpGEQsKCtXbcSjOmVlqDuhAx3+eg1Jo3u37sZBA9GoMAw4MB5FyMwfLht4sh7G/utPGHlYAV8Nz9OnOBz4c2VFWem/Pivar0aKCP2LFn2XwhnVxBwsPbuBAQbEGiIFg1BggoWkidva5z4cL7IlStfkED48OIYoiufYIH68+cKPkqfnsB58ePjmZd3Dj199/XE20tv6/27XO3S6z9nPCz9BP3FISDefL/Bt192/uWmAv8BFzAQAQUWWFaaBgqA11hbHWTIXWIVXifNhRlq6FqF1sm1QQYhdiAhbNEYc2KKK1pXnAIvhrjhBh0KxxiINlqQAY4UXjdcjSJyeAx2G2BYJJD7NZQkjCPKuCORKnbAIXsuKhlhBxEomAIBBzgIYXIfHfmhAAyMR2ZkHk62gJoWlNlhi33ZJZ2cQiKTJoG05Wjcm3xith9dcOK5X51tLRenoHTuud2iMnaolp3KGXrdBo7eKYF5p/mXgJcogClmcgzAR5gCKymXYqlCgmacdhp2UCqL96mq4nuDBTmgBasaCFp4sHaQHHUsGvNRiiGyep1exyIra2mS7dprrtA5++z/Z8ZKYGuGsy6GqgTIDvupRGE+6CO0x3xI5Y2mOTkBjD4ySeGU79o44mcaSEClhglgsKyJ9S5ZTGY0Bnzrj+3SiKK9Rh5zjAALCywZBk/ayCWO3hYM5Y8Dn6qxxRFsgAGoJwwgDQRtYXAAragyQOmaLKNZKGaEuUlpyiub+ad/KtPqpntypvvnzR30DBtjMhNodK6Eqrl0zU0/GjTUgG43wdN6Ra2pAhGtAAZGE5Ta8TH6wknd2IytNKaiZ+Or79oR/tcvthIcAPe7DGAs9Edwk6r3qWoTaNzY2fb9HuHh2S343Hs1VIHhYtOt+Hh551rh24vP5YvXSGzh+eeghy76GuikU9FFEainrvrqrLfu+uuwxy777LTXfkIIACH5BAkKAAAALAAAAADcABMAAAX/ICCOZGmeaKqubOu+cCzPdG3feK7vfO//wKBwSAQIBoSkcslsOp/QqHRKrVqv2Kx2OhC0BAWHB2l4CDZo9IDjcBja7UEhTV+3DXi3PJFA8xMcbHiDBgMPG31pgHBvg4Z9iYiBjYx7kWocb26OD398mI2EhoiegJlud4UFiZ5sm6Kdn2mBr5t7pJ9rlG0cHg5gXitdaxwFGArIGgoaGwYCZ3QFDwjU1AoIzdCQzdPV1c0bZ9vS3tUJBmjQaGXl1OB0feze1+faiBvk8wjnimn55e/o4OtWjp+4NPIKogsXjaA3g/fiGZBQAcEAFgQGOChgYEEDCCBBLihwQILJkxIe/3wMKfJBSQkJYJpUyRIkgwcVUJq8QLPmTYoyY6ZcyfJmTp08iYZc8MBkhZgxk9aEcPOlzp5FmwI9KdWn1qASurJkClRoWKwhq6IUqpJBAwQEMBYroAHkhLt3+RyzhgCDgAV48Wbgg+waAnoLMgTOm6DwQ8CLBzdGdvjw38V5JTg2lzhyTMeUEwBWHPgzZc4TSOM1bZia6LuqJxCmnOxv7NSsl1mGHHiw5tOuIWeAEHcFATwJME/ApgFBc3MVLEgPvE+Ddb4JokufPmFBAuvPXWu3MIF89wTOmxvOvp179evQtwf2nr6aApPyzVd3jn089e/8xdfeXe/xdZ9/d1ngHf98lbHH3V0LMrgPgsWpcFwBEFBgHmyNXWeYAgLc1UF5sG2wTHjIhNjBiIKZCN81GGyQwYq9uajeMiBOQGOLJ1KjTI40kmfBYNfc2NcGIpI4pI0vyrhjiT1WFqOOLEIZnjVOVpmajYfBiCSNLGbA5YdOkjdihSkQwIEEEWg4nQUmvYhYe+bFKaFodN5lp3rKvJYfnBKAJ+gGDMi3mmbwWYfng7IheuWihu5p32XcSWdSj+stkF95dp64jJ+RBipocHkCCp6PCiRQ6INookCAAwy0yd2CtNET3Yo7RvihBjFZAOaKDHT43DL4BQnsZMo8xx6uI1oQrHXXhHZrB28G62n/YSYxi+uzP2IrgbbHbiaer7hCiOxDFWhrbmGnLVuus5NFexhFuHLX6gkEECorlLpZo0CWJG4pLjIACykmBsp0eSSVeC15TDJeUhlkowlL+SWLNJpW2WEF87urXzNWSZ6JOEb7b8g1brZMjCg3ezBtWKKc4MvyEtwybPeaMAA1ECRoAQYHYLpbeYYCLfQ+mtL5c9CnfQpYpUtHOSejEgT9ogZ/GSqd0f2m+LR5WzOtHqlQX1pYwpC+WbXKqSYtpJ5Mt4a01lGzS3akF60AxkcTaLgAyRBPWCoDgHfJqwRuBuzdw/1ml3iCwTIeLUWJN0v4McMe7uasCTxseNWPSxc5RbvIgD7geZLbGrqCG3jepUmbbze63Y6fvjiOylbwOITPfIHEFsAHL/zwxBdvPBVdFKH88sw37/zz0Ecv/fTUV2/99SeEAAAh+QQJCgAAACwAAAAA3AATAAAF/yAgjmRpnmiqrmzrvnAsz3Rt33iu73zv/8CgcEgECAaEpHLJbDqf0Kh0Sq1ar9isdjoQtAQFh2cw8BQEm3T6yHEYHHD4oKCuD9qGvNsxT6QTgAkcHHmFeX11fm17hXwPG35qgnhxbwMPkXaLhgZ9gWp3bpyegX4DcG+inY+Qn6eclpiZkHh6epetgLSUcBxlD2csXXdvBQrHGgoaGhsGaIkFDwjTCArTzX+QadHU3c1ofpHc3dcGG89/4+TYktvS1NYI7OHu3fEJ5tpqBu/k+HX7+nXDB06SuoHm0KXhR65cQT8P3FRAMIAFgVMPwDCAwLHjggIHJIgceeFBg44eC/+ITCCBZYKSJ1FCWPBgpE2YMmc+qNCypwScMmnaXAkUJYOaFVyKLOqx5tCXJnMelcBzJNSYKIX2ZPkzqsyjPLku9Zr1QciVErYxaICAgEUOBRJIgzChbt0MLOPFwyBggV27eCUcmxZvg9+/dfPGo5bg8N/Ag61ZM4w4seDF1fpWhizZmoa+GSortgcaMWd/fkP/HY0MgWbTipVV++wY8GhvqSG4XUEgoYTKE+Qh0OCvggULiBckWEZ4Ggbjx5HXVc58IPQJ0idQJ66XanTpFraTe348+XLizRNcz658eHMN3rNPT+C+G/nodqk3t6a+fN3j+u0Xn3nVTQPfdRPspkL/b+dEIN8EeMm2GAYbTNABdrbJ1hyFFv5lQYTodSZABhc+loCEyhxTYYkZopdMMiNeiBxyIFajV4wYHpfBBspUl8yKHu6ooV5APsZjQxyyeNeJ3N1IYod38cgdPBUid6GCKfRWgAYU4IccSyHew8B3doGJHmMLkGkZcynKk2Z50Ym0zJzLbDCmfBbI6eIyCdyJmJmoqZmnBAXy9+Z/yOlZDZpwYihnj7IZpuYEevrYJ5mJEuqiof4l+NYDEXQpXQcMnNjZNDx1oGqJ4S2nF3EsqWrhqqVWl6JIslpAK5MaIqDeqjJq56qN1aTaQaPbHTPYr8Be6Gsyyh6Da7OkmmqP/7GyztdrNVQBm5+pgw3X7aoYKhfZosb6hyUKBHCgQKij1rghkOAJuZg1SeYIIY+nIpDvf/sqm4yNG5CY64f87qdAwSXKGqFkhPH1ZHb2EgYtw3bpKGVkPz5pJAav+gukjB1UHE/HLNJobWcSX8jiuicMMBFd2OmKwQFs2tjXpDfnPE1j30V3c7iRHlrzBD2HONzODyZtsQJMI4r0AUNaE3XNHQw95c9GC001MpIxDacFQ+ulTNTZlU3O1eWVHa6vb/pnQUUrgHHSBKIuwG+bCPyEqbAg25gMVV1iOB/IGh5YOKLKIQ6xBAcUHmzjIcIqgajZ+Ro42DcvXl7j0U4WOUd+2IGu7DWjI1pt4DYq8BPm0entuGSQY/4tBi9Ss0HqfwngBQtHbCH88MQXb/zxyFfRRRHMN+/889BHL/301Fdv/fXYZ39CCAAh+QQJCgAAACwAAAAA3AATAAAF/yAgjmRpnmiqrmzrvnAsz3Rt33iu73zv/8CgcEgECAaEpHLJbDqf0Kh0Sq1ar9isdjoQtAQFh2fAKXsKm7R6Q+Y43vABep0mGwwOPH7w2CT+gHZ3d3lyagl+CQNvg4yGh36LcHoGfHR/ZYOElQ9/a4ocmoRygIiRk5p8pYmZjXePaYBujHoOqp5qZHBlHAUFXitddg8PBg8KGsgayxvGkAkFDwgICtPTzX2mftHW3QnOpojG3dbYkNjk1waxsdDS1N7ga9zw1t/aifTk35fu6Qj3numL14fOuHTNECHqU4DDgQEsCCwidiHBAwYQMmpcUOCAhI8gJVzUuLGThAQnP/9abEAyI4MCIVOKZNnyJUqUJxNcGNlywYOQgHZirGkSJ8gHNEky+AkS58qWEJYC/bMzacmbQHkqNdlUJ1KoSz2i9COhmQYCEXtVrCBgwYS3cCf8qTcNQ9u4cFFOq2bPLV65Cf7dxZthbjW+CgbjnWtNgWPFcAsHdoxgWWK/iyV045sAc2S96SDn1exYw17REwpLQEYt2eW/qtPZRQAB7QoC61RW+GsBwYZ/CXb/XRCYLsAKFizEtUAc+G7lcZsjroscOvTmsoUvx15PwccJ0N8yL17N9PG/E7jv9S4hOV7pdIPDdZ+ePDzv2qMXn2b5+wTbKuAWnF3oZbABZY0lVmD/ApQd9thybxno2GGuCVDggaUpoyBsB1bGGgIYbJCBcuFJiOAyGohIInQSmmdeiBnMF2GHfNUlIoc1rncjYRjW6NgGf3VQGILWwNjBfxEZcAFbC7gHXQcfUYOYdwzQNxo5yUhQZXhvRYlMeVSuSOJHKJa5AQMQThBlZWZ6Bp4Fa1qzTAJbijcBlJrtxeaZ4lnnpZwpukWieGQmYx5ATXIplwTL8DdNZ07CtWYybNIJF4Ap4NZHe0920AEDk035kafieQrqXofK5ympn5JHKYjPrfoWcR8WWQGp4Ul32KPVgXdnqxM6OKqspjIYrGPDrlrsZtRIcOuR86nHFwbPvmes/6PH4frrqbvySh+mKGhaAARPzjjdhCramdoGGOhp44i+zogBkSDuWC5KlE4r4pHJkarXrj++Raq5iLmWLlxHBteavjG+6amJrUkJJI4Ro5sBv9AaOK+jAau77sbH7nspCwNIYIACffL7J4JtWQnen421nNzMcB6AqpRa9klonmBSiR4GNi+cJZpvwgX0ejj71W9yR+eIgaVvQgf0l/A8nWjUFhwtZYWC4hVnkZ3p/PJqNQ5NnwUQrQCGBBBMQIGTtL7abK+5JjAv1fi9bS0GLlJHgdjEgYzzARTwC1fgEWdJuKKBZzj331Y23qB3i9v5aY/rSUC4w7PaLeWXmr9NszMFoN79eeiM232o33EJAIzaSGwh++y012777bhT0UURvPfu++/ABy/88MQXb/zxyCd/QggAIfkECQoAAAAsAAAAANwAEwAABf8gII5kaZ5oqq5s675wLM90bd94ru987//AoHBIBAgGhKRyyWw6n9CodEqtWq/YrHY6ELQEBY5nwCk7xIWNer0hO95wziC9Ttg5b4ND/+Y87IBqZAaEe29zGwmJigmDfHoGiImTjXiQhJEPdYyWhXwDmpuVmHwOoHZqjI6kZ3+MqhyemJKAdo6Ge3OKbEd4ZRwFBV4rc4MPrgYPChrMzAgbyZSJBcoI1tfQoYsJydfe2amT3d7W0OGp1OTl0YtqyQrq0Lt11PDk3KGoG+nxBpvTD9QhwCctm0BzbOyMIwdOUwEDEgawIOCB2oMLgB4wgMCx44IHBySIHClBY0ePfyT/JCB5weRJCAwejFw58kGDlzBTqqTZcuPLmCIBiWx58+VHmiRLFj0JVCVLl0xl7qSZwCbOo0lFWv0pdefQrVFDJtr5gMBEYBgxqBWwYILbtxPsqMPAFu7blfa81bUbN4HAvXAzyLWnoDBguHIRFF6m4LBbwQngMYPXuC3fldbyPrMcGLM3w5wRS1iWWUNlvnElKDZtz/EEwaqvYahQoexEfyILi4RrYYKFZwJ3810QWZ2ECrx9Ew+O3K6F5Yq9zXbb+y30a7olJJ+wnLC16W97Py+uwdtx1NcLWzs/3G9e07stVPc9kHJ0BcLtQp+c3ewKAgYkUAFpCaAmmHqKLSYA/18WHEiZPRhsQF1nlLFWmIR8ZbDBYs0YZuCGpGXWmG92aWiPMwhEOOEEHXRwIALlwXjhio+BeE15IzpnInaLbZBBhhti9x2GbnVQo2Y9ZuCfCgBeMCB+DJDIolt4iVhOaNSJdCOBUfIlkmkyMpPAAvKJ59aXzTQzJo0WoJnmQF36Jp6W1qC4gWW9GZladCiyJd+KnsHImgRRVjfnaDEKuiZvbcYWo5htzefbl5LFWNeSKQAo1QXasdhiiwwUl2B21H3aQaghXnPcp1NagCqYslXAqnV+zYWcpNwVp9l5eepJnHqL4SdBi56CGlmw2Zn6aaiZjZqfb8Y2m+Cz1O0n3f+tnvrGbF6kToApCgAWoNWPeh754JA0vmajiAr4iOuOW7abQXVGNriBWoRdOK8FxNqLwX3oluubhv8yluRbegqGb536ykesuoXhyJqPQJIGbLvQhkcwjKs1zBvBwSZIsbcsDCCBAAf4ya+UEhyQoIiEJtfoZ7oxUOafE2BwgMWMqUydfC1LVtiArk0QtGkWEopzlqM9aJrKHfw5c6wKjFkmXDrbhwFockodtMGFLWpXy9JdiXN1ZDNszV4WSLQCGBKoQYHUyonqrHa4ErewAgMmcAAF7f2baIoVzC2p3gUvJtLcvIWqloy6/R04mIpLwDhciI8qLOB5yud44pHPLbA83hFDWPjNbuk9KnySN57Av+TMBvgEAgzzNhJb5K777rz37vvvVHRRxPDEF2/88cgnr/zyzDfv/PPQnxACACH5BAkKAAAALAAAAADcABMAAAX/ICCOZGmeaKqubOu+cCzPdG3feK7vfO//wKBwSAQIBoSkcslsOp/QqHRKrVqv2Kx2OhC0BIUCwcMpO84OT2HDbm8GHLQjnn6wE3g83SA3DB55G3llfHxnfnZ4gglvew6Gf4ySgmYGlpCJknochWiId3kJcZZyDn93i6KPl4eniopwq6SIoZKxhpenbhtHZRxhXisDopwPgHkGDxrLGgjLG8mC0gkFDwjX2AgJ0bXJ2djbgNJsAtbfCNB2oOnn6MmKbeXt226K1fMGi6j359D69ua+QZskjd+3cOvY9XNgp4ABCQNYEDBl7EIeCQkeMIDAseOCBwckiBSZ4ILGjh4B/40kaXIjSggMHmBcifHky5gYE6zM2OAlzGM6Z5rs+fIjTZ0tfcYMSlLCUJ8fL47kCVXmTjwPiKJkUCDnyqc3CxzQmYeAxAEGLGJYiwCDgAUT4sqdgOebArdw507IUNfuW71xdZ7DC5iuhGsKErf9CxhPYgUaEhPWyzfBMgUIJDPW6zhb5M1y+R5GjFkBaLmCM0dOfHqvztXYJnMejaFCBQlmVxAYsEGkYnQV4lqYMNyCtnYSggNekAC58uJxmTufW5w55mwKkg+nLp105uTC53a/nhg88fMTmDfDVl65Xum/IZt/3/zaag3a5W63nll1dvfiWbaaZLmpQIABCVQA2f9lAhTG112PQWYadXE9+FtmEwKWwQYQJrZagxomsOCAGVImInsSbpCBhhwug6KKcXXQQYUcYuDMggrASFmNzjjzzIrh7cUhhhHqONeGpSEW2QYxHsmjhxpgUGAKB16g4IIbMNCkXMlhaJ8GWVJo2I3NyKclYF1GxgyYDEAnXHJrMpNAm/rFBSczPiYAlwXF8ZnmesvoOdyMbx7m4o0S5LWdn4bex2Z4xYmEzaEb5EUcnxbA+WWglqIn6aHPTInCgVbdlZyMqMrIQHMRSiaBBakS1903p04w434n0loBoQFOt1yu2YAnY68RXiNsqh2s2qqxuyKb7Imtmgcrqsp6h8D/fMSpapldx55nwayK/SfqCQd2hcFdAgDp5GMvqhvakF4mZuS710WGIYy30khekRkMu92GNu6bo7r/ttjqwLaua5+HOdrKq5Cl3dcwi+xKiLBwwwom4b0E6xvuYyqOa8IAEghwQAV45VvovpkxBl2mo0W7AKbCZXoAhgMmWnOkEqx2JX5nUufbgJHpXCfMOGu2QAd8eitpW1eaNrNeMGN27mNz0swziYnpSbXN19gYtstzfXrdYjNHtAIYGFVwwAEvR1dfxdjKxVzAP0twAAW/ir2w3nzTd3W4yQWO3t0DfleB4XYnEHCEhffdKgaA29p0eo4fHLng9qoG+OVyXz0gMeWGY7qq3xhiRIEAwayNxBawxy777LTXbjsVXRSh++689+7778AHL/zwxBdv/PEnhAAAIfkECQoAAAAsAAAAANwAEwAABf8gII5kaZ5oqq5s675wLM90bd94ru987//AoHBIBAgGhKRyyWw6n9CodEqtWq/YrHY6ELQEhYLD4BlwHGg0ubBpuzdm9Dk9eCTu+MTZkDb4PXYbeIIcHHxqf4F3gnqGY2kOdQmCjHCGfpCSjHhmh2N+knmEkJmKg3uHfgaaeY2qn6t2i4t7sKAPbwIJD2VhXisDCQZgDrKDBQ8aGgjKyhvDlJMJyAjV1gjCunkP1NfVwpRtk93e2ZVt5NfCk27jD97f0LPP7/Dr4pTp1veLgvrx7AL+Q/BM25uBegoYkDCABYFhEobhkUBRwoMGEDJqXPDgQMUEFC9c1LjxQUUJICX/iMRIEgIDkycrjmzJMSXFlDNJvkwJsmdOjQwKfDz5M+PLoSGLQqgZU6XSoB/voHxawGbFlS2XGktAwKEADB0xiEWAodqGBRPSqp1wx5qCamDRrp2Qoa3bagLkzrULF4GCvHPTglRAmKxZvWsHayBcliDitHUlvGWM97FgCdYWVw4c2e/kw4HZJlCwmDBhwHPrjraGYTHqtaoxVKggoesKAgd2SX5rbUMFCxOAC8cGDwHFwBYWJCgu4XfwtcqZV0grPHj0u2SnqwU+IXph3rK5b1fOu7Bx5+K7L6/2/Xhg8uyXnQ8dvfRiDe7TwyfNuzlybKYpgIFtKhAgwEKkKcOf/wChZbBBgMucRh1so5XH3wbI1WXafRJy9iCErmX4IWHNaIAhZ6uxBxeGHXQA24P3yYfBBhmgSBozESpwongWOBhggn/N1aKG8a1YY2oVAklgCgQUUwGJ8iXAgItrWUARbwpqIOWEal0ZoYJbzmWlZCWSlsAC6VkwZonNbMAAl5cpg+NiZwpnJ0Xylegmlc+tWY1mjnGnZnB4QukMA9UJRxGOf5r4ppqDjjmnfKilh2ejGiyJAgF1XNmYbC2GmhZ5AcJVgajcXecNqM9Rx8B6bingnlotviqdkB3YCg+rtOaapFsUhSrsq6axJ6sEwoZK7I/HWpCsr57FBxJ1w8LqV/81zbkoXK3LfVeNpic0KRQG4NHoIW/XEmZuaiN6tti62/moWbk18uhjqerWS6GFpe2YVotskVssWfBOAHACrZHoWcGQwQhlvmsdXBZ/F9YLMF2jzUuYBP4a7CLCnoEHrgkDSCDAARUILAGaVVqAwQHR8pZXomm9/ONhgjrbgc2lyYxmpIRK9uSNjrXs8gEbTrYyl2ryTJmsLCdKkWzFQl1lWlOXGmifal6p9VnbQfpyY2SZyXKVV7JmZkMrgIFSyrIeUJ2r7YKnXdivUg1kAgdQ8B7IzJjGsd9zKSdwyBL03WpwDGxwuOASEP5vriO2F3nLjQdIrpaRDxqcBdgIHGA74pKrZXiR2ZWuZt49m+o3pKMC3p4Av7SNxBa456777rz37jsVXRQh/PDEF2/88cgnr/zyzDfv/PMnhAAAIfkECQoAAAAsAAAAANwAEwAABf8gII5kaZ5oqq5s675wLM90bd94ru987//AoHBIBAgGhKRyyWw6n9CodEqtWq/YrHY6ELQEhYLDUPAMHGi0weEpbN7wI8cxTzsGj4R+n+DUxwaBeBt7hH1/gYIPhox+Y3Z3iwmGk36BkIN8egOIl3h8hBuOkAaZhQlna4BrpnyWa4mleZOFjrGKcXoFA2ReKwMJBgISDw6abwUPGggazc0bBqG0G8kI1tcIwZp51djW2nC03d7BjG8J49jl4cgP3t/RetLp1+vT6O7v5fKhAvnk0UKFogeP3zmCCIoZkDCABQFhChQYuKBHgkUJkxpA2MhxQYEDFhNcvPBAI8eNCx7/gMQYckPJkxsZPLhIM8FLmDJrYiRp8mTKkCwT8IQJwSPQkENhpgQpEunNkzlpWkwKdSbGihKocowqVSvKWQkIOBSgQOYFDBgQpI0oYMGEt3AzTLKm4BqGtnDjirxW95vbvG/nWlub8G9euRsiqqWLF/AEkRoiprX2wLDeDQgkW9PQGLDgyNc665WguK8C0XAnRY6oGPUEuRLsgk5g+a3cCxUqSBC7gsCBBXcVq6swwULx4hayvctGPK8FCwsSLE9A3Hje6NOrHzeOnW695sffRi/9HfDz7sIVSNB+XXrmugo0rHcM3X388o6jr44ceb51uNjF1xcC8zk3wXiS8aYC/wESaLABBs7ch0ECjr2WAGvLsLZBeHqVFl9kGxooV0T81TVhBo6NiOEyJ4p4IYnNRBQiYCN6x4wCG3ZAY2If8jXjYRcyk2FmG/5nXAY8wqhWAii+1YGOSGLoY4VRfqiAgikwmIeS1gjAgHkWYLQZf9m49V9gDWYWY5nmTYCRM2TS5pxxb8IZGV5nhplmhJyZadxzbrpnZ2d/6rnZgHIid5xIMDaDgJfbLdrgMkKW+Rygz1kEZz1mehabkBpgiQIByVikwGTqVfDkk2/Vxxqiqur4X3fksHccre8xlxerDLiHjQIVUAgXr77yFeyuOvYqXGbMrbrqBMqaFpFFzhL7qv9i1FX7ZLR0LUNdcc4e6Cus263KbV+inkAAHhJg0BeITR6WmHcaxhvXg/AJiKO9R77ILF1FwmVdAu6WBu+ZFua72mkZWMfqBElKu0G8rFZ5n4ATp5jkmvsOq+Nj7u63ZMMPv4bveyYy6fDH+C6brgnACHBABQUrkGirz2FwAHnM4Mmhzq9yijOrOi/MKabH6VwBiYwZdukEQAvILKTWXVq0ZvH5/CfUM7M29Zetthp1eht0eqkFYw8IKXKA6mzXfTeH7fZg9zW0AhgY0TwthUa6Ch9dBeIsbsFrYkRBfgTfiG0FhwMWnbsoq3cABUYOnu/ejU/A6uNeT8u4wMb1WnBCyJJTLjjnr8o3OeJrUcpc5oCiPqAEkz8tXuLkPeDL3Uhs4fvvwAcv/PDEU9FFEcgnr/zyzDfv/PPQRy/99NRXf0IIACH5BAkKAAAALAAAAADcABMAAAX/ICCOZGmeaKqubOu+cCzPdG3feK7vfO//wKBwSAQIBoSkcslsOp/QqHRKrVqv2Kx2OhC0BIWCw/AoDziOtCHt8BQ28PjmzK57Hom8fo42+P8DeAkbeYQcfX9+gYOFg4d1bIGEjQmPbICClI9/YwaLjHAJdJeKmZOViGtpn3qOqZineoeJgG8CeWUbBV4rAwkGAhIVGL97hGACGsrKCAgbBoTRhLvN1c3PepnU1s2/oZO6AtzdBoPf4eMI3tIJyOnF0YwFD+nY8e3z7+Xfefnj9uz8cVsXCh89axgk7BrAggAwBQsYIChwQILFixIeNIDAseOCBwcSXMy2sSPHjxJE/6a0eEGjSY4MQGK86PIlypUJEmYsaTKmyJ8JW/Ls6HMkzaEn8YwMWtPkx4pGd76E4DMPRqFTY860OGhogwYagBFoKEABA46DEGBAoEBB0AUT4sqdIFKBNbcC4M6dkEEk22oYFOTdG9fvWrtsBxM23MytYL17666t9phwXwlum2lIDHmuSA2IGyuOLOHv38qLMbdFjHruZbWgRXeOe1nC2BUEDiyAMMHZuwoTLAQX3nvDOAUW5Vogru434d4JnAsnPmFB9NBshQXfa9104+Rxl8e13rZxN+CEydtVsFkd+vDjE7C/q52wOvb4s7+faz025frbxefWbSoQIAEDEUCwgf9j7bUlwHN9ZVaegxDK1xYzFMJH24L5saXABhlYxiEzHoKoIV8LYqAMaw9aZqFmJUK4YHuNfRjiXhmk+NcyJgaIolvM8BhiBx3IleN8lH1IWAcRgkZgCgYiaBGJojGgHHFTgtagAFYSZhF7/qnTpY+faVlNAnqJN0EHWa6ozAZjBtgmmBokwMB01LW5jAZwbqfmlNips4B4eOqJgDJ2+imXRZpthuigeC6XZTWIxilXmRo8iYKBCwiWmWkJVEAkfB0w8KI1IvlIpKnOkVpqdB5+h96o8d3lFnijrgprjbfGRSt0lH0nAZG5vsprWxYRW6Suq4UWqrLEsspWg8Io6yv/q6EhK0Fw0GLbjKYn5CZYBYht1laPrnEY67kyrhYbuyceiR28Pso7bYwiXjihjWsWuWF5p/H765HmNoiur3RJsGKNG/jq748XMrwmjhwCfO6QD9v7LQsDxPTAMKsFpthyJCdkmgYiw0VdXF/Om9dyv7YMWGXTLYpZg5wNR11C78oW3p8HSGgul4qyrJppgllJHJZHn0Y0yUwDXCXUNquFZNLKyYXBAVZvxtAKYIQEsmPgDacr0tltO1y/DMwYpkgUpJfTasLGzd3cdCN3gN3UWRcY3epIEPevfq+3njBxq/kqBoGBduvea8f393zICS63ivRBTqgFpgaWZEIUULdcK+frIfAAL2AjscXqrLfu+uuwx05FF0XUbvvtuOeu++689+7778AHL/wJIQAAOwAAAAAAAAAAAA==");
-
diff --git a/apps/files_texteditor/js/aceeditor/cockpit.js b/apps/files_texteditor/js/aceeditor/cockpit.js
deleted file mode 100644
index ddc08281335..00000000000
--- a/apps/files_texteditor/js/aceeditor/cockpit.js
+++ /dev/null
@@ -1 +0,0 @@
-define("cockpit/index",["require","exports","module","pilot/index","cockpit/cli","cockpit/ui/settings","cockpit/ui/cli_view","cockpit/commands/basic"],function(a,b,c){b.startup=function(b,c){a("pilot/index"),a("cockpit/cli").startup(b,c),a("cockpit/ui/settings").startup(b,c),a("cockpit/ui/cli_view").startup(b,c),a("cockpit/commands/basic").startup(b,c)}}),define("cockpit/cli",["require","exports","module","pilot/console","pilot/lang","pilot/oop","pilot/event_emitter","pilot/types","pilot/canon"],function(a,b,c){function r(a,b){q.call(this,a),b&&b.flags&&(this.flags=b.flags)}function q(a){this.env=a,this.commandAssignment=new o(p,this)}function o(a,b){this.param=a,this.requisition=b,this.setValue(a.defaultValue)}function n(a,b,c,d,e,f){this.emitter=a,this.setText(b),this.start=c,this.end=d,this.prefix=e,this.suffix=f}function m(a,b){this.status=a.status,this.message=a.message,b?(this.start=b.start,this.end=b.end):(this.start=0,this.end=0),this.predictions=a.predictions}function l(a,b,c,d,e){this.status=a,this.message=b;if(typeof c=="number")this.start=c,this.end=d,this.predictions=e;else{var f=c;this.start=f.start,this.end=f.end,this.predictions=f.predictions}}var d=a("pilot/console"),e=a("pilot/lang"),f=a("pilot/oop"),g=a("pilot/event_emitter").EventEmitter,h=a("pilot/types"),i=a("pilot/types").Status,j=a("pilot/types").Conversion,k=a("pilot/canon");b.startup=function(a,b){k.upgradeType("command",p)},l.prototype={},l.sort=function(a,b){b!==undefined&&a.forEach(function(a){a.start===n.AT_CURSOR?a.distance=0:b<a.start?a.distance=a.start-b:b>a.end?a.distance=b-a.end:a.distance=0},this),a.sort(function(a,c){if(b!==undefined){var d=a.distance-c.distance;if(d!=0)return d}return c.status-a.status}),b!==undefined&&a.forEach(function(a){delete a.distance},this);return a},b.Hint=l,f.inherits(m,l),n.prototype={merge:function(a){if(a.emitter!=this.emitter)throw new Error("Can't merge Arguments from different EventEmitters");return new n(this.emitter,this.text+this.suffix+a.prefix+a.text,this.start,a.end,this.prefix,a.suffix)},setText:function(a){if(a==null)throw new Error("Illegal text for Argument: "+a);var b={argument:this,oldText:this.text,text:a};this.text=a,this.emitter._dispatchEvent("argumentChange",b)},toString:function(){return this.prefix+this.text+this.suffix}},n.merge=function(a,b,c){b=b===undefined?0:b,c=c===undefined?a.length:c;var d;for(var e=b;e<c;e++){var f=a[e];d?d=d.merge(f):d=f}return d},n.AT_CURSOR=-1,o.prototype={param:undefined,conversion:undefined,value:undefined,arg:undefined,value:undefined,setValue:function(a){if(this.value!==a){if(a===undefined)this.value=this.param.defaultValue,this.conversion=this.param.getDefault?this.param.getDefault():this.param.type.getDefault(),this.arg=undefined;else{this.value=a,this.conversion=undefined;var b=a==null?"":this.param.type.stringify(a);this.arg&&this.arg.setText(b)}this.requisition._assignmentChanged(this)}},arg:undefined,setArgument:function(a){this.arg!==a&&(this.arg=a,this.conversion=this.param.type.parse(a.text),this.conversion.arg=a,this.value=this.conversion.value,this.requisition._assignmentChanged(this))},getHint:function(){if(this.param.getCustomHint&&this.value&&this.arg){var a=this.param.getCustomHint(this.value,this.arg);if(a)return a}var b="<strong>"+this.param.name+"</strong>: ";this.param.description&&(b+=this.param.description.trim(),b.charAt(b.length-1)!=="."&&(b+="."),b.charAt(b.length-1)!==" "&&(b+=" "));var c=i.VALID,d=this.arg?this.arg.start:n.AT_CURSOR,e=this.arg?this.arg.end:n.AT_CURSOR,f;this.conversion&&(c=this.conversion.status,this.conversion.message&&(b+=this.conversion.message),f=this.conversion.predictions);var g=this.arg&&this.arg.text!=="",h=this.value!==undefined||g;this.param.defaultValue===undefined&&!h&&(c=i.INVALID,b+="<strong>Required<strong>");return new l(c,b,d,e,f)},complete:function(){this.conversion&&this.conversion.predictions&&this.conversion.predictions.length>0&&this.setValue(this.conversion.predictions[0])},isPositionCaptured:function(a){return this.arg?this.arg.start===-1?!1:a>this.arg.end?!1:a===this.arg.end?this.conversion.status!==i.VALID||this.conversion.predictions.length!==0:!0:!1},decrement:function(){var a=this.param.type.decrement(this.value);a!=null&&this.setValue(a)},increment:function(){var a=this.param.type.increment(this.value);a!=null&&this.setValue(a)},toString:function(){return this.arg?this.arg.toString():""}},b.Assignment=o;var p={name:"__command",type:"command",description:"The command to execute",getCustomHint:function(a,b){var c=[];c.push("<strong><tt> &gt; "),c.push(a.name),a.params&&a.params.length>0&&a.params.forEach(function(a){a.defaultValue===undefined?c.push(" ["+a.name+"]"):c.push(" <em>["+a.name+"]</em>")},this),c.push("</tt></strong><br/>"),c.push(a.description?a.description:"(No description)"),c.push("<br/>"),a.params&&a.params.length>0&&(c.push("<ul>"),a.params.forEach(function(a){c.push("<li>"),c.push("<strong><tt>"+a.name+"</tt></strong>: "),c.push(a.description?a.description:"(No description)"),a.defaultValue===undefined?c.push(" <em>[Required]</em>"):a.defaultValue===null?c.push(" <em>[Optional]</em>"):c.push(" <em>[Default: "+a.defaultValue+"]</em>"),c.push("</li>")},this),c.push("</ul>"));return new l(i.VALID,c.join(""),b)}};q.prototype={commandAssignment:undefined,assignmentCount:undefined,_assignments:undefined,_hints:undefined,_assignmentChanged:function(a){a.param.name==="__command"&&(this._assignments={},a.value&&a.value.params.forEach(function(a){this._assignments[a.name]=new o(a,this)},this),this.assignmentCount=Object.keys(this._assignments).length,this._dispatchEvent("commandChange",{command:a.value}))},getAssignment:function(a){var b=typeof a=="string"?a:Object.keys(this._assignments)[a];return this._assignments[b]},getParameterNames:function(){return Object.keys(this._assignments)},cloneAssignments:function(){return Object.keys(this._assignments).map(function(a){return this._assignments[a]},this)},_updateHints:function(){this.getAssignments(!0).forEach(function(a){this._hints.push(a.getHint())},this),l.sort(this._hints)},getWorstHint:function(){return this._hints[0]},getArgsObject:function(){var a={};this.getAssignments().forEach(function(b){a[b.param.name]=b.value},this);return a},getAssignments:function(a){var b=[];a===!0&&b.push(this.commandAssignment),Object.keys(this._assignments).forEach(function(a){b.push(this.getAssignment(a))},this);return b},setDefaultValues:function(){this.getAssignments().forEach(function(a){a.setValue(undefined)},this)},exec:function(){k.exec(this.commandAssignment.value,this.env,"cli",this.getArgsObject(),this.toCanonicalString())},toCanonicalString:function(){var a=[];a.push(this.commandAssignment.value.name),Object.keys(this._assignments).forEach(function(b){var c=this._assignments[b],d=c.param.type;c.value!==c.param.defaultValue&&(a.push(" "),a.push(d.stringify(c.value)))},this);return a.join("")}},f.implement(q.prototype,g),b.Requisition=q,f.inherits(r,q),function(){r.prototype.update=function(a){this.input=a,this._hints=[];var b=this._tokenize(a.typed);this._split(b),this.commandAssignment.value&&this._assign(b),this._updateHints()},r.prototype.getInputStatusMarkup=function(){var a=this.toString().split("").map(function(a){return i.VALID});this._hints.forEach(function(b){for(var c=b.start;c<=b.end;c++)b.status>a[c]&&(a[c]=b.status)},this);return a},r.prototype.toString=function(){return this.getAssignments(!0).map(function(a){return a.toString()},this).join("")};var a=r.prototype._updateHints;r.prototype._updateHints=function(){a.call(this);var b=this.input.cursor;this._hints.forEach(function(a){var c=b.start>=a.start&&b.start<=a.end,d=b.end>=a.start&&b.end<=a.end,e=c||d;!e&&a.status===i.INCOMPLETE&&(a.status=i.INVALID)},this),l.sort(this._hints)},r.prototype.getHints=function(){return this._hints},r.prototype.getAssignmentAt=function(a){var b=this.getAssignments(!0);for(var c=0;c<b.length;c++){var d=b[c];if(!d.arg)return d;if(d.isPositionCaptured(a))return d}return d},r.prototype._tokenize=function(a){function g(a){return a.replace(/\uF000/g," ").replace(/\uF001/g,"'").replace(/\uF002/g,'"')}if(a==null||a.length===0)return[new n(this,"",0,0,"","")];var b=1,c=2,d=3,e=4,f=b;a=a.replace(/\\\\/g,"\\").replace(/\\b/g,"\b").replace(/\\f/g,"\f").replace(/\\n/g,"\n").replace(/\\r/g,"\r").replace(/\\t/g,"\t").replace(/\\v/g," ").replace(/\\n/g,"\n").replace(/\\r/g,"\r").replace(/\\ /g,"").replace(/\\'/g,"").replace(/\\"/g,"");var h=0,i=0,j="",k=[];for(;;){if(h>=a.length){if(f!==b){var l=g(a.substring(i,h));k.push(new n(this,l,i,h,j,""))}else if(h!==i){var m=a.substring(i,h),o=k[k.length-1];o?o.suffix+=m:(o=new n(this,"",h,h,m,""),k.push(o))}break}var p=a[h];switch(f){case b:p==="'"?(j=a.substring(i,h+1),f=d,i=h+1):p==='"'?(j=a.substring(i,h+1),f=e,i=h+1):/ /.test(p)||(j=a.substring(i,h),f=c,i=h);break;case c:if(p===" "){var l=g(a.substring(i,h));k.push(new n(this,l,i,h,j,"")),f=b,i=h,j=""}break;case d:if(p==="'"){var l=g(a.substring(i,h));k.push(new n(this,l,i-1,h+1,j,p)),f=b,i=h+1,j=""}break;case e:if(p==='"'){var l=g(a.substring(i,h));k.push(new n(this,l,i-1,h+1,j,p)),f=b,i=h+1,j=""}}h++}return k},r.prototype._split=function(a){var b=1,c;while(b<=a.length){var c=n.merge(a,0,b);this.commandAssignment.setArgument(c);if(!this.commandAssignment.value)break;if(this.commandAssignment.value.exec){for(var d=0;d<b;d++)a.shift();break}b++}},r.prototype._assign=function(a){if(a.length===0)this.setDefaultValues();else{if(this.assignmentCount===0){this._hints.push(new l(i.INVALID,this.commandAssignment.value.name+" does not take any parameters",n.merge(a)));return}if(this.assignmentCount===1){var b=this.getAssignment(0);if(b.param.type.name==="text"){b.setArgument(n.merge(a));return}}var c=this.cloneAssignments(),d=this.getParameterNames(),f=[];c.forEach(function(b){var c="--"+b.name,f=0;for(;;){var g=a[f];if(c!==g.text){f++;if(f>=a.length)break;continue}b.param.type.name==="boolean"?b.setValue(!0):f+1<a.length?this._hints.push(new l(i.INCOMPLETE,"Missing value for: "+c,a[f])):(a.splice(f+1,1),b.setArgument(a[f+1])),e.arrayRemove(d,b.name),a.splice(f,1)}},this),d.forEach(function(b){var c=this.getAssignment(b);if(a.length===0)c.setValue(undefined);else{var d=a[0];a.splice(0,1),c.setArgument(d)}},this);if(a.length>0){var g=n.merge(a);this._hints.push(new l(i.INVALID,"Input '"+g.text+"' makes no sense.",g))}}}}(),b.CliRequisition=r}),define("cockpit/ui/settings",["require","exports","module","pilot/types","pilot/types/basic"],function(a,b,c){var d=a("pilot/types"),e=a("pilot/types/basic").SelectionType,f=new e({name:"direction",data:["above","below"]}),g={name:"hintDirection",description:"Are hints shown above or below the command line?",type:"direction",defaultValue:"above"},h={name:"outputDirection",description:"Is the output window shown above or below the command line?",type:"direction",defaultValue:"above"},i={name:"outputHeight",description:"What height should the output panel be?",type:"number",defaultValue:300};b.startup=function(a,b){d.registerType(f),a.env.settings.addSetting(g),a.env.settings.addSetting(h),a.env.settings.addSetting(i)},b.shutdown=function(a,b){d.unregisterType(f),a.env.settings.removeSetting(g),a.env.settings.removeSetting(h),a.env.settings.removeSetting(i)}}),define("cockpit/ui/cli_view",["require","exports","module","text!cockpit/ui/cli_view.css","pilot/event","pilot/dom","pilot/keys","pilot/canon","pilot/types","cockpit/cli","cockpit/ui/request_view"],function(a,b,c){function n(a,b){a.cliView=this,this.cli=a,this.doc=document,this.win=f.getParentWindow(this.doc),this.env=b,this.element=this.doc.getElementById("cockpitInput");!this.element||(this.settings=b.settings,this.hintDirection=this.settings.getSetting("hintDirection"),this.outputDirection=this.settings.getSetting("outputDirection"),this.outputHeight=this.settings.getSetting("outputHeight"),this.isUpdating=!1,this.createElements(),this.update())}var d=a("text!cockpit/ui/cli_view.css"),e=a("pilot/event"),f=a("pilot/dom");f.importCssString(d);var e=a("pilot/event"),g=a("pilot/keys"),h=a("pilot/canon"),i=a("pilot/types").Status,j=a("cockpit/cli").CliRequisition,k=a("cockpit/cli").Hint,l=a("cockpit/ui/request_view").RequestView,m=new k(i.VALID,"",0,0);b.startup=function(a,b){var c=new j(a.env),d=new n(c,a.env);a.env.cli=c},n.prototype={createElements:function(){function d(){f.removeCssClass(this.output,"cptFocusPopup"),f.removeCssClass(this.hinter,"cptFocusPopup")}var a=this.element;this.element.spellcheck=!1,this.output=this.doc.getElementById("cockpitOutput"),this.popupOutput=this.output==null;if(!this.output){this.output=this.doc.createElement("div"),this.output.id="cockpitOutput",this.output.className="cptOutput",a.parentNode.insertBefore(this.output,a.nextSibling);var b=function(){this.output.style.maxHeight=this.outputHeight.get()+"px"}.bind(this);this.outputHeight.addEventListener("change",b),b()}this.completer=this.doc.createElement("div"),this.completer.className="cptCompletion VALID",this.completer.style.color=f.computedStyle(a,"color"),this.completer.style.fontSize=f.computedStyle(a,"fontSize"),this.completer.style.fontFamily=f.computedStyle(a,"fontFamily"),this.completer.style.fontWeight=f.computedStyle(a,"fontWeight"),this.completer.style.fontStyle=f.computedStyle(a,"fontStyle"),a.parentNode.insertBefore(this.completer,a.nextSibling),this.completer.style.backgroundColor=a.style.backgroundColor,a.style.backgroundColor="transparent",this.hinter=this.doc.createElement("div"),this.hinter.className="cptHints",a.parentNode.insertBefore(this.hinter,a.nextSibling);var c=this.resizer.bind(this);e.addListener(this.win,"resize",c),this.hintDirection.addEventListener("change",c),this.outputDirection.addEventListener("change",c),c(),h.addEventListener("output",function(a){new l(a.request,this)}.bind(this)),e.addCommandKeyListener(a,this.onCommandKey.bind(this)),e.addListener(a,"keyup",this.onKeyUp.bind(this)),e.addListener(a,"mouseup",function(a){this.isUpdating=!0,this.update(),this.isUpdating=!1}.bind(this)),this.cli.addEventListener("argumentChange",this.onArgChange.bind(this)),e.addListener(a,"focus",function(){f.addCssClass(this.output,"cptFocusPopup"),f.addCssClass(this.hinter,"cptFocusPopup")}.bind(this)),e.addListener(a,"blur",d.bind(this)),d.call(this)},scrollOutputToBottom:function(){var a=Math.max(this.output.scrollHeight,this.output.clientHeight);this.output.scrollTop=a-this.output.clientHeight},resizer:function(){var a=this.element.getClientRects()[0];this.completer.style.top=a.top+"px";var b=a.bottom-a.top;this.completer.style.height=b+"px",this.completer.style.lineHeight=b+"px",this.completer.style.left=a.left+"px";var c=a.right-a.left;this.completer.style.width=c+"px",this.hintDirection.get()==="below"?(this.hinter.style.top=a.bottom+"px",this.hinter.style.bottom="auto"):(this.hinter.style.top="auto",this.hinter.style.bottom=this.doc.documentElement.clientHeight-a.top+"px"),this.hinter.style.left=a.left+30+"px",this.hinter.style.maxWidth=c-110+"px",this.popupOutput&&(this.outputDirection.get()==="below"?(this.output.style.top=a.bottom+"px",this.output.style.bottom="auto"):(this.output.style.top="auto",this.output.style.bottom=this.doc.documentElement.clientHeight-a.top+"px"),this.output.style.left=a.left+"px",this.output.style.width=c-80+"px")},onCommandKey:function(a,b,c){var d;if(c===g.TAB||c===g.UP||c===g.DOWN)d=!0;else if(b!=0||c!=0)d=h.execKeyCommand(this.env,"cli",b,c);d&&e.stopEvent(a)},onKeyUp:function(a){var b;if(a.keyCode===g.RETURN){var c=this.cli.getWorstHint();c.status===i.VALID?(this.cli.exec(),this.element.value=""):(f.setSelectionStart(this.element,c.start),f.setSelectionEnd(this.element,c.end))}this.update();var d=this.cli.getAssignmentAt(f.getSelectionStart(this.element));d&&(a.keyCode===g.TAB&&(d.complete(),this.update()),a.keyCode===g.UP&&(d.increment(),this.update()),a.keyCode===g.DOWN&&(d.decrement(),this.update()));return b},update:function(){this.isUpdating=!0;var a={typed:this.element.value,cursor:{start:f.getSelectionStart(this.element),end:f.getSelectionEnd(this.element.selectionEnd)}};this.cli.update(a);var b=this.cli.getAssignmentAt(a.cursor.start).getHint();f.removeCssClass(this.completer,i.VALID.toString()),f.removeCssClass(this.completer,i.INCOMPLETE.toString()),f.removeCssClass(this.completer,i.INVALID.toString());var c='<span class="cptPrompt">&gt;</span> ';if(this.element.value.length>0){var d=this.cli.getInputStatusMarkup();c+=this.markupStatusScore(d)}if(this.element.value.length>0&&b.predictions&&b.predictions.length>0){var e=b.predictions[0];c+=" &nbsp;&#x21E5; "+(e.name?e.name:e)}this.completer.innerHTML=c,f.addCssClass(this.completer,this.cli.getWorstHint().status.toString());var g="";this.element.value.length!==0&&(g+=b.message,b.predictions&&b.predictions.length>0&&(g+=": [ ",b.predictions.forEach(function(a){g+=a.name?a.name:a,g+=" | "},this),g=g.replace(/\| $/,"]"))),this.hinter.innerHTML=g,g.length===0?f.addCssClass(this.hinter,"cptNoPopup"):f.removeCssClass(this.hinter,"cptNoPopup"),this.isUpdating=!1},markupStatusScore:function(a){var b="",c=0,d=-1;for(;;){d!==a[c]&&(b+="<span class="+a[c].toString()+">",d=a[c]),b+=this.element.value[c],c++;if(c===this.element.value.length){b+="</span>";break}d!==a[c]&&(b+="</span>")}return b},onArgChange:function(a){if(!this.isUpdating){var b=this.element.value.substring(0,a.argument.start),c=this.element.value.substring(a.argument.end),d=typeof a.text=="string"?a.text:a.text.name;this.element.value=b+d+c;var e=(b+d).length;this.element.selectionStart=e,this.element.selectionEnd=e}}},b.CliView=n}),define("cockpit/ui/request_view",["require","exports","module","pilot/dom","pilot/event","text!cockpit/ui/request_view.html","pilot/domtemplate","text!cockpit/ui/request_view.css"],function(a,b,c){function l(a,b){this.request=a,this.cliView=b,this.imageUrl=k,this.rowin=null,this.rowout=null,this.output=null,this.hide=null,this.show=null,this.duration=null,this.throb=null,(new g).processNode(j.cloneNode(!0),this),this.cliView.output.appendChild(this.rowin),this.cliView.output.appendChild(this.rowout),this.request.addEventListener("output",this.onRequestChange.bind(this))}function k(b){var d;try{d=a("text!cockpit/ui/"+b)}catch(e){}if(d)return d;var f=c.id.split("/").pop()+".js",g;if(c.uri.substr(-f.length)!==f){console.error("Can't work out path from module.uri/module.id");return b}if(c.uri){var h=c.uri.length-f.length-1;return c.uri.substr(0,h)+"/"+b}return f+b}var d=a("pilot/dom"),e=a("pilot/event"),f=a("text!cockpit/ui/request_view.html"),g=a("pilot/domtemplate").Templater,h=a("text!cockpit/ui/request_view.css");d.importCssString(h);var i=document.createElement("div");i.innerHTML=f;var j=i.querySelector(".cptRow");l.prototype={copyToInput:function(){this.cliView.element.value=this.request.typed},executeRequest:function(a){this.cliView.cli.update({typed:this.request.typed,cursor:{start:0,end:0}}),this.cliView.cli.exec()},hideOutput:function(a){this.output.style.display="none",d.addCssClass(this.hide,"cmd_hidden"),d.removeCssClass(this.show,"cmd_hidden"),e.stopPropagation(a)},showOutput:function(a){this.output.style.display="block",d.removeCssClass(this.hide,"cmd_hidden"),d.addCssClass(this.show,"cmd_hidden"),e.stopPropagation(a)},remove:function(a){this.cliView.output.removeChild(this.rowin),this.cliView.output.removeChild(this.rowout),e.stopPropagation(a)},onRequestChange:function(a){this.duration.innerHTML=this.request.duration?"completed in "+this.request.duration/1e3+" sec ":"",this.output.innerHTML="",this.request.outputs.forEach(function(a){var b;typeof a=="string"?(b=document.createElement("p"),b.innerHTML=a):b=a,this.output.appendChild(b)},this),this.cliView.scrollOutputToBottom(),d.setCssClass(this.output,"cmd_error",this.request.error),this.throb.style.display=this.request.completed?"none":"block"}},b.RequestView=l}),define("pilot/domtemplate",["require","exports","module"],function(require,exports,module){function Templater(){this.scope=[]}Templater.prototype.processNode=function(a,b){typeof a=="string"&&(a=document.getElementById(a));if(b===null||b===undefined)b={};this.scope.push(a.nodeName+(a.id?"#"+a.id:""));try{if(a.attributes&&a.attributes.length){if(a.hasAttribute("foreach")){this.processForEach(a,b);return}if(a.hasAttribute("if")&&!this.processIf(a,b))return;b.__element=a;var c=Array.prototype.slice.call(a.attributes);for(var d=0;d<c.length;d++){var e=c[d].value,f=c[d].name;this.scope.push(f);try{if(f==="save")e=this.stripBraces(e),this.property(e,b,a),a.removeAttribute("save");else if(f.substring(0,2)==="on"){e=this.stripBraces(e);var g=this.property(e,b);typeof g!="function"&&this.handleError("Expected "+e+" to resolve to a function, but got "+typeof g),a.removeAttribute(f);var h=a.hasAttribute("capture"+f.substring(2));a.addEventListener(f.substring(2),g,h),h&&a.removeAttribute("capture"+f.substring(2))}else{var i=this,j=e.replace(/\$\{[^}]*\}/g,function(a){return i.envEval(a.slice(2,-1),b,e)});f.charAt(0)==="_"?(a.removeAttribute(f),a.setAttribute(f.substring(1),j)):e!==j&&(c[d].value=j)}}finally{this.scope.pop()}}}var k=Array.prototype.slice.call(a.childNodes);for(var l=0;l<k.length;l++)this.processNode(k[l],b);a.nodeType===Node.TEXT_NODE&&this.processTextNode(a,b)}finally{this.scope.pop()}},Templater.prototype.processIf=function(a,b){this.scope.push("if");try{var c=a.getAttribute("if"),d=this.stripBraces(c),e=!0;try{var f=this.envEval(d,b,c);e=!!f}catch(g){this.handleError("Error with '"+d+"'",g),e=!1}e||a.parentNode.removeChild(a),a.removeAttribute("if");return e}finally{this.scope.pop()}},Templater.prototype.processForEach=function(a,b){this.scope.push("foreach");try{var c=a.getAttribute("foreach"),d=c,e="param";if(d.charAt(0)==="$")d=this.stripBraces(d);else{var f=d.split(" in ");e=f[0].trim(),d=this.stripBraces(f[1].trim())}a.removeAttribute("foreach");try{var g=this,h=function(a,c,d){d.parentNode.insertBefore(c,d),b[e]=a,g.processNode(c,b),delete b[e]},i=function(b,c){g.scope.push(b);try{if(a.nodeName==="LOOP")for(var d=0;d<a.childNodes.length;d++){var e=a.childNodes[d].cloneNode(!0);h(c,e,a)}else{var e=a.cloneNode(!0);e.removeAttribute("foreach"),h(c,e,a)}}finally{g.scope.pop()}},j=this.envEval(d,b,c);if(Array.isArray(j))j.forEach(function(a,b){i(""+b,a)},this);else for(var k in j)j.hasOwnProperty(k)&&i(k,k);a.parentNode.removeChild(a)}catch(l){this.handleError("Error with '"+d+"'",l)}}finally{this.scope.pop()}},Templater.prototype.processTextNode=function(a,b){var c=a.data;c=c.replace(/\$\{([^}]*)\}/g,"$$$1");var d=c.split(/\uF001|\uF002/);d.length>1&&(d.forEach(function(c){c!==null&&c!==undefined&&c!==""&&(c.charAt(0)==="$"&&(c=this.envEval(c.slice(1),b,a.data)),c===null&&(c="null"),c===undefined&&(c="undefined"),typeof c.cloneNode!="function"&&(c=a.ownerDocument.createTextNode(c.toString())),a.parentNode.insertBefore(c,a))},this),a.parentNode.removeChild(a))},Templater.prototype.stripBraces=function(a){if(!a.match(/\$\{.*\}/g)){this.handleError("Expected "+a+" to match ${...}");return a}return a.slice(2,-1)},Templater.prototype.property=function(a,b,c){this.scope.push(a);try{typeof a=="string"&&(a=a.split("."));var d=b[a[0]];if(a.length===1){c!==undefined&&(b[a[0]]=c);return typeof d=="function"?function(){return d.apply(b,arguments)}:d}if(!d){this.handleError("Can't find path="+a);return null}return this.property(a.slice(1),d,c)}finally{this.scope.pop()}},Templater.prototype.envEval=function(script,env,context){with(env)try{this.scope.push(context);return eval(script)}catch(ex){this.handleError("Template error evaluating '"+script+"'",ex);return script}finally{this.scope.pop()}},Templater.prototype.handleError=function(a,b){this.logError(a),this.logError("In: "+this.scope.join(" > ")),b&&this.logError(b)},Templater.prototype.logError=function(a){window.console&&window.console.log&&console.log(a)},exports.Templater=Templater}),define("cockpit/commands/basic",["require","exports","module","pilot/canon"],function(a,b,c){var d=a("pilot/canon"),e={name:"sh",description:"Execute a system command (requires server support)",params:[{name:"command",type:"text",description:"The string to send to the os shell."}],exec:function(a,b,c){var d=new XMLHttpRequest;d.open("GET","/exec?args="+b.command,!0),d.onreadystatechange=function(a){d.readyState==4&&d.status==200&&c.done("<pre>"+d.responseText+"</pre>")},d.send(null)}},d=a("pilot/canon");b.startup=function(a,b){d.addCommand(e)},b.shutdown=function(a,b){d.removeCommand(e)}}),define("text!cockpit/ui/cli_view.css",[],"#cockpitInput { padding-left: 16px; }.cptOutput { overflow: auto; position: absolute; z-index: 999; display: none; }.cptCompletion { padding: 0; position: absolute; z-index: -1000; }.cptCompletion.VALID { background: #FFF; }.cptCompletion.INCOMPLETE { background: #DDD; }.cptCompletion.INVALID { background: #DDD; }.cptCompletion span { color: #FFF; }.cptCompletion span.INCOMPLETE { color: #DDD; border-bottom: 2px dotted #F80; }.cptCompletion span.INVALID { color: #DDD; border-bottom: 2px dotted #F00; }span.cptPrompt { color: #66F; font-weight: bold; }.cptHints { color: #000; position: absolute; border: 1px solid rgba(230, 230, 230, 0.8); background: rgba(250, 250, 250, 0.8); -moz-border-radius-topleft: 10px; -moz-border-radius-topright: 10px; border-top-left-radius: 10px; border-top-right-radius: 10px; z-index: 1000; padding: 8px; display: none;}.cptFocusPopup { display: block; }.cptFocusPopup.cptNoPopup { display: none; }.cptHints ul { margin: 0; padding: 0 15px; }.cptGt { font-weight: bold; font-size: 120%; }"),define("text!cockpit/ui/request_view.css",[],".cptRowIn { display: box; display: -moz-box; display: -webkit-box; box-orient: horizontal; -moz-box-orient: horizontal; -webkit-box-orient: horizontal; box-align: center; -moz-box-align: center; -webkit-box-align: center; color: #333; background-color: #EEE; width: 100%; font-family: consolas, courier, monospace;}.cptRowIn > * { padding-left: 2px; padding-right: 2px; }.cptRowIn > img { cursor: pointer; }.cptHover { display: none; }.cptRowIn:hover > .cptHover { display: block; }.cptRowIn:hover > .cptHover.cptHidden { display: none; }.cptOutTyped { box-flex: 1; -moz-box-flex: 1; -webkit-box-flex: 1; font-weight: bold; color: #000; font-size: 120%;}.cptRowOutput { padding-left: 10px; line-height: 1.2em; }.cptRowOutput strong,.cptRowOutput b,.cptRowOutput th,.cptRowOutput h1,.cptRowOutput h2,.cptRowOutput h3 { color: #000; }.cptRowOutput a { font-weight: bold; color: #666; text-decoration: none; }.cptRowOutput a: hover { text-decoration: underline; cursor: pointer; }.cptRowOutput input[type=password],.cptRowOutput input[type=text],.cptRowOutput textarea { color: #000; font-size: 120%; background: transparent; padding: 3px; border-radius: 5px; -moz-border-radius: 5px; -webkit-border-radius: 5px;}.cptRowOutput table,.cptRowOutput td,.cptRowOutput th { border: 0; padding: 0 2px; }.cptRowOutput .right { text-align: right; }"),define("text!cockpit/ui/request_view.html",[],'<div class=cptRow> <!-- The div for the input (i.e. what was typed) --> <div class="cptRowIn" save="${rowin}" onclick="${copyToInput}" ondblclick="${executeRequest}"> <!-- What the user actually typed --> <div class="cptGt">&gt; </div> <div class="cptOutTyped">${request.typed}</div> <!-- The extra details that appear on hover --> <div class=cptHover save="${duration}"></div> <img class=cptHover onclick="${hideOutput}" save="${hide}" alt="Hide command output" _src="${imageUrl(\'images/minus.png\')}"/> <img class="cptHover cptHidden" onclick="${showOutput}" save="${show}" alt="Show command output" _src="${imageUrl(\'images/plus.png\')}"/> <img class=cptHover onclick="${remove}" alt="Remove this command from the history" _src="${imageUrl(\'images/closer.png\')}"/> </div> <!-- The div for the command output --> <div class="cptRowOut" save="${rowout}"> <div class="cptRowOutput" save="${output}"></div> <img _src="${imageUrl(\'images/throbber.gif\')}" save="${throb}"/> </div></div>'),define("text!cockpit/ui/images/closer.png",[],"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAj9JREFUeNp0ks+LUlEUx7/vV1o8Z8wUx3IEHcQmiBiQlomjRNCiZpEuEqF/oEUwq/6EhvoHggmRcJUQBM1CRJAW0aLIaGQimZJxJsWxyV/P9/R1zzWlFl04vPvOPZ9z7rnnK5imidmKRCIq+zxgdoPZ1T/ut8xeM3tcKpW6s1hhBkaj0Qj7bDebTX+324WmadxvsVigqipcLleN/d4rFoulORiLxTZY8ItOp8MBCpYkiYPj8Xjus9vtlORWoVB4KcTjcQc732dLpSRXvCZaAws6Q4WDdqsO52kNH+oCRFGEz+f7ydwBKRgMPmTXi49GI1x2D/DsznesB06ws2eDbI7w9HYN6bVjvGss4KAjwDAMq81mM2SW5Wa/3weBbz42UL9uYnVpiO2Nr9ANHSGXib2Wgm9tCYIggGKJEVkvlwgi5/FQRmTLxO6hgJVzI1x0T/fJrBtHJxPeL6tI/fsZLA6ot8lkQi8HRVbw94gkWYI5MaHrOjcCGSNRxZosy9y5cErDzn0Dqx7gcwO8WtBp4PndI35GMYqiUMUvBL5yOBz8yRfFNpbPmqgcCFh/IuHa1nR/YXGM8+oUpFhihEQiwcdRLpfVRqOBtWXWq34Gra6AXq8Hp2piZcmKT4cKnE4nwuHwdByVSmWQz+d32WCTlHG/qaHHREN9kgi0sYQfv0R4PB4EAgESQDKXy72fSy6VSnHJVatVf71eR7vd5n66mtfrRSgU4pLLZrOlf7RKK51Ok8g3/yPyR5lMZi7y3wIMAME4EigHWgKnAAAAAElFTkSuQmCC"),define("text!cockpit/ui/images/dot_clear.gif",[],"data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAEBMgA7"),define("text!cockpit/ui/images/minus.png",[],"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAAAXNSR0IArs4c6QAAAAZiS0dEANIA0gDS7KbF4AAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9kFGw4xMrIJw5EAAAHcSURBVCjPhZIxSxtxGMZ/976XhJA/RA5EAyJcFksnp64hjUPBoXRyCYLQTyD0UxScu0nFwalCQSgFCVk7dXAwUAiBDA2RO4W7yN1x9+9gcyhU+pteHt4H3pfncay1LOl0OgY4BN4Ar/7KP4BvwNFwOIyWu87S2O12O8DxfD73oygiSRIAarUaxhhWV1fHwMFgMBiWxl6v9y6Koi+3t7ckSUKtVkNVAcjzvNRWVlYwxry9vLz86uzs7HjAZDKZGGstjUaDfxHHMSLC5ubmHdB2VfVwNpuZ5clxHPMcRVFwc3PTXFtbO3RFZHexWJCmabnweAaoVqvlv4vFAhHZdVX1ZZqmOI5DURR8fz/lxbp9Yrz+7bD72SfPcwBU1XdF5N5aWy2KgqIoeBzPEnWVLMseYnAcRERdVR27rrsdxzGqyutP6898+GBsNBqo6i9XVS88z9sOggAR4X94noeqXoiIHPm+H9XrdYIgIAxDwjAkTVPCMESzBy3LMprNJr7v34nIkV5dXd2fn59fG2P2siwjSRIqlQrWWlSVJFcqlQqtVot2u40xZu/s7OxnWbl+v98BjkejkT+dTgmCoDxtY2ODra2tMXBweno6fNJVgP39fQN8eKbkH09OTsqS/wHFRdHPfTSfjwAAAABJRU5ErkJggg=="),define("text!cockpit/ui/images/pinaction.png",[],"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAC7mlDQ1BJQ0MgUHJvZmlsZQAAeAGFVM9rE0EU/jZuqdAiCFprDrJ4kCJJWatoRdQ2/RFiawzbH7ZFkGQzSdZuNuvuJrWliOTi0SreRe2hB/+AHnrwZC9KhVpFKN6rKGKhFy3xzW5MtqXqwM5+8943731vdt8ADXLSNPWABOQNx1KiEWlsfEJq/IgAjqIJQTQlVdvsTiQGQYNz+Xvn2HoPgVtWw3v7d7J3rZrStpoHhP1A4Eea2Sqw7xdxClkSAog836Epx3QI3+PY8uyPOU55eMG1Dys9xFkifEA1Lc5/TbhTzSXTQINIOJT1cVI+nNeLlNcdB2luZsbIEL1PkKa7zO6rYqGcTvYOkL2d9H5Os94+wiHCCxmtP0a4jZ71jNU/4mHhpObEhj0cGDX0+GAVtxqp+DXCFF8QTSeiVHHZLg3xmK79VvJKgnCQOMpkYYBzWkhP10xu+LqHBX0m1xOv4ndWUeF5jxNn3tTd70XaAq8wDh0MGgyaDUhQEEUEYZiwUECGPBoxNLJyPyOrBhuTezJ1JGq7dGJEsUF7Ntw9t1Gk3Tz+KCJxlEO1CJL8Qf4qr8lP5Xn5y1yw2Fb3lK2bmrry4DvF5Zm5Gh7X08jjc01efJXUdpNXR5aseXq8muwaP+xXlzHmgjWPxHOw+/EtX5XMlymMFMXjVfPqS4R1WjE3359sfzs94i7PLrXWc62JizdWm5dn/WpI++6qvJPmVflPXvXx/GfNxGPiKTEmdornIYmXxS7xkthLqwviYG3HCJ2VhinSbZH6JNVgYJq89S9dP1t4vUZ/DPVRlBnM0lSJ93/CKmQ0nbkOb/qP28f8F+T3iuefKAIvbODImbptU3HvEKFlpW5zrgIXv9F98LZua6N+OPwEWDyrFq1SNZ8gvAEcdod6HugpmNOWls05Uocsn5O66cpiUsxQ20NSUtcl12VLFrOZVWLpdtiZ0x1uHKE5QvfEp0plk/qv8RGw/bBS+fmsUtl+ThrWgZf6b8C8/UXAeIuJAAAACXBIWXMAAAsTAAALEwEAmpwYAAAClklEQVQ4EX1TXUhUQRQ+Z3Zmd+9uN1q2P3UpZaEwcikKekkqLKggKHJ96MHe9DmLkCDa9U198Id8kErICmIlRAN96UdE6QdBW/tBA5Uic7E0zN297L17p5mb1zYjD3eYc+d83zlnON8g5xzWNUSEdUBkHTJasRWySPP7fw3hfwkk2GoNsc0vOaJRHo1GV/GiMctkTIJRFlpZli8opK+htmf83gXeG63oteOtra0u25e7TYJIJELb26vYCACTgUe1lXV86BTn745l+MsyHqs53S/Aq4VEUa9Y6ko14eYY4u3AyM3HYwdKU35DZyblGR2+qq6W0X2Nnh07xynnVYpHORx/E1/GvvqaAZUayjMjdM2f/Lgr5E+fV93zR4u3zKCLughsZqKwAzAxaz6dPY6JgjLUF+eSP5OpjmAw2E8DvldHSvJMKPg08aRor1tc4BuALu6mOwGWdQC3mKIqRsC8mKd8wYfD78/earzSYzdMDW9QgKb0Is8CBY1mQXOiaXAHEpMDE5XTJqIq4EiyxUqKlpfkF0pyV1OTAoFAhmTmyCCoDsZNZvIkUjELQpipo0sQqYZAswZHwsEEE10M0pq2SSZY9HqNcDicJcNTpBvQJz40UbSOTh1B8bDpuY0w9Hb3kkn9lPAlBLfhfD39XTtX/blFJqiqrjbkTi63Hbofj2uL4GMsmzFgbDJ/vmMgv/lB4syJ0oXO7d3j++vio6GFsYmD6cHJreWc3/jRVVHhsOYvM8iZ36mtjPDBk/xDZE8CoHlbrlAssbTxDdDJvdb536L7I6S7Vy++6Gi4Xi9BsUthJRaLOYSPz4XALKI4j4iObd/e5UtDKUjZzYyYRyGAJv01Zj8kC5cbs5WY83hQnv0DzCXl+r8APElkq0RU6oMAAAAASUVORK5CYII="),define("text!cockpit/ui/images/pinin.png",[],"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAC7mlDQ1BJQ0MgUHJvZmlsZQAAeAGFVM9rE0EU/jZuqdAiCFprDrJ4kCJJWatoRdQ2/RFiawzbH7ZFkGQzSdZuNuvuJrWliOTi0SreRe2hB/+AHnrwZC9KhVpFKN6rKGKhFy3xzW5MtqXqwM5+8943731vdt8ADXLSNPWABOQNx1KiEWlsfEJq/IgAjqIJQTQlVdvsTiQGQYNz+Xvn2HoPgVtWw3v7d7J3rZrStpoHhP1A4Eea2Sqw7xdxClkSAog836Epx3QI3+PY8uyPOU55eMG1Dys9xFkifEA1Lc5/TbhTzSXTQINIOJT1cVI+nNeLlNcdB2luZsbIEL1PkKa7zO6rYqGcTvYOkL2d9H5Os94+wiHCCxmtP0a4jZ71jNU/4mHhpObEhj0cGDX0+GAVtxqp+DXCFF8QTSeiVHHZLg3xmK79VvJKgnCQOMpkYYBzWkhP10xu+LqHBX0m1xOv4ndWUeF5jxNn3tTd70XaAq8wDh0MGgyaDUhQEEUEYZiwUECGPBoxNLJyPyOrBhuTezJ1JGq7dGJEsUF7Ntw9t1Gk3Tz+KCJxlEO1CJL8Qf4qr8lP5Xn5y1yw2Fb3lK2bmrry4DvF5Zm5Gh7X08jjc01efJXUdpNXR5aseXq8muwaP+xXlzHmgjWPxHOw+/EtX5XMlymMFMXjVfPqS4R1WjE3359sfzs94i7PLrXWc62JizdWm5dn/WpI++6qvJPmVflPXvXx/GfNxGPiKTEmdornIYmXxS7xkthLqwviYG3HCJ2VhinSbZH6JNVgYJq89S9dP1t4vUZ/DPVRlBnM0lSJ93/CKmQ0nbkOb/qP28f8F+T3iuefKAIvbODImbptU3HvEKFlpW5zrgIXv9F98LZua6N+OPwEWDyrFq1SNZ8gvAEcdod6HugpmNOWls05Uocsn5O66cpiUsxQ20NSUtcl12VLFrOZVWLpdtiZ0x1uHKE5QvfEp0plk/qv8RGw/bBS+fmsUtl+ThrWgZf6b8C8/UXAeIuJAAAACXBIWXMAAAsTAAALEwEAmpwYAAABZ0lEQVQ4Ea2TPUsDQRCGZ89Eo4FACkULEQs1CH4Uamfjn7GxEYJFIFXgChFsbPwzNnZioREkaiHBQtEiEEiMRm/dZ8OEGAxR4sBxx877Pju7M2estTJIxLrNuVwuMxQEx0ZkzcFHyRtjXt02559RtB2GYanTYzoryOfz+6l4Nbszf2niwffKmpGRo9sVW22mDgqFwp5C2gDMm+P32a3JB1N+n5JifUGeP9JeNxGryPLYjcwMP8rJ07Q9fZltQzyAstOJ2vVu5sKc1ZZkRBrOcKeb+HexPidvkpCN5JUcllZtpZFc5DgBWc5M2eysZuMuofMBSA4NWjx4PUCsXefMlI0QY3ewRg4NWi4ZTQsgrjYXema+e4VqtEMK6KXvu+4B9Bklt90vVKMeD2BI6DOt4rZ/Gk7WyKFBi4fNPIAJY0joM61SCCZ9tI1o0OIB8D+DBIkYaJRbCBH9mZgNt+bb++ufSSF/eX8BYcDeAzuQJVUAAAAASUVORK5CYII="),define("text!cockpit/ui/images/pinout.png",[],"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAC7mlDQ1BJQ0MgUHJvZmlsZQAAeAGFVM9rE0EU/jZuqdAiCFprDrJ4kCJJWatoRdQ2/RFiawzbH7ZFkGQzSdZuNuvuJrWliOTi0SreRe2hB/+AHnrwZC9KhVpFKN6rKGKhFy3xzW5MtqXqwM5+8943731vdt8ADXLSNPWABOQNx1KiEWlsfEJq/IgAjqIJQTQlVdvsTiQGQYNz+Xvn2HoPgVtWw3v7d7J3rZrStpoHhP1A4Eea2Sqw7xdxClkSAog836Epx3QI3+PY8uyPOU55eMG1Dys9xFkifEA1Lc5/TbhTzSXTQINIOJT1cVI+nNeLlNcdB2luZsbIEL1PkKa7zO6rYqGcTvYOkL2d9H5Os94+wiHCCxmtP0a4jZ71jNU/4mHhpObEhj0cGDX0+GAVtxqp+DXCFF8QTSeiVHHZLg3xmK79VvJKgnCQOMpkYYBzWkhP10xu+LqHBX0m1xOv4ndWUeF5jxNn3tTd70XaAq8wDh0MGgyaDUhQEEUEYZiwUECGPBoxNLJyPyOrBhuTezJ1JGq7dGJEsUF7Ntw9t1Gk3Tz+KCJxlEO1CJL8Qf4qr8lP5Xn5y1yw2Fb3lK2bmrry4DvF5Zm5Gh7X08jjc01efJXUdpNXR5aseXq8muwaP+xXlzHmgjWPxHOw+/EtX5XMlymMFMXjVfPqS4R1WjE3359sfzs94i7PLrXWc62JizdWm5dn/WpI++6qvJPmVflPXvXx/GfNxGPiKTEmdornIYmXxS7xkthLqwviYG3HCJ2VhinSbZH6JNVgYJq89S9dP1t4vUZ/DPVRlBnM0lSJ93/CKmQ0nbkOb/qP28f8F+T3iuefKAIvbODImbptU3HvEKFlpW5zrgIXv9F98LZua6N+OPwEWDyrFq1SNZ8gvAEcdod6HugpmNOWls05Uocsn5O66cpiUsxQ20NSUtcl12VLFrOZVWLpdtiZ0x1uHKE5QvfEp0plk/qv8RGw/bBS+fmsUtl+ThrWgZf6b8C8/UXAeIuJAAAACXBIWXMAAAsTAAALEwEAmpwYAAACyUlEQVQ4EW1TXUgUURQ+Z3ZmnVV3QV2xJbVSEIowQbAfLQx8McLoYX2qjB58MRSkP3vZppceYhGxgrZaIughlYpE7CHFWiiKyj9II0qxWmwlNh1Xtp2f27mz7GDlZX7uuXO+73zfuXeQMQYIgAyALppgyBtse32stsw86txkHhATn+FbfPfzxnPB+vR3RMJYuTwW6bbB4a6WS5O3Yu2VlXIesDiAamiQNKVlVXfx5I0GJ7DY7p0/+erU4dgeMJIA31WNxZmAgibOreXDqF55sY4SFUURqbi+nkjgwTyAbHhLX8yOLsSM2QRA3JRAAgd4RGPbVhkKEp8qeJ7PFyW3fw++YHtC7CkaD0amqyqihSwlMQQ0wa07IjPVI/vbexreIUrVaQV2D4RMQ/o7m12Mdfx4H3PfB9FNzTR1U2cO0Bi45aV6xNvFBNaoIAfbSiwLlqi9/hR/R3Nrhua+Oqi9TEKiB02C7YXz+Pba4MTDrpbLiMAxNgmXb+HpwVkZdoIrkn9isW7nRw/TZYaagZArAWyhfqsSDL/c9aTx7JUjGZCtYExRqCzAwGblwr6aFQ84nTo6qZ7XCeCVQNckE/KSWolvoQnxeoFFgIh8G/nA+kBAxxuQO5m9eFrwLIGJHgcyM63VFMhRSgNVyJr7og8y1vbTQpH8DIEVgxuYuexw0QECIalq5FYgEmpkgoFYltU/lnrqDz5osirSFpF7lrHAFKSWHYfEs+mY/82UnAStyMlW8sUPsVIciTZgz3jV1ebg0CEOpgPF22s1z1YQYKSXPJ1hbAhR8T26WdLhkuVfAzPR+YO1Ox5n58SmCcF6e3uzAoHA77RkevJdWH/3+f2O9TGf3w3fWQ2Hw5F/13mcsWAT+vv6DK4kFApJ/d3d1k+kJtbCrmxXHS3n8ER6b3CQbAqaEHVra6sGxcXW4SovLx+empxapS//FfwD9kpMJjMMBBAAAAAASUVORK5CYII="),define("text!cockpit/ui/images/pins.png",[],"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAQCAYAAABQrvyxAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGYklEQVRIDbVWe0yURxCf/R735o6DO0FBe0RFsaL4iLXGIKa2SY3P6JGa2GpjlJjUV9NosbU++tYUbEnaQIrVaKJBG7WiNFQFUWO1UUEsVg2CAgoeHHLewcH32O58cBdQsX9Y5+7LfrszOzO/2ZnZj1BKgTBiIwVGVvKd49OVVYunDlXn6wdBKh+ogXrv+DOz1melIb+3LM5fNv2XPYE5EHY+L3PJljN5zavHpJjsQNsA/JJEgyC2+WTjy3b0GfoJW8O4aoHtDwiHQrj5lw1LLyyb1bp5zAjJTus9klrVpdD6TqH2ngVO+0dsRJnp06cLIYU4fx7NnRI3bu7UIYOeJ/McnuY88q3k62gc0S4Dgf5qhICQtIXS2lqD7BhSduPk3YfyzXaANhBBJDxYdUqCywB2qS4RdyUuSkTF/VJxcbH5j8N7/75RuFrN3Zh8OS8zqf5m4UpPeenOyP42dbtBeuvVnCdkK1e4PfPouX03mo9se+c33M8wqDk5Ofqed8REUTicQhbySUxp9u3KlMSHTtrFU6Kyn03lz15PPpW25vsZeYSIKyiVURcqeZJOH9lTNZLfnxRjU/uwrjbEUBWsapcSO2Hq4k0VfZg9EzxdDNCEjDxgNqRDme9umz/btwlsHRIEePHgAf73RdnHZ6LTuIUBN7OBQ+c1Fdnp6cZ1BQUdeRuWZi97o3ktDQQkVeFFzqJARd1A5a0Vr7ta6Kp6TZjtZ+NTIOoKF6qDrL7e0QQIUCiqMMKk8Z1Q/SCSKvzocf2B6NEN0SQn/kTO6fKJ0zqjZUlQBSpJ0GjR77w0aoc1Pr6S5/kVJrNpakV5hR+LWKN4t7sLX+p0rx2vqSta64olIulUKUgCSXLWE1R4KPPSj+5vhm2hdDOG+CkQBmhhyyKq6SaFYWTn5bB3QJRNz54AuXKn8TJjhu0Wbv+wNEKQjVhnmKopjo4FxXmetCRnC4F7BhCiCUepqAepRh0TM/gjjzOOSK2NgWZPc05qampRWJHb7dbOffep2ednzLzgczlbrQA6gHYF9BYDh9GY+FjddMweHMscmMuep07gXlMQoqw9ALoYu5MJsak9QmJA2IvAgVmoCRciooyPujJtNCv1uHt3TmK9gegFKrG9kh6oXwZiIEAtBIjORGKNTWR/WeW8XVkbjuJepLAyloM8LmTN//njKZPbraATZaLjCHEww9Ei4FFiPg6Ja5gT6gxYgLgnRDHRQwJXbz2GOw0d4A3K4GXlUtMahJjYVxiYbrwOmxIS10bFnIBOSi6Tl9Jgs0zbOEX18wyEwgLPMrxD1Y4aCK8kmTpgYcpAF27Mzs42Hjx4kA8BICUlJfKArR7LcEvTB1xEC9AoEw9OPagWkVU/D1oesmK6U911zEczMVe01oZjiMggg6ux2Qk379qh4rYKet4GjrhhwEteBgBrH8BssoXEtbHzPpSBRRSpqlNpgAiUoxzHKxLRszoVuggIisxaDQWZqkQvQjAoax3NbDbLLGuUEABNGedXqSyLRupXgDT5JfAGZNLio9B0X8Uiwk4w77MDc1D4yejjWtykPS3DX01UDCY/GPQcVDe0QYT0CIxGFvUorfvBxZsRfVrUuWruMBAb/lXCUofoFNZfzGJtowXOX0vwUSFK4BgyMKm6P6s9wQUZld+jrYyMDC0iIQDaJdG4IyZQfL3RfbFcCBIlRgc+u3CjaTApuZ9KsANgG8PNzHlWWD3tCxd6kafNNiFp5HAalAkkJ0SCV2H3CgOD9Nc/FqrXuyb0Eocvfhq171p5eyuJ1omKJEP5rQGe/FOOnXtq335z8YmvYo9cHb2t8spIb3lVSseZW46FlGY/Sk9P50P2w20UlWJUkUHIushfc5PXGAzCo0PlD2pnpCYfCXga3lu+fPlevEhWrVrFyrN/Orfv87FOW9tlqb2Kc9pV8DzioMk3UNUbXM+8B/ATBr8C8CKdvGXWGD/9sqm3dkxtzA4McMjHMB8D2ftheYXo+qzt3pXvz8/PP/vk+v8537V+yYW87Zu+RZ1ZbrexoKAA/SBpaWn4+aL5w5zGk+/jW59JiMkESW5urpiVlWXENRb1H/Yf2I9txIxz5IdkX3TsraukpsbQjz6090yb4XsAvQoRE0YvJdamtIIbOnRoUVlZ2ftsLVQzIdEXHntsaZdimssVfCpFui109+BnWPsXaWLI/zactygAAAAASUVORK5CYII="),define("text!cockpit/ui/images/plus.png",[],"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAAAXNSR0IArs4c6QAAAAZiS0dEANIA0gDS7KbF4AAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9kFGw4yFTwuJTkAAAH7SURBVCjPdZKxa1NRFMZ/956XZMgFyyMlCZRA4hBx6lBcQ00GoYi4tEstFPwLAs7iLDi7FWuHThaUggihBDI5OWRoQAmBQFISQgvvpbwX3rsOaR4K+o2H8zvfOZxPWWtZqVarGaAJPAEe3ZW/A1+Bd+1221v1qhW4vb1dA44mk0nZ8zyCIAAgk8lgjGF9fb0PHF5cXLQTsF6vP/c879P19TVBEJDJZBARAKIoSmpra2sYY561Wq3PqtFouMBgMBgYay3ZbJZ/yfd9tNaUSqUboOKISPPq6sqsVvZ9H4AvL34B8PTj/QSO45jpdHovn883Ha31znw+JwzDpCEMQx4UloM8zyOdTif3zudztNY7jog8DMMQpRRxHPPt5TCBAEZvxlyOFTsfykRRBICIlB2t9a21Nh3HMXEc8+d7VhJHWCwWyzcohdZaHBHpO46z6fs+IsLj94XECaD4unCHL8FsNouI/HRE5Nx13c3ZbIbWOnG5HKtl+53TSq7rIiLnand31wUGnU7HjEYjlFLJZN/3yRnL1FMYY8jlcmxtbd0AFel2u7dnZ2eXxpi9xWJBEASkUimstYgIQSSkUimKxSKVSgVjzN7p6emPJHL7+/s14KjX65WHwyGz2SxZbWNjg2q12gcOT05O2n9lFeDg4MAAr/4T8rfHx8dJyH8DvvbYGzKvWukAAAAASUVORK5CYII="),define("text!cockpit/ui/images/throbber.gif",[],"data:image/gif;base64,R0lGODlh3AATAPQAAP///wAAAL6+vqamppycnLi4uLKyssjIyNjY2MTExNTU1Nzc3ODg4OTk5LCwsLy8vOjo6Ozs7MrKyvLy8vT09M7Ozvb29sbGxtDQ0O7u7tbW1sLCwqqqqvj4+KCgoJaWliH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAA3AATAAAF/yAgjmRpnmiqrmzrvnAsz3Rt33iu73zv/8CgcEgECAaEpHLJbDqf0Kh0Sq1ar9isdjoQtAQFg8PwKIMHnLF63N2438f0mv1I2O8buXjvaOPtaHx7fn96goR4hmuId4qDdX95c4+RG4GCBoyAjpmQhZN0YGYFXitdZBIVGAoKoq4CG6Qaswi1CBtkcG6ytrYJubq8vbfAcMK9v7q7D8O1ycrHvsW6zcTKsczNz8HZw9vG3cjTsMIYqQgDLAQGCQoLDA0QCwUHqfYSFw/xEPz88/X38Onr14+Bp4ADCco7eC8hQYMAEe57yNCew4IVBU7EGNDiRn8Z831cGLHhSIgdE/9chIeBgDoB7gjaWUWTlYAFE3LqzDCTlc9WOHfm7PkTqNCh54rePDqB6M+lR536hCpUqs2gVZM+xbrTqtGoWqdy1emValeXKwgcWABB5y1acFNZmEvXwoJ2cGfJrTv3bl69Ffj2xZt3L1+/fw3XRVw4sGDGcR0fJhxZsF3KtBTThZxZ8mLMgC3fRatCLYMIFCzwLEprg84OsDus/tvqdezZf13Hvr2B9Szdu2X3pg18N+68xXn7rh1c+PLksI/Dhe6cuO3ow3NfV92bdArTqC2Ebc3A8vjf5QWf15Bg7Nz17c2fj69+fnq+8N2Lty+fuP78/eV2X13neIcCeBRwxorbZrAxAJoCDHbgoG8RTshahQ9iSKEEzUmYIYfNWViUhheCGJyIP5E4oom7WWjgCeBBAJNv1DVV01MZdJhhjdkplWNzO/5oXI846njjVEIqR2OS2B1pE5PVscajkxhMycqLJgxQCwT40PjfAV4GqNSXYdZXJn5gSkmmmmJu1aZYb14V51do+pTOCmA00AqVB4hG5IJ9PvYnhIFOxmdqhpaI6GeHCtpooisuutmg+Eg62KOMKuqoTaXgicQWoIYq6qiklmoqFV0UoeqqrLbq6quwxirrrLTWauutJ4QAACH5BAkKAAAALAAAAADcABMAAAX/ICCOZGmeaKqubOu+cCzPdG3feK7vfO//wKBwSAQIBoSkcslsOp/QqHRKrVqv2Kx2OhC0BAXHx/EoCzboAcdhcLDdgwJ6nua03YZ8PMFPoBMca215eg98G36IgYNvDgOGh4lqjHd7fXOTjYV9nItvhJaIfYF4jXuIf4CCbHmOBZySdoOtj5eja59wBmYFXitdHhwSFRgKxhobBgUPAmdoyxoI0tPJaM5+u9PaCQZzZ9gP2tPcdM7L4tLVznPn6OQb18nh6NV0fu3i5OvP8/nd1qjwaasHcIPAcf/gBSyAAMMwBANYEAhWYQGDBhAyLihwYJiEjx8fYMxIcsGDAxVA/yYIOZIkBAaGPIK8INJlRpgrPeasaRPmx5QgJfB0abLjz50tSeIM+pFmUo0nQQIV+vRlTJUSnNq0KlXCSq09ozIFexEBAYkeNiwgOaEtn2LFpGEQsKCtXbcSjOmVlqDuhAx3+eg1Jo3u37sZBA9GoMAw4MB5FyMwfLht4sh7G/utPGHlYAV8Nz9OnOBz4c2VFWem/Pivar0aKCP2LFn2XwhnVxBwsPbuBAQbEGiIFg1BggoWkidva5z4cL7IlStfkED48OIYoiufYIH68+cKPkqfnsB58ePjmZd3Dj199/XE20tv6/27XO3S6z9nPCz9BP3FISDefL/Bt192/uWmAv8BFzAQAQUWWFaaBgqA11hbHWTIXWIVXifNhRlq6FqF1sm1QQYhdiAhbNEYc2KKK1pXnAIvhrjhBh0KxxiINlqQAY4UXjdcjSJyeAx2G2BYJJD7NZQkjCPKuCORKnbAIXsuKhlhBxEomAIBBzgIYXIfHfmhAAyMR2ZkHk62gJoWlNlhi33ZJZ2cQiKTJoG05Wjcm3xith9dcOK5X51tLRenoHTuud2iMnaolp3KGXrdBo7eKYF5p/mXgJcogClmcgzAR5gCKymXYqlCgmacdhp2UCqL96mq4nuDBTmgBasaCFp4sHaQHHUsGvNRiiGyep1exyIra2mS7dprrtA5++z/Z8ZKYGuGsy6GqgTIDvupRGE+6CO0x3xI5Y2mOTkBjD4ySeGU79o44mcaSEClhglgsKyJ9S5ZTGY0Bnzrj+3SiKK9Rh5zjAALCywZBk/ayCWO3hYM5Y8Dn6qxxRFsgAGoJwwgDQRtYXAAragyQOmaLKNZKGaEuUlpyiub+ad/KtPqpntypvvnzR30DBtjMhNodK6Eqrl0zU0/GjTUgG43wdN6Ra2pAhGtAAZGE5Ta8TH6wknd2IytNKaiZ+Or79oR/tcvthIcAPe7DGAs9Edwk6r3qWoTaNzY2fb9HuHh2S343Hs1VIHhYtOt+Hh551rh24vP5YvXSGzh+eeghy76GuikU9FFEainrvrqrLfu+uuwxy777LTXfkIIACH5BAkKAAAALAAAAADcABMAAAX/ICCOZGmeaKqubOu+cCzPdG3feK7vfO//wKBwSAQIBoSkcslsOp/QqHRKrVqv2Kx2OhC0BAWHB2l4CDZo9IDjcBja7UEhTV+3DXi3PJFA8xMcbHiDBgMPG31pgHBvg4Z9iYiBjYx7kWocb26OD398mI2EhoiegJlud4UFiZ5sm6Kdn2mBr5t7pJ9rlG0cHg5gXitdaxwFGArIGgoaGwYCZ3QFDwjU1AoIzdCQzdPV1c0bZ9vS3tUJBmjQaGXl1OB0feze1+faiBvk8wjnimn55e/o4OtWjp+4NPIKogsXjaA3g/fiGZBQAcEAFgQGOChgYEEDCCBBLihwQILJkxIe/3wMKfJBSQkJYJpUyRIkgwcVUJq8QLPmTYoyY6ZcyfJmTp08iYZc8MBkhZgxk9aEcPOlzp5FmwI9KdWn1qASurJkClRoWKwhq6IUqpJBAwQEMBYroAHkhLt3+RyzhgCDgAV48Wbgg+waAnoLMgTOm6DwQ8CLBzdGdvjw38V5JTg2lzhyTMeUEwBWHPgzZc4TSOM1bZia6LuqJxCmnOxv7NSsl1mGHHiw5tOuIWeAEHcFATwJME/ApgFBc3MVLEgPvE+Ddb4JokufPmFBAuvPXWu3MIF89wTOmxvOvp179evQtwf2nr6aApPyzVd3jn089e/8xdfeXe/xdZ9/d1ngHf98lbHH3V0LMrgPgsWpcFwBEFBgHmyNXWeYAgLc1UF5sG2wTHjIhNjBiIKZCN81GGyQwYq9uajeMiBOQGOLJ1KjTI40kmfBYNfc2NcGIpI4pI0vyrhjiT1WFqOOLEIZnjVOVpmajYfBiCSNLGbA5YdOkjdihSkQwIEEEWg4nQUmvYhYe+bFKaFodN5lp3rKvJYfnBKAJ+gGDMi3mmbwWYfng7IheuWihu5p32XcSWdSj+stkF95dp64jJ+RBipocHkCCp6PCiRQ6INookCAAwy0yd2CtNET3Yo7RvihBjFZAOaKDHT43DL4BQnsZMo8xx6uI1oQrHXXhHZrB28G62n/YSYxi+uzP2IrgbbHbiaer7hCiOxDFWhrbmGnLVuus5NFexhFuHLX6gkEECorlLpZo0CWJG4pLjIACykmBsp0eSSVeC15TDJeUhlkowlL+SWLNJpW2WEF87urXzNWSZ6JOEb7b8g1brZMjCg3ezBtWKKc4MvyEtwybPeaMAA1ECRoAQYHYLpbeYYCLfQ+mtL5c9CnfQpYpUtHOSejEgT9ogZ/GSqd0f2m+LR5WzOtHqlQX1pYwpC+WbXKqSYtpJ5Mt4a01lGzS3akF60AxkcTaLgAyRBPWCoDgHfJqwRuBuzdw/1ml3iCwTIeLUWJN0v4McMe7uasCTxseNWPSxc5RbvIgD7geZLbGrqCG3jepUmbbze63Y6fvjiOylbwOITPfIHEFsAHL/zwxBdvPBVdFKH88sw37/zz0Ecv/fTUV2/99SeEAAAh+QQJCgAAACwAAAAA3AATAAAF/yAgjmRpnmiqrmzrvnAsz3Rt33iu73zv/8CgcEgECAaEpHLJbDqf0Kh0Sq1ar9isdjoQtAQFh2cw8BQEm3T6yHEYHHD4oKCuD9qGvNsxT6QTgAkcHHmFeX11fm17hXwPG35qgnhxbwMPkXaLhgZ9gWp3bpyegX4DcG+inY+Qn6eclpiZkHh6epetgLSUcBxlD2csXXdvBQrHGgoaGhsGaIkFDwjTCArTzX+QadHU3c1ofpHc3dcGG89/4+TYktvS1NYI7OHu3fEJ5tpqBu/k+HX7+nXDB06SuoHm0KXhR65cQT8P3FRAMIAFgVMPwDCAwLHjggIHJIgceeFBg44eC/+ITCCBZYKSJ1FCWPBgpE2YMmc+qNCypwScMmnaXAkUJYOaFVyKLOqx5tCXJnMelcBzJNSYKIX2ZPkzqsyjPLku9Zr1QciVErYxaICAgEUOBRJIgzChbt0MLOPFwyBggV27eCUcmxZvg9+/dfPGo5bg8N/Ag61ZM4w4seDF1fpWhizZmoa+GSortgcaMWd/fkP/HY0MgWbTipVV++wY8GhvqSG4XUEgoYTKE+Qh0OCvggULiBckWEZ4Ggbjx5HXVc58IPQJ0idQJ66XanTpFraTe348+XLizRNcz658eHMN3rNPT+C+G/nodqk3t6a+fN3j+u0Xn3nVTQPfdRPspkL/b+dEIN8EeMm2GAYbTNABdrbJ1hyFFv5lQYTodSZABhc+loCEyhxTYYkZopdMMiNeiBxyIFajV4wYHpfBBspUl8yKHu6ooV5APsZjQxyyeNeJ3N1IYod38cgdPBUid6GCKfRWgAYU4IccSyHew8B3doGJHmMLkGkZcynKk2Z50Ym0zJzLbDCmfBbI6eIyCdyJmJmoqZmnBAXy9+Z/yOlZDZpwYihnj7IZpuYEevrYJ5mJEuqiof4l+NYDEXQpXQcMnNjZNDx1oGqJ4S2nF3EsqWrhqqVWl6JIslpAK5MaIqDeqjJq56qN1aTaQaPbHTPYr8Be6Gsyyh6Da7OkmmqP/7GyztdrNVQBm5+pgw3X7aoYKhfZosb6hyUKBHCgQKij1rghkOAJuZg1SeYIIY+nIpDvf/sqm4yNG5CY64f87qdAwSXKGqFkhPH1ZHb2EgYtw3bpKGVkPz5pJAav+gukjB1UHE/HLNJobWcSX8jiuicMMBFd2OmKwQFs2tjXpDfnPE1j30V3c7iRHlrzBD2HONzODyZtsQJMI4r0AUNaE3XNHQw95c9GC001MpIxDacFQ+ulTNTZlU3O1eWVHa6vb/pnQUUrgHHSBKIuwG+bCPyEqbAg25gMVV1iOB/IGh5YOKLKIQ6xBAcUHmzjIcIqgajZ+Ro42DcvXl7j0U4WOUd+2IGu7DWjI1pt4DYq8BPm0entuGSQY/4tBi9Ss0HqfwngBQtHbCH88MQXb/zxyFfRRRHMN+/889BHL/301Fdv/fXYZ39CCAAh+QQJCgAAACwAAAAA3AATAAAF/yAgjmRpnmiqrmzrvnAsz3Rt33iu73zv/8CgcEgECAaEpHLJbDqf0Kh0Sq1ar9isdjoQtAQFh2fAKXsKm7R6Q+Y43vABep0mGwwOPH7w2CT+gHZ3d3lyagl+CQNvg4yGh36LcHoGfHR/ZYOElQ9/a4ocmoRygIiRk5p8pYmZjXePaYBujHoOqp5qZHBlHAUFXitddg8PBg8KGsgayxvGkAkFDwgICtPTzX2mftHW3QnOpojG3dbYkNjk1waxsdDS1N7ga9zw1t/aifTk35fu6Qj3numL14fOuHTNECHqU4DDgQEsCCwidiHBAwYQMmpcUOCAhI8gJVzUuLGThAQnP/9abEAyI4MCIVOKZNnyJUqUJxNcGNlywYOQgHZirGkSJ8gHNEky+AkS58qWEJYC/bMzacmbQHkqNdlUJ1KoSz2i9COhmQYCEXtVrCBgwYS3cCf8qTcNQ9u4cFFOq2bPLV65Cf7dxZthbjW+CgbjnWtNgWPFcAsHdoxgWWK/iyV045sAc2S96SDn1exYw17REwpLQEYt2eW/qtPZRQAB7QoC61RW+GsBwYZ/CXb/XRCYLsAKFizEtUAc+G7lcZsjroscOvTmsoUvx15PwccJ0N8yL17N9PG/E7jv9S4hOV7pdIPDdZ+ePDzv2qMXn2b5+wTbKuAWnF3oZbABZY0lVmD/ApQd9thybxno2GGuCVDggaUpoyBsB1bGGgIYbJCBcuFJiOAyGohIInQSmmdeiBnMF2GHfNUlIoc1rncjYRjW6NgGf3VQGILWwNjBfxEZcAFbC7gHXQcfUYOYdwzQNxo5yUhQZXhvRYlMeVSuSOJHKJa5AQMQThBlZWZ6Bp4Fa1qzTAJbijcBlJrtxeaZ4lnnpZwpukWieGQmYx5ATXIplwTL8DdNZ07CtWYybNIJF4Ap4NZHe0920AEDk035kafieQrqXofK5ympn5JHKYjPrfoWcR8WWQGp4Ul32KPVgXdnqxM6OKqspjIYrGPDrlrsZtRIcOuR86nHFwbPvmes/6PH4frrqbvySh+mKGhaAARPzjjdhCramdoGGOhp44i+zogBkSDuWC5KlE4r4pHJkarXrj++Raq5iLmWLlxHBteavjG+6amJrUkJJI4Ro5sBv9AaOK+jAau77sbH7nspCwNIYIACffL7J4JtWQnen421nNzMcB6AqpRa9klonmBSiR4GNi+cJZpvwgX0ejj71W9yR+eIgaVvQgf0l/A8nWjUFhwtZYWC4hVnkZ3p/PJqNQ5NnwUQrQCGBBBMQIGTtL7abK+5JjAv1fi9bS0GLlJHgdjEgYzzARTwC1fgEWdJuKKBZzj331Y23qB3i9v5aY/rSUC4w7PaLeWXmr9NszMFoN79eeiM232o33EJAIzaSGwh++y012777bhT0UURvPfu++/ABy/88MQXb/zxyCd/QggAIfkECQoAAAAsAAAAANwAEwAABf8gII5kaZ5oqq5s675wLM90bd94ru987//AoHBIBAgGhKRyyWw6n9CodEqtWq/YrHY6ELQEBY5nwCk7xIWNer0hO95wziC9Ttg5b4ND/+Y87IBqZAaEe29zGwmJigmDfHoGiImTjXiQhJEPdYyWhXwDmpuVmHwOoHZqjI6kZ3+MqhyemJKAdo6Ge3OKbEd4ZRwFBV4rc4MPrgYPChrMzAgbyZSJBcoI1tfQoYsJydfe2amT3d7W0OGp1OTl0YtqyQrq0Lt11PDk3KGoG+nxBpvTD9QhwCctm0BzbOyMIwdOUwEDEgawIOCB2oMLgB4wgMCx44IHBySIHClBY0ePfyT/JCB5weRJCAwejFw58kGDlzBTqqTZcuPLmCIBiWx58+VHmiRLFj0JVCVLl0xl7qSZwCbOo0lFWv0pdefQrVFDJtr5gMBEYBgxqBWwYILbtxPsqMPAFu7blfa81bUbN4HAvXAzyLWnoDBguHIRFF6m4LBbwQngMYPXuC3fldbyPrMcGLM3w5wRS1iWWUNlvnElKDZtz/EEwaqvYahQoexEfyILi4RrYYKFZwJ3810QWZ2ECrx9Ew+O3K6F5Yq9zXbb+y30a7olJJ+wnLC16W97Py+uwdtx1NcLWzs/3G9e07stVPc9kHJ0BcLtQp+c3ewKAgYkUAFpCaAmmHqKLSYA/18WHEiZPRhsQF1nlLFWmIR8ZbDBYs0YZuCGpGXWmG92aWiPMwhEOOEEHXRwIALlwXjhio+BeE15IzpnInaLbZBBhhti9x2GbnVQo2Y9ZuCfCgBeMCB+DJDIolt4iVhOaNSJdCOBUfIlkmkyMpPAAvKJ59aXzTQzJo0WoJnmQF36Jp6W1qC4gWW9GZladCiyJd+KnsHImgRRVjfnaDEKuiZvbcYWo5htzefbl5LFWNeSKQAo1QXasdhiiwwUl2B21H3aQaghXnPcp1NagCqYslXAqnV+zYWcpNwVp9l5eepJnHqL4SdBi56CGlmw2Zn6aaiZjZqfb8Y2m+Cz1O0n3f+tnvrGbF6kToApCgAWoNWPeh754JA0vmajiAr4iOuOW7abQXVGNriBWoRdOK8FxNqLwX3oluubhv8yluRbegqGb536ykesuoXhyJqPQJIGbLvQhkcwjKs1zBvBwSZIsbcsDCCBAAf4ya+UEhyQoIiEJtfoZ7oxUOafE2BwgMWMqUydfC1LVtiArk0QtGkWEopzlqM9aJrKHfw5c6wKjFkmXDrbhwFockodtMGFLWpXy9JdiXN1ZDNszV4WSLQCGBKoQYHUyonqrHa4ErewAgMmcAAF7f2baIoVzC2p3gUvJtLcvIWqloy6/R04mIpLwDhciI8qLOB5yud44pHPLbA83hFDWPjNbuk9KnySN57Av+TMBvgEAgzzNhJb5K777rz37vvvVHRRxPDEF2/88cgnr/zyzDfv/PPQnxACACH5BAkKAAAALAAAAADcABMAAAX/ICCOZGmeaKqubOu+cCzPdG3feK7vfO//wKBwSAQIBoSkcslsOp/QqHRKrVqv2Kx2OhC0BIUCwcMpO84OT2HDbm8GHLQjnn6wE3g83SA3DB55G3llfHxnfnZ4gglvew6Gf4ySgmYGlpCJknochWiId3kJcZZyDn93i6KPl4eniopwq6SIoZKxhpenbhtHZRxhXisDopwPgHkGDxrLGgjLG8mC0gkFDwjX2AgJ0bXJ2djbgNJsAtbfCNB2oOnn6MmKbeXt226K1fMGi6j359D69ua+QZskjd+3cOvY9XNgp4ABCQNYEDBl7EIeCQkeMIDAseOCBwckiBSZ4ILGjh4B/40kaXIjSggMHmBcifHky5gYE6zM2OAlzGM6Z5rs+fIjTZ0tfcYMSlLCUJ8fL47kCVXmTjwPiKJkUCDnyqc3CxzQmYeAxAEGLGJYiwCDgAUT4sqdgOebArdw507IUNfuW71xdZ7DC5iuhGsKErf9CxhPYgUaEhPWyzfBMgUIJDPW6zhb5M1y+R5GjFkBaLmCM0dOfHqvztXYJnMejaFCBQlmVxAYsEGkYnQV4lqYMNyCtnYSggNekAC58uJxmTufW5w55mwKkg+nLp105uTC53a/nhg88fMTmDfDVl65Xum/IZt/3/zaag3a5W63nll1dvfiWbaaZLmpQIABCVQA2f9lAhTG112PQWYadXE9+FtmEwKWwQYQJrZagxomsOCAGVImInsSbpCBhhwug6KKcXXQQYUcYuDMggrASFmNzjjzzIrh7cUhhhHqONeGpSEW2QYxHsmjhxpgUGAKB16g4IIbMNCkXMlhaJ8GWVJo2I3NyKclYF1GxgyYDEAnXHJrMpNAm/rFBSczPiYAlwXF8ZnmesvoOdyMbx7m4o0S5LWdn4bex2Z4xYmEzaEb5EUcnxbA+WWglqIn6aHPTInCgVbdlZyMqMrIQHMRSiaBBakS1903p04w434n0loBoQFOt1yu2YAnY68RXiNsqh2s2qqxuyKb7Imtmgcrqsp6h8D/fMSpapldx55nwayK/SfqCQd2hcFdAgDp5GMvqhvakF4mZuS710WGIYy30khekRkMu92GNu6bo7r/ttjqwLaua5+HOdrKq5Cl3dcwi+xKiLBwwwom4b0E6xvuYyqOa8IAEghwQAV45VvovpkxBl2mo0W7AKbCZXoAhgMmWnOkEqx2JX5nUufbgJHpXCfMOGu2QAd8eitpW1eaNrNeMGN27mNz0swziYnpSbXN19gYtstzfXrdYjNHtAIYGFVwwAEvR1dfxdjKxVzAP0twAAW/ir2w3nzTd3W4yQWO3t0DfleB4XYnEHCEhffdKgaA29p0eo4fHLng9qoG+OVyXz0gMeWGY7qq3xhiRIEAwayNxBawxy777LTXbjsVXRSh++689+7778AHL/zwxBdv/PEnhAAAIfkECQoAAAAsAAAAANwAEwAABf8gII5kaZ5oqq5s675wLM90bd94ru987//AoHBIBAgGhKRyyWw6n9CodEqtWq/YrHY6ELQEhYLD4BlwHGg0ubBpuzdm9Dk9eCTu+MTZkDb4PXYbeIIcHHxqf4F3gnqGY2kOdQmCjHCGfpCSjHhmh2N+knmEkJmKg3uHfgaaeY2qn6t2i4t7sKAPbwIJD2VhXisDCQZgDrKDBQ8aGgjKyhvDlJMJyAjV1gjCunkP1NfVwpRtk93e2ZVt5NfCk27jD97f0LPP7/Dr4pTp1veLgvrx7AL+Q/BM25uBegoYkDCABYFhEobhkUBRwoMGEDJqXPDgQMUEFC9c1LjxQUUJICX/iMRIEgIDkycrjmzJMSXFlDNJvkwJsmdOjQwKfDz5M+PLoSGLQqgZU6XSoB/voHxawGbFlS2XGktAwKEADB0xiEWAodqGBRPSqp1wx5qCamDRrp2Qoa3bagLkzrULF4GCvHPTglRAmKxZvWsHayBcliDitHUlvGWM97FgCdYWVw4c2e/kw4HZJlCwmDBhwHPrjraGYTHqtaoxVKggoesKAgd2SX5rbUMFCxOAC8cGDwHFwBYWJCgu4XfwtcqZV0grPHj0u2SnqwU+IXph3rK5b1fOu7Bx5+K7L6/2/Xhg8uyXnQ8dvfRiDe7TwyfNuzlybKYpgIFtKhAgwEKkKcOf/wChZbBBgMucRh1so5XH3wbI1WXafRJy9iCErmX4IWHNaIAhZ6uxBxeGHXQA24P3yYfBBhmgSBozESpwongWOBhggn/N1aKG8a1YY2oVAklgCgQUUwGJ8iXAgItrWUARbwpqIOWEal0ZoYJbzmWlZCWSlsAC6VkwZonNbMAAl5cpg+NiZwpnJ0Xylegmlc+tWY1mjnGnZnB4QukMA9UJRxGOf5r4ppqDjjmnfKilh2ejGiyJAgF1XNmYbC2GmhZ5AcJVgajcXecNqM9Rx8B6bingnlotviqdkB3YCg+rtOaapFsUhSrsq6axJ6sEwoZK7I/HWpCsr57FBxJ1w8LqV/81zbkoXK3LfVeNpic0KRQG4NHoIW/XEmZuaiN6tti62/moWbk18uhjqerWS6GFpe2YVotskVssWfBOAHACrZHoWcGQwQhlvmsdXBZ/F9YLMF2jzUuYBP4a7CLCnoEHrgkDSCDAARUILAGaVVqAwQHR8pZXomm9/ONhgjrbgc2lyYxmpIRK9uSNjrXs8gEbTrYyl2ryTJmsLCdKkWzFQl1lWlOXGmifal6p9VnbQfpyY2SZyXKVV7JmZkMrgIFSyrIeUJ2r7YKnXdivUg1kAgdQ8B7IzJjGsd9zKSdwyBL03WpwDGxwuOASEP5vriO2F3nLjQdIrpaRDxqcBdgIHGA74pKrZXiR2ZWuZt49m+o3pKMC3p4Av7SNxBa456777rz37jsVXRQh/PDEF2/88cgnr/zyzDfv/PMnhAAAIfkECQoAAAAsAAAAANwAEwAABf8gII5kaZ5oqq5s675wLM90bd94ru987//AoHBIBAgGhKRyyWw6n9CodEqtWq/YrHY6ELQEhYLDUPAMHGi0weEpbN7wI8cxTzsGj4R+n+DUxwaBeBt7hH1/gYIPhox+Y3Z3iwmGk36BkIN8egOIl3h8hBuOkAaZhQlna4BrpnyWa4mleZOFjrGKcXoFA2ReKwMJBgISDw6abwUPGggazc0bBqG0G8kI1tcIwZp51djW2nC03d7BjG8J49jl4cgP3t/RetLp1+vT6O7v5fKhAvnk0UKFogeP3zmCCIoZkDCABQFhChQYuKBHgkUJkxpA2MhxQYEDFhNcvPBAI8eNCx7/gMQYckPJkxsZPLhIM8FLmDJrYiRp8mTKkCwT8IQJwSPQkENhpgQpEunNkzlpWkwKdSbGihKocowqVSvKWQkIOBSgQOYFDBgQpI0oYMGEt3AzTLKm4BqGtnDjirxW95vbvG/nWlub8G9euRsiqqWLF/AEkRoiprX2wLDeDQgkW9PQGLDgyNc665WguK8C0XAnRY6oGPUEuRLsgk5g+a3cCxUqSBC7gsCBBXcVq6swwULx4hayvctGPK8FCwsSLE9A3Hje6NOrHzeOnW695sffRi/9HfDz7sIVSNB+XXrmugo0rHcM3X388o6jr44ceb51uNjF1xcC8zk3wXiS8aYC/wESaLABBs7ch0ECjr2WAGvLsLZBeHqVFl9kGxooV0T81TVhBo6NiOEyJ4p4IYnNRBQiYCN6x4wCG3ZAY2If8jXjYRcyk2FmG/5nXAY8wqhWAii+1YGOSGLoY4VRfqiAgikwmIeS1gjAgHkWYLQZf9m49V9gDWYWY5nmTYCRM2TS5pxxb8IZGV5nhplmhJyZadxzbrpnZ2d/6rnZgHIid5xIMDaDgJfbLdrgMkKW+Rygz1kEZz1mehabkBpgiQIByVikwGTqVfDkk2/Vxxqiqur4X3fksHccre8xlxerDLiHjQIVUAgXr77yFeyuOvYqXGbMrbrqBMqaFpFFzhL7qv9i1FX7ZLR0LUNdcc4e6Cus263KbV+inkAAHhJg0BeITR6WmHcaxhvXg/AJiKO9R77ILF1FwmVdAu6WBu+ZFua72mkZWMfqBElKu0G8rFZ5n4ATp5jkmvsOq+Nj7u63ZMMPv4bveyYy6fDH+C6brgnACHBABQUrkGirz2FwAHnM4Mmhzq9yijOrOi/MKabH6VwBiYwZdukEQAvILKTWXVq0ZvH5/CfUM7M29Zetthp1eht0eqkFYw8IKXKA6mzXfTeH7fZg9zW0AhgY0TwthUa6Ch9dBeIsbsFrYkRBfgTfiG0FhwMWnbsoq3cABUYOnu/ejU/A6uNeT8u4wMb1WnBCyJJTLjjnr8o3OeJrUcpc5oCiPqAEkz8tXuLkPeDL3Uhs4fvvwAcv/PDEU9FFEcgnr/zyzDfv/PPQRy/99NRXf0IIACH5BAkKAAAALAAAAADcABMAAAX/ICCOZGmeaKqubOu+cCzPdG3feK7vfO//wKBwSAQIBoSkcslsOp/QqHRKrVqv2Kx2OhC0BIWCw/AoDziOtCHt8BQ28PjmzK57Hom8fo42+P8DeAkbeYQcfX9+gYOFg4d1bIGEjQmPbICClI9/YwaLjHAJdJeKmZOViGtpn3qOqZineoeJgG8CeWUbBV4rAwkGAhIVGL97hGACGsrKCAgbBoTRhLvN1c3PepnU1s2/oZO6AtzdBoPf4eMI3tIJyOnF0YwFD+nY8e3z7+Xfefnj9uz8cVsXCh89axgk7BrAggAwBQsYIChwQILFixIeNIDAseOCBwcSXMy2sSPHjxJE/6a0eEGjSY4MQGK86PIlypUJEmYsaTKmyJ8JW/Ls6HMkzaEn8YwMWtPkx4pGd76E4DMPRqFTY860OGhogwYagBFoKEABA46DEGBAoEBB0AUT4sqdIFKBNbcC4M6dkEEk22oYFOTdG9fvWrtsBxM23MytYL17666t9phwXwlum2lIDHmuSA2IGyuOLOHv38qLMbdFjHruZbWgRXeOe1nC2BUEDiyAMMHZuwoTLAQX3nvDOAUW5Vogru434d4JnAsnPmFB9NBshQXfa9104+Rxl8e13rZxN+CEydtVsFkd+vDjE7C/q52wOvb4s7+faz025frbxefWbSoQIAEDEUCwgf9j7bUlwHN9ZVaegxDK1xYzFMJH24L5saXABhlYxiEzHoKoIV8LYqAMaw9aZqFmJUK4YHuNfRjiXhmk+NcyJgaIolvM8BhiBx3IleN8lH1IWAcRgkZgCgYiaBGJojGgHHFTgtagAFYSZhF7/qnTpY+faVlNAnqJN0EHWa6ozAZjBtgmmBokwMB01LW5jAZwbqfmlNips4B4eOqJgDJ2+imXRZpthuigeC6XZTWIxilXmRo8iYKBCwiWmWkJVEAkfB0w8KI1IvlIpKnOkVpqdB5+h96o8d3lFnijrgprjbfGRSt0lH0nAZG5vsprWxYRW6Suq4UWqrLEsspWg8Io6yv/q6EhK0Fw0GLbjKYn5CZYBYht1laPrnEY67kyrhYbuyceiR28Pso7bYwiXjihjWsWuWF5p/H765HmNoiur3RJsGKNG/jq748XMrwmjhwCfO6QD9v7LQsDxPTAMKsFpthyJCdkmgYiw0VdXF/Om9dyv7YMWGXTLYpZg5wNR11C78oW3p8HSGgul4qyrJppgllJHJZHn0Y0yUwDXCXUNquFZNLKyYXBAVZvxtAKYIQEsmPgDacr0tltO1y/DMwYpkgUpJfTasLGzd3cdCN3gN3UWRcY3epIEPevfq+3njBxq/kqBoGBduvea8f393zICS63ivRBTqgFpgaWZEIUULdcK+frIfAAL2AjscXqrLfu+uuwx05FF0XUbvvtuOeu++689+7778AHL/wJIQAAOwAAAAAAAAAAAA==") \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/keybinding-emacs-uncompressed.js b/apps/files_texteditor/js/aceeditor/keybinding-emacs-uncompressed.js
new file mode 100755
index 00000000000..1d40eb461f4
--- /dev/null
+++ b/apps/files_texteditor/js/aceeditor/keybinding-emacs-uncompressed.js
@@ -0,0 +1,415 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Skywriter.
+ *
+ * The Initial Developer of the Original Code is
+ * Mozilla.
+ * Portions created by the Initial Developer are Copyright (C) 2009
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Julian Viereck (julian.viereck@gmail.com)
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/keyboard/keybinding/emacs', ['require', 'exports', 'module' , 'ace/keyboard/state_handler'], function(require, exports, module) {
+"use strict";
+
+var StateHandler = require("../state_handler").StateHandler;
+var matchCharacterOnly = require("../state_handler").matchCharacterOnly;
+
+var emacsState = {
+ start: [
+ {
+ key: "ctrl-x",
+ then: "c-x"
+ },
+ {
+ regex: [ "(?:command-([0-9]*))*", "(down|ctrl-n)" ],
+ exec: "golinedown",
+ params: [
+ {
+ name: "times",
+ match: 1,
+ type: "number",
+ defaultValue: 1
+ }
+ ]
+ },
+ {
+ regex: [ "(?:command-([0-9]*))*", "(right|ctrl-f)" ],
+ exec: "gotoright",
+ params: [
+ {
+ name: "times",
+ match: 1,
+ type: "number",
+ defaultValue: 1
+ }
+ ]
+ },
+ {
+ regex: [ "(?:command-([0-9]*))*", "(up|ctrl-p)" ],
+ exec: "golineup",
+ params: [
+ {
+ name: "times",
+ match: 1,
+ type: "number",
+ defaultValue: 1
+ }
+ ]
+ },
+ {
+ regex: [ "(?:command-([0-9]*))*", "(left|ctrl-b)" ],
+ exec: "gotoleft",
+ params: [
+ {
+ name: "times",
+ match: 1,
+ type: "number",
+ defaultValue: 1
+ }
+ ]
+ },
+ {
+ comment: "This binding matches all printable characters except numbers as long as they are no numbers and print them n times.",
+ regex: [ "(?:command-([0-9]*))", "([^0-9]+)*" ],
+ match: matchCharacterOnly,
+ exec: "inserttext",
+ params: [
+ {
+ name: "times",
+ match: 1,
+ type: "number",
+ defaultValue: "1"
+ },
+ {
+ name: "text",
+ match: 2
+ }
+ ]
+ },
+ {
+ comment: "This binding matches numbers as long as there is no meta_number in the buffer.",
+ regex: [ "(command-[0-9]*)*", "([0-9]+)" ],
+ match: matchCharacterOnly,
+ disallowMatches: [ 1 ],
+ exec: "inserttext",
+ params: [
+ {
+ name: "text",
+ match: 2,
+ type: "text"
+ }
+ ]
+ },
+ {
+ regex: [ "command-([0-9]*)", "(command-[0-9]|[0-9])" ],
+ comment: "Stops execution if the regex /meta_[0-9]+/ matches to avoid resetting the buffer."
+ }
+ ],
+ "c-x": [
+ {
+ key: "ctrl-g",
+ then: "start"
+ },
+ {
+ key: "ctrl-s",
+ exec: "save",
+ then: "start"
+ }
+ ]
+};
+
+exports.Emacs = new StateHandler(emacsState);
+
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Skywriter.
+ *
+ * The Initial Developer of the Original Code is
+ * Mozilla.
+ * Portions created by the Initial Developer are Copyright (C) 2009
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Julian Viereck (julian.viereck@gmail.com)
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/keyboard/state_handler', ['require', 'exports', 'module' ], function(require, exports, module) {
+"use strict";
+
+// If you're developing a new keymapping and want to get an idea what's going
+// on, then enable debugging.
+var DEBUG = false;
+
+function StateHandler(keymapping) {
+ this.keymapping = this.$buildKeymappingRegex(keymapping);
+}
+
+StateHandler.prototype = {
+ /**
+ * Build the RegExp from the keymapping as RegExp can't stored directly
+ * in the metadata JSON and as the RegExp used to match the keys/buffer
+ * need to be adapted.
+ */
+ $buildKeymappingRegex: function(keymapping) {
+ for (var state in keymapping) {
+ this.$buildBindingsRegex(keymapping[state]);
+ }
+ return keymapping;
+ },
+
+ $buildBindingsRegex: function(bindings) {
+ // Escape a given Regex string.
+ bindings.forEach(function(binding) {
+ if (binding.key) {
+ binding.key = new RegExp('^' + binding.key + '$');
+ } else if (Array.isArray(binding.regex)) {
+ if (!('key' in binding))
+ binding.key = new RegExp('^' + binding.regex[1] + '$');
+ binding.regex = new RegExp(binding.regex.join('') + '$');
+ } else if (binding.regex) {
+ binding.regex = new RegExp(binding.regex + '$');
+ }
+ });
+ },
+
+ $composeBuffer: function(data, hashId, key, e) {
+ // Initialize the data object.
+ if (data.state == null || data.buffer == null) {
+ data.state = "start";
+ data.buffer = "";
+ }
+
+ var keyArray = [];
+ if (hashId & 1) keyArray.push("ctrl");
+ if (hashId & 8) keyArray.push("command");
+ if (hashId & 2) keyArray.push("option");
+ if (hashId & 4) keyArray.push("shift");
+ if (key) keyArray.push(key);
+
+ var symbolicName = keyArray.join("-");
+ var bufferToUse = data.buffer + symbolicName;
+
+ // Don't add the symbolic name to the key buffer if the alt_ key is
+ // part of the symbolic name. If it starts with alt_, this means
+ // that the user hit an alt keycombo and there will be a single,
+ // new character detected after this event, which then will be
+ // added to the buffer (e.g. alt_j will result in ∆).
+ //
+ // We test for 2 and not for & 2 as we only want to exclude the case where
+ // the option key is pressed alone.
+ if (hashId != 2) {
+ data.buffer = bufferToUse;
+ }
+
+ var bufferObj = {
+ bufferToUse: bufferToUse,
+ symbolicName: symbolicName,
+ };
+
+ if (e) {
+ bufferObj.keyIdentifier = e.keyIdentifier
+ }
+
+ return bufferObj;
+ },
+
+ $find: function(data, buffer, symbolicName, hashId, key, keyIdentifier) {
+ // Holds the command to execute and the args if a command matched.
+ var result = {};
+
+ // Loop over all the bindings of the keymap until a match is found.
+ this.keymapping[data.state].some(function(binding) {
+ var match;
+
+ // Check if the key matches.
+ if (binding.key && !binding.key.test(symbolicName)) {
+ return false;
+ }
+
+ // Check if the regex matches.
+ if (binding.regex && !(match = binding.regex.exec(buffer))) {
+ return false;
+ }
+
+ // Check if the match function matches.
+ if (binding.match && !binding.match(buffer, hashId, key, symbolicName, keyIdentifier)) {
+ return false;
+ }
+
+ // Check for disallowed matches.
+ if (binding.disallowMatches) {
+ for (var i = 0; i < binding.disallowMatches.length; i++) {
+ if (!!match[binding.disallowMatches[i]]) {
+ return false;
+ }
+ }
+ }
+
+ // If there is a command to execute, then figure out the
+ // command and the arguments.
+ if (binding.exec) {
+ result.command = binding.exec;
+
+ // Build the arguments.
+ if (binding.params) {
+ var value;
+ result.args = {};
+ binding.params.forEach(function(param) {
+ if (param.match != null && match != null) {
+ value = match[param.match] || param.defaultValue;
+ } else {
+ value = param.defaultValue;
+ }
+
+ if (param.type === 'number') {
+ value = parseInt(value);
+ }
+
+ result.args[param.name] = value;
+ });
+ }
+ data.buffer = "";
+ }
+
+ // Handle the 'then' property.
+ if (binding.then) {
+ data.state = binding.then;
+ data.buffer = "";
+ }
+
+ // If no command is set, then execute the "null" fake command.
+ if (result.command == null) {
+ result.command = "null";
+ }
+
+ if (DEBUG) {
+ console.log("KeyboardStateMapper#find", binding);
+ }
+ return true;
+ });
+
+ if (result.command) {
+ return result;
+ } else {
+ data.buffer = "";
+ return false;
+ }
+ },
+
+ /**
+ * This function is called by keyBinding.
+ */
+ handleKeyboard: function(data, hashId, key, keyCode, e) {
+ // If we pressed any command key but no other key, then ignore the input.
+ // Otherwise "shift-" is added to the buffer, and later on "shift-g"
+ // which results in "shift-shift-g" which doesn't make sense.
+ if (hashId != 0 && (key == "" || key == String.fromCharCode(0))) {
+ return null;
+ }
+
+ // Compute the current value of the keyboard input buffer.
+ var r = this.$composeBuffer(data, hashId, key, e);
+ var buffer = r.bufferToUse;
+ var symbolicName = r.symbolicName;
+ var keyId = r.keyIdentifier;
+
+ r = this.$find(data, buffer, symbolicName, hashId, key, keyId);
+ if (DEBUG) {
+ console.log("KeyboardStateMapper#match", buffer, symbolicName, r);
+ }
+
+ return r;
+ }
+}
+
+/**
+ * This is a useful matching function and therefore is defined here so that
+ * users of KeyboardStateMapper can use it.
+ *
+ * @return boolean
+ * If no command key (Command|Option|Shift|Ctrl) is pressed, it
+ * returns true. If the only the Shift key is pressed + a character
+ * true is returned as well. Otherwise, false is returned.
+ * Summing up, the function returns true whenever the user typed
+ * a normal character on the keyboard and no shortcut.
+ */
+exports.matchCharacterOnly = function(buffer, hashId, key, symbolicName) {
+ // If no command keys are pressed, then catch the input.
+ if (hashId == 0) {
+ return true;
+ }
+ // If only the shift key is pressed and a character key, then
+ // catch that input as well.
+ else if ((hashId == 4) && key.length == 1) {
+ return true;
+ }
+ // Otherwise, we let the input got through.
+ else {
+ return false;
+ }
+};
+
+exports.StateHandler = StateHandler;
+});
+;
+ (function() {
+ window.require(["ace/ace"], function(a) {
+ if (!window.ace)
+ window.ace = {};
+ for (var key in a) if (a.hasOwnProperty(key))
+ ace[key] = a[key];
+ });
+ })();
+ \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/keybinding-emacs.js b/apps/files_texteditor/js/aceeditor/keybinding-emacs.js
index 5c99b14f086..7ddcd7623bd 100644..100755
--- a/apps/files_texteditor/js/aceeditor/keybinding-emacs.js
+++ b/apps/files_texteditor/js/aceeditor/keybinding-emacs.js
@@ -1 +1 @@
-define("ace/keyboard/keybinding/emacs",["require","exports","module","ace/keyboard/state_handler"],function(a,b,c){var d=a("ace/keyboard/state_handler").StateHandler,e=a("ace/keyboard/state_handler").matchCharacterOnly,f={start:[{key:"ctrl-x",then:"c-x"},{regex:["(?:command-([0-9]*))*","(down|ctrl-n)"],exec:"golinedown",params:[{name:"times",match:1,type:"number",defaultValue:1}]},{regex:["(?:command-([0-9]*))*","(right|ctrl-f)"],exec:"gotoright",params:[{name:"times",match:1,type:"number",defaultValue:1}]},{regex:["(?:command-([0-9]*))*","(up|ctrl-p)"],exec:"golineup",params:[{name:"times",match:1,type:"number",defaultValue:1}]},{regex:["(?:command-([0-9]*))*","(left|ctrl-b)"],exec:"gotoleft",params:[{name:"times",match:1,type:"number",defaultValue:1}]},{comment:"This binding matches all printable characters except numbers as long as they are no numbers and print them n times.",regex:["(?:command-([0-9]*))","([^0-9]+)*"],match:e,exec:"inserttext",params:[{name:"times",match:1,type:"number",defaultValue:"1"},{name:"text",match:2}]},{comment:"This binding matches numbers as long as there is no meta_number in the buffer.",regex:["(command-[0-9]*)*","([0-9]+)"],match:e,disallowMatches:[1],exec:"inserttext",params:[{name:"text",match:2,type:"text"}]},{regex:["command-([0-9]*)","(command-[0-9]|[0-9])"],comment:"Stops execution if the regex /meta_[0-9]+/ matches to avoid resetting the buffer."}],"c-x":[{key:"ctrl-g",then:"start"},{key:"ctrl-s",exec:"save",then:"start"}]};b.Emacs=new d(f)}),define("ace/keyboard/state_handler",["require","exports","module"],function(a,b,c){function e(a){this.keymapping=this.$buildKeymappingRegex(a)}var d=!1;e.prototype={$buildKeymappingRegex:function(a){for(state in a)this.$buildBindingsRegex(a[state]);return a},$buildBindingsRegex:function(a){a.forEach(function(a){a.key?a.key=new RegExp("^"+a.key+"$"):Array.isArray(a.regex)?(a.key=new RegExp("^"+a.regex[1]+"$"),a.regex=new RegExp(a.regex.join("")+"$")):a.regex&&(a.regex=new RegExp(a.regex+"$"))})},$composeBuffer:function(a,b,c){if(a.state==null||a.buffer==null)a.state="start",a.buffer="";var d=[];b&1&&d.push("ctrl"),b&8&&d.push("command"),b&2&&d.push("option"),b&4&&d.push("shift"),c&&d.push(c);var e=d.join("-"),f=a.buffer+e;b!=2&&(a.buffer=f);return{bufferToUse:f,symbolicName:e}},$find:function(a,b,c,e,f){var g={};this.keymapping[a.state].some(function(h){var i;if(h.key&&!h.key.test(c))return!1;if(h.regex&&!(i=h.regex.exec(b)))return!1;if(h.match&&!h.match(b,e,f,c))return!1;if(h.disallowMatches)for(var j=0;j<h.disallowMatches.length;j++)if(!!i[h.disallowMatches[j]])return!1;if(h.exec){g.command=h.exec;if(h.params){var k;g.args={},h.params.forEach(function(a){a.match!=null&&i!=null?k=i[a.match]||a.defaultValue:k=a.defaultValue,a.type==="number"&&(k=parseInt(k)),g.args[a.name]=k})}a.buffer=""}h.then&&(a.state=h.then,a.buffer=""),g.command==null&&(g.command="null"),d&&console.log("KeyboardStateMapper#find",h);return!0});if(g.command)return g;a.buffer="";return!1},handleKeyboard:function(a,b,c){if(b==0||c!=""&&c!=String.fromCharCode(0)){var e=this.$composeBuffer(a,b,c),f=e.bufferToUse,g=e.symbolicName;e=this.$find(a,f,g,b,c),d&&console.log("KeyboardStateMapper#match",f,g,e);return e}return null}},b.matchCharacterOnly=function(a,b,c,d){return b==0?!0:b==4&&c.length==1?!0:!1},b.StateHandler=e}) \ No newline at end of file
+define("ace/keyboard/keybinding/emacs",["require","exports","module","ace/keyboard/state_handler"],function(a,b,c){"use strict";var d=a("../state_handler").StateHandler,e=a("../state_handler").matchCharacterOnly,f={start:[{key:"ctrl-x",then:"c-x"},{regex:["(?:command-([0-9]*))*","(down|ctrl-n)"],exec:"golinedown",params:[{name:"times",match:1,type:"number",defaultValue:1}]},{regex:["(?:command-([0-9]*))*","(right|ctrl-f)"],exec:"gotoright",params:[{name:"times",match:1,type:"number",defaultValue:1}]},{regex:["(?:command-([0-9]*))*","(up|ctrl-p)"],exec:"golineup",params:[{name:"times",match:1,type:"number",defaultValue:1}]},{regex:["(?:command-([0-9]*))*","(left|ctrl-b)"],exec:"gotoleft",params:[{name:"times",match:1,type:"number",defaultValue:1}]},{comment:"This binding matches all printable characters except numbers as long as they are no numbers and print them n times.",regex:["(?:command-([0-9]*))","([^0-9]+)*"],match:e,exec:"inserttext",params:[{name:"times",match:1,type:"number",defaultValue:"1"},{name:"text",match:2}]},{comment:"This binding matches numbers as long as there is no meta_number in the buffer.",regex:["(command-[0-9]*)*","([0-9]+)"],match:e,disallowMatches:[1],exec:"inserttext",params:[{name:"text",match:2,type:"text"}]},{regex:["command-([0-9]*)","(command-[0-9]|[0-9])"],comment:"Stops execution if the regex /meta_[0-9]+/ matches to avoid resetting the buffer."}],"c-x":[{key:"ctrl-g",then:"start"},{key:"ctrl-s",exec:"save",then:"start"}]};b.Emacs=new d(f)}),define("ace/keyboard/state_handler",["require","exports","module"],function(a,b,c){function e(a){this.keymapping=this.$buildKeymappingRegex(a)}"use strict";var d=!1;e.prototype={$buildKeymappingRegex:function(a){for(var b in a)this.$buildBindingsRegex(a[b]);return a},$buildBindingsRegex:function(a){a.forEach(function(a){a.key?a.key=new RegExp("^"+a.key+"$"):Array.isArray(a.regex)?("key"in a||(a.key=new RegExp("^"+a.regex[1]+"$")),a.regex=new RegExp(a.regex.join("")+"$")):a.regex&&(a.regex=new RegExp(a.regex+"$"))})},$composeBuffer:function(a,b,c,d){if(a.state==null||a.buffer==null)a.state="start",a.buffer="";var e=[];b&1&&e.push("ctrl"),b&8&&e.push("command"),b&2&&e.push("option"),b&4&&e.push("shift"),c&&e.push(c);var f=e.join("-"),g=a.buffer+f;b!=2&&(a.buffer=g);var h={bufferToUse:g,symbolicName:f};return d&&(h.keyIdentifier=d.keyIdentifier),h},$find:function(a,b,c,e,f,g){var h={};return this.keymapping[a.state].some(function(i){var j;if(i.key&&!i.key.test(c))return!1;if(i.regex&&!(j=i.regex.exec(b)))return!1;if(i.match&&!i.match(b,e,f,c,g))return!1;if(i.disallowMatches)for(var k=0;k<i.disallowMatches.length;k++)if(!!j[i.disallowMatches[k]])return!1;if(i.exec){h.command=i.exec;if(i.params){var l;h.args={},i.params.forEach(function(a){a.match!=null&&j!=null?l=j[a.match]||a.defaultValue:l=a.defaultValue,a.type==="number"&&(l=parseInt(l)),h.args[a.name]=l})}a.buffer=""}return i.then&&(a.state=i.then,a.buffer=""),h.command==null&&(h.command="null"),d&&console.log("KeyboardStateMapper#find",i),!0}),h.command?h:(a.buffer="",!1)},handleKeyboard:function(a,b,c,e,f){if(b==0||c!=""&&c!=String.fromCharCode(0)){var g=this.$composeBuffer(a,b,c,f),h=g.bufferToUse,i=g.symbolicName,j=g.keyIdentifier;return g=this.$find(a,h,i,b,c,j),d&&console.log("KeyboardStateMapper#match",h,i,g),g}return null}},b.matchCharacterOnly=function(a,b,c,d){return b==0?!0:b==4&&c.length==1?!0:!1},b.StateHandler=e}),function(){window.require(["ace/ace"],function(a){window.ace||(window.ace={});for(var b in a)a.hasOwnProperty(b)&&(ace[b]=a[b])})}() \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/keybinding-vim-uncompressed.js b/apps/files_texteditor/js/aceeditor/keybinding-vim-uncompressed.js
new file mode 100755
index 00000000000..bd730278477
--- /dev/null
+++ b/apps/files_texteditor/js/aceeditor/keybinding-vim-uncompressed.js
@@ -0,0 +1,403 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Skywriter.
+ *
+ * The Initial Developer of the Original Code is
+ * Mozilla.
+ * Portions created by the Initial Developer are Copyright (C) 2009
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Julian Viereck (julian.viereck@gmail.com)
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/keyboard/keybinding/vim', ['require', 'exports', 'module' , 'ace/keyboard/state_handler'], function(require, exports, module) {
+"use strict";
+
+var StateHandler = require("../state_handler").StateHandler;
+var matchCharacterOnly = require("../state_handler").matchCharacterOnly;
+
+var vimcommand = function(key, exec, then) {
+ return {
+ regex: [ "([0-9]*)", key ],
+ exec: exec,
+ params: [
+ {
+ name: "times",
+ match: 1,
+ type: "number",
+ defaultValue: 1
+ }
+ ],
+ then: then
+ }
+}
+
+var vimStates = {
+ start: [
+ {
+ key: "i",
+ then: "insertMode"
+ },
+ {
+ key: "d",
+ then: "deleteMode"
+ },
+ {
+ key: "a",
+ exec: "gotoright",
+ then: "insertMode"
+ },
+ {
+ key: "shift-i",
+ exec: "gotolinestart",
+ then: "insertMode"
+ },
+ {
+ key: "shift-a",
+ exec: "gotolineend",
+ then: "insertMode"
+ },
+ {
+ key: "shift-c",
+ exec: "removetolineend",
+ then: "insertMode"
+ },
+ {
+ key: "shift-r",
+ exec: "overwrite",
+ then: "replaceMode"
+ },
+ vimcommand("(k|up)", "golineup"),
+ vimcommand("(j|down)", "golinedown"),
+ vimcommand("(l|right)", "gotoright"),
+ vimcommand("(h|left)", "gotoleft"),
+ {
+ key: "shift-g",
+ exec: "gotoend"
+ },
+ vimcommand("b", "gotowordleft"),
+ vimcommand("e", "gotowordright"),
+ vimcommand("x", "del"),
+ vimcommand("shift-x", "backspace"),
+ vimcommand("shift-d", "removetolineend"),
+ vimcommand("u", "undo"), // [count] on this may/may not work, depending on browser implementation...
+ {
+ comment: "Catch some keyboard input to stop it here",
+ match: matchCharacterOnly
+ }
+ ],
+ insertMode: [
+ {
+ key: "esc",
+ then: "start"
+ }
+ ],
+ replaceMode: [
+ {
+ key: "esc",
+ exec: "overwrite",
+ then: "start"
+ }
+ ],
+ deleteMode: [
+ {
+ key: "d",
+ exec: "removeline",
+ then: "start"
+ }
+ ]
+};
+
+exports.Vim = new StateHandler(vimStates);
+
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Skywriter.
+ *
+ * The Initial Developer of the Original Code is
+ * Mozilla.
+ * Portions created by the Initial Developer are Copyright (C) 2009
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Julian Viereck (julian.viereck@gmail.com)
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/keyboard/state_handler', ['require', 'exports', 'module' ], function(require, exports, module) {
+"use strict";
+
+// If you're developing a new keymapping and want to get an idea what's going
+// on, then enable debugging.
+var DEBUG = false;
+
+function StateHandler(keymapping) {
+ this.keymapping = this.$buildKeymappingRegex(keymapping);
+}
+
+StateHandler.prototype = {
+ /**
+ * Build the RegExp from the keymapping as RegExp can't stored directly
+ * in the metadata JSON and as the RegExp used to match the keys/buffer
+ * need to be adapted.
+ */
+ $buildKeymappingRegex: function(keymapping) {
+ for (var state in keymapping) {
+ this.$buildBindingsRegex(keymapping[state]);
+ }
+ return keymapping;
+ },
+
+ $buildBindingsRegex: function(bindings) {
+ // Escape a given Regex string.
+ bindings.forEach(function(binding) {
+ if (binding.key) {
+ binding.key = new RegExp('^' + binding.key + '$');
+ } else if (Array.isArray(binding.regex)) {
+ if (!('key' in binding))
+ binding.key = new RegExp('^' + binding.regex[1] + '$');
+ binding.regex = new RegExp(binding.regex.join('') + '$');
+ } else if (binding.regex) {
+ binding.regex = new RegExp(binding.regex + '$');
+ }
+ });
+ },
+
+ $composeBuffer: function(data, hashId, key, e) {
+ // Initialize the data object.
+ if (data.state == null || data.buffer == null) {
+ data.state = "start";
+ data.buffer = "";
+ }
+
+ var keyArray = [];
+ if (hashId & 1) keyArray.push("ctrl");
+ if (hashId & 8) keyArray.push("command");
+ if (hashId & 2) keyArray.push("option");
+ if (hashId & 4) keyArray.push("shift");
+ if (key) keyArray.push(key);
+
+ var symbolicName = keyArray.join("-");
+ var bufferToUse = data.buffer + symbolicName;
+
+ // Don't add the symbolic name to the key buffer if the alt_ key is
+ // part of the symbolic name. If it starts with alt_, this means
+ // that the user hit an alt keycombo and there will be a single,
+ // new character detected after this event, which then will be
+ // added to the buffer (e.g. alt_j will result in ∆).
+ //
+ // We test for 2 and not for & 2 as we only want to exclude the case where
+ // the option key is pressed alone.
+ if (hashId != 2) {
+ data.buffer = bufferToUse;
+ }
+
+ var bufferObj = {
+ bufferToUse: bufferToUse,
+ symbolicName: symbolicName,
+ };
+
+ if (e) {
+ bufferObj.keyIdentifier = e.keyIdentifier
+ }
+
+ return bufferObj;
+ },
+
+ $find: function(data, buffer, symbolicName, hashId, key, keyIdentifier) {
+ // Holds the command to execute and the args if a command matched.
+ var result = {};
+
+ // Loop over all the bindings of the keymap until a match is found.
+ this.keymapping[data.state].some(function(binding) {
+ var match;
+
+ // Check if the key matches.
+ if (binding.key && !binding.key.test(symbolicName)) {
+ return false;
+ }
+
+ // Check if the regex matches.
+ if (binding.regex && !(match = binding.regex.exec(buffer))) {
+ return false;
+ }
+
+ // Check if the match function matches.
+ if (binding.match && !binding.match(buffer, hashId, key, symbolicName, keyIdentifier)) {
+ return false;
+ }
+
+ // Check for disallowed matches.
+ if (binding.disallowMatches) {
+ for (var i = 0; i < binding.disallowMatches.length; i++) {
+ if (!!match[binding.disallowMatches[i]]) {
+ return false;
+ }
+ }
+ }
+
+ // If there is a command to execute, then figure out the
+ // command and the arguments.
+ if (binding.exec) {
+ result.command = binding.exec;
+
+ // Build the arguments.
+ if (binding.params) {
+ var value;
+ result.args = {};
+ binding.params.forEach(function(param) {
+ if (param.match != null && match != null) {
+ value = match[param.match] || param.defaultValue;
+ } else {
+ value = param.defaultValue;
+ }
+
+ if (param.type === 'number') {
+ value = parseInt(value);
+ }
+
+ result.args[param.name] = value;
+ });
+ }
+ data.buffer = "";
+ }
+
+ // Handle the 'then' property.
+ if (binding.then) {
+ data.state = binding.then;
+ data.buffer = "";
+ }
+
+ // If no command is set, then execute the "null" fake command.
+ if (result.command == null) {
+ result.command = "null";
+ }
+
+ if (DEBUG) {
+ console.log("KeyboardStateMapper#find", binding);
+ }
+ return true;
+ });
+
+ if (result.command) {
+ return result;
+ } else {
+ data.buffer = "";
+ return false;
+ }
+ },
+
+ /**
+ * This function is called by keyBinding.
+ */
+ handleKeyboard: function(data, hashId, key, keyCode, e) {
+ // If we pressed any command key but no other key, then ignore the input.
+ // Otherwise "shift-" is added to the buffer, and later on "shift-g"
+ // which results in "shift-shift-g" which doesn't make sense.
+ if (hashId != 0 && (key == "" || key == String.fromCharCode(0))) {
+ return null;
+ }
+
+ // Compute the current value of the keyboard input buffer.
+ var r = this.$composeBuffer(data, hashId, key, e);
+ var buffer = r.bufferToUse;
+ var symbolicName = r.symbolicName;
+ var keyId = r.keyIdentifier;
+
+ r = this.$find(data, buffer, symbolicName, hashId, key, keyId);
+ if (DEBUG) {
+ console.log("KeyboardStateMapper#match", buffer, symbolicName, r);
+ }
+
+ return r;
+ }
+}
+
+/**
+ * This is a useful matching function and therefore is defined here so that
+ * users of KeyboardStateMapper can use it.
+ *
+ * @return boolean
+ * If no command key (Command|Option|Shift|Ctrl) is pressed, it
+ * returns true. If the only the Shift key is pressed + a character
+ * true is returned as well. Otherwise, false is returned.
+ * Summing up, the function returns true whenever the user typed
+ * a normal character on the keyboard and no shortcut.
+ */
+exports.matchCharacterOnly = function(buffer, hashId, key, symbolicName) {
+ // If no command keys are pressed, then catch the input.
+ if (hashId == 0) {
+ return true;
+ }
+ // If only the shift key is pressed and a character key, then
+ // catch that input as well.
+ else if ((hashId == 4) && key.length == 1) {
+ return true;
+ }
+ // Otherwise, we let the input got through.
+ else {
+ return false;
+ }
+};
+
+exports.StateHandler = StateHandler;
+});
+;
+ (function() {
+ window.require(["ace/ace"], function(a) {
+ if (!window.ace)
+ window.ace = {};
+ for (var key in a) if (a.hasOwnProperty(key))
+ ace[key] = a[key];
+ });
+ })();
+ \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/keybinding-vim.js b/apps/files_texteditor/js/aceeditor/keybinding-vim.js
index f49e87640aa..fa94c7955f1 100644..100755
--- a/apps/files_texteditor/js/aceeditor/keybinding-vim.js
+++ b/apps/files_texteditor/js/aceeditor/keybinding-vim.js
@@ -1 +1 @@
-define("ace/keyboard/keybinding/vim",["require","exports","module","ace/keyboard/state_handler"],function(a,b,c){var d=a("ace/keyboard/state_handler").StateHandler,e=a("ace/keyboard/state_handler").matchCharacterOnly,f={start:[{key:"i",then:"insertMode"},{key:"d",then:"deleteMode"},{key:"a",exec:"gotoright",then:"insertMode"},{key:"shift-i",exec:"gotolinestart",then:"insertMode"},{key:"shift-a",exec:"gotolineend",then:"insertMode"},{key:"shift-c",exec:"removetolineend",then:"insertMode"},{key:"shift-r",exec:"overwrite",then:"replaceMode"},{regex:["([0-9]*)","(k|up)"],exec:"golineup",params:[{name:"times",match:1,type:"number",defaultValue:1}]},{regex:["([0-9]*)","(j|down|enter)"],exec:"golinedown",params:[{name:"times",match:1,type:"number",defaultValue:1}]},{regex:["([0-9]*)","(l|right)"],exec:"gotoright",params:[{name:"times",match:1,type:"number",defaultValue:1}]},{regex:["([0-9]*)","(h|left)"],exec:"gotoleft",params:[{name:"times",match:1,type:"number",defaultValue:1}]},{key:"shift-g",exec:"gotoend"},{key:"b",exec:"gotowordleft"},{key:"e",exec:"gotowordright"},{key:"x",exec:"del"},{key:"shift-x",exec:"backspace"},{key:"shift-d",exec:"removetolineend"},{comment:"Catch some keyboard input to stop it here",match:e}],insertMode:[{key:"esc",then:"start"}],replaceMode:[{key:"esc",exec:"overwrite",then:"start"}],deleteMode:[{key:"d",exec:"removeline",then:"start"}]};b.Vim=new d(f)}),define("ace/keyboard/state_handler",["require","exports","module"],function(a,b,c){function e(a){this.keymapping=this.$buildKeymappingRegex(a)}var d=!1;e.prototype={$buildKeymappingRegex:function(a){for(state in a)this.$buildBindingsRegex(a[state]);return a},$buildBindingsRegex:function(a){a.forEach(function(a){a.key?a.key=new RegExp("^"+a.key+"$"):Array.isArray(a.regex)?(a.key=new RegExp("^"+a.regex[1]+"$"),a.regex=new RegExp(a.regex.join("")+"$")):a.regex&&(a.regex=new RegExp(a.regex+"$"))})},$composeBuffer:function(a,b,c){if(a.state==null||a.buffer==null)a.state="start",a.buffer="";var d=[];b&1&&d.push("ctrl"),b&8&&d.push("command"),b&2&&d.push("option"),b&4&&d.push("shift"),c&&d.push(c);var e=d.join("-"),f=a.buffer+e;b!=2&&(a.buffer=f);return{bufferToUse:f,symbolicName:e}},$find:function(a,b,c,e,f){var g={};this.keymapping[a.state].some(function(h){var i;if(h.key&&!h.key.test(c))return!1;if(h.regex&&!(i=h.regex.exec(b)))return!1;if(h.match&&!h.match(b,e,f,c))return!1;if(h.disallowMatches)for(var j=0;j<h.disallowMatches.length;j++)if(!!i[h.disallowMatches[j]])return!1;if(h.exec){g.command=h.exec;if(h.params){var k;g.args={},h.params.forEach(function(a){a.match!=null&&i!=null?k=i[a.match]||a.defaultValue:k=a.defaultValue,a.type==="number"&&(k=parseInt(k)),g.args[a.name]=k})}a.buffer=""}h.then&&(a.state=h.then,a.buffer=""),g.command==null&&(g.command="null"),d&&console.log("KeyboardStateMapper#find",h);return!0});if(g.command)return g;a.buffer="";return!1},handleKeyboard:function(a,b,c){if(b==0||c!=""&&c!=String.fromCharCode(0)){var e=this.$composeBuffer(a,b,c),f=e.bufferToUse,g=e.symbolicName;e=this.$find(a,f,g,b,c),d&&console.log("KeyboardStateMapper#match",f,g,e);return e}return null}},b.matchCharacterOnly=function(a,b,c,d){return b==0?!0:b==4&&c.length==1?!0:!1},b.StateHandler=e}) \ No newline at end of file
+define("ace/keyboard/keybinding/vim",["require","exports","module","ace/keyboard/state_handler"],function(a,b,c){"use strict";var d=a("../state_handler").StateHandler,e=a("../state_handler").matchCharacterOnly,f=function(a,b,c){return{regex:["([0-9]*)",a],exec:b,params:[{name:"times",match:1,type:"number",defaultValue:1}],then:c}},g={start:[{key:"i",then:"insertMode"},{key:"d",then:"deleteMode"},{key:"a",exec:"gotoright",then:"insertMode"},{key:"shift-i",exec:"gotolinestart",then:"insertMode"},{key:"shift-a",exec:"gotolineend",then:"insertMode"},{key:"shift-c",exec:"removetolineend",then:"insertMode"},{key:"shift-r",exec:"overwrite",then:"replaceMode"},f("(k|up)","golineup"),f("(j|down)","golinedown"),f("(l|right)","gotoright"),f("(h|left)","gotoleft"),{key:"shift-g",exec:"gotoend"},f("b","gotowordleft"),f("e","gotowordright"),f("x","del"),f("shift-x","backspace"),f("shift-d","removetolineend"),f("u","undo"),{comment:"Catch some keyboard input to stop it here",match:e}],insertMode:[{key:"esc",then:"start"}],replaceMode:[{key:"esc",exec:"overwrite",then:"start"}],deleteMode:[{key:"d",exec:"removeline",then:"start"}]};b.Vim=new d(g)}),define("ace/keyboard/state_handler",["require","exports","module"],function(a,b,c){function e(a){this.keymapping=this.$buildKeymappingRegex(a)}"use strict";var d=!1;e.prototype={$buildKeymappingRegex:function(a){for(var b in a)this.$buildBindingsRegex(a[b]);return a},$buildBindingsRegex:function(a){a.forEach(function(a){a.key?a.key=new RegExp("^"+a.key+"$"):Array.isArray(a.regex)?("key"in a||(a.key=new RegExp("^"+a.regex[1]+"$")),a.regex=new RegExp(a.regex.join("")+"$")):a.regex&&(a.regex=new RegExp(a.regex+"$"))})},$composeBuffer:function(a,b,c,d){if(a.state==null||a.buffer==null)a.state="start",a.buffer="";var e=[];b&1&&e.push("ctrl"),b&8&&e.push("command"),b&2&&e.push("option"),b&4&&e.push("shift"),c&&e.push(c);var f=e.join("-"),g=a.buffer+f;b!=2&&(a.buffer=g);var h={bufferToUse:g,symbolicName:f};return d&&(h.keyIdentifier=d.keyIdentifier),h},$find:function(a,b,c,e,f,g){var h={};return this.keymapping[a.state].some(function(i){var j;if(i.key&&!i.key.test(c))return!1;if(i.regex&&!(j=i.regex.exec(b)))return!1;if(i.match&&!i.match(b,e,f,c,g))return!1;if(i.disallowMatches)for(var k=0;k<i.disallowMatches.length;k++)if(!!j[i.disallowMatches[k]])return!1;if(i.exec){h.command=i.exec;if(i.params){var l;h.args={},i.params.forEach(function(a){a.match!=null&&j!=null?l=j[a.match]||a.defaultValue:l=a.defaultValue,a.type==="number"&&(l=parseInt(l)),h.args[a.name]=l})}a.buffer=""}return i.then&&(a.state=i.then,a.buffer=""),h.command==null&&(h.command="null"),d&&console.log("KeyboardStateMapper#find",i),!0}),h.command?h:(a.buffer="",!1)},handleKeyboard:function(a,b,c,e,f){if(b==0||c!=""&&c!=String.fromCharCode(0)){var g=this.$composeBuffer(a,b,c,f),h=g.bufferToUse,i=g.symbolicName,j=g.keyIdentifier;return g=this.$find(a,h,i,b,c,j),d&&console.log("KeyboardStateMapper#match",h,i,g),g}return null}},b.matchCharacterOnly=function(a,b,c,d){return b==0?!0:b==4&&c.length==1?!0:!1},b.StateHandler=e}),function(){window.require(["ace/ace"],function(a){window.ace||(window.ace={});for(var b in a)a.hasOwnProperty(b)&&(ace[b]=a[b])})}() \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-c_cpp-uncompressed.js b/apps/files_texteditor/js/aceeditor/mode-c_cpp-uncompressed.js
new file mode 100755
index 00000000000..87a8fab9dd1
--- /dev/null
+++ b/apps/files_texteditor/js/aceeditor/mode-c_cpp-uncompressed.js
@@ -0,0 +1,928 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ * Gastón Kleiman <gaston.kleiman AT gmail DOT com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/c_cpp', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/c_cpp_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/range', 'ace/mode/behaviour/cstyle', 'ace/mode/folding/cstyle'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextMode = require("./text").Mode;
+var Tokenizer = require("../tokenizer").Tokenizer;
+var c_cppHighlightRules = require("./c_cpp_highlight_rules").c_cppHighlightRules;
+var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
+var Range = require("../range").Range;
+var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
+var CStyleFoldMode = require("./folding/cstyle").FoldMode;
+
+var Mode = function() {
+ this.$tokenizer = new Tokenizer(new c_cppHighlightRules().getRules());
+ this.$outdent = new MatchingBraceOutdent();
+ this.$behaviour = new CstyleBehaviour();
+ this.foldingRules = new CStyleFoldMode();
+};
+oop.inherits(Mode, TextMode);
+
+(function() {
+
+ this.toggleCommentLines = function(state, doc, startRow, endRow) {
+ var outdent = true;
+ var re = /^(\s*)\/\//;
+
+ for (var i=startRow; i<= endRow; i++) {
+ if (!re.test(doc.getLine(i))) {
+ outdent = false;
+ break;
+ }
+ }
+
+ if (outdent) {
+ var deleteRange = new Range(0, 0, 0, 0);
+ for (var i=startRow; i<= endRow; i++)
+ {
+ var line = doc.getLine(i);
+ var m = line.match(re);
+ deleteRange.start.row = i;
+ deleteRange.end.row = i;
+ deleteRange.end.column = m[0].length;
+ doc.replace(deleteRange, m[1]);
+ }
+ }
+ else {
+ doc.indentRows(startRow, endRow, "//");
+ }
+ };
+
+ this.getNextLineIndent = function(state, line, tab) {
+ var indent = this.$getIndent(line);
+
+ var tokenizedLine = this.$tokenizer.getLineTokens(line, state);
+ var tokens = tokenizedLine.tokens;
+ var endState = tokenizedLine.state;
+
+ if (tokens.length && tokens[tokens.length-1].type == "comment") {
+ return indent;
+ }
+
+ if (state == "start") {
+ var match = line.match(/^.*[\{\(\[]\s*$/);
+ if (match) {
+ indent += tab;
+ }
+ } else if (state == "doc-start") {
+ if (endState == "start") {
+ return "";
+ }
+ var match = line.match(/^\s*(\/?)\*/);
+ if (match) {
+ if (match[1]) {
+ indent += " ";
+ }
+ indent += "* ";
+ }
+ }
+
+ return indent;
+ };
+
+ this.checkOutdent = function(state, line, input) {
+ return this.$outdent.checkOutdent(line, input);
+ };
+
+ this.autoOutdent = function(state, doc, row) {
+ this.$outdent.autoOutdent(doc, row);
+ };
+
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ * Gastón Kleiman <gaston.kleiman AT gmail DOT com>
+ *
+ * Based on Bespin's C/C++ Syntax Plugin by Marc McIntyre.
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/c_cpp_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/mode/doc_comment_highlight_rules', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var lang = require("../lib/lang");
+var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var c_cppHighlightRules = function() {
+
+ var keywords = lang.arrayToMap(
+ ("and|double|not_eq|throw|and_eq|dynamic_cast|operator|true|" +
+ "asm|else|or|try|auto|enum|or_eq|typedef|bitand|explicit|private|" +
+ "typeid|bitor|extern|protected|typename|bool|false|public|union|" +
+ "break|float|register|unsigned|case|fro|reinterpret-cast|using|catch|" +
+ "friend|return|virtual|char|goto|short|void|class|if|signed|volatile|" +
+ "compl|inline|sizeof|wchar_t|const|int|static|while|const-cast|long|" +
+ "static_cast|xor|continue|mutable|struct|xor_eq|default|namespace|" +
+ "switch|delete|new|template|do|not|this|for").split("|")
+ );
+
+ var buildinConstants = lang.arrayToMap(
+ ("NULL").split("|")
+ );
+
+ // regexp must not have capturing parentheses. Use (?:) instead.
+ // regexps are ordered -> the first match is used
+
+ this.$rules = {
+ "start" : [
+ {
+ token : "comment",
+ regex : "\\/\\/.*$"
+ },
+ new DocCommentHighlightRules().getStartRule("doc-start"),
+ {
+ token : "comment", // multi line comment
+ merge : true,
+ regex : "\\/\\*",
+ next : "comment"
+ }, {
+ token : "string", // single line
+ regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
+ }, {
+ token : "string", // multi line string start
+ merge : true,
+ regex : '["].*\\\\$',
+ next : "qqstring"
+ }, {
+ token : "string", // single line
+ regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
+ }, {
+ token : "string", // multi line string start
+ merge : true,
+ regex : "['].*\\\\$",
+ next : "qstring"
+ }, {
+ token : "constant.numeric", // hex
+ regex : "0[xX][0-9a-fA-F]+\\b"
+ }, {
+ token : "constant.numeric", // float
+ regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
+ }, {
+ token : "constant", // <CONSTANT>
+ regex : "<[a-zA-Z0-9.]+>"
+ }, {
+ token : "keyword", // pre-compiler directivs
+ regex : "(?:#include|#pragma|#line|#define|#undef|#ifdef|#else|#elif|#endif|#ifndef)"
+ }, {
+ token : function(value) {
+ if (value == "this")
+ return "variable.language";
+ else if (keywords.hasOwnProperty(value))
+ return "keyword";
+ else if (buildinConstants.hasOwnProperty(value))
+ return "constant.language";
+ else
+ return "identifier";
+ },
+ regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
+ }, {
+ token : "keyword.operator",
+ regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|new|delete|typeof|void)"
+ }, {
+ token : "punctuation.operator",
+ regex : "\\?|\\:|\\,|\\;|\\."
+ }, {
+ token : "paren.lparen",
+ regex : "[[({]"
+ }, {
+ token : "paren.rparen",
+ regex : "[\\])}]"
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }
+ ],
+ "comment" : [
+ {
+ token : "comment", // closing comment
+ regex : ".*?\\*\\/",
+ next : "start"
+ }, {
+ token : "comment", // comment spanning whole line
+ merge : true,
+ regex : ".+"
+ }
+ ],
+ "qqstring" : [
+ {
+ token : "string",
+ regex : '(?:(?:\\\\.)|(?:[^"\\\\]))*?"',
+ next : "start"
+ }, {
+ token : "string",
+ merge : true,
+ regex : '.+'
+ }
+ ],
+ "qstring" : [
+ {
+ token : "string",
+ regex : "(?:(?:\\\\.)|(?:[^'\\\\]))*?'",
+ next : "start"
+ }, {
+ token : "string",
+ merge : true,
+ regex : '.+'
+ }
+ ]
+ };
+
+ this.embedRules(DocCommentHighlightRules, "doc-",
+ [ new DocCommentHighlightRules().getEndRule("start") ]);
+};
+
+oop.inherits(c_cppHighlightRules, TextHighlightRules);
+
+exports.c_cppHighlightRules = c_cppHighlightRules;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/doc_comment_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var DocCommentHighlightRules = function() {
+
+ this.$rules = {
+ "start" : [ {
+ token : "comment.doc.tag",
+ regex : "@[\\w\\d_]+" // TODO: fix email addresses
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "\\s+"
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "TODO"
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "[^@\\*]+"
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "."
+ }]
+ };
+};
+
+oop.inherits(DocCommentHighlightRules, TextHighlightRules);
+
+(function() {
+
+ this.getStartRule = function(start) {
+ return {
+ token : "comment.doc", // doc comment
+ merge : true,
+ regex : "\\/\\*(?=\\*)",
+ next : start
+ };
+ };
+
+ this.getEndRule = function (start) {
+ return {
+ token : "comment.doc", // closing comment
+ merge : true,
+ regex : "\\*\\/",
+ next : start
+ };
+ };
+
+}).call(DocCommentHighlightRules.prototype);
+
+exports.DocCommentHighlightRules = DocCommentHighlightRules;
+
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var Range = require("../range").Range;
+
+var MatchingBraceOutdent = function() {};
+
+(function() {
+
+ this.checkOutdent = function(line, input) {
+ if (! /^\s+$/.test(line))
+ return false;
+
+ return /^\s*\}/.test(input);
+ };
+
+ this.autoOutdent = function(doc, row) {
+ var line = doc.getLine(row);
+ var match = line.match(/^(\s*\})/);
+
+ if (!match) return 0;
+
+ var column = match[1].length;
+ var openBracePos = doc.findMatchingBracket({row: row, column: column});
+
+ if (!openBracePos || openBracePos.row == row) return 0;
+
+ var indent = this.$getIndent(doc.getLine(openBracePos.row));
+ doc.replace(new Range(row, 0, row, column-1), indent);
+ };
+
+ this.$getIndent = function(line) {
+ var match = line.match(/^(\s+)/);
+ if (match) {
+ return match[1];
+ }
+
+ return "";
+ };
+
+}).call(MatchingBraceOutdent.prototype);
+
+exports.MatchingBraceOutdent = MatchingBraceOutdent;
+});
+/* vim:ts=4:sts=4:sw=4:
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Chris Spencer <chris.ag.spencer AT googlemail DOT com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/behaviour/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var Behaviour = require('../behaviour').Behaviour;
+
+var CstyleBehaviour = function () {
+
+ this.add("braces", "insertion", function (state, action, editor, session, text) {
+ if (text == '{') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '{' + selected + '}',
+ selection: false
+ }
+ } else {
+ return {
+ text: '{}',
+ selection: [1, 1]
+ }
+ }
+ } else if (text == '}') {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '}') {
+ var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});
+ if (matching !== null) {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ } else if (text == "\n") {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '}') {
+ var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column + 1});
+ if (!openBracePos)
+ return null;
+
+ var indent = this.getNextLineIndent(state, line.substring(0, line.length - 1), session.getTabString());
+ var next_indent = this.$getIndent(session.doc.getLine(openBracePos.row));
+
+ return {
+ text: '\n' + indent + '\n' + next_indent,
+ selection: [1, indent.length, 1, indent.length]
+ }
+ }
+ }
+ });
+
+ this.add("braces", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '{') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.end.column, range.end.column + 1);
+ if (rightChar == '}') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+ this.add("parens", "insertion", function (state, action, editor, session, text) {
+ if (text == '(') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '(' + selected + ')',
+ selection: false
+ }
+ } else {
+ return {
+ text: '()',
+ selection: [1, 1]
+ }
+ }
+ } else if (text == ')') {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == ')') {
+ var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});
+ if (matching !== null) {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ }
+ });
+
+ this.add("parens", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '(') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
+ if (rightChar == ')') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+ this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {
+ if (text == '"') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '"' + selected + '"',
+ selection: false
+ }
+ } else {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var leftChar = line.substring(cursor.column-1, cursor.column);
+
+ // We're escaped.
+ if (leftChar == '\\') {
+ return null;
+ }
+
+ // Find what token we're inside.
+ var tokens = session.getTokens(selection.start.row, selection.start.row)[0].tokens;
+ var col = 0, token;
+ var quotepos = -1; // Track whether we're inside an open quote.
+
+ for (var x = 0; x < tokens.length; x++) {
+ token = tokens[x];
+ if (token.type == "string") {
+ quotepos = -1;
+ } else if (quotepos < 0) {
+ quotepos = token.value.indexOf('"');
+ }
+ if ((token.value.length + col) > selection.start.column) {
+ break;
+ }
+ col += tokens[x].value.length;
+ }
+
+ // Try and be smart about when we auto insert.
+ if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf('"') === token.value.length-1)))) {
+ return {
+ text: '""',
+ selection: [1,1]
+ }
+ } else if (token && token.type === "string") {
+ // Ignore input and move right one if we're typing over the closing quote.
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '"') {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ }
+ }
+ });
+
+ this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '"') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
+ if (rightChar == '"') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+}
+oop.inherits(CstyleBehaviour, Behaviour);
+
+exports.CstyleBehaviour = CstyleBehaviour;
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var Range = require("../../range").Range;
+var BaseFoldMode = require("./fold_mode").FoldMode;
+
+var FoldMode = exports.FoldMode = function() {};
+oop.inherits(FoldMode, BaseFoldMode);
+
+(function() {
+
+ this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
+ this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ var line = session.getLine(row);
+ var match = line.match(this.foldingStartMarker);
+ if (match) {
+ var i = match.index;
+
+ if (match[1])
+ return this.openingBracketBlock(session, match[1], row, i);
+
+ var range = session.getCommentFoldRange(row, i + match[0].length);
+ range.end.column -= 2;
+ return range;
+ }
+
+ if (foldStyle !== "markbeginend")
+ return;
+
+ var match = line.match(this.foldingStopMarker);
+ if (match) {
+ var i = match.index + match[0].length;
+
+ if (match[2]) {
+ var range = session.getCommentFoldRange(row, i);
+ range.end.column -= 2;
+ return range;
+ }
+
+ var end = {row: row, column: i};
+ var start = session.$findOpeningBracket(match[1], end);
+
+ if (!start)
+ return;
+
+ start.column++;
+ end.column--;
+
+ return Range.fromPoints(start, end);
+ }
+ };
+
+}).call(FoldMode.prototype);
+
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/fold_mode', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var Range = require("../../range").Range;
+
+var FoldMode = exports.FoldMode = function() {};
+
+(function() {
+
+ this.foldingStartMarker = null;
+ this.foldingStopMarker = null;
+
+ // must return "" if there's no fold, to enable caching
+ this.getFoldWidget = function(session, foldStyle, row) {
+ var line = session.getLine(row);
+ if (this.foldingStartMarker.test(line))
+ return "start";
+ if (foldStyle == "markbeginend"
+ && this.foldingStopMarker
+ && this.foldingStopMarker.test(line))
+ return "end";
+ return "";
+ };
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ return null;
+ };
+
+ this.indentationBlock = function(session, row, column) {
+ var re = /^\s*/;
+ var startRow = row;
+ var endRow = row;
+ var line = session.getLine(row);
+ var startColumn = column || line.length;
+ var startLevel = line.match(re)[0].length;
+ var maxRow = session.getLength()
+
+ while (++row < maxRow) {
+ line = session.getLine(row);
+ var level = line.match(re)[0].length;
+
+ if (level == line.length)
+ continue;
+
+ if (level <= startLevel)
+ break;
+
+ endRow = row;
+ }
+
+ if (endRow > startRow) {
+ var endColumn = session.getLine(endRow).length;
+ return new Range(startRow, startColumn, endRow, endColumn);
+ }
+ };
+
+ this.openingBracketBlock = function(session, bracket, row, column) {
+ var start = {row: row, column: column + 1};
+ var end = session.$findClosingBracket(bracket, start);
+ if (!end)
+ return;
+
+ var fw = session.foldWidgets[end.row];
+ if (fw == null)
+ fw = this.getFoldWidget(session, end.row);
+
+ if (fw == "start") {
+ end.row --;
+ end.column = session.getLine(end.row).length;
+ }
+ return Range.fromPoints(start, end);
+ };
+
+}).call(FoldMode.prototype);
+
+});
+;
+ (function() {
+ window.require(["ace/ace"], function(a) {
+ if (!window.ace)
+ window.ace = {};
+ for (var key in a) if (a.hasOwnProperty(key))
+ ace[key] = a[key];
+ });
+ })();
+ \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-c_cpp.js b/apps/files_texteditor/js/aceeditor/mode-c_cpp.js
index 6122ba5e902..c49e93eb937 100644
--- a/apps/files_texteditor/js/aceeditor/mode-c_cpp.js
+++ b/apps/files_texteditor/js/aceeditor/mode-c_cpp.js
@@ -1 +1 @@
-define("ace/mode/c_cpp",["require","exports","module","pilot/oop","ace/mode/text","ace/tokenizer","ace/mode/c_cpp_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/mode/behaviour/cstyle"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/text").Mode,f=a("ace/tokenizer").Tokenizer,g=a("ace/mode/c_cpp_highlight_rules").c_cppHighlightRules,h=a("ace/mode/matching_brace_outdent").MatchingBraceOutdent,i=a("ace/range").Range,j=a("ace/mode/behaviour/cstyle").CstyleBehaviour,k=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h,this.$behaviour=new j};d.inherits(k,e),function(){this.toggleCommentLines=function(a,b,c,d){var e=!0,f=[],g=/^(\s*)\/\//;for(var h=c;h<=d;h++)if(!g.test(b.getLine(h))){e=!1;break}if(e){var j=new i(0,0,0,0);for(var h=c;h<=d;h++){var k=b.getLine(h),l=k.match(g);j.start.row=h,j.end.row=h,j.end.column=l[0].length,b.replace(j,l[1])}}else b.indentRows(c,d,"//")},this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=this.$tokenizer.getLineTokens(b,a),f=e.tokens,g=e.state;if(f.length&&f[f.length-1].type=="comment")return d;if(a=="start"){var h=b.match(/^.*[\{\(\[]\s*$/);h&&(d+=c)}else if(a=="doc-start"){if(g=="start")return"";var h=b.match(/^\s*(\/?)\*/);h&&(h[1]&&(d+=" "),d+="* ")}return d},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)}}.call(k.prototype),b.Mode=k}),define("ace/mode/c_cpp_highlight_rules",["require","exports","module","pilot/oop","pilot/lang","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(a,b,c){var d=a("pilot/oop"),e=a("pilot/lang"),f=a("ace/mode/doc_comment_highlight_rules").DocCommentHighlightRules,g=a("ace/mode/text_highlight_rules").TextHighlightRules,h=function(){var a=e.arrayToMap("and|double|not_eq|throw|and_eq|dynamic_cast|operator|true|asm|else|or|try|auto|enum|or_eq|typedef|bitand|explicit|private|typeid|bitor|extern|protected|typename|bool|false|public|union|break|float|register|unsigned|case|fro|reinterpret-cast|using|catch|friend|return|virtual|char|goto|short|void|class|if|signed|volatile|compl|inline|sizeof|wchar_t|const|int|static|while|const-cast|long|static_cast|xor|continue|mutable|struct|xor_eq|default|namespace|switch|delete|new|template|do|not|this|for".split("|")),b=e.arrayToMap("NULL".split("|"));this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},(new f).getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",merge:!0,regex:'["].*\\\\$',next:"qqstring"},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"string",merge:!0,regex:"['].*\\\\$",next:"qstring"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant",regex:"<[a-zA-Z0-9.]+>"},{token:"keyword",regex:"(?:#include|#pragma|#line|#define|#undef|#ifdef|#else|#elif|#endif|#ifndef)"},{token:function(c){return c=="this"?"variable.language":a.hasOwnProperty(c)?"keyword":b.hasOwnProperty(c)?"constant.language":"identifier"},regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|new|delete|typeof|void)"},{token:"lparen",regex:"[[({]"},{token:"rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"string",regex:'(?:(?:\\\\.)|(?:[^"\\\\]))*?"',next:"start"},{token:"string",merge:!0,regex:".+"}],qstring:[{token:"string",regex:"(?:(?:\\\\.)|(?:[^'\\\\]))*?'",next:"start"},{token:"string",merge:!0,regex:".+"}]},this.embedRules(f,"doc-",[(new f).getEndRule("start")])};d.inherits(h,g),b.c_cppHighlightRules=h}),define("ace/mode/doc_comment_highlight_rules",["require","exports","module","pilot/oop","ace/mode/text_highlight_rules"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/text_highlight_rules").TextHighlightRules,f=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};d.inherits(f,e),function(){this.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},this.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}}}.call(f.prototype),b.DocCommentHighlightRules=f}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(a,b,c){var d=a("ace/range").Range,e=function(){};(function(){this.checkOutdent=function(a,b){return/^\s+$/.test(a)?/^\s*\}/.test(b):!1},this.autoOutdent=function(a,b){var c=a.getLine(b),e=c.match(/^(\s*\})/);if(!e)return 0;var f=e[1].length,g=a.findMatchingBracket({row:b,column:f});if(!g||g.row==b)return 0;var h=this.$getIndent(a.getLine(g.row));a.replace(new d(b,0,b,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""}}).call(e.prototype),b.MatchingBraceOutdent=e}),define("ace/mode/behaviour/cstyle",["require","exports","module","pilot/oop","ace/mode/behaviour"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/behaviour").Behaviour,f=function(){this.add("braces","insertion",function(a,b,c,d,e){if(e=="{"){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"{"+g+"}",selection:!1}:{text:"{}",selection:[1,1]}}if(e=="}"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var k=d.$findOpeningBracket("}",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}else if(e=="\n"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var l=d.findMatchingBracket({row:h.row,column:h.column+1});if(!l)return!1;var m=this.getNextLineIndent(a,i.substring(0,i.length-1),d.getTabString()),n=this.$getIndent(d.doc.getLine(l.row));return{text:"\n"+m+"\n"+n,selection:[1,m.length,1,m.length]}}}return!1}),this.add("braces","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="{"){var g=d.doc.getLine(e.start.row),h=g.substring(e.end.column,e.end.column+1);if(h=="}"){e.end.column++;return e}}return!1}),this.add("parens","insertion",function(a,b,c,d,e){if(e=="("){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"("+g+")",selection:!1}:{text:"()",selection:[1,1]}}if(e==")"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j==")"){var k=d.$findOpeningBracket(")",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}return!1}),this.add("parens","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="("){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h==")"){e.end.column++;return e}}return!1}),this.add("string_dquotes","insertion",function(a,b,c,d,e){if(e=='"'){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);if(g!=="")return{text:'"'+g+'"',selection:!1};var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column-1,h.column);if(j=="\\")return!1;var k=d.getTokens(f.start.row,f.start.row)[0].tokens,l=0,m,n=-1;for(var o=0;o<k.length;o++){m=k[o],m.type=="string"?n=-1:n<0&&(n=m.value.indexOf('"'));if(m.value.length+l>f.start.column)break;l+=k[o].value.length}if(!m||n<0&&m.type!=="comment"&&(m.type!=="string"||f.start.column!==m.value.length+l-1&&m.value.lastIndexOf('"')===m.value.length-1))return{text:'""',selection:[1,1]};if(m&&m.type==="string"){var p=i.substring(h.column,h.column+1);if(p=='"')return{text:"",selection:[1,1]}}}return!1}),this.add("string_dquotes","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=='"'){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h=='"'){e.end.column++;return e}}return!1})};d.inherits(f,e),b.CstyleBehaviour=f}) \ No newline at end of file
+define("ace/mode/c_cpp",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/c_cpp_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text").Mode,f=a("../tokenizer").Tokenizer,g=a("./c_cpp_highlight_rules").c_cppHighlightRules,h=a("./matching_brace_outdent").MatchingBraceOutdent,i=a("../range").Range,j=a("./behaviour/cstyle").CstyleBehaviour,k=a("./folding/cstyle").FoldMode,l=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h,this.$behaviour=new j,this.foldingRules=new k};d.inherits(l,e),function(){this.toggleCommentLines=function(a,b,c,d){var e=!0,f=/^(\s*)\/\//;for(var g=c;g<=d;g++)if(!f.test(b.getLine(g))){e=!1;break}if(e){var h=new i(0,0,0,0);for(var g=c;g<=d;g++){var j=b.getLine(g),k=j.match(f);h.start.row=g,h.end.row=g,h.end.column=k[0].length,b.replace(h,k[1])}}else b.indentRows(c,d,"//")},this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=this.$tokenizer.getLineTokens(b,a),f=e.tokens,g=e.state;if(f.length&&f[f.length-1].type=="comment")return d;if(a=="start"){var h=b.match(/^.*[\{\(\[]\s*$/);h&&(d+=c)}else if(a=="doc-start"){if(g=="start")return"";var h=b.match(/^\s*(\/?)\*/);h&&(h[1]&&(d+=" "),d+="* ")}return d},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)}}.call(l.prototype),b.Mode=l}),define("ace/mode/c_cpp_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("../lib/lang"),f=a("./doc_comment_highlight_rules").DocCommentHighlightRules,g=a("./text_highlight_rules").TextHighlightRules,h=function(){var a=e.arrayToMap("and|double|not_eq|throw|and_eq|dynamic_cast|operator|true|asm|else|or|try|auto|enum|or_eq|typedef|bitand|explicit|private|typeid|bitor|extern|protected|typename|bool|false|public|union|break|float|register|unsigned|case|fro|reinterpret-cast|using|catch|friend|return|virtual|char|goto|short|void|class|if|signed|volatile|compl|inline|sizeof|wchar_t|const|int|static|while|const-cast|long|static_cast|xor|continue|mutable|struct|xor_eq|default|namespace|switch|delete|new|template|do|not|this|for".split("|")),b=e.arrayToMap("NULL".split("|"));this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},(new f).getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",merge:!0,regex:'["].*\\\\$',next:"qqstring"},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"string",merge:!0,regex:"['].*\\\\$",next:"qstring"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant",regex:"<[a-zA-Z0-9.]+>"},{token:"keyword",regex:"(?:#include|#pragma|#line|#define|#undef|#ifdef|#else|#elif|#endif|#ifndef)"},{token:function(c){return c=="this"?"variable.language":a.hasOwnProperty(c)?"keyword":b.hasOwnProperty(c)?"constant.language":"identifier"},regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|new|delete|typeof|void)"},{token:"punctuation.operator",regex:"\\?|\\:|\\,|\\;|\\."},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"string",regex:'(?:(?:\\\\.)|(?:[^"\\\\]))*?"',next:"start"},{token:"string",merge:!0,regex:".+"}],qstring:[{token:"string",regex:"(?:(?:\\\\.)|(?:[^'\\\\]))*?'",next:"start"},{token:"string",merge:!0,regex:".+"}]},this.embedRules(f,"doc-",[(new f).getEndRule("start")])};d.inherits(h,g),b.c_cppHighlightRules=h}),define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text_highlight_rules").TextHighlightRules,f=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};d.inherits(f,e),function(){this.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},this.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}}}.call(f.prototype),b.DocCommentHighlightRules=f}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(a,b,c){"use strict";var d=a("../range").Range,e=function(){};((function(){this.checkOutdent=function(a,b){return/^\s+$/.test(a)?/^\s*\}/.test(b):!1},this.autoOutdent=function(a,b){var c=a.getLine(b),e=c.match(/^(\s*\})/);if(!e)return 0;var f=e[1].length,g=a.findMatchingBracket({row:b,column:f});if(!g||g.row==b)return 0;var h=this.$getIndent(a.getLine(g.row));a.replace(new d(b,0,b,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""}})).call(e.prototype),b.MatchingBraceOutdent=e}),define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("../behaviour").Behaviour,f=function(){this.add("braces","insertion",function(a,b,c,d,e){if(e=="{"){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"{"+g+"}",selection:!1}:{text:"{}",selection:[1,1]}}if(e=="}"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var k=d.$findOpeningBracket("}",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}else if(e=="\n"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var l=d.findMatchingBracket({row:h.row,column:h.column+1});if(!l)return null;var m=this.getNextLineIndent(a,i.substring(0,i.length-1),d.getTabString()),n=this.$getIndent(d.doc.getLine(l.row));return{text:"\n"+m+"\n"+n,selection:[1,m.length,1,m.length]}}}}),this.add("braces","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="{"){var g=d.doc.getLine(e.start.row),h=g.substring(e.end.column,e.end.column+1);if(h=="}")return e.end.column++,e}}),this.add("parens","insertion",function(a,b,c,d,e){if(e=="("){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"("+g+")",selection:!1}:{text:"()",selection:[1,1]}}if(e==")"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j==")"){var k=d.$findOpeningBracket(")",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="("){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h==")")return e.end.column++,e}}),this.add("string_dquotes","insertion",function(a,b,c,d,e){if(e=='"'){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);if(g!=="")return{text:'"'+g+'"',selection:!1};var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column-1,h.column);if(j=="\\")return null;var k=d.getTokens(f.start.row,f.start.row)[0].tokens,l=0,m,n=-1;for(var o=0;o<k.length;o++){m=k[o],m.type=="string"?n=-1:n<0&&(n=m.value.indexOf('"'));if(m.value.length+l>f.start.column)break;l+=k[o].value.length}if(!m||n<0&&m.type!=="comment"&&(m.type!=="string"||f.start.column!==m.value.length+l-1&&m.value.lastIndexOf('"')===m.value.length-1))return{text:'""',selection:[1,1]};if(m&&m.type==="string"){var p=i.substring(h.column,h.column+1);if(p=='"')return{text:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=='"'){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h=='"')return e.end.column++,e}})};d.inherits(f,e),b.CstyleBehaviour=f}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("../../range").Range,f=a("./fold_mode").FoldMode,g=b.FoldMode=function(){};d.inherits(g,f),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(a,b,c){var d=a.getLine(c),f=d.match(this.foldingStartMarker);if(f){var g=f.index;if(f[1])return this.openingBracketBlock(a,f[1],c,g);var h=a.getCommentFoldRange(c,g+f[0].length);return h.end.column-=2,h}if(b!=="markbeginend")return;var f=d.match(this.foldingStopMarker);if(f){var g=f.index+f[0].length;if(f[2]){var h=a.getCommentFoldRange(c,g);return h.end.column-=2,h}var i={row:c,column:g},j=a.$findOpeningBracket(f[1],i);if(!j)return;return j.column++,i.column--,e.fromPoints(j,i)}}}.call(g.prototype)}),define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"],function(a,b,c){"use strict";var d=a("../../range").Range,e=b.FoldMode=function(){};((function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(a,b,c){var d=a.getLine(c);return this.foldingStartMarker.test(d)?"start":b=="markbeginend"&&this.foldingStopMarker&&this.foldingStopMarker.test(d)?"end":""},this.getFoldWidgetRange=function(a,b,c){return null},this.indentationBlock=function(a,b,c){var e=/^\s*/,f=b,g=b,h=a.getLine(b),i=c||h.length,j=h.match(e)[0].length,k=a.getLength();while(++b<k){h=a.getLine(b);var l=h.match(e)[0].length;if(l==h.length)continue;if(l<=j)break;g=b}if(g>f){var m=a.getLine(g).length;return new d(f,i,g,m)}},this.openingBracketBlock=function(a,b,c,e){var f={row:c,column:e+1},g=a.$findClosingBracket(b,f);if(!g)return;var h=a.foldWidgets[g.row];return h==null&&(h=this.getFoldWidget(a,g.row)),h=="start"&&(g.row--,g.column=a.getLine(g.row).length),d.fromPoints(f,g)}})).call(e.prototype)}),function(){window.require(["ace/ace"],function(a){window.ace||(window.ace={});for(var b in a)a.hasOwnProperty(b)&&(ace[b]=a[b])})}() \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-clojure-uncompressed.js b/apps/files_texteditor/js/aceeditor/mode-clojure-uncompressed.js
new file mode 100755
index 00000000000..eb99ceb3eea
--- /dev/null
+++ b/apps/files_texteditor/js/aceeditor/mode-clojure-uncompressed.js
@@ -0,0 +1,432 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ * Shlomo Zalman Heigh <shlomozalmanheigh AT gmail DOT com>
+ * Carin Meier
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/clojure', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/clojure_highlight_rules', 'ace/mode/matching_parens_outdent', 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextMode = require("./text").Mode;
+var Tokenizer = require("../tokenizer").Tokenizer;
+var ClojureHighlightRules = require("./clojure_highlight_rules").ClojureHighlightRules;
+var MatchingParensOutdent = require("./matching_parens_outdent").MatchingParensOutdent;
+var Range = require("../range").Range;
+
+var Mode = function() {
+ this.$tokenizer = new Tokenizer(new ClojureHighlightRules().getRules());
+ this.$outdent = new MatchingParensOutdent();
+};
+oop.inherits(Mode, TextMode);
+
+(function() {
+
+ this.toggleCommentLines = function(state, doc, startRow, endRow) {
+ var outdent = true;
+ var re = /^(\s*)#/;
+
+ for (var i=startRow; i<= endRow; i++) {
+ if (!re.test(doc.getLine(i))) {
+ outdent = false;
+ break;
+ }
+ }
+
+ if (outdent) {
+ var deleteRange = new Range(0, 0, 0, 0);
+ for (var i=startRow; i<= endRow; i++)
+ {
+ var line = doc.getLine(i);
+ var m = line.match(re);
+ deleteRange.start.row = i;
+ deleteRange.end.row = i;
+ deleteRange.end.column = m[0].length;
+ doc.replace(deleteRange, m[1]);
+ }
+ }
+ else {
+ doc.indentRows(startRow, endRow, ";");
+ }
+ };
+
+ this.getNextLineIndent = function(state, line, tab) {
+ var indent = this.$getIndent(line);
+
+ var tokenizedLine = this.$tokenizer.getLineTokens(line, state);
+ var tokens = tokenizedLine.tokens;
+
+ if (tokens.length && tokens[tokens.length-1].type == "comment") {
+ return indent;
+ }
+
+ if (state == "start") {
+ var match = line.match(/[\(\[]/);
+ if (match) {
+ indent += " ";
+ }
+ match = line.match(/[\)]/);
+ if (match) {
+ indent = "";
+ }
+ }
+
+ return indent;
+ };
+
+ this.checkOutdent = function(state, line, input) {
+ return this.$outdent.checkOutdent(line, input);
+ };
+
+ this.autoOutdent = function(state, doc, row) {
+ this.$outdent.autoOutdent(doc, row);
+ };
+
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ * Shlomo Zalman Heigh <shlomozalmanheigh AT gmail DOT com>
+ * Carin Meier
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/clojure_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var lang = require("../lib/lang");
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+
+
+var ClojureHighlightRules = function() {
+
+ var builtinFunctions = lang.arrayToMap(
+ ('* *1 *2 *3 *agent* *allow-unresolved-vars* *assert* *clojure-version* ' +
+ '*command-line-args* *compile-files* *compile-path* *e *err* *file* ' +
+ '*flush-on-newline* *in* *macro-meta* *math-context* *ns* *out* ' +
+ '*print-dup* *print-length* *print-level* *print-meta* *print-readably* ' +
+ '*read-eval* *source-path* *use-context-classloader* ' +
+ '*warn-on-reflection* + - -> -&gt; ->> -&gt;&gt; .. / < &lt; <= &lt;= = ' +
+ '== > &gt; >= &gt;= accessor aclone ' +
+ 'add-classpath add-watch agent agent-errors aget alength alias all-ns ' +
+ 'alter alter-meta! alter-var-root amap ancestors and apply areduce ' +
+ 'array-map aset aset-boolean aset-byte aset-char aset-double aset-float ' +
+ 'aset-int aset-long aset-short assert assoc assoc! assoc-in associative? ' +
+ 'atom await await-for await1 bases bean bigdec bigint binding bit-and ' +
+ 'bit-and-not bit-clear bit-flip bit-not bit-or bit-set bit-shift-left ' +
+ 'bit-shift-right bit-test bit-xor boolean boolean-array booleans ' +
+ 'bound-fn bound-fn* butlast byte byte-array bytes cast char char-array ' +
+ 'char-escape-string char-name-string char? chars chunk chunk-append ' +
+ 'chunk-buffer chunk-cons chunk-first chunk-next chunk-rest chunked-seq? ' +
+ 'class class? clear-agent-errors clojure-version coll? comment commute ' +
+ 'comp comparator compare compare-and-set! compile complement concat cond ' +
+ 'condp conj conj! cons constantly construct-proxy contains? count ' +
+ 'counted? create-ns create-struct cycle dec decimal? declare definline ' +
+ 'defmacro defmethod defmulti defn defn- defonce defstruct delay delay? ' +
+ 'deliver deref derive descendants destructure disj disj! dissoc dissoc! ' +
+ 'distinct distinct? doall doc dorun doseq dosync dotimes doto double ' +
+ 'double-array doubles drop drop-last drop-while empty empty? ensure ' +
+ 'enumeration-seq eval even? every? false? ffirst file-seq filter find ' +
+ 'find-doc find-ns find-var first float float-array float? floats flush ' +
+ 'fn fn? fnext for force format future future-call future-cancel ' +
+ 'future-cancelled? future-done? future? gen-class gen-interface gensym ' +
+ 'get get-in get-method get-proxy-class get-thread-bindings get-validator ' +
+ 'hash hash-map hash-set identical? identity if-let if-not ifn? import ' +
+ 'in-ns inc init-proxy instance? int int-array integer? interleave intern ' +
+ 'interpose into into-array ints io! isa? iterate iterator-seq juxt key ' +
+ 'keys keyword keyword? last lazy-cat lazy-seq let letfn line-seq list ' +
+ 'list* list? load load-file load-reader load-string loaded-libs locking ' +
+ 'long long-array longs loop macroexpand macroexpand-1 make-array ' +
+ 'make-hierarchy map map? mapcat max max-key memfn memoize merge ' +
+ 'merge-with meta method-sig methods min min-key mod name namespace neg? ' +
+ 'newline next nfirst nil? nnext not not-any? not-empty not-every? not= ' +
+ 'ns ns-aliases ns-imports ns-interns ns-map ns-name ns-publics ' +
+ 'ns-refers ns-resolve ns-unalias ns-unmap nth nthnext num number? odd? ' +
+ 'or parents partial partition pcalls peek persistent! pmap pop pop! ' +
+ 'pop-thread-bindings pos? pr pr-str prefer-method prefers ' +
+ 'primitives-classnames print print-ctor print-doc print-dup print-method ' +
+ 'print-namespace-doc print-simple print-special-doc print-str printf ' +
+ 'println println-str prn prn-str promise proxy proxy-call-with-super ' +
+ 'proxy-mappings proxy-name proxy-super push-thread-bindings pvalues quot ' +
+ 'rand rand-int range ratio? rational? rationalize re-find re-groups ' +
+ 're-matcher re-matches re-pattern re-seq read read-line read-string ' +
+ 'reduce ref ref-history-count ref-max-history ref-min-history ref-set ' +
+ 'refer refer-clojure release-pending-sends rem remove remove-method ' +
+ 'remove-ns remove-watch repeat repeatedly replace replicate require ' +
+ 'reset! reset-meta! resolve rest resultset-seq reverse reversible? rseq ' +
+ 'rsubseq second select-keys send send-off seq seq? seque sequence ' +
+ 'sequential? set set-validator! set? short short-array shorts ' +
+ 'shutdown-agents slurp some sort sort-by sorted-map sorted-map-by ' +
+ 'sorted-set sorted-set-by sorted? special-form-anchor special-symbol? ' +
+ 'split-at split-with str stream? string? struct struct-map subs subseq ' +
+ 'subvec supers swap! symbol symbol? sync syntax-symbol-anchor take ' +
+ 'take-last take-nth take-while test the-ns time to-array to-array-2d ' +
+ 'trampoline transient tree-seq true? type unchecked-add unchecked-dec ' +
+ 'unchecked-divide unchecked-inc unchecked-multiply unchecked-negate ' +
+ 'unchecked-remainder unchecked-subtract underive unquote ' +
+ 'unquote-splicing update-in update-proxy use val vals var-get var-set ' +
+ 'var? vary-meta vec vector vector? when when-first when-let when-not ' +
+ 'while with-bindings with-bindings* with-in-str with-loading-context ' +
+ 'with-local-vars with-meta with-open with-out-str with-precision xml-seq ' +
+ 'zero? zipmap ').split(" ")
+ );
+
+ var keywords = lang.arrayToMap(
+ ('def do fn if let loop monitor-enter monitor-exit new quote recur set! ' +
+ 'throw try var').split(" ")
+ );
+
+ var buildinConstants = lang.arrayToMap(
+ ("true false nil").split(" ")
+ );
+
+
+ // regexp must not have capturing parentheses. Use (?:) instead.
+ // regexps are ordered -> the first match is used
+
+ this.$rules = {
+ "start" : [
+ {
+ token : "comment",
+ regex : ";.*$"
+ }, {
+ token : "comment", // multi line comment
+ regex : "^\=begin$",
+ next : "comment"
+ }, {
+ token : "keyword", //parens
+ regex : "[\\(|\\)]"
+ }, {
+ token : "keyword", //lists
+ regex : "[\\'\\(]"
+ }, {
+ token : "keyword", //vectors
+ regex : "[\\[|\\]]"
+ }, {
+ token : "keyword", //sets and maps
+ regex : "[\\{|\\}|\\#\\{|\\#\\}]"
+ }, {
+ token : "keyword", // ampersands
+ regex : '[\\&]'
+ }, {
+ token : "keyword", // metadata
+ regex : '[\\#\\^\\{]'
+ }, {
+ token : "keyword", // anonymous fn syntactic sugar
+ regex : '[\\%]'
+ }, {
+ token : "keyword", // deref reader macro
+ regex : '[@]'
+ }, {
+ token : "constant.numeric", // hex
+ regex : "0[xX][0-9a-fA-F]+\\b"
+ }, {
+ token : "constant.numeric", // float
+ regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
+ }, {
+ token : "constant.language",
+ regex : '[!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+||=|!=|<=|>=|<>|<|>|!|&&]'
+ }, {
+ token : function(value) {
+ if (keywords.hasOwnProperty(value))
+ return "keyword";
+ else if (buildinConstants.hasOwnProperty(value))
+ return "constant.language";
+ else if (builtinFunctions.hasOwnProperty(value))
+ return "support.function";
+ else
+ return "identifier";
+ },
+ // TODO: Unicode escape sequences
+ // TODO: Unicode identifiers
+ regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
+ }, {
+ token : "string", // single line
+ regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
+ }, {
+ token : "string", // symbol
+ regex : "[:](?:[a-zA-Z]|\d)+"
+ }, {
+ token : "string.regexp", //Regular Expressions
+ regex : '/#"(?:\.|(\\\")|[^\""\n])*"/g'
+ }
+
+ ],
+ "comment" : [
+ {
+ token : "comment", // closing comment
+ regex : "^\=end$",
+ next : "start"
+ }, {
+ token : "comment", // comment spanning whole line
+ merge : true,
+ regex : ".+"
+ }
+ ]
+ };
+};
+
+oop.inherits(ClojureHighlightRules, TextHighlightRules);
+
+exports.ClojureHighlightRules = ClojureHighlightRules;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/matching_parens_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var Range = require("../range").Range;
+
+var MatchingParensOutdent = function() {};
+
+(function() {
+
+ this.checkOutdent = function(line, input) {
+ if (! /^\s+$/.test(line))
+ return false;
+
+ return /^\s*\)/.test(input);
+ };
+
+ this.autoOutdent = function(doc, row) {
+ var line = doc.getLine(row);
+ var match = line.match(/^(\s*\))/);
+
+ if (!match) return 0;
+
+ var column = match[1].length;
+ var openBracePos = doc.findMatchingBracket({row: row, column: column});
+
+ if (!openBracePos || openBracePos.row == row) return 0;
+
+ var indent = this.$getIndent(doc.getLine(openBracePos.row));
+ doc.replace(new Range(row, 0, row, column-1), indent);
+ };
+
+ this.$getIndent = function(line) {
+ var match = line.match(/^(\s+)/);
+ if (match) {
+ return match[1];
+ }
+
+ return "";
+ };
+
+}).call(MatchingParensOutdent.prototype);
+
+exports.MatchingParensOutdent = MatchingParensOutdent;
+});
+;
+ (function() {
+ window.require(["ace/ace"], function(a) {
+ if (!window.ace)
+ window.ace = {};
+ for (var key in a) if (a.hasOwnProperty(key))
+ ace[key] = a[key];
+ });
+ })();
+ \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-clojure.js b/apps/files_texteditor/js/aceeditor/mode-clojure.js
index 726de0c2be0..74e69fb0086 100644
--- a/apps/files_texteditor/js/aceeditor/mode-clojure.js
+++ b/apps/files_texteditor/js/aceeditor/mode-clojure.js
@@ -1 +1 @@
-define("ace/mode/clojure",["require","exports","module","pilot/oop","ace/mode/text","ace/tokenizer","ace/mode/clojure_highlight_rules","ace/mode/matching_parens_outdent","ace/range"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/text").Mode,f=a("ace/tokenizer").Tokenizer,g=a("ace/mode/clojure_highlight_rules").ClojureHighlightRules,h=a("ace/mode/matching_parens_outdent").MatchingParensOutdent,i=a("ace/range").Range,j=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h};d.inherits(j,e),function(){this.toggleCommentLines=function(a,b,c,d){var e=!0,f=[],g=/^(\s*)#/;for(var h=c;h<=d;h++)if(!g.test(b.getLine(h))){e=!1;break}if(e){var j=new i(0,0,0,0);for(var h=c;h<=d;h++){var k=b.getLine(h),l=k.match(g);j.start.row=h,j.end.row=h,j.end.column=l[0].length,b.replace(j,l[1])}}else b.indentRows(c,d,";")},this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=d,f=this.$tokenizer.getLineTokens(b,a),g=f.tokens,h=f.state;if(g.length&&g[g.length-1].type=="comment")return d;if(a=="start"){var i=b.match(/[\(\[]/);i&&(d+=" "),i=b.match(/[\)]/),i&&(d="")}return d},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)}}.call(j.prototype),b.Mode=j}),define("ace/mode/clojure_highlight_rules",["require","exports","module","pilot/oop","pilot/lang","ace/mode/text_highlight_rules"],function(a,b,c){var d=a("pilot/oop"),e=a("pilot/lang"),f=a("ace/mode/text_highlight_rules").TextHighlightRules,g=function(){var a=e.arrayToMap("* *1 *2 *3 *agent* *allow-unresolved-vars* *assert* *clojure-version* *command-line-args* *compile-files* *compile-path* *e *err* *file* *flush-on-newline* *in* *macro-meta* *math-context* *ns* *out* *print-dup* *print-length* *print-level* *print-meta* *print-readably* *read-eval* *source-path* *use-context-classloader* *warn-on-reflection* + - -> -&gt; ->> -&gt;&gt; .. / < &lt; <= &lt;= = == > &gt; >= &gt;= accessor aclone add-classpath add-watch agent agent-errors aget alength alias all-ns alter alter-meta! alter-var-root amap ancestors and apply areduce array-map aset aset-boolean aset-byte aset-char aset-double aset-float aset-int aset-long aset-short assert assoc assoc! assoc-in associative? atom await await-for await1 bases bean bigdec bigint binding bit-and bit-and-not bit-clear bit-flip bit-not bit-or bit-set bit-shift-left bit-shift-right bit-test bit-xor boolean boolean-array booleans bound-fn bound-fn* butlast byte byte-array bytes cast char char-array char-escape-string char-name-string char? chars chunk chunk-append chunk-buffer chunk-cons chunk-first chunk-next chunk-rest chunked-seq? class class? clear-agent-errors clojure-version coll? comment commute comp comparator compare compare-and-set! compile complement concat cond condp conj conj! cons constantly construct-proxy contains? count counted? create-ns create-struct cycle dec decimal? declare definline defmacro defmethod defmulti defn defn- defonce defstruct delay delay? deliver deref derive descendants destructure disj disj! dissoc dissoc! distinct distinct? doall doc dorun doseq dosync dotimes doto double double-array doubles drop drop-last drop-while empty empty? ensure enumeration-seq eval even? every? false? ffirst file-seq filter find find-doc find-ns find-var first float float-array float? floats flush fn fn? fnext for force format future future-call future-cancel future-cancelled? future-done? future? gen-class gen-interface gensym get get-in get-method get-proxy-class get-thread-bindings get-validator hash hash-map hash-set identical? identity if-let if-not ifn? import in-ns inc init-proxy instance? int int-array integer? interleave intern interpose into into-array ints io! isa? iterate iterator-seq juxt key keys keyword keyword? last lazy-cat lazy-seq let letfn line-seq list list* list? load load-file load-reader load-string loaded-libs locking long long-array longs loop macroexpand macroexpand-1 make-array make-hierarchy map map? mapcat max max-key memfn memoize merge merge-with meta method-sig methods min min-key mod name namespace neg? newline next nfirst nil? nnext not not-any? not-empty not-every? not= ns ns-aliases ns-imports ns-interns ns-map ns-name ns-publics ns-refers ns-resolve ns-unalias ns-unmap nth nthnext num number? odd? or parents partial partition pcalls peek persistent! pmap pop pop! pop-thread-bindings pos? pr pr-str prefer-method prefers primitives-classnames print print-ctor print-doc print-dup print-method print-namespace-doc print-simple print-special-doc print-str printf println println-str prn prn-str promise proxy proxy-call-with-super proxy-mappings proxy-name proxy-super push-thread-bindings pvalues quot rand rand-int range ratio? rational? rationalize re-find re-groups re-matcher re-matches re-pattern re-seq read read-line read-string reduce ref ref-history-count ref-max-history ref-min-history ref-set refer refer-clojure release-pending-sends rem remove remove-method remove-ns remove-watch repeat repeatedly replace replicate require reset! reset-meta! resolve rest resultset-seq reverse reversible? rseq rsubseq second select-keys send send-off seq seq? seque sequence sequential? set set-validator! set? short short-array shorts shutdown-agents slurp some sort sort-by sorted-map sorted-map-by sorted-set sorted-set-by sorted? special-form-anchor special-symbol? split-at split-with str stream? string? struct struct-map subs subseq subvec supers swap! symbol symbol? sync syntax-symbol-anchor take take-last take-nth take-while test the-ns time to-array to-array-2d trampoline transient tree-seq true? type unchecked-add unchecked-dec unchecked-divide unchecked-inc unchecked-multiply unchecked-negate unchecked-remainder unchecked-subtract underive unquote unquote-splicing update-in update-proxy use val vals var-get var-set var? vary-meta vec vector vector? when when-first when-let when-not while with-bindings with-bindings* with-in-str with-loading-context with-local-vars with-meta with-open with-out-str with-precision xml-seq zero? zipmap ".split(" ")),b=e.arrayToMap("def do fn if let loop monitor-enter monitor-exit new quote recur set! throw try var".split(" ")),c=e.arrayToMap("true false nil".split(" "));this.$rules={start:[{token:"comment",regex:";.*$"},{token:"comment",regex:"^=begin$",next:"comment"},{token:"keyword",regex:"[\\(|\\)]"},{token:"keyword",regex:"[\\'\\(]"},{token:"keyword",regex:"[\\[|\\]]"},{token:"keyword",regex:"[\\{|\\}|\\#\\{|\\#\\}]"},{token:"keyword",regex:"[\\&]"},{token:"keyword",regex:"[\\#\\^\\{]"},{token:"keyword",regex:"[\\%]"},{token:"keyword",regex:"[@]"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language",regex:"[!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+||=|!=|<=|>=|<>|<|>|!|&&]"},{token:function(d){return b.hasOwnProperty(d)?"keyword":c.hasOwnProperty(d)?"constant.language":a.hasOwnProperty(d)?"support.function":"identifier"},regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"[:](?:[a-zA-Z]|d)+"},{token:"string.regexp",regex:'/#"(?:.|(\\")|[^""\n])*"/g'}],comment:[{token:"comment",regex:"^=end$",next:"start"},{token:"comment",merge:!0,regex:".+"}]}};d.inherits(g,f),b.ClojureHighlightRules=g}),define("ace/mode/matching_parens_outdent",["require","exports","module","ace/range"],function(a,b,c){var d=a("ace/range").Range,e=function(){};(function(){this.checkOutdent=function(a,b){return/^\s+$/.test(a)?/^\s*\)/.test(b):!1},this.autoOutdent=function(a,b){var c=a.getLine(b),e=c.match(/^(\s*\))/);if(!e)return 0;var f=e[1].length,g=a.findMatchingBracket({row:b,column:f});if(!g||g.row==b)return 0;var h=this.$getIndent(a.getLine(g.row));a.replace(new d(b,0,b,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""}}).call(e.prototype),b.MatchingParensOutdent=e}) \ No newline at end of file
+define("ace/mode/clojure",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/clojure_highlight_rules","ace/mode/matching_parens_outdent","ace/range"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text").Mode,f=a("../tokenizer").Tokenizer,g=a("./clojure_highlight_rules").ClojureHighlightRules,h=a("./matching_parens_outdent").MatchingParensOutdent,i=a("../range").Range,j=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h};d.inherits(j,e),function(){this.toggleCommentLines=function(a,b,c,d){var e=!0,f=/^(\s*)#/;for(var g=c;g<=d;g++)if(!f.test(b.getLine(g))){e=!1;break}if(e){var h=new i(0,0,0,0);for(var g=c;g<=d;g++){var j=b.getLine(g),k=j.match(f);h.start.row=g,h.end.row=g,h.end.column=k[0].length,b.replace(h,k[1])}}else b.indentRows(c,d,";")},this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=this.$tokenizer.getLineTokens(b,a),f=e.tokens;if(f.length&&f[f.length-1].type=="comment")return d;if(a=="start"){var g=b.match(/[\(\[]/);g&&(d+=" "),g=b.match(/[\)]/),g&&(d="")}return d},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)}}.call(j.prototype),b.Mode=j}),define("ace/mode/clojure_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("../lib/lang"),f=a("./text_highlight_rules").TextHighlightRules,g=function(){var a=e.arrayToMap("* *1 *2 *3 *agent* *allow-unresolved-vars* *assert* *clojure-version* *command-line-args* *compile-files* *compile-path* *e *err* *file* *flush-on-newline* *in* *macro-meta* *math-context* *ns* *out* *print-dup* *print-length* *print-level* *print-meta* *print-readably* *read-eval* *source-path* *use-context-classloader* *warn-on-reflection* + - -> -&gt; ->> -&gt;&gt; .. / < &lt; <= &lt;= = == > &gt; >= &gt;= accessor aclone add-classpath add-watch agent agent-errors aget alength alias all-ns alter alter-meta! alter-var-root amap ancestors and apply areduce array-map aset aset-boolean aset-byte aset-char aset-double aset-float aset-int aset-long aset-short assert assoc assoc! assoc-in associative? atom await await-for await1 bases bean bigdec bigint binding bit-and bit-and-not bit-clear bit-flip bit-not bit-or bit-set bit-shift-left bit-shift-right bit-test bit-xor boolean boolean-array booleans bound-fn bound-fn* butlast byte byte-array bytes cast char char-array char-escape-string char-name-string char? chars chunk chunk-append chunk-buffer chunk-cons chunk-first chunk-next chunk-rest chunked-seq? class class? clear-agent-errors clojure-version coll? comment commute comp comparator compare compare-and-set! compile complement concat cond condp conj conj! cons constantly construct-proxy contains? count counted? create-ns create-struct cycle dec decimal? declare definline defmacro defmethod defmulti defn defn- defonce defstruct delay delay? deliver deref derive descendants destructure disj disj! dissoc dissoc! distinct distinct? doall doc dorun doseq dosync dotimes doto double double-array doubles drop drop-last drop-while empty empty? ensure enumeration-seq eval even? every? false? ffirst file-seq filter find find-doc find-ns find-var first float float-array float? floats flush fn fn? fnext for force format future future-call future-cancel future-cancelled? future-done? future? gen-class gen-interface gensym get get-in get-method get-proxy-class get-thread-bindings get-validator hash hash-map hash-set identical? identity if-let if-not ifn? import in-ns inc init-proxy instance? int int-array integer? interleave intern interpose into into-array ints io! isa? iterate iterator-seq juxt key keys keyword keyword? last lazy-cat lazy-seq let letfn line-seq list list* list? load load-file load-reader load-string loaded-libs locking long long-array longs loop macroexpand macroexpand-1 make-array make-hierarchy map map? mapcat max max-key memfn memoize merge merge-with meta method-sig methods min min-key mod name namespace neg? newline next nfirst nil? nnext not not-any? not-empty not-every? not= ns ns-aliases ns-imports ns-interns ns-map ns-name ns-publics ns-refers ns-resolve ns-unalias ns-unmap nth nthnext num number? odd? or parents partial partition pcalls peek persistent! pmap pop pop! pop-thread-bindings pos? pr pr-str prefer-method prefers primitives-classnames print print-ctor print-doc print-dup print-method print-namespace-doc print-simple print-special-doc print-str printf println println-str prn prn-str promise proxy proxy-call-with-super proxy-mappings proxy-name proxy-super push-thread-bindings pvalues quot rand rand-int range ratio? rational? rationalize re-find re-groups re-matcher re-matches re-pattern re-seq read read-line read-string reduce ref ref-history-count ref-max-history ref-min-history ref-set refer refer-clojure release-pending-sends rem remove remove-method remove-ns remove-watch repeat repeatedly replace replicate require reset! reset-meta! resolve rest resultset-seq reverse reversible? rseq rsubseq second select-keys send send-off seq seq? seque sequence sequential? set set-validator! set? short short-array shorts shutdown-agents slurp some sort sort-by sorted-map sorted-map-by sorted-set sorted-set-by sorted? special-form-anchor special-symbol? split-at split-with str stream? string? struct struct-map subs subseq subvec supers swap! symbol symbol? sync syntax-symbol-anchor take take-last take-nth take-while test the-ns time to-array to-array-2d trampoline transient tree-seq true? type unchecked-add unchecked-dec unchecked-divide unchecked-inc unchecked-multiply unchecked-negate unchecked-remainder unchecked-subtract underive unquote unquote-splicing update-in update-proxy use val vals var-get var-set var? vary-meta vec vector vector? when when-first when-let when-not while with-bindings with-bindings* with-in-str with-loading-context with-local-vars with-meta with-open with-out-str with-precision xml-seq zero? zipmap ".split(" ")),b=e.arrayToMap("def do fn if let loop monitor-enter monitor-exit new quote recur set! throw try var".split(" ")),c=e.arrayToMap("true false nil".split(" "));this.$rules={start:[{token:"comment",regex:";.*$"},{token:"comment",regex:"^=begin$",next:"comment"},{token:"keyword",regex:"[\\(|\\)]"},{token:"keyword",regex:"[\\'\\(]"},{token:"keyword",regex:"[\\[|\\]]"},{token:"keyword",regex:"[\\{|\\}|\\#\\{|\\#\\}]"},{token:"keyword",regex:"[\\&]"},{token:"keyword",regex:"[\\#\\^\\{]"},{token:"keyword",regex:"[\\%]"},{token:"keyword",regex:"[@]"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language",regex:"[!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+||=|!=|<=|>=|<>|<|>|!|&&]"},{token:function(d){return b.hasOwnProperty(d)?"keyword":c.hasOwnProperty(d)?"constant.language":a.hasOwnProperty(d)?"support.function":"identifier"},regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"[:](?:[a-zA-Z]|d)+"},{token:"string.regexp",regex:'/#"(?:.|(\\")|[^""\n])*"/g'}],comment:[{token:"comment",regex:"^=end$",next:"start"},{token:"comment",merge:!0,regex:".+"}]}};d.inherits(g,f),b.ClojureHighlightRules=g}),define("ace/mode/matching_parens_outdent",["require","exports","module","ace/range"],function(a,b,c){"use strict";var d=a("../range").Range,e=function(){};((function(){this.checkOutdent=function(a,b){return/^\s+$/.test(a)?/^\s*\)/.test(b):!1},this.autoOutdent=function(a,b){var c=a.getLine(b),e=c.match(/^(\s*\))/);if(!e)return 0;var f=e[1].length,g=a.findMatchingBracket({row:b,column:f});if(!g||g.row==b)return 0;var h=this.$getIndent(a.getLine(g.row));a.replace(new d(b,0,b,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""}})).call(e.prototype),b.MatchingParensOutdent=e}),function(){window.require(["ace/ace"],function(a){window.ace||(window.ace={});for(var b in a)a.hasOwnProperty(b)&&(ace[b]=a[b])})}() \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-coffee-uncompressed.js b/apps/files_texteditor/js/aceeditor/mode-coffee-uncompressed.js
new file mode 100755
index 00000000000..9a06cbfcfe9
--- /dev/null
+++ b/apps/files_texteditor/js/aceeditor/mode-coffee-uncompressed.js
@@ -0,0 +1,804 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Satoshi Murakami <murky.satyr AT gmail DOT com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/coffee', ['require', 'exports', 'module' , 'ace/tokenizer', 'ace/mode/coffee_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/mode/folding/pythonic', 'ace/range', 'ace/mode/text', 'ace/worker/worker_client', 'ace/lib/oop'], function(require, exports, module) {
+"use strict";
+
+var Tokenizer = require("../tokenizer").Tokenizer;
+var Rules = require("./coffee_highlight_rules").CoffeeHighlightRules;
+var Outdent = require("./matching_brace_outdent").MatchingBraceOutdent;
+var PythonFoldMode = require("./folding/pythonic").FoldMode;
+var Range = require("../range").Range;
+var TextMode = require("./text").Mode;
+var WorkerClient = require("../worker/worker_client").WorkerClient;
+var oop = require("../lib/oop");
+
+function Mode() {
+ this.$tokenizer = new Tokenizer(new Rules().getRules());
+ this.$outdent = new Outdent();
+ this.foldingRules = new PythonFoldMode("=|=>|->|\\s*class [^#]*");
+}
+
+oop.inherits(Mode, TextMode);
+
+(function() {
+
+ var indenter = /(?:[({[=:]|[-=]>|\b(?:else|switch|try|catch(?:\s*[$A-Za-z_\x7f-\uffff][$\w\x7f-\uffff]*)?|finally))\s*$/;
+ var commentLine = /^(\s*)#/;
+ var hereComment = /^\s*###(?!#)/;
+ var indentation = /^\s*/;
+
+ this.getNextLineIndent = function(state, line, tab) {
+ var indent = this.$getIndent(line);
+ var tokens = this.$tokenizer.getLineTokens(line, state).tokens;
+
+ if (!(tokens.length && tokens[tokens.length - 1].type === 'comment') &&
+ state === 'start' && indenter.test(line))
+ indent += tab;
+ return indent;
+ };
+
+ this.toggleCommentLines = function(state, doc, startRow, endRow){
+ console.log("toggle");
+ var range = new Range(0, 0, 0, 0);
+ for (var i = startRow; i <= endRow; ++i) {
+ var line = doc.getLine(i);
+ if (hereComment.test(line))
+ continue;
+
+ if (commentLine.test(line))
+ line = line.replace(commentLine, '$1');
+ else
+ line = line.replace(indentation, '$&#');
+
+ range.end.row = range.start.row = i;
+ range.end.column = line.length + 1;
+ doc.replace(range, line);
+ }
+ };
+
+ this.checkOutdent = function(state, line, input) {
+ return this.$outdent.checkOutdent(line, input);
+ };
+
+ this.autoOutdent = function(state, doc, row) {
+ this.$outdent.autoOutdent(doc, row);
+ };
+
+ this.createWorker = function(session) {
+ var worker = new WorkerClient(["ace"], "worker-coffee.js", "ace/mode/coffee_worker", "Worker");
+ worker.attachToDocument(session.getDocument());
+
+ worker.on("error", function(e) {
+ session.setAnnotations([e.data]);
+ });
+
+ worker.on("ok", function(e) {
+ session.clearAnnotations();
+ });
+
+ return worker;
+ };
+
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Satoshi Murakami <murky.satyr AT gmail DOT com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/coffee_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/lang', 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+ var lang = require("../lib/lang");
+ var oop = require("../lib/oop");
+ var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+ oop.inherits(CoffeeHighlightRules, TextHighlightRules);
+
+ function CoffeeHighlightRules() {
+ var identifier = "[$A-Za-z_\\x7f-\\uffff][$\\w\\x7f-\\uffff]*";
+ var stringfill = {
+ token : "string",
+ merge : true,
+ regex : ".+"
+ };
+
+ var keywords = lang.arrayToMap((
+ "this|throw|then|try|typeof|super|switch|return|break|by)|continue|" +
+ "catch|class|in|instanceof|is|isnt|if|else|extends|for|forown|" +
+ "finally|function|while|when|new|no|not|delete|debugger|do|loop|of|off|" +
+ "or|on|unless|until|and|yes").split("|")
+ );
+
+ var langConstant = lang.arrayToMap((
+ "true|false|null|undefined").split("|")
+ );
+
+ var illegal = lang.arrayToMap((
+ "case|const|default|function|var|void|with|enum|export|implements|" +
+ "interface|let|package|private|protected|public|static|yield|" +
+ "__hasProp|extends|slice|bind|indexOf").split("|")
+ );
+
+ var supportClass = lang.arrayToMap((
+ "Array|Boolean|Date|Function|Number|Object|RegExp|ReferenceError|" +
+ "RangeError|String|SyntaxError|Error|EvalError|TypeError|URIError").split("|")
+ );
+
+ var supportFunction = lang.arrayToMap((
+ "Math|JSON|isNaN|isFinite|parseInt|parseFloat|encodeURI|" +
+ "encodeURIComponent|decodeURI|decodeURIComponent|RangeError|String|" +
+ "SyntaxError|Error|EvalError|TypeError|URIError").split("|")
+ );
+
+ this.$rules = {
+ start : [
+ {
+ token : "identifier",
+ regex : "(?:(?:\\.|::)\\s*)" + identifier
+ }, {
+ token : "variable",
+ regex : "@(?:" + identifier + ")?"
+ }, {
+ token: function(value) {
+ if (keywords.hasOwnProperty(value))
+ return "keyword";
+ else if (langConstant.hasOwnProperty(value))
+ return "constant.language";
+ else if (illegal.hasOwnProperty(value))
+ return "invalid.illegal";
+ else if (supportClass.hasOwnProperty(value))
+ return "language.support.class";
+ else if (supportFunction.hasOwnProperty(value))
+ return "language.support.function";
+ else
+ return "identifier";
+ },
+ regex : identifier
+ }, {
+ token : "constant.numeric",
+ regex : "(?:0x[\\da-fA-F]+|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:[eE][+-]?\\d+)?)"
+ }, {
+ token : "string",
+ merge : true,
+ regex : "'''",
+ next : "qdoc"
+ }, {
+ token : "string",
+ merge : true,
+ regex : '"""',
+ next : "qqdoc"
+ }, {
+ token : "string",
+ merge : true,
+ regex : "'",
+ next : "qstring"
+ }, {
+ token : "string",
+ merge : true,
+ regex : '"',
+ next : "qqstring"
+ }, {
+ token : "string",
+ merge : true,
+ regex : "`",
+ next : "js"
+ }, {
+ token : "string.regex",
+ merge : true,
+ regex : "///",
+ next : "heregex"
+ }, {
+ token : "string.regex",
+ regex : "/(?!\\s)[^[/\\n\\\\]*(?: (?:\\\\.|\\[[^\\]\\n\\\\]*(?:\\\\.[^\\]\\n\\\\]*)*\\])[^[/\\n\\\\]*)*/[imgy]{0,4}(?!\\w)"
+ }, {
+ token : "comment",
+ merge : true,
+ regex : "###(?!#)",
+ next : "comment"
+ }, {
+ token : "comment",
+ regex : "#.*"
+ }, {
+ token : "punctuation.operator",
+ regex : "\\?|\\:|\\,|\\."
+ }, {
+ token : "keyword.operator",
+ regex : "(?:[\\-=]>|[-+*/%<>&|^!?=]=|>>>=?|\\-\\-|\\+\\+|::|&&=|\\|\\|=|<<=|>>=|\\?\\.|\\.{2,3}|\\!)"
+ }, {
+ token : "paren.lparen",
+ regex : "[({[]"
+ }, {
+ token : "paren.rparen",
+ regex : "[\\]})]"
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }],
+
+ qdoc : [{
+ token : "string",
+ regex : ".*?'''",
+ next : "start"
+ }, stringfill],
+
+ qqdoc : [{
+ token : "string",
+ regex : '.*?"""',
+ next : "start"
+ }, stringfill],
+
+ qstring : [{
+ token : "string",
+ regex : "[^\\\\']*(?:\\\\.[^\\\\']*)*'",
+ merge : true,
+ next : "start"
+ }, stringfill],
+
+ qqstring : [{
+ token : "string",
+ regex : '[^\\\\"]*(?:\\\\.[^\\\\"]*)*"',
+ merge : true,
+ next : "start"
+ }, stringfill],
+
+ js : [{
+ token : "string",
+ merge : true,
+ regex : "[^\\\\`]*(?:\\\\.[^\\\\`]*)*`",
+ next : "start"
+ }, stringfill],
+
+ heregex : [{
+ token : "string.regex",
+ regex : '.*?///[imgy]{0,4}',
+ next : "start"
+ }, {
+ token : "comment.regex",
+ regex : "\\s+(?:#.*)?"
+ }, {
+ token : "string.regex",
+ merge : true,
+ regex : "\\S+"
+ }],
+
+ comment : [{
+ token : "comment",
+ regex : '.*?###',
+ next : "start"
+ }, {
+ token : "comment",
+ merge : true,
+ regex : ".+"
+ }]
+ };
+ }
+
+ exports.CoffeeHighlightRules = CoffeeHighlightRules;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var Range = require("../range").Range;
+
+var MatchingBraceOutdent = function() {};
+
+(function() {
+
+ this.checkOutdent = function(line, input) {
+ if (! /^\s+$/.test(line))
+ return false;
+
+ return /^\s*\}/.test(input);
+ };
+
+ this.autoOutdent = function(doc, row) {
+ var line = doc.getLine(row);
+ var match = line.match(/^(\s*\})/);
+
+ if (!match) return 0;
+
+ var column = match[1].length;
+ var openBracePos = doc.findMatchingBracket({row: row, column: column});
+
+ if (!openBracePos || openBracePos.row == row) return 0;
+
+ var indent = this.$getIndent(doc.getLine(openBracePos.row));
+ doc.replace(new Range(row, 0, row, column-1), indent);
+ };
+
+ this.$getIndent = function(line) {
+ var match = line.match(/^(\s+)/);
+ if (match) {
+ return match[1];
+ }
+
+ return "";
+ };
+
+}).call(MatchingBraceOutdent.prototype);
+
+exports.MatchingBraceOutdent = MatchingBraceOutdent;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/pythonic', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var BaseFoldMode = require("./fold_mode").FoldMode;
+
+var FoldMode = exports.FoldMode = function(markers) {
+ this.foldingStartMarker = new RegExp("(?:([\\[{])|(" + markers + "))(?:\\s*)(?:#.*)?$");
+};
+oop.inherits(FoldMode, BaseFoldMode);
+
+(function() {
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ var line = session.getLine(row);
+ var match = line.match(this.foldingStartMarker);
+ if (match) {
+ if (match[1])
+ return this.openingBracketBlock(session, match[1], row, match.index);
+ if (match[2])
+ return this.indentationBlock(session, row, match.index + match[2].length);
+ return this.indentationBlock(session, row);
+ }
+ }
+
+}).call(FoldMode.prototype);
+
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/fold_mode', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var Range = require("../../range").Range;
+
+var FoldMode = exports.FoldMode = function() {};
+
+(function() {
+
+ this.foldingStartMarker = null;
+ this.foldingStopMarker = null;
+
+ // must return "" if there's no fold, to enable caching
+ this.getFoldWidget = function(session, foldStyle, row) {
+ var line = session.getLine(row);
+ if (this.foldingStartMarker.test(line))
+ return "start";
+ if (foldStyle == "markbeginend"
+ && this.foldingStopMarker
+ && this.foldingStopMarker.test(line))
+ return "end";
+ return "";
+ };
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ return null;
+ };
+
+ this.indentationBlock = function(session, row, column) {
+ var re = /^\s*/;
+ var startRow = row;
+ var endRow = row;
+ var line = session.getLine(row);
+ var startColumn = column || line.length;
+ var startLevel = line.match(re)[0].length;
+ var maxRow = session.getLength()
+
+ while (++row < maxRow) {
+ line = session.getLine(row);
+ var level = line.match(re)[0].length;
+
+ if (level == line.length)
+ continue;
+
+ if (level <= startLevel)
+ break;
+
+ endRow = row;
+ }
+
+ if (endRow > startRow) {
+ var endColumn = session.getLine(endRow).length;
+ return new Range(startRow, startColumn, endRow, endColumn);
+ }
+ };
+
+ this.openingBracketBlock = function(session, bracket, row, column) {
+ var start = {row: row, column: column + 1};
+ var end = session.$findClosingBracket(bracket, start);
+ if (!end)
+ return;
+
+ var fw = session.foldWidgets[end.row];
+ if (fw == null)
+ fw = this.getFoldWidget(session, end.row);
+
+ if (fw == "start") {
+ end.row --;
+ end.column = session.getLine(end.row).length;
+ }
+ return Range.fromPoints(start, end);
+ };
+
+}).call(FoldMode.prototype);
+
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/worker/worker_client', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event_emitter'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var EventEmitter = require("../lib/event_emitter").EventEmitter;
+
+var WorkerClient = function(topLevelNamespaces, packagedJs, mod, classname) {
+
+ this.changeListener = this.changeListener.bind(this);
+
+ if (module.packaged) {
+ var base = this.$guessBasePath();
+ this.$worker = new Worker(base + packagedJs);
+ }
+ else {
+ var workerUrl = this.$normalizePath(require.nameToUrl("ace/worker/worker", null, "_"));
+ this.$worker = new Worker(workerUrl);
+
+ var tlns = {};
+ for (var i=0; i<topLevelNamespaces.length; i++) {
+ var ns = topLevelNamespaces[i];
+ var path = this.$normalizePath(require.nameToUrl(ns, null, "_").replace(/.js$/, ""));
+
+ tlns[ns] = path;
+ }
+ }
+
+ this.$worker.postMessage({
+ init : true,
+ tlns: tlns,
+ module: mod,
+ classname: classname
+ });
+
+ this.callbackId = 1;
+ this.callbacks = {};
+
+ var _self = this;
+ this.$worker.onerror = function(e) {
+ window.console && console.log && console.log(e);
+ throw e;
+ };
+ this.$worker.onmessage = function(e) {
+ var msg = e.data;
+ switch(msg.type) {
+ case "log":
+ window.console && console.log && console.log(msg.data);
+ break;
+
+ case "event":
+ _self._emit(msg.name, {data: msg.data});
+ break;
+
+ case "call":
+ var callback = _self.callbacks[msg.id];
+ if (callback) {
+ callback(msg.data);
+ delete _self.callbacks[msg.id];
+ }
+ break;
+ }
+ };
+};
+
+(function(){
+
+ oop.implement(this, EventEmitter);
+
+ this.$normalizePath = function(path) {
+ path = path.replace(/^[a-z]+:\/\/[^\/]+\//, ""); // Remove domain name and rebuild it
+ path = location.protocol + "//" + location.host
+ // paths starting with a slash are relative to the root (host)
+ + (path.charAt(0) == "/" ? "" : location.pathname.replace(/\/[^\/]*$/, ""))
+ + "/" + path.replace(/^[\/]+/, "");
+ return path;
+ };
+
+ this.$guessBasePath = function() {
+ if (require.aceBaseUrl)
+ return require.aceBaseUrl;
+
+ var scripts = document.getElementsByTagName("script");
+ for (var i=0; i<scripts.length; i++) {
+ var script = scripts[i];
+
+ var base = script.getAttribute("data-ace-base");
+ if (base)
+ return base.replace(/\/*$/, "/");
+
+ var src = script.src || script.getAttribute("src");
+ if (!src) {
+ continue;
+ }
+ var m = src.match(/^(?:(.*\/)ace\.js|(.*\/)ace(-uncompressed)?(-noconflict)?\.js)(?:\?|$)/);
+ if (m)
+ return m[1] || m[2];
+ }
+ return "";
+ };
+
+ this.terminate = function() {
+ this._emit("terminate", {});
+ this.$worker.terminate();
+ this.$worker = null;
+ this.$doc.removeEventListener("change", this.changeListener);
+ this.$doc = null;
+ };
+
+ this.send = function(cmd, args) {
+ this.$worker.postMessage({command: cmd, args: args});
+ };
+
+ this.call = function(cmd, args, callback) {
+ if (callback) {
+ var id = this.callbackId++;
+ this.callbacks[id] = callback;
+ args.push(id);
+ }
+ this.send(cmd, args);
+ };
+
+ this.emit = function(event, data) {
+ try {
+ // firefox refuses to clone objects which have function properties
+ // TODO: cleanup event
+ this.$worker.postMessage({event: event, data: {data: data.data}});
+ }
+ catch(ex) {}
+ };
+
+ this.attachToDocument = function(doc) {
+ if(this.$doc)
+ this.terminate();
+
+ this.$doc = doc;
+ this.call("setValue", [doc.getValue()]);
+ doc.on("change", this.changeListener);
+ };
+
+ this.changeListener = function(e) {
+ e.range = {
+ start: e.data.range.start,
+ end: e.data.range.end
+ };
+ this.emit("change", e);
+ };
+
+}).call(WorkerClient.prototype);
+
+exports.WorkerClient = WorkerClient;
+
+});
+;
+ (function() {
+ window.require(["ace/ace"], function(a) {
+ if (!window.ace)
+ window.ace = {};
+ for (var key in a) if (a.hasOwnProperty(key))
+ ace[key] = a[key];
+ });
+ })();
+ \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-coffee.js b/apps/files_texteditor/js/aceeditor/mode-coffee.js
index 14e25f2ca25..c42e1f801c0 100644
--- a/apps/files_texteditor/js/aceeditor/mode-coffee.js
+++ b/apps/files_texteditor/js/aceeditor/mode-coffee.js
@@ -1 +1 @@
-define("ace/mode/coffee",["require","exports","module","ace/tokenizer","ace/mode/coffee_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/mode/text","ace/worker/worker_client","pilot/oop"],function(a,b,c){function k(){this.$tokenizer=new d((new e).getRules()),this.$outdent=new f}var d=a("ace/tokenizer").Tokenizer,e=a("ace/mode/coffee_highlight_rules").CoffeeHighlightRules,f=a("ace/mode/matching_brace_outdent").MatchingBraceOutdent,g=a("ace/range").Range,h=a("ace/mode/text").Mode,i=a("ace/worker/worker_client").WorkerClient,j=a("pilot/oop");j.inherits(k,h),function(){var a=/(?:[({[=:]|[-=]>|\b(?:else|switch|try|catch(?:\s*[$A-Za-z_\x7f-\uffff][$\w\x7f-\uffff]*)?|finally))\s*$/,b=/^(\s*)#/,c=/^\s*###(?!#)/,d=/^\s*/;this.getNextLineIndent=function(b,c,d){var e=this.$getIndent(c),f=this.$tokenizer.getLineTokens(c,b).tokens;(!f.length||f[f.length-1].type!=="comment")&&b==="start"&&a.test(c)&&(e+=d);return e},this.toggleCommentLines=function(a,e,f,h){console.log("toggle");var i=new g(0,0,0,0);for(var j=f;j<=h;++j){var k=e.getLine(j);if(c.test(k))continue;b.test(k)?k=k.replace(b,"$1"):k=k.replace(d,"$&#"),i.end.row=i.start.row=j,i.end.column=k.length+1,e.replace(i,k)}},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)},this.createWorker=function(a){var b=a.getDocument(),c=new i(["ace","pilot"],"worker-coffee.js","ace/mode/coffee_worker","Worker");c.call("setValue",[b.getValue()]),b.on("change",function(a){a.range={start:a.data.range.start,end:a.data.range.end},c.emit("change",a)}),c.on("error",function(b){a.setAnnotations([b.data])}),c.on("ok",function(b){a.clearAnnotations()})}}.call(k.prototype),b.Mode=k}),define("ace/mode/coffee_highlight_rules",["require","exports","module","pilot/oop","ace/mode/text_highlight_rules"],function(a,b,c){function d(){var a="[$A-Za-z_\\x7f-\\uffff][$\\w\\x7f-\\uffff]*",b="(?![$\\w]|\\s*:)",c={token:"string",merge:!0,regex:".+"};this.$rules={start:[{token:"identifier",regex:"(?:@|(?:\\.|::)\\s*)"+a},{token:"keyword",regex:"(?:t(?:h(?:is|row|en)|ry|ypeof)|s(?:uper|witch)|return|b(?:reak|y)|c(?:ontinue|atch|lass)|i(?:n(?:stanceof)?|s(?:nt)?|f)|e(?:lse|xtends)|f(?:or (?:own)?|inally|unction)|wh(?:ile|en)|n(?:ew|ot?)|d(?:e(?:lete|bugger)|o)|loop|o(?:ff?|[rn])|un(?:less|til)|and|yes)"+b},{token:"constant.language",regex:"(?:true|false|null|undefined)"+b},{token:"invalid.illegal",regex:"(?:c(?:ase|onst)|default|function|v(?:ar|oid)|with|e(?:num|xport)|i(?:mplements|nterface)|let|p(?:ackage|r(?:ivate|otected)|ublic)|static|yield|__(?:hasProp|extends|slice|bind|indexOf))"+b},{token:"language.support.class",regex:"(?:Array|Boolean|Date|Function|Number|Object|R(?:e(?:gExp|ferenceError)|angeError)|S(?:tring|yntaxError)|E(?:rror|valError)|TypeError|URIError)"+b},{token:"language.support.function",regex:"(?:Math|JSON|is(?:NaN|Finite)|parse(?:Int|Float)|encodeURI(?:Component)?|decodeURI(?:Component)?)"+b},{token:"identifier",regex:a},{token:"constant.numeric",regex:"(?:0x[\\da-fA-F]+|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:[eE][+-]?\\d+)?)"},{token:"string",merge:!0,regex:"'''",next:"qdoc"},{token:"string",merge:!0,regex:'"""',next:"qqdoc"},{token:"string",merge:!0,regex:"'",next:"qstring"},{token:"string",merge:!0,regex:'"',next:"qqstring"},{token:"string",merge:!0,regex:"`",next:"js"},{token:"string.regex",merge:!0,regex:"///",next:"heregex"},{token:"string.regex",regex:"/(?!\\s)[^[/\\n\\\\]*(?: (?:\\\\.|\\[[^\\]\\n\\\\]*(?:\\\\.[^\\]\\n\\\\]*)*\\])[^[/\\n\\\\]*)*/[imgy]{0,4}(?!\\w)"},{token:"comment",merge:!0,regex:"###(?!#)",next:"comment"},{token:"comment",regex:"#.*"},{token:"lparen",regex:"[({[]"},{token:"rparen",regex:"[\\]})]"},{token:"keyword.operator",regex:"\\S+"},{token:"text",regex:"\\s+"}],qdoc:[{token:"string",regex:".*?'''",next:"start"},c],qqdoc:[{token:"string",regex:'.*?"""',next:"start"},c],qstring:[{token:"string",regex:"[^\\\\']*(?:\\\\.[^\\\\']*)*'",next:"start"},c],qqstring:[{token:"string",regex:'[^\\\\"]*(?:\\\\.[^\\\\"]*)*"',next:"start"},c],js:[{token:"string",merge:!0,regex:"[^\\\\`]*(?:\\\\.[^\\\\`]*)*`",next:"start"},c],heregex:[{token:"string.regex",regex:".*?///[imgy]{0,4}",next:"start"},{token:"comment.regex",regex:"\\s+(?:#.*)?"},{token:"string.regex",merge:!0,regex:"\\S+"}],comment:[{token:"comment",regex:".*?###",next:"start"},{token:"comment",merge:!0,regex:".+"}]}}a("pilot/oop").inherits(d,a("ace/mode/text_highlight_rules").TextHighlightRules),b.CoffeeHighlightRules=d}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(a,b,c){var d=a("ace/range").Range,e=function(){};(function(){this.checkOutdent=function(a,b){return/^\s+$/.test(a)?/^\s*\}/.test(b):!1},this.autoOutdent=function(a,b){var c=a.getLine(b),e=c.match(/^(\s*\})/);if(!e)return 0;var f=e[1].length,g=a.findMatchingBracket({row:b,column:f});if(!g||g.row==b)return 0;var h=this.$getIndent(a.getLine(g.row));a.replace(new d(b,0,b,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""}}).call(e.prototype),b.MatchingBraceOutdent=e}),define("ace/worker/worker_client",["require","exports","module","pilot/oop","pilot/event_emitter"],function(a,b,c){var d=a("pilot/oop"),e=a("pilot/event_emitter").EventEmitter,f=function(b,c,d,e){this.callbacks=[];if(a.packaged)var f=this.$guessBasePath(),g=this.$worker=new Worker(f+c);else{var h=this.$normalizePath(a.nameToUrl("ace/worker/worker",null,"_")),g=this.$worker=new Worker(h),i={};for(var j=0;j<b.length;j++){var k=b[j],l=this.$normalizePath(a.nameToUrl(k,null,"_").replace(/.js$/,""));i[k]=l}}this.$worker.postMessage({init:!0,tlns:i,module:d,classname:e}),this.callbackId=1,this.callbacks={};var m=this;this.$worker.onerror=function(a){window.console&&console.log&&console.log(a);throw a},this.$worker.onmessage=function(a){var b=a.data;switch(b.type){case"log":window.console&&console.log&&console.log(b.data);break;case"event":m._dispatchEvent(b.name,{data:b.data});break;case"call":var c=m.callbacks[b.id];c&&(c(b.data),delete m.callbacks[b.id])}}};(function(){d.implement(this,e),this.$normalizePath=function(a){a.match(/^\w+:/)||(a=location.protocol+"//"+location.host+location.pathname+"/"+a);return a},this.$guessBasePath=function(){if(a.aceBaseUrl)return a.aceBaseUrl;var b=document.getElementsByTagName("script");for(var c=0;c<b.length;c++){var d=b[c],e=d.getAttribute("data-ace-base");if(e)return e.replace(/\/*$/,"/");var f=d.src||d.getAttribute("src");if(!f)continue;var g=f.match(/^(?:(.*\/)ace\.js|(.*\/)ace-uncompressed\.js)(?:\?|$)/);if(g)return g[1]||g[2]}return""},this.terminate=function(){this._dispatchEvent("terminate",{}),this.$worker.terminate()},this.send=function(a,b){this.$worker.postMessage({command:a,args:b})},this.call=function(a,b,c){if(c){var d=this.callbackId++;this.callbacks[d]=c,b.push(d)}this.send(a,b)},this.emit=function(a,b){this.$worker.postMessage({event:a,data:b})}}).call(f.prototype),b.WorkerClient=f}) \ No newline at end of file
+define("ace/mode/coffee",["require","exports","module","ace/tokenizer","ace/mode/coffee_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/folding/pythonic","ace/range","ace/mode/text","ace/worker/worker_client","ace/lib/oop"],function(a,b,c){function l(){this.$tokenizer=new d((new e).getRules()),this.$outdent=new f,this.foldingRules=new g("=|=>|->|\\s*class [^#]*")}"use strict";var d=a("../tokenizer").Tokenizer,e=a("./coffee_highlight_rules").CoffeeHighlightRules,f=a("./matching_brace_outdent").MatchingBraceOutdent,g=a("./folding/pythonic").FoldMode,h=a("../range").Range,i=a("./text").Mode,j=a("../worker/worker_client").WorkerClient,k=a("../lib/oop");k.inherits(l,i),function(){var a=/(?:[({[=:]|[-=]>|\b(?:else|switch|try|catch(?:\s*[$A-Za-z_\x7f-\uffff][$\w\x7f-\uffff]*)?|finally))\s*$/,b=/^(\s*)#/,c=/^\s*###(?!#)/,d=/^\s*/;this.getNextLineIndent=function(b,c,d){var e=this.$getIndent(c),f=this.$tokenizer.getLineTokens(c,b).tokens;return(!f.length||f[f.length-1].type!=="comment")&&b==="start"&&a.test(c)&&(e+=d),e},this.toggleCommentLines=function(a,e,f,g){console.log("toggle");var i=new h(0,0,0,0);for(var j=f;j<=g;++j){var k=e.getLine(j);if(c.test(k))continue;b.test(k)?k=k.replace(b,"$1"):k=k.replace(d,"$&#"),i.end.row=i.start.row=j,i.end.column=k.length+1,e.replace(i,k)}},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)},this.createWorker=function(a){var b=new j(["ace"],"worker-coffee.js","ace/mode/coffee_worker","Worker");return b.attachToDocument(a.getDocument()),b.on("error",function(b){a.setAnnotations([b.data])}),b.on("ok",function(b){a.clearAnnotations()}),b}}.call(l.prototype),b.Mode=l}),define("ace/mode/coffee_highlight_rules",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/mode/text_highlight_rules"],function(a,b,c){function g(){var a="[$A-Za-z_\\x7f-\\uffff][$\\w\\x7f-\\uffff]*",b={token:"string",merge:!0,regex:".+"},c=d.arrayToMap("this|throw|then|try|typeof|super|switch|return|break|by)|continue|catch|class|in|instanceof|is|isnt|if|else|extends|for|forown|finally|function|while|when|new|no|not|delete|debugger|do|loop|of|off|or|on|unless|until|and|yes".split("|")),e=d.arrayToMap("true|false|null|undefined".split("|")),f=d.arrayToMap("case|const|default|function|var|void|with|enum|export|implements|interface|let|package|private|protected|public|static|yield|__hasProp|extends|slice|bind|indexOf".split("|")),g=d.arrayToMap("Array|Boolean|Date|Function|Number|Object|RegExp|ReferenceError|RangeError|String|SyntaxError|Error|EvalError|TypeError|URIError".split("|")),h=d.arrayToMap("Math|JSON|isNaN|isFinite|parseInt|parseFloat|encodeURI|encodeURIComponent|decodeURI|decodeURIComponent|RangeError|String|SyntaxError|Error|EvalError|TypeError|URIError".split("|"));this.$rules={start:[{token:"identifier",regex:"(?:(?:\\.|::)\\s*)"+a},{token:"variable",regex:"@(?:"+a+")?"},{token:function(a){return c.hasOwnProperty(a)?"keyword":e.hasOwnProperty(a)?"constant.language":f.hasOwnProperty(a)?"invalid.illegal":g.hasOwnProperty(a)?"language.support.class":h.hasOwnProperty(a)?"language.support.function":"identifier"},regex:a},{token:"constant.numeric",regex:"(?:0x[\\da-fA-F]+|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:[eE][+-]?\\d+)?)"},{token:"string",merge:!0,regex:"'''",next:"qdoc"},{token:"string",merge:!0,regex:'"""',next:"qqdoc"},{token:"string",merge:!0,regex:"'",next:"qstring"},{token:"string",merge:!0,regex:'"',next:"qqstring"},{token:"string",merge:!0,regex:"`",next:"js"},{token:"string.regex",merge:!0,regex:"///",next:"heregex"},{token:"string.regex",regex:"/(?!\\s)[^[/\\n\\\\]*(?: (?:\\\\.|\\[[^\\]\\n\\\\]*(?:\\\\.[^\\]\\n\\\\]*)*\\])[^[/\\n\\\\]*)*/[imgy]{0,4}(?!\\w)"},{token:"comment",merge:!0,regex:"###(?!#)",next:"comment"},{token:"comment",regex:"#.*"},{token:"punctuation.operator",regex:"\\?|\\:|\\,|\\."},{token:"keyword.operator",regex:"(?:[\\-=]>|[-+*/%<>&|^!?=]=|>>>=?|\\-\\-|\\+\\+|::|&&=|\\|\\|=|<<=|>>=|\\?\\.|\\.{2,3}|\\!)"},{token:"paren.lparen",regex:"[({[]"},{token:"paren.rparen",regex:"[\\]})]"},{token:"text",regex:"\\s+"}],qdoc:[{token:"string",regex:".*?'''",next:"start"},b],qqdoc:[{token:"string",regex:'.*?"""',next:"start"},b],qstring:[{token:"string",regex:"[^\\\\']*(?:\\\\.[^\\\\']*)*'",merge:!0,next:"start"},b],qqstring:[{token:"string",regex:'[^\\\\"]*(?:\\\\.[^\\\\"]*)*"',merge:!0,next:"start"},b],js:[{token:"string",merge:!0,regex:"[^\\\\`]*(?:\\\\.[^\\\\`]*)*`",next:"start"},b],heregex:[{token:"string.regex",regex:".*?///[imgy]{0,4}",next:"start"},{token:"comment.regex",regex:"\\s+(?:#.*)?"},{token:"string.regex",merge:!0,regex:"\\S+"}],comment:[{token:"comment",regex:".*?###",next:"start"},{token:"comment",merge:!0,regex:".+"}]}}"use strict";var d=a("../lib/lang"),e=a("../lib/oop"),f=a("./text_highlight_rules").TextHighlightRules;e.inherits(g,f),b.CoffeeHighlightRules=g}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(a,b,c){"use strict";var d=a("../range").Range,e=function(){};((function(){this.checkOutdent=function(a,b){return/^\s+$/.test(a)?/^\s*\}/.test(b):!1},this.autoOutdent=function(a,b){var c=a.getLine(b),e=c.match(/^(\s*\})/);if(!e)return 0;var f=e[1].length,g=a.findMatchingBracket({row:b,column:f});if(!g||g.row==b)return 0;var h=this.$getIndent(a.getLine(g.row));a.replace(new d(b,0,b,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""}})).call(e.prototype),b.MatchingBraceOutdent=e}),define("ace/mode/folding/pythonic",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("./fold_mode").FoldMode,f=b.FoldMode=function(a){this.foldingStartMarker=new RegExp("(?:([\\[{])|("+a+"))(?:\\s*)(?:#.*)?$")};d.inherits(f,e),function(){this.getFoldWidgetRange=function(a,b,c){var d=a.getLine(c),e=d.match(this.foldingStartMarker);if(e)return e[1]?this.openingBracketBlock(a,e[1],c,e.index):e[2]?this.indentationBlock(a,c,e.index+e[2].length):this.indentationBlock(a,c)}}.call(f.prototype)}),define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"],function(a,b,c){"use strict";var d=a("../../range").Range,e=b.FoldMode=function(){};((function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(a,b,c){var d=a.getLine(c);return this.foldingStartMarker.test(d)?"start":b=="markbeginend"&&this.foldingStopMarker&&this.foldingStopMarker.test(d)?"end":""},this.getFoldWidgetRange=function(a,b,c){return null},this.indentationBlock=function(a,b,c){var e=/^\s*/,f=b,g=b,h=a.getLine(b),i=c||h.length,j=h.match(e)[0].length,k=a.getLength();while(++b<k){h=a.getLine(b);var l=h.match(e)[0].length;if(l==h.length)continue;if(l<=j)break;g=b}if(g>f){var m=a.getLine(g).length;return new d(f,i,g,m)}},this.openingBracketBlock=function(a,b,c,e){var f={row:c,column:e+1},g=a.$findClosingBracket(b,f);if(!g)return;var h=a.foldWidgets[g.row];return h==null&&(h=this.getFoldWidget(a,g.row)),h=="start"&&(g.row--,g.column=a.getLine(g.row).length),d.fromPoints(f,g)}})).call(e.prototype)}),define("ace/worker/worker_client",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("../lib/event_emitter").EventEmitter,f=function(b,d,e,f){this.changeListener=this.changeListener.bind(this);if(c.packaged){var g=this.$guessBasePath();this.$worker=new Worker(g+d)}else{var h=this.$normalizePath(a.nameToUrl("ace/worker/worker",null,"_"));this.$worker=new Worker(h);var i={};for(var j=0;j<b.length;j++){var k=b[j],l=this.$normalizePath(a.nameToUrl(k,null,"_").replace(/.js$/,""));i[k]=l}}this.$worker.postMessage({init:!0,tlns:i,module:e,classname:f}),this.callbackId=1,this.callbacks={};var m=this;this.$worker.onerror=function(a){throw window.console&&console.log&&console.log(a),a},this.$worker.onmessage=function(a){var b=a.data;switch(b.type){case"log":window.console&&console.log&&console.log(b.data);break;case"event":m._emit(b.name,{data:b.data});break;case"call":var c=m.callbacks[b.id];c&&(c(b.data),delete m.callbacks[b.id])}}};((function(){d.implement(this,e),this.$normalizePath=function(a){return a=a.replace(/^[a-z]+:\/\/[^\/]+\//,""),a=location.protocol+"//"+location.host+(a.charAt(0)=="/"?"":location.pathname.replace(/\/[^\/]*$/,""))+"/"+a.replace(/^[\/]+/,""),a},this.$guessBasePath=function(){if(a.aceBaseUrl)return a.aceBaseUrl;var b=document.getElementsByTagName("script");for(var c=0;c<b.length;c++){var d=b[c],e=d.getAttribute("data-ace-base");if(e)return e.replace(/\/*$/,"/");var f=d.src||d.getAttribute("src");if(!f)continue;var g=f.match(/^(?:(.*\/)ace\.js|(.*\/)ace(-uncompressed)?(-noconflict)?\.js)(?:\?|$)/);if(g)return g[1]||g[2]}return""},this.terminate=function(){this._emit("terminate",{}),this.$worker.terminate(),this.$worker=null,this.$doc.removeEventListener("change",this.changeListener),this.$doc=null},this.send=function(a,b){this.$worker.postMessage({command:a,args:b})},this.call=function(a,b,c){if(c){var d=this.callbackId++;this.callbacks[d]=c,b.push(d)}this.send(a,b)},this.emit=function(a,b){try{this.$worker.postMessage({event:a,data:{data:b.data}})}catch(c){}},this.attachToDocument=function(a){this.$doc&&this.terminate(),this.$doc=a,this.call("setValue",[a.getValue()]),a.on("change",this.changeListener)},this.changeListener=function(a){a.range={start:a.data.range.start,end:a.data.range.end},this.emit("change",a)}})).call(f.prototype),b.WorkerClient=f}),function(){window.require(["ace/ace"],function(a){window.ace||(window.ace={});for(var b in a)a.hasOwnProperty(b)&&(ace[b]=a[b])})}() \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-coldfusion-uncompressed.js b/apps/files_texteditor/js/aceeditor/mode-coldfusion-uncompressed.js
new file mode 100755
index 00000000000..c9092a5e0c2
--- /dev/null
+++ b/apps/files_texteditor/js/aceeditor/mode-coldfusion-uncompressed.js
@@ -0,0 +1,2543 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/coldfusion', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/xml', 'ace/mode/javascript', 'ace/mode/css', 'ace/tokenizer', 'ace/mode/coldfusion_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var XmlMode = require("./xml").Mode;
+var JavaScriptMode = require("./javascript").Mode;
+var CssMode = require("./css").Mode;
+var Tokenizer = require("../tokenizer").Tokenizer;
+var ColdfusionHighlightRules = require("./coldfusion_highlight_rules").ColdfusionHighlightRules;
+
+var Mode = function() {
+ XmlMode.call(this);
+
+ var highlighter = new ColdfusionHighlightRules();
+ this.$tokenizer = new Tokenizer(highlighter.getRules());
+
+ this.$embeds = highlighter.getEmbeds();
+ this.createModeDelegates({
+ "js-": JavaScriptMode,
+ "css-": CssMode
+ });
+};
+oop.inherits(Mode, XmlMode);
+
+(function() {
+
+ this.getNextLineIndent = function(state, line, tab) {
+ return this.$getIndent(line);
+ };
+
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/xml', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/xml_highlight_rules', 'ace/mode/behaviour/xml', 'ace/mode/folding/xml'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextMode = require("./text").Mode;
+var Tokenizer = require("../tokenizer").Tokenizer;
+var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules;
+var XmlBehaviour = require("./behaviour/xml").XmlBehaviour;
+var XmlFoldMode = require("./folding/xml").FoldMode;
+
+var Mode = function() {
+ this.$tokenizer = new Tokenizer(new XmlHighlightRules().getRules());
+ this.$behaviour = new XmlBehaviour();
+ this.foldingRules = new XmlFoldMode();
+};
+
+oop.inherits(Mode, TextMode);
+
+(function() {
+
+ this.getNextLineIndent = function(state, line, tab) {
+ return this.$getIndent(line);
+ };
+
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/xml_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/xml_util', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var xmlUtil = require("./xml_util");
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var XmlHighlightRules = function() {
+
+ // regexp must not have capturing parentheses
+ // regexps are ordered -> the first match is used
+ this.$rules = {
+ start : [{
+ token : "text",
+ regex : "<\\!\\[CDATA\\[",
+ next : "cdata"
+ }, {
+ token : "xml_pe",
+ regex : "<\\?.*?\\?>"
+ }, {
+ token : "comment",
+ merge : true,
+ regex : "<\\!--",
+ next : "comment"
+ }, {
+ token : "meta.tag", // opening tag
+ regex : "<\\/?",
+ next : "tag"
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }, {
+ token : "text",
+ regex : "[^<]+"
+ }],
+
+ cdata : [{
+ token : "text",
+ regex : "\\]\\]>",
+ next : "start"
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }, {
+ token : "text",
+ regex : "(?:[^\\]]|\\](?!\\]>))+"
+ }],
+
+ comment : [{
+ token : "comment",
+ regex : ".*?-->",
+ next : "start"
+ }, {
+ token : "comment",
+ merge : true,
+ regex : ".+"
+ }]
+ };
+
+ xmlUtil.tag(this.$rules, "tag", "start");
+};
+
+oop.inherits(XmlHighlightRules, TextHighlightRules);
+
+exports.XmlHighlightRules = XmlHighlightRules;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/xml_util', ['require', 'exports', 'module' , 'ace/lib/lang'], function(require, exports, module) {
+"use strict";
+
+var lang = require("../lib/lang");
+
+var formTags = lang.arrayToMap(
+ ("button|form|input|label|select|textarea").split("|")
+);
+
+var tableTags = lang.arrayToMap(
+ ("table|tbody|td|tfoot|th|tr").split("|")
+);
+
+function string(state) {
+ return [{
+ token : "string",
+ regex : '".*?"'
+ }, {
+ token : "string", // multi line string start
+ merge : true,
+ regex : '["].*',
+ next : state + "-qqstring"
+ }, {
+ token : "string",
+ regex : "'.*?'"
+ }, {
+ token : "string", // multi line string start
+ merge : true,
+ regex : "['].*",
+ next : state + "-qstring"
+ }];
+}
+
+function multiLineString(quote, state) {
+ return [{
+ token : "string",
+ merge : true,
+ regex : ".*?" + quote,
+ next : state
+ }, {
+ token : "string",
+ merge : true,
+ regex : '.+'
+ }];
+}
+
+exports.tag = function(states, name, nextState) {
+ states[name] = [{
+ token : "text",
+ regex : "\\s+"
+ }, {
+ //token : "meta.tag",
+
+ token : function(value) {
+ if ( value==='a' ) {
+ return "meta.tag.anchor";
+ }
+ else if ( value==='img' ) {
+ return "meta.tag.image";
+ }
+ else if ( value==='script' ) {
+ return "meta.tag.script";
+ }
+ else if ( value==='style' ) {
+ return "meta.tag.style";
+ }
+ else if (formTags.hasOwnProperty(value.toLowerCase())) {
+ return "meta.tag.form";
+ }
+ else if (tableTags.hasOwnProperty(value.toLowerCase())) {
+ return "meta.tag.table";
+ }
+ else {
+ return "meta.tag";
+ }
+ },
+ merge : true,
+ regex : "[-_a-zA-Z0-9:!]+",
+ next : name + "embed-attribute-list"
+ }, {
+ token: "empty",
+ regex: "",
+ next : name + "embed-attribute-list"
+ }];
+
+ states[name + "-qstring"] = multiLineString("'", name + "embed-attribute-list");
+ states[name + "-qqstring"] = multiLineString("\"", name + "embed-attribute-list");
+
+ states[name + "embed-attribute-list"] = [{
+ token : "meta.tag",
+ merge : true,
+ regex : "\/?>",
+ next : nextState
+ }, {
+ token : "keyword.operator",
+ regex : "="
+ }, {
+ token : "entity.other.attribute-name",
+ regex : "[-_a-zA-Z0-9:]+"
+ }, {
+ token : "constant.numeric", // float
+ regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }].concat(string(name));
+};
+
+});
+/* vim:ts=4:sts=4:sw=4:
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Chris Spencer <chris.ag.spencer AT googlemail DOT com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/behaviour/xml', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour', 'ace/mode/behaviour/cstyle'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var Behaviour = require("../behaviour").Behaviour;
+var CstyleBehaviour = require("./cstyle").CstyleBehaviour;
+
+var XmlBehaviour = function () {
+
+ this.inherit(CstyleBehaviour, ["string_dquotes"]); // Get string behaviour
+
+ this.add("brackets", "insertion", function (state, action, editor, session, text) {
+ if (text == '<') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return false;
+ } else {
+ return {
+ text: '<>',
+ selection: [1, 1]
+ }
+ }
+ } else if (text == '>') {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '>') { // need some kind of matching check here
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ } else if (text == "\n") {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChars = line.substring(cursor.column, cursor.column + 2);
+ if (rightChars == '</') {
+ var indent = this.$getIndent(session.doc.getLine(cursor.row)) + session.getTabString();
+ var next_indent = this.$getIndent(session.doc.getLine(cursor.row));
+
+ return {
+ text: '\n' + indent + '\n' + next_indent,
+ selection: [1, indent.length, 1, indent.length]
+ }
+ }
+ }
+ });
+
+}
+oop.inherits(XmlBehaviour, Behaviour);
+
+exports.XmlBehaviour = XmlBehaviour;
+});/* vim:ts=4:sts=4:sw=4:
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Chris Spencer <chris.ag.spencer AT googlemail DOT com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/behaviour/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var Behaviour = require('../behaviour').Behaviour;
+
+var CstyleBehaviour = function () {
+
+ this.add("braces", "insertion", function (state, action, editor, session, text) {
+ if (text == '{') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '{' + selected + '}',
+ selection: false
+ }
+ } else {
+ return {
+ text: '{}',
+ selection: [1, 1]
+ }
+ }
+ } else if (text == '}') {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '}') {
+ var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});
+ if (matching !== null) {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ } else if (text == "\n") {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '}') {
+ var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column + 1});
+ if (!openBracePos)
+ return null;
+
+ var indent = this.getNextLineIndent(state, line.substring(0, line.length - 1), session.getTabString());
+ var next_indent = this.$getIndent(session.doc.getLine(openBracePos.row));
+
+ return {
+ text: '\n' + indent + '\n' + next_indent,
+ selection: [1, indent.length, 1, indent.length]
+ }
+ }
+ }
+ });
+
+ this.add("braces", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '{') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.end.column, range.end.column + 1);
+ if (rightChar == '}') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+ this.add("parens", "insertion", function (state, action, editor, session, text) {
+ if (text == '(') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '(' + selected + ')',
+ selection: false
+ }
+ } else {
+ return {
+ text: '()',
+ selection: [1, 1]
+ }
+ }
+ } else if (text == ')') {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == ')') {
+ var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});
+ if (matching !== null) {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ }
+ });
+
+ this.add("parens", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '(') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
+ if (rightChar == ')') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+ this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {
+ if (text == '"') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '"' + selected + '"',
+ selection: false
+ }
+ } else {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var leftChar = line.substring(cursor.column-1, cursor.column);
+
+ // We're escaped.
+ if (leftChar == '\\') {
+ return null;
+ }
+
+ // Find what token we're inside.
+ var tokens = session.getTokens(selection.start.row, selection.start.row)[0].tokens;
+ var col = 0, token;
+ var quotepos = -1; // Track whether we're inside an open quote.
+
+ for (var x = 0; x < tokens.length; x++) {
+ token = tokens[x];
+ if (token.type == "string") {
+ quotepos = -1;
+ } else if (quotepos < 0) {
+ quotepos = token.value.indexOf('"');
+ }
+ if ((token.value.length + col) > selection.start.column) {
+ break;
+ }
+ col += tokens[x].value.length;
+ }
+
+ // Try and be smart about when we auto insert.
+ if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf('"') === token.value.length-1)))) {
+ return {
+ text: '""',
+ selection: [1,1]
+ }
+ } else if (token && token.type === "string") {
+ // Ignore input and move right one if we're typing over the closing quote.
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '"') {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ }
+ }
+ });
+
+ this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '"') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
+ if (rightChar == '"') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+}
+oop.inherits(CstyleBehaviour, Behaviour);
+
+exports.CstyleBehaviour = CstyleBehaviour;
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/xml', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/range', 'ace/mode/folding/fold_mode', 'ace/token_iterator'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var lang = require("../../lib/lang");
+var Range = require("../../range").Range;
+var BaseFoldMode = require("./fold_mode").FoldMode;
+var TokenIterator = require("../../token_iterator").TokenIterator;
+
+var FoldMode = exports.FoldMode = function(voidElements) {
+ BaseFoldMode.call(this);
+ this.voidElements = voidElements || {};
+};
+oop.inherits(FoldMode, BaseFoldMode);
+
+(function() {
+
+ this.getFoldWidget = function(session, foldStyle, row) {
+ var tag = this._getFirstTagInLine(session, row);
+
+ if (tag.closing)
+ return foldStyle == "markbeginend" ? "end" : "";
+
+ if (!tag.tagName || this.voidElements[tag.tagName.toLowerCase()])
+ return "";
+
+ if (tag.selfClosing)
+ return "";
+
+ if (tag.value.indexOf("/" + tag.tagName) !== -1)
+ return "";
+
+ return "start";
+ };
+
+ this._getFirstTagInLine = function(session, row) {
+ var tokens = session.getTokens(row, row)[0].tokens;
+ var value = "";
+ for (var i = 0; i < tokens.length; i++) {
+ var token = tokens[i];
+ if (token.type.indexOf("meta.tag") === 0)
+ value += token.value;
+ else
+ value += lang.stringRepeat(" ", token.value.length);
+ }
+
+ return this._parseTag(value);
+ };
+
+ this.tagRe = /^(\s*)(<?(\/?)([-_a-zA-Z0-9:!]*)\s*(\/?)>?)/;
+ this._parseTag = function(tag) {
+
+ var match = this.tagRe.exec(tag);
+ var column = this.tagRe.lastIndex || 0;
+ this.tagRe.lastIndex = 0;
+
+ return {
+ value: tag,
+ match: match ? match[2] : "",
+ closing: match ? !!match[3] : false,
+ selfClosing: match ? !!match[5] || match[2] == "/>" : false,
+ tagName: match ? match[4] : "",
+ column: match[1] ? column + match[1].length : column
+ };
+ };
+
+ /**
+ * reads a full tag and places the iterator after the tag
+ */
+ this._readTagForward = function(iterator) {
+ var token = iterator.getCurrentToken();
+ if (!token)
+ return null;
+
+ var value = "";
+ var start;
+
+ do {
+ if (token.type.indexOf("meta.tag") === 0) {
+ if (!start) {
+ var start = {
+ row: iterator.getCurrentTokenRow(),
+ column: iterator.getCurrentTokenColumn()
+ };
+ }
+ value += token.value;
+ if (value.indexOf(">") !== -1) {
+ var tag = this._parseTag(value);
+ tag.start = start;
+ tag.end = {
+ row: iterator.getCurrentTokenRow(),
+ column: iterator.getCurrentTokenColumn() + token.value.length
+ };
+ iterator.stepForward();
+ return tag;
+ }
+ }
+ } while(token = iterator.stepForward());
+
+ return null;
+ };
+
+ this._readTagBackward = function(iterator) {
+ var token = iterator.getCurrentToken();
+ if (!token)
+ return null;
+
+ var value = "";
+ var end;
+
+ do {
+ if (token.type.indexOf("meta.tag") === 0) {
+ if (!end) {
+ end = {
+ row: iterator.getCurrentTokenRow(),
+ column: iterator.getCurrentTokenColumn() + token.value.length
+ };
+ }
+ value = token.value + value;
+ if (value.indexOf("<") !== -1) {
+ var tag = this._parseTag(value);
+ tag.end = end;
+ tag.start = {
+ row: iterator.getCurrentTokenRow(),
+ column: iterator.getCurrentTokenColumn()
+ };
+ iterator.stepBackward();
+ return tag;
+ }
+ }
+ } while(token = iterator.stepBackward());
+
+ return null;
+ };
+
+ this._pop = function(stack, tag) {
+ while (stack.length) {
+
+ var top = stack[stack.length-1];
+ if (!tag || top.tagName == tag.tagName) {
+ return stack.pop();
+ }
+ else if (this.voidElements[tag.tagName]) {
+ return;
+ }
+ else if (this.voidElements[top.tagName]) {
+ stack.pop();
+ continue;
+ } else {
+ return null;
+ }
+ }
+ };
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ var firstTag = this._getFirstTagInLine(session, row);
+
+ if (!firstTag.match)
+ return null;
+
+ var isBackward = firstTag.closing || firstTag.selfClosing;
+ var stack = [];
+ var tag;
+
+ if (!isBackward) {
+ var iterator = new TokenIterator(session, row, firstTag.column);
+ var start = {
+ row: row,
+ column: firstTag.column + firstTag.tagName.length + 2
+ };
+ while (tag = this._readTagForward(iterator)) {
+ if (tag.selfClosing) {
+ if (!stack.length) {
+ tag.start.column += tag.tagName.length + 2;
+ tag.end.column -= 2;
+ return Range.fromPoints(tag.start, tag.end);
+ } else
+ continue;
+ }
+
+ if (tag.closing) {
+ this._pop(stack, tag);
+ if (stack.length == 0)
+ return Range.fromPoints(start, tag.start);
+ }
+ else {
+ stack.push(tag)
+ }
+ }
+ }
+ else {
+ var iterator = new TokenIterator(session, row, firstTag.column + firstTag.match.length);
+ var end = {
+ row: row,
+ column: firstTag.column
+ };
+
+ while (tag = this._readTagBackward(iterator)) {
+ if (tag.selfClosing) {
+ if (!stack.length) {
+ tag.start.column += tag.tagName.length + 2;
+ tag.end.column -= 2;
+ return Range.fromPoints(tag.start, tag.end);
+ } else
+ continue;
+ }
+
+ if (!tag.closing) {
+ this._pop(stack, tag);
+ if (stack.length == 0) {
+ tag.start.column += tag.tagName.length + 2;
+ return Range.fromPoints(tag.start, end);
+ }
+ }
+ else {
+ stack.push(tag)
+ }
+ }
+ }
+
+ };
+
+}).call(FoldMode.prototype);
+
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/fold_mode', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var Range = require("../../range").Range;
+
+var FoldMode = exports.FoldMode = function() {};
+
+(function() {
+
+ this.foldingStartMarker = null;
+ this.foldingStopMarker = null;
+
+ // must return "" if there's no fold, to enable caching
+ this.getFoldWidget = function(session, foldStyle, row) {
+ var line = session.getLine(row);
+ if (this.foldingStartMarker.test(line))
+ return "start";
+ if (foldStyle == "markbeginend"
+ && this.foldingStopMarker
+ && this.foldingStopMarker.test(line))
+ return "end";
+ return "";
+ };
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ return null;
+ };
+
+ this.indentationBlock = function(session, row, column) {
+ var re = /^\s*/;
+ var startRow = row;
+ var endRow = row;
+ var line = session.getLine(row);
+ var startColumn = column || line.length;
+ var startLevel = line.match(re)[0].length;
+ var maxRow = session.getLength()
+
+ while (++row < maxRow) {
+ line = session.getLine(row);
+ var level = line.match(re)[0].length;
+
+ if (level == line.length)
+ continue;
+
+ if (level <= startLevel)
+ break;
+
+ endRow = row;
+ }
+
+ if (endRow > startRow) {
+ var endColumn = session.getLine(endRow).length;
+ return new Range(startRow, startColumn, endRow, endColumn);
+ }
+ };
+
+ this.openingBracketBlock = function(session, bracket, row, column) {
+ var start = {row: row, column: column + 1};
+ var end = session.$findClosingBracket(bracket, start);
+ if (!end)
+ return;
+
+ var fw = session.foldWidgets[end.row];
+ if (fw == null)
+ fw = this.getFoldWidget(session, end.row);
+
+ if (fw == "start") {
+ end.row --;
+ end.column = session.getLine(end.row).length;
+ }
+ return Range.fromPoints(start, end);
+ };
+
+}).call(FoldMode.prototype);
+
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/javascript', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/javascript_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/range', 'ace/worker/worker_client', 'ace/mode/behaviour/cstyle', 'ace/mode/folding/cstyle'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextMode = require("./text").Mode;
+var Tokenizer = require("../tokenizer").Tokenizer;
+var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;
+var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
+var Range = require("../range").Range;
+var WorkerClient = require("../worker/worker_client").WorkerClient;
+var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
+var CStyleFoldMode = require("./folding/cstyle").FoldMode;
+
+var Mode = function() {
+ this.$tokenizer = new Tokenizer(new JavaScriptHighlightRules().getRules());
+ this.$outdent = new MatchingBraceOutdent();
+ this.$behaviour = new CstyleBehaviour();
+ this.foldingRules = new CStyleFoldMode();
+};
+oop.inherits(Mode, TextMode);
+
+(function() {
+
+
+ this.toggleCommentLines = function(state, doc, startRow, endRow) {
+ var outdent = true;
+ var re = /^(\s*)\/\//;
+
+ for (var i=startRow; i<= endRow; i++) {
+ if (!re.test(doc.getLine(i))) {
+ outdent = false;
+ break;
+ }
+ }
+
+ if (outdent) {
+ var deleteRange = new Range(0, 0, 0, 0);
+ for (var i=startRow; i<= endRow; i++)
+ {
+ var line = doc.getLine(i);
+ var m = line.match(re);
+ deleteRange.start.row = i;
+ deleteRange.end.row = i;
+ deleteRange.end.column = m[0].length;
+ doc.replace(deleteRange, m[1]);
+ }
+ }
+ else {
+ doc.indentRows(startRow, endRow, "//");
+ }
+ };
+
+ this.getNextLineIndent = function(state, line, tab) {
+ var indent = this.$getIndent(line);
+
+ var tokenizedLine = this.$tokenizer.getLineTokens(line, state);
+ var tokens = tokenizedLine.tokens;
+ var endState = tokenizedLine.state;
+
+ if (tokens.length && tokens[tokens.length-1].type == "comment") {
+ return indent;
+ }
+
+ if (state == "start" || state == "regex_allowed") {
+ var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);
+ if (match) {
+ indent += tab;
+ }
+ } else if (state == "doc-start") {
+ if (endState == "start" || state == "regex_allowed") {
+ return "";
+ }
+ var match = line.match(/^\s*(\/?)\*/);
+ if (match) {
+ if (match[1]) {
+ indent += " ";
+ }
+ indent += "* ";
+ }
+ }
+
+ return indent;
+ };
+
+ this.checkOutdent = function(state, line, input) {
+ return this.$outdent.checkOutdent(line, input);
+ };
+
+ this.autoOutdent = function(state, doc, row) {
+ this.$outdent.autoOutdent(doc, row);
+ };
+
+ this.createWorker = function(session) {
+ var worker = new WorkerClient(["ace"], "worker-javascript.js", "ace/mode/javascript_worker", "JavaScriptWorker");
+ worker.attachToDocument(session.getDocument());
+
+ worker.on("jslint", function(results) {
+ var errors = [];
+ for (var i=0; i<results.data.length; i++) {
+ var error = results.data[i];
+ if (error)
+ errors.push({
+ row: error.line-1,
+ column: error.character-1,
+ text: error.reason,
+ type: "warning",
+ lint: error
+ });
+ }
+ session.setAnnotations(errors);
+ });
+
+ worker.on("narcissus", function(e) {
+ session.setAnnotations([e.data]);
+ });
+
+ worker.on("terminate", function() {
+ session.clearAnnotations();
+ });
+
+ return worker;
+ };
+
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ * Mihai Sucan <mihai DOT sucan AT gmail DOT com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/javascript_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/unicode', 'ace/mode/doc_comment_highlight_rules', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var lang = require("../lib/lang");
+var unicode = require("../unicode");
+var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var JavaScriptHighlightRules = function() {
+
+ // see: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects
+ var globals = lang.arrayToMap(
+ // Constructors
+ ("Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" +
+ // E4X
+ "Namespace|QName|XML|XMLList|" +
+ "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" +
+ "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" +
+ // Errors
+ "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" +
+ "SyntaxError|TypeError|URIError|" +
+ // Non-constructor functions
+ "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" +
+ "isNaN|parseFloat|parseInt|" +
+ // Other
+ "JSON|Math|" +
+ // Pseudo
+ "this|arguments|prototype|window|document"
+ ).split("|")
+ );
+
+ var keywords = lang.arrayToMap(
+ ("break|case|catch|continue|default|delete|do|else|finally|for|function|" +
+ "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|" +
+ "const|yield|import|get|set").split("|")
+ );
+
+ // keywords which can be followed by regular expressions
+ var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield";
+
+ var deprecated = lang.arrayToMap(
+ ("__parent__|__count__|escape|unescape|with|__proto__").split("|")
+ );
+
+ var definitions = lang.arrayToMap(("const|let|var|function").split("|"));
+
+ var buildinConstants = lang.arrayToMap(
+ ("null|Infinity|NaN|undefined").split("|")
+ );
+
+ var futureReserved = lang.arrayToMap(
+ ("class|enum|extends|super|export|implements|private|" +
+ "public|interface|package|protected|static").split("|")
+ );
+
+ // TODO: Unicode escape sequences
+ var identifierRe = "[" + unicode.packages.L + "\\$_]["
+ + unicode.packages.L
+ + unicode.packages.Mn + unicode.packages.Mc
+ + unicode.packages.Nd
+ + unicode.packages.Pc + "\\$_]*\\b";
+
+ // regexp must not have capturing parentheses. Use (?:) instead.
+ // regexps are ordered -> the first match is used
+
+ this.$rules = {
+ "start" : [
+ {
+ token : "comment",
+ regex : "\\/\\/.*$"
+ },
+ new DocCommentHighlightRules().getStartRule("doc-start"),
+ {
+ token : "comment", // multi line comment
+ merge : true,
+ regex : "\\/\\*",
+ next : "comment"
+ }, {
+ token : "string", // single line
+ regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
+ }, {
+ token : "string", // multi line string start
+ merge : true,
+ regex : '["].*\\\\$',
+ next : "qqstring"
+ }, {
+ token : "string", // single line
+ regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
+ }, {
+ token : "string", // multi line string start
+ merge : true,
+ regex : "['].*\\\\$",
+ next : "qstring"
+ }, {
+ token : "constant.numeric", // hex
+ regex : "0[xX][0-9a-fA-F]+\\b"
+ }, {
+ token : "constant.numeric", // float
+ regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
+ }, {
+ token : ["keyword.definition", "text", "entity.name.function"],
+ regex : "(function)(\\s+)(" + identifierRe + ")"
+ }, {
+ token : "constant.language.boolean",
+ regex : "(?:true|false)\\b"
+ }, {
+ token : "keyword",
+ regex : "(?:" + kwBeforeRe + ")\\b",
+ next : "regex_allowed"
+ }, {
+ token : function(value) {
+ if (globals.hasOwnProperty(value))
+ return "variable.language";
+ else if (deprecated.hasOwnProperty(value))
+ return "invalid.deprecated";
+ else if (definitions.hasOwnProperty(value))
+ return "keyword.definition";
+ else if (keywords.hasOwnProperty(value))
+ return "keyword";
+ else if (buildinConstants.hasOwnProperty(value))
+ return "constant.language";
+ else if (futureReserved.hasOwnProperty(value))
+ return "invalid.illegal";
+ else if (value == "debugger")
+ return "invalid.deprecated";
+ else
+ return "identifier";
+ },
+ regex : identifierRe
+ }, {
+ token : "keyword.operator",
+ regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)",
+ next : "regex_allowed"
+ }, {
+ token : "punctuation.operator",
+ regex : "\\?|\\:|\\,|\\;|\\.",
+ next : "regex_allowed"
+ }, {
+ token : "paren.lparen",
+ regex : "[[({]",
+ next : "regex_allowed"
+ }, {
+ token : "paren.rparen",
+ regex : "[\\])}]"
+ }, {
+ token : "keyword.operator",
+ regex : "\\/=?",
+ next : "regex_allowed"
+ }, {
+ token: "comment",
+ regex: "^#!.*$"
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }
+ ],
+ // regular expressions are only allowed after certain tokens. This
+ // makes sure we don't mix up regexps with the divison operator
+ "regex_allowed": [
+ {
+ token : "comment", // multi line comment
+ merge : true,
+ regex : "\\/\\*",
+ next : "comment_regex_allowed"
+ }, {
+ token : "comment",
+ regex : "\\/\\/.*$"
+ }, {
+ token: "string.regexp",
+ regex: "\\/",
+ next: "regex",
+ merge: true
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }, {
+ // immediately return to the start mode without matching
+ // anything
+ token: "empty",
+ regex: "",
+ next: "start"
+ }
+ ],
+ "regex": [
+ {
+ token: "regexp.keyword.operator",
+ regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)",
+ next: "regex"
+ }, {
+ // flag
+ token: "string.regexp",
+ regex: "/\\w*",
+ next: "start",
+ merge: true
+ }, {
+ token: "string.regexp",
+ regex: "[^\\\\/\\[]+",
+ next: "regex",
+ merge: true
+ }, {
+ token: "string.regexp.charachterclass",
+ regex: "\\[",
+ next: "regex_character_class",
+ merge: true
+ }, {
+ token: "empty",
+ regex: "",
+ next: "start"
+ }
+ ],
+ "regex_character_class": [
+ {
+ token: "regexp.keyword.operator",
+ regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)",
+ next: "regex_character_class"
+ }, {
+ token: "string.regexp.charachterclass",
+ regex: "]",
+ next: "regex",
+ merge: true
+ }, {
+ token: "string.regexp.charachterclass",
+ regex: "[^\\\\\\]]+",
+ next: "regex_character_class",
+ merge: true
+ }, {
+ token: "empty",
+ regex: "",
+ next: "start"
+ }
+ ],
+ "comment_regex_allowed" : [
+ {
+ token : "comment", // closing comment
+ regex : ".*?\\*\\/",
+ merge : true,
+ next : "regex_allowed"
+ }, {
+ token : "comment", // comment spanning whole line
+ merge : true,
+ regex : ".+"
+ }
+ ],
+ "comment" : [
+ {
+ token : "comment", // closing comment
+ regex : ".*?\\*\\/",
+ merge : true,
+ next : "start"
+ }, {
+ token : "comment", // comment spanning whole line
+ merge : true,
+ regex : ".+"
+ }
+ ],
+ "qqstring" : [
+ {
+ token : "string",
+ regex : '(?:(?:\\\\.)|(?:[^"\\\\]))*?"',
+ next : "start"
+ }, {
+ token : "string",
+ merge : true,
+ regex : '.+'
+ }
+ ],
+ "qstring" : [
+ {
+ token : "string",
+ regex : "(?:(?:\\\\.)|(?:[^'\\\\]))*?'",
+ next : "start"
+ }, {
+ token : "string",
+ merge : true,
+ regex : '.+'
+ }
+ ]
+ };
+
+ this.embedRules(DocCommentHighlightRules, "doc-",
+ [ new DocCommentHighlightRules().getEndRule("start") ]);
+};
+
+oop.inherits(JavaScriptHighlightRules, TextHighlightRules);
+
+exports.JavaScriptHighlightRules = JavaScriptHighlightRules;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/doc_comment_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var DocCommentHighlightRules = function() {
+
+ this.$rules = {
+ "start" : [ {
+ token : "comment.doc.tag",
+ regex : "@[\\w\\d_]+" // TODO: fix email addresses
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "\\s+"
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "TODO"
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "[^@\\*]+"
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "."
+ }]
+ };
+};
+
+oop.inherits(DocCommentHighlightRules, TextHighlightRules);
+
+(function() {
+
+ this.getStartRule = function(start) {
+ return {
+ token : "comment.doc", // doc comment
+ merge : true,
+ regex : "\\/\\*(?=\\*)",
+ next : start
+ };
+ };
+
+ this.getEndRule = function (start) {
+ return {
+ token : "comment.doc", // closing comment
+ merge : true,
+ regex : "\\*\\/",
+ next : start
+ };
+ };
+
+}).call(DocCommentHighlightRules.prototype);
+
+exports.DocCommentHighlightRules = DocCommentHighlightRules;
+
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var Range = require("../range").Range;
+
+var MatchingBraceOutdent = function() {};
+
+(function() {
+
+ this.checkOutdent = function(line, input) {
+ if (! /^\s+$/.test(line))
+ return false;
+
+ return /^\s*\}/.test(input);
+ };
+
+ this.autoOutdent = function(doc, row) {
+ var line = doc.getLine(row);
+ var match = line.match(/^(\s*\})/);
+
+ if (!match) return 0;
+
+ var column = match[1].length;
+ var openBracePos = doc.findMatchingBracket({row: row, column: column});
+
+ if (!openBracePos || openBracePos.row == row) return 0;
+
+ var indent = this.$getIndent(doc.getLine(openBracePos.row));
+ doc.replace(new Range(row, 0, row, column-1), indent);
+ };
+
+ this.$getIndent = function(line) {
+ var match = line.match(/^(\s+)/);
+ if (match) {
+ return match[1];
+ }
+
+ return "";
+ };
+
+}).call(MatchingBraceOutdent.prototype);
+
+exports.MatchingBraceOutdent = MatchingBraceOutdent;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/worker/worker_client', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event_emitter'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var EventEmitter = require("../lib/event_emitter").EventEmitter;
+
+var WorkerClient = function(topLevelNamespaces, packagedJs, mod, classname) {
+
+ this.changeListener = this.changeListener.bind(this);
+
+ if (module.packaged) {
+ var base = this.$guessBasePath();
+ this.$worker = new Worker(base + packagedJs);
+ }
+ else {
+ var workerUrl = this.$normalizePath(require.nameToUrl("ace/worker/worker", null, "_"));
+ this.$worker = new Worker(workerUrl);
+
+ var tlns = {};
+ for (var i=0; i<topLevelNamespaces.length; i++) {
+ var ns = topLevelNamespaces[i];
+ var path = this.$normalizePath(require.nameToUrl(ns, null, "_").replace(/.js$/, ""));
+
+ tlns[ns] = path;
+ }
+ }
+
+ this.$worker.postMessage({
+ init : true,
+ tlns: tlns,
+ module: mod,
+ classname: classname
+ });
+
+ this.callbackId = 1;
+ this.callbacks = {};
+
+ var _self = this;
+ this.$worker.onerror = function(e) {
+ window.console && console.log && console.log(e);
+ throw e;
+ };
+ this.$worker.onmessage = function(e) {
+ var msg = e.data;
+ switch(msg.type) {
+ case "log":
+ window.console && console.log && console.log(msg.data);
+ break;
+
+ case "event":
+ _self._emit(msg.name, {data: msg.data});
+ break;
+
+ case "call":
+ var callback = _self.callbacks[msg.id];
+ if (callback) {
+ callback(msg.data);
+ delete _self.callbacks[msg.id];
+ }
+ break;
+ }
+ };
+};
+
+(function(){
+
+ oop.implement(this, EventEmitter);
+
+ this.$normalizePath = function(path) {
+ path = path.replace(/^[a-z]+:\/\/[^\/]+\//, ""); // Remove domain name and rebuild it
+ path = location.protocol + "//" + location.host
+ // paths starting with a slash are relative to the root (host)
+ + (path.charAt(0) == "/" ? "" : location.pathname.replace(/\/[^\/]*$/, ""))
+ + "/" + path.replace(/^[\/]+/, "");
+ return path;
+ };
+
+ this.$guessBasePath = function() {
+ if (require.aceBaseUrl)
+ return require.aceBaseUrl;
+
+ var scripts = document.getElementsByTagName("script");
+ for (var i=0; i<scripts.length; i++) {
+ var script = scripts[i];
+
+ var base = script.getAttribute("data-ace-base");
+ if (base)
+ return base.replace(/\/*$/, "/");
+
+ var src = script.src || script.getAttribute("src");
+ if (!src) {
+ continue;
+ }
+ var m = src.match(/^(?:(.*\/)ace\.js|(.*\/)ace(-uncompressed)?(-noconflict)?\.js)(?:\?|$)/);
+ if (m)
+ return m[1] || m[2];
+ }
+ return "";
+ };
+
+ this.terminate = function() {
+ this._emit("terminate", {});
+ this.$worker.terminate();
+ this.$worker = null;
+ this.$doc.removeEventListener("change", this.changeListener);
+ this.$doc = null;
+ };
+
+ this.send = function(cmd, args) {
+ this.$worker.postMessage({command: cmd, args: args});
+ };
+
+ this.call = function(cmd, args, callback) {
+ if (callback) {
+ var id = this.callbackId++;
+ this.callbacks[id] = callback;
+ args.push(id);
+ }
+ this.send(cmd, args);
+ };
+
+ this.emit = function(event, data) {
+ try {
+ // firefox refuses to clone objects which have function properties
+ // TODO: cleanup event
+ this.$worker.postMessage({event: event, data: {data: data.data}});
+ }
+ catch(ex) {}
+ };
+
+ this.attachToDocument = function(doc) {
+ if(this.$doc)
+ this.terminate();
+
+ this.$doc = doc;
+ this.call("setValue", [doc.getValue()]);
+ doc.on("change", this.changeListener);
+ };
+
+ this.changeListener = function(e) {
+ e.range = {
+ start: e.data.range.start,
+ end: e.data.range.end
+ };
+ this.emit("change", e);
+ };
+
+}).call(WorkerClient.prototype);
+
+exports.WorkerClient = WorkerClient;
+
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var Range = require("../../range").Range;
+var BaseFoldMode = require("./fold_mode").FoldMode;
+
+var FoldMode = exports.FoldMode = function() {};
+oop.inherits(FoldMode, BaseFoldMode);
+
+(function() {
+
+ this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
+ this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ var line = session.getLine(row);
+ var match = line.match(this.foldingStartMarker);
+ if (match) {
+ var i = match.index;
+
+ if (match[1])
+ return this.openingBracketBlock(session, match[1], row, i);
+
+ var range = session.getCommentFoldRange(row, i + match[0].length);
+ range.end.column -= 2;
+ return range;
+ }
+
+ if (foldStyle !== "markbeginend")
+ return;
+
+ var match = line.match(this.foldingStopMarker);
+ if (match) {
+ var i = match.index + match[0].length;
+
+ if (match[2]) {
+ var range = session.getCommentFoldRange(row, i);
+ range.end.column -= 2;
+ return range;
+ }
+
+ var end = {row: row, column: i};
+ var start = session.$findOpeningBracket(match[1], end);
+
+ if (!start)
+ return;
+
+ start.column++;
+ end.column--;
+
+ return Range.fromPoints(start, end);
+ }
+ };
+
+}).call(FoldMode.prototype);
+
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/css', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/css_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/worker/worker_client', 'ace/mode/folding/cstyle'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextMode = require("./text").Mode;
+var Tokenizer = require("../tokenizer").Tokenizer;
+var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;
+var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
+var WorkerClient = require("../worker/worker_client").WorkerClient;
+var CStyleFoldMode = require("./folding/cstyle").FoldMode;
+
+var Mode = function() {
+ this.$tokenizer = new Tokenizer(new CssHighlightRules().getRules(), "i");
+ this.$outdent = new MatchingBraceOutdent();
+ this.foldingRules = new CStyleFoldMode();
+};
+oop.inherits(Mode, TextMode);
+
+(function() {
+
+ this.foldingRules = "cStyle";
+
+ this.getNextLineIndent = function(state, line, tab) {
+ var indent = this.$getIndent(line);
+
+ // ignore braces in comments
+ var tokens = this.$tokenizer.getLineTokens(line, state).tokens;
+ if (tokens.length && tokens[tokens.length-1].type == "comment") {
+ return indent;
+ }
+
+ var match = line.match(/^.*\{\s*$/);
+ if (match) {
+ indent += tab;
+ }
+
+ return indent;
+ };
+
+ this.checkOutdent = function(state, line, input) {
+ return this.$outdent.checkOutdent(line, input);
+ };
+
+ this.autoOutdent = function(state, doc, row) {
+ this.$outdent.autoOutdent(doc, row);
+ };
+
+ this.createWorker = function(session) {
+ var worker = new WorkerClient(["ace"], "worker-css.js", "ace/mode/css_worker", "Worker");
+ worker.attachToDocument(session.getDocument());
+
+ worker.on("csslint", function(e) {
+ var errors = [];
+ e.data.forEach(function(message) {
+ errors.push({
+ row: message.line - 1,
+ column: message.col - 1,
+ text: message.message,
+ type: message.type,
+ lint: message
+ });
+ });
+
+ session.setAnnotations(errors);
+ });
+ return worker;
+ };
+
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/css_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var lang = require("../lib/lang");
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var CssHighlightRules = function() {
+
+ var properties = lang.arrayToMap(
+ ("-moz-appearance|-moz-box-sizing|-webkit-box-sizing|-moz-outline-radius|-moz-transform|-webkit-transform|" +
+ "appearance|azimuth|background-attachment|background-color|background-image|" +
+ "background-origin|background-position|background-repeat|background|border-bottom-color|" +
+ "border-bottom-style|border-bottom-width|border-bottom|border-collapse|" +
+ "border-color|border-left-color|border-left-style|border-left-width|" +
+ "border-left|border-right-color|border-right-style|border-right-width|" +
+ "border-right|border-spacing|border-style|border-top-color|" +
+ "border-top-style|border-top-width|border-top|border-width|border|" +
+ "bottom|box-sizing|caption-side|clear|clip|color|content|counter-increment|" +
+ "counter-reset|cue-after|cue-before|cue|cursor|direction|display|" +
+ "elevation|empty-cells|float|font-family|font-size-adjust|font-size|" +
+ "font-stretch|font-style|font-variant|font-weight|font|height|left|" +
+ "letter-spacing|line-height|list-style-image|list-style-position|" +
+ "list-style-type|list-style|margin-bottom|margin-left|margin-right|" +
+ "margin-top|marker-offset|margin|marks|max-height|max-width|min-height|" +
+ "min-width|-moz-border-radius|opacity|orphans|outline-color|outline-offset|outline-radius|" +
+ "outline-style|outline-width|outline|overflow|overflow-x|overflow-y|padding-bottom|" +
+ "padding-left|padding-right|padding-top|padding|page-break-after|" +
+ "page-break-before|page-break-inside|page|pause-after|pause-before|" +
+ "pause|pitch-range|pitch|play-during|pointer-events|position|quotes|resize|richness|right|" +
+ "size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|" +
+ "stress|table-layout|text-align|text-decoration|text-indent|" +
+ "text-shadow|text-transform|top|transform|unicode-bidi|vertical-align|" +
+ "visibility|voice-family|volume|white-space|widows|width|word-spacing|" +
+ "z-index").split("|")
+ );
+
+ var functions = lang.arrayToMap(
+ ("rgb|rgba|url|attr|counter|counters").split("|")
+ );
+
+ var constants = lang.arrayToMap(
+ ("absolute|all-scroll|always|armenian|auto|baseline|below|bidi-override|" +
+ "block|bold|bolder|border-box|both|bottom|break-all|break-word|capitalize|center|" +
+ "char|circle|cjk-ideographic|col-resize|collapse|content-box|crosshair|dashed|" +
+ "decimal-leading-zero|decimal|default|disabled|disc|" +
+ "distribute-all-lines|distribute-letter|distribute-space|" +
+ "distribute|dotted|double|e-resize|ellipsis|fixed|georgian|groove|" +
+ "hand|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|" +
+ "ideograph-alpha|ideograph-numeric|ideograph-parenthesis|" +
+ "ideograph-space|inactive|inherit|inline-block|inline|inset|inside|" +
+ "inter-ideograph|inter-word|italic|justify|katakana-iroha|katakana|" +
+ "keep-all|left|lighter|line-edge|line-through|line|list-item|loose|" +
+ "lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|" +
+ "medium|middle|move|n-resize|ne-resize|newspaper|no-drop|no-repeat|" +
+ "nw-resize|none|normal|not-allowed|nowrap|oblique|outset|outside|" +
+ "overline|pointer|progress|relative|repeat-x|repeat-y|repeat|right|" +
+ "ridge|row-resize|rtl|s-resize|scroll|se-resize|separate|small-caps|" +
+ "solid|square|static|strict|super|sw-resize|table-footer-group|" +
+ "table-header-group|tb-rl|text-bottom|text-top|text|thick|thin|top|" +
+ "transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|" +
+ "vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|" +
+ "zero").split("|")
+ );
+
+ var colors = lang.arrayToMap(
+ ("aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|" +
+ "purple|red|silver|teal|white|yellow").split("|")
+ );
+
+ // regexp must not have capturing parentheses. Use (?:) instead.
+ // regexps are ordered -> the first match is used
+
+ var numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))";
+
+ var base_ruleset = [
+ {
+ token : "comment", // multi line comment
+ merge : true,
+ regex : "\\/\\*",
+ next : "ruleset_comment"
+ },{
+ token : "string", // single line
+ regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
+ }, {
+ token : "string", // single line
+ regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
+ }, {
+ token : "constant.numeric",
+ regex : numRe + "(?:em|ex|px|cm|mm|in|pt|pc|deg|rad|grad|ms|s|hz|khz|%)"
+ }, {
+ token : "constant.numeric", // hex6 color
+ regex : "#[a-f0-9]{6}"
+ }, {
+ token : "constant.numeric", // hex3 color
+ regex : "#[a-f0-9]{3}"
+ }, {
+ token : function(value) {
+ if (properties.hasOwnProperty(value.toLowerCase())) {
+ return "support.type";
+ }
+ else if (functions.hasOwnProperty(value.toLowerCase())) {
+ return "support.function";
+ }
+ else if (constants.hasOwnProperty(value.toLowerCase())) {
+ return "support.constant";
+ }
+ else if (colors.hasOwnProperty(value.toLowerCase())) {
+ return "support.constant.color";
+ }
+ else {
+ return "text";
+ }
+ },
+ regex : "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"
+ }
+ ];
+
+ var ruleset = lang.copyArray(base_ruleset);
+ ruleset.unshift({
+ token : "paren.rparen",
+ regex : "\\}",
+ next: "start"
+ });
+
+ var media_ruleset = lang.copyArray( base_ruleset );
+ media_ruleset.unshift({
+ token : "paren.rparen",
+ regex : "\\}",
+ next: "media"
+ });
+
+ var base_comment = [{
+ token : "comment", // comment spanning whole line
+ merge : true,
+ regex : ".+"
+ }];
+
+ var comment = lang.copyArray(base_comment);
+ comment.unshift({
+ token : "comment", // closing comment
+ regex : ".*?\\*\\/",
+ next : "start"
+ });
+
+ var media_comment = lang.copyArray(base_comment);
+ media_comment.unshift({
+ token : "comment", // closing comment
+ regex : ".*?\\*\\/",
+ next : "media"
+ });
+
+ var ruleset_comment = lang.copyArray(base_comment);
+ ruleset_comment.unshift({
+ token : "comment", // closing comment
+ regex : ".*?\\*\\/",
+ next : "ruleset"
+ });
+
+ this.$rules = {
+ "start" : [{
+ token : "comment", // multi line comment
+ merge : true,
+ regex : "\\/\\*",
+ next : "comment"
+ }, {
+ token: "paren.lparen",
+ regex: "\\{",
+ next: "ruleset"
+ }, {
+ token: "string",
+ regex: "@.*?{",
+ next: "media"
+ },{
+ token: "keyword",
+ regex: "#[a-z0-9-_]+"
+ },{
+ token: "variable",
+ regex: "\\.[a-z0-9-_]+"
+ },{
+ token: "string",
+ regex: ":[a-z0-9-_]+"
+ },{
+ token: "constant",
+ regex: "[a-z0-9-_]+"
+ }],
+
+ "media" : [ {
+ token : "comment", // multi line comment
+ merge : true,
+ regex : "\\/\\*",
+ next : "media_comment"
+ }, {
+ token: "paren.lparen",
+ regex: "\\{",
+ next: "media_ruleset"
+ },{
+ token: "string",
+ regex: "\\}",
+ next: "start"
+ },{
+ token: "keyword",
+ regex: "#[a-z0-9-_]+"
+ },{
+ token: "variable",
+ regex: "\\.[a-z0-9-_]+"
+ },{
+ token: "string",
+ regex: ":[a-z0-9-_]+"
+ },{
+ token: "constant",
+ regex: "[a-z0-9-_]+"
+ }],
+
+ "comment" : comment,
+
+ "ruleset" : ruleset,
+ "ruleset_comment" : ruleset_comment,
+
+ "media_ruleset" : media_ruleset,
+ "media_comment" : media_comment
+ };
+};
+
+oop.inherits(CssHighlightRules, TextHighlightRules);
+
+exports.CssHighlightRules = CssHighlightRules;
+
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/coldfusion_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/css_highlight_rules', 'ace/mode/javascript_highlight_rules', 'ace/mode/text_highlight_rules', 'ace/mode/xml_util'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;
+var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+var xml_util = require("./xml_util");
+
+var ColdfusionHighlightRules = function() {
+
+ // regexp must not have capturing parentheses
+ // regexps are ordered -> the first match is used
+
+ this.$rules = {
+ start : [ {
+ token : "text",
+ merge : true,
+ regex : "<\\!\\[CDATA\\[",
+ next : "cdata"
+ }, {
+ token : "xml_pe",
+ regex : "<\\?.*?\\?>"
+ }, {
+ token : "comment",
+ merge : true,
+ regex : "<\\!--",
+ next : "comment"
+ }, {
+ token : "meta.tag",
+ regex : "<(?=\s*script)",
+ next : "script"
+ }, {
+ token : "meta.tag",
+ regex : "<(?=\s*style)",
+ next : "css"
+ }, {
+ token : "meta.tag", // opening tag
+ regex : "<\\/?",
+ next : "tag"
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }, {
+ token : "text",
+ regex : "[^<]+"
+ } ],
+
+ cdata : [ {
+ token : "text",
+ regex : "\\]\\]>",
+ next : "start"
+ }, {
+ token : "text",
+ merge : true,
+ regex : "\\s+"
+ }, {
+ token : "text",
+ merge : true,
+ regex : ".+"
+ } ],
+
+ comment : [ {
+ token : "comment",
+ regex : ".*?-->",
+ next : "start"
+ }, {
+ token : "comment",
+ merge : true,
+ regex : ".+"
+ } ]
+ };
+
+ xml_util.tag(this.$rules, "tag", "start");
+ xml_util.tag(this.$rules, "css", "css-start");
+ xml_util.tag(this.$rules, "script", "js-start");
+
+ this.embedRules(JavaScriptHighlightRules, "js-", [{
+ token: "comment",
+ regex: "\\/\\/.*(?=<\\/script>)",
+ next: "tag"
+ }, {
+ token: "meta.tag",
+ regex: "<\\/(?=script)",
+ next: "tag"
+ }]);
+
+ this.embedRules(CssHighlightRules, "css-", [{
+ token: "meta.tag",
+ regex: "<\\/(?=style)",
+ next: "tag"
+ }]);
+};
+
+oop.inherits(ColdfusionHighlightRules, TextHighlightRules);
+
+exports.ColdfusionHighlightRules = ColdfusionHighlightRules;
+});
+;
+ (function() {
+ window.require(["ace/ace"], function(a) {
+ if (!window.ace)
+ window.ace = {};
+ for (var key in a) if (a.hasOwnProperty(key))
+ ace[key] = a[key];
+ });
+ })();
+ \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-coldfusion.js b/apps/files_texteditor/js/aceeditor/mode-coldfusion.js
new file mode 100755
index 00000000000..fa8693e6d1d
--- /dev/null
+++ b/apps/files_texteditor/js/aceeditor/mode-coldfusion.js
@@ -0,0 +1 @@
+define("ace/mode/coldfusion",["require","exports","module","ace/lib/oop","ace/mode/xml","ace/mode/javascript","ace/mode/css","ace/tokenizer","ace/mode/coldfusion_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./xml").Mode,f=a("./javascript").Mode,g=a("./css").Mode,h=a("../tokenizer").Tokenizer,i=a("./coldfusion_highlight_rules").ColdfusionHighlightRules,j=function(){e.call(this);var a=new i;this.$tokenizer=new h(a.getRules()),this.$embeds=a.getEmbeds(),this.createModeDelegates({"js-":f,"css-":g})};d.inherits(j,e),function(){this.getNextLineIndent=function(a,b,c){return this.$getIndent(b)}}.call(j.prototype),b.Mode=j}),define("ace/mode/xml",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/xml_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/xml"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text").Mode,f=a("../tokenizer").Tokenizer,g=a("./xml_highlight_rules").XmlHighlightRules,h=a("./behaviour/xml").XmlBehaviour,i=a("./folding/xml").FoldMode,j=function(){this.$tokenizer=new f((new g).getRules()),this.$behaviour=new h,this.foldingRules=new i};d.inherits(j,e),function(){this.getNextLineIndent=function(a,b,c){return this.$getIndent(b)}}.call(j.prototype),b.Mode=j}),define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/xml_util","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./xml_util"),f=a("./text_highlight_rules").TextHighlightRules,g=function(){this.$rules={start:[{token:"text",regex:"<\\!\\[CDATA\\[",next:"cdata"},{token:"xml_pe",regex:"<\\?.*?\\?>"},{token:"comment",merge:!0,regex:"<\\!--",next:"comment"},{token:"meta.tag",regex:"<\\/?",next:"tag"},{token:"text",regex:"\\s+"},{token:"text",regex:"[^<]+"}],cdata:[{token:"text",regex:"\\]\\]>",next:"start"},{token:"text",regex:"\\s+"},{token:"text",regex:"(?:[^\\]]|\\](?!\\]>))+"}],comment:[{token:"comment",regex:".*?-->",next:"start"},{token:"comment",merge:!0,regex:".+"}]},e.tag(this.$rules,"tag","start")};d.inherits(g,f),b.XmlHighlightRules=g}),define("ace/mode/xml_util",["require","exports","module","ace/lib/lang"],function(a,b,c){function g(a){return[{token:"string",regex:'".*?"'},{token:"string",merge:!0,regex:'["].*',next:a+"-qqstring"},{token:"string",regex:"'.*?'"},{token:"string",merge:!0,regex:"['].*",next:a+"-qstring"}]}function h(a,b){return[{token:"string",merge:!0,regex:".*?"+a,next:b},{token:"string",merge:!0,regex:".+"}]}"use strict";var d=a("../lib/lang"),e=d.arrayToMap("button|form|input|label|select|textarea".split("|")),f=d.arrayToMap("table|tbody|td|tfoot|th|tr".split("|"));b.tag=function(a,b,c){a[b]=[{token:"text",regex:"\\s+"},{token:function(a){return a==="a"?"meta.tag.anchor":a==="img"?"meta.tag.image":a==="script"?"meta.tag.script":a==="style"?"meta.tag.style":e.hasOwnProperty(a.toLowerCase())?"meta.tag.form":f.hasOwnProperty(a.toLowerCase())?"meta.tag.table":"meta.tag"},merge:!0,regex:"[-_a-zA-Z0-9:!]+",next:b+"embed-attribute-list"},{token:"empty",regex:"",next:b+"embed-attribute-list"}],a[b+"-qstring"]=h("'",b+"embed-attribute-list"),a[b+"-qqstring"]=h('"',b+"embed-attribute-list"),a[b+"embed-attribute-list"]=[{token:"meta.tag",merge:!0,regex:"/?>",next:c},{token:"keyword.operator",regex:"="},{token:"entity.other.attribute-name",regex:"[-_a-zA-Z0-9:]+"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"text",regex:"\\s+"}].concat(g(b))}}),define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("../behaviour").Behaviour,f=a("./cstyle").CstyleBehaviour,g=function(){this.inherit(f,["string_dquotes"]),this.add("brackets","insertion",function(a,b,c,d,e){if(e=="<"){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?!1:{text:"<>",selection:[1,1]}}if(e==">"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j==">")return{text:"",selection:[1,1]}}else if(e=="\n"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),k=i.substring(h.column,h.column+2);if(k=="</"){var l=this.$getIndent(d.doc.getLine(h.row))+d.getTabString(),m=this.$getIndent(d.doc.getLine(h.row));return{text:"\n"+l+"\n"+m,selection:[1,l.length,1,l.length]}}}})};d.inherits(g,e),b.XmlBehaviour=g}),define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("../behaviour").Behaviour,f=function(){this.add("braces","insertion",function(a,b,c,d,e){if(e=="{"){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"{"+g+"}",selection:!1}:{text:"{}",selection:[1,1]}}if(e=="}"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var k=d.$findOpeningBracket("}",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}else if(e=="\n"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var l=d.findMatchingBracket({row:h.row,column:h.column+1});if(!l)return null;var m=this.getNextLineIndent(a,i.substring(0,i.length-1),d.getTabString()),n=this.$getIndent(d.doc.getLine(l.row));return{text:"\n"+m+"\n"+n,selection:[1,m.length,1,m.length]}}}}),this.add("braces","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="{"){var g=d.doc.getLine(e.start.row),h=g.substring(e.end.column,e.end.column+1);if(h=="}")return e.end.column++,e}}),this.add("parens","insertion",function(a,b,c,d,e){if(e=="("){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"("+g+")",selection:!1}:{text:"()",selection:[1,1]}}if(e==")"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j==")"){var k=d.$findOpeningBracket(")",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="("){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h==")")return e.end.column++,e}}),this.add("string_dquotes","insertion",function(a,b,c,d,e){if(e=='"'){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);if(g!=="")return{text:'"'+g+'"',selection:!1};var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column-1,h.column);if(j=="\\")return null;var k=d.getTokens(f.start.row,f.start.row)[0].tokens,l=0,m,n=-1;for(var o=0;o<k.length;o++){m=k[o],m.type=="string"?n=-1:n<0&&(n=m.value.indexOf('"'));if(m.value.length+l>f.start.column)break;l+=k[o].value.length}if(!m||n<0&&m.type!=="comment"&&(m.type!=="string"||f.start.column!==m.value.length+l-1&&m.value.lastIndexOf('"')===m.value.length-1))return{text:'""',selection:[1,1]};if(m&&m.type==="string"){var p=i.substring(h.column,h.column+1);if(p=='"')return{text:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=='"'){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h=='"')return e.end.column++,e}})};d.inherits(f,e),b.CstyleBehaviour=f}),define("ace/mode/folding/xml",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/range","ace/mode/folding/fold_mode","ace/token_iterator"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("../../lib/lang"),f=a("../../range").Range,g=a("./fold_mode").FoldMode,h=a("../../token_iterator").TokenIterator,i=b.FoldMode=function(a){g.call(this),this.voidElements=a||{}};d.inherits(i,g),function(){this.getFoldWidget=function(a,b,c){var d=this._getFirstTagInLine(a,c);return d.closing?b=="markbeginend"?"end":"":!d.tagName||this.voidElements[d.tagName.toLowerCase()]?"":d.selfClosing?"":d.value.indexOf("/"+d.tagName)!==-1?"":"start"},this._getFirstTagInLine=function(a,b){var c=a.getTokens(b,b)[0].tokens,d="";for(var f=0;f<c.length;f++){var g=c[f];g.type.indexOf("meta.tag")===0?d+=g.value:d+=e.stringRepeat(" ",g.value.length)}return this._parseTag(d)},this.tagRe=/^(\s*)(<?(\/?)([-_a-zA-Z0-9:!]*)\s*(\/?)>?)/,this._parseTag=function(a){var b=this.tagRe.exec(a),c=this.tagRe.lastIndex||0;return this.tagRe.lastIndex=0,{value:a,match:b?b[2]:"",closing:b?!!b[3]:!1,selfClosing:b?!!b[5]||b[2]=="/>":!1,tagName:b?b[4]:"",column:b[1]?c+b[1].length:c}},this._readTagForward=function(a){var b=a.getCurrentToken();if(!b)return null;var c="",d;do if(b.type.indexOf("meta.tag")===0){if(!d)var d={row:a.getCurrentTokenRow(),column:a.getCurrentTokenColumn()};c+=b.value;if(c.indexOf(">")!==-1){var e=this._parseTag(c);return e.start=d,e.end={row:a.getCurrentTokenRow(),column:a.getCurrentTokenColumn()+b.value.length},a.stepForward(),e}}while(b=a.stepForward());return null},this._readTagBackward=function(a){var b=a.getCurrentToken();if(!b)return null;var c="",d;do if(b.type.indexOf("meta.tag")===0){d||(d={row:a.getCurrentTokenRow(),column:a.getCurrentTokenColumn()+b.value.length}),c=b.value+c;if(c.indexOf("<")!==-1){var e=this._parseTag(c);return e.end=d,e.start={row:a.getCurrentTokenRow(),column:a.getCurrentTokenColumn()},a.stepBackward(),e}}while(b=a.stepBackward());return null},this._pop=function(a,b){while(a.length){var c=a[a.length-1];if(!b||c.tagName==b.tagName)return a.pop();if(this.voidElements[b.tagName])return;if(this.voidElements[c.tagName]){a.pop();continue}return null}},this.getFoldWidgetRange=function(a,b,c){var d=this._getFirstTagInLine(a,c);if(!d.match)return null;var e=d.closing||d.selfClosing,g=[],i;if(!e){var j=new h(a,c,d.column),k={row:c,column:d.column+d.tagName.length+2};while(i=this._readTagForward(j)){if(i.selfClosing){if(!g.length)return i.start.column+=i.tagName.length+2,i.end.column-=2,f.fromPoints(i.start,i.end);continue}if(i.closing){this._pop(g,i);if(g.length==0)return f.fromPoints(k,i.start)}else g.push(i)}}else{var j=new h(a,c,d.column+d.match.length),l={row:c,column:d.column};while(i=this._readTagBackward(j)){if(i.selfClosing){if(!g.length)return i.start.column+=i.tagName.length+2,i.end.column-=2,f.fromPoints(i.start,i.end);continue}if(!i.closing){this._pop(g,i);if(g.length==0)return i.start.column+=i.tagName.length+2,f.fromPoints(i.start,l)}else g.push(i)}}}}.call(i.prototype)}),define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"],function(a,b,c){"use strict";var d=a("../../range").Range,e=b.FoldMode=function(){};((function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(a,b,c){var d=a.getLine(c);return this.foldingStartMarker.test(d)?"start":b=="markbeginend"&&this.foldingStopMarker&&this.foldingStopMarker.test(d)?"end":""},this.getFoldWidgetRange=function(a,b,c){return null},this.indentationBlock=function(a,b,c){var e=/^\s*/,f=b,g=b,h=a.getLine(b),i=c||h.length,j=h.match(e)[0].length,k=a.getLength();while(++b<k){h=a.getLine(b);var l=h.match(e)[0].length;if(l==h.length)continue;if(l<=j)break;g=b}if(g>f){var m=a.getLine(g).length;return new d(f,i,g,m)}},this.openingBracketBlock=function(a,b,c,e){var f={row:c,column:e+1},g=a.$findClosingBracket(b,f);if(!g)return;var h=a.foldWidgets[g.row];return h==null&&(h=this.getFoldWidget(a,g.row)),h=="start"&&(g.row--,g.column=a.getLine(g.row).length),d.fromPoints(f,g)}})).call(e.prototype)}),define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text").Mode,f=a("../tokenizer").Tokenizer,g=a("./javascript_highlight_rules").JavaScriptHighlightRules,h=a("./matching_brace_outdent").MatchingBraceOutdent,i=a("../range").Range,j=a("../worker/worker_client").WorkerClient,k=a("./behaviour/cstyle").CstyleBehaviour,l=a("./folding/cstyle").FoldMode,m=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h,this.$behaviour=new k,this.foldingRules=new l};d.inherits(m,e),function(){this.toggleCommentLines=function(a,b,c,d){var e=!0,f=/^(\s*)\/\//;for(var g=c;g<=d;g++)if(!f.test(b.getLine(g))){e=!1;break}if(e){var h=new i(0,0,0,0);for(var g=c;g<=d;g++){var j=b.getLine(g),k=j.match(f);h.start.row=g,h.end.row=g,h.end.column=k[0].length,b.replace(h,k[1])}}else b.indentRows(c,d,"//")},this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=this.$tokenizer.getLineTokens(b,a),f=e.tokens,g=e.state;if(f.length&&f[f.length-1].type=="comment")return d;if(a=="start"||a=="regex_allowed"){var h=b.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);h&&(d+=c)}else if(a=="doc-start"){if(g=="start"||a=="regex_allowed")return"";var h=b.match(/^\s*(\/?)\*/);h&&(h[1]&&(d+=" "),d+="* ")}return d},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)},this.createWorker=function(a){var b=new j(["ace"],"worker-javascript.js","ace/mode/javascript_worker","JavaScriptWorker");return b.attachToDocument(a.getDocument()),b.on("jslint",function(b){var c=[];for(var d=0;d<b.data.length;d++){var e=b.data[d];e&&c.push({row:e.line-1,column:e.character-1,text:e.reason,type:"warning",lint:e})}a.setAnnotations(c)}),b.on("narcissus",function(b){a.setAnnotations([b.data])}),b.on("terminate",function(){a.clearAnnotations()}),b}}.call(m.prototype),b.Mode=m}),define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/unicode","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("../lib/lang"),f=a("../unicode"),g=a("./doc_comment_highlight_rules").DocCommentHighlightRules,h=a("./text_highlight_rules").TextHighlightRules,i=function(){var a=e.arrayToMap("Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document".split("|")),b=e.arrayToMap("break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|const|yield|import|get|set".split("|")),c="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield",d=e.arrayToMap("__parent__|__count__|escape|unescape|with|__proto__".split("|")),h=e.arrayToMap("const|let|var|function".split("|")),i=e.arrayToMap("null|Infinity|NaN|undefined".split("|")),j=e.arrayToMap("class|enum|extends|super|export|implements|private|public|interface|package|protected|static".split("|")),k="["+f.packages.L+"\\$_]["+f.packages.L+f.packages.Mn+f.packages.Mc+f.packages.Nd+f.packages.Pc+"\\$_]*\\b";this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},(new g).getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",merge:!0,regex:'["].*\\\\$',next:"qqstring"},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"string",merge:!0,regex:"['].*\\\\$",next:"qstring"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:["keyword.definition","text","entity.name.function"],regex:"(function)(\\s+)("+k+")"},{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:"keyword",regex:"(?:"+c+")\\b",next:"regex_allowed"},{token:function(c){return a.hasOwnProperty(c)?"variable.language":d.hasOwnProperty(c)?"invalid.deprecated":h.hasOwnProperty(c)?"keyword.definition":b.hasOwnProperty(c)?"keyword":i.hasOwnProperty(c)?"constant.language":j.hasOwnProperty(c)?"invalid.illegal":c=="debugger"?"invalid.deprecated":"identifier"},regex:k},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)",next:"regex_allowed"},{token:"punctuation.operator",regex:"\\?|\\:|\\,|\\;|\\.",next:"regex_allowed"},{token:"paren.lparen",regex:"[[({]",next:"regex_allowed"},{token:"paren.rparen",regex:"[\\])}]"},{token:"keyword.operator",regex:"\\/=?",next:"regex_allowed"},{token:"comment",regex:"^#!.*$"},{token:"text",regex:"\\s+"}],regex_allowed:[{token:"comment",merge:!0,regex:"\\/\\*",next:"comment_regex_allowed"},{token:"comment",regex:"\\/\\/.*$"},{token:"string.regexp",regex:"\\/",next:"regex",merge:!0},{token:"text",regex:"\\s+"},{token:"empty",regex:"",next:"start"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)",next:"regex"},{token:"string.regexp",regex:"/\\w*",next:"start",merge:!0},{token:"string.regexp",regex:"[^\\\\/\\[]+",next:"regex",merge:!0},{token:"string.regexp.charachterclass",regex:"\\[",next:"regex_character_class",merge:!0},{token:"empty",regex:"",next:"start"}],regex_character_class:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)",next:"regex_character_class"},{token:"string.regexp.charachterclass",regex:"]",next:"regex",merge:!0},{token:"string.regexp.charachterclass",regex:"[^\\\\\\]]+",next:"regex_character_class",merge:!0},{token:"empty",regex:"",next:"start"}],comment_regex_allowed:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"regex_allowed"},{token:"comment",merge:!0,regex:".+"}],comment:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"string",regex:'(?:(?:\\\\.)|(?:[^"\\\\]))*?"',next:"start"},{token:"string",merge:!0,regex:".+"}],qstring:[{token:"string",regex:"(?:(?:\\\\.)|(?:[^'\\\\]))*?'",next:"start"},{token:"string",merge:!0,regex:".+"}]},this.embedRules(g,"doc-",[(new g).getEndRule("start")])};d.inherits(i,h),b.JavaScriptHighlightRules=i}),define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text_highlight_rules").TextHighlightRules,f=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};d.inherits(f,e),function(){this.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},this.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}}}.call(f.prototype),b.DocCommentHighlightRules=f}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(a,b,c){"use strict";var d=a("../range").Range,e=function(){};((function(){this.checkOutdent=function(a,b){return/^\s+$/.test(a)?/^\s*\}/.test(b):!1},this.autoOutdent=function(a,b){var c=a.getLine(b),e=c.match(/^(\s*\})/);if(!e)return 0;var f=e[1].length,g=a.findMatchingBracket({row:b,column:f});if(!g||g.row==b)return 0;var h=this.$getIndent(a.getLine(g.row));a.replace(new d(b,0,b,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""}})).call(e.prototype),b.MatchingBraceOutdent=e}),define("ace/worker/worker_client",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("../lib/event_emitter").EventEmitter,f=function(b,d,e,f){this.changeListener=this.changeListener.bind(this);if(c.packaged){var g=this.$guessBasePath();this.$worker=new Worker(g+d)}else{var h=this.$normalizePath(a.nameToUrl("ace/worker/worker",null,"_"));this.$worker=new Worker(h);var i={};for(var j=0;j<b.length;j++){var k=b[j],l=this.$normalizePath(a.nameToUrl(k,null,"_").replace(/.js$/,""));i[k]=l}}this.$worker.postMessage({init:!0,tlns:i,module:e,classname:f}),this.callbackId=1,this.callbacks={};var m=this;this.$worker.onerror=function(a){throw window.console&&console.log&&console.log(a),a},this.$worker.onmessage=function(a){var b=a.data;switch(b.type){case"log":window.console&&console.log&&console.log(b.data);break;case"event":m._emit(b.name,{data:b.data});break;case"call":var c=m.callbacks[b.id];c&&(c(b.data),delete m.callbacks[b.id])}}};((function(){d.implement(this,e),this.$normalizePath=function(a){return a=a.replace(/^[a-z]+:\/\/[^\/]+\//,""),a=location.protocol+"//"+location.host+(a.charAt(0)=="/"?"":location.pathname.replace(/\/[^\/]*$/,""))+"/"+a.replace(/^[\/]+/,""),a},this.$guessBasePath=function(){if(a.aceBaseUrl)return a.aceBaseUrl;var b=document.getElementsByTagName("script");for(var c=0;c<b.length;c++){var d=b[c],e=d.getAttribute("data-ace-base");if(e)return e.replace(/\/*$/,"/");var f=d.src||d.getAttribute("src");if(!f)continue;var g=f.match(/^(?:(.*\/)ace\.js|(.*\/)ace(-uncompressed)?(-noconflict)?\.js)(?:\?|$)/);if(g)return g[1]||g[2]}return""},this.terminate=function(){this._emit("terminate",{}),this.$worker.terminate(),this.$worker=null,this.$doc.removeEventListener("change",this.changeListener),this.$doc=null},this.send=function(a,b){this.$worker.postMessage({command:a,args:b})},this.call=function(a,b,c){if(c){var d=this.callbackId++;this.callbacks[d]=c,b.push(d)}this.send(a,b)},this.emit=function(a,b){try{this.$worker.postMessage({event:a,data:{data:b.data}})}catch(c){}},this.attachToDocument=function(a){this.$doc&&this.terminate(),this.$doc=a,this.call("setValue",[a.getValue()]),a.on("change",this.changeListener)},this.changeListener=function(a){a.range={start:a.data.range.start,end:a.data.range.end},this.emit("change",a)}})).call(f.prototype),b.WorkerClient=f}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("../../range").Range,f=a("./fold_mode").FoldMode,g=b.FoldMode=function(){};d.inherits(g,f),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(a,b,c){var d=a.getLine(c),f=d.match(this.foldingStartMarker);if(f){var g=f.index;if(f[1])return this.openingBracketBlock(a,f[1],c,g);var h=a.getCommentFoldRange(c,g+f[0].length);return h.end.column-=2,h}if(b!=="markbeginend")return;var f=d.match(this.foldingStopMarker);if(f){var g=f.index+f[0].length;if(f[2]){var h=a.getCommentFoldRange(c,g);return h.end.column-=2,h}var i={row:c,column:g},j=a.$findOpeningBracket(f[1],i);if(!j)return;return j.column++,i.column--,e.fromPoints(j,i)}}}.call(g.prototype)}),define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/folding/cstyle"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text").Mode,f=a("../tokenizer").Tokenizer,g=a("./css_highlight_rules").CssHighlightRules,h=a("./matching_brace_outdent").MatchingBraceOutdent,i=a("../worker/worker_client").WorkerClient,j=a("./folding/cstyle").FoldMode,k=function(){this.$tokenizer=new f((new g).getRules(),"i"),this.$outdent=new h,this.foldingRules=new j};d.inherits(k,e),function(){this.foldingRules="cStyle",this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=this.$tokenizer.getLineTokens(b,a).tokens;if(e.length&&e[e.length-1].type=="comment")return d;var f=b.match(/^.*\{\s*$/);return f&&(d+=c),d},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)},this.createWorker=function(a){var b=new i(["ace"],"worker-css.js","ace/mode/css_worker","Worker");return b.attachToDocument(a.getDocument()),b.on("csslint",function(b){var c=[];b.data.forEach(function(a){c.push({row:a.line-1,column:a.col-1,text:a.message,type:a.type,lint:a})}),a.setAnnotations(c)}),b}}.call(k.prototype),b.Mode=k}),define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("../lib/lang"),f=a("./text_highlight_rules").TextHighlightRules,g=function(){var a=e.arrayToMap("-moz-appearance|-moz-box-sizing|-webkit-box-sizing|-moz-outline-radius|-moz-transform|-webkit-transform|appearance|azimuth|background-attachment|background-color|background-image|background-origin|background-position|background-repeat|background|border-bottom-color|border-bottom-style|border-bottom-width|border-bottom|border-collapse|border-color|border-left-color|border-left-style|border-left-width|border-left|border-right-color|border-right-style|border-right-width|border-right|border-spacing|border-style|border-top-color|border-top-style|border-top-width|border-top|border-width|border|bottom|box-sizing|caption-side|clear|clip|color|content|counter-increment|counter-reset|cue-after|cue-before|cue|cursor|direction|display|elevation|empty-cells|float|font-family|font-size-adjust|font-size|font-stretch|font-style|font-variant|font-weight|font|height|left|letter-spacing|line-height|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|marker-offset|margin|marks|max-height|max-width|min-height|min-width|-moz-border-radius|opacity|orphans|outline-color|outline-offset|outline-radius|outline-style|outline-width|outline|overflow|overflow-x|overflow-y|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page|pause-after|pause-before|pause|pitch-range|pitch|play-during|pointer-events|position|quotes|resize|richness|right|size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|stress|table-layout|text-align|text-decoration|text-indent|text-shadow|text-transform|top|transform|unicode-bidi|vertical-align|visibility|voice-family|volume|white-space|widows|width|word-spacing|z-index".split("|")),b=e.arrayToMap("rgb|rgba|url|attr|counter|counters".split("|")),c=e.arrayToMap("absolute|all-scroll|always|armenian|auto|baseline|below|bidi-override|block|bold|bolder|border-box|both|bottom|break-all|break-word|capitalize|center|char|circle|cjk-ideographic|col-resize|collapse|content-box|crosshair|dashed|decimal-leading-zero|decimal|default|disabled|disc|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ellipsis|fixed|georgian|groove|hand|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|inactive|inherit|inline-block|inline|inset|inside|inter-ideograph|inter-word|italic|justify|katakana-iroha|katakana|keep-all|left|lighter|line-edge|line-through|line|list-item|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|medium|middle|move|n-resize|ne-resize|newspaper|no-drop|no-repeat|nw-resize|none|normal|not-allowed|nowrap|oblique|outset|outside|overline|pointer|progress|relative|repeat-x|repeat-y|repeat|right|ridge|row-resize|rtl|s-resize|scroll|se-resize|separate|small-caps|solid|square|static|strict|super|sw-resize|table-footer-group|table-header-group|tb-rl|text-bottom|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|zero".split("|")),d=e.arrayToMap("aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow".split("|")),f="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))",g=[{token:"comment",merge:!0,regex:"\\/\\*",next:"ruleset_comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"constant.numeric",regex:f+"(?:em|ex|px|cm|mm|in|pt|pc|deg|rad|grad|ms|s|hz|khz|%)"},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:function(e){return a.hasOwnProperty(e.toLowerCase())?"support.type":b.hasOwnProperty(e.toLowerCase())?"support.function":c.hasOwnProperty(e.toLowerCase())?"support.constant":d.hasOwnProperty(e.toLowerCase())?"support.constant.color":"text"},regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"}],h=e.copyArray(g);h.unshift({token:"paren.rparen",regex:"\\}",next:"start"});var i=e.copyArray(g);i.unshift({token:"paren.rparen",regex:"\\}",next:"media"});var j=[{token:"comment",merge:!0,regex:".+"}],k=e.copyArray(j);k.unshift({token:"comment",regex:".*?\\*\\/",next:"start"});var l=e.copyArray(j);l.unshift({token:"comment",regex:".*?\\*\\/",next:"media"});var m=e.copyArray(j);m.unshift({token:"comment",regex:".*?\\*\\/",next:"ruleset"}),this.$rules={start:[{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"paren.lparen",regex:"\\{",next:"ruleset"},{token:"string",regex:"@.*?{",next:"media"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"}],media:[{token:"comment",merge:!0,regex:"\\/\\*",next:"media_comment"},{token:"paren.lparen",regex:"\\{",next:"media_ruleset"},{token:"string",regex:"\\}",next:"start"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"}],comment:k,ruleset:h,ruleset_comment:m,media_ruleset:i,media_comment:l}};d.inherits(g,f),b.CssHighlightRules=g}),define("ace/mode/coldfusion_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/text_highlight_rules","ace/mode/xml_util"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./css_highlight_rules").CssHighlightRules,f=a("./javascript_highlight_rules").JavaScriptHighlightRules,g=a("./text_highlight_rules").TextHighlightRules,h=a("./xml_util"),i=function(){this.$rules={start:[{token:"text",merge:!0,regex:"<\\!\\[CDATA\\[",next:"cdata"},{token:"xml_pe",regex:"<\\?.*?\\?>"},{token:"comment",merge:!0,regex:"<\\!--",next:"comment"},{token:"meta.tag",regex:"<(?=s*script)",next:"script"},{token:"meta.tag",regex:"<(?=s*style)",next:"css"},{token:"meta.tag",regex:"<\\/?",next:"tag"},{token:"text",regex:"\\s+"},{token:"text",regex:"[^<]+"}],cdata:[{token:"text",regex:"\\]\\]>",next:"start"},{token:"text",merge:!0,regex:"\\s+"},{token:"text",merge:!0,regex:".+"}],comment:[{token:"comment",regex:".*?-->",next:"start"},{token:"comment",merge:!0,regex:".+"}]},h.tag(this.$rules,"tag","start"),h.tag(this.$rules,"css","css-start"),h.tag(this.$rules,"script","js-start"),this.embedRules(f,"js-",[{token:"comment",regex:"\\/\\/.*(?=<\\/script>)",next:"tag"},{token:"meta.tag",regex:"<\\/(?=script)",next:"tag"}]),this.embedRules(e,"css-",[{token:"meta.tag",regex:"<\\/(?=style)",next:"tag"}])};d.inherits(i,g),b.ColdfusionHighlightRules=i}),function(){window.require(["ace/ace"],function(a){window.ace||(window.ace={});for(var b in a)a.hasOwnProperty(b)&&(ace[b]=a[b])})}() \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-csharp-uncompressed.js b/apps/files_texteditor/js/aceeditor/mode-csharp-uncompressed.js
new file mode 100755
index 00000000000..492e2ff9847
--- /dev/null
+++ b/apps/files_texteditor/js/aceeditor/mode-csharp-uncompressed.js
@@ -0,0 +1,778 @@
+define('ace/mode/csharp', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/csharp_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/mode/behaviour/cstyle', 'ace/mode/folding/cstyle'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextMode = require("./text").Mode;
+var Tokenizer = require("../tokenizer").Tokenizer;
+var CSharpHighlightRules = require("./csharp_highlight_rules").CSharpHighlightRules;
+var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
+var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
+var CStyleFoldMode = require("./folding/cstyle").FoldMode;
+
+var Mode = function() {
+ this.$tokenizer = new Tokenizer(new CSharpHighlightRules().getRules());
+ this.$outdent = new MatchingBraceOutdent();
+ this.$behaviour = new CstyleBehaviour();
+ this.foldingRules = new CStyleFoldMode();
+};
+oop.inherits(Mode, TextMode);
+
+(function() {
+
+ this.getNextLineIndent = function(state, line, tab) {
+ var indent = this.$getIndent(line);
+
+ var tokenizedLine = this.$tokenizer.getLineTokens(line, state);
+ var tokens = tokenizedLine.tokens;
+
+ if (tokens.length && tokens[tokens.length-1].type == "comment") {
+ return indent;
+ }
+
+ if (state == "start") {
+ var match = line.match(/^.*[\{\(\[]\s*$/);
+ if (match) {
+ indent += tab;
+ }
+ }
+
+ return indent;
+ };
+
+ this.checkOutdent = function(state, line, input) {
+ return this.$outdent.checkOutdent(line, input);
+ };
+
+ this.autoOutdent = function(state, doc, row) {
+ this.$outdent.autoOutdent(doc, row);
+ };
+
+
+ this.createWorker = function(session) {
+ return null;
+ };
+
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+});
+define('ace/mode/csharp_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/mode/doc_comment_highlight_rules', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var lang = require("../lib/lang");
+var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var CSharpHighlightRules = function() {
+
+ var keywords = lang.arrayToMap(
+ ("abstract|event|new|struct|as|explicit|null|switch|base|extern|object|this|bool|false|operator|throw|break|finally|out|true|byte|fixed|override|try|case|float|params|typeof|catch|for|private|uint|char|foreach|protected|ulong|checked|goto|public|unchecked|class|if|readonly|unsafe|const|implicit|ref|ushort|continue|in|return|using|decimal|int|sbyte|virtual|default|interface|sealed|volatile|delegate|internal|short|void|do|is|sizeof|while|double|lock|stackalloc|else|long|static|enum|namespace|string|var|dynamic").split("|")
+ );
+
+ var buildinConstants = lang.arrayToMap(
+ ("null|true|false").split("|")
+ );
+
+
+ // regexp must not have capturing parentheses. Use (?:) instead.
+ // regexps are ordered -> the first match is used
+
+ this.$rules = {
+ "start" : [
+ {
+ token : "comment",
+ regex : "\\/\\/.*$"
+ },
+ new DocCommentHighlightRules().getStartRule("doc-start"),
+ {
+ token : "comment", // multi line comment
+ regex : "\\/\\*",
+ merge : true,
+ next : "comment"
+ }, {
+ token : "string.regexp",
+ regex : "[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)"
+ }, {
+ token : "string", // single line
+ regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
+ }, {
+ token : "string", // single line
+ regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
+ }, {
+ token : "constant.numeric", // hex
+ regex : "0[xX][0-9a-fA-F]+\\b"
+ }, {
+ token : "constant.numeric", // float
+ regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
+ }, {
+ token : "constant.language.boolean",
+ regex : "(?:true|false)\\b"
+ }, {
+ token : function(value) {
+ if (value == "this")
+ return "variable.language";
+ else if (keywords.hasOwnProperty(value))
+ return "keyword";
+ else if (buildinConstants.hasOwnProperty(value))
+ return "constant.language";
+ else
+ return "identifier";
+ },
+ // TODO: Unicode escape sequences
+ // TODO: Unicode identifiers
+ regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
+ }, {
+ token : "keyword.operator",
+ regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"
+ }, {
+ token : "punctuation.operator",
+ regex : "\\?|\\:|\\,|\\;|\\."
+ }, {
+ token : "paren.lparen",
+ regex : "[[({]"
+ }, {
+ token : "paren.rparen",
+ regex : "[\\])}]"
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }
+ ],
+ "comment" : [
+ {
+ token : "comment", // closing comment
+ regex : ".*?\\*\\/",
+ next : "start"
+ }, {
+ token : "comment", // comment spanning whole line
+ merge : true,
+ regex : ".+"
+ }
+ ]
+ };
+
+ this.embedRules(DocCommentHighlightRules, "doc-",
+ [ new DocCommentHighlightRules().getEndRule("start") ]);
+};
+
+oop.inherits(CSharpHighlightRules, TextHighlightRules);
+
+exports.CSharpHighlightRules = CSharpHighlightRules;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/doc_comment_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var DocCommentHighlightRules = function() {
+
+ this.$rules = {
+ "start" : [ {
+ token : "comment.doc.tag",
+ regex : "@[\\w\\d_]+" // TODO: fix email addresses
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "\\s+"
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "TODO"
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "[^@\\*]+"
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "."
+ }]
+ };
+};
+
+oop.inherits(DocCommentHighlightRules, TextHighlightRules);
+
+(function() {
+
+ this.getStartRule = function(start) {
+ return {
+ token : "comment.doc", // doc comment
+ merge : true,
+ regex : "\\/\\*(?=\\*)",
+ next : start
+ };
+ };
+
+ this.getEndRule = function (start) {
+ return {
+ token : "comment.doc", // closing comment
+ merge : true,
+ regex : "\\*\\/",
+ next : start
+ };
+ };
+
+}).call(DocCommentHighlightRules.prototype);
+
+exports.DocCommentHighlightRules = DocCommentHighlightRules;
+
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var Range = require("../range").Range;
+
+var MatchingBraceOutdent = function() {};
+
+(function() {
+
+ this.checkOutdent = function(line, input) {
+ if (! /^\s+$/.test(line))
+ return false;
+
+ return /^\s*\}/.test(input);
+ };
+
+ this.autoOutdent = function(doc, row) {
+ var line = doc.getLine(row);
+ var match = line.match(/^(\s*\})/);
+
+ if (!match) return 0;
+
+ var column = match[1].length;
+ var openBracePos = doc.findMatchingBracket({row: row, column: column});
+
+ if (!openBracePos || openBracePos.row == row) return 0;
+
+ var indent = this.$getIndent(doc.getLine(openBracePos.row));
+ doc.replace(new Range(row, 0, row, column-1), indent);
+ };
+
+ this.$getIndent = function(line) {
+ var match = line.match(/^(\s+)/);
+ if (match) {
+ return match[1];
+ }
+
+ return "";
+ };
+
+}).call(MatchingBraceOutdent.prototype);
+
+exports.MatchingBraceOutdent = MatchingBraceOutdent;
+});
+/* vim:ts=4:sts=4:sw=4:
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Chris Spencer <chris.ag.spencer AT googlemail DOT com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/behaviour/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var Behaviour = require('../behaviour').Behaviour;
+
+var CstyleBehaviour = function () {
+
+ this.add("braces", "insertion", function (state, action, editor, session, text) {
+ if (text == '{') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '{' + selected + '}',
+ selection: false
+ }
+ } else {
+ return {
+ text: '{}',
+ selection: [1, 1]
+ }
+ }
+ } else if (text == '}') {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '}') {
+ var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});
+ if (matching !== null) {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ } else if (text == "\n") {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '}') {
+ var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column + 1});
+ if (!openBracePos)
+ return null;
+
+ var indent = this.getNextLineIndent(state, line.substring(0, line.length - 1), session.getTabString());
+ var next_indent = this.$getIndent(session.doc.getLine(openBracePos.row));
+
+ return {
+ text: '\n' + indent + '\n' + next_indent,
+ selection: [1, indent.length, 1, indent.length]
+ }
+ }
+ }
+ });
+
+ this.add("braces", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '{') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.end.column, range.end.column + 1);
+ if (rightChar == '}') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+ this.add("parens", "insertion", function (state, action, editor, session, text) {
+ if (text == '(') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '(' + selected + ')',
+ selection: false
+ }
+ } else {
+ return {
+ text: '()',
+ selection: [1, 1]
+ }
+ }
+ } else if (text == ')') {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == ')') {
+ var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});
+ if (matching !== null) {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ }
+ });
+
+ this.add("parens", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '(') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
+ if (rightChar == ')') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+ this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {
+ if (text == '"') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '"' + selected + '"',
+ selection: false
+ }
+ } else {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var leftChar = line.substring(cursor.column-1, cursor.column);
+
+ // We're escaped.
+ if (leftChar == '\\') {
+ return null;
+ }
+
+ // Find what token we're inside.
+ var tokens = session.getTokens(selection.start.row, selection.start.row)[0].tokens;
+ var col = 0, token;
+ var quotepos = -1; // Track whether we're inside an open quote.
+
+ for (var x = 0; x < tokens.length; x++) {
+ token = tokens[x];
+ if (token.type == "string") {
+ quotepos = -1;
+ } else if (quotepos < 0) {
+ quotepos = token.value.indexOf('"');
+ }
+ if ((token.value.length + col) > selection.start.column) {
+ break;
+ }
+ col += tokens[x].value.length;
+ }
+
+ // Try and be smart about when we auto insert.
+ if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf('"') === token.value.length-1)))) {
+ return {
+ text: '""',
+ selection: [1,1]
+ }
+ } else if (token && token.type === "string") {
+ // Ignore input and move right one if we're typing over the closing quote.
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '"') {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ }
+ }
+ });
+
+ this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '"') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
+ if (rightChar == '"') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+}
+oop.inherits(CstyleBehaviour, Behaviour);
+
+exports.CstyleBehaviour = CstyleBehaviour;
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var Range = require("../../range").Range;
+var BaseFoldMode = require("./fold_mode").FoldMode;
+
+var FoldMode = exports.FoldMode = function() {};
+oop.inherits(FoldMode, BaseFoldMode);
+
+(function() {
+
+ this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
+ this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ var line = session.getLine(row);
+ var match = line.match(this.foldingStartMarker);
+ if (match) {
+ var i = match.index;
+
+ if (match[1])
+ return this.openingBracketBlock(session, match[1], row, i);
+
+ var range = session.getCommentFoldRange(row, i + match[0].length);
+ range.end.column -= 2;
+ return range;
+ }
+
+ if (foldStyle !== "markbeginend")
+ return;
+
+ var match = line.match(this.foldingStopMarker);
+ if (match) {
+ var i = match.index + match[0].length;
+
+ if (match[2]) {
+ var range = session.getCommentFoldRange(row, i);
+ range.end.column -= 2;
+ return range;
+ }
+
+ var end = {row: row, column: i};
+ var start = session.$findOpeningBracket(match[1], end);
+
+ if (!start)
+ return;
+
+ start.column++;
+ end.column--;
+
+ return Range.fromPoints(start, end);
+ }
+ };
+
+}).call(FoldMode.prototype);
+
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/fold_mode', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var Range = require("../../range").Range;
+
+var FoldMode = exports.FoldMode = function() {};
+
+(function() {
+
+ this.foldingStartMarker = null;
+ this.foldingStopMarker = null;
+
+ // must return "" if there's no fold, to enable caching
+ this.getFoldWidget = function(session, foldStyle, row) {
+ var line = session.getLine(row);
+ if (this.foldingStartMarker.test(line))
+ return "start";
+ if (foldStyle == "markbeginend"
+ && this.foldingStopMarker
+ && this.foldingStopMarker.test(line))
+ return "end";
+ return "";
+ };
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ return null;
+ };
+
+ this.indentationBlock = function(session, row, column) {
+ var re = /^\s*/;
+ var startRow = row;
+ var endRow = row;
+ var line = session.getLine(row);
+ var startColumn = column || line.length;
+ var startLevel = line.match(re)[0].length;
+ var maxRow = session.getLength()
+
+ while (++row < maxRow) {
+ line = session.getLine(row);
+ var level = line.match(re)[0].length;
+
+ if (level == line.length)
+ continue;
+
+ if (level <= startLevel)
+ break;
+
+ endRow = row;
+ }
+
+ if (endRow > startRow) {
+ var endColumn = session.getLine(endRow).length;
+ return new Range(startRow, startColumn, endRow, endColumn);
+ }
+ };
+
+ this.openingBracketBlock = function(session, bracket, row, column) {
+ var start = {row: row, column: column + 1};
+ var end = session.$findClosingBracket(bracket, start);
+ if (!end)
+ return;
+
+ var fw = session.foldWidgets[end.row];
+ if (fw == null)
+ fw = this.getFoldWidget(session, end.row);
+
+ if (fw == "start") {
+ end.row --;
+ end.column = session.getLine(end.row).length;
+ }
+ return Range.fromPoints(start, end);
+ };
+
+}).call(FoldMode.prototype);
+
+});
+;
+ (function() {
+ window.require(["ace/ace"], function(a) {
+ if (!window.ace)
+ window.ace = {};
+ for (var key in a) if (a.hasOwnProperty(key))
+ ace[key] = a[key];
+ });
+ })();
+ \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-csharp.js b/apps/files_texteditor/js/aceeditor/mode-csharp.js
index 18082e40dac..b4c06059661 100644
--- a/apps/files_texteditor/js/aceeditor/mode-csharp.js
+++ b/apps/files_texteditor/js/aceeditor/mode-csharp.js
@@ -1 +1 @@
-define("ace/mode/csharp",["require","exports","module","pilot/oop","ace/mode/text","ace/tokenizer","ace/mode/csharp_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/cstyle"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/text").Mode,f=a("ace/tokenizer").Tokenizer,g=a("ace/mode/csharp_highlight_rules").CSharpHighlightRules,h=a("ace/mode/matching_brace_outdent").MatchingBraceOutdent,i=a("ace/mode/behaviour/cstyle").CstyleBehaviour,j=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h,this.$behaviour=new i};d.inherits(j,e),function(){this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=this.$tokenizer.getLineTokens(b,a),f=e.tokens,g=e.state;if(f.length&&f[f.length-1].type=="comment")return d;if(a=="start"){var h=b.match(/^.*[\{\(\[]\s*$/);h&&(d+=c)}return d},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)},this.createWorker=function(a){return null}}.call(j.prototype),b.Mode=j}),define("ace/mode/csharp_highlight_rules",["require","exports","module","pilot/oop","pilot/lang","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(a,b,c){var d=a("pilot/oop"),e=a("pilot/lang"),f=a("ace/mode/doc_comment_highlight_rules").DocCommentHighlightRules,g=a("ace/mode/text_highlight_rules").TextHighlightRules,h=function(){var a=e.arrayToMap("abstract|event|new|struct|as|explicit|null|switch|base|extern|object|this|bool|false|operator|throw|break|finally|out|true|byte|fixed|override|try|case|float|params|typeof|catch|for|private|uint|char|foreach|protected|ulong|checked|goto|public|unchecked|class|if|readonly|unsafe|const|implicit|ref|ushort|continue|in|return|using|decimal|int|sbyte|virtual|default|interface|sealed|volatile|delegate|internal|short|void|do|is|sizeof|while|double|lock|stackalloc|else|long|static|enum|namespace|string|var|dynamic".split("|")),b=e.arrayToMap("null|true|false".split("|"));this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},(new f).getStartRule("doc-start"),{token:"comment",regex:"\\/\\*",merge:!0,next:"comment"},{token:"string.regexp",regex:"[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:function(c){return c=="this"?"variable.language":a.hasOwnProperty(c)?"keyword":b.hasOwnProperty(c)?"constant.language":"identifier"},regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"},{token:"lparen",regex:"[[({]"},{token:"rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",merge:!0,regex:".+"}]},this.embedRules(f,"doc-",[(new f).getEndRule("start")])};d.inherits(h,g),b.CSharpHighlightRules=h}),define("ace/mode/doc_comment_highlight_rules",["require","exports","module","pilot/oop","ace/mode/text_highlight_rules"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/text_highlight_rules").TextHighlightRules,f=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};d.inherits(f,e),function(){this.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},this.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}}}.call(f.prototype),b.DocCommentHighlightRules=f}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(a,b,c){var d=a("ace/range").Range,e=function(){};(function(){this.checkOutdent=function(a,b){return/^\s+$/.test(a)?/^\s*\}/.test(b):!1},this.autoOutdent=function(a,b){var c=a.getLine(b),e=c.match(/^(\s*\})/);if(!e)return 0;var f=e[1].length,g=a.findMatchingBracket({row:b,column:f});if(!g||g.row==b)return 0;var h=this.$getIndent(a.getLine(g.row));a.replace(new d(b,0,b,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""}}).call(e.prototype),b.MatchingBraceOutdent=e}),define("ace/mode/behaviour/cstyle",["require","exports","module","pilot/oop","ace/mode/behaviour"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/behaviour").Behaviour,f=function(){this.add("braces","insertion",function(a,b,c,d,e){if(e=="{"){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"{"+g+"}",selection:!1}:{text:"{}",selection:[1,1]}}if(e=="}"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var k=d.$findOpeningBracket("}",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}else if(e=="\n"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var l=d.findMatchingBracket({row:h.row,column:h.column+1});if(!l)return!1;var m=this.getNextLineIndent(a,i.substring(0,i.length-1),d.getTabString()),n=this.$getIndent(d.doc.getLine(l.row));return{text:"\n"+m+"\n"+n,selection:[1,m.length,1,m.length]}}}return!1}),this.add("braces","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="{"){var g=d.doc.getLine(e.start.row),h=g.substring(e.end.column,e.end.column+1);if(h=="}"){e.end.column++;return e}}return!1}),this.add("parens","insertion",function(a,b,c,d,e){if(e=="("){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"("+g+")",selection:!1}:{text:"()",selection:[1,1]}}if(e==")"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j==")"){var k=d.$findOpeningBracket(")",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}return!1}),this.add("parens","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="("){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h==")"){e.end.column++;return e}}return!1}),this.add("string_dquotes","insertion",function(a,b,c,d,e){if(e=='"'){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);if(g!=="")return{text:'"'+g+'"',selection:!1};var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column-1,h.column);if(j=="\\")return!1;var k=d.getTokens(f.start.row,f.start.row)[0].tokens,l=0,m,n=-1;for(var o=0;o<k.length;o++){m=k[o],m.type=="string"?n=-1:n<0&&(n=m.value.indexOf('"'));if(m.value.length+l>f.start.column)break;l+=k[o].value.length}if(!m||n<0&&m.type!=="comment"&&(m.type!=="string"||f.start.column!==m.value.length+l-1&&m.value.lastIndexOf('"')===m.value.length-1))return{text:'""',selection:[1,1]};if(m&&m.type==="string"){var p=i.substring(h.column,h.column+1);if(p=='"')return{text:"",selection:[1,1]}}}return!1}),this.add("string_dquotes","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=='"'){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h=='"'){e.end.column++;return e}}return!1})};d.inherits(f,e),b.CstyleBehaviour=f}) \ No newline at end of file
+define("ace/mode/csharp",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/csharp_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text").Mode,f=a("../tokenizer").Tokenizer,g=a("./csharp_highlight_rules").CSharpHighlightRules,h=a("./matching_brace_outdent").MatchingBraceOutdent,i=a("./behaviour/cstyle").CstyleBehaviour,j=a("./folding/cstyle").FoldMode,k=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h,this.$behaviour=new i,this.foldingRules=new j};d.inherits(k,e),function(){this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=this.$tokenizer.getLineTokens(b,a),f=e.tokens;if(f.length&&f[f.length-1].type=="comment")return d;if(a=="start"){var g=b.match(/^.*[\{\(\[]\s*$/);g&&(d+=c)}return d},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)},this.createWorker=function(a){return null}}.call(k.prototype),b.Mode=k}),define("ace/mode/csharp_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("../lib/lang"),f=a("./doc_comment_highlight_rules").DocCommentHighlightRules,g=a("./text_highlight_rules").TextHighlightRules,h=function(){var a=e.arrayToMap("abstract|event|new|struct|as|explicit|null|switch|base|extern|object|this|bool|false|operator|throw|break|finally|out|true|byte|fixed|override|try|case|float|params|typeof|catch|for|private|uint|char|foreach|protected|ulong|checked|goto|public|unchecked|class|if|readonly|unsafe|const|implicit|ref|ushort|continue|in|return|using|decimal|int|sbyte|virtual|default|interface|sealed|volatile|delegate|internal|short|void|do|is|sizeof|while|double|lock|stackalloc|else|long|static|enum|namespace|string|var|dynamic".split("|")),b=e.arrayToMap("null|true|false".split("|"));this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},(new f).getStartRule("doc-start"),{token:"comment",regex:"\\/\\*",merge:!0,next:"comment"},{token:"string.regexp",regex:"[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:function(c){return c=="this"?"variable.language":a.hasOwnProperty(c)?"keyword":b.hasOwnProperty(c)?"constant.language":"identifier"},regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"},{token:"punctuation.operator",regex:"\\?|\\:|\\,|\\;|\\."},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",merge:!0,regex:".+"}]},this.embedRules(f,"doc-",[(new f).getEndRule("start")])};d.inherits(h,g),b.CSharpHighlightRules=h}),define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text_highlight_rules").TextHighlightRules,f=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};d.inherits(f,e),function(){this.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},this.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}}}.call(f.prototype),b.DocCommentHighlightRules=f}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(a,b,c){"use strict";var d=a("../range").Range,e=function(){};((function(){this.checkOutdent=function(a,b){return/^\s+$/.test(a)?/^\s*\}/.test(b):!1},this.autoOutdent=function(a,b){var c=a.getLine(b),e=c.match(/^(\s*\})/);if(!e)return 0;var f=e[1].length,g=a.findMatchingBracket({row:b,column:f});if(!g||g.row==b)return 0;var h=this.$getIndent(a.getLine(g.row));a.replace(new d(b,0,b,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""}})).call(e.prototype),b.MatchingBraceOutdent=e}),define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("../behaviour").Behaviour,f=function(){this.add("braces","insertion",function(a,b,c,d,e){if(e=="{"){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"{"+g+"}",selection:!1}:{text:"{}",selection:[1,1]}}if(e=="}"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var k=d.$findOpeningBracket("}",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}else if(e=="\n"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var l=d.findMatchingBracket({row:h.row,column:h.column+1});if(!l)return null;var m=this.getNextLineIndent(a,i.substring(0,i.length-1),d.getTabString()),n=this.$getIndent(d.doc.getLine(l.row));return{text:"\n"+m+"\n"+n,selection:[1,m.length,1,m.length]}}}}),this.add("braces","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="{"){var g=d.doc.getLine(e.start.row),h=g.substring(e.end.column,e.end.column+1);if(h=="}")return e.end.column++,e}}),this.add("parens","insertion",function(a,b,c,d,e){if(e=="("){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"("+g+")",selection:!1}:{text:"()",selection:[1,1]}}if(e==")"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j==")"){var k=d.$findOpeningBracket(")",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="("){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h==")")return e.end.column++,e}}),this.add("string_dquotes","insertion",function(a,b,c,d,e){if(e=='"'){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);if(g!=="")return{text:'"'+g+'"',selection:!1};var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column-1,h.column);if(j=="\\")return null;var k=d.getTokens(f.start.row,f.start.row)[0].tokens,l=0,m,n=-1;for(var o=0;o<k.length;o++){m=k[o],m.type=="string"?n=-1:n<0&&(n=m.value.indexOf('"'));if(m.value.length+l>f.start.column)break;l+=k[o].value.length}if(!m||n<0&&m.type!=="comment"&&(m.type!=="string"||f.start.column!==m.value.length+l-1&&m.value.lastIndexOf('"')===m.value.length-1))return{text:'""',selection:[1,1]};if(m&&m.type==="string"){var p=i.substring(h.column,h.column+1);if(p=='"')return{text:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=='"'){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h=='"')return e.end.column++,e}})};d.inherits(f,e),b.CstyleBehaviour=f}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("../../range").Range,f=a("./fold_mode").FoldMode,g=b.FoldMode=function(){};d.inherits(g,f),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(a,b,c){var d=a.getLine(c),f=d.match(this.foldingStartMarker);if(f){var g=f.index;if(f[1])return this.openingBracketBlock(a,f[1],c,g);var h=a.getCommentFoldRange(c,g+f[0].length);return h.end.column-=2,h}if(b!=="markbeginend")return;var f=d.match(this.foldingStopMarker);if(f){var g=f.index+f[0].length;if(f[2]){var h=a.getCommentFoldRange(c,g);return h.end.column-=2,h}var i={row:c,column:g},j=a.$findOpeningBracket(f[1],i);if(!j)return;return j.column++,i.column--,e.fromPoints(j,i)}}}.call(g.prototype)}),define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"],function(a,b,c){"use strict";var d=a("../../range").Range,e=b.FoldMode=function(){};((function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(a,b,c){var d=a.getLine(c);return this.foldingStartMarker.test(d)?"start":b=="markbeginend"&&this.foldingStopMarker&&this.foldingStopMarker.test(d)?"end":""},this.getFoldWidgetRange=function(a,b,c){return null},this.indentationBlock=function(a,b,c){var e=/^\s*/,f=b,g=b,h=a.getLine(b),i=c||h.length,j=h.match(e)[0].length,k=a.getLength();while(++b<k){h=a.getLine(b);var l=h.match(e)[0].length;if(l==h.length)continue;if(l<=j)break;g=b}if(g>f){var m=a.getLine(g).length;return new d(f,i,g,m)}},this.openingBracketBlock=function(a,b,c,e){var f={row:c,column:e+1},g=a.$findClosingBracket(b,f);if(!g)return;var h=a.foldWidgets[g.row];return h==null&&(h=this.getFoldWidget(a,g.row)),h=="start"&&(g.row--,g.column=a.getLine(g.row).length),d.fromPoints(f,g)}})).call(e.prototype)}),function(){window.require(["ace/ace"],function(a){window.ace||(window.ace={});for(var b in a)a.hasOwnProperty(b)&&(ace[b]=a[b])})}() \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-css-uncompressed.js b/apps/files_texteditor/js/aceeditor/mode-css-uncompressed.js
new file mode 100755
index 00000000000..17a7738b477
--- /dev/null
+++ b/apps/files_texteditor/js/aceeditor/mode-css-uncompressed.js
@@ -0,0 +1,863 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/css', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/css_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/worker/worker_client', 'ace/mode/folding/cstyle'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextMode = require("./text").Mode;
+var Tokenizer = require("../tokenizer").Tokenizer;
+var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;
+var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
+var WorkerClient = require("../worker/worker_client").WorkerClient;
+var CStyleFoldMode = require("./folding/cstyle").FoldMode;
+
+var Mode = function() {
+ this.$tokenizer = new Tokenizer(new CssHighlightRules().getRules(), "i");
+ this.$outdent = new MatchingBraceOutdent();
+ this.foldingRules = new CStyleFoldMode();
+};
+oop.inherits(Mode, TextMode);
+
+(function() {
+
+ this.foldingRules = "cStyle";
+
+ this.getNextLineIndent = function(state, line, tab) {
+ var indent = this.$getIndent(line);
+
+ // ignore braces in comments
+ var tokens = this.$tokenizer.getLineTokens(line, state).tokens;
+ if (tokens.length && tokens[tokens.length-1].type == "comment") {
+ return indent;
+ }
+
+ var match = line.match(/^.*\{\s*$/);
+ if (match) {
+ indent += tab;
+ }
+
+ return indent;
+ };
+
+ this.checkOutdent = function(state, line, input) {
+ return this.$outdent.checkOutdent(line, input);
+ };
+
+ this.autoOutdent = function(state, doc, row) {
+ this.$outdent.autoOutdent(doc, row);
+ };
+
+ this.createWorker = function(session) {
+ var worker = new WorkerClient(["ace"], "worker-css.js", "ace/mode/css_worker", "Worker");
+ worker.attachToDocument(session.getDocument());
+
+ worker.on("csslint", function(e) {
+ var errors = [];
+ e.data.forEach(function(message) {
+ errors.push({
+ row: message.line - 1,
+ column: message.col - 1,
+ text: message.message,
+ type: message.type,
+ lint: message
+ });
+ });
+
+ session.setAnnotations(errors);
+ });
+ return worker;
+ };
+
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/css_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var lang = require("../lib/lang");
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var CssHighlightRules = function() {
+
+ var properties = lang.arrayToMap(
+ ("-moz-appearance|-moz-box-sizing|-webkit-box-sizing|-moz-outline-radius|-moz-transform|-webkit-transform|" +
+ "appearance|azimuth|background-attachment|background-color|background-image|" +
+ "background-origin|background-position|background-repeat|background|border-bottom-color|" +
+ "border-bottom-style|border-bottom-width|border-bottom|border-collapse|" +
+ "border-color|border-left-color|border-left-style|border-left-width|" +
+ "border-left|border-right-color|border-right-style|border-right-width|" +
+ "border-right|border-spacing|border-style|border-top-color|" +
+ "border-top-style|border-top-width|border-top|border-width|border|" +
+ "bottom|box-sizing|caption-side|clear|clip|color|content|counter-increment|" +
+ "counter-reset|cue-after|cue-before|cue|cursor|direction|display|" +
+ "elevation|empty-cells|float|font-family|font-size-adjust|font-size|" +
+ "font-stretch|font-style|font-variant|font-weight|font|height|left|" +
+ "letter-spacing|line-height|list-style-image|list-style-position|" +
+ "list-style-type|list-style|margin-bottom|margin-left|margin-right|" +
+ "margin-top|marker-offset|margin|marks|max-height|max-width|min-height|" +
+ "min-width|-moz-border-radius|opacity|orphans|outline-color|outline-offset|outline-radius|" +
+ "outline-style|outline-width|outline|overflow|overflow-x|overflow-y|padding-bottom|" +
+ "padding-left|padding-right|padding-top|padding|page-break-after|" +
+ "page-break-before|page-break-inside|page|pause-after|pause-before|" +
+ "pause|pitch-range|pitch|play-during|pointer-events|position|quotes|resize|richness|right|" +
+ "size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|" +
+ "stress|table-layout|text-align|text-decoration|text-indent|" +
+ "text-shadow|text-transform|top|transform|unicode-bidi|vertical-align|" +
+ "visibility|voice-family|volume|white-space|widows|width|word-spacing|" +
+ "z-index").split("|")
+ );
+
+ var functions = lang.arrayToMap(
+ ("rgb|rgba|url|attr|counter|counters").split("|")
+ );
+
+ var constants = lang.arrayToMap(
+ ("absolute|all-scroll|always|armenian|auto|baseline|below|bidi-override|" +
+ "block|bold|bolder|border-box|both|bottom|break-all|break-word|capitalize|center|" +
+ "char|circle|cjk-ideographic|col-resize|collapse|content-box|crosshair|dashed|" +
+ "decimal-leading-zero|decimal|default|disabled|disc|" +
+ "distribute-all-lines|distribute-letter|distribute-space|" +
+ "distribute|dotted|double|e-resize|ellipsis|fixed|georgian|groove|" +
+ "hand|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|" +
+ "ideograph-alpha|ideograph-numeric|ideograph-parenthesis|" +
+ "ideograph-space|inactive|inherit|inline-block|inline|inset|inside|" +
+ "inter-ideograph|inter-word|italic|justify|katakana-iroha|katakana|" +
+ "keep-all|left|lighter|line-edge|line-through|line|list-item|loose|" +
+ "lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|" +
+ "medium|middle|move|n-resize|ne-resize|newspaper|no-drop|no-repeat|" +
+ "nw-resize|none|normal|not-allowed|nowrap|oblique|outset|outside|" +
+ "overline|pointer|progress|relative|repeat-x|repeat-y|repeat|right|" +
+ "ridge|row-resize|rtl|s-resize|scroll|se-resize|separate|small-caps|" +
+ "solid|square|static|strict|super|sw-resize|table-footer-group|" +
+ "table-header-group|tb-rl|text-bottom|text-top|text|thick|thin|top|" +
+ "transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|" +
+ "vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|" +
+ "zero").split("|")
+ );
+
+ var colors = lang.arrayToMap(
+ ("aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|" +
+ "purple|red|silver|teal|white|yellow").split("|")
+ );
+
+ // regexp must not have capturing parentheses. Use (?:) instead.
+ // regexps are ordered -> the first match is used
+
+ var numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))";
+
+ var base_ruleset = [
+ {
+ token : "comment", // multi line comment
+ merge : true,
+ regex : "\\/\\*",
+ next : "ruleset_comment"
+ },{
+ token : "string", // single line
+ regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
+ }, {
+ token : "string", // single line
+ regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
+ }, {
+ token : "constant.numeric",
+ regex : numRe + "(?:em|ex|px|cm|mm|in|pt|pc|deg|rad|grad|ms|s|hz|khz|%)"
+ }, {
+ token : "constant.numeric", // hex6 color
+ regex : "#[a-f0-9]{6}"
+ }, {
+ token : "constant.numeric", // hex3 color
+ regex : "#[a-f0-9]{3}"
+ }, {
+ token : function(value) {
+ if (properties.hasOwnProperty(value.toLowerCase())) {
+ return "support.type";
+ }
+ else if (functions.hasOwnProperty(value.toLowerCase())) {
+ return "support.function";
+ }
+ else if (constants.hasOwnProperty(value.toLowerCase())) {
+ return "support.constant";
+ }
+ else if (colors.hasOwnProperty(value.toLowerCase())) {
+ return "support.constant.color";
+ }
+ else {
+ return "text";
+ }
+ },
+ regex : "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"
+ }
+ ];
+
+ var ruleset = lang.copyArray(base_ruleset);
+ ruleset.unshift({
+ token : "paren.rparen",
+ regex : "\\}",
+ next: "start"
+ });
+
+ var media_ruleset = lang.copyArray( base_ruleset );
+ media_ruleset.unshift({
+ token : "paren.rparen",
+ regex : "\\}",
+ next: "media"
+ });
+
+ var base_comment = [{
+ token : "comment", // comment spanning whole line
+ merge : true,
+ regex : ".+"
+ }];
+
+ var comment = lang.copyArray(base_comment);
+ comment.unshift({
+ token : "comment", // closing comment
+ regex : ".*?\\*\\/",
+ next : "start"
+ });
+
+ var media_comment = lang.copyArray(base_comment);
+ media_comment.unshift({
+ token : "comment", // closing comment
+ regex : ".*?\\*\\/",
+ next : "media"
+ });
+
+ var ruleset_comment = lang.copyArray(base_comment);
+ ruleset_comment.unshift({
+ token : "comment", // closing comment
+ regex : ".*?\\*\\/",
+ next : "ruleset"
+ });
+
+ this.$rules = {
+ "start" : [{
+ token : "comment", // multi line comment
+ merge : true,
+ regex : "\\/\\*",
+ next : "comment"
+ }, {
+ token: "paren.lparen",
+ regex: "\\{",
+ next: "ruleset"
+ }, {
+ token: "string",
+ regex: "@.*?{",
+ next: "media"
+ },{
+ token: "keyword",
+ regex: "#[a-z0-9-_]+"
+ },{
+ token: "variable",
+ regex: "\\.[a-z0-9-_]+"
+ },{
+ token: "string",
+ regex: ":[a-z0-9-_]+"
+ },{
+ token: "constant",
+ regex: "[a-z0-9-_]+"
+ }],
+
+ "media" : [ {
+ token : "comment", // multi line comment
+ merge : true,
+ regex : "\\/\\*",
+ next : "media_comment"
+ }, {
+ token: "paren.lparen",
+ regex: "\\{",
+ next: "media_ruleset"
+ },{
+ token: "string",
+ regex: "\\}",
+ next: "start"
+ },{
+ token: "keyword",
+ regex: "#[a-z0-9-_]+"
+ },{
+ token: "variable",
+ regex: "\\.[a-z0-9-_]+"
+ },{
+ token: "string",
+ regex: ":[a-z0-9-_]+"
+ },{
+ token: "constant",
+ regex: "[a-z0-9-_]+"
+ }],
+
+ "comment" : comment,
+
+ "ruleset" : ruleset,
+ "ruleset_comment" : ruleset_comment,
+
+ "media_ruleset" : media_ruleset,
+ "media_comment" : media_comment
+ };
+};
+
+oop.inherits(CssHighlightRules, TextHighlightRules);
+
+exports.CssHighlightRules = CssHighlightRules;
+
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var Range = require("../range").Range;
+
+var MatchingBraceOutdent = function() {};
+
+(function() {
+
+ this.checkOutdent = function(line, input) {
+ if (! /^\s+$/.test(line))
+ return false;
+
+ return /^\s*\}/.test(input);
+ };
+
+ this.autoOutdent = function(doc, row) {
+ var line = doc.getLine(row);
+ var match = line.match(/^(\s*\})/);
+
+ if (!match) return 0;
+
+ var column = match[1].length;
+ var openBracePos = doc.findMatchingBracket({row: row, column: column});
+
+ if (!openBracePos || openBracePos.row == row) return 0;
+
+ var indent = this.$getIndent(doc.getLine(openBracePos.row));
+ doc.replace(new Range(row, 0, row, column-1), indent);
+ };
+
+ this.$getIndent = function(line) {
+ var match = line.match(/^(\s+)/);
+ if (match) {
+ return match[1];
+ }
+
+ return "";
+ };
+
+}).call(MatchingBraceOutdent.prototype);
+
+exports.MatchingBraceOutdent = MatchingBraceOutdent;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/worker/worker_client', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event_emitter'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var EventEmitter = require("../lib/event_emitter").EventEmitter;
+
+var WorkerClient = function(topLevelNamespaces, packagedJs, mod, classname) {
+
+ this.changeListener = this.changeListener.bind(this);
+
+ if (module.packaged) {
+ var base = this.$guessBasePath();
+ this.$worker = new Worker(base + packagedJs);
+ }
+ else {
+ var workerUrl = this.$normalizePath(require.nameToUrl("ace/worker/worker", null, "_"));
+ this.$worker = new Worker(workerUrl);
+
+ var tlns = {};
+ for (var i=0; i<topLevelNamespaces.length; i++) {
+ var ns = topLevelNamespaces[i];
+ var path = this.$normalizePath(require.nameToUrl(ns, null, "_").replace(/.js$/, ""));
+
+ tlns[ns] = path;
+ }
+ }
+
+ this.$worker.postMessage({
+ init : true,
+ tlns: tlns,
+ module: mod,
+ classname: classname
+ });
+
+ this.callbackId = 1;
+ this.callbacks = {};
+
+ var _self = this;
+ this.$worker.onerror = function(e) {
+ window.console && console.log && console.log(e);
+ throw e;
+ };
+ this.$worker.onmessage = function(e) {
+ var msg = e.data;
+ switch(msg.type) {
+ case "log":
+ window.console && console.log && console.log(msg.data);
+ break;
+
+ case "event":
+ _self._emit(msg.name, {data: msg.data});
+ break;
+
+ case "call":
+ var callback = _self.callbacks[msg.id];
+ if (callback) {
+ callback(msg.data);
+ delete _self.callbacks[msg.id];
+ }
+ break;
+ }
+ };
+};
+
+(function(){
+
+ oop.implement(this, EventEmitter);
+
+ this.$normalizePath = function(path) {
+ path = path.replace(/^[a-z]+:\/\/[^\/]+\//, ""); // Remove domain name and rebuild it
+ path = location.protocol + "//" + location.host
+ // paths starting with a slash are relative to the root (host)
+ + (path.charAt(0) == "/" ? "" : location.pathname.replace(/\/[^\/]*$/, ""))
+ + "/" + path.replace(/^[\/]+/, "");
+ return path;
+ };
+
+ this.$guessBasePath = function() {
+ if (require.aceBaseUrl)
+ return require.aceBaseUrl;
+
+ var scripts = document.getElementsByTagName("script");
+ for (var i=0; i<scripts.length; i++) {
+ var script = scripts[i];
+
+ var base = script.getAttribute("data-ace-base");
+ if (base)
+ return base.replace(/\/*$/, "/");
+
+ var src = script.src || script.getAttribute("src");
+ if (!src) {
+ continue;
+ }
+ var m = src.match(/^(?:(.*\/)ace\.js|(.*\/)ace(-uncompressed)?(-noconflict)?\.js)(?:\?|$)/);
+ if (m)
+ return m[1] || m[2];
+ }
+ return "";
+ };
+
+ this.terminate = function() {
+ this._emit("terminate", {});
+ this.$worker.terminate();
+ this.$worker = null;
+ this.$doc.removeEventListener("change", this.changeListener);
+ this.$doc = null;
+ };
+
+ this.send = function(cmd, args) {
+ this.$worker.postMessage({command: cmd, args: args});
+ };
+
+ this.call = function(cmd, args, callback) {
+ if (callback) {
+ var id = this.callbackId++;
+ this.callbacks[id] = callback;
+ args.push(id);
+ }
+ this.send(cmd, args);
+ };
+
+ this.emit = function(event, data) {
+ try {
+ // firefox refuses to clone objects which have function properties
+ // TODO: cleanup event
+ this.$worker.postMessage({event: event, data: {data: data.data}});
+ }
+ catch(ex) {}
+ };
+
+ this.attachToDocument = function(doc) {
+ if(this.$doc)
+ this.terminate();
+
+ this.$doc = doc;
+ this.call("setValue", [doc.getValue()]);
+ doc.on("change", this.changeListener);
+ };
+
+ this.changeListener = function(e) {
+ e.range = {
+ start: e.data.range.start,
+ end: e.data.range.end
+ };
+ this.emit("change", e);
+ };
+
+}).call(WorkerClient.prototype);
+
+exports.WorkerClient = WorkerClient;
+
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var Range = require("../../range").Range;
+var BaseFoldMode = require("./fold_mode").FoldMode;
+
+var FoldMode = exports.FoldMode = function() {};
+oop.inherits(FoldMode, BaseFoldMode);
+
+(function() {
+
+ this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
+ this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ var line = session.getLine(row);
+ var match = line.match(this.foldingStartMarker);
+ if (match) {
+ var i = match.index;
+
+ if (match[1])
+ return this.openingBracketBlock(session, match[1], row, i);
+
+ var range = session.getCommentFoldRange(row, i + match[0].length);
+ range.end.column -= 2;
+ return range;
+ }
+
+ if (foldStyle !== "markbeginend")
+ return;
+
+ var match = line.match(this.foldingStopMarker);
+ if (match) {
+ var i = match.index + match[0].length;
+
+ if (match[2]) {
+ var range = session.getCommentFoldRange(row, i);
+ range.end.column -= 2;
+ return range;
+ }
+
+ var end = {row: row, column: i};
+ var start = session.$findOpeningBracket(match[1], end);
+
+ if (!start)
+ return;
+
+ start.column++;
+ end.column--;
+
+ return Range.fromPoints(start, end);
+ }
+ };
+
+}).call(FoldMode.prototype);
+
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/fold_mode', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var Range = require("../../range").Range;
+
+var FoldMode = exports.FoldMode = function() {};
+
+(function() {
+
+ this.foldingStartMarker = null;
+ this.foldingStopMarker = null;
+
+ // must return "" if there's no fold, to enable caching
+ this.getFoldWidget = function(session, foldStyle, row) {
+ var line = session.getLine(row);
+ if (this.foldingStartMarker.test(line))
+ return "start";
+ if (foldStyle == "markbeginend"
+ && this.foldingStopMarker
+ && this.foldingStopMarker.test(line))
+ return "end";
+ return "";
+ };
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ return null;
+ };
+
+ this.indentationBlock = function(session, row, column) {
+ var re = /^\s*/;
+ var startRow = row;
+ var endRow = row;
+ var line = session.getLine(row);
+ var startColumn = column || line.length;
+ var startLevel = line.match(re)[0].length;
+ var maxRow = session.getLength()
+
+ while (++row < maxRow) {
+ line = session.getLine(row);
+ var level = line.match(re)[0].length;
+
+ if (level == line.length)
+ continue;
+
+ if (level <= startLevel)
+ break;
+
+ endRow = row;
+ }
+
+ if (endRow > startRow) {
+ var endColumn = session.getLine(endRow).length;
+ return new Range(startRow, startColumn, endRow, endColumn);
+ }
+ };
+
+ this.openingBracketBlock = function(session, bracket, row, column) {
+ var start = {row: row, column: column + 1};
+ var end = session.$findClosingBracket(bracket, start);
+ if (!end)
+ return;
+
+ var fw = session.foldWidgets[end.row];
+ if (fw == null)
+ fw = this.getFoldWidget(session, end.row);
+
+ if (fw == "start") {
+ end.row --;
+ end.column = session.getLine(end.row).length;
+ }
+ return Range.fromPoints(start, end);
+ };
+
+}).call(FoldMode.prototype);
+
+});
+;
+ (function() {
+ window.require(["ace/ace"], function(a) {
+ if (!window.ace)
+ window.ace = {};
+ for (var key in a) if (a.hasOwnProperty(key))
+ ace[key] = a[key];
+ });
+ })();
+ \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-css.js b/apps/files_texteditor/js/aceeditor/mode-css.js
index e7cbfde635d..0a6f1bde58d 100644
--- a/apps/files_texteditor/js/aceeditor/mode-css.js
+++ b/apps/files_texteditor/js/aceeditor/mode-css.js
@@ -1 +1 @@
-define("ace/mode/css",["require","exports","module","pilot/oop","ace/mode/text","ace/tokenizer","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/text").Mode,f=a("ace/tokenizer").Tokenizer,g=a("ace/mode/css_highlight_rules").CssHighlightRules,h=a("ace/mode/matching_brace_outdent").MatchingBraceOutdent,i=a("ace/worker/worker_client").WorkerClient,j=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h};d.inherits(j,e),function(){this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=this.$tokenizer.getLineTokens(b,a).tokens;if(e.length&&e[e.length-1].type=="comment")return d;var f=b.match(/^.*\{\s*$/);f&&(d+=c);return d},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)},this.createWorker=function(a){var b=a.getDocument(),c=new i(["ace","pilot"],"worker-css.js","ace/mode/css_worker","Worker");c.call("setValue",[b.getValue()]),b.on("change",function(a){a.range={start:a.data.range.start,end:a.data.range.end},c.emit("change",a)}),c.on("csslint",function(b){var c=[];b.data.forEach(function(a){c.push({row:a.line-1,column:a.col-1,text:a.message,type:a.type,lint:a})}),a.setAnnotations(c)})}}.call(j.prototype),b.Mode=j}),define("ace/mode/css_highlight_rules",["require","exports","module","pilot/oop","pilot/lang","ace/mode/text_highlight_rules"],function(a,b,c){var d=a("pilot/oop"),e=a("pilot/lang"),f=a("ace/mode/text_highlight_rules").TextHighlightRules,g=function(){function g(a){var b=[],c=a.split("");for(var d=0;d<c.length;d++)b.push("[",c[d].toLowerCase(),c[d].toUpperCase(),"]");return b.join("")}var a=e.arrayToMap("-moz-box-sizing|-webkit-box-sizing|appearance|azimuth|background-attachment|background-color|background-image|background-position|background-repeat|background|border-bottom-color|border-bottom-style|border-bottom-width|border-bottom|border-collapse|border-color|border-left-color|border-left-style|border-left-width|border-left|border-right-color|border-right-style|border-right-width|border-right|border-spacing|border-style|border-top-color|border-top-style|border-top-width|border-top|border-width|border|bottom|box-sizing|caption-side|clear|clip|color|content|counter-increment|counter-reset|cue-after|cue-before|cue|cursor|direction|display|elevation|empty-cells|float|font-family|font-size-adjust|font-size|font-stretch|font-style|font-variant|font-weight|font|height|left|letter-spacing|line-height|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|marker-offset|margin|marks|max-height|max-width|min-height|min-width|-moz-border-radius|opacity|orphans|outline-color|outline-style|outline-width|outline|overflow|overflow-x|overflow-y|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page|pause-after|pause-before|pause|pitch-range|pitch|play-during|position|quotes|richness|right|size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|stress|table-layout|text-align|text-decoration|text-indent|text-shadow|text-transform|top|unicode-bidi|vertical-align|visibility|voice-family|volume|white-space|widows|width|word-spacing|z-index".split("|")),b=e.arrayToMap("rgb|rgba|url|attr|counter|counters".split("|")),c=e.arrayToMap("absolute|all-scroll|always|armenian|auto|baseline|below|bidi-override|block|bold|bolder|border-box|both|bottom|break-all|break-word|capitalize|center|char|circle|cjk-ideographic|col-resize|collapse|content-box|crosshair|dashed|decimal-leading-zero|decimal|default|disabled|disc|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ellipsis|fixed|georgian|groove|hand|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|inactive|inherit|inline-block|inline|inset|inside|inter-ideograph|inter-word|italic|justify|katakana-iroha|katakana|keep-all|left|lighter|line-edge|line-through|line|list-item|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|medium|middle|move|n-resize|ne-resize|newspaper|no-drop|no-repeat|nw-resize|none|normal|not-allowed|nowrap|oblique|outset|outside|overline|pointer|progress|relative|repeat-x|repeat-y|repeat|right|ridge|row-resize|rtl|s-resize|scroll|se-resize|separate|small-caps|solid|square|static|strict|super|sw-resize|table-footer-group|table-header-group|tb-rl|text-bottom|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|zero".split("|")),d=e.arrayToMap("aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow".split("|")),f="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))",h=[{token:"comment",merge:!0,regex:"\\/\\*",next:"ruleset_comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"constant.numeric",regex:f+g("em")},{token:"constant.numeric",regex:f+g("ex")},{token:"constant.numeric",regex:f+g("px")},{token:"constant.numeric",regex:f+g("cm")},{token:"constant.numeric",regex:f+g("mm")},{token:"constant.numeric",regex:f+g("in")},{token:"constant.numeric",regex:f+g("pt")},{token:"constant.numeric",regex:f+g("pc")},{token:"constant.numeric",regex:f+g("deg")},{token:"constant.numeric",regex:f+g("rad")},{token:"constant.numeric",regex:f+g("grad")},{token:"constant.numeric",regex:f+g("ms")},{token:"constant.numeric",regex:f+g("s")},{token:"constant.numeric",regex:f+g("hz")},{token:"constant.numeric",regex:f+g("khz")},{token:"constant.numeric",regex:f+"%"},{token:"constant.numeric",regex:f},{token:"constant.numeric",regex:"#[a-fA-F0-9]{6}"},{token:"constant.numeric",regex:"#[a-fA-F0-9]{3}"},{token:function(e){return a.hasOwnProperty(e.toLowerCase())?"support.type":b.hasOwnProperty(e.toLowerCase())?"support.function":c.hasOwnProperty(e.toLowerCase())?"support.constant":d.hasOwnProperty(e.toLowerCase())?"support.constant.color":"text"},regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"}],i=e.copyArray(h);i.unshift({token:"rparen",regex:"\\}",next:"start"});var j=e.copyArray(h);j.unshift({token:"rparen",regex:"\\}",next:"media"});var k=[{token:"comment",merge:!0,regex:".+"}],l=e.copyArray(k);l.unshift({token:"comment",regex:".*?\\*\\/",next:"start"});var m=e.copyArray(k);m.unshift({token:"comment",regex:".*?\\*\\/",next:"media"});var n=e.copyArray(k);n.unshift({token:"comment",regex:".*?\\*\\/",next:"ruleset"}),this.$rules={start:[{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"lparen",regex:"\\{",next:"ruleset"},{token:"string",regex:"@media.*?{",next:"media"},{token:"keyword",regex:"#[a-zA-Z0-9-_]+"},{token:"variable",regex:"\\.[a-zA-Z0-9-_]+"},{token:"string",regex:":[a-zA-Z0-9-_]+"},{token:"constant",regex:"[a-zA-Z0-9-_]+"}],media:[{token:"comment",merge:!0,regex:"\\/\\*",next:"media_comment"},{token:"lparen",regex:"\\{",next:"media_ruleset"},{token:"string",regex:"\\}",next:"start"},{token:"keyword",regex:"#[a-zA-Z0-9-_]+"},{token:"variable",regex:"\\.[a-zA-Z0-9-_]+"},{token:"string",regex:":[a-zA-Z0-9-_]+"},{token:"constant",regex:"[a-zA-Z0-9-_]+"}],comment:l,ruleset:i,ruleset_comment:n,media_ruleset:j,media_comment:m}};d.inherits(g,f),b.CssHighlightRules=g}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(a,b,c){var d=a("ace/range").Range,e=function(){};(function(){this.checkOutdent=function(a,b){return/^\s+$/.test(a)?/^\s*\}/.test(b):!1},this.autoOutdent=function(a,b){var c=a.getLine(b),e=c.match(/^(\s*\})/);if(!e)return 0;var f=e[1].length,g=a.findMatchingBracket({row:b,column:f});if(!g||g.row==b)return 0;var h=this.$getIndent(a.getLine(g.row));a.replace(new d(b,0,b,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""}}).call(e.prototype),b.MatchingBraceOutdent=e}),define("ace/worker/worker_client",["require","exports","module","pilot/oop","pilot/event_emitter"],function(a,b,c){var d=a("pilot/oop"),e=a("pilot/event_emitter").EventEmitter,f=function(b,c,d,e){this.callbacks=[];if(a.packaged)var f=this.$guessBasePath(),g=this.$worker=new Worker(f+c);else{var h=this.$normalizePath(a.nameToUrl("ace/worker/worker",null,"_")),g=this.$worker=new Worker(h),i={};for(var j=0;j<b.length;j++){var k=b[j],l=this.$normalizePath(a.nameToUrl(k,null,"_").replace(/.js$/,""));i[k]=l}}this.$worker.postMessage({init:!0,tlns:i,module:d,classname:e}),this.callbackId=1,this.callbacks={};var m=this;this.$worker.onerror=function(a){window.console&&console.log&&console.log(a);throw a},this.$worker.onmessage=function(a){var b=a.data;switch(b.type){case"log":window.console&&console.log&&console.log(b.data);break;case"event":m._dispatchEvent(b.name,{data:b.data});break;case"call":var c=m.callbacks[b.id];c&&(c(b.data),delete m.callbacks[b.id])}}};(function(){d.implement(this,e),this.$normalizePath=function(a){a.match(/^\w+:/)||(a=location.protocol+"//"+location.host+location.pathname+"/"+a);return a},this.$guessBasePath=function(){if(a.aceBaseUrl)return a.aceBaseUrl;var b=document.getElementsByTagName("script");for(var c=0;c<b.length;c++){var d=b[c],e=d.getAttribute("data-ace-base");if(e)return e.replace(/\/*$/,"/");var f=d.src||d.getAttribute("src");if(!f)continue;var g=f.match(/^(?:(.*\/)ace\.js|(.*\/)ace-uncompressed\.js)(?:\?|$)/);if(g)return g[1]||g[2]}return""},this.terminate=function(){this._dispatchEvent("terminate",{}),this.$worker.terminate()},this.send=function(a,b){this.$worker.postMessage({command:a,args:b})},this.call=function(a,b,c){if(c){var d=this.callbackId++;this.callbacks[d]=c,b.push(d)}this.send(a,b)},this.emit=function(a,b){this.$worker.postMessage({event:a,data:b})}}).call(f.prototype),b.WorkerClient=f}) \ No newline at end of file
+define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/folding/cstyle"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text").Mode,f=a("../tokenizer").Tokenizer,g=a("./css_highlight_rules").CssHighlightRules,h=a("./matching_brace_outdent").MatchingBraceOutdent,i=a("../worker/worker_client").WorkerClient,j=a("./folding/cstyle").FoldMode,k=function(){this.$tokenizer=new f((new g).getRules(),"i"),this.$outdent=new h,this.foldingRules=new j};d.inherits(k,e),function(){this.foldingRules="cStyle",this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=this.$tokenizer.getLineTokens(b,a).tokens;if(e.length&&e[e.length-1].type=="comment")return d;var f=b.match(/^.*\{\s*$/);return f&&(d+=c),d},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)},this.createWorker=function(a){var b=new i(["ace"],"worker-css.js","ace/mode/css_worker","Worker");return b.attachToDocument(a.getDocument()),b.on("csslint",function(b){var c=[];b.data.forEach(function(a){c.push({row:a.line-1,column:a.col-1,text:a.message,type:a.type,lint:a})}),a.setAnnotations(c)}),b}}.call(k.prototype),b.Mode=k}),define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("../lib/lang"),f=a("./text_highlight_rules").TextHighlightRules,g=function(){var a=e.arrayToMap("-moz-appearance|-moz-box-sizing|-webkit-box-sizing|-moz-outline-radius|-moz-transform|-webkit-transform|appearance|azimuth|background-attachment|background-color|background-image|background-origin|background-position|background-repeat|background|border-bottom-color|border-bottom-style|border-bottom-width|border-bottom|border-collapse|border-color|border-left-color|border-left-style|border-left-width|border-left|border-right-color|border-right-style|border-right-width|border-right|border-spacing|border-style|border-top-color|border-top-style|border-top-width|border-top|border-width|border|bottom|box-sizing|caption-side|clear|clip|color|content|counter-increment|counter-reset|cue-after|cue-before|cue|cursor|direction|display|elevation|empty-cells|float|font-family|font-size-adjust|font-size|font-stretch|font-style|font-variant|font-weight|font|height|left|letter-spacing|line-height|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|marker-offset|margin|marks|max-height|max-width|min-height|min-width|-moz-border-radius|opacity|orphans|outline-color|outline-offset|outline-radius|outline-style|outline-width|outline|overflow|overflow-x|overflow-y|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page|pause-after|pause-before|pause|pitch-range|pitch|play-during|pointer-events|position|quotes|resize|richness|right|size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|stress|table-layout|text-align|text-decoration|text-indent|text-shadow|text-transform|top|transform|unicode-bidi|vertical-align|visibility|voice-family|volume|white-space|widows|width|word-spacing|z-index".split("|")),b=e.arrayToMap("rgb|rgba|url|attr|counter|counters".split("|")),c=e.arrayToMap("absolute|all-scroll|always|armenian|auto|baseline|below|bidi-override|block|bold|bolder|border-box|both|bottom|break-all|break-word|capitalize|center|char|circle|cjk-ideographic|col-resize|collapse|content-box|crosshair|dashed|decimal-leading-zero|decimal|default|disabled|disc|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ellipsis|fixed|georgian|groove|hand|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|inactive|inherit|inline-block|inline|inset|inside|inter-ideograph|inter-word|italic|justify|katakana-iroha|katakana|keep-all|left|lighter|line-edge|line-through|line|list-item|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|medium|middle|move|n-resize|ne-resize|newspaper|no-drop|no-repeat|nw-resize|none|normal|not-allowed|nowrap|oblique|outset|outside|overline|pointer|progress|relative|repeat-x|repeat-y|repeat|right|ridge|row-resize|rtl|s-resize|scroll|se-resize|separate|small-caps|solid|square|static|strict|super|sw-resize|table-footer-group|table-header-group|tb-rl|text-bottom|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|zero".split("|")),d=e.arrayToMap("aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow".split("|")),f="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))",g=[{token:"comment",merge:!0,regex:"\\/\\*",next:"ruleset_comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"constant.numeric",regex:f+"(?:em|ex|px|cm|mm|in|pt|pc|deg|rad|grad|ms|s|hz|khz|%)"},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:function(e){return a.hasOwnProperty(e.toLowerCase())?"support.type":b.hasOwnProperty(e.toLowerCase())?"support.function":c.hasOwnProperty(e.toLowerCase())?"support.constant":d.hasOwnProperty(e.toLowerCase())?"support.constant.color":"text"},regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"}],h=e.copyArray(g);h.unshift({token:"paren.rparen",regex:"\\}",next:"start"});var i=e.copyArray(g);i.unshift({token:"paren.rparen",regex:"\\}",next:"media"});var j=[{token:"comment",merge:!0,regex:".+"}],k=e.copyArray(j);k.unshift({token:"comment",regex:".*?\\*\\/",next:"start"});var l=e.copyArray(j);l.unshift({token:"comment",regex:".*?\\*\\/",next:"media"});var m=e.copyArray(j);m.unshift({token:"comment",regex:".*?\\*\\/",next:"ruleset"}),this.$rules={start:[{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"paren.lparen",regex:"\\{",next:"ruleset"},{token:"string",regex:"@.*?{",next:"media"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"}],media:[{token:"comment",merge:!0,regex:"\\/\\*",next:"media_comment"},{token:"paren.lparen",regex:"\\{",next:"media_ruleset"},{token:"string",regex:"\\}",next:"start"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"}],comment:k,ruleset:h,ruleset_comment:m,media_ruleset:i,media_comment:l}};d.inherits(g,f),b.CssHighlightRules=g}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(a,b,c){"use strict";var d=a("../range").Range,e=function(){};((function(){this.checkOutdent=function(a,b){return/^\s+$/.test(a)?/^\s*\}/.test(b):!1},this.autoOutdent=function(a,b){var c=a.getLine(b),e=c.match(/^(\s*\})/);if(!e)return 0;var f=e[1].length,g=a.findMatchingBracket({row:b,column:f});if(!g||g.row==b)return 0;var h=this.$getIndent(a.getLine(g.row));a.replace(new d(b,0,b,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""}})).call(e.prototype),b.MatchingBraceOutdent=e}),define("ace/worker/worker_client",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("../lib/event_emitter").EventEmitter,f=function(b,d,e,f){this.changeListener=this.changeListener.bind(this);if(c.packaged){var g=this.$guessBasePath();this.$worker=new Worker(g+d)}else{var h=this.$normalizePath(a.nameToUrl("ace/worker/worker",null,"_"));this.$worker=new Worker(h);var i={};for(var j=0;j<b.length;j++){var k=b[j],l=this.$normalizePath(a.nameToUrl(k,null,"_").replace(/.js$/,""));i[k]=l}}this.$worker.postMessage({init:!0,tlns:i,module:e,classname:f}),this.callbackId=1,this.callbacks={};var m=this;this.$worker.onerror=function(a){throw window.console&&console.log&&console.log(a),a},this.$worker.onmessage=function(a){var b=a.data;switch(b.type){case"log":window.console&&console.log&&console.log(b.data);break;case"event":m._emit(b.name,{data:b.data});break;case"call":var c=m.callbacks[b.id];c&&(c(b.data),delete m.callbacks[b.id])}}};((function(){d.implement(this,e),this.$normalizePath=function(a){return a=a.replace(/^[a-z]+:\/\/[^\/]+\//,""),a=location.protocol+"//"+location.host+(a.charAt(0)=="/"?"":location.pathname.replace(/\/[^\/]*$/,""))+"/"+a.replace(/^[\/]+/,""),a},this.$guessBasePath=function(){if(a.aceBaseUrl)return a.aceBaseUrl;var b=document.getElementsByTagName("script");for(var c=0;c<b.length;c++){var d=b[c],e=d.getAttribute("data-ace-base");if(e)return e.replace(/\/*$/,"/");var f=d.src||d.getAttribute("src");if(!f)continue;var g=f.match(/^(?:(.*\/)ace\.js|(.*\/)ace(-uncompressed)?(-noconflict)?\.js)(?:\?|$)/);if(g)return g[1]||g[2]}return""},this.terminate=function(){this._emit("terminate",{}),this.$worker.terminate(),this.$worker=null,this.$doc.removeEventListener("change",this.changeListener),this.$doc=null},this.send=function(a,b){this.$worker.postMessage({command:a,args:b})},this.call=function(a,b,c){if(c){var d=this.callbackId++;this.callbacks[d]=c,b.push(d)}this.send(a,b)},this.emit=function(a,b){try{this.$worker.postMessage({event:a,data:{data:b.data}})}catch(c){}},this.attachToDocument=function(a){this.$doc&&this.terminate(),this.$doc=a,this.call("setValue",[a.getValue()]),a.on("change",this.changeListener)},this.changeListener=function(a){a.range={start:a.data.range.start,end:a.data.range.end},this.emit("change",a)}})).call(f.prototype),b.WorkerClient=f}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("../../range").Range,f=a("./fold_mode").FoldMode,g=b.FoldMode=function(){};d.inherits(g,f),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(a,b,c){var d=a.getLine(c),f=d.match(this.foldingStartMarker);if(f){var g=f.index;if(f[1])return this.openingBracketBlock(a,f[1],c,g);var h=a.getCommentFoldRange(c,g+f[0].length);return h.end.column-=2,h}if(b!=="markbeginend")return;var f=d.match(this.foldingStopMarker);if(f){var g=f.index+f[0].length;if(f[2]){var h=a.getCommentFoldRange(c,g);return h.end.column-=2,h}var i={row:c,column:g},j=a.$findOpeningBracket(f[1],i);if(!j)return;return j.column++,i.column--,e.fromPoints(j,i)}}}.call(g.prototype)}),define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"],function(a,b,c){"use strict";var d=a("../../range").Range,e=b.FoldMode=function(){};((function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(a,b,c){var d=a.getLine(c);return this.foldingStartMarker.test(d)?"start":b=="markbeginend"&&this.foldingStopMarker&&this.foldingStopMarker.test(d)?"end":""},this.getFoldWidgetRange=function(a,b,c){return null},this.indentationBlock=function(a,b,c){var e=/^\s*/,f=b,g=b,h=a.getLine(b),i=c||h.length,j=h.match(e)[0].length,k=a.getLength();while(++b<k){h=a.getLine(b);var l=h.match(e)[0].length;if(l==h.length)continue;if(l<=j)break;g=b}if(g>f){var m=a.getLine(g).length;return new d(f,i,g,m)}},this.openingBracketBlock=function(a,b,c,e){var f={row:c,column:e+1},g=a.$findClosingBracket(b,f);if(!g)return;var h=a.foldWidgets[g.row];return h==null&&(h=this.getFoldWidget(a,g.row)),h=="start"&&(g.row--,g.column=a.getLine(g.row).length),d.fromPoints(f,g)}})).call(e.prototype)}),function(){window.require(["ace/ace"],function(a){window.ace||(window.ace={});for(var b in a)a.hasOwnProperty(b)&&(ace[b]=a[b])})}() \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-groovy-uncompressed.js b/apps/files_texteditor/js/aceeditor/mode-groovy-uncompressed.js
new file mode 100755
index 00000000000..b6067e87773
--- /dev/null
+++ b/apps/files_texteditor/js/aceeditor/mode-groovy-uncompressed.js
@@ -0,0 +1,1462 @@
+define('ace/mode/groovy', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/javascript', 'ace/tokenizer', 'ace/mode/groovy_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var JavaScriptMode = require("./javascript").Mode;
+var Tokenizer = require("../tokenizer").Tokenizer;
+var GroovyHighlightRules = require("./groovy_highlight_rules").GroovyHighlightRules;
+
+var Mode = function() {
+ JavaScriptMode.call(this);
+ this.$tokenizer = new Tokenizer(new GroovyHighlightRules().getRules());
+};
+oop.inherits(Mode, JavaScriptMode);
+
+(function() {
+
+ this.createWorker = function(session) {
+ return null;
+ };
+
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/javascript', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/javascript_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/range', 'ace/worker/worker_client', 'ace/mode/behaviour/cstyle', 'ace/mode/folding/cstyle'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextMode = require("./text").Mode;
+var Tokenizer = require("../tokenizer").Tokenizer;
+var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;
+var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
+var Range = require("../range").Range;
+var WorkerClient = require("../worker/worker_client").WorkerClient;
+var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
+var CStyleFoldMode = require("./folding/cstyle").FoldMode;
+
+var Mode = function() {
+ this.$tokenizer = new Tokenizer(new JavaScriptHighlightRules().getRules());
+ this.$outdent = new MatchingBraceOutdent();
+ this.$behaviour = new CstyleBehaviour();
+ this.foldingRules = new CStyleFoldMode();
+};
+oop.inherits(Mode, TextMode);
+
+(function() {
+
+
+ this.toggleCommentLines = function(state, doc, startRow, endRow) {
+ var outdent = true;
+ var re = /^(\s*)\/\//;
+
+ for (var i=startRow; i<= endRow; i++) {
+ if (!re.test(doc.getLine(i))) {
+ outdent = false;
+ break;
+ }
+ }
+
+ if (outdent) {
+ var deleteRange = new Range(0, 0, 0, 0);
+ for (var i=startRow; i<= endRow; i++)
+ {
+ var line = doc.getLine(i);
+ var m = line.match(re);
+ deleteRange.start.row = i;
+ deleteRange.end.row = i;
+ deleteRange.end.column = m[0].length;
+ doc.replace(deleteRange, m[1]);
+ }
+ }
+ else {
+ doc.indentRows(startRow, endRow, "//");
+ }
+ };
+
+ this.getNextLineIndent = function(state, line, tab) {
+ var indent = this.$getIndent(line);
+
+ var tokenizedLine = this.$tokenizer.getLineTokens(line, state);
+ var tokens = tokenizedLine.tokens;
+ var endState = tokenizedLine.state;
+
+ if (tokens.length && tokens[tokens.length-1].type == "comment") {
+ return indent;
+ }
+
+ if (state == "start" || state == "regex_allowed") {
+ var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);
+ if (match) {
+ indent += tab;
+ }
+ } else if (state == "doc-start") {
+ if (endState == "start" || state == "regex_allowed") {
+ return "";
+ }
+ var match = line.match(/^\s*(\/?)\*/);
+ if (match) {
+ if (match[1]) {
+ indent += " ";
+ }
+ indent += "* ";
+ }
+ }
+
+ return indent;
+ };
+
+ this.checkOutdent = function(state, line, input) {
+ return this.$outdent.checkOutdent(line, input);
+ };
+
+ this.autoOutdent = function(state, doc, row) {
+ this.$outdent.autoOutdent(doc, row);
+ };
+
+ this.createWorker = function(session) {
+ var worker = new WorkerClient(["ace"], "worker-javascript.js", "ace/mode/javascript_worker", "JavaScriptWorker");
+ worker.attachToDocument(session.getDocument());
+
+ worker.on("jslint", function(results) {
+ var errors = [];
+ for (var i=0; i<results.data.length; i++) {
+ var error = results.data[i];
+ if (error)
+ errors.push({
+ row: error.line-1,
+ column: error.character-1,
+ text: error.reason,
+ type: "warning",
+ lint: error
+ });
+ }
+ session.setAnnotations(errors);
+ });
+
+ worker.on("narcissus", function(e) {
+ session.setAnnotations([e.data]);
+ });
+
+ worker.on("terminate", function() {
+ session.clearAnnotations();
+ });
+
+ return worker;
+ };
+
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ * Mihai Sucan <mihai DOT sucan AT gmail DOT com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/javascript_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/unicode', 'ace/mode/doc_comment_highlight_rules', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var lang = require("../lib/lang");
+var unicode = require("../unicode");
+var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var JavaScriptHighlightRules = function() {
+
+ // see: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects
+ var globals = lang.arrayToMap(
+ // Constructors
+ ("Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" +
+ // E4X
+ "Namespace|QName|XML|XMLList|" +
+ "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" +
+ "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" +
+ // Errors
+ "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" +
+ "SyntaxError|TypeError|URIError|" +
+ // Non-constructor functions
+ "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" +
+ "isNaN|parseFloat|parseInt|" +
+ // Other
+ "JSON|Math|" +
+ // Pseudo
+ "this|arguments|prototype|window|document"
+ ).split("|")
+ );
+
+ var keywords = lang.arrayToMap(
+ ("break|case|catch|continue|default|delete|do|else|finally|for|function|" +
+ "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|" +
+ "const|yield|import|get|set").split("|")
+ );
+
+ // keywords which can be followed by regular expressions
+ var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield";
+
+ var deprecated = lang.arrayToMap(
+ ("__parent__|__count__|escape|unescape|with|__proto__").split("|")
+ );
+
+ var definitions = lang.arrayToMap(("const|let|var|function").split("|"));
+
+ var buildinConstants = lang.arrayToMap(
+ ("null|Infinity|NaN|undefined").split("|")
+ );
+
+ var futureReserved = lang.arrayToMap(
+ ("class|enum|extends|super|export|implements|private|" +
+ "public|interface|package|protected|static").split("|")
+ );
+
+ // TODO: Unicode escape sequences
+ var identifierRe = "[" + unicode.packages.L + "\\$_]["
+ + unicode.packages.L
+ + unicode.packages.Mn + unicode.packages.Mc
+ + unicode.packages.Nd
+ + unicode.packages.Pc + "\\$_]*\\b";
+
+ // regexp must not have capturing parentheses. Use (?:) instead.
+ // regexps are ordered -> the first match is used
+
+ this.$rules = {
+ "start" : [
+ {
+ token : "comment",
+ regex : "\\/\\/.*$"
+ },
+ new DocCommentHighlightRules().getStartRule("doc-start"),
+ {
+ token : "comment", // multi line comment
+ merge : true,
+ regex : "\\/\\*",
+ next : "comment"
+ }, {
+ token : "string", // single line
+ regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
+ }, {
+ token : "string", // multi line string start
+ merge : true,
+ regex : '["].*\\\\$',
+ next : "qqstring"
+ }, {
+ token : "string", // single line
+ regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
+ }, {
+ token : "string", // multi line string start
+ merge : true,
+ regex : "['].*\\\\$",
+ next : "qstring"
+ }, {
+ token : "constant.numeric", // hex
+ regex : "0[xX][0-9a-fA-F]+\\b"
+ }, {
+ token : "constant.numeric", // float
+ regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
+ }, {
+ token : ["keyword.definition", "text", "entity.name.function"],
+ regex : "(function)(\\s+)(" + identifierRe + ")"
+ }, {
+ token : "constant.language.boolean",
+ regex : "(?:true|false)\\b"
+ }, {
+ token : "keyword",
+ regex : "(?:" + kwBeforeRe + ")\\b",
+ next : "regex_allowed"
+ }, {
+ token : function(value) {
+ if (globals.hasOwnProperty(value))
+ return "variable.language";
+ else if (deprecated.hasOwnProperty(value))
+ return "invalid.deprecated";
+ else if (definitions.hasOwnProperty(value))
+ return "keyword.definition";
+ else if (keywords.hasOwnProperty(value))
+ return "keyword";
+ else if (buildinConstants.hasOwnProperty(value))
+ return "constant.language";
+ else if (futureReserved.hasOwnProperty(value))
+ return "invalid.illegal";
+ else if (value == "debugger")
+ return "invalid.deprecated";
+ else
+ return "identifier";
+ },
+ regex : identifierRe
+ }, {
+ token : "keyword.operator",
+ regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)",
+ next : "regex_allowed"
+ }, {
+ token : "punctuation.operator",
+ regex : "\\?|\\:|\\,|\\;|\\.",
+ next : "regex_allowed"
+ }, {
+ token : "paren.lparen",
+ regex : "[[({]",
+ next : "regex_allowed"
+ }, {
+ token : "paren.rparen",
+ regex : "[\\])}]"
+ }, {
+ token : "keyword.operator",
+ regex : "\\/=?",
+ next : "regex_allowed"
+ }, {
+ token: "comment",
+ regex: "^#!.*$"
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }
+ ],
+ // regular expressions are only allowed after certain tokens. This
+ // makes sure we don't mix up regexps with the divison operator
+ "regex_allowed": [
+ {
+ token : "comment", // multi line comment
+ merge : true,
+ regex : "\\/\\*",
+ next : "comment_regex_allowed"
+ }, {
+ token : "comment",
+ regex : "\\/\\/.*$"
+ }, {
+ token: "string.regexp",
+ regex: "\\/",
+ next: "regex",
+ merge: true
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }, {
+ // immediately return to the start mode without matching
+ // anything
+ token: "empty",
+ regex: "",
+ next: "start"
+ }
+ ],
+ "regex": [
+ {
+ token: "regexp.keyword.operator",
+ regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)",
+ next: "regex"
+ }, {
+ // flag
+ token: "string.regexp",
+ regex: "/\\w*",
+ next: "start",
+ merge: true
+ }, {
+ token: "string.regexp",
+ regex: "[^\\\\/\\[]+",
+ next: "regex",
+ merge: true
+ }, {
+ token: "string.regexp.charachterclass",
+ regex: "\\[",
+ next: "regex_character_class",
+ merge: true
+ }, {
+ token: "empty",
+ regex: "",
+ next: "start"
+ }
+ ],
+ "regex_character_class": [
+ {
+ token: "regexp.keyword.operator",
+ regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)",
+ next: "regex_character_class"
+ }, {
+ token: "string.regexp.charachterclass",
+ regex: "]",
+ next: "regex",
+ merge: true
+ }, {
+ token: "string.regexp.charachterclass",
+ regex: "[^\\\\\\]]+",
+ next: "regex_character_class",
+ merge: true
+ }, {
+ token: "empty",
+ regex: "",
+ next: "start"
+ }
+ ],
+ "comment_regex_allowed" : [
+ {
+ token : "comment", // closing comment
+ regex : ".*?\\*\\/",
+ merge : true,
+ next : "regex_allowed"
+ }, {
+ token : "comment", // comment spanning whole line
+ merge : true,
+ regex : ".+"
+ }
+ ],
+ "comment" : [
+ {
+ token : "comment", // closing comment
+ regex : ".*?\\*\\/",
+ merge : true,
+ next : "start"
+ }, {
+ token : "comment", // comment spanning whole line
+ merge : true,
+ regex : ".+"
+ }
+ ],
+ "qqstring" : [
+ {
+ token : "string",
+ regex : '(?:(?:\\\\.)|(?:[^"\\\\]))*?"',
+ next : "start"
+ }, {
+ token : "string",
+ merge : true,
+ regex : '.+'
+ }
+ ],
+ "qstring" : [
+ {
+ token : "string",
+ regex : "(?:(?:\\\\.)|(?:[^'\\\\]))*?'",
+ next : "start"
+ }, {
+ token : "string",
+ merge : true,
+ regex : '.+'
+ }
+ ]
+ };
+
+ this.embedRules(DocCommentHighlightRules, "doc-",
+ [ new DocCommentHighlightRules().getEndRule("start") ]);
+};
+
+oop.inherits(JavaScriptHighlightRules, TextHighlightRules);
+
+exports.JavaScriptHighlightRules = JavaScriptHighlightRules;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/doc_comment_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var DocCommentHighlightRules = function() {
+
+ this.$rules = {
+ "start" : [ {
+ token : "comment.doc.tag",
+ regex : "@[\\w\\d_]+" // TODO: fix email addresses
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "\\s+"
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "TODO"
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "[^@\\*]+"
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "."
+ }]
+ };
+};
+
+oop.inherits(DocCommentHighlightRules, TextHighlightRules);
+
+(function() {
+
+ this.getStartRule = function(start) {
+ return {
+ token : "comment.doc", // doc comment
+ merge : true,
+ regex : "\\/\\*(?=\\*)",
+ next : start
+ };
+ };
+
+ this.getEndRule = function (start) {
+ return {
+ token : "comment.doc", // closing comment
+ merge : true,
+ regex : "\\*\\/",
+ next : start
+ };
+ };
+
+}).call(DocCommentHighlightRules.prototype);
+
+exports.DocCommentHighlightRules = DocCommentHighlightRules;
+
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var Range = require("../range").Range;
+
+var MatchingBraceOutdent = function() {};
+
+(function() {
+
+ this.checkOutdent = function(line, input) {
+ if (! /^\s+$/.test(line))
+ return false;
+
+ return /^\s*\}/.test(input);
+ };
+
+ this.autoOutdent = function(doc, row) {
+ var line = doc.getLine(row);
+ var match = line.match(/^(\s*\})/);
+
+ if (!match) return 0;
+
+ var column = match[1].length;
+ var openBracePos = doc.findMatchingBracket({row: row, column: column});
+
+ if (!openBracePos || openBracePos.row == row) return 0;
+
+ var indent = this.$getIndent(doc.getLine(openBracePos.row));
+ doc.replace(new Range(row, 0, row, column-1), indent);
+ };
+
+ this.$getIndent = function(line) {
+ var match = line.match(/^(\s+)/);
+ if (match) {
+ return match[1];
+ }
+
+ return "";
+ };
+
+}).call(MatchingBraceOutdent.prototype);
+
+exports.MatchingBraceOutdent = MatchingBraceOutdent;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/worker/worker_client', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event_emitter'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var EventEmitter = require("../lib/event_emitter").EventEmitter;
+
+var WorkerClient = function(topLevelNamespaces, packagedJs, mod, classname) {
+
+ this.changeListener = this.changeListener.bind(this);
+
+ if (module.packaged) {
+ var base = this.$guessBasePath();
+ this.$worker = new Worker(base + packagedJs);
+ }
+ else {
+ var workerUrl = this.$normalizePath(require.nameToUrl("ace/worker/worker", null, "_"));
+ this.$worker = new Worker(workerUrl);
+
+ var tlns = {};
+ for (var i=0; i<topLevelNamespaces.length; i++) {
+ var ns = topLevelNamespaces[i];
+ var path = this.$normalizePath(require.nameToUrl(ns, null, "_").replace(/.js$/, ""));
+
+ tlns[ns] = path;
+ }
+ }
+
+ this.$worker.postMessage({
+ init : true,
+ tlns: tlns,
+ module: mod,
+ classname: classname
+ });
+
+ this.callbackId = 1;
+ this.callbacks = {};
+
+ var _self = this;
+ this.$worker.onerror = function(e) {
+ window.console && console.log && console.log(e);
+ throw e;
+ };
+ this.$worker.onmessage = function(e) {
+ var msg = e.data;
+ switch(msg.type) {
+ case "log":
+ window.console && console.log && console.log(msg.data);
+ break;
+
+ case "event":
+ _self._emit(msg.name, {data: msg.data});
+ break;
+
+ case "call":
+ var callback = _self.callbacks[msg.id];
+ if (callback) {
+ callback(msg.data);
+ delete _self.callbacks[msg.id];
+ }
+ break;
+ }
+ };
+};
+
+(function(){
+
+ oop.implement(this, EventEmitter);
+
+ this.$normalizePath = function(path) {
+ path = path.replace(/^[a-z]+:\/\/[^\/]+\//, ""); // Remove domain name and rebuild it
+ path = location.protocol + "//" + location.host
+ // paths starting with a slash are relative to the root (host)
+ + (path.charAt(0) == "/" ? "" : location.pathname.replace(/\/[^\/]*$/, ""))
+ + "/" + path.replace(/^[\/]+/, "");
+ return path;
+ };
+
+ this.$guessBasePath = function() {
+ if (require.aceBaseUrl)
+ return require.aceBaseUrl;
+
+ var scripts = document.getElementsByTagName("script");
+ for (var i=0; i<scripts.length; i++) {
+ var script = scripts[i];
+
+ var base = script.getAttribute("data-ace-base");
+ if (base)
+ return base.replace(/\/*$/, "/");
+
+ var src = script.src || script.getAttribute("src");
+ if (!src) {
+ continue;
+ }
+ var m = src.match(/^(?:(.*\/)ace\.js|(.*\/)ace(-uncompressed)?(-noconflict)?\.js)(?:\?|$)/);
+ if (m)
+ return m[1] || m[2];
+ }
+ return "";
+ };
+
+ this.terminate = function() {
+ this._emit("terminate", {});
+ this.$worker.terminate();
+ this.$worker = null;
+ this.$doc.removeEventListener("change", this.changeListener);
+ this.$doc = null;
+ };
+
+ this.send = function(cmd, args) {
+ this.$worker.postMessage({command: cmd, args: args});
+ };
+
+ this.call = function(cmd, args, callback) {
+ if (callback) {
+ var id = this.callbackId++;
+ this.callbacks[id] = callback;
+ args.push(id);
+ }
+ this.send(cmd, args);
+ };
+
+ this.emit = function(event, data) {
+ try {
+ // firefox refuses to clone objects which have function properties
+ // TODO: cleanup event
+ this.$worker.postMessage({event: event, data: {data: data.data}});
+ }
+ catch(ex) {}
+ };
+
+ this.attachToDocument = function(doc) {
+ if(this.$doc)
+ this.terminate();
+
+ this.$doc = doc;
+ this.call("setValue", [doc.getValue()]);
+ doc.on("change", this.changeListener);
+ };
+
+ this.changeListener = function(e) {
+ e.range = {
+ start: e.data.range.start,
+ end: e.data.range.end
+ };
+ this.emit("change", e);
+ };
+
+}).call(WorkerClient.prototype);
+
+exports.WorkerClient = WorkerClient;
+
+});
+/* vim:ts=4:sts=4:sw=4:
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Chris Spencer <chris.ag.spencer AT googlemail DOT com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/behaviour/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var Behaviour = require('../behaviour').Behaviour;
+
+var CstyleBehaviour = function () {
+
+ this.add("braces", "insertion", function (state, action, editor, session, text) {
+ if (text == '{') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '{' + selected + '}',
+ selection: false
+ }
+ } else {
+ return {
+ text: '{}',
+ selection: [1, 1]
+ }
+ }
+ } else if (text == '}') {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '}') {
+ var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});
+ if (matching !== null) {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ } else if (text == "\n") {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '}') {
+ var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column + 1});
+ if (!openBracePos)
+ return null;
+
+ var indent = this.getNextLineIndent(state, line.substring(0, line.length - 1), session.getTabString());
+ var next_indent = this.$getIndent(session.doc.getLine(openBracePos.row));
+
+ return {
+ text: '\n' + indent + '\n' + next_indent,
+ selection: [1, indent.length, 1, indent.length]
+ }
+ }
+ }
+ });
+
+ this.add("braces", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '{') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.end.column, range.end.column + 1);
+ if (rightChar == '}') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+ this.add("parens", "insertion", function (state, action, editor, session, text) {
+ if (text == '(') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '(' + selected + ')',
+ selection: false
+ }
+ } else {
+ return {
+ text: '()',
+ selection: [1, 1]
+ }
+ }
+ } else if (text == ')') {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == ')') {
+ var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});
+ if (matching !== null) {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ }
+ });
+
+ this.add("parens", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '(') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
+ if (rightChar == ')') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+ this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {
+ if (text == '"') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '"' + selected + '"',
+ selection: false
+ }
+ } else {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var leftChar = line.substring(cursor.column-1, cursor.column);
+
+ // We're escaped.
+ if (leftChar == '\\') {
+ return null;
+ }
+
+ // Find what token we're inside.
+ var tokens = session.getTokens(selection.start.row, selection.start.row)[0].tokens;
+ var col = 0, token;
+ var quotepos = -1; // Track whether we're inside an open quote.
+
+ for (var x = 0; x < tokens.length; x++) {
+ token = tokens[x];
+ if (token.type == "string") {
+ quotepos = -1;
+ } else if (quotepos < 0) {
+ quotepos = token.value.indexOf('"');
+ }
+ if ((token.value.length + col) > selection.start.column) {
+ break;
+ }
+ col += tokens[x].value.length;
+ }
+
+ // Try and be smart about when we auto insert.
+ if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf('"') === token.value.length-1)))) {
+ return {
+ text: '""',
+ selection: [1,1]
+ }
+ } else if (token && token.type === "string") {
+ // Ignore input and move right one if we're typing over the closing quote.
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '"') {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ }
+ }
+ });
+
+ this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '"') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
+ if (rightChar == '"') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+}
+oop.inherits(CstyleBehaviour, Behaviour);
+
+exports.CstyleBehaviour = CstyleBehaviour;
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var Range = require("../../range").Range;
+var BaseFoldMode = require("./fold_mode").FoldMode;
+
+var FoldMode = exports.FoldMode = function() {};
+oop.inherits(FoldMode, BaseFoldMode);
+
+(function() {
+
+ this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
+ this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ var line = session.getLine(row);
+ var match = line.match(this.foldingStartMarker);
+ if (match) {
+ var i = match.index;
+
+ if (match[1])
+ return this.openingBracketBlock(session, match[1], row, i);
+
+ var range = session.getCommentFoldRange(row, i + match[0].length);
+ range.end.column -= 2;
+ return range;
+ }
+
+ if (foldStyle !== "markbeginend")
+ return;
+
+ var match = line.match(this.foldingStopMarker);
+ if (match) {
+ var i = match.index + match[0].length;
+
+ if (match[2]) {
+ var range = session.getCommentFoldRange(row, i);
+ range.end.column -= 2;
+ return range;
+ }
+
+ var end = {row: row, column: i};
+ var start = session.$findOpeningBracket(match[1], end);
+
+ if (!start)
+ return;
+
+ start.column++;
+ end.column--;
+
+ return Range.fromPoints(start, end);
+ }
+ };
+
+}).call(FoldMode.prototype);
+
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/fold_mode', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var Range = require("../../range").Range;
+
+var FoldMode = exports.FoldMode = function() {};
+
+(function() {
+
+ this.foldingStartMarker = null;
+ this.foldingStopMarker = null;
+
+ // must return "" if there's no fold, to enable caching
+ this.getFoldWidget = function(session, foldStyle, row) {
+ var line = session.getLine(row);
+ if (this.foldingStartMarker.test(line))
+ return "start";
+ if (foldStyle == "markbeginend"
+ && this.foldingStopMarker
+ && this.foldingStopMarker.test(line))
+ return "end";
+ return "";
+ };
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ return null;
+ };
+
+ this.indentationBlock = function(session, row, column) {
+ var re = /^\s*/;
+ var startRow = row;
+ var endRow = row;
+ var line = session.getLine(row);
+ var startColumn = column || line.length;
+ var startLevel = line.match(re)[0].length;
+ var maxRow = session.getLength()
+
+ while (++row < maxRow) {
+ line = session.getLine(row);
+ var level = line.match(re)[0].length;
+
+ if (level == line.length)
+ continue;
+
+ if (level <= startLevel)
+ break;
+
+ endRow = row;
+ }
+
+ if (endRow > startRow) {
+ var endColumn = session.getLine(endRow).length;
+ return new Range(startRow, startColumn, endRow, endColumn);
+ }
+ };
+
+ this.openingBracketBlock = function(session, bracket, row, column) {
+ var start = {row: row, column: column + 1};
+ var end = session.$findClosingBracket(bracket, start);
+ if (!end)
+ return;
+
+ var fw = session.foldWidgets[end.row];
+ if (fw == null)
+ fw = this.getFoldWidget(session, end.row);
+
+ if (fw == "start") {
+ end.row --;
+ end.column = session.getLine(end.row).length;
+ }
+ return Range.fromPoints(start, end);
+ };
+
+}).call(FoldMode.prototype);
+
+});
+define('ace/mode/groovy_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/mode/doc_comment_highlight_rules', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var lang = require("../lib/lang");
+var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var GroovyHighlightRules = function() {
+
+ var keywords = lang.arrayToMap(
+ ("assert|with|abstract|continue|for|new|switch|" +
+ "assert|default|goto|package|synchronized|" +
+ "boolean|do|if|private|this|" +
+ "break|double|implements|protected|throw|" +
+ "byte|else|import|public|throws|" +
+ "case|enum|instanceof|return|transient|" +
+ "catch|extends|int|short|try|" +
+ "char|final|interface|static|void|" +
+ "class|finally|long|strictfp|volatile|" +
+ "def|float|native|super|while").split("|")
+ );
+
+ var buildinConstants = lang.arrayToMap(
+ ("null|Infinity|NaN|undefined").split("|")
+ );
+
+ var langClasses = lang.arrayToMap(
+ ("AbstractMethodError|AssertionError|ClassCircularityError|"+
+ "ClassFormatError|Deprecated|EnumConstantNotPresentException|"+
+ "ExceptionInInitializerError|IllegalAccessError|"+
+ "IllegalThreadStateException|InstantiationError|InternalError|"+
+ "NegativeArraySizeException|NoSuchFieldError|Override|Process|"+
+ "ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|"+
+ "SuppressWarnings|TypeNotPresentException|UnknownError|"+
+ "UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|"+
+ "InstantiationException|IndexOutOfBoundsException|"+
+ "ArrayIndexOutOfBoundsException|CloneNotSupportedException|"+
+ "NoSuchFieldException|IllegalArgumentException|NumberFormatException|"+
+ "SecurityException|Void|InheritableThreadLocal|IllegalStateException|"+
+ "InterruptedException|NoSuchMethodException|IllegalAccessException|"+
+ "UnsupportedOperationException|Enum|StrictMath|Package|Compiler|"+
+ "Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|"+
+ "NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|"+
+ "NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|"+
+ "Character|Boolean|StackTraceElement|Appendable|StringBuffer|"+
+ "Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|"+
+ "StackOverflowError|OutOfMemoryError|VirtualMachineError|"+
+ "ArrayStoreException|ClassCastException|LinkageError|"+
+ "NoClassDefFoundError|ClassNotFoundException|RuntimeException|"+
+ "Exception|ThreadDeath|Error|Throwable|System|ClassLoader|"+
+ "Cloneable|Class|CharSequence|Comparable|String|Object").split("|")
+ );
+
+ var importClasses = lang.arrayToMap(
+ ("").split("|")
+ );
+ // regexp must not have capturing parentheses. Use (?:) instead.
+ // regexps are ordered -> the first match is used
+
+ this.$rules = {
+ "start" : [
+ {
+ token : "comment",
+ regex : "\\/\\/.*$"
+ },
+ new DocCommentHighlightRules().getStartRule("doc-start"),
+ {
+ token : "comment", // multi line comment
+ merge : true,
+ regex : "\\/\\*",
+ next : "comment"
+ }, {
+ token : "string.regexp",
+ regex : "[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)"
+ }, {
+ token : "string", // single line
+ regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
+ }, {
+ token : "string", // single line
+ regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
+ }, {
+ token : "constant.numeric", // hex
+ regex : "0[xX][0-9a-fA-F]+\\b"
+ }, {
+ token : "constant.numeric", // float
+ regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
+ }, {
+ token : "constant.language.boolean",
+ regex : "(?:true|false)\\b"
+ }, {
+ token : function(value) {
+ if (value == "this")
+ return "variable.language";
+ else if (keywords.hasOwnProperty(value))
+ return "keyword";
+ else if (langClasses.hasOwnProperty(value))
+ return "support.function";
+ else if (importClasses.hasOwnProperty(value))
+ return "support.function";
+ else if (buildinConstants.hasOwnProperty(value))
+ return "constant.language";
+ else
+ return "identifier";
+ },
+ // TODO: Unicode escape sequences
+ // TODO: Unicode identifiers
+ regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
+ }, {
+ token : "keyword.operator",
+ regex : "\\?:|\\?\\.|\\*\\.|<=>|=~|==~|\\.@|\\*\\.@|\\.&|as|in|is|!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"
+ }, {
+ token : "lparen",
+ regex : "[[({]"
+ }, {
+ token : "rparen",
+ regex : "[\\])}]"
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }
+ ],
+ "comment" : [
+ {
+ token : "comment", // closing comment
+ regex : ".*?\\*\\/",
+ next : "start"
+ }, {
+ token : "comment", // comment spanning whole line
+ merge : true,
+ regex : ".+"
+ }
+ ]
+ };
+
+ this.embedRules(DocCommentHighlightRules, "doc-",
+ [ new DocCommentHighlightRules().getEndRule("start") ]);
+};
+
+oop.inherits(GroovyHighlightRules, TextHighlightRules);
+
+exports.GroovyHighlightRules = GroovyHighlightRules;
+});
+;
+ (function() {
+ window.require(["ace/ace"], function(a) {
+ if (!window.ace)
+ window.ace = {};
+ for (var key in a) if (a.hasOwnProperty(key))
+ ace[key] = a[key];
+ });
+ })();
+ \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-groovy.js b/apps/files_texteditor/js/aceeditor/mode-groovy.js
index 29559419293..c71ada2bf84 100644
--- a/apps/files_texteditor/js/aceeditor/mode-groovy.js
+++ b/apps/files_texteditor/js/aceeditor/mode-groovy.js
@@ -1 +1 @@
-define("ace/mode/groovy",["require","exports","module","pilot/oop","ace/mode/javascript","ace/tokenizer","ace/mode/groovy_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/cstyle"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/javascript").Mode,f=a("ace/tokenizer").Tokenizer,g=a("ace/mode/groovy_highlight_rules").GroovyHighlightRules,h=a("ace/mode/matching_brace_outdent").MatchingBraceOutdent,i=a("ace/mode/behaviour/cstyle").CstyleBehaviour,j=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h,this.$behaviour=new i};d.inherits(j,e),function(){this.createWorker=function(a){return null}}.call(j.prototype),b.Mode=j}),define("ace/mode/javascript",["require","exports","module","pilot/oop","ace/mode/text","ace/tokenizer","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/text").Mode,f=a("ace/tokenizer").Tokenizer,g=a("ace/mode/javascript_highlight_rules").JavaScriptHighlightRules,h=a("ace/mode/matching_brace_outdent").MatchingBraceOutdent,i=a("ace/range").Range,j=a("ace/worker/worker_client").WorkerClient,k=a("ace/mode/behaviour/cstyle").CstyleBehaviour,l=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h,this.$behaviour=new k};d.inherits(l,e),function(){this.toggleCommentLines=function(a,b,c,d){var e=!0,f=[],g=/^(\s*)\/\//;for(var h=c;h<=d;h++)if(!g.test(b.getLine(h))){e=!1;break}if(e){var j=new i(0,0,0,0);for(var h=c;h<=d;h++){var k=b.getLine(h),l=k.match(g);j.start.row=h,j.end.row=h,j.end.column=l[0].length,b.replace(j,l[1])}}else b.indentRows(c,d,"//")},this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=this.$tokenizer.getLineTokens(b,a),f=e.tokens,g=e.state;if(f.length&&f[f.length-1].type=="comment")return d;if(a=="start"){var h=b.match(/^.*[\{\(\[\:]\s*$/);h&&(d+=c)}else if(a=="doc-start"){if(g=="start")return"";var h=b.match(/^\s*(\/?)\*/);h&&(h[1]&&(d+=" "),d+="* ")}return d},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)},this.createWorker=function(a){var b=a.getDocument(),c=new j(["ace","pilot"],"worker-javascript.js","ace/mode/javascript_worker","JavaScriptWorker");c.call("setValue",[b.getValue()]),b.on("change",function(a){a.range={start:a.data.range.start,end:a.data.range.end},c.emit("change",a)}),c.on("jslint",function(b){var c=[];for(var d=0;d<b.data.length;d++){var e=b.data[d];e&&c.push({row:e.line-1,column:e.character-1,text:e.reason,type:"warning",lint:e})}a.setAnnotations(c)}),c.on("narcissus",function(b){a.setAnnotations([b.data])}),c.on("terminate",function(){a.clearAnnotations()});return c}}.call(l.prototype),b.Mode=l}),define("ace/mode/javascript_highlight_rules",["require","exports","module","pilot/oop","pilot/lang","ace/unicode","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(a,b,c){var d=a("pilot/oop"),e=a("pilot/lang"),f=a("ace/unicode"),g=a("ace/mode/doc_comment_highlight_rules").DocCommentHighlightRules,h=a("ace/mode/text_highlight_rules").TextHighlightRules,i=function(){var a=e.arrayToMap("break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|const|yield|import|get|set".split("|")),b=e.arrayToMap("null|Infinity|NaN|undefined".split("|")),c=e.arrayToMap("class|enum|extends|super|export|implements|private|public|interface|package|protected|static".split("|")),d="["+f.packages.L+"\\$_]["+f.packages.L+f.packages.Mn+f.packages.Mc+f.packages.Nd+f.packages.Pc+"\\$_]*\\b";this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},(new g).getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",merge:!0,regex:'["].*\\\\$',next:"qqstring"},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"string",merge:!0,regex:"['].*\\\\$",next:"qstring"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:function(d){return d=="this"?"variable.language":a.hasOwnProperty(d)?"keyword":b.hasOwnProperty(d)?"constant.language":c.hasOwnProperty(d)?"invalid.illegal":d=="debugger"?"invalid.deprecated":"identifier"},regex:d},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)",next:"regex_allowed"},{token:"lparen",regex:"[[({]",next:"regex_allowed"},{token:"rparen",regex:"[\\])}]"},{token:"keyword.operator",regex:"\\/=?",next:"regex_allowed"},{token:"comment",regex:"^#!.*$"},{token:"text",regex:"\\s+"}],regex_allowed:[{token:"string.regexp",regex:"\\/(?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*",next:"start"},{token:"text",regex:"\\s+"},{token:"empty",regex:"",next:"start"}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"string",regex:'(?:(?:\\\\.)|(?:[^"\\\\]))*?"',next:"start"},{token:"string",merge:!0,regex:".+"}],qstring:[{token:"string",regex:"(?:(?:\\\\.)|(?:[^'\\\\]))*?'",next:"start"},{token:"string",merge:!0,regex:".+"}]},this.embedRules(g,"doc-",[(new g).getEndRule("start")])};d.inherits(i,h),b.JavaScriptHighlightRules=i}),define("ace/mode/doc_comment_highlight_rules",["require","exports","module","pilot/oop","ace/mode/text_highlight_rules"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/text_highlight_rules").TextHighlightRules,f=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};d.inherits(f,e),function(){this.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},this.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}}}.call(f.prototype),b.DocCommentHighlightRules=f}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(a,b,c){var d=a("ace/range").Range,e=function(){};(function(){this.checkOutdent=function(a,b){return/^\s+$/.test(a)?/^\s*\}/.test(b):!1},this.autoOutdent=function(a,b){var c=a.getLine(b),e=c.match(/^(\s*\})/);if(!e)return 0;var f=e[1].length,g=a.findMatchingBracket({row:b,column:f});if(!g||g.row==b)return 0;var h=this.$getIndent(a.getLine(g.row));a.replace(new d(b,0,b,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""}}).call(e.prototype),b.MatchingBraceOutdent=e}),define("ace/worker/worker_client",["require","exports","module","pilot/oop","pilot/event_emitter"],function(a,b,c){var d=a("pilot/oop"),e=a("pilot/event_emitter").EventEmitter,f=function(b,c,d,e){this.callbacks=[];if(a.packaged)var f=this.$guessBasePath(),g=this.$worker=new Worker(f+c);else{var h=this.$normalizePath(a.nameToUrl("ace/worker/worker",null,"_")),g=this.$worker=new Worker(h),i={};for(var j=0;j<b.length;j++){var k=b[j],l=this.$normalizePath(a.nameToUrl(k,null,"_").replace(/.js$/,""));i[k]=l}}this.$worker.postMessage({init:!0,tlns:i,module:d,classname:e}),this.callbackId=1,this.callbacks={};var m=this;this.$worker.onerror=function(a){window.console&&console.log&&console.log(a);throw a},this.$worker.onmessage=function(a){var b=a.data;switch(b.type){case"log":window.console&&console.log&&console.log(b.data);break;case"event":m._dispatchEvent(b.name,{data:b.data});break;case"call":var c=m.callbacks[b.id];c&&(c(b.data),delete m.callbacks[b.id])}}};(function(){d.implement(this,e),this.$normalizePath=function(a){a.match(/^\w+:/)||(a=location.protocol+"//"+location.host+location.pathname+"/"+a);return a},this.$guessBasePath=function(){if(a.aceBaseUrl)return a.aceBaseUrl;var b=document.getElementsByTagName("script");for(var c=0;c<b.length;c++){var d=b[c],e=d.getAttribute("data-ace-base");if(e)return e.replace(/\/*$/,"/");var f=d.src||d.getAttribute("src");if(!f)continue;var g=f.match(/^(?:(.*\/)ace\.js|(.*\/)ace-uncompressed\.js)(?:\?|$)/);if(g)return g[1]||g[2]}return""},this.terminate=function(){this._dispatchEvent("terminate",{}),this.$worker.terminate()},this.send=function(a,b){this.$worker.postMessage({command:a,args:b})},this.call=function(a,b,c){if(c){var d=this.callbackId++;this.callbacks[d]=c,b.push(d)}this.send(a,b)},this.emit=function(a,b){this.$worker.postMessage({event:a,data:b})}}).call(f.prototype),b.WorkerClient=f}),define("ace/mode/behaviour/cstyle",["require","exports","module","pilot/oop","ace/mode/behaviour"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/behaviour").Behaviour,f=function(){this.add("braces","insertion",function(a,b,c,d,e){if(e=="{"){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"{"+g+"}",selection:!1}:{text:"{}",selection:[1,1]}}if(e=="}"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var k=d.$findOpeningBracket("}",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}else if(e=="\n"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var l=d.findMatchingBracket({row:h.row,column:h.column+1});if(!l)return!1;var m=this.getNextLineIndent(a,i.substring(0,i.length-1),d.getTabString()),n=this.$getIndent(d.doc.getLine(l.row));return{text:"\n"+m+"\n"+n,selection:[1,m.length,1,m.length]}}}return!1}),this.add("braces","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="{"){var g=d.doc.getLine(e.start.row),h=g.substring(e.end.column,e.end.column+1);if(h=="}"){e.end.column++;return e}}return!1}),this.add("parens","insertion",function(a,b,c,d,e){if(e=="("){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"("+g+")",selection:!1}:{text:"()",selection:[1,1]}}if(e==")"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j==")"){var k=d.$findOpeningBracket(")",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}return!1}),this.add("parens","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="("){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h==")"){e.end.column++;return e}}return!1}),this.add("string_dquotes","insertion",function(a,b,c,d,e){if(e=='"'){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);if(g!=="")return{text:'"'+g+'"',selection:!1};var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column-1,h.column);if(j=="\\")return!1;var k=d.getTokens(f.start.row,f.start.row)[0].tokens,l=0,m,n=-1;for(var o=0;o<k.length;o++){m=k[o],m.type=="string"?n=-1:n<0&&(n=m.value.indexOf('"'));if(m.value.length+l>f.start.column)break;l+=k[o].value.length}if(!m||n<0&&m.type!=="comment"&&(m.type!=="string"||f.start.column!==m.value.length+l-1&&m.value.lastIndexOf('"')===m.value.length-1))return{text:'""',selection:[1,1]};if(m&&m.type==="string"){var p=i.substring(h.column,h.column+1);if(p=='"')return{text:"",selection:[1,1]}}}return!1}),this.add("string_dquotes","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=='"'){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h=='"'){e.end.column++;return e}}return!1})};d.inherits(f,e),b.CstyleBehaviour=f}),define("ace/mode/groovy_highlight_rules",["require","exports","module","pilot/oop","pilot/lang","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(a,b,c){var d=a("pilot/oop"),e=a("pilot/lang"),f=a("ace/mode/doc_comment_highlight_rules").DocCommentHighlightRules,g=a("ace/mode/text_highlight_rules").TextHighlightRules,h=function(){var a=e.arrayToMap("assert|with|abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|def|float|native|super|while".split("|")),b=e.arrayToMap("null|Infinity|NaN|undefined".split("|")),c=e.arrayToMap("AbstractMethodError|AssertionError|ClassCircularityError|ClassFormatError|Deprecated|EnumConstantNotPresentException|ExceptionInInitializerError|IllegalAccessError|IllegalThreadStateException|InstantiationError|InternalError|NegativeArraySizeException|NoSuchFieldError|Override|Process|ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|SuppressWarnings|TypeNotPresentException|UnknownError|UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|InstantiationException|IndexOutOfBoundsException|ArrayIndexOutOfBoundsException|CloneNotSupportedException|NoSuchFieldException|IllegalArgumentException|NumberFormatException|SecurityException|Void|InheritableThreadLocal|IllegalStateException|InterruptedException|NoSuchMethodException|IllegalAccessException|UnsupportedOperationException|Enum|StrictMath|Package|Compiler|Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|Character|Boolean|StackTraceElement|Appendable|StringBuffer|Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|StackOverflowError|OutOfMemoryError|VirtualMachineError|ArrayStoreException|ClassCastException|LinkageError|NoClassDefFoundError|ClassNotFoundException|RuntimeException|Exception|ThreadDeath|Error|Throwable|System|ClassLoader|Cloneable|Class|CharSequence|Comparable|String|Object".split("|")),d=e.arrayToMap("".split("|"));this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},(new f).getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"string.regexp",regex:"[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:function(e){return e=="this"?"variable.language":a.hasOwnProperty(e)?"keyword":c.hasOwnProperty(e)?"support.function":d.hasOwnProperty(e)?"support.function":b.hasOwnProperty(e)?"constant.language":"identifier"},regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"\\?:|\\?\\.|\\*\\.|<=>|=~|==~|\\.@|\\*\\.@|\\.&|as|in|is|!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"},{token:"lparen",regex:"[[({]"},{token:"rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",merge:!0,regex:".+"}]},this.embedRules(f,"doc-",[(new f).getEndRule("start")])};d.inherits(h,g),b.GroovyHighlightRules=h}) \ No newline at end of file
+define("ace/mode/groovy",["require","exports","module","ace/lib/oop","ace/mode/javascript","ace/tokenizer","ace/mode/groovy_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./javascript").Mode,f=a("../tokenizer").Tokenizer,g=a("./groovy_highlight_rules").GroovyHighlightRules,h=function(){e.call(this),this.$tokenizer=new f((new g).getRules())};d.inherits(h,e),function(){this.createWorker=function(a){return null}}.call(h.prototype),b.Mode=h}),define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text").Mode,f=a("../tokenizer").Tokenizer,g=a("./javascript_highlight_rules").JavaScriptHighlightRules,h=a("./matching_brace_outdent").MatchingBraceOutdent,i=a("../range").Range,j=a("../worker/worker_client").WorkerClient,k=a("./behaviour/cstyle").CstyleBehaviour,l=a("./folding/cstyle").FoldMode,m=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h,this.$behaviour=new k,this.foldingRules=new l};d.inherits(m,e),function(){this.toggleCommentLines=function(a,b,c,d){var e=!0,f=/^(\s*)\/\//;for(var g=c;g<=d;g++)if(!f.test(b.getLine(g))){e=!1;break}if(e){var h=new i(0,0,0,0);for(var g=c;g<=d;g++){var j=b.getLine(g),k=j.match(f);h.start.row=g,h.end.row=g,h.end.column=k[0].length,b.replace(h,k[1])}}else b.indentRows(c,d,"//")},this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=this.$tokenizer.getLineTokens(b,a),f=e.tokens,g=e.state;if(f.length&&f[f.length-1].type=="comment")return d;if(a=="start"||a=="regex_allowed"){var h=b.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);h&&(d+=c)}else if(a=="doc-start"){if(g=="start"||a=="regex_allowed")return"";var h=b.match(/^\s*(\/?)\*/);h&&(h[1]&&(d+=" "),d+="* ")}return d},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)},this.createWorker=function(a){var b=new j(["ace"],"worker-javascript.js","ace/mode/javascript_worker","JavaScriptWorker");return b.attachToDocument(a.getDocument()),b.on("jslint",function(b){var c=[];for(var d=0;d<b.data.length;d++){var e=b.data[d];e&&c.push({row:e.line-1,column:e.character-1,text:e.reason,type:"warning",lint:e})}a.setAnnotations(c)}),b.on("narcissus",function(b){a.setAnnotations([b.data])}),b.on("terminate",function(){a.clearAnnotations()}),b}}.call(m.prototype),b.Mode=m}),define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/unicode","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("../lib/lang"),f=a("../unicode"),g=a("./doc_comment_highlight_rules").DocCommentHighlightRules,h=a("./text_highlight_rules").TextHighlightRules,i=function(){var a=e.arrayToMap("Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document".split("|")),b=e.arrayToMap("break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|const|yield|import|get|set".split("|")),c="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield",d=e.arrayToMap("__parent__|__count__|escape|unescape|with|__proto__".split("|")),h=e.arrayToMap("const|let|var|function".split("|")),i=e.arrayToMap("null|Infinity|NaN|undefined".split("|")),j=e.arrayToMap("class|enum|extends|super|export|implements|private|public|interface|package|protected|static".split("|")),k="["+f.packages.L+"\\$_]["+f.packages.L+f.packages.Mn+f.packages.Mc+f.packages.Nd+f.packages.Pc+"\\$_]*\\b";this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},(new g).getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",merge:!0,regex:'["].*\\\\$',next:"qqstring"},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"string",merge:!0,regex:"['].*\\\\$",next:"qstring"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:["keyword.definition","text","entity.name.function"],regex:"(function)(\\s+)("+k+")"},{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:"keyword",regex:"(?:"+c+")\\b",next:"regex_allowed"},{token:function(c){return a.hasOwnProperty(c)?"variable.language":d.hasOwnProperty(c)?"invalid.deprecated":h.hasOwnProperty(c)?"keyword.definition":b.hasOwnProperty(c)?"keyword":i.hasOwnProperty(c)?"constant.language":j.hasOwnProperty(c)?"invalid.illegal":c=="debugger"?"invalid.deprecated":"identifier"},regex:k},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)",next:"regex_allowed"},{token:"punctuation.operator",regex:"\\?|\\:|\\,|\\;|\\.",next:"regex_allowed"},{token:"paren.lparen",regex:"[[({]",next:"regex_allowed"},{token:"paren.rparen",regex:"[\\])}]"},{token:"keyword.operator",regex:"\\/=?",next:"regex_allowed"},{token:"comment",regex:"^#!.*$"},{token:"text",regex:"\\s+"}],regex_allowed:[{token:"comment",merge:!0,regex:"\\/\\*",next:"comment_regex_allowed"},{token:"comment",regex:"\\/\\/.*$"},{token:"string.regexp",regex:"\\/",next:"regex",merge:!0},{token:"text",regex:"\\s+"},{token:"empty",regex:"",next:"start"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)",next:"regex"},{token:"string.regexp",regex:"/\\w*",next:"start",merge:!0},{token:"string.regexp",regex:"[^\\\\/\\[]+",next:"regex",merge:!0},{token:"string.regexp.charachterclass",regex:"\\[",next:"regex_character_class",merge:!0},{token:"empty",regex:"",next:"start"}],regex_character_class:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)",next:"regex_character_class"},{token:"string.regexp.charachterclass",regex:"]",next:"regex",merge:!0},{token:"string.regexp.charachterclass",regex:"[^\\\\\\]]+",next:"regex_character_class",merge:!0},{token:"empty",regex:"",next:"start"}],comment_regex_allowed:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"regex_allowed"},{token:"comment",merge:!0,regex:".+"}],comment:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"string",regex:'(?:(?:\\\\.)|(?:[^"\\\\]))*?"',next:"start"},{token:"string",merge:!0,regex:".+"}],qstring:[{token:"string",regex:"(?:(?:\\\\.)|(?:[^'\\\\]))*?'",next:"start"},{token:"string",merge:!0,regex:".+"}]},this.embedRules(g,"doc-",[(new g).getEndRule("start")])};d.inherits(i,h),b.JavaScriptHighlightRules=i}),define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text_highlight_rules").TextHighlightRules,f=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};d.inherits(f,e),function(){this.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},this.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}}}.call(f.prototype),b.DocCommentHighlightRules=f}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(a,b,c){"use strict";var d=a("../range").Range,e=function(){};((function(){this.checkOutdent=function(a,b){return/^\s+$/.test(a)?/^\s*\}/.test(b):!1},this.autoOutdent=function(a,b){var c=a.getLine(b),e=c.match(/^(\s*\})/);if(!e)return 0;var f=e[1].length,g=a.findMatchingBracket({row:b,column:f});if(!g||g.row==b)return 0;var h=this.$getIndent(a.getLine(g.row));a.replace(new d(b,0,b,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""}})).call(e.prototype),b.MatchingBraceOutdent=e}),define("ace/worker/worker_client",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("../lib/event_emitter").EventEmitter,f=function(b,d,e,f){this.changeListener=this.changeListener.bind(this);if(c.packaged){var g=this.$guessBasePath();this.$worker=new Worker(g+d)}else{var h=this.$normalizePath(a.nameToUrl("ace/worker/worker",null,"_"));this.$worker=new Worker(h);var i={};for(var j=0;j<b.length;j++){var k=b[j],l=this.$normalizePath(a.nameToUrl(k,null,"_").replace(/.js$/,""));i[k]=l}}this.$worker.postMessage({init:!0,tlns:i,module:e,classname:f}),this.callbackId=1,this.callbacks={};var m=this;this.$worker.onerror=function(a){throw window.console&&console.log&&console.log(a),a},this.$worker.onmessage=function(a){var b=a.data;switch(b.type){case"log":window.console&&console.log&&console.log(b.data);break;case"event":m._emit(b.name,{data:b.data});break;case"call":var c=m.callbacks[b.id];c&&(c(b.data),delete m.callbacks[b.id])}}};((function(){d.implement(this,e),this.$normalizePath=function(a){return a=a.replace(/^[a-z]+:\/\/[^\/]+\//,""),a=location.protocol+"//"+location.host+(a.charAt(0)=="/"?"":location.pathname.replace(/\/[^\/]*$/,""))+"/"+a.replace(/^[\/]+/,""),a},this.$guessBasePath=function(){if(a.aceBaseUrl)return a.aceBaseUrl;var b=document.getElementsByTagName("script");for(var c=0;c<b.length;c++){var d=b[c],e=d.getAttribute("data-ace-base");if(e)return e.replace(/\/*$/,"/");var f=d.src||d.getAttribute("src");if(!f)continue;var g=f.match(/^(?:(.*\/)ace\.js|(.*\/)ace(-uncompressed)?(-noconflict)?\.js)(?:\?|$)/);if(g)return g[1]||g[2]}return""},this.terminate=function(){this._emit("terminate",{}),this.$worker.terminate(),this.$worker=null,this.$doc.removeEventListener("change",this.changeListener),this.$doc=null},this.send=function(a,b){this.$worker.postMessage({command:a,args:b})},this.call=function(a,b,c){if(c){var d=this.callbackId++;this.callbacks[d]=c,b.push(d)}this.send(a,b)},this.emit=function(a,b){try{this.$worker.postMessage({event:a,data:{data:b.data}})}catch(c){}},this.attachToDocument=function(a){this.$doc&&this.terminate(),this.$doc=a,this.call("setValue",[a.getValue()]),a.on("change",this.changeListener)},this.changeListener=function(a){a.range={start:a.data.range.start,end:a.data.range.end},this.emit("change",a)}})).call(f.prototype),b.WorkerClient=f}),define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("../behaviour").Behaviour,f=function(){this.add("braces","insertion",function(a,b,c,d,e){if(e=="{"){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"{"+g+"}",selection:!1}:{text:"{}",selection:[1,1]}}if(e=="}"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var k=d.$findOpeningBracket("}",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}else if(e=="\n"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var l=d.findMatchingBracket({row:h.row,column:h.column+1});if(!l)return null;var m=this.getNextLineIndent(a,i.substring(0,i.length-1),d.getTabString()),n=this.$getIndent(d.doc.getLine(l.row));return{text:"\n"+m+"\n"+n,selection:[1,m.length,1,m.length]}}}}),this.add("braces","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="{"){var g=d.doc.getLine(e.start.row),h=g.substring(e.end.column,e.end.column+1);if(h=="}")return e.end.column++,e}}),this.add("parens","insertion",function(a,b,c,d,e){if(e=="("){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"("+g+")",selection:!1}:{text:"()",selection:[1,1]}}if(e==")"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j==")"){var k=d.$findOpeningBracket(")",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="("){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h==")")return e.end.column++,e}}),this.add("string_dquotes","insertion",function(a,b,c,d,e){if(e=='"'){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);if(g!=="")return{text:'"'+g+'"',selection:!1};var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column-1,h.column);if(j=="\\")return null;var k=d.getTokens(f.start.row,f.start.row)[0].tokens,l=0,m,n=-1;for(var o=0;o<k.length;o++){m=k[o],m.type=="string"?n=-1:n<0&&(n=m.value.indexOf('"'));if(m.value.length+l>f.start.column)break;l+=k[o].value.length}if(!m||n<0&&m.type!=="comment"&&(m.type!=="string"||f.start.column!==m.value.length+l-1&&m.value.lastIndexOf('"')===m.value.length-1))return{text:'""',selection:[1,1]};if(m&&m.type==="string"){var p=i.substring(h.column,h.column+1);if(p=='"')return{text:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=='"'){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h=='"')return e.end.column++,e}})};d.inherits(f,e),b.CstyleBehaviour=f}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("../../range").Range,f=a("./fold_mode").FoldMode,g=b.FoldMode=function(){};d.inherits(g,f),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(a,b,c){var d=a.getLine(c),f=d.match(this.foldingStartMarker);if(f){var g=f.index;if(f[1])return this.openingBracketBlock(a,f[1],c,g);var h=a.getCommentFoldRange(c,g+f[0].length);return h.end.column-=2,h}if(b!=="markbeginend")return;var f=d.match(this.foldingStopMarker);if(f){var g=f.index+f[0].length;if(f[2]){var h=a.getCommentFoldRange(c,g);return h.end.column-=2,h}var i={row:c,column:g},j=a.$findOpeningBracket(f[1],i);if(!j)return;return j.column++,i.column--,e.fromPoints(j,i)}}}.call(g.prototype)}),define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"],function(a,b,c){"use strict";var d=a("../../range").Range,e=b.FoldMode=function(){};((function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(a,b,c){var d=a.getLine(c);return this.foldingStartMarker.test(d)?"start":b=="markbeginend"&&this.foldingStopMarker&&this.foldingStopMarker.test(d)?"end":""},this.getFoldWidgetRange=function(a,b,c){return null},this.indentationBlock=function(a,b,c){var e=/^\s*/,f=b,g=b,h=a.getLine(b),i=c||h.length,j=h.match(e)[0].length,k=a.getLength();while(++b<k){h=a.getLine(b);var l=h.match(e)[0].length;if(l==h.length)continue;if(l<=j)break;g=b}if(g>f){var m=a.getLine(g).length;return new d(f,i,g,m)}},this.openingBracketBlock=function(a,b,c,e){var f={row:c,column:e+1},g=a.$findClosingBracket(b,f);if(!g)return;var h=a.foldWidgets[g.row];return h==null&&(h=this.getFoldWidget(a,g.row)),h=="start"&&(g.row--,g.column=a.getLine(g.row).length),d.fromPoints(f,g)}})).call(e.prototype)}),define("ace/mode/groovy_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("../lib/lang"),f=a("./doc_comment_highlight_rules").DocCommentHighlightRules,g=a("./text_highlight_rules").TextHighlightRules,h=function(){var a=e.arrayToMap("assert|with|abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|def|float|native|super|while".split("|")),b=e.arrayToMap("null|Infinity|NaN|undefined".split("|")),c=e.arrayToMap("AbstractMethodError|AssertionError|ClassCircularityError|ClassFormatError|Deprecated|EnumConstantNotPresentException|ExceptionInInitializerError|IllegalAccessError|IllegalThreadStateException|InstantiationError|InternalError|NegativeArraySizeException|NoSuchFieldError|Override|Process|ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|SuppressWarnings|TypeNotPresentException|UnknownError|UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|InstantiationException|IndexOutOfBoundsException|ArrayIndexOutOfBoundsException|CloneNotSupportedException|NoSuchFieldException|IllegalArgumentException|NumberFormatException|SecurityException|Void|InheritableThreadLocal|IllegalStateException|InterruptedException|NoSuchMethodException|IllegalAccessException|UnsupportedOperationException|Enum|StrictMath|Package|Compiler|Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|Character|Boolean|StackTraceElement|Appendable|StringBuffer|Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|StackOverflowError|OutOfMemoryError|VirtualMachineError|ArrayStoreException|ClassCastException|LinkageError|NoClassDefFoundError|ClassNotFoundException|RuntimeException|Exception|ThreadDeath|Error|Throwable|System|ClassLoader|Cloneable|Class|CharSequence|Comparable|String|Object".split("|")),d=e.arrayToMap("".split("|"));this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},(new f).getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"string.regexp",regex:"[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:function(e){return e=="this"?"variable.language":a.hasOwnProperty(e)?"keyword":c.hasOwnProperty(e)?"support.function":d.hasOwnProperty(e)?"support.function":b.hasOwnProperty(e)?"constant.language":"identifier"},regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"\\?:|\\?\\.|\\*\\.|<=>|=~|==~|\\.@|\\*\\.@|\\.&|as|in|is|!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"},{token:"lparen",regex:"[[({]"},{token:"rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",merge:!0,regex:".+"}]},this.embedRules(f,"doc-",[(new f).getEndRule("start")])};d.inherits(h,g),b.GroovyHighlightRules=h}),function(){window.require(["ace/ace"],function(a){window.ace||(window.ace={});for(var b in a)a.hasOwnProperty(b)&&(ace[b]=a[b])})}() \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-haxe-uncompressed.js b/apps/files_texteditor/js/aceeditor/mode-haxe-uncompressed.js
new file mode 100755
index 00000000000..5496580ed33
--- /dev/null
+++ b/apps/files_texteditor/js/aceeditor/mode-haxe-uncompressed.js
@@ -0,0 +1,778 @@
+define('ace/mode/haxe', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/haxe_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/mode/behaviour/cstyle', 'ace/mode/folding/cstyle'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextMode = require("./text").Mode;
+var Tokenizer = require("../tokenizer").Tokenizer;
+var HaxeHighlightRules = require("./haxe_highlight_rules").HaxeHighlightRules;
+var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
+var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
+var CStyleFoldMode = require("./folding/cstyle").FoldMode;
+
+var Mode = function() {
+ this.$tokenizer = new Tokenizer(new HaxeHighlightRules().getRules());
+ this.$outdent = new MatchingBraceOutdent();
+ this.$behaviour = new CstyleBehaviour();
+ this.foldingRules = new CStyleFoldMode();
+};
+oop.inherits(Mode, TextMode);
+
+(function() {
+
+ this.getNextLineIndent = function(state, line, tab) {
+ var indent = this.$getIndent(line);
+
+ var tokenizedLine = this.$tokenizer.getLineTokens(line, state);
+ var tokens = tokenizedLine.tokens;
+
+ if (tokens.length && tokens[tokens.length-1].type == "comment") {
+ return indent;
+ }
+
+ if (state == "start") {
+ var match = line.match(/^.*[\{\(\[]\s*$/);
+ if (match) {
+ indent += tab;
+ }
+ }
+
+ return indent;
+ };
+
+ this.checkOutdent = function(state, line, input) {
+ return this.$outdent.checkOutdent(line, input);
+ };
+
+ this.autoOutdent = function(state, doc, row) {
+ this.$outdent.autoOutdent(doc, row);
+ };
+
+
+ this.createWorker = function(session) {
+ return null;
+ };
+
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+});
+define('ace/mode/haxe_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/mode/doc_comment_highlight_rules', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var lang = require("../lib/lang");
+var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var HaxeHighlightRules = function() {
+
+ var keywords = lang.arrayToMap(
+ ("break|case|cast|catch|class|continue|default|else|enum|extends|for|function|if|implements|import|in|inline|interface|new|override|package|private|public|return|static|super|switch|this|throw|trace|try|typedef|untyped|var|while|Array|Void|Bool|Int|UInt|Float|Dynamic|String|List|Hash|IntHash|Error|Unknown|Type|Std").split("|")
+ );
+
+ var buildinConstants = lang.arrayToMap(
+ ("null|true|false").split("|")
+ );
+
+
+ // regexp must not have capturing parentheses. Use (?:) instead.
+ // regexps are ordered -> the first match is used
+
+ this.$rules = {
+ "start" : [
+ {
+ token : "comment",
+ regex : "\\/\\/.*$"
+ },
+ new DocCommentHighlightRules().getStartRule("doc-start"),
+ {
+ token : "comment", // multi line comment
+ regex : "\\/\\*",
+ merge : true,
+ next : "comment"
+ }, {
+ token : "string.regexp",
+ regex : "[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)"
+ }, {
+ token : "string", // single line
+ regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
+ }, {
+ token : "string", // single line
+ regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
+ }, {
+ token : "constant.numeric", // hex
+ regex : "0[xX][0-9a-fA-F]+\\b"
+ }, {
+ token : "constant.numeric", // float
+ regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
+ }, {
+ token : "constant.language.boolean",
+ regex : "(?:true|false)\\b"
+ }, {
+ token : function(value) {
+ if (value == "this")
+ return "variable.language";
+ else if (keywords.hasOwnProperty(value))
+ return "keyword";
+ else if (buildinConstants.hasOwnProperty(value))
+ return "constant.language";
+ else
+ return "identifier";
+ },
+ // TODO: Unicode escape sequences
+ // TODO: Unicode identifiers
+ regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
+ }, {
+ token : "keyword.operator",
+ regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"
+ }, {
+ token : "punctuation.operator",
+ regex : "\\?|\\:|\\,|\\;|\\."
+ }, {
+ token : "paren.lparen",
+ regex : "[[({<]"
+ }, {
+ token : "paren.rparen",
+ regex : "[\\])}>]"
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }
+ ],
+ "comment" : [
+ {
+ token : "comment", // closing comment
+ regex : ".*?\\*\\/",
+ next : "start"
+ }, {
+ token : "comment", // comment spanning whole line
+ merge : true,
+ regex : ".+"
+ }
+ ]
+ };
+
+ this.embedRules(DocCommentHighlightRules, "doc-",
+ [ new DocCommentHighlightRules().getEndRule("start") ]);
+};
+
+oop.inherits(HaxeHighlightRules, TextHighlightRules);
+
+exports.HaxeHighlightRules = HaxeHighlightRules;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/doc_comment_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var DocCommentHighlightRules = function() {
+
+ this.$rules = {
+ "start" : [ {
+ token : "comment.doc.tag",
+ regex : "@[\\w\\d_]+" // TODO: fix email addresses
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "\\s+"
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "TODO"
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "[^@\\*]+"
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "."
+ }]
+ };
+};
+
+oop.inherits(DocCommentHighlightRules, TextHighlightRules);
+
+(function() {
+
+ this.getStartRule = function(start) {
+ return {
+ token : "comment.doc", // doc comment
+ merge : true,
+ regex : "\\/\\*(?=\\*)",
+ next : start
+ };
+ };
+
+ this.getEndRule = function (start) {
+ return {
+ token : "comment.doc", // closing comment
+ merge : true,
+ regex : "\\*\\/",
+ next : start
+ };
+ };
+
+}).call(DocCommentHighlightRules.prototype);
+
+exports.DocCommentHighlightRules = DocCommentHighlightRules;
+
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var Range = require("../range").Range;
+
+var MatchingBraceOutdent = function() {};
+
+(function() {
+
+ this.checkOutdent = function(line, input) {
+ if (! /^\s+$/.test(line))
+ return false;
+
+ return /^\s*\}/.test(input);
+ };
+
+ this.autoOutdent = function(doc, row) {
+ var line = doc.getLine(row);
+ var match = line.match(/^(\s*\})/);
+
+ if (!match) return 0;
+
+ var column = match[1].length;
+ var openBracePos = doc.findMatchingBracket({row: row, column: column});
+
+ if (!openBracePos || openBracePos.row == row) return 0;
+
+ var indent = this.$getIndent(doc.getLine(openBracePos.row));
+ doc.replace(new Range(row, 0, row, column-1), indent);
+ };
+
+ this.$getIndent = function(line) {
+ var match = line.match(/^(\s+)/);
+ if (match) {
+ return match[1];
+ }
+
+ return "";
+ };
+
+}).call(MatchingBraceOutdent.prototype);
+
+exports.MatchingBraceOutdent = MatchingBraceOutdent;
+});
+/* vim:ts=4:sts=4:sw=4:
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Chris Spencer <chris.ag.spencer AT googlemail DOT com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/behaviour/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var Behaviour = require('../behaviour').Behaviour;
+
+var CstyleBehaviour = function () {
+
+ this.add("braces", "insertion", function (state, action, editor, session, text) {
+ if (text == '{') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '{' + selected + '}',
+ selection: false
+ }
+ } else {
+ return {
+ text: '{}',
+ selection: [1, 1]
+ }
+ }
+ } else if (text == '}') {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '}') {
+ var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});
+ if (matching !== null) {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ } else if (text == "\n") {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '}') {
+ var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column + 1});
+ if (!openBracePos)
+ return null;
+
+ var indent = this.getNextLineIndent(state, line.substring(0, line.length - 1), session.getTabString());
+ var next_indent = this.$getIndent(session.doc.getLine(openBracePos.row));
+
+ return {
+ text: '\n' + indent + '\n' + next_indent,
+ selection: [1, indent.length, 1, indent.length]
+ }
+ }
+ }
+ });
+
+ this.add("braces", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '{') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.end.column, range.end.column + 1);
+ if (rightChar == '}') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+ this.add("parens", "insertion", function (state, action, editor, session, text) {
+ if (text == '(') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '(' + selected + ')',
+ selection: false
+ }
+ } else {
+ return {
+ text: '()',
+ selection: [1, 1]
+ }
+ }
+ } else if (text == ')') {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == ')') {
+ var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});
+ if (matching !== null) {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ }
+ });
+
+ this.add("parens", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '(') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
+ if (rightChar == ')') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+ this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {
+ if (text == '"') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '"' + selected + '"',
+ selection: false
+ }
+ } else {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var leftChar = line.substring(cursor.column-1, cursor.column);
+
+ // We're escaped.
+ if (leftChar == '\\') {
+ return null;
+ }
+
+ // Find what token we're inside.
+ var tokens = session.getTokens(selection.start.row, selection.start.row)[0].tokens;
+ var col = 0, token;
+ var quotepos = -1; // Track whether we're inside an open quote.
+
+ for (var x = 0; x < tokens.length; x++) {
+ token = tokens[x];
+ if (token.type == "string") {
+ quotepos = -1;
+ } else if (quotepos < 0) {
+ quotepos = token.value.indexOf('"');
+ }
+ if ((token.value.length + col) > selection.start.column) {
+ break;
+ }
+ col += tokens[x].value.length;
+ }
+
+ // Try and be smart about when we auto insert.
+ if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf('"') === token.value.length-1)))) {
+ return {
+ text: '""',
+ selection: [1,1]
+ }
+ } else if (token && token.type === "string") {
+ // Ignore input and move right one if we're typing over the closing quote.
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '"') {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ }
+ }
+ });
+
+ this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '"') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
+ if (rightChar == '"') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+}
+oop.inherits(CstyleBehaviour, Behaviour);
+
+exports.CstyleBehaviour = CstyleBehaviour;
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var Range = require("../../range").Range;
+var BaseFoldMode = require("./fold_mode").FoldMode;
+
+var FoldMode = exports.FoldMode = function() {};
+oop.inherits(FoldMode, BaseFoldMode);
+
+(function() {
+
+ this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
+ this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ var line = session.getLine(row);
+ var match = line.match(this.foldingStartMarker);
+ if (match) {
+ var i = match.index;
+
+ if (match[1])
+ return this.openingBracketBlock(session, match[1], row, i);
+
+ var range = session.getCommentFoldRange(row, i + match[0].length);
+ range.end.column -= 2;
+ return range;
+ }
+
+ if (foldStyle !== "markbeginend")
+ return;
+
+ var match = line.match(this.foldingStopMarker);
+ if (match) {
+ var i = match.index + match[0].length;
+
+ if (match[2]) {
+ var range = session.getCommentFoldRange(row, i);
+ range.end.column -= 2;
+ return range;
+ }
+
+ var end = {row: row, column: i};
+ var start = session.$findOpeningBracket(match[1], end);
+
+ if (!start)
+ return;
+
+ start.column++;
+ end.column--;
+
+ return Range.fromPoints(start, end);
+ }
+ };
+
+}).call(FoldMode.prototype);
+
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/fold_mode', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var Range = require("../../range").Range;
+
+var FoldMode = exports.FoldMode = function() {};
+
+(function() {
+
+ this.foldingStartMarker = null;
+ this.foldingStopMarker = null;
+
+ // must return "" if there's no fold, to enable caching
+ this.getFoldWidget = function(session, foldStyle, row) {
+ var line = session.getLine(row);
+ if (this.foldingStartMarker.test(line))
+ return "start";
+ if (foldStyle == "markbeginend"
+ && this.foldingStopMarker
+ && this.foldingStopMarker.test(line))
+ return "end";
+ return "";
+ };
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ return null;
+ };
+
+ this.indentationBlock = function(session, row, column) {
+ var re = /^\s*/;
+ var startRow = row;
+ var endRow = row;
+ var line = session.getLine(row);
+ var startColumn = column || line.length;
+ var startLevel = line.match(re)[0].length;
+ var maxRow = session.getLength()
+
+ while (++row < maxRow) {
+ line = session.getLine(row);
+ var level = line.match(re)[0].length;
+
+ if (level == line.length)
+ continue;
+
+ if (level <= startLevel)
+ break;
+
+ endRow = row;
+ }
+
+ if (endRow > startRow) {
+ var endColumn = session.getLine(endRow).length;
+ return new Range(startRow, startColumn, endRow, endColumn);
+ }
+ };
+
+ this.openingBracketBlock = function(session, bracket, row, column) {
+ var start = {row: row, column: column + 1};
+ var end = session.$findClosingBracket(bracket, start);
+ if (!end)
+ return;
+
+ var fw = session.foldWidgets[end.row];
+ if (fw == null)
+ fw = this.getFoldWidget(session, end.row);
+
+ if (fw == "start") {
+ end.row --;
+ end.column = session.getLine(end.row).length;
+ }
+ return Range.fromPoints(start, end);
+ };
+
+}).call(FoldMode.prototype);
+
+});
+;
+ (function() {
+ window.require(["ace/ace"], function(a) {
+ if (!window.ace)
+ window.ace = {};
+ for (var key in a) if (a.hasOwnProperty(key))
+ ace[key] = a[key];
+ });
+ })();
+ \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-haxe.js b/apps/files_texteditor/js/aceeditor/mode-haxe.js
new file mode 100755
index 00000000000..88818b1371a
--- /dev/null
+++ b/apps/files_texteditor/js/aceeditor/mode-haxe.js
@@ -0,0 +1 @@
+define("ace/mode/haxe",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/haxe_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text").Mode,f=a("../tokenizer").Tokenizer,g=a("./haxe_highlight_rules").HaxeHighlightRules,h=a("./matching_brace_outdent").MatchingBraceOutdent,i=a("./behaviour/cstyle").CstyleBehaviour,j=a("./folding/cstyle").FoldMode,k=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h,this.$behaviour=new i,this.foldingRules=new j};d.inherits(k,e),function(){this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=this.$tokenizer.getLineTokens(b,a),f=e.tokens;if(f.length&&f[f.length-1].type=="comment")return d;if(a=="start"){var g=b.match(/^.*[\{\(\[]\s*$/);g&&(d+=c)}return d},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)},this.createWorker=function(a){return null}}.call(k.prototype),b.Mode=k}),define("ace/mode/haxe_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("../lib/lang"),f=a("./doc_comment_highlight_rules").DocCommentHighlightRules,g=a("./text_highlight_rules").TextHighlightRules,h=function(){var a=e.arrayToMap("break|case|cast|catch|class|continue|default|else|enum|extends|for|function|if|implements|import|in|inline|interface|new|override|package|private|public|return|static|super|switch|this|throw|trace|try|typedef|untyped|var|while|Array|Void|Bool|Int|UInt|Float|Dynamic|String|List|Hash|IntHash|Error|Unknown|Type|Std".split("|")),b=e.arrayToMap("null|true|false".split("|"));this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},(new f).getStartRule("doc-start"),{token:"comment",regex:"\\/\\*",merge:!0,next:"comment"},{token:"string.regexp",regex:"[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:function(c){return c=="this"?"variable.language":a.hasOwnProperty(c)?"keyword":b.hasOwnProperty(c)?"constant.language":"identifier"},regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"},{token:"punctuation.operator",regex:"\\?|\\:|\\,|\\;|\\."},{token:"paren.lparen",regex:"[[({<]"},{token:"paren.rparen",regex:"[\\])}>]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",merge:!0,regex:".+"}]},this.embedRules(f,"doc-",[(new f).getEndRule("start")])};d.inherits(h,g),b.HaxeHighlightRules=h}),define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text_highlight_rules").TextHighlightRules,f=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};d.inherits(f,e),function(){this.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},this.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}}}.call(f.prototype),b.DocCommentHighlightRules=f}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(a,b,c){"use strict";var d=a("../range").Range,e=function(){};((function(){this.checkOutdent=function(a,b){return/^\s+$/.test(a)?/^\s*\}/.test(b):!1},this.autoOutdent=function(a,b){var c=a.getLine(b),e=c.match(/^(\s*\})/);if(!e)return 0;var f=e[1].length,g=a.findMatchingBracket({row:b,column:f});if(!g||g.row==b)return 0;var h=this.$getIndent(a.getLine(g.row));a.replace(new d(b,0,b,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""}})).call(e.prototype),b.MatchingBraceOutdent=e}),define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("../behaviour").Behaviour,f=function(){this.add("braces","insertion",function(a,b,c,d,e){if(e=="{"){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"{"+g+"}",selection:!1}:{text:"{}",selection:[1,1]}}if(e=="}"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var k=d.$findOpeningBracket("}",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}else if(e=="\n"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var l=d.findMatchingBracket({row:h.row,column:h.column+1});if(!l)return null;var m=this.getNextLineIndent(a,i.substring(0,i.length-1),d.getTabString()),n=this.$getIndent(d.doc.getLine(l.row));return{text:"\n"+m+"\n"+n,selection:[1,m.length,1,m.length]}}}}),this.add("braces","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="{"){var g=d.doc.getLine(e.start.row),h=g.substring(e.end.column,e.end.column+1);if(h=="}")return e.end.column++,e}}),this.add("parens","insertion",function(a,b,c,d,e){if(e=="("){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"("+g+")",selection:!1}:{text:"()",selection:[1,1]}}if(e==")"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j==")"){var k=d.$findOpeningBracket(")",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="("){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h==")")return e.end.column++,e}}),this.add("string_dquotes","insertion",function(a,b,c,d,e){if(e=='"'){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);if(g!=="")return{text:'"'+g+'"',selection:!1};var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column-1,h.column);if(j=="\\")return null;var k=d.getTokens(f.start.row,f.start.row)[0].tokens,l=0,m,n=-1;for(var o=0;o<k.length;o++){m=k[o],m.type=="string"?n=-1:n<0&&(n=m.value.indexOf('"'));if(m.value.length+l>f.start.column)break;l+=k[o].value.length}if(!m||n<0&&m.type!=="comment"&&(m.type!=="string"||f.start.column!==m.value.length+l-1&&m.value.lastIndexOf('"')===m.value.length-1))return{text:'""',selection:[1,1]};if(m&&m.type==="string"){var p=i.substring(h.column,h.column+1);if(p=='"')return{text:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=='"'){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h=='"')return e.end.column++,e}})};d.inherits(f,e),b.CstyleBehaviour=f}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("../../range").Range,f=a("./fold_mode").FoldMode,g=b.FoldMode=function(){};d.inherits(g,f),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(a,b,c){var d=a.getLine(c),f=d.match(this.foldingStartMarker);if(f){var g=f.index;if(f[1])return this.openingBracketBlock(a,f[1],c,g);var h=a.getCommentFoldRange(c,g+f[0].length);return h.end.column-=2,h}if(b!=="markbeginend")return;var f=d.match(this.foldingStopMarker);if(f){var g=f.index+f[0].length;if(f[2]){var h=a.getCommentFoldRange(c,g);return h.end.column-=2,h}var i={row:c,column:g},j=a.$findOpeningBracket(f[1],i);if(!j)return;return j.column++,i.column--,e.fromPoints(j,i)}}}.call(g.prototype)}),define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"],function(a,b,c){"use strict";var d=a("../../range").Range,e=b.FoldMode=function(){};((function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(a,b,c){var d=a.getLine(c);return this.foldingStartMarker.test(d)?"start":b=="markbeginend"&&this.foldingStopMarker&&this.foldingStopMarker.test(d)?"end":""},this.getFoldWidgetRange=function(a,b,c){return null},this.indentationBlock=function(a,b,c){var e=/^\s*/,f=b,g=b,h=a.getLine(b),i=c||h.length,j=h.match(e)[0].length,k=a.getLength();while(++b<k){h=a.getLine(b);var l=h.match(e)[0].length;if(l==h.length)continue;if(l<=j)break;g=b}if(g>f){var m=a.getLine(g).length;return new d(f,i,g,m)}},this.openingBracketBlock=function(a,b,c,e){var f={row:c,column:e+1},g=a.$findClosingBracket(b,f);if(!g)return;var h=a.foldWidgets[g.row];return h==null&&(h=this.getFoldWidget(a,g.row)),h=="start"&&(g.row--,g.column=a.getLine(g.row).length),d.fromPoints(f,g)}})).call(e.prototype)}),function(){window.require(["ace/ace"],function(a){window.ace||(window.ace={});for(var b in a)a.hasOwnProperty(b)&&(ace[b]=a[b])})}() \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-html-uncompressed.js b/apps/files_texteditor/js/aceeditor/mode-html-uncompressed.js
new file mode 100755
index 00000000000..e994e2e06ef
--- /dev/null
+++ b/apps/files_texteditor/js/aceeditor/mode-html-uncompressed.js
@@ -0,0 +1,2558 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/html', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/mode/javascript', 'ace/mode/css', 'ace/tokenizer', 'ace/mode/html_highlight_rules', 'ace/mode/behaviour/xml', 'ace/mode/folding/html'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextMode = require("./text").Mode;
+var JavaScriptMode = require("./javascript").Mode;
+var CssMode = require("./css").Mode;
+var Tokenizer = require("../tokenizer").Tokenizer;
+var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules;
+var XmlBehaviour = require("./behaviour/xml").XmlBehaviour;
+var HtmlFoldMode = require("./folding/html").FoldMode;
+
+var Mode = function() {
+ var highlighter = new HtmlHighlightRules();
+ this.$tokenizer = new Tokenizer(highlighter.getRules());
+ this.$behaviour = new XmlBehaviour();
+
+ this.$embeds = highlighter.getEmbeds();
+ this.createModeDelegates({
+ "js-": JavaScriptMode,
+ "css-": CssMode
+ });
+
+ this.foldingRules = new HtmlFoldMode();
+};
+oop.inherits(Mode, TextMode);
+
+(function() {
+
+
+ this.toggleCommentLines = function(state, doc, startRow, endRow) {
+ return 0;
+ };
+
+ this.getNextLineIndent = function(state, line, tab) {
+ return this.$getIndent(line);
+ };
+
+ this.checkOutdent = function(state, line, input) {
+ return false;
+ };
+
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/javascript', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/javascript_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/range', 'ace/worker/worker_client', 'ace/mode/behaviour/cstyle', 'ace/mode/folding/cstyle'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextMode = require("./text").Mode;
+var Tokenizer = require("../tokenizer").Tokenizer;
+var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;
+var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
+var Range = require("../range").Range;
+var WorkerClient = require("../worker/worker_client").WorkerClient;
+var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
+var CStyleFoldMode = require("./folding/cstyle").FoldMode;
+
+var Mode = function() {
+ this.$tokenizer = new Tokenizer(new JavaScriptHighlightRules().getRules());
+ this.$outdent = new MatchingBraceOutdent();
+ this.$behaviour = new CstyleBehaviour();
+ this.foldingRules = new CStyleFoldMode();
+};
+oop.inherits(Mode, TextMode);
+
+(function() {
+
+
+ this.toggleCommentLines = function(state, doc, startRow, endRow) {
+ var outdent = true;
+ var re = /^(\s*)\/\//;
+
+ for (var i=startRow; i<= endRow; i++) {
+ if (!re.test(doc.getLine(i))) {
+ outdent = false;
+ break;
+ }
+ }
+
+ if (outdent) {
+ var deleteRange = new Range(0, 0, 0, 0);
+ for (var i=startRow; i<= endRow; i++)
+ {
+ var line = doc.getLine(i);
+ var m = line.match(re);
+ deleteRange.start.row = i;
+ deleteRange.end.row = i;
+ deleteRange.end.column = m[0].length;
+ doc.replace(deleteRange, m[1]);
+ }
+ }
+ else {
+ doc.indentRows(startRow, endRow, "//");
+ }
+ };
+
+ this.getNextLineIndent = function(state, line, tab) {
+ var indent = this.$getIndent(line);
+
+ var tokenizedLine = this.$tokenizer.getLineTokens(line, state);
+ var tokens = tokenizedLine.tokens;
+ var endState = tokenizedLine.state;
+
+ if (tokens.length && tokens[tokens.length-1].type == "comment") {
+ return indent;
+ }
+
+ if (state == "start" || state == "regex_allowed") {
+ var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);
+ if (match) {
+ indent += tab;
+ }
+ } else if (state == "doc-start") {
+ if (endState == "start" || state == "regex_allowed") {
+ return "";
+ }
+ var match = line.match(/^\s*(\/?)\*/);
+ if (match) {
+ if (match[1]) {
+ indent += " ";
+ }
+ indent += "* ";
+ }
+ }
+
+ return indent;
+ };
+
+ this.checkOutdent = function(state, line, input) {
+ return this.$outdent.checkOutdent(line, input);
+ };
+
+ this.autoOutdent = function(state, doc, row) {
+ this.$outdent.autoOutdent(doc, row);
+ };
+
+ this.createWorker = function(session) {
+ var worker = new WorkerClient(["ace"], "worker-javascript.js", "ace/mode/javascript_worker", "JavaScriptWorker");
+ worker.attachToDocument(session.getDocument());
+
+ worker.on("jslint", function(results) {
+ var errors = [];
+ for (var i=0; i<results.data.length; i++) {
+ var error = results.data[i];
+ if (error)
+ errors.push({
+ row: error.line-1,
+ column: error.character-1,
+ text: error.reason,
+ type: "warning",
+ lint: error
+ });
+ }
+ session.setAnnotations(errors);
+ });
+
+ worker.on("narcissus", function(e) {
+ session.setAnnotations([e.data]);
+ });
+
+ worker.on("terminate", function() {
+ session.clearAnnotations();
+ });
+
+ return worker;
+ };
+
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ * Mihai Sucan <mihai DOT sucan AT gmail DOT com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/javascript_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/unicode', 'ace/mode/doc_comment_highlight_rules', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var lang = require("../lib/lang");
+var unicode = require("../unicode");
+var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var JavaScriptHighlightRules = function() {
+
+ // see: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects
+ var globals = lang.arrayToMap(
+ // Constructors
+ ("Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" +
+ // E4X
+ "Namespace|QName|XML|XMLList|" +
+ "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" +
+ "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" +
+ // Errors
+ "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" +
+ "SyntaxError|TypeError|URIError|" +
+ // Non-constructor functions
+ "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" +
+ "isNaN|parseFloat|parseInt|" +
+ // Other
+ "JSON|Math|" +
+ // Pseudo
+ "this|arguments|prototype|window|document"
+ ).split("|")
+ );
+
+ var keywords = lang.arrayToMap(
+ ("break|case|catch|continue|default|delete|do|else|finally|for|function|" +
+ "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|" +
+ "const|yield|import|get|set").split("|")
+ );
+
+ // keywords which can be followed by regular expressions
+ var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield";
+
+ var deprecated = lang.arrayToMap(
+ ("__parent__|__count__|escape|unescape|with|__proto__").split("|")
+ );
+
+ var definitions = lang.arrayToMap(("const|let|var|function").split("|"));
+
+ var buildinConstants = lang.arrayToMap(
+ ("null|Infinity|NaN|undefined").split("|")
+ );
+
+ var futureReserved = lang.arrayToMap(
+ ("class|enum|extends|super|export|implements|private|" +
+ "public|interface|package|protected|static").split("|")
+ );
+
+ // TODO: Unicode escape sequences
+ var identifierRe = "[" + unicode.packages.L + "\\$_]["
+ + unicode.packages.L
+ + unicode.packages.Mn + unicode.packages.Mc
+ + unicode.packages.Nd
+ + unicode.packages.Pc + "\\$_]*\\b";
+
+ // regexp must not have capturing parentheses. Use (?:) instead.
+ // regexps are ordered -> the first match is used
+
+ this.$rules = {
+ "start" : [
+ {
+ token : "comment",
+ regex : "\\/\\/.*$"
+ },
+ new DocCommentHighlightRules().getStartRule("doc-start"),
+ {
+ token : "comment", // multi line comment
+ merge : true,
+ regex : "\\/\\*",
+ next : "comment"
+ }, {
+ token : "string", // single line
+ regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
+ }, {
+ token : "string", // multi line string start
+ merge : true,
+ regex : '["].*\\\\$',
+ next : "qqstring"
+ }, {
+ token : "string", // single line
+ regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
+ }, {
+ token : "string", // multi line string start
+ merge : true,
+ regex : "['].*\\\\$",
+ next : "qstring"
+ }, {
+ token : "constant.numeric", // hex
+ regex : "0[xX][0-9a-fA-F]+\\b"
+ }, {
+ token : "constant.numeric", // float
+ regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
+ }, {
+ token : ["keyword.definition", "text", "entity.name.function"],
+ regex : "(function)(\\s+)(" + identifierRe + ")"
+ }, {
+ token : "constant.language.boolean",
+ regex : "(?:true|false)\\b"
+ }, {
+ token : "keyword",
+ regex : "(?:" + kwBeforeRe + ")\\b",
+ next : "regex_allowed"
+ }, {
+ token : function(value) {
+ if (globals.hasOwnProperty(value))
+ return "variable.language";
+ else if (deprecated.hasOwnProperty(value))
+ return "invalid.deprecated";
+ else if (definitions.hasOwnProperty(value))
+ return "keyword.definition";
+ else if (keywords.hasOwnProperty(value))
+ return "keyword";
+ else if (buildinConstants.hasOwnProperty(value))
+ return "constant.language";
+ else if (futureReserved.hasOwnProperty(value))
+ return "invalid.illegal";
+ else if (value == "debugger")
+ return "invalid.deprecated";
+ else
+ return "identifier";
+ },
+ regex : identifierRe
+ }, {
+ token : "keyword.operator",
+ regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)",
+ next : "regex_allowed"
+ }, {
+ token : "punctuation.operator",
+ regex : "\\?|\\:|\\,|\\;|\\.",
+ next : "regex_allowed"
+ }, {
+ token : "paren.lparen",
+ regex : "[[({]",
+ next : "regex_allowed"
+ }, {
+ token : "paren.rparen",
+ regex : "[\\])}]"
+ }, {
+ token : "keyword.operator",
+ regex : "\\/=?",
+ next : "regex_allowed"
+ }, {
+ token: "comment",
+ regex: "^#!.*$"
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }
+ ],
+ // regular expressions are only allowed after certain tokens. This
+ // makes sure we don't mix up regexps with the divison operator
+ "regex_allowed": [
+ {
+ token : "comment", // multi line comment
+ merge : true,
+ regex : "\\/\\*",
+ next : "comment_regex_allowed"
+ }, {
+ token : "comment",
+ regex : "\\/\\/.*$"
+ }, {
+ token: "string.regexp",
+ regex: "\\/",
+ next: "regex",
+ merge: true
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }, {
+ // immediately return to the start mode without matching
+ // anything
+ token: "empty",
+ regex: "",
+ next: "start"
+ }
+ ],
+ "regex": [
+ {
+ token: "regexp.keyword.operator",
+ regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)",
+ next: "regex"
+ }, {
+ // flag
+ token: "string.regexp",
+ regex: "/\\w*",
+ next: "start",
+ merge: true
+ }, {
+ token: "string.regexp",
+ regex: "[^\\\\/\\[]+",
+ next: "regex",
+ merge: true
+ }, {
+ token: "string.regexp.charachterclass",
+ regex: "\\[",
+ next: "regex_character_class",
+ merge: true
+ }, {
+ token: "empty",
+ regex: "",
+ next: "start"
+ }
+ ],
+ "regex_character_class": [
+ {
+ token: "regexp.keyword.operator",
+ regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)",
+ next: "regex_character_class"
+ }, {
+ token: "string.regexp.charachterclass",
+ regex: "]",
+ next: "regex",
+ merge: true
+ }, {
+ token: "string.regexp.charachterclass",
+ regex: "[^\\\\\\]]+",
+ next: "regex_character_class",
+ merge: true
+ }, {
+ token: "empty",
+ regex: "",
+ next: "start"
+ }
+ ],
+ "comment_regex_allowed" : [
+ {
+ token : "comment", // closing comment
+ regex : ".*?\\*\\/",
+ merge : true,
+ next : "regex_allowed"
+ }, {
+ token : "comment", // comment spanning whole line
+ merge : true,
+ regex : ".+"
+ }
+ ],
+ "comment" : [
+ {
+ token : "comment", // closing comment
+ regex : ".*?\\*\\/",
+ merge : true,
+ next : "start"
+ }, {
+ token : "comment", // comment spanning whole line
+ merge : true,
+ regex : ".+"
+ }
+ ],
+ "qqstring" : [
+ {
+ token : "string",
+ regex : '(?:(?:\\\\.)|(?:[^"\\\\]))*?"',
+ next : "start"
+ }, {
+ token : "string",
+ merge : true,
+ regex : '.+'
+ }
+ ],
+ "qstring" : [
+ {
+ token : "string",
+ regex : "(?:(?:\\\\.)|(?:[^'\\\\]))*?'",
+ next : "start"
+ }, {
+ token : "string",
+ merge : true,
+ regex : '.+'
+ }
+ ]
+ };
+
+ this.embedRules(DocCommentHighlightRules, "doc-",
+ [ new DocCommentHighlightRules().getEndRule("start") ]);
+};
+
+oop.inherits(JavaScriptHighlightRules, TextHighlightRules);
+
+exports.JavaScriptHighlightRules = JavaScriptHighlightRules;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/doc_comment_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var DocCommentHighlightRules = function() {
+
+ this.$rules = {
+ "start" : [ {
+ token : "comment.doc.tag",
+ regex : "@[\\w\\d_]+" // TODO: fix email addresses
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "\\s+"
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "TODO"
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "[^@\\*]+"
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "."
+ }]
+ };
+};
+
+oop.inherits(DocCommentHighlightRules, TextHighlightRules);
+
+(function() {
+
+ this.getStartRule = function(start) {
+ return {
+ token : "comment.doc", // doc comment
+ merge : true,
+ regex : "\\/\\*(?=\\*)",
+ next : start
+ };
+ };
+
+ this.getEndRule = function (start) {
+ return {
+ token : "comment.doc", // closing comment
+ merge : true,
+ regex : "\\*\\/",
+ next : start
+ };
+ };
+
+}).call(DocCommentHighlightRules.prototype);
+
+exports.DocCommentHighlightRules = DocCommentHighlightRules;
+
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var Range = require("../range").Range;
+
+var MatchingBraceOutdent = function() {};
+
+(function() {
+
+ this.checkOutdent = function(line, input) {
+ if (! /^\s+$/.test(line))
+ return false;
+
+ return /^\s*\}/.test(input);
+ };
+
+ this.autoOutdent = function(doc, row) {
+ var line = doc.getLine(row);
+ var match = line.match(/^(\s*\})/);
+
+ if (!match) return 0;
+
+ var column = match[1].length;
+ var openBracePos = doc.findMatchingBracket({row: row, column: column});
+
+ if (!openBracePos || openBracePos.row == row) return 0;
+
+ var indent = this.$getIndent(doc.getLine(openBracePos.row));
+ doc.replace(new Range(row, 0, row, column-1), indent);
+ };
+
+ this.$getIndent = function(line) {
+ var match = line.match(/^(\s+)/);
+ if (match) {
+ return match[1];
+ }
+
+ return "";
+ };
+
+}).call(MatchingBraceOutdent.prototype);
+
+exports.MatchingBraceOutdent = MatchingBraceOutdent;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/worker/worker_client', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event_emitter'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var EventEmitter = require("../lib/event_emitter").EventEmitter;
+
+var WorkerClient = function(topLevelNamespaces, packagedJs, mod, classname) {
+
+ this.changeListener = this.changeListener.bind(this);
+
+ if (module.packaged) {
+ var base = this.$guessBasePath();
+ this.$worker = new Worker(base + packagedJs);
+ }
+ else {
+ var workerUrl = this.$normalizePath(require.nameToUrl("ace/worker/worker", null, "_"));
+ this.$worker = new Worker(workerUrl);
+
+ var tlns = {};
+ for (var i=0; i<topLevelNamespaces.length; i++) {
+ var ns = topLevelNamespaces[i];
+ var path = this.$normalizePath(require.nameToUrl(ns, null, "_").replace(/.js$/, ""));
+
+ tlns[ns] = path;
+ }
+ }
+
+ this.$worker.postMessage({
+ init : true,
+ tlns: tlns,
+ module: mod,
+ classname: classname
+ });
+
+ this.callbackId = 1;
+ this.callbacks = {};
+
+ var _self = this;
+ this.$worker.onerror = function(e) {
+ window.console && console.log && console.log(e);
+ throw e;
+ };
+ this.$worker.onmessage = function(e) {
+ var msg = e.data;
+ switch(msg.type) {
+ case "log":
+ window.console && console.log && console.log(msg.data);
+ break;
+
+ case "event":
+ _self._emit(msg.name, {data: msg.data});
+ break;
+
+ case "call":
+ var callback = _self.callbacks[msg.id];
+ if (callback) {
+ callback(msg.data);
+ delete _self.callbacks[msg.id];
+ }
+ break;
+ }
+ };
+};
+
+(function(){
+
+ oop.implement(this, EventEmitter);
+
+ this.$normalizePath = function(path) {
+ path = path.replace(/^[a-z]+:\/\/[^\/]+\//, ""); // Remove domain name and rebuild it
+ path = location.protocol + "//" + location.host
+ // paths starting with a slash are relative to the root (host)
+ + (path.charAt(0) == "/" ? "" : location.pathname.replace(/\/[^\/]*$/, ""))
+ + "/" + path.replace(/^[\/]+/, "");
+ return path;
+ };
+
+ this.$guessBasePath = function() {
+ if (require.aceBaseUrl)
+ return require.aceBaseUrl;
+
+ var scripts = document.getElementsByTagName("script");
+ for (var i=0; i<scripts.length; i++) {
+ var script = scripts[i];
+
+ var base = script.getAttribute("data-ace-base");
+ if (base)
+ return base.replace(/\/*$/, "/");
+
+ var src = script.src || script.getAttribute("src");
+ if (!src) {
+ continue;
+ }
+ var m = src.match(/^(?:(.*\/)ace\.js|(.*\/)ace(-uncompressed)?(-noconflict)?\.js)(?:\?|$)/);
+ if (m)
+ return m[1] || m[2];
+ }
+ return "";
+ };
+
+ this.terminate = function() {
+ this._emit("terminate", {});
+ this.$worker.terminate();
+ this.$worker = null;
+ this.$doc.removeEventListener("change", this.changeListener);
+ this.$doc = null;
+ };
+
+ this.send = function(cmd, args) {
+ this.$worker.postMessage({command: cmd, args: args});
+ };
+
+ this.call = function(cmd, args, callback) {
+ if (callback) {
+ var id = this.callbackId++;
+ this.callbacks[id] = callback;
+ args.push(id);
+ }
+ this.send(cmd, args);
+ };
+
+ this.emit = function(event, data) {
+ try {
+ // firefox refuses to clone objects which have function properties
+ // TODO: cleanup event
+ this.$worker.postMessage({event: event, data: {data: data.data}});
+ }
+ catch(ex) {}
+ };
+
+ this.attachToDocument = function(doc) {
+ if(this.$doc)
+ this.terminate();
+
+ this.$doc = doc;
+ this.call("setValue", [doc.getValue()]);
+ doc.on("change", this.changeListener);
+ };
+
+ this.changeListener = function(e) {
+ e.range = {
+ start: e.data.range.start,
+ end: e.data.range.end
+ };
+ this.emit("change", e);
+ };
+
+}).call(WorkerClient.prototype);
+
+exports.WorkerClient = WorkerClient;
+
+});
+/* vim:ts=4:sts=4:sw=4:
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Chris Spencer <chris.ag.spencer AT googlemail DOT com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/behaviour/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var Behaviour = require('../behaviour').Behaviour;
+
+var CstyleBehaviour = function () {
+
+ this.add("braces", "insertion", function (state, action, editor, session, text) {
+ if (text == '{') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '{' + selected + '}',
+ selection: false
+ }
+ } else {
+ return {
+ text: '{}',
+ selection: [1, 1]
+ }
+ }
+ } else if (text == '}') {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '}') {
+ var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});
+ if (matching !== null) {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ } else if (text == "\n") {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '}') {
+ var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column + 1});
+ if (!openBracePos)
+ return null;
+
+ var indent = this.getNextLineIndent(state, line.substring(0, line.length - 1), session.getTabString());
+ var next_indent = this.$getIndent(session.doc.getLine(openBracePos.row));
+
+ return {
+ text: '\n' + indent + '\n' + next_indent,
+ selection: [1, indent.length, 1, indent.length]
+ }
+ }
+ }
+ });
+
+ this.add("braces", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '{') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.end.column, range.end.column + 1);
+ if (rightChar == '}') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+ this.add("parens", "insertion", function (state, action, editor, session, text) {
+ if (text == '(') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '(' + selected + ')',
+ selection: false
+ }
+ } else {
+ return {
+ text: '()',
+ selection: [1, 1]
+ }
+ }
+ } else if (text == ')') {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == ')') {
+ var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});
+ if (matching !== null) {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ }
+ });
+
+ this.add("parens", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '(') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
+ if (rightChar == ')') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+ this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {
+ if (text == '"') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '"' + selected + '"',
+ selection: false
+ }
+ } else {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var leftChar = line.substring(cursor.column-1, cursor.column);
+
+ // We're escaped.
+ if (leftChar == '\\') {
+ return null;
+ }
+
+ // Find what token we're inside.
+ var tokens = session.getTokens(selection.start.row, selection.start.row)[0].tokens;
+ var col = 0, token;
+ var quotepos = -1; // Track whether we're inside an open quote.
+
+ for (var x = 0; x < tokens.length; x++) {
+ token = tokens[x];
+ if (token.type == "string") {
+ quotepos = -1;
+ } else if (quotepos < 0) {
+ quotepos = token.value.indexOf('"');
+ }
+ if ((token.value.length + col) > selection.start.column) {
+ break;
+ }
+ col += tokens[x].value.length;
+ }
+
+ // Try and be smart about when we auto insert.
+ if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf('"') === token.value.length-1)))) {
+ return {
+ text: '""',
+ selection: [1,1]
+ }
+ } else if (token && token.type === "string") {
+ // Ignore input and move right one if we're typing over the closing quote.
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '"') {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ }
+ }
+ });
+
+ this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '"') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
+ if (rightChar == '"') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+}
+oop.inherits(CstyleBehaviour, Behaviour);
+
+exports.CstyleBehaviour = CstyleBehaviour;
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var Range = require("../../range").Range;
+var BaseFoldMode = require("./fold_mode").FoldMode;
+
+var FoldMode = exports.FoldMode = function() {};
+oop.inherits(FoldMode, BaseFoldMode);
+
+(function() {
+
+ this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
+ this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ var line = session.getLine(row);
+ var match = line.match(this.foldingStartMarker);
+ if (match) {
+ var i = match.index;
+
+ if (match[1])
+ return this.openingBracketBlock(session, match[1], row, i);
+
+ var range = session.getCommentFoldRange(row, i + match[0].length);
+ range.end.column -= 2;
+ return range;
+ }
+
+ if (foldStyle !== "markbeginend")
+ return;
+
+ var match = line.match(this.foldingStopMarker);
+ if (match) {
+ var i = match.index + match[0].length;
+
+ if (match[2]) {
+ var range = session.getCommentFoldRange(row, i);
+ range.end.column -= 2;
+ return range;
+ }
+
+ var end = {row: row, column: i};
+ var start = session.$findOpeningBracket(match[1], end);
+
+ if (!start)
+ return;
+
+ start.column++;
+ end.column--;
+
+ return Range.fromPoints(start, end);
+ }
+ };
+
+}).call(FoldMode.prototype);
+
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/fold_mode', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var Range = require("../../range").Range;
+
+var FoldMode = exports.FoldMode = function() {};
+
+(function() {
+
+ this.foldingStartMarker = null;
+ this.foldingStopMarker = null;
+
+ // must return "" if there's no fold, to enable caching
+ this.getFoldWidget = function(session, foldStyle, row) {
+ var line = session.getLine(row);
+ if (this.foldingStartMarker.test(line))
+ return "start";
+ if (foldStyle == "markbeginend"
+ && this.foldingStopMarker
+ && this.foldingStopMarker.test(line))
+ return "end";
+ return "";
+ };
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ return null;
+ };
+
+ this.indentationBlock = function(session, row, column) {
+ var re = /^\s*/;
+ var startRow = row;
+ var endRow = row;
+ var line = session.getLine(row);
+ var startColumn = column || line.length;
+ var startLevel = line.match(re)[0].length;
+ var maxRow = session.getLength()
+
+ while (++row < maxRow) {
+ line = session.getLine(row);
+ var level = line.match(re)[0].length;
+
+ if (level == line.length)
+ continue;
+
+ if (level <= startLevel)
+ break;
+
+ endRow = row;
+ }
+
+ if (endRow > startRow) {
+ var endColumn = session.getLine(endRow).length;
+ return new Range(startRow, startColumn, endRow, endColumn);
+ }
+ };
+
+ this.openingBracketBlock = function(session, bracket, row, column) {
+ var start = {row: row, column: column + 1};
+ var end = session.$findClosingBracket(bracket, start);
+ if (!end)
+ return;
+
+ var fw = session.foldWidgets[end.row];
+ if (fw == null)
+ fw = this.getFoldWidget(session, end.row);
+
+ if (fw == "start") {
+ end.row --;
+ end.column = session.getLine(end.row).length;
+ }
+ return Range.fromPoints(start, end);
+ };
+
+}).call(FoldMode.prototype);
+
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/css', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/css_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/worker/worker_client', 'ace/mode/folding/cstyle'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextMode = require("./text").Mode;
+var Tokenizer = require("../tokenizer").Tokenizer;
+var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;
+var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
+var WorkerClient = require("../worker/worker_client").WorkerClient;
+var CStyleFoldMode = require("./folding/cstyle").FoldMode;
+
+var Mode = function() {
+ this.$tokenizer = new Tokenizer(new CssHighlightRules().getRules(), "i");
+ this.$outdent = new MatchingBraceOutdent();
+ this.foldingRules = new CStyleFoldMode();
+};
+oop.inherits(Mode, TextMode);
+
+(function() {
+
+ this.foldingRules = "cStyle";
+
+ this.getNextLineIndent = function(state, line, tab) {
+ var indent = this.$getIndent(line);
+
+ // ignore braces in comments
+ var tokens = this.$tokenizer.getLineTokens(line, state).tokens;
+ if (tokens.length && tokens[tokens.length-1].type == "comment") {
+ return indent;
+ }
+
+ var match = line.match(/^.*\{\s*$/);
+ if (match) {
+ indent += tab;
+ }
+
+ return indent;
+ };
+
+ this.checkOutdent = function(state, line, input) {
+ return this.$outdent.checkOutdent(line, input);
+ };
+
+ this.autoOutdent = function(state, doc, row) {
+ this.$outdent.autoOutdent(doc, row);
+ };
+
+ this.createWorker = function(session) {
+ var worker = new WorkerClient(["ace"], "worker-css.js", "ace/mode/css_worker", "Worker");
+ worker.attachToDocument(session.getDocument());
+
+ worker.on("csslint", function(e) {
+ var errors = [];
+ e.data.forEach(function(message) {
+ errors.push({
+ row: message.line - 1,
+ column: message.col - 1,
+ text: message.message,
+ type: message.type,
+ lint: message
+ });
+ });
+
+ session.setAnnotations(errors);
+ });
+ return worker;
+ };
+
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/css_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var lang = require("../lib/lang");
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var CssHighlightRules = function() {
+
+ var properties = lang.arrayToMap(
+ ("-moz-appearance|-moz-box-sizing|-webkit-box-sizing|-moz-outline-radius|-moz-transform|-webkit-transform|" +
+ "appearance|azimuth|background-attachment|background-color|background-image|" +
+ "background-origin|background-position|background-repeat|background|border-bottom-color|" +
+ "border-bottom-style|border-bottom-width|border-bottom|border-collapse|" +
+ "border-color|border-left-color|border-left-style|border-left-width|" +
+ "border-left|border-right-color|border-right-style|border-right-width|" +
+ "border-right|border-spacing|border-style|border-top-color|" +
+ "border-top-style|border-top-width|border-top|border-width|border|" +
+ "bottom|box-sizing|caption-side|clear|clip|color|content|counter-increment|" +
+ "counter-reset|cue-after|cue-before|cue|cursor|direction|display|" +
+ "elevation|empty-cells|float|font-family|font-size-adjust|font-size|" +
+ "font-stretch|font-style|font-variant|font-weight|font|height|left|" +
+ "letter-spacing|line-height|list-style-image|list-style-position|" +
+ "list-style-type|list-style|margin-bottom|margin-left|margin-right|" +
+ "margin-top|marker-offset|margin|marks|max-height|max-width|min-height|" +
+ "min-width|-moz-border-radius|opacity|orphans|outline-color|outline-offset|outline-radius|" +
+ "outline-style|outline-width|outline|overflow|overflow-x|overflow-y|padding-bottom|" +
+ "padding-left|padding-right|padding-top|padding|page-break-after|" +
+ "page-break-before|page-break-inside|page|pause-after|pause-before|" +
+ "pause|pitch-range|pitch|play-during|pointer-events|position|quotes|resize|richness|right|" +
+ "size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|" +
+ "stress|table-layout|text-align|text-decoration|text-indent|" +
+ "text-shadow|text-transform|top|transform|unicode-bidi|vertical-align|" +
+ "visibility|voice-family|volume|white-space|widows|width|word-spacing|" +
+ "z-index").split("|")
+ );
+
+ var functions = lang.arrayToMap(
+ ("rgb|rgba|url|attr|counter|counters").split("|")
+ );
+
+ var constants = lang.arrayToMap(
+ ("absolute|all-scroll|always|armenian|auto|baseline|below|bidi-override|" +
+ "block|bold|bolder|border-box|both|bottom|break-all|break-word|capitalize|center|" +
+ "char|circle|cjk-ideographic|col-resize|collapse|content-box|crosshair|dashed|" +
+ "decimal-leading-zero|decimal|default|disabled|disc|" +
+ "distribute-all-lines|distribute-letter|distribute-space|" +
+ "distribute|dotted|double|e-resize|ellipsis|fixed|georgian|groove|" +
+ "hand|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|" +
+ "ideograph-alpha|ideograph-numeric|ideograph-parenthesis|" +
+ "ideograph-space|inactive|inherit|inline-block|inline|inset|inside|" +
+ "inter-ideograph|inter-word|italic|justify|katakana-iroha|katakana|" +
+ "keep-all|left|lighter|line-edge|line-through|line|list-item|loose|" +
+ "lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|" +
+ "medium|middle|move|n-resize|ne-resize|newspaper|no-drop|no-repeat|" +
+ "nw-resize|none|normal|not-allowed|nowrap|oblique|outset|outside|" +
+ "overline|pointer|progress|relative|repeat-x|repeat-y|repeat|right|" +
+ "ridge|row-resize|rtl|s-resize|scroll|se-resize|separate|small-caps|" +
+ "solid|square|static|strict|super|sw-resize|table-footer-group|" +
+ "table-header-group|tb-rl|text-bottom|text-top|text|thick|thin|top|" +
+ "transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|" +
+ "vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|" +
+ "zero").split("|")
+ );
+
+ var colors = lang.arrayToMap(
+ ("aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|" +
+ "purple|red|silver|teal|white|yellow").split("|")
+ );
+
+ // regexp must not have capturing parentheses. Use (?:) instead.
+ // regexps are ordered -> the first match is used
+
+ var numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))";
+
+ var base_ruleset = [
+ {
+ token : "comment", // multi line comment
+ merge : true,
+ regex : "\\/\\*",
+ next : "ruleset_comment"
+ },{
+ token : "string", // single line
+ regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
+ }, {
+ token : "string", // single line
+ regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
+ }, {
+ token : "constant.numeric",
+ regex : numRe + "(?:em|ex|px|cm|mm|in|pt|pc|deg|rad|grad|ms|s|hz|khz|%)"
+ }, {
+ token : "constant.numeric", // hex6 color
+ regex : "#[a-f0-9]{6}"
+ }, {
+ token : "constant.numeric", // hex3 color
+ regex : "#[a-f0-9]{3}"
+ }, {
+ token : function(value) {
+ if (properties.hasOwnProperty(value.toLowerCase())) {
+ return "support.type";
+ }
+ else if (functions.hasOwnProperty(value.toLowerCase())) {
+ return "support.function";
+ }
+ else if (constants.hasOwnProperty(value.toLowerCase())) {
+ return "support.constant";
+ }
+ else if (colors.hasOwnProperty(value.toLowerCase())) {
+ return "support.constant.color";
+ }
+ else {
+ return "text";
+ }
+ },
+ regex : "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"
+ }
+ ];
+
+ var ruleset = lang.copyArray(base_ruleset);
+ ruleset.unshift({
+ token : "paren.rparen",
+ regex : "\\}",
+ next: "start"
+ });
+
+ var media_ruleset = lang.copyArray( base_ruleset );
+ media_ruleset.unshift({
+ token : "paren.rparen",
+ regex : "\\}",
+ next: "media"
+ });
+
+ var base_comment = [{
+ token : "comment", // comment spanning whole line
+ merge : true,
+ regex : ".+"
+ }];
+
+ var comment = lang.copyArray(base_comment);
+ comment.unshift({
+ token : "comment", // closing comment
+ regex : ".*?\\*\\/",
+ next : "start"
+ });
+
+ var media_comment = lang.copyArray(base_comment);
+ media_comment.unshift({
+ token : "comment", // closing comment
+ regex : ".*?\\*\\/",
+ next : "media"
+ });
+
+ var ruleset_comment = lang.copyArray(base_comment);
+ ruleset_comment.unshift({
+ token : "comment", // closing comment
+ regex : ".*?\\*\\/",
+ next : "ruleset"
+ });
+
+ this.$rules = {
+ "start" : [{
+ token : "comment", // multi line comment
+ merge : true,
+ regex : "\\/\\*",
+ next : "comment"
+ }, {
+ token: "paren.lparen",
+ regex: "\\{",
+ next: "ruleset"
+ }, {
+ token: "string",
+ regex: "@.*?{",
+ next: "media"
+ },{
+ token: "keyword",
+ regex: "#[a-z0-9-_]+"
+ },{
+ token: "variable",
+ regex: "\\.[a-z0-9-_]+"
+ },{
+ token: "string",
+ regex: ":[a-z0-9-_]+"
+ },{
+ token: "constant",
+ regex: "[a-z0-9-_]+"
+ }],
+
+ "media" : [ {
+ token : "comment", // multi line comment
+ merge : true,
+ regex : "\\/\\*",
+ next : "media_comment"
+ }, {
+ token: "paren.lparen",
+ regex: "\\{",
+ next: "media_ruleset"
+ },{
+ token: "string",
+ regex: "\\}",
+ next: "start"
+ },{
+ token: "keyword",
+ regex: "#[a-z0-9-_]+"
+ },{
+ token: "variable",
+ regex: "\\.[a-z0-9-_]+"
+ },{
+ token: "string",
+ regex: ":[a-z0-9-_]+"
+ },{
+ token: "constant",
+ regex: "[a-z0-9-_]+"
+ }],
+
+ "comment" : comment,
+
+ "ruleset" : ruleset,
+ "ruleset_comment" : ruleset_comment,
+
+ "media_ruleset" : media_ruleset,
+ "media_comment" : media_comment
+ };
+};
+
+oop.inherits(CssHighlightRules, TextHighlightRules);
+
+exports.CssHighlightRules = CssHighlightRules;
+
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/html_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/css_highlight_rules', 'ace/mode/javascript_highlight_rules', 'ace/mode/xml_util', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;
+var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;
+var xmlUtil = require("./xml_util");
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var HtmlHighlightRules = function() {
+
+ // regexp must not have capturing parentheses
+ // regexps are ordered -> the first match is used
+ this.$rules = {
+ start : [{
+ token : "text",
+ merge : true,
+ regex : "<\\!\\[CDATA\\[",
+ next : "cdata"
+ }, {
+ token : "xml_pe",
+ regex : "<\\?.*?\\?>"
+ }, {
+ token : "comment",
+ merge : true,
+ regex : "<\\!--",
+ next : "comment"
+ }, {
+ token : "meta.tag",
+ regex : "<(?=\s*script\\b)",
+ next : "script"
+ }, {
+ token : "meta.tag",
+ regex : "<(?=\s*style\\b)",
+ next : "css"
+ }, {
+ token : "meta.tag", // opening tag
+ regex : "<\\/?",
+ next : "tag"
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }, {
+ token : "text",
+ regex : "[^<]+"
+ } ],
+
+ cdata : [ {
+ token : "text",
+ regex : "\\]\\]>",
+ next : "start"
+ }, {
+ token : "text",
+ merge : true,
+ regex : "\\s+"
+ }, {
+ token : "text",
+ merge : true,
+ regex : ".+"
+ } ],
+
+ comment : [ {
+ token : "comment",
+ regex : ".*?-->",
+ next : "start"
+ }, {
+ token : "comment",
+ merge : true,
+ regex : ".+"
+ } ]
+ };
+
+ xmlUtil.tag(this.$rules, "tag", "start");
+ xmlUtil.tag(this.$rules, "css", "css-start");
+ xmlUtil.tag(this.$rules, "script", "js-start");
+
+ this.embedRules(JavaScriptHighlightRules, "js-", [{
+ token: "comment",
+ regex: "\\/\\/.*(?=<\\/script>)",
+ next: "tag"
+ }, {
+ token: "meta.tag",
+ regex: "<\\/(?=script)",
+ next: "tag"
+ }]);
+
+ this.embedRules(CssHighlightRules, "css-", [{
+ token: "meta.tag",
+ regex: "<\\/(?=style)",
+ next: "tag"
+ }]);
+};
+
+oop.inherits(HtmlHighlightRules, TextHighlightRules);
+
+exports.HtmlHighlightRules = HtmlHighlightRules;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/xml_util', ['require', 'exports', 'module' , 'ace/lib/lang'], function(require, exports, module) {
+"use strict";
+
+var lang = require("../lib/lang");
+
+var formTags = lang.arrayToMap(
+ ("button|form|input|label|select|textarea").split("|")
+);
+
+var tableTags = lang.arrayToMap(
+ ("table|tbody|td|tfoot|th|tr").split("|")
+);
+
+function string(state) {
+ return [{
+ token : "string",
+ regex : '".*?"'
+ }, {
+ token : "string", // multi line string start
+ merge : true,
+ regex : '["].*',
+ next : state + "-qqstring"
+ }, {
+ token : "string",
+ regex : "'.*?'"
+ }, {
+ token : "string", // multi line string start
+ merge : true,
+ regex : "['].*",
+ next : state + "-qstring"
+ }];
+}
+
+function multiLineString(quote, state) {
+ return [{
+ token : "string",
+ merge : true,
+ regex : ".*?" + quote,
+ next : state
+ }, {
+ token : "string",
+ merge : true,
+ regex : '.+'
+ }];
+}
+
+exports.tag = function(states, name, nextState) {
+ states[name] = [{
+ token : "text",
+ regex : "\\s+"
+ }, {
+ //token : "meta.tag",
+
+ token : function(value) {
+ if ( value==='a' ) {
+ return "meta.tag.anchor";
+ }
+ else if ( value==='img' ) {
+ return "meta.tag.image";
+ }
+ else if ( value==='script' ) {
+ return "meta.tag.script";
+ }
+ else if ( value==='style' ) {
+ return "meta.tag.style";
+ }
+ else if (formTags.hasOwnProperty(value.toLowerCase())) {
+ return "meta.tag.form";
+ }
+ else if (tableTags.hasOwnProperty(value.toLowerCase())) {
+ return "meta.tag.table";
+ }
+ else {
+ return "meta.tag";
+ }
+ },
+ merge : true,
+ regex : "[-_a-zA-Z0-9:!]+",
+ next : name + "embed-attribute-list"
+ }, {
+ token: "empty",
+ regex: "",
+ next : name + "embed-attribute-list"
+ }];
+
+ states[name + "-qstring"] = multiLineString("'", name + "embed-attribute-list");
+ states[name + "-qqstring"] = multiLineString("\"", name + "embed-attribute-list");
+
+ states[name + "embed-attribute-list"] = [{
+ token : "meta.tag",
+ merge : true,
+ regex : "\/?>",
+ next : nextState
+ }, {
+ token : "keyword.operator",
+ regex : "="
+ }, {
+ token : "entity.other.attribute-name",
+ regex : "[-_a-zA-Z0-9:]+"
+ }, {
+ token : "constant.numeric", // float
+ regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }].concat(string(name));
+};
+
+});
+/* vim:ts=4:sts=4:sw=4:
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Chris Spencer <chris.ag.spencer AT googlemail DOT com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/behaviour/xml', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour', 'ace/mode/behaviour/cstyle'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var Behaviour = require("../behaviour").Behaviour;
+var CstyleBehaviour = require("./cstyle").CstyleBehaviour;
+
+var XmlBehaviour = function () {
+
+ this.inherit(CstyleBehaviour, ["string_dquotes"]); // Get string behaviour
+
+ this.add("brackets", "insertion", function (state, action, editor, session, text) {
+ if (text == '<') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return false;
+ } else {
+ return {
+ text: '<>',
+ selection: [1, 1]
+ }
+ }
+ } else if (text == '>') {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '>') { // need some kind of matching check here
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ } else if (text == "\n") {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChars = line.substring(cursor.column, cursor.column + 2);
+ if (rightChars == '</') {
+ var indent = this.$getIndent(session.doc.getLine(cursor.row)) + session.getTabString();
+ var next_indent = this.$getIndent(session.doc.getLine(cursor.row));
+
+ return {
+ text: '\n' + indent + '\n' + next_indent,
+ selection: [1, indent.length, 1, indent.length]
+ }
+ }
+ }
+ });
+
+}
+oop.inherits(XmlBehaviour, Behaviour);
+
+exports.XmlBehaviour = XmlBehaviour;
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/html', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/folding/mixed', 'ace/mode/folding/xml', 'ace/mode/folding/cstyle'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var MixedFoldMode = require("./mixed").FoldMode;
+var XmlFoldMode = require("./xml").FoldMode;
+var CStyleFoldMode = require("./cstyle").FoldMode;
+
+var FoldMode = exports.FoldMode = function() {
+ MixedFoldMode.call(this, new XmlFoldMode({
+ // void elements
+ "area": 1,
+ "base": 1,
+ "br": 1,
+ "col": 1,
+ "command": 1,
+ "embed": 1,
+ "hr": 1,
+ "img": 1,
+ "input": 1,
+ "keygen": 1,
+ "link": 1,
+ "meta": 1,
+ "param": 1,
+ "source": 1,
+ "track": 1,
+ "wbr": 1,
+
+ // optional tags
+ "li": 1,
+ "dt": 1,
+ "dd": 1,
+ "p": 1,
+ "rt": 1,
+ "rp": 1,
+ "optgroup": 1,
+ "option": 1,
+ "colgroup": 1,
+ "td": 1,
+ "th": 1
+ }), {
+ "js-": new CStyleFoldMode(),
+ "css-": new CStyleFoldMode()
+ });
+};
+
+oop.inherits(FoldMode, MixedFoldMode);
+
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/mixed', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var BaseFoldMode = require("./fold_mode").FoldMode;
+
+var FoldMode = exports.FoldMode = function(defaultMode, subModes) {
+ this.defaultMode = defaultMode;
+ this.subModes = subModes;
+};
+oop.inherits(FoldMode, BaseFoldMode);
+
+(function() {
+
+
+ this.$getMode = function(state) {
+ for (var key in this.subModes) {
+ if (state.indexOf(key) === 0)
+ return this.subModes[key];
+ }
+ return null;
+ };
+
+ this.$tryMode = function(state, session, foldStyle, row) {
+ var mode = this.$getMode(state);
+ return (mode ? mode.getFoldWidget(session, foldStyle, row) : "");
+ };
+
+ this.getFoldWidget = function(session, foldStyle, row) {
+ return (
+ this.$tryMode(session.getState(row-1), session, foldStyle, row) ||
+ this.$tryMode(session.getState(row), session, foldStyle, row) ||
+ this.defaultMode.getFoldWidget(session, foldStyle, row)
+ );
+ };
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ var mode = this.$getMode(session.getState(row-1));
+
+ if (!mode || !mode.getFoldWidget(session, foldStyle, row))
+ mode = this.$getMode(session.getState(row));
+
+ if (!mode || !mode.getFoldWidget(session, foldStyle, row))
+ mode = this.defaultMode;
+
+ return mode.getFoldWidgetRange(session, foldStyle, row);
+ };
+
+}).call(FoldMode.prototype);
+
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/xml', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/range', 'ace/mode/folding/fold_mode', 'ace/token_iterator'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var lang = require("../../lib/lang");
+var Range = require("../../range").Range;
+var BaseFoldMode = require("./fold_mode").FoldMode;
+var TokenIterator = require("../../token_iterator").TokenIterator;
+
+var FoldMode = exports.FoldMode = function(voidElements) {
+ BaseFoldMode.call(this);
+ this.voidElements = voidElements || {};
+};
+oop.inherits(FoldMode, BaseFoldMode);
+
+(function() {
+
+ this.getFoldWidget = function(session, foldStyle, row) {
+ var tag = this._getFirstTagInLine(session, row);
+
+ if (tag.closing)
+ return foldStyle == "markbeginend" ? "end" : "";
+
+ if (!tag.tagName || this.voidElements[tag.tagName.toLowerCase()])
+ return "";
+
+ if (tag.selfClosing)
+ return "";
+
+ if (tag.value.indexOf("/" + tag.tagName) !== -1)
+ return "";
+
+ return "start";
+ };
+
+ this._getFirstTagInLine = function(session, row) {
+ var tokens = session.getTokens(row, row)[0].tokens;
+ var value = "";
+ for (var i = 0; i < tokens.length; i++) {
+ var token = tokens[i];
+ if (token.type.indexOf("meta.tag") === 0)
+ value += token.value;
+ else
+ value += lang.stringRepeat(" ", token.value.length);
+ }
+
+ return this._parseTag(value);
+ };
+
+ this.tagRe = /^(\s*)(<?(\/?)([-_a-zA-Z0-9:!]*)\s*(\/?)>?)/;
+ this._parseTag = function(tag) {
+
+ var match = this.tagRe.exec(tag);
+ var column = this.tagRe.lastIndex || 0;
+ this.tagRe.lastIndex = 0;
+
+ return {
+ value: tag,
+ match: match ? match[2] : "",
+ closing: match ? !!match[3] : false,
+ selfClosing: match ? !!match[5] || match[2] == "/>" : false,
+ tagName: match ? match[4] : "",
+ column: match[1] ? column + match[1].length : column
+ };
+ };
+
+ /**
+ * reads a full tag and places the iterator after the tag
+ */
+ this._readTagForward = function(iterator) {
+ var token = iterator.getCurrentToken();
+ if (!token)
+ return null;
+
+ var value = "";
+ var start;
+
+ do {
+ if (token.type.indexOf("meta.tag") === 0) {
+ if (!start) {
+ var start = {
+ row: iterator.getCurrentTokenRow(),
+ column: iterator.getCurrentTokenColumn()
+ };
+ }
+ value += token.value;
+ if (value.indexOf(">") !== -1) {
+ var tag = this._parseTag(value);
+ tag.start = start;
+ tag.end = {
+ row: iterator.getCurrentTokenRow(),
+ column: iterator.getCurrentTokenColumn() + token.value.length
+ };
+ iterator.stepForward();
+ return tag;
+ }
+ }
+ } while(token = iterator.stepForward());
+
+ return null;
+ };
+
+ this._readTagBackward = function(iterator) {
+ var token = iterator.getCurrentToken();
+ if (!token)
+ return null;
+
+ var value = "";
+ var end;
+
+ do {
+ if (token.type.indexOf("meta.tag") === 0) {
+ if (!end) {
+ end = {
+ row: iterator.getCurrentTokenRow(),
+ column: iterator.getCurrentTokenColumn() + token.value.length
+ };
+ }
+ value = token.value + value;
+ if (value.indexOf("<") !== -1) {
+ var tag = this._parseTag(value);
+ tag.end = end;
+ tag.start = {
+ row: iterator.getCurrentTokenRow(),
+ column: iterator.getCurrentTokenColumn()
+ };
+ iterator.stepBackward();
+ return tag;
+ }
+ }
+ } while(token = iterator.stepBackward());
+
+ return null;
+ };
+
+ this._pop = function(stack, tag) {
+ while (stack.length) {
+
+ var top = stack[stack.length-1];
+ if (!tag || top.tagName == tag.tagName) {
+ return stack.pop();
+ }
+ else if (this.voidElements[tag.tagName]) {
+ return;
+ }
+ else if (this.voidElements[top.tagName]) {
+ stack.pop();
+ continue;
+ } else {
+ return null;
+ }
+ }
+ };
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ var firstTag = this._getFirstTagInLine(session, row);
+
+ if (!firstTag.match)
+ return null;
+
+ var isBackward = firstTag.closing || firstTag.selfClosing;
+ var stack = [];
+ var tag;
+
+ if (!isBackward) {
+ var iterator = new TokenIterator(session, row, firstTag.column);
+ var start = {
+ row: row,
+ column: firstTag.column + firstTag.tagName.length + 2
+ };
+ while (tag = this._readTagForward(iterator)) {
+ if (tag.selfClosing) {
+ if (!stack.length) {
+ tag.start.column += tag.tagName.length + 2;
+ tag.end.column -= 2;
+ return Range.fromPoints(tag.start, tag.end);
+ } else
+ continue;
+ }
+
+ if (tag.closing) {
+ this._pop(stack, tag);
+ if (stack.length == 0)
+ return Range.fromPoints(start, tag.start);
+ }
+ else {
+ stack.push(tag)
+ }
+ }
+ }
+ else {
+ var iterator = new TokenIterator(session, row, firstTag.column + firstTag.match.length);
+ var end = {
+ row: row,
+ column: firstTag.column
+ };
+
+ while (tag = this._readTagBackward(iterator)) {
+ if (tag.selfClosing) {
+ if (!stack.length) {
+ tag.start.column += tag.tagName.length + 2;
+ tag.end.column -= 2;
+ return Range.fromPoints(tag.start, tag.end);
+ } else
+ continue;
+ }
+
+ if (!tag.closing) {
+ this._pop(stack, tag);
+ if (stack.length == 0) {
+ tag.start.column += tag.tagName.length + 2;
+ return Range.fromPoints(tag.start, end);
+ }
+ }
+ else {
+ stack.push(tag)
+ }
+ }
+ }
+
+ };
+
+}).call(FoldMode.prototype);
+
+});;
+ (function() {
+ window.require(["ace/ace"], function(a) {
+ if (!window.ace)
+ window.ace = {};
+ for (var key in a) if (a.hasOwnProperty(key))
+ ace[key] = a[key];
+ });
+ })();
+ \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-html.js b/apps/files_texteditor/js/aceeditor/mode-html.js
index 518767d3fb6..f4f806059e4 100644
--- a/apps/files_texteditor/js/aceeditor/mode-html.js
+++ b/apps/files_texteditor/js/aceeditor/mode-html.js
@@ -1 +1 @@
-define("ace/mode/html",["require","exports","module","pilot/oop","ace/mode/text","ace/mode/javascript","ace/mode/css","ace/tokenizer","ace/mode/html_highlight_rules","ace/mode/behaviour/xml"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/text").Mode,f=a("ace/mode/javascript").Mode,g=a("ace/mode/css").Mode,h=a("ace/tokenizer").Tokenizer,i=a("ace/mode/html_highlight_rules").HtmlHighlightRules,j=a("ace/mode/behaviour/xml").XmlBehaviour,k=function(){var a=new i;this.$tokenizer=new h(a.getRules()),this.$behaviour=new j,this.$embeds=a.getEmbeds(),this.createModeDelegates({"js-":f,"css-":g})};d.inherits(k,e),function(){this.toggleCommentLines=function(a,b,c,d){return 0},this.getNextLineIndent=function(a,b,c){return this.$getIndent(b)},this.checkOutdent=function(a,b,c){return!1}}.call(k.prototype),b.Mode=k}),define("ace/mode/javascript",["require","exports","module","pilot/oop","ace/mode/text","ace/tokenizer","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/text").Mode,f=a("ace/tokenizer").Tokenizer,g=a("ace/mode/javascript_highlight_rules").JavaScriptHighlightRules,h=a("ace/mode/matching_brace_outdent").MatchingBraceOutdent,i=a("ace/range").Range,j=a("ace/worker/worker_client").WorkerClient,k=a("ace/mode/behaviour/cstyle").CstyleBehaviour,l=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h,this.$behaviour=new k};d.inherits(l,e),function(){this.toggleCommentLines=function(a,b,c,d){var e=!0,f=[],g=/^(\s*)\/\//;for(var h=c;h<=d;h++)if(!g.test(b.getLine(h))){e=!1;break}if(e){var j=new i(0,0,0,0);for(var h=c;h<=d;h++){var k=b.getLine(h),l=k.match(g);j.start.row=h,j.end.row=h,j.end.column=l[0].length,b.replace(j,l[1])}}else b.indentRows(c,d,"//")},this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=this.$tokenizer.getLineTokens(b,a),f=e.tokens,g=e.state;if(f.length&&f[f.length-1].type=="comment")return d;if(a=="start"){var h=b.match(/^.*[\{\(\[\:]\s*$/);h&&(d+=c)}else if(a=="doc-start"){if(g=="start")return"";var h=b.match(/^\s*(\/?)\*/);h&&(h[1]&&(d+=" "),d+="* ")}return d},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)},this.createWorker=function(a){var b=a.getDocument(),c=new j(["ace","pilot"],"worker-javascript.js","ace/mode/javascript_worker","JavaScriptWorker");c.call("setValue",[b.getValue()]),b.on("change",function(a){a.range={start:a.data.range.start,end:a.data.range.end},c.emit("change",a)}),c.on("jslint",function(b){var c=[];for(var d=0;d<b.data.length;d++){var e=b.data[d];e&&c.push({row:e.line-1,column:e.character-1,text:e.reason,type:"warning",lint:e})}a.setAnnotations(c)}),c.on("narcissus",function(b){a.setAnnotations([b.data])}),c.on("terminate",function(){a.clearAnnotations()});return c}}.call(l.prototype),b.Mode=l}),define("ace/mode/javascript_highlight_rules",["require","exports","module","pilot/oop","pilot/lang","ace/unicode","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(a,b,c){var d=a("pilot/oop"),e=a("pilot/lang"),f=a("ace/unicode"),g=a("ace/mode/doc_comment_highlight_rules").DocCommentHighlightRules,h=a("ace/mode/text_highlight_rules").TextHighlightRules,i=function(){var a=e.arrayToMap("break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|const|yield|import|get|set".split("|")),b=e.arrayToMap("null|Infinity|NaN|undefined".split("|")),c=e.arrayToMap("class|enum|extends|super|export|implements|private|public|interface|package|protected|static".split("|")),d="["+f.packages.L+"\\$_]["+f.packages.L+f.packages.Mn+f.packages.Mc+f.packages.Nd+f.packages.Pc+"\\$_]*\\b";this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},(new g).getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",merge:!0,regex:'["].*\\\\$',next:"qqstring"},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"string",merge:!0,regex:"['].*\\\\$",next:"qstring"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:function(d){return d=="this"?"variable.language":a.hasOwnProperty(d)?"keyword":b.hasOwnProperty(d)?"constant.language":c.hasOwnProperty(d)?"invalid.illegal":d=="debugger"?"invalid.deprecated":"identifier"},regex:d},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)",next:"regex_allowed"},{token:"lparen",regex:"[[({]",next:"regex_allowed"},{token:"rparen",regex:"[\\])}]"},{token:"keyword.operator",regex:"\\/=?",next:"regex_allowed"},{token:"comment",regex:"^#!.*$"},{token:"text",regex:"\\s+"}],regex_allowed:[{token:"string.regexp",regex:"\\/(?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*",next:"start"},{token:"text",regex:"\\s+"},{token:"empty",regex:"",next:"start"}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"string",regex:'(?:(?:\\\\.)|(?:[^"\\\\]))*?"',next:"start"},{token:"string",merge:!0,regex:".+"}],qstring:[{token:"string",regex:"(?:(?:\\\\.)|(?:[^'\\\\]))*?'",next:"start"},{token:"string",merge:!0,regex:".+"}]},this.embedRules(g,"doc-",[(new g).getEndRule("start")])};d.inherits(i,h),b.JavaScriptHighlightRules=i}),define("ace/mode/doc_comment_highlight_rules",["require","exports","module","pilot/oop","ace/mode/text_highlight_rules"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/text_highlight_rules").TextHighlightRules,f=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};d.inherits(f,e),function(){this.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},this.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}}}.call(f.prototype),b.DocCommentHighlightRules=f}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(a,b,c){var d=a("ace/range").Range,e=function(){};(function(){this.checkOutdent=function(a,b){return/^\s+$/.test(a)?/^\s*\}/.test(b):!1},this.autoOutdent=function(a,b){var c=a.getLine(b),e=c.match(/^(\s*\})/);if(!e)return 0;var f=e[1].length,g=a.findMatchingBracket({row:b,column:f});if(!g||g.row==b)return 0;var h=this.$getIndent(a.getLine(g.row));a.replace(new d(b,0,b,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""}}).call(e.prototype),b.MatchingBraceOutdent=e}),define("ace/worker/worker_client",["require","exports","module","pilot/oop","pilot/event_emitter"],function(a,b,c){var d=a("pilot/oop"),e=a("pilot/event_emitter").EventEmitter,f=function(b,c,d,e){this.callbacks=[];if(a.packaged)var f=this.$guessBasePath(),g=this.$worker=new Worker(f+c);else{var h=this.$normalizePath(a.nameToUrl("ace/worker/worker",null,"_")),g=this.$worker=new Worker(h),i={};for(var j=0;j<b.length;j++){var k=b[j],l=this.$normalizePath(a.nameToUrl(k,null,"_").replace(/.js$/,""));i[k]=l}}this.$worker.postMessage({init:!0,tlns:i,module:d,classname:e}),this.callbackId=1,this.callbacks={};var m=this;this.$worker.onerror=function(a){window.console&&console.log&&console.log(a);throw a},this.$worker.onmessage=function(a){var b=a.data;switch(b.type){case"log":window.console&&console.log&&console.log(b.data);break;case"event":m._dispatchEvent(b.name,{data:b.data});break;case"call":var c=m.callbacks[b.id];c&&(c(b.data),delete m.callbacks[b.id])}}};(function(){d.implement(this,e),this.$normalizePath=function(a){a.match(/^\w+:/)||(a=location.protocol+"//"+location.host+location.pathname+"/"+a);return a},this.$guessBasePath=function(){if(a.aceBaseUrl)return a.aceBaseUrl;var b=document.getElementsByTagName("script");for(var c=0;c<b.length;c++){var d=b[c],e=d.getAttribute("data-ace-base");if(e)return e.replace(/\/*$/,"/");var f=d.src||d.getAttribute("src");if(!f)continue;var g=f.match(/^(?:(.*\/)ace\.js|(.*\/)ace-uncompressed\.js)(?:\?|$)/);if(g)return g[1]||g[2]}return""},this.terminate=function(){this._dispatchEvent("terminate",{}),this.$worker.terminate()},this.send=function(a,b){this.$worker.postMessage({command:a,args:b})},this.call=function(a,b,c){if(c){var d=this.callbackId++;this.callbacks[d]=c,b.push(d)}this.send(a,b)},this.emit=function(a,b){this.$worker.postMessage({event:a,data:b})}}).call(f.prototype),b.WorkerClient=f}),define("ace/mode/behaviour/cstyle",["require","exports","module","pilot/oop","ace/mode/behaviour"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/behaviour").Behaviour,f=function(){this.add("braces","insertion",function(a,b,c,d,e){if(e=="{"){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"{"+g+"}",selection:!1}:{text:"{}",selection:[1,1]}}if(e=="}"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var k=d.$findOpeningBracket("}",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}else if(e=="\n"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var l=d.findMatchingBracket({row:h.row,column:h.column+1});if(!l)return!1;var m=this.getNextLineIndent(a,i.substring(0,i.length-1),d.getTabString()),n=this.$getIndent(d.doc.getLine(l.row));return{text:"\n"+m+"\n"+n,selection:[1,m.length,1,m.length]}}}return!1}),this.add("braces","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="{"){var g=d.doc.getLine(e.start.row),h=g.substring(e.end.column,e.end.column+1);if(h=="}"){e.end.column++;return e}}return!1}),this.add("parens","insertion",function(a,b,c,d,e){if(e=="("){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"("+g+")",selection:!1}:{text:"()",selection:[1,1]}}if(e==")"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j==")"){var k=d.$findOpeningBracket(")",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}return!1}),this.add("parens","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="("){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h==")"){e.end.column++;return e}}return!1}),this.add("string_dquotes","insertion",function(a,b,c,d,e){if(e=='"'){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);if(g!=="")return{text:'"'+g+'"',selection:!1};var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column-1,h.column);if(j=="\\")return!1;var k=d.getTokens(f.start.row,f.start.row)[0].tokens,l=0,m,n=-1;for(var o=0;o<k.length;o++){m=k[o],m.type=="string"?n=-1:n<0&&(n=m.value.indexOf('"'));if(m.value.length+l>f.start.column)break;l+=k[o].value.length}if(!m||n<0&&m.type!=="comment"&&(m.type!=="string"||f.start.column!==m.value.length+l-1&&m.value.lastIndexOf('"')===m.value.length-1))return{text:'""',selection:[1,1]};if(m&&m.type==="string"){var p=i.substring(h.column,h.column+1);if(p=='"')return{text:"",selection:[1,1]}}}return!1}),this.add("string_dquotes","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=='"'){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h=='"'){e.end.column++;return e}}return!1})};d.inherits(f,e),b.CstyleBehaviour=f}),define("ace/mode/css",["require","exports","module","pilot/oop","ace/mode/text","ace/tokenizer","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/text").Mode,f=a("ace/tokenizer").Tokenizer,g=a("ace/mode/css_highlight_rules").CssHighlightRules,h=a("ace/mode/matching_brace_outdent").MatchingBraceOutdent,i=a("ace/worker/worker_client").WorkerClient,j=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h};d.inherits(j,e),function(){this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=this.$tokenizer.getLineTokens(b,a).tokens;if(e.length&&e[e.length-1].type=="comment")return d;var f=b.match(/^.*\{\s*$/);f&&(d+=c);return d},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)},this.createWorker=function(a){var b=a.getDocument(),c=new i(["ace","pilot"],"worker-css.js","ace/mode/css_worker","Worker");c.call("setValue",[b.getValue()]),b.on("change",function(a){a.range={start:a.data.range.start,end:a.data.range.end},c.emit("change",a)}),c.on("csslint",function(b){var c=[];b.data.forEach(function(a){c.push({row:a.line-1,column:a.col-1,text:a.message,type:a.type,lint:a})}),a.setAnnotations(c)})}}.call(j.prototype),b.Mode=j}),define("ace/mode/css_highlight_rules",["require","exports","module","pilot/oop","pilot/lang","ace/mode/text_highlight_rules"],function(a,b,c){var d=a("pilot/oop"),e=a("pilot/lang"),f=a("ace/mode/text_highlight_rules").TextHighlightRules,g=function(){function g(a){var b=[],c=a.split("");for(var d=0;d<c.length;d++)b.push("[",c[d].toLowerCase(),c[d].toUpperCase(),"]");return b.join("")}var a=e.arrayToMap("-moz-box-sizing|-webkit-box-sizing|appearance|azimuth|background-attachment|background-color|background-image|background-position|background-repeat|background|border-bottom-color|border-bottom-style|border-bottom-width|border-bottom|border-collapse|border-color|border-left-color|border-left-style|border-left-width|border-left|border-right-color|border-right-style|border-right-width|border-right|border-spacing|border-style|border-top-color|border-top-style|border-top-width|border-top|border-width|border|bottom|box-sizing|caption-side|clear|clip|color|content|counter-increment|counter-reset|cue-after|cue-before|cue|cursor|direction|display|elevation|empty-cells|float|font-family|font-size-adjust|font-size|font-stretch|font-style|font-variant|font-weight|font|height|left|letter-spacing|line-height|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|marker-offset|margin|marks|max-height|max-width|min-height|min-width|-moz-border-radius|opacity|orphans|outline-color|outline-style|outline-width|outline|overflow|overflow-x|overflow-y|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page|pause-after|pause-before|pause|pitch-range|pitch|play-during|position|quotes|richness|right|size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|stress|table-layout|text-align|text-decoration|text-indent|text-shadow|text-transform|top|unicode-bidi|vertical-align|visibility|voice-family|volume|white-space|widows|width|word-spacing|z-index".split("|")),b=e.arrayToMap("rgb|rgba|url|attr|counter|counters".split("|")),c=e.arrayToMap("absolute|all-scroll|always|armenian|auto|baseline|below|bidi-override|block|bold|bolder|border-box|both|bottom|break-all|break-word|capitalize|center|char|circle|cjk-ideographic|col-resize|collapse|content-box|crosshair|dashed|decimal-leading-zero|decimal|default|disabled|disc|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ellipsis|fixed|georgian|groove|hand|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|inactive|inherit|inline-block|inline|inset|inside|inter-ideograph|inter-word|italic|justify|katakana-iroha|katakana|keep-all|left|lighter|line-edge|line-through|line|list-item|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|medium|middle|move|n-resize|ne-resize|newspaper|no-drop|no-repeat|nw-resize|none|normal|not-allowed|nowrap|oblique|outset|outside|overline|pointer|progress|relative|repeat-x|repeat-y|repeat|right|ridge|row-resize|rtl|s-resize|scroll|se-resize|separate|small-caps|solid|square|static|strict|super|sw-resize|table-footer-group|table-header-group|tb-rl|text-bottom|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|zero".split("|")),d=e.arrayToMap("aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow".split("|")),f="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))",h=[{token:"comment",merge:!0,regex:"\\/\\*",next:"ruleset_comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"constant.numeric",regex:f+g("em")},{token:"constant.numeric",regex:f+g("ex")},{token:"constant.numeric",regex:f+g("px")},{token:"constant.numeric",regex:f+g("cm")},{token:"constant.numeric",regex:f+g("mm")},{token:"constant.numeric",regex:f+g("in")},{token:"constant.numeric",regex:f+g("pt")},{token:"constant.numeric",regex:f+g("pc")},{token:"constant.numeric",regex:f+g("deg")},{token:"constant.numeric",regex:f+g("rad")},{token:"constant.numeric",regex:f+g("grad")},{token:"constant.numeric",regex:f+g("ms")},{token:"constant.numeric",regex:f+g("s")},{token:"constant.numeric",regex:f+g("hz")},{token:"constant.numeric",regex:f+g("khz")},{token:"constant.numeric",regex:f+"%"},{token:"constant.numeric",regex:f},{token:"constant.numeric",regex:"#[a-fA-F0-9]{6}"},{token:"constant.numeric",regex:"#[a-fA-F0-9]{3}"},{token:function(e){return a.hasOwnProperty(e.toLowerCase())?"support.type":b.hasOwnProperty(e.toLowerCase())?"support.function":c.hasOwnProperty(e.toLowerCase())?"support.constant":d.hasOwnProperty(e.toLowerCase())?"support.constant.color":"text"},regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"}],i=e.copyArray(h);i.unshift({token:"rparen",regex:"\\}",next:"start"});var j=e.copyArray(h);j.unshift({token:"rparen",regex:"\\}",next:"media"});var k=[{token:"comment",merge:!0,regex:".+"}],l=e.copyArray(k);l.unshift({token:"comment",regex:".*?\\*\\/",next:"start"});var m=e.copyArray(k);m.unshift({token:"comment",regex:".*?\\*\\/",next:"media"});var n=e.copyArray(k);n.unshift({token:"comment",regex:".*?\\*\\/",next:"ruleset"}),this.$rules={start:[{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"lparen",regex:"\\{",next:"ruleset"},{token:"string",regex:"@media.*?{",next:"media"},{token:"keyword",regex:"#[a-zA-Z0-9-_]+"},{token:"variable",regex:"\\.[a-zA-Z0-9-_]+"},{token:"string",regex:":[a-zA-Z0-9-_]+"},{token:"constant",regex:"[a-zA-Z0-9-_]+"}],media:[{token:"comment",merge:!0,regex:"\\/\\*",next:"media_comment"},{token:"lparen",regex:"\\{",next:"media_ruleset"},{token:"string",regex:"\\}",next:"start"},{token:"keyword",regex:"#[a-zA-Z0-9-_]+"},{token:"variable",regex:"\\.[a-zA-Z0-9-_]+"},{token:"string",regex:":[a-zA-Z0-9-_]+"},{token:"constant",regex:"[a-zA-Z0-9-_]+"}],comment:l,ruleset:i,ruleset_comment:n,media_ruleset:j,media_comment:m}};d.inherits(g,f),b.CssHighlightRules=g}),define("ace/mode/html_highlight_rules",["require","exports","module","pilot/oop","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/text_highlight_rules"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/css_highlight_rules").CssHighlightRules,f=a("ace/mode/javascript_highlight_rules").JavaScriptHighlightRules,g=a("ace/mode/text_highlight_rules").TextHighlightRules,h=function(){function b(a,b){return[{token:"string",merge:!0,regex:".*"+a,next:b},{token:"string",merge:!0,regex:".+"}]}function a(a){return[{token:"string",regex:'".*?"'},{token:"string",merge:!0,regex:'["].*$',next:a+"-qqstring"},{token:"string",regex:"'.*?'"},{token:"string",merge:!0,regex:"['].*$",next:a+"-qstring"}]}this.$rules={start:[{token:"text",merge:!0,regex:"<\\!\\[CDATA\\[",next:"cdata"},{token:"xml_pe",regex:"<\\?.*?\\?>"},{token:"comment",merge:!0,regex:"<\\!--",next:"comment"},{token:"text",regex:"<(?=s*script)",next:"script"},{token:"text",regex:"<(?=s*style)",next:"css"},{token:"text",regex:"<\\/?",next:"tag"},{token:"text",regex:"\\s+"},{token:"text",regex:"[^<]+"}],script:[{token:"text",regex:">",next:"js-start"},{token:"keyword",regex:"[-_a-zA-Z0-9:]+"},{token:"text",regex:"\\s+"}].concat(a("script")),css:[{token:"text",regex:">",next:"css-start"},{token:"keyword",regex:"[-_a-zA-Z0-9:]+"},{token:"text",regex:"\\s+"}].concat(a("style")),tag:[{token:"text",regex:">",next:"start"},{token:"keyword",regex:"[-_a-zA-Z0-9:]+"},{token:"text",regex:"\\s+"}].concat(a("tag")),"style-qstring":b("'","style"),"style-qqstring":b('"',"style"),"script-qstring":b("'","script"),"script-qqstring":b('"',"script"),"tag-qstring":b("'","tag"),"tag-qqstring":b('"',"tag"),cdata:[{token:"text",regex:"\\]\\]>",next:"start"},{token:"text",merge:!0,regex:"\\s+"},{token:"text",merge:!0,regex:".+"}],comment:[{token:"comment",regex:".*?-->",next:"start"},{token:"comment",merge:!0,regex:".+"}]},this.embedRules(f,"js-",[{token:"comment",regex:"\\/\\/.*(?=<\\/script>)",next:"tag"},{token:"text",regex:"<\\/(?=script)",next:"tag"}]),this.embedRules(e,"css-",[{token:"text",regex:"<\\/(?=style)",next:"tag"}])};d.inherits(h,g),b.HtmlHighlightRules=h}),define("ace/mode/behaviour/xml",["require","exports","module","pilot/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/behaviour").Behaviour,f=a("ace/mode/behaviour/cstyle").CstyleBehaviour,g=function(){this.inherit(f,["string_dquotes"]),this.add("brackets","insertion",function(a,b,c,d,e){if(e=="<"){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?!1:{text:"<>",selection:[1,1]}}if(e==">"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j==">")return{text:"",selection:[1,1]}}else if(e=="\n"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),k=i.substring(h.column,h.column+2);if(k=="</"){var l=this.$getIndent(d.doc.getLine(h.row))+d.getTabString(),m=this.$getIndent(d.doc.getLine(h.row));return{text:"\n"+l+"\n"+m,selection:[1,l.length,1,l.length]}}}return!1})};d.inherits(g,e),b.XmlBehaviour=g}) \ No newline at end of file
+define("ace/mode/html",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript","ace/mode/css","ace/tokenizer","ace/mode/html_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/html"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text").Mode,f=a("./javascript").Mode,g=a("./css").Mode,h=a("../tokenizer").Tokenizer,i=a("./html_highlight_rules").HtmlHighlightRules,j=a("./behaviour/xml").XmlBehaviour,k=a("./folding/html").FoldMode,l=function(){var a=new i;this.$tokenizer=new h(a.getRules()),this.$behaviour=new j,this.$embeds=a.getEmbeds(),this.createModeDelegates({"js-":f,"css-":g}),this.foldingRules=new k};d.inherits(l,e),function(){this.toggleCommentLines=function(a,b,c,d){return 0},this.getNextLineIndent=function(a,b,c){return this.$getIndent(b)},this.checkOutdent=function(a,b,c){return!1}}.call(l.prototype),b.Mode=l}),define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text").Mode,f=a("../tokenizer").Tokenizer,g=a("./javascript_highlight_rules").JavaScriptHighlightRules,h=a("./matching_brace_outdent").MatchingBraceOutdent,i=a("../range").Range,j=a("../worker/worker_client").WorkerClient,k=a("./behaviour/cstyle").CstyleBehaviour,l=a("./folding/cstyle").FoldMode,m=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h,this.$behaviour=new k,this.foldingRules=new l};d.inherits(m,e),function(){this.toggleCommentLines=function(a,b,c,d){var e=!0,f=/^(\s*)\/\//;for(var g=c;g<=d;g++)if(!f.test(b.getLine(g))){e=!1;break}if(e){var h=new i(0,0,0,0);for(var g=c;g<=d;g++){var j=b.getLine(g),k=j.match(f);h.start.row=g,h.end.row=g,h.end.column=k[0].length,b.replace(h,k[1])}}else b.indentRows(c,d,"//")},this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=this.$tokenizer.getLineTokens(b,a),f=e.tokens,g=e.state;if(f.length&&f[f.length-1].type=="comment")return d;if(a=="start"||a=="regex_allowed"){var h=b.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);h&&(d+=c)}else if(a=="doc-start"){if(g=="start"||a=="regex_allowed")return"";var h=b.match(/^\s*(\/?)\*/);h&&(h[1]&&(d+=" "),d+="* ")}return d},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)},this.createWorker=function(a){var b=new j(["ace"],"worker-javascript.js","ace/mode/javascript_worker","JavaScriptWorker");return b.attachToDocument(a.getDocument()),b.on("jslint",function(b){var c=[];for(var d=0;d<b.data.length;d++){var e=b.data[d];e&&c.push({row:e.line-1,column:e.character-1,text:e.reason,type:"warning",lint:e})}a.setAnnotations(c)}),b.on("narcissus",function(b){a.setAnnotations([b.data])}),b.on("terminate",function(){a.clearAnnotations()}),b}}.call(m.prototype),b.Mode=m}),define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/unicode","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("../lib/lang"),f=a("../unicode"),g=a("./doc_comment_highlight_rules").DocCommentHighlightRules,h=a("./text_highlight_rules").TextHighlightRules,i=function(){var a=e.arrayToMap("Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document".split("|")),b=e.arrayToMap("break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|const|yield|import|get|set".split("|")),c="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield",d=e.arrayToMap("__parent__|__count__|escape|unescape|with|__proto__".split("|")),h=e.arrayToMap("const|let|var|function".split("|")),i=e.arrayToMap("null|Infinity|NaN|undefined".split("|")),j=e.arrayToMap("class|enum|extends|super|export|implements|private|public|interface|package|protected|static".split("|")),k="["+f.packages.L+"\\$_]["+f.packages.L+f.packages.Mn+f.packages.Mc+f.packages.Nd+f.packages.Pc+"\\$_]*\\b";this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},(new g).getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",merge:!0,regex:'["].*\\\\$',next:"qqstring"},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"string",merge:!0,regex:"['].*\\\\$",next:"qstring"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:["keyword.definition","text","entity.name.function"],regex:"(function)(\\s+)("+k+")"},{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:"keyword",regex:"(?:"+c+")\\b",next:"regex_allowed"},{token:function(c){return a.hasOwnProperty(c)?"variable.language":d.hasOwnProperty(c)?"invalid.deprecated":h.hasOwnProperty(c)?"keyword.definition":b.hasOwnProperty(c)?"keyword":i.hasOwnProperty(c)?"constant.language":j.hasOwnProperty(c)?"invalid.illegal":c=="debugger"?"invalid.deprecated":"identifier"},regex:k},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)",next:"regex_allowed"},{token:"punctuation.operator",regex:"\\?|\\:|\\,|\\;|\\.",next:"regex_allowed"},{token:"paren.lparen",regex:"[[({]",next:"regex_allowed"},{token:"paren.rparen",regex:"[\\])}]"},{token:"keyword.operator",regex:"\\/=?",next:"regex_allowed"},{token:"comment",regex:"^#!.*$"},{token:"text",regex:"\\s+"}],regex_allowed:[{token:"comment",merge:!0,regex:"\\/\\*",next:"comment_regex_allowed"},{token:"comment",regex:"\\/\\/.*$"},{token:"string.regexp",regex:"\\/",next:"regex",merge:!0},{token:"text",regex:"\\s+"},{token:"empty",regex:"",next:"start"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)",next:"regex"},{token:"string.regexp",regex:"/\\w*",next:"start",merge:!0},{token:"string.regexp",regex:"[^\\\\/\\[]+",next:"regex",merge:!0},{token:"string.regexp.charachterclass",regex:"\\[",next:"regex_character_class",merge:!0},{token:"empty",regex:"",next:"start"}],regex_character_class:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)",next:"regex_character_class"},{token:"string.regexp.charachterclass",regex:"]",next:"regex",merge:!0},{token:"string.regexp.charachterclass",regex:"[^\\\\\\]]+",next:"regex_character_class",merge:!0},{token:"empty",regex:"",next:"start"}],comment_regex_allowed:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"regex_allowed"},{token:"comment",merge:!0,regex:".+"}],comment:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"string",regex:'(?:(?:\\\\.)|(?:[^"\\\\]))*?"',next:"start"},{token:"string",merge:!0,regex:".+"}],qstring:[{token:"string",regex:"(?:(?:\\\\.)|(?:[^'\\\\]))*?'",next:"start"},{token:"string",merge:!0,regex:".+"}]},this.embedRules(g,"doc-",[(new g).getEndRule("start")])};d.inherits(i,h),b.JavaScriptHighlightRules=i}),define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text_highlight_rules").TextHighlightRules,f=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};d.inherits(f,e),function(){this.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},this.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}}}.call(f.prototype),b.DocCommentHighlightRules=f}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(a,b,c){"use strict";var d=a("../range").Range,e=function(){};((function(){this.checkOutdent=function(a,b){return/^\s+$/.test(a)?/^\s*\}/.test(b):!1},this.autoOutdent=function(a,b){var c=a.getLine(b),e=c.match(/^(\s*\})/);if(!e)return 0;var f=e[1].length,g=a.findMatchingBracket({row:b,column:f});if(!g||g.row==b)return 0;var h=this.$getIndent(a.getLine(g.row));a.replace(new d(b,0,b,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""}})).call(e.prototype),b.MatchingBraceOutdent=e}),define("ace/worker/worker_client",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("../lib/event_emitter").EventEmitter,f=function(b,d,e,f){this.changeListener=this.changeListener.bind(this);if(c.packaged){var g=this.$guessBasePath();this.$worker=new Worker(g+d)}else{var h=this.$normalizePath(a.nameToUrl("ace/worker/worker",null,"_"));this.$worker=new Worker(h);var i={};for(var j=0;j<b.length;j++){var k=b[j],l=this.$normalizePath(a.nameToUrl(k,null,"_").replace(/.js$/,""));i[k]=l}}this.$worker.postMessage({init:!0,tlns:i,module:e,classname:f}),this.callbackId=1,this.callbacks={};var m=this;this.$worker.onerror=function(a){throw window.console&&console.log&&console.log(a),a},this.$worker.onmessage=function(a){var b=a.data;switch(b.type){case"log":window.console&&console.log&&console.log(b.data);break;case"event":m._emit(b.name,{data:b.data});break;case"call":var c=m.callbacks[b.id];c&&(c(b.data),delete m.callbacks[b.id])}}};((function(){d.implement(this,e),this.$normalizePath=function(a){return a=a.replace(/^[a-z]+:\/\/[^\/]+\//,""),a=location.protocol+"//"+location.host+(a.charAt(0)=="/"?"":location.pathname.replace(/\/[^\/]*$/,""))+"/"+a.replace(/^[\/]+/,""),a},this.$guessBasePath=function(){if(a.aceBaseUrl)return a.aceBaseUrl;var b=document.getElementsByTagName("script");for(var c=0;c<b.length;c++){var d=b[c],e=d.getAttribute("data-ace-base");if(e)return e.replace(/\/*$/,"/");var f=d.src||d.getAttribute("src");if(!f)continue;var g=f.match(/^(?:(.*\/)ace\.js|(.*\/)ace(-uncompressed)?(-noconflict)?\.js)(?:\?|$)/);if(g)return g[1]||g[2]}return""},this.terminate=function(){this._emit("terminate",{}),this.$worker.terminate(),this.$worker=null,this.$doc.removeEventListener("change",this.changeListener),this.$doc=null},this.send=function(a,b){this.$worker.postMessage({command:a,args:b})},this.call=function(a,b,c){if(c){var d=this.callbackId++;this.callbacks[d]=c,b.push(d)}this.send(a,b)},this.emit=function(a,b){try{this.$worker.postMessage({event:a,data:{data:b.data}})}catch(c){}},this.attachToDocument=function(a){this.$doc&&this.terminate(),this.$doc=a,this.call("setValue",[a.getValue()]),a.on("change",this.changeListener)},this.changeListener=function(a){a.range={start:a.data.range.start,end:a.data.range.end},this.emit("change",a)}})).call(f.prototype),b.WorkerClient=f}),define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("../behaviour").Behaviour,f=function(){this.add("braces","insertion",function(a,b,c,d,e){if(e=="{"){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"{"+g+"}",selection:!1}:{text:"{}",selection:[1,1]}}if(e=="}"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var k=d.$findOpeningBracket("}",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}else if(e=="\n"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var l=d.findMatchingBracket({row:h.row,column:h.column+1});if(!l)return null;var m=this.getNextLineIndent(a,i.substring(0,i.length-1),d.getTabString()),n=this.$getIndent(d.doc.getLine(l.row));return{text:"\n"+m+"\n"+n,selection:[1,m.length,1,m.length]}}}}),this.add("braces","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="{"){var g=d.doc.getLine(e.start.row),h=g.substring(e.end.column,e.end.column+1);if(h=="}")return e.end.column++,e}}),this.add("parens","insertion",function(a,b,c,d,e){if(e=="("){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"("+g+")",selection:!1}:{text:"()",selection:[1,1]}}if(e==")"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j==")"){var k=d.$findOpeningBracket(")",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="("){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h==")")return e.end.column++,e}}),this.add("string_dquotes","insertion",function(a,b,c,d,e){if(e=='"'){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);if(g!=="")return{text:'"'+g+'"',selection:!1};var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column-1,h.column);if(j=="\\")return null;var k=d.getTokens(f.start.row,f.start.row)[0].tokens,l=0,m,n=-1;for(var o=0;o<k.length;o++){m=k[o],m.type=="string"?n=-1:n<0&&(n=m.value.indexOf('"'));if(m.value.length+l>f.start.column)break;l+=k[o].value.length}if(!m||n<0&&m.type!=="comment"&&(m.type!=="string"||f.start.column!==m.value.length+l-1&&m.value.lastIndexOf('"')===m.value.length-1))return{text:'""',selection:[1,1]};if(m&&m.type==="string"){var p=i.substring(h.column,h.column+1);if(p=='"')return{text:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=='"'){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h=='"')return e.end.column++,e}})};d.inherits(f,e),b.CstyleBehaviour=f}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("../../range").Range,f=a("./fold_mode").FoldMode,g=b.FoldMode=function(){};d.inherits(g,f),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(a,b,c){var d=a.getLine(c),f=d.match(this.foldingStartMarker);if(f){var g=f.index;if(f[1])return this.openingBracketBlock(a,f[1],c,g);var h=a.getCommentFoldRange(c,g+f[0].length);return h.end.column-=2,h}if(b!=="markbeginend")return;var f=d.match(this.foldingStopMarker);if(f){var g=f.index+f[0].length;if(f[2]){var h=a.getCommentFoldRange(c,g);return h.end.column-=2,h}var i={row:c,column:g},j=a.$findOpeningBracket(f[1],i);if(!j)return;return j.column++,i.column--,e.fromPoints(j,i)}}}.call(g.prototype)}),define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"],function(a,b,c){"use strict";var d=a("../../range").Range,e=b.FoldMode=function(){};((function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(a,b,c){var d=a.getLine(c);return this.foldingStartMarker.test(d)?"start":b=="markbeginend"&&this.foldingStopMarker&&this.foldingStopMarker.test(d)?"end":""},this.getFoldWidgetRange=function(a,b,c){return null},this.indentationBlock=function(a,b,c){var e=/^\s*/,f=b,g=b,h=a.getLine(b),i=c||h.length,j=h.match(e)[0].length,k=a.getLength();while(++b<k){h=a.getLine(b);var l=h.match(e)[0].length;if(l==h.length)continue;if(l<=j)break;g=b}if(g>f){var m=a.getLine(g).length;return new d(f,i,g,m)}},this.openingBracketBlock=function(a,b,c,e){var f={row:c,column:e+1},g=a.$findClosingBracket(b,f);if(!g)return;var h=a.foldWidgets[g.row];return h==null&&(h=this.getFoldWidget(a,g.row)),h=="start"&&(g.row--,g.column=a.getLine(g.row).length),d.fromPoints(f,g)}})).call(e.prototype)}),define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/folding/cstyle"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text").Mode,f=a("../tokenizer").Tokenizer,g=a("./css_highlight_rules").CssHighlightRules,h=a("./matching_brace_outdent").MatchingBraceOutdent,i=a("../worker/worker_client").WorkerClient,j=a("./folding/cstyle").FoldMode,k=function(){this.$tokenizer=new f((new g).getRules(),"i"),this.$outdent=new h,this.foldingRules=new j};d.inherits(k,e),function(){this.foldingRules="cStyle",this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=this.$tokenizer.getLineTokens(b,a).tokens;if(e.length&&e[e.length-1].type=="comment")return d;var f=b.match(/^.*\{\s*$/);return f&&(d+=c),d},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)},this.createWorker=function(a){var b=new i(["ace"],"worker-css.js","ace/mode/css_worker","Worker");return b.attachToDocument(a.getDocument()),b.on("csslint",function(b){var c=[];b.data.forEach(function(a){c.push({row:a.line-1,column:a.col-1,text:a.message,type:a.type,lint:a})}),a.setAnnotations(c)}),b}}.call(k.prototype),b.Mode=k}),define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("../lib/lang"),f=a("./text_highlight_rules").TextHighlightRules,g=function(){var a=e.arrayToMap("-moz-appearance|-moz-box-sizing|-webkit-box-sizing|-moz-outline-radius|-moz-transform|-webkit-transform|appearance|azimuth|background-attachment|background-color|background-image|background-origin|background-position|background-repeat|background|border-bottom-color|border-bottom-style|border-bottom-width|border-bottom|border-collapse|border-color|border-left-color|border-left-style|border-left-width|border-left|border-right-color|border-right-style|border-right-width|border-right|border-spacing|border-style|border-top-color|border-top-style|border-top-width|border-top|border-width|border|bottom|box-sizing|caption-side|clear|clip|color|content|counter-increment|counter-reset|cue-after|cue-before|cue|cursor|direction|display|elevation|empty-cells|float|font-family|font-size-adjust|font-size|font-stretch|font-style|font-variant|font-weight|font|height|left|letter-spacing|line-height|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|marker-offset|margin|marks|max-height|max-width|min-height|min-width|-moz-border-radius|opacity|orphans|outline-color|outline-offset|outline-radius|outline-style|outline-width|outline|overflow|overflow-x|overflow-y|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page|pause-after|pause-before|pause|pitch-range|pitch|play-during|pointer-events|position|quotes|resize|richness|right|size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|stress|table-layout|text-align|text-decoration|text-indent|text-shadow|text-transform|top|transform|unicode-bidi|vertical-align|visibility|voice-family|volume|white-space|widows|width|word-spacing|z-index".split("|")),b=e.arrayToMap("rgb|rgba|url|attr|counter|counters".split("|")),c=e.arrayToMap("absolute|all-scroll|always|armenian|auto|baseline|below|bidi-override|block|bold|bolder|border-box|both|bottom|break-all|break-word|capitalize|center|char|circle|cjk-ideographic|col-resize|collapse|content-box|crosshair|dashed|decimal-leading-zero|decimal|default|disabled|disc|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ellipsis|fixed|georgian|groove|hand|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|inactive|inherit|inline-block|inline|inset|inside|inter-ideograph|inter-word|italic|justify|katakana-iroha|katakana|keep-all|left|lighter|line-edge|line-through|line|list-item|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|medium|middle|move|n-resize|ne-resize|newspaper|no-drop|no-repeat|nw-resize|none|normal|not-allowed|nowrap|oblique|outset|outside|overline|pointer|progress|relative|repeat-x|repeat-y|repeat|right|ridge|row-resize|rtl|s-resize|scroll|se-resize|separate|small-caps|solid|square|static|strict|super|sw-resize|table-footer-group|table-header-group|tb-rl|text-bottom|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|zero".split("|")),d=e.arrayToMap("aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow".split("|")),f="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))",g=[{token:"comment",merge:!0,regex:"\\/\\*",next:"ruleset_comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"constant.numeric",regex:f+"(?:em|ex|px|cm|mm|in|pt|pc|deg|rad|grad|ms|s|hz|khz|%)"},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:function(e){return a.hasOwnProperty(e.toLowerCase())?"support.type":b.hasOwnProperty(e.toLowerCase())?"support.function":c.hasOwnProperty(e.toLowerCase())?"support.constant":d.hasOwnProperty(e.toLowerCase())?"support.constant.color":"text"},regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"}],h=e.copyArray(g);h.unshift({token:"paren.rparen",regex:"\\}",next:"start"});var i=e.copyArray(g);i.unshift({token:"paren.rparen",regex:"\\}",next:"media"});var j=[{token:"comment",merge:!0,regex:".+"}],k=e.copyArray(j);k.unshift({token:"comment",regex:".*?\\*\\/",next:"start"});var l=e.copyArray(j);l.unshift({token:"comment",regex:".*?\\*\\/",next:"media"});var m=e.copyArray(j);m.unshift({token:"comment",regex:".*?\\*\\/",next:"ruleset"}),this.$rules={start:[{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"paren.lparen",regex:"\\{",next:"ruleset"},{token:"string",regex:"@.*?{",next:"media"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"}],media:[{token:"comment",merge:!0,regex:"\\/\\*",next:"media_comment"},{token:"paren.lparen",regex:"\\{",next:"media_ruleset"},{token:"string",regex:"\\}",next:"start"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"}],comment:k,ruleset:h,ruleset_comment:m,media_ruleset:i,media_comment:l}};d.inherits(g,f),b.CssHighlightRules=g}),define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_util","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./css_highlight_rules").CssHighlightRules,f=a("./javascript_highlight_rules").JavaScriptHighlightRules,g=a("./xml_util"),h=a("./text_highlight_rules").TextHighlightRules,i=function(){this.$rules={start:[{token:"text",merge:!0,regex:"<\\!\\[CDATA\\[",next:"cdata"},{token:"xml_pe",regex:"<\\?.*?\\?>"},{token:"comment",merge:!0,regex:"<\\!--",next:"comment"},{token:"meta.tag",regex:"<(?=s*script\\b)",next:"script"},{token:"meta.tag",regex:"<(?=s*style\\b)",next:"css"},{token:"meta.tag",regex:"<\\/?",next:"tag"},{token:"text",regex:"\\s+"},{token:"text",regex:"[^<]+"}],cdata:[{token:"text",regex:"\\]\\]>",next:"start"},{token:"text",merge:!0,regex:"\\s+"},{token:"text",merge:!0,regex:".+"}],comment:[{token:"comment",regex:".*?-->",next:"start"},{token:"comment",merge:!0,regex:".+"}]},g.tag(this.$rules,"tag","start"),g.tag(this.$rules,"css","css-start"),g.tag(this.$rules,"script","js-start"),this.embedRules(f,"js-",[{token:"comment",regex:"\\/\\/.*(?=<\\/script>)",next:"tag"},{token:"meta.tag",regex:"<\\/(?=script)",next:"tag"}]),this.embedRules(e,"css-",[{token:"meta.tag",regex:"<\\/(?=style)",next:"tag"}])};d.inherits(i,h),b.HtmlHighlightRules=i}),define("ace/mode/xml_util",["require","exports","module","ace/lib/lang"],function(a,b,c){function g(a){return[{token:"string",regex:'".*?"'},{token:"string",merge:!0,regex:'["].*',next:a+"-qqstring"},{token:"string",regex:"'.*?'"},{token:"string",merge:!0,regex:"['].*",next:a+"-qstring"}]}function h(a,b){return[{token:"string",merge:!0,regex:".*?"+a,next:b},{token:"string",merge:!0,regex:".+"}]}"use strict";var d=a("../lib/lang"),e=d.arrayToMap("button|form|input|label|select|textarea".split("|")),f=d.arrayToMap("table|tbody|td|tfoot|th|tr".split("|"));b.tag=function(a,b,c){a[b]=[{token:"text",regex:"\\s+"},{token:function(a){return a==="a"?"meta.tag.anchor":a==="img"?"meta.tag.image":a==="script"?"meta.tag.script":a==="style"?"meta.tag.style":e.hasOwnProperty(a.toLowerCase())?"meta.tag.form":f.hasOwnProperty(a.toLowerCase())?"meta.tag.table":"meta.tag"},merge:!0,regex:"[-_a-zA-Z0-9:!]+",next:b+"embed-attribute-list"},{token:"empty",regex:"",next:b+"embed-attribute-list"}],a[b+"-qstring"]=h("'",b+"embed-attribute-list"),a[b+"-qqstring"]=h('"',b+"embed-attribute-list"),a[b+"embed-attribute-list"]=[{token:"meta.tag",merge:!0,regex:"/?>",next:c},{token:"keyword.operator",regex:"="},{token:"entity.other.attribute-name",regex:"[-_a-zA-Z0-9:]+"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"text",regex:"\\s+"}].concat(g(b))}}),define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("../behaviour").Behaviour,f=a("./cstyle").CstyleBehaviour,g=function(){this.inherit(f,["string_dquotes"]),this.add("brackets","insertion",function(a,b,c,d,e){if(e=="<"){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?!1:{text:"<>",selection:[1,1]}}if(e==">"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j==">")return{text:"",selection:[1,1]}}else if(e=="\n"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),k=i.substring(h.column,h.column+2);if(k=="</"){var l=this.$getIndent(d.doc.getLine(h.row))+d.getTabString(),m=this.$getIndent(d.doc.getLine(h.row));return{text:"\n"+l+"\n"+m,selection:[1,l.length,1,l.length]}}}})};d.inherits(g,e),b.XmlBehaviour=g}),define("ace/mode/folding/html",["require","exports","module","ace/lib/oop","ace/mode/folding/mixed","ace/mode/folding/xml","ace/mode/folding/cstyle"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("./mixed").FoldMode,f=a("./xml").FoldMode,g=a("./cstyle").FoldMode,h=b.FoldMode=function(){e.call(this,new f({area:1,base:1,br:1,col:1,command:1,embed:1,hr:1,img:1,input:1,keygen:1,link:1,meta:1,param:1,source:1,track:1,wbr:1,li:1,dt:1,dd:1,p:1,rt:1,rp:1,optgroup:1,option:1,colgroup:1,td:1,th:1}),{"js-":new g,"css-":new g})};d.inherits(h,e)}),define("ace/mode/folding/mixed",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("./fold_mode").FoldMode,f=b.FoldMode=function(a,b){this.defaultMode=a,this.subModes=b};d.inherits(f,e),function(){this.$getMode=function(a){for(var b in this.subModes)if(a.indexOf(b)===0)return this.subModes[b];return null},this.$tryMode=function(a,b,c,d){var e=this.$getMode(a);return e?e.getFoldWidget(b,c,d):""},this.getFoldWidget=function(a,b,c){return this.$tryMode(a.getState(c-1),a,b,c)||this.$tryMode(a.getState(c),a,b,c)||this.defaultMode.getFoldWidget(a,b,c)},this.getFoldWidgetRange=function(a,b,c){var d=this.$getMode(a.getState(c-1));if(!d||!d.getFoldWidget(a,b,c))d=this.$getMode(a.getState(c));if(!d||!d.getFoldWidget(a,b,c))d=this.defaultMode;return d.getFoldWidgetRange(a,b,c)}}.call(f.prototype)}),define("ace/mode/folding/xml",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/range","ace/mode/folding/fold_mode","ace/token_iterator"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("../../lib/lang"),f=a("../../range").Range,g=a("./fold_mode").FoldMode,h=a("../../token_iterator").TokenIterator,i=b.FoldMode=function(a){g.call(this),this.voidElements=a||{}};d.inherits(i,g),function(){this.getFoldWidget=function(a,b,c){var d=this._getFirstTagInLine(a,c);return d.closing?b=="markbeginend"?"end":"":!d.tagName||this.voidElements[d.tagName.toLowerCase()]?"":d.selfClosing?"":d.value.indexOf("/"+d.tagName)!==-1?"":"start"},this._getFirstTagInLine=function(a,b){var c=a.getTokens(b,b)[0].tokens,d="";for(var f=0;f<c.length;f++){var g=c[f];g.type.indexOf("meta.tag")===0?d+=g.value:d+=e.stringRepeat(" ",g.value.length)}return this._parseTag(d)},this.tagRe=/^(\s*)(<?(\/?)([-_a-zA-Z0-9:!]*)\s*(\/?)>?)/,this._parseTag=function(a){var b=this.tagRe.exec(a),c=this.tagRe.lastIndex||0;return this.tagRe.lastIndex=0,{value:a,match:b?b[2]:"",closing:b?!!b[3]:!1,selfClosing:b?!!b[5]||b[2]=="/>":!1,tagName:b?b[4]:"",column:b[1]?c+b[1].length:c}},this._readTagForward=function(a){var b=a.getCurrentToken();if(!b)return null;var c="",d;do if(b.type.indexOf("meta.tag")===0){if(!d)var d={row:a.getCurrentTokenRow(),column:a.getCurrentTokenColumn()};c+=b.value;if(c.indexOf(">")!==-1){var e=this._parseTag(c);return e.start=d,e.end={row:a.getCurrentTokenRow(),column:a.getCurrentTokenColumn()+b.value.length},a.stepForward(),e}}while(b=a.stepForward());return null},this._readTagBackward=function(a){var b=a.getCurrentToken();if(!b)return null;var c="",d;do if(b.type.indexOf("meta.tag")===0){d||(d={row:a.getCurrentTokenRow(),column:a.getCurrentTokenColumn()+b.value.length}),c=b.value+c;if(c.indexOf("<")!==-1){var e=this._parseTag(c);return e.end=d,e.start={row:a.getCurrentTokenRow(),column:a.getCurrentTokenColumn()},a.stepBackward(),e}}while(b=a.stepBackward());return null},this._pop=function(a,b){while(a.length){var c=a[a.length-1];if(!b||c.tagName==b.tagName)return a.pop();if(this.voidElements[b.tagName])return;if(this.voidElements[c.tagName]){a.pop();continue}return null}},this.getFoldWidgetRange=function(a,b,c){var d=this._getFirstTagInLine(a,c);if(!d.match)return null;var e=d.closing||d.selfClosing,g=[],i;if(!e){var j=new h(a,c,d.column),k={row:c,column:d.column+d.tagName.length+2};while(i=this._readTagForward(j)){if(i.selfClosing){if(!g.length)return i.start.column+=i.tagName.length+2,i.end.column-=2,f.fromPoints(i.start,i.end);continue}if(i.closing){this._pop(g,i);if(g.length==0)return f.fromPoints(k,i.start)}else g.push(i)}}else{var j=new h(a,c,d.column+d.match.length),l={row:c,column:d.column};while(i=this._readTagBackward(j)){if(i.selfClosing){if(!g.length)return i.start.column+=i.tagName.length+2,i.end.column-=2,f.fromPoints(i.start,i.end);continue}if(!i.closing){this._pop(g,i);if(g.length==0)return i.start.column+=i.tagName.length+2,f.fromPoints(i.start,l)}else g.push(i)}}}}.call(i.prototype)}),function(){window.require(["ace/ace"],function(a){window.ace||(window.ace={});for(var b in a)a.hasOwnProperty(b)&&(ace[b]=a[b])})}() \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-java-uncompressed.js b/apps/files_texteditor/js/aceeditor/mode-java-uncompressed.js
new file mode 100755
index 00000000000..7263df5894c
--- /dev/null
+++ b/apps/files_texteditor/js/aceeditor/mode-java-uncompressed.js
@@ -0,0 +1,1464 @@
+define('ace/mode/java', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/javascript', 'ace/tokenizer', 'ace/mode/java_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var JavaScriptMode = require("./javascript").Mode;
+var Tokenizer = require("../tokenizer").Tokenizer;
+var JavaHighlightRules = require("./java_highlight_rules").JavaHighlightRules;
+
+var Mode = function() {
+ JavaScriptMode.call(this);
+
+ this.$tokenizer = new Tokenizer(new JavaHighlightRules().getRules());
+};
+oop.inherits(Mode, JavaScriptMode);
+
+(function() {
+
+ this.createWorker = function(session) {
+ return null;
+ };
+
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/javascript', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/javascript_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/range', 'ace/worker/worker_client', 'ace/mode/behaviour/cstyle', 'ace/mode/folding/cstyle'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextMode = require("./text").Mode;
+var Tokenizer = require("../tokenizer").Tokenizer;
+var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;
+var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
+var Range = require("../range").Range;
+var WorkerClient = require("../worker/worker_client").WorkerClient;
+var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
+var CStyleFoldMode = require("./folding/cstyle").FoldMode;
+
+var Mode = function() {
+ this.$tokenizer = new Tokenizer(new JavaScriptHighlightRules().getRules());
+ this.$outdent = new MatchingBraceOutdent();
+ this.$behaviour = new CstyleBehaviour();
+ this.foldingRules = new CStyleFoldMode();
+};
+oop.inherits(Mode, TextMode);
+
+(function() {
+
+
+ this.toggleCommentLines = function(state, doc, startRow, endRow) {
+ var outdent = true;
+ var re = /^(\s*)\/\//;
+
+ for (var i=startRow; i<= endRow; i++) {
+ if (!re.test(doc.getLine(i))) {
+ outdent = false;
+ break;
+ }
+ }
+
+ if (outdent) {
+ var deleteRange = new Range(0, 0, 0, 0);
+ for (var i=startRow; i<= endRow; i++)
+ {
+ var line = doc.getLine(i);
+ var m = line.match(re);
+ deleteRange.start.row = i;
+ deleteRange.end.row = i;
+ deleteRange.end.column = m[0].length;
+ doc.replace(deleteRange, m[1]);
+ }
+ }
+ else {
+ doc.indentRows(startRow, endRow, "//");
+ }
+ };
+
+ this.getNextLineIndent = function(state, line, tab) {
+ var indent = this.$getIndent(line);
+
+ var tokenizedLine = this.$tokenizer.getLineTokens(line, state);
+ var tokens = tokenizedLine.tokens;
+ var endState = tokenizedLine.state;
+
+ if (tokens.length && tokens[tokens.length-1].type == "comment") {
+ return indent;
+ }
+
+ if (state == "start" || state == "regex_allowed") {
+ var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);
+ if (match) {
+ indent += tab;
+ }
+ } else if (state == "doc-start") {
+ if (endState == "start" || state == "regex_allowed") {
+ return "";
+ }
+ var match = line.match(/^\s*(\/?)\*/);
+ if (match) {
+ if (match[1]) {
+ indent += " ";
+ }
+ indent += "* ";
+ }
+ }
+
+ return indent;
+ };
+
+ this.checkOutdent = function(state, line, input) {
+ return this.$outdent.checkOutdent(line, input);
+ };
+
+ this.autoOutdent = function(state, doc, row) {
+ this.$outdent.autoOutdent(doc, row);
+ };
+
+ this.createWorker = function(session) {
+ var worker = new WorkerClient(["ace"], "worker-javascript.js", "ace/mode/javascript_worker", "JavaScriptWorker");
+ worker.attachToDocument(session.getDocument());
+
+ worker.on("jslint", function(results) {
+ var errors = [];
+ for (var i=0; i<results.data.length; i++) {
+ var error = results.data[i];
+ if (error)
+ errors.push({
+ row: error.line-1,
+ column: error.character-1,
+ text: error.reason,
+ type: "warning",
+ lint: error
+ });
+ }
+ session.setAnnotations(errors);
+ });
+
+ worker.on("narcissus", function(e) {
+ session.setAnnotations([e.data]);
+ });
+
+ worker.on("terminate", function() {
+ session.clearAnnotations();
+ });
+
+ return worker;
+ };
+
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ * Mihai Sucan <mihai DOT sucan AT gmail DOT com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/javascript_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/unicode', 'ace/mode/doc_comment_highlight_rules', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var lang = require("../lib/lang");
+var unicode = require("../unicode");
+var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var JavaScriptHighlightRules = function() {
+
+ // see: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects
+ var globals = lang.arrayToMap(
+ // Constructors
+ ("Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" +
+ // E4X
+ "Namespace|QName|XML|XMLList|" +
+ "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" +
+ "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" +
+ // Errors
+ "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" +
+ "SyntaxError|TypeError|URIError|" +
+ // Non-constructor functions
+ "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" +
+ "isNaN|parseFloat|parseInt|" +
+ // Other
+ "JSON|Math|" +
+ // Pseudo
+ "this|arguments|prototype|window|document"
+ ).split("|")
+ );
+
+ var keywords = lang.arrayToMap(
+ ("break|case|catch|continue|default|delete|do|else|finally|for|function|" +
+ "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|" +
+ "const|yield|import|get|set").split("|")
+ );
+
+ // keywords which can be followed by regular expressions
+ var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield";
+
+ var deprecated = lang.arrayToMap(
+ ("__parent__|__count__|escape|unescape|with|__proto__").split("|")
+ );
+
+ var definitions = lang.arrayToMap(("const|let|var|function").split("|"));
+
+ var buildinConstants = lang.arrayToMap(
+ ("null|Infinity|NaN|undefined").split("|")
+ );
+
+ var futureReserved = lang.arrayToMap(
+ ("class|enum|extends|super|export|implements|private|" +
+ "public|interface|package|protected|static").split("|")
+ );
+
+ // TODO: Unicode escape sequences
+ var identifierRe = "[" + unicode.packages.L + "\\$_]["
+ + unicode.packages.L
+ + unicode.packages.Mn + unicode.packages.Mc
+ + unicode.packages.Nd
+ + unicode.packages.Pc + "\\$_]*\\b";
+
+ // regexp must not have capturing parentheses. Use (?:) instead.
+ // regexps are ordered -> the first match is used
+
+ this.$rules = {
+ "start" : [
+ {
+ token : "comment",
+ regex : "\\/\\/.*$"
+ },
+ new DocCommentHighlightRules().getStartRule("doc-start"),
+ {
+ token : "comment", // multi line comment
+ merge : true,
+ regex : "\\/\\*",
+ next : "comment"
+ }, {
+ token : "string", // single line
+ regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
+ }, {
+ token : "string", // multi line string start
+ merge : true,
+ regex : '["].*\\\\$',
+ next : "qqstring"
+ }, {
+ token : "string", // single line
+ regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
+ }, {
+ token : "string", // multi line string start
+ merge : true,
+ regex : "['].*\\\\$",
+ next : "qstring"
+ }, {
+ token : "constant.numeric", // hex
+ regex : "0[xX][0-9a-fA-F]+\\b"
+ }, {
+ token : "constant.numeric", // float
+ regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
+ }, {
+ token : ["keyword.definition", "text", "entity.name.function"],
+ regex : "(function)(\\s+)(" + identifierRe + ")"
+ }, {
+ token : "constant.language.boolean",
+ regex : "(?:true|false)\\b"
+ }, {
+ token : "keyword",
+ regex : "(?:" + kwBeforeRe + ")\\b",
+ next : "regex_allowed"
+ }, {
+ token : function(value) {
+ if (globals.hasOwnProperty(value))
+ return "variable.language";
+ else if (deprecated.hasOwnProperty(value))
+ return "invalid.deprecated";
+ else if (definitions.hasOwnProperty(value))
+ return "keyword.definition";
+ else if (keywords.hasOwnProperty(value))
+ return "keyword";
+ else if (buildinConstants.hasOwnProperty(value))
+ return "constant.language";
+ else if (futureReserved.hasOwnProperty(value))
+ return "invalid.illegal";
+ else if (value == "debugger")
+ return "invalid.deprecated";
+ else
+ return "identifier";
+ },
+ regex : identifierRe
+ }, {
+ token : "keyword.operator",
+ regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)",
+ next : "regex_allowed"
+ }, {
+ token : "punctuation.operator",
+ regex : "\\?|\\:|\\,|\\;|\\.",
+ next : "regex_allowed"
+ }, {
+ token : "paren.lparen",
+ regex : "[[({]",
+ next : "regex_allowed"
+ }, {
+ token : "paren.rparen",
+ regex : "[\\])}]"
+ }, {
+ token : "keyword.operator",
+ regex : "\\/=?",
+ next : "regex_allowed"
+ }, {
+ token: "comment",
+ regex: "^#!.*$"
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }
+ ],
+ // regular expressions are only allowed after certain tokens. This
+ // makes sure we don't mix up regexps with the divison operator
+ "regex_allowed": [
+ {
+ token : "comment", // multi line comment
+ merge : true,
+ regex : "\\/\\*",
+ next : "comment_regex_allowed"
+ }, {
+ token : "comment",
+ regex : "\\/\\/.*$"
+ }, {
+ token: "string.regexp",
+ regex: "\\/",
+ next: "regex",
+ merge: true
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }, {
+ // immediately return to the start mode without matching
+ // anything
+ token: "empty",
+ regex: "",
+ next: "start"
+ }
+ ],
+ "regex": [
+ {
+ token: "regexp.keyword.operator",
+ regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)",
+ next: "regex"
+ }, {
+ // flag
+ token: "string.regexp",
+ regex: "/\\w*",
+ next: "start",
+ merge: true
+ }, {
+ token: "string.regexp",
+ regex: "[^\\\\/\\[]+",
+ next: "regex",
+ merge: true
+ }, {
+ token: "string.regexp.charachterclass",
+ regex: "\\[",
+ next: "regex_character_class",
+ merge: true
+ }, {
+ token: "empty",
+ regex: "",
+ next: "start"
+ }
+ ],
+ "regex_character_class": [
+ {
+ token: "regexp.keyword.operator",
+ regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)",
+ next: "regex_character_class"
+ }, {
+ token: "string.regexp.charachterclass",
+ regex: "]",
+ next: "regex",
+ merge: true
+ }, {
+ token: "string.regexp.charachterclass",
+ regex: "[^\\\\\\]]+",
+ next: "regex_character_class",
+ merge: true
+ }, {
+ token: "empty",
+ regex: "",
+ next: "start"
+ }
+ ],
+ "comment_regex_allowed" : [
+ {
+ token : "comment", // closing comment
+ regex : ".*?\\*\\/",
+ merge : true,
+ next : "regex_allowed"
+ }, {
+ token : "comment", // comment spanning whole line
+ merge : true,
+ regex : ".+"
+ }
+ ],
+ "comment" : [
+ {
+ token : "comment", // closing comment
+ regex : ".*?\\*\\/",
+ merge : true,
+ next : "start"
+ }, {
+ token : "comment", // comment spanning whole line
+ merge : true,
+ regex : ".+"
+ }
+ ],
+ "qqstring" : [
+ {
+ token : "string",
+ regex : '(?:(?:\\\\.)|(?:[^"\\\\]))*?"',
+ next : "start"
+ }, {
+ token : "string",
+ merge : true,
+ regex : '.+'
+ }
+ ],
+ "qstring" : [
+ {
+ token : "string",
+ regex : "(?:(?:\\\\.)|(?:[^'\\\\]))*?'",
+ next : "start"
+ }, {
+ token : "string",
+ merge : true,
+ regex : '.+'
+ }
+ ]
+ };
+
+ this.embedRules(DocCommentHighlightRules, "doc-",
+ [ new DocCommentHighlightRules().getEndRule("start") ]);
+};
+
+oop.inherits(JavaScriptHighlightRules, TextHighlightRules);
+
+exports.JavaScriptHighlightRules = JavaScriptHighlightRules;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/doc_comment_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var DocCommentHighlightRules = function() {
+
+ this.$rules = {
+ "start" : [ {
+ token : "comment.doc.tag",
+ regex : "@[\\w\\d_]+" // TODO: fix email addresses
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "\\s+"
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "TODO"
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "[^@\\*]+"
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "."
+ }]
+ };
+};
+
+oop.inherits(DocCommentHighlightRules, TextHighlightRules);
+
+(function() {
+
+ this.getStartRule = function(start) {
+ return {
+ token : "comment.doc", // doc comment
+ merge : true,
+ regex : "\\/\\*(?=\\*)",
+ next : start
+ };
+ };
+
+ this.getEndRule = function (start) {
+ return {
+ token : "comment.doc", // closing comment
+ merge : true,
+ regex : "\\*\\/",
+ next : start
+ };
+ };
+
+}).call(DocCommentHighlightRules.prototype);
+
+exports.DocCommentHighlightRules = DocCommentHighlightRules;
+
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var Range = require("../range").Range;
+
+var MatchingBraceOutdent = function() {};
+
+(function() {
+
+ this.checkOutdent = function(line, input) {
+ if (! /^\s+$/.test(line))
+ return false;
+
+ return /^\s*\}/.test(input);
+ };
+
+ this.autoOutdent = function(doc, row) {
+ var line = doc.getLine(row);
+ var match = line.match(/^(\s*\})/);
+
+ if (!match) return 0;
+
+ var column = match[1].length;
+ var openBracePos = doc.findMatchingBracket({row: row, column: column});
+
+ if (!openBracePos || openBracePos.row == row) return 0;
+
+ var indent = this.$getIndent(doc.getLine(openBracePos.row));
+ doc.replace(new Range(row, 0, row, column-1), indent);
+ };
+
+ this.$getIndent = function(line) {
+ var match = line.match(/^(\s+)/);
+ if (match) {
+ return match[1];
+ }
+
+ return "";
+ };
+
+}).call(MatchingBraceOutdent.prototype);
+
+exports.MatchingBraceOutdent = MatchingBraceOutdent;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/worker/worker_client', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event_emitter'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var EventEmitter = require("../lib/event_emitter").EventEmitter;
+
+var WorkerClient = function(topLevelNamespaces, packagedJs, mod, classname) {
+
+ this.changeListener = this.changeListener.bind(this);
+
+ if (module.packaged) {
+ var base = this.$guessBasePath();
+ this.$worker = new Worker(base + packagedJs);
+ }
+ else {
+ var workerUrl = this.$normalizePath(require.nameToUrl("ace/worker/worker", null, "_"));
+ this.$worker = new Worker(workerUrl);
+
+ var tlns = {};
+ for (var i=0; i<topLevelNamespaces.length; i++) {
+ var ns = topLevelNamespaces[i];
+ var path = this.$normalizePath(require.nameToUrl(ns, null, "_").replace(/.js$/, ""));
+
+ tlns[ns] = path;
+ }
+ }
+
+ this.$worker.postMessage({
+ init : true,
+ tlns: tlns,
+ module: mod,
+ classname: classname
+ });
+
+ this.callbackId = 1;
+ this.callbacks = {};
+
+ var _self = this;
+ this.$worker.onerror = function(e) {
+ window.console && console.log && console.log(e);
+ throw e;
+ };
+ this.$worker.onmessage = function(e) {
+ var msg = e.data;
+ switch(msg.type) {
+ case "log":
+ window.console && console.log && console.log(msg.data);
+ break;
+
+ case "event":
+ _self._emit(msg.name, {data: msg.data});
+ break;
+
+ case "call":
+ var callback = _self.callbacks[msg.id];
+ if (callback) {
+ callback(msg.data);
+ delete _self.callbacks[msg.id];
+ }
+ break;
+ }
+ };
+};
+
+(function(){
+
+ oop.implement(this, EventEmitter);
+
+ this.$normalizePath = function(path) {
+ path = path.replace(/^[a-z]+:\/\/[^\/]+\//, ""); // Remove domain name and rebuild it
+ path = location.protocol + "//" + location.host
+ // paths starting with a slash are relative to the root (host)
+ + (path.charAt(0) == "/" ? "" : location.pathname.replace(/\/[^\/]*$/, ""))
+ + "/" + path.replace(/^[\/]+/, "");
+ return path;
+ };
+
+ this.$guessBasePath = function() {
+ if (require.aceBaseUrl)
+ return require.aceBaseUrl;
+
+ var scripts = document.getElementsByTagName("script");
+ for (var i=0; i<scripts.length; i++) {
+ var script = scripts[i];
+
+ var base = script.getAttribute("data-ace-base");
+ if (base)
+ return base.replace(/\/*$/, "/");
+
+ var src = script.src || script.getAttribute("src");
+ if (!src) {
+ continue;
+ }
+ var m = src.match(/^(?:(.*\/)ace\.js|(.*\/)ace(-uncompressed)?(-noconflict)?\.js)(?:\?|$)/);
+ if (m)
+ return m[1] || m[2];
+ }
+ return "";
+ };
+
+ this.terminate = function() {
+ this._emit("terminate", {});
+ this.$worker.terminate();
+ this.$worker = null;
+ this.$doc.removeEventListener("change", this.changeListener);
+ this.$doc = null;
+ };
+
+ this.send = function(cmd, args) {
+ this.$worker.postMessage({command: cmd, args: args});
+ };
+
+ this.call = function(cmd, args, callback) {
+ if (callback) {
+ var id = this.callbackId++;
+ this.callbacks[id] = callback;
+ args.push(id);
+ }
+ this.send(cmd, args);
+ };
+
+ this.emit = function(event, data) {
+ try {
+ // firefox refuses to clone objects which have function properties
+ // TODO: cleanup event
+ this.$worker.postMessage({event: event, data: {data: data.data}});
+ }
+ catch(ex) {}
+ };
+
+ this.attachToDocument = function(doc) {
+ if(this.$doc)
+ this.terminate();
+
+ this.$doc = doc;
+ this.call("setValue", [doc.getValue()]);
+ doc.on("change", this.changeListener);
+ };
+
+ this.changeListener = function(e) {
+ e.range = {
+ start: e.data.range.start,
+ end: e.data.range.end
+ };
+ this.emit("change", e);
+ };
+
+}).call(WorkerClient.prototype);
+
+exports.WorkerClient = WorkerClient;
+
+});
+/* vim:ts=4:sts=4:sw=4:
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Chris Spencer <chris.ag.spencer AT googlemail DOT com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/behaviour/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var Behaviour = require('../behaviour').Behaviour;
+
+var CstyleBehaviour = function () {
+
+ this.add("braces", "insertion", function (state, action, editor, session, text) {
+ if (text == '{') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '{' + selected + '}',
+ selection: false
+ }
+ } else {
+ return {
+ text: '{}',
+ selection: [1, 1]
+ }
+ }
+ } else if (text == '}') {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '}') {
+ var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});
+ if (matching !== null) {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ } else if (text == "\n") {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '}') {
+ var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column + 1});
+ if (!openBracePos)
+ return null;
+
+ var indent = this.getNextLineIndent(state, line.substring(0, line.length - 1), session.getTabString());
+ var next_indent = this.$getIndent(session.doc.getLine(openBracePos.row));
+
+ return {
+ text: '\n' + indent + '\n' + next_indent,
+ selection: [1, indent.length, 1, indent.length]
+ }
+ }
+ }
+ });
+
+ this.add("braces", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '{') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.end.column, range.end.column + 1);
+ if (rightChar == '}') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+ this.add("parens", "insertion", function (state, action, editor, session, text) {
+ if (text == '(') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '(' + selected + ')',
+ selection: false
+ }
+ } else {
+ return {
+ text: '()',
+ selection: [1, 1]
+ }
+ }
+ } else if (text == ')') {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == ')') {
+ var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});
+ if (matching !== null) {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ }
+ });
+
+ this.add("parens", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '(') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
+ if (rightChar == ')') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+ this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {
+ if (text == '"') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '"' + selected + '"',
+ selection: false
+ }
+ } else {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var leftChar = line.substring(cursor.column-1, cursor.column);
+
+ // We're escaped.
+ if (leftChar == '\\') {
+ return null;
+ }
+
+ // Find what token we're inside.
+ var tokens = session.getTokens(selection.start.row, selection.start.row)[0].tokens;
+ var col = 0, token;
+ var quotepos = -1; // Track whether we're inside an open quote.
+
+ for (var x = 0; x < tokens.length; x++) {
+ token = tokens[x];
+ if (token.type == "string") {
+ quotepos = -1;
+ } else if (quotepos < 0) {
+ quotepos = token.value.indexOf('"');
+ }
+ if ((token.value.length + col) > selection.start.column) {
+ break;
+ }
+ col += tokens[x].value.length;
+ }
+
+ // Try and be smart about when we auto insert.
+ if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf('"') === token.value.length-1)))) {
+ return {
+ text: '""',
+ selection: [1,1]
+ }
+ } else if (token && token.type === "string") {
+ // Ignore input and move right one if we're typing over the closing quote.
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '"') {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ }
+ }
+ });
+
+ this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '"') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
+ if (rightChar == '"') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+}
+oop.inherits(CstyleBehaviour, Behaviour);
+
+exports.CstyleBehaviour = CstyleBehaviour;
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var Range = require("../../range").Range;
+var BaseFoldMode = require("./fold_mode").FoldMode;
+
+var FoldMode = exports.FoldMode = function() {};
+oop.inherits(FoldMode, BaseFoldMode);
+
+(function() {
+
+ this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
+ this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ var line = session.getLine(row);
+ var match = line.match(this.foldingStartMarker);
+ if (match) {
+ var i = match.index;
+
+ if (match[1])
+ return this.openingBracketBlock(session, match[1], row, i);
+
+ var range = session.getCommentFoldRange(row, i + match[0].length);
+ range.end.column -= 2;
+ return range;
+ }
+
+ if (foldStyle !== "markbeginend")
+ return;
+
+ var match = line.match(this.foldingStopMarker);
+ if (match) {
+ var i = match.index + match[0].length;
+
+ if (match[2]) {
+ var range = session.getCommentFoldRange(row, i);
+ range.end.column -= 2;
+ return range;
+ }
+
+ var end = {row: row, column: i};
+ var start = session.$findOpeningBracket(match[1], end);
+
+ if (!start)
+ return;
+
+ start.column++;
+ end.column--;
+
+ return Range.fromPoints(start, end);
+ }
+ };
+
+}).call(FoldMode.prototype);
+
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/fold_mode', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var Range = require("../../range").Range;
+
+var FoldMode = exports.FoldMode = function() {};
+
+(function() {
+
+ this.foldingStartMarker = null;
+ this.foldingStopMarker = null;
+
+ // must return "" if there's no fold, to enable caching
+ this.getFoldWidget = function(session, foldStyle, row) {
+ var line = session.getLine(row);
+ if (this.foldingStartMarker.test(line))
+ return "start";
+ if (foldStyle == "markbeginend"
+ && this.foldingStopMarker
+ && this.foldingStopMarker.test(line))
+ return "end";
+ return "";
+ };
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ return null;
+ };
+
+ this.indentationBlock = function(session, row, column) {
+ var re = /^\s*/;
+ var startRow = row;
+ var endRow = row;
+ var line = session.getLine(row);
+ var startColumn = column || line.length;
+ var startLevel = line.match(re)[0].length;
+ var maxRow = session.getLength()
+
+ while (++row < maxRow) {
+ line = session.getLine(row);
+ var level = line.match(re)[0].length;
+
+ if (level == line.length)
+ continue;
+
+ if (level <= startLevel)
+ break;
+
+ endRow = row;
+ }
+
+ if (endRow > startRow) {
+ var endColumn = session.getLine(endRow).length;
+ return new Range(startRow, startColumn, endRow, endColumn);
+ }
+ };
+
+ this.openingBracketBlock = function(session, bracket, row, column) {
+ var start = {row: row, column: column + 1};
+ var end = session.$findClosingBracket(bracket, start);
+ if (!end)
+ return;
+
+ var fw = session.foldWidgets[end.row];
+ if (fw == null)
+ fw = this.getFoldWidget(session, end.row);
+
+ if (fw == "start") {
+ end.row --;
+ end.column = session.getLine(end.row).length;
+ }
+ return Range.fromPoints(start, end);
+ };
+
+}).call(FoldMode.prototype);
+
+});
+define('ace/mode/java_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/mode/doc_comment_highlight_rules', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var lang = require("../lib/lang");
+var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var JavaHighlightRules = function() {
+
+ // taken from http://download.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html
+ var keywords = lang.arrayToMap(
+ ("abstract|continue|for|new|switch|" +
+ "assert|default|goto|package|synchronized|" +
+ "boolean|do|if|private|this|" +
+ "break|double|implements|protected|throw|" +
+ "byte|else|import|public|throws|" +
+ "case|enum|instanceof|return|transient|" +
+ "catch|extends|int|short|try|" +
+ "char|final|interface|static|void|" +
+ "class|finally|long|strictfp|volatile|" +
+ "const|float|native|super|while").split("|")
+ );
+
+ var buildinConstants = lang.arrayToMap(
+ ("null|Infinity|NaN|undefined").split("|")
+ );
+
+ var langClasses = lang.arrayToMap(
+ ("AbstractMethodError|AssertionError|ClassCircularityError|"+
+ "ClassFormatError|Deprecated|EnumConstantNotPresentException|"+
+ "ExceptionInInitializerError|IllegalAccessError|"+
+ "IllegalThreadStateException|InstantiationError|InternalError|"+
+ "NegativeArraySizeException|NoSuchFieldError|Override|Process|"+
+ "ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|"+
+ "SuppressWarnings|TypeNotPresentException|UnknownError|"+
+ "UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|"+
+ "InstantiationException|IndexOutOfBoundsException|"+
+ "ArrayIndexOutOfBoundsException|CloneNotSupportedException|"+
+ "NoSuchFieldException|IllegalArgumentException|NumberFormatException|"+
+ "SecurityException|Void|InheritableThreadLocal|IllegalStateException|"+
+ "InterruptedException|NoSuchMethodException|IllegalAccessException|"+
+ "UnsupportedOperationException|Enum|StrictMath|Package|Compiler|"+
+ "Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|"+
+ "NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|"+
+ "NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|"+
+ "Character|Boolean|StackTraceElement|Appendable|StringBuffer|"+
+ "Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|"+
+ "StackOverflowError|OutOfMemoryError|VirtualMachineError|"+
+ "ArrayStoreException|ClassCastException|LinkageError|"+
+ "NoClassDefFoundError|ClassNotFoundException|RuntimeException|"+
+ "Exception|ThreadDeath|Error|Throwable|System|ClassLoader|"+
+ "Cloneable|Class|CharSequence|Comparable|String|Object").split("|")
+ );
+
+ var importClasses = lang.arrayToMap(
+ ("").split("|")
+ );
+ // regexp must not have capturing parentheses. Use (?:) instead.
+ // regexps are ordered -> the first match is used
+
+ this.$rules = {
+ "start" : [
+ {
+ token : "comment",
+ regex : "\\/\\/.*$"
+ },
+ new DocCommentHighlightRules().getStartRule("doc-start"),
+ {
+ token : "comment", // multi line comment
+ merge : true,
+ regex : "\\/\\*",
+ next : "comment"
+ }, {
+ token : "string.regexp",
+ regex : "[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)"
+ }, {
+ token : "string", // single line
+ regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
+ }, {
+ token : "string", // single line
+ regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
+ }, {
+ token : "constant.numeric", // hex
+ regex : "0[xX][0-9a-fA-F]+\\b"
+ }, {
+ token : "constant.numeric", // float
+ regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
+ }, {
+ token : "constant.language.boolean",
+ regex : "(?:true|false)\\b"
+ }, {
+ token : function(value) {
+ if (value == "this")
+ return "variable.language";
+ else if (keywords.hasOwnProperty(value))
+ return "keyword";
+ else if (langClasses.hasOwnProperty(value))
+ return "support.function";
+ else if (importClasses.hasOwnProperty(value))
+ return "support.function";
+ else if (buildinConstants.hasOwnProperty(value))
+ return "constant.language";
+ else
+ return "identifier";
+ },
+ // TODO: Unicode escape sequences
+ // TODO: Unicode identifiers
+ regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
+ }, {
+ token : "keyword.operator",
+ regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"
+ }, {
+ token : "lparen",
+ regex : "[[({]"
+ }, {
+ token : "rparen",
+ regex : "[\\])}]"
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }
+ ],
+ "comment" : [
+ {
+ token : "comment", // closing comment
+ regex : ".*?\\*\\/",
+ next : "start"
+ }, {
+ token : "comment", // comment spanning whole line
+ merge : true,
+ regex : ".+"
+ }
+ ]
+ };
+
+ this.embedRules(DocCommentHighlightRules, "doc-",
+ [ new DocCommentHighlightRules().getEndRule("start") ]);
+};
+
+oop.inherits(JavaHighlightRules, TextHighlightRules);
+
+exports.JavaHighlightRules = JavaHighlightRules;
+});
+;
+ (function() {
+ window.require(["ace/ace"], function(a) {
+ if (!window.ace)
+ window.ace = {};
+ for (var key in a) if (a.hasOwnProperty(key))
+ ace[key] = a[key];
+ });
+ })();
+ \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-java.js b/apps/files_texteditor/js/aceeditor/mode-java.js
index 56460e36b28..84c21daba22 100644
--- a/apps/files_texteditor/js/aceeditor/mode-java.js
+++ b/apps/files_texteditor/js/aceeditor/mode-java.js
@@ -1 +1 @@
-define("ace/mode/java",["require","exports","module","pilot/oop","ace/mode/javascript","ace/tokenizer","ace/mode/java_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/cstyle"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/javascript").Mode,f=a("ace/tokenizer").Tokenizer,g=a("ace/mode/java_highlight_rules").JavaHighlightRules,h=a("ace/mode/matching_brace_outdent").MatchingBraceOutdent,i=a("ace/mode/behaviour/cstyle").CstyleBehaviour,j=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h,this.$behaviour=new i};d.inherits(j,e),function(){this.createWorker=function(a){return null}}.call(j.prototype),b.Mode=j}),define("ace/mode/javascript",["require","exports","module","pilot/oop","ace/mode/text","ace/tokenizer","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/text").Mode,f=a("ace/tokenizer").Tokenizer,g=a("ace/mode/javascript_highlight_rules").JavaScriptHighlightRules,h=a("ace/mode/matching_brace_outdent").MatchingBraceOutdent,i=a("ace/range").Range,j=a("ace/worker/worker_client").WorkerClient,k=a("ace/mode/behaviour/cstyle").CstyleBehaviour,l=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h,this.$behaviour=new k};d.inherits(l,e),function(){this.toggleCommentLines=function(a,b,c,d){var e=!0,f=[],g=/^(\s*)\/\//;for(var h=c;h<=d;h++)if(!g.test(b.getLine(h))){e=!1;break}if(e){var j=new i(0,0,0,0);for(var h=c;h<=d;h++){var k=b.getLine(h),l=k.match(g);j.start.row=h,j.end.row=h,j.end.column=l[0].length,b.replace(j,l[1])}}else b.indentRows(c,d,"//")},this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=this.$tokenizer.getLineTokens(b,a),f=e.tokens,g=e.state;if(f.length&&f[f.length-1].type=="comment")return d;if(a=="start"){var h=b.match(/^.*[\{\(\[\:]\s*$/);h&&(d+=c)}else if(a=="doc-start"){if(g=="start")return"";var h=b.match(/^\s*(\/?)\*/);h&&(h[1]&&(d+=" "),d+="* ")}return d},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)},this.createWorker=function(a){var b=a.getDocument(),c=new j(["ace","pilot"],"worker-javascript.js","ace/mode/javascript_worker","JavaScriptWorker");c.call("setValue",[b.getValue()]),b.on("change",function(a){a.range={start:a.data.range.start,end:a.data.range.end},c.emit("change",a)}),c.on("jslint",function(b){var c=[];for(var d=0;d<b.data.length;d++){var e=b.data[d];e&&c.push({row:e.line-1,column:e.character-1,text:e.reason,type:"warning",lint:e})}a.setAnnotations(c)}),c.on("narcissus",function(b){a.setAnnotations([b.data])}),c.on("terminate",function(){a.clearAnnotations()});return c}}.call(l.prototype),b.Mode=l}),define("ace/mode/javascript_highlight_rules",["require","exports","module","pilot/oop","pilot/lang","ace/unicode","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(a,b,c){var d=a("pilot/oop"),e=a("pilot/lang"),f=a("ace/unicode"),g=a("ace/mode/doc_comment_highlight_rules").DocCommentHighlightRules,h=a("ace/mode/text_highlight_rules").TextHighlightRules,i=function(){var a=e.arrayToMap("break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|const|yield|import|get|set".split("|")),b=e.arrayToMap("null|Infinity|NaN|undefined".split("|")),c=e.arrayToMap("class|enum|extends|super|export|implements|private|public|interface|package|protected|static".split("|")),d="["+f.packages.L+"\\$_]["+f.packages.L+f.packages.Mn+f.packages.Mc+f.packages.Nd+f.packages.Pc+"\\$_]*\\b";this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},(new g).getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",merge:!0,regex:'["].*\\\\$',next:"qqstring"},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"string",merge:!0,regex:"['].*\\\\$",next:"qstring"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:function(d){return d=="this"?"variable.language":a.hasOwnProperty(d)?"keyword":b.hasOwnProperty(d)?"constant.language":c.hasOwnProperty(d)?"invalid.illegal":d=="debugger"?"invalid.deprecated":"identifier"},regex:d},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)",next:"regex_allowed"},{token:"lparen",regex:"[[({]",next:"regex_allowed"},{token:"rparen",regex:"[\\])}]"},{token:"keyword.operator",regex:"\\/=?",next:"regex_allowed"},{token:"comment",regex:"^#!.*$"},{token:"text",regex:"\\s+"}],regex_allowed:[{token:"string.regexp",regex:"\\/(?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*",next:"start"},{token:"text",regex:"\\s+"},{token:"empty",regex:"",next:"start"}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"string",regex:'(?:(?:\\\\.)|(?:[^"\\\\]))*?"',next:"start"},{token:"string",merge:!0,regex:".+"}],qstring:[{token:"string",regex:"(?:(?:\\\\.)|(?:[^'\\\\]))*?'",next:"start"},{token:"string",merge:!0,regex:".+"}]},this.embedRules(g,"doc-",[(new g).getEndRule("start")])};d.inherits(i,h),b.JavaScriptHighlightRules=i}),define("ace/mode/doc_comment_highlight_rules",["require","exports","module","pilot/oop","ace/mode/text_highlight_rules"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/text_highlight_rules").TextHighlightRules,f=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};d.inherits(f,e),function(){this.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},this.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}}}.call(f.prototype),b.DocCommentHighlightRules=f}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(a,b,c){var d=a("ace/range").Range,e=function(){};(function(){this.checkOutdent=function(a,b){return/^\s+$/.test(a)?/^\s*\}/.test(b):!1},this.autoOutdent=function(a,b){var c=a.getLine(b),e=c.match(/^(\s*\})/);if(!e)return 0;var f=e[1].length,g=a.findMatchingBracket({row:b,column:f});if(!g||g.row==b)return 0;var h=this.$getIndent(a.getLine(g.row));a.replace(new d(b,0,b,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""}}).call(e.prototype),b.MatchingBraceOutdent=e}),define("ace/worker/worker_client",["require","exports","module","pilot/oop","pilot/event_emitter"],function(a,b,c){var d=a("pilot/oop"),e=a("pilot/event_emitter").EventEmitter,f=function(b,c,d,e){this.callbacks=[];if(a.packaged)var f=this.$guessBasePath(),g=this.$worker=new Worker(f+c);else{var h=this.$normalizePath(a.nameToUrl("ace/worker/worker",null,"_")),g=this.$worker=new Worker(h),i={};for(var j=0;j<b.length;j++){var k=b[j],l=this.$normalizePath(a.nameToUrl(k,null,"_").replace(/.js$/,""));i[k]=l}}this.$worker.postMessage({init:!0,tlns:i,module:d,classname:e}),this.callbackId=1,this.callbacks={};var m=this;this.$worker.onerror=function(a){window.console&&console.log&&console.log(a);throw a},this.$worker.onmessage=function(a){var b=a.data;switch(b.type){case"log":window.console&&console.log&&console.log(b.data);break;case"event":m._dispatchEvent(b.name,{data:b.data});break;case"call":var c=m.callbacks[b.id];c&&(c(b.data),delete m.callbacks[b.id])}}};(function(){d.implement(this,e),this.$normalizePath=function(a){a.match(/^\w+:/)||(a=location.protocol+"//"+location.host+location.pathname+"/"+a);return a},this.$guessBasePath=function(){if(a.aceBaseUrl)return a.aceBaseUrl;var b=document.getElementsByTagName("script");for(var c=0;c<b.length;c++){var d=b[c],e=d.getAttribute("data-ace-base");if(e)return e.replace(/\/*$/,"/");var f=d.src||d.getAttribute("src");if(!f)continue;var g=f.match(/^(?:(.*\/)ace\.js|(.*\/)ace-uncompressed\.js)(?:\?|$)/);if(g)return g[1]||g[2]}return""},this.terminate=function(){this._dispatchEvent("terminate",{}),this.$worker.terminate()},this.send=function(a,b){this.$worker.postMessage({command:a,args:b})},this.call=function(a,b,c){if(c){var d=this.callbackId++;this.callbacks[d]=c,b.push(d)}this.send(a,b)},this.emit=function(a,b){this.$worker.postMessage({event:a,data:b})}}).call(f.prototype),b.WorkerClient=f}),define("ace/mode/behaviour/cstyle",["require","exports","module","pilot/oop","ace/mode/behaviour"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/behaviour").Behaviour,f=function(){this.add("braces","insertion",function(a,b,c,d,e){if(e=="{"){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"{"+g+"}",selection:!1}:{text:"{}",selection:[1,1]}}if(e=="}"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var k=d.$findOpeningBracket("}",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}else if(e=="\n"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var l=d.findMatchingBracket({row:h.row,column:h.column+1});if(!l)return!1;var m=this.getNextLineIndent(a,i.substring(0,i.length-1),d.getTabString()),n=this.$getIndent(d.doc.getLine(l.row));return{text:"\n"+m+"\n"+n,selection:[1,m.length,1,m.length]}}}return!1}),this.add("braces","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="{"){var g=d.doc.getLine(e.start.row),h=g.substring(e.end.column,e.end.column+1);if(h=="}"){e.end.column++;return e}}return!1}),this.add("parens","insertion",function(a,b,c,d,e){if(e=="("){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"("+g+")",selection:!1}:{text:"()",selection:[1,1]}}if(e==")"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j==")"){var k=d.$findOpeningBracket(")",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}return!1}),this.add("parens","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="("){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h==")"){e.end.column++;return e}}return!1}),this.add("string_dquotes","insertion",function(a,b,c,d,e){if(e=='"'){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);if(g!=="")return{text:'"'+g+'"',selection:!1};var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column-1,h.column);if(j=="\\")return!1;var k=d.getTokens(f.start.row,f.start.row)[0].tokens,l=0,m,n=-1;for(var o=0;o<k.length;o++){m=k[o],m.type=="string"?n=-1:n<0&&(n=m.value.indexOf('"'));if(m.value.length+l>f.start.column)break;l+=k[o].value.length}if(!m||n<0&&m.type!=="comment"&&(m.type!=="string"||f.start.column!==m.value.length+l-1&&m.value.lastIndexOf('"')===m.value.length-1))return{text:'""',selection:[1,1]};if(m&&m.type==="string"){var p=i.substring(h.column,h.column+1);if(p=='"')return{text:"",selection:[1,1]}}}return!1}),this.add("string_dquotes","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=='"'){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h=='"'){e.end.column++;return e}}return!1})};d.inherits(f,e),b.CstyleBehaviour=f}),define("ace/mode/java_highlight_rules",["require","exports","module","pilot/oop","pilot/lang","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(a,b,c){var d=a("pilot/oop"),e=a("pilot/lang"),f=a("ace/mode/doc_comment_highlight_rules").DocCommentHighlightRules,g=a("ace/mode/text_highlight_rules").TextHighlightRules,h=function(){var a=e.arrayToMap("abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|const|float|native|super|while".split("|")),b=e.arrayToMap("null|Infinity|NaN|undefined".split("|")),c=e.arrayToMap("AbstractMethodError|AssertionError|ClassCircularityError|ClassFormatError|Deprecated|EnumConstantNotPresentException|ExceptionInInitializerError|IllegalAccessError|IllegalThreadStateException|InstantiationError|InternalError|NegativeArraySizeException|NoSuchFieldError|Override|Process|ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|SuppressWarnings|TypeNotPresentException|UnknownError|UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|InstantiationException|IndexOutOfBoundsException|ArrayIndexOutOfBoundsException|CloneNotSupportedException|NoSuchFieldException|IllegalArgumentException|NumberFormatException|SecurityException|Void|InheritableThreadLocal|IllegalStateException|InterruptedException|NoSuchMethodException|IllegalAccessException|UnsupportedOperationException|Enum|StrictMath|Package|Compiler|Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|Character|Boolean|StackTraceElement|Appendable|StringBuffer|Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|StackOverflowError|OutOfMemoryError|VirtualMachineError|ArrayStoreException|ClassCastException|LinkageError|NoClassDefFoundError|ClassNotFoundException|RuntimeException|Exception|ThreadDeath|Error|Throwable|System|ClassLoader|Cloneable|Class|CharSequence|Comparable|String|Object".split("|")),d=e.arrayToMap("".split("|"));this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},(new f).getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"string.regexp",regex:"[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:function(e){return e=="this"?"variable.language":a.hasOwnProperty(e)?"keyword":c.hasOwnProperty(e)?"support.function":d.hasOwnProperty(e)?"support.function":b.hasOwnProperty(e)?"constant.language":"identifier"},regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"},{token:"lparen",regex:"[[({]"},{token:"rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",merge:!0,regex:".+"}]},this.embedRules(f,"doc-",[(new f).getEndRule("start")])};d.inherits(h,g),b.JavaHighlightRules=h}) \ No newline at end of file
+define("ace/mode/java",["require","exports","module","ace/lib/oop","ace/mode/javascript","ace/tokenizer","ace/mode/java_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./javascript").Mode,f=a("../tokenizer").Tokenizer,g=a("./java_highlight_rules").JavaHighlightRules,h=function(){e.call(this),this.$tokenizer=new f((new g).getRules())};d.inherits(h,e),function(){this.createWorker=function(a){return null}}.call(h.prototype),b.Mode=h}),define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text").Mode,f=a("../tokenizer").Tokenizer,g=a("./javascript_highlight_rules").JavaScriptHighlightRules,h=a("./matching_brace_outdent").MatchingBraceOutdent,i=a("../range").Range,j=a("../worker/worker_client").WorkerClient,k=a("./behaviour/cstyle").CstyleBehaviour,l=a("./folding/cstyle").FoldMode,m=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h,this.$behaviour=new k,this.foldingRules=new l};d.inherits(m,e),function(){this.toggleCommentLines=function(a,b,c,d){var e=!0,f=/^(\s*)\/\//;for(var g=c;g<=d;g++)if(!f.test(b.getLine(g))){e=!1;break}if(e){var h=new i(0,0,0,0);for(var g=c;g<=d;g++){var j=b.getLine(g),k=j.match(f);h.start.row=g,h.end.row=g,h.end.column=k[0].length,b.replace(h,k[1])}}else b.indentRows(c,d,"//")},this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=this.$tokenizer.getLineTokens(b,a),f=e.tokens,g=e.state;if(f.length&&f[f.length-1].type=="comment")return d;if(a=="start"||a=="regex_allowed"){var h=b.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);h&&(d+=c)}else if(a=="doc-start"){if(g=="start"||a=="regex_allowed")return"";var h=b.match(/^\s*(\/?)\*/);h&&(h[1]&&(d+=" "),d+="* ")}return d},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)},this.createWorker=function(a){var b=new j(["ace"],"worker-javascript.js","ace/mode/javascript_worker","JavaScriptWorker");return b.attachToDocument(a.getDocument()),b.on("jslint",function(b){var c=[];for(var d=0;d<b.data.length;d++){var e=b.data[d];e&&c.push({row:e.line-1,column:e.character-1,text:e.reason,type:"warning",lint:e})}a.setAnnotations(c)}),b.on("narcissus",function(b){a.setAnnotations([b.data])}),b.on("terminate",function(){a.clearAnnotations()}),b}}.call(m.prototype),b.Mode=m}),define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/unicode","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("../lib/lang"),f=a("../unicode"),g=a("./doc_comment_highlight_rules").DocCommentHighlightRules,h=a("./text_highlight_rules").TextHighlightRules,i=function(){var a=e.arrayToMap("Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document".split("|")),b=e.arrayToMap("break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|const|yield|import|get|set".split("|")),c="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield",d=e.arrayToMap("__parent__|__count__|escape|unescape|with|__proto__".split("|")),h=e.arrayToMap("const|let|var|function".split("|")),i=e.arrayToMap("null|Infinity|NaN|undefined".split("|")),j=e.arrayToMap("class|enum|extends|super|export|implements|private|public|interface|package|protected|static".split("|")),k="["+f.packages.L+"\\$_]["+f.packages.L+f.packages.Mn+f.packages.Mc+f.packages.Nd+f.packages.Pc+"\\$_]*\\b";this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},(new g).getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",merge:!0,regex:'["].*\\\\$',next:"qqstring"},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"string",merge:!0,regex:"['].*\\\\$",next:"qstring"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:["keyword.definition","text","entity.name.function"],regex:"(function)(\\s+)("+k+")"},{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:"keyword",regex:"(?:"+c+")\\b",next:"regex_allowed"},{token:function(c){return a.hasOwnProperty(c)?"variable.language":d.hasOwnProperty(c)?"invalid.deprecated":h.hasOwnProperty(c)?"keyword.definition":b.hasOwnProperty(c)?"keyword":i.hasOwnProperty(c)?"constant.language":j.hasOwnProperty(c)?"invalid.illegal":c=="debugger"?"invalid.deprecated":"identifier"},regex:k},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)",next:"regex_allowed"},{token:"punctuation.operator",regex:"\\?|\\:|\\,|\\;|\\.",next:"regex_allowed"},{token:"paren.lparen",regex:"[[({]",next:"regex_allowed"},{token:"paren.rparen",regex:"[\\])}]"},{token:"keyword.operator",regex:"\\/=?",next:"regex_allowed"},{token:"comment",regex:"^#!.*$"},{token:"text",regex:"\\s+"}],regex_allowed:[{token:"comment",merge:!0,regex:"\\/\\*",next:"comment_regex_allowed"},{token:"comment",regex:"\\/\\/.*$"},{token:"string.regexp",regex:"\\/",next:"regex",merge:!0},{token:"text",regex:"\\s+"},{token:"empty",regex:"",next:"start"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)",next:"regex"},{token:"string.regexp",regex:"/\\w*",next:"start",merge:!0},{token:"string.regexp",regex:"[^\\\\/\\[]+",next:"regex",merge:!0},{token:"string.regexp.charachterclass",regex:"\\[",next:"regex_character_class",merge:!0},{token:"empty",regex:"",next:"start"}],regex_character_class:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)",next:"regex_character_class"},{token:"string.regexp.charachterclass",regex:"]",next:"regex",merge:!0},{token:"string.regexp.charachterclass",regex:"[^\\\\\\]]+",next:"regex_character_class",merge:!0},{token:"empty",regex:"",next:"start"}],comment_regex_allowed:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"regex_allowed"},{token:"comment",merge:!0,regex:".+"}],comment:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"string",regex:'(?:(?:\\\\.)|(?:[^"\\\\]))*?"',next:"start"},{token:"string",merge:!0,regex:".+"}],qstring:[{token:"string",regex:"(?:(?:\\\\.)|(?:[^'\\\\]))*?'",next:"start"},{token:"string",merge:!0,regex:".+"}]},this.embedRules(g,"doc-",[(new g).getEndRule("start")])};d.inherits(i,h),b.JavaScriptHighlightRules=i}),define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text_highlight_rules").TextHighlightRules,f=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};d.inherits(f,e),function(){this.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},this.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}}}.call(f.prototype),b.DocCommentHighlightRules=f}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(a,b,c){"use strict";var d=a("../range").Range,e=function(){};((function(){this.checkOutdent=function(a,b){return/^\s+$/.test(a)?/^\s*\}/.test(b):!1},this.autoOutdent=function(a,b){var c=a.getLine(b),e=c.match(/^(\s*\})/);if(!e)return 0;var f=e[1].length,g=a.findMatchingBracket({row:b,column:f});if(!g||g.row==b)return 0;var h=this.$getIndent(a.getLine(g.row));a.replace(new d(b,0,b,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""}})).call(e.prototype),b.MatchingBraceOutdent=e}),define("ace/worker/worker_client",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("../lib/event_emitter").EventEmitter,f=function(b,d,e,f){this.changeListener=this.changeListener.bind(this);if(c.packaged){var g=this.$guessBasePath();this.$worker=new Worker(g+d)}else{var h=this.$normalizePath(a.nameToUrl("ace/worker/worker",null,"_"));this.$worker=new Worker(h);var i={};for(var j=0;j<b.length;j++){var k=b[j],l=this.$normalizePath(a.nameToUrl(k,null,"_").replace(/.js$/,""));i[k]=l}}this.$worker.postMessage({init:!0,tlns:i,module:e,classname:f}),this.callbackId=1,this.callbacks={};var m=this;this.$worker.onerror=function(a){throw window.console&&console.log&&console.log(a),a},this.$worker.onmessage=function(a){var b=a.data;switch(b.type){case"log":window.console&&console.log&&console.log(b.data);break;case"event":m._emit(b.name,{data:b.data});break;case"call":var c=m.callbacks[b.id];c&&(c(b.data),delete m.callbacks[b.id])}}};((function(){d.implement(this,e),this.$normalizePath=function(a){return a=a.replace(/^[a-z]+:\/\/[^\/]+\//,""),a=location.protocol+"//"+location.host+(a.charAt(0)=="/"?"":location.pathname.replace(/\/[^\/]*$/,""))+"/"+a.replace(/^[\/]+/,""),a},this.$guessBasePath=function(){if(a.aceBaseUrl)return a.aceBaseUrl;var b=document.getElementsByTagName("script");for(var c=0;c<b.length;c++){var d=b[c],e=d.getAttribute("data-ace-base");if(e)return e.replace(/\/*$/,"/");var f=d.src||d.getAttribute("src");if(!f)continue;var g=f.match(/^(?:(.*\/)ace\.js|(.*\/)ace(-uncompressed)?(-noconflict)?\.js)(?:\?|$)/);if(g)return g[1]||g[2]}return""},this.terminate=function(){this._emit("terminate",{}),this.$worker.terminate(),this.$worker=null,this.$doc.removeEventListener("change",this.changeListener),this.$doc=null},this.send=function(a,b){this.$worker.postMessage({command:a,args:b})},this.call=function(a,b,c){if(c){var d=this.callbackId++;this.callbacks[d]=c,b.push(d)}this.send(a,b)},this.emit=function(a,b){try{this.$worker.postMessage({event:a,data:{data:b.data}})}catch(c){}},this.attachToDocument=function(a){this.$doc&&this.terminate(),this.$doc=a,this.call("setValue",[a.getValue()]),a.on("change",this.changeListener)},this.changeListener=function(a){a.range={start:a.data.range.start,end:a.data.range.end},this.emit("change",a)}})).call(f.prototype),b.WorkerClient=f}),define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("../behaviour").Behaviour,f=function(){this.add("braces","insertion",function(a,b,c,d,e){if(e=="{"){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"{"+g+"}",selection:!1}:{text:"{}",selection:[1,1]}}if(e=="}"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var k=d.$findOpeningBracket("}",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}else if(e=="\n"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var l=d.findMatchingBracket({row:h.row,column:h.column+1});if(!l)return null;var m=this.getNextLineIndent(a,i.substring(0,i.length-1),d.getTabString()),n=this.$getIndent(d.doc.getLine(l.row));return{text:"\n"+m+"\n"+n,selection:[1,m.length,1,m.length]}}}}),this.add("braces","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="{"){var g=d.doc.getLine(e.start.row),h=g.substring(e.end.column,e.end.column+1);if(h=="}")return e.end.column++,e}}),this.add("parens","insertion",function(a,b,c,d,e){if(e=="("){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"("+g+")",selection:!1}:{text:"()",selection:[1,1]}}if(e==")"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j==")"){var k=d.$findOpeningBracket(")",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="("){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h==")")return e.end.column++,e}}),this.add("string_dquotes","insertion",function(a,b,c,d,e){if(e=='"'){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);if(g!=="")return{text:'"'+g+'"',selection:!1};var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column-1,h.column);if(j=="\\")return null;var k=d.getTokens(f.start.row,f.start.row)[0].tokens,l=0,m,n=-1;for(var o=0;o<k.length;o++){m=k[o],m.type=="string"?n=-1:n<0&&(n=m.value.indexOf('"'));if(m.value.length+l>f.start.column)break;l+=k[o].value.length}if(!m||n<0&&m.type!=="comment"&&(m.type!=="string"||f.start.column!==m.value.length+l-1&&m.value.lastIndexOf('"')===m.value.length-1))return{text:'""',selection:[1,1]};if(m&&m.type==="string"){var p=i.substring(h.column,h.column+1);if(p=='"')return{text:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=='"'){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h=='"')return e.end.column++,e}})};d.inherits(f,e),b.CstyleBehaviour=f}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("../../range").Range,f=a("./fold_mode").FoldMode,g=b.FoldMode=function(){};d.inherits(g,f),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(a,b,c){var d=a.getLine(c),f=d.match(this.foldingStartMarker);if(f){var g=f.index;if(f[1])return this.openingBracketBlock(a,f[1],c,g);var h=a.getCommentFoldRange(c,g+f[0].length);return h.end.column-=2,h}if(b!=="markbeginend")return;var f=d.match(this.foldingStopMarker);if(f){var g=f.index+f[0].length;if(f[2]){var h=a.getCommentFoldRange(c,g);return h.end.column-=2,h}var i={row:c,column:g},j=a.$findOpeningBracket(f[1],i);if(!j)return;return j.column++,i.column--,e.fromPoints(j,i)}}}.call(g.prototype)}),define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"],function(a,b,c){"use strict";var d=a("../../range").Range,e=b.FoldMode=function(){};((function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(a,b,c){var d=a.getLine(c);return this.foldingStartMarker.test(d)?"start":b=="markbeginend"&&this.foldingStopMarker&&this.foldingStopMarker.test(d)?"end":""},this.getFoldWidgetRange=function(a,b,c){return null},this.indentationBlock=function(a,b,c){var e=/^\s*/,f=b,g=b,h=a.getLine(b),i=c||h.length,j=h.match(e)[0].length,k=a.getLength();while(++b<k){h=a.getLine(b);var l=h.match(e)[0].length;if(l==h.length)continue;if(l<=j)break;g=b}if(g>f){var m=a.getLine(g).length;return new d(f,i,g,m)}},this.openingBracketBlock=function(a,b,c,e){var f={row:c,column:e+1},g=a.$findClosingBracket(b,f);if(!g)return;var h=a.foldWidgets[g.row];return h==null&&(h=this.getFoldWidget(a,g.row)),h=="start"&&(g.row--,g.column=a.getLine(g.row).length),d.fromPoints(f,g)}})).call(e.prototype)}),define("ace/mode/java_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("../lib/lang"),f=a("./doc_comment_highlight_rules").DocCommentHighlightRules,g=a("./text_highlight_rules").TextHighlightRules,h=function(){var a=e.arrayToMap("abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|const|float|native|super|while".split("|")),b=e.arrayToMap("null|Infinity|NaN|undefined".split("|")),c=e.arrayToMap("AbstractMethodError|AssertionError|ClassCircularityError|ClassFormatError|Deprecated|EnumConstantNotPresentException|ExceptionInInitializerError|IllegalAccessError|IllegalThreadStateException|InstantiationError|InternalError|NegativeArraySizeException|NoSuchFieldError|Override|Process|ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|SuppressWarnings|TypeNotPresentException|UnknownError|UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|InstantiationException|IndexOutOfBoundsException|ArrayIndexOutOfBoundsException|CloneNotSupportedException|NoSuchFieldException|IllegalArgumentException|NumberFormatException|SecurityException|Void|InheritableThreadLocal|IllegalStateException|InterruptedException|NoSuchMethodException|IllegalAccessException|UnsupportedOperationException|Enum|StrictMath|Package|Compiler|Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|Character|Boolean|StackTraceElement|Appendable|StringBuffer|Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|StackOverflowError|OutOfMemoryError|VirtualMachineError|ArrayStoreException|ClassCastException|LinkageError|NoClassDefFoundError|ClassNotFoundException|RuntimeException|Exception|ThreadDeath|Error|Throwable|System|ClassLoader|Cloneable|Class|CharSequence|Comparable|String|Object".split("|")),d=e.arrayToMap("".split("|"));this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},(new f).getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"string.regexp",regex:"[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:function(e){return e=="this"?"variable.language":a.hasOwnProperty(e)?"keyword":c.hasOwnProperty(e)?"support.function":d.hasOwnProperty(e)?"support.function":b.hasOwnProperty(e)?"constant.language":"identifier"},regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"},{token:"lparen",regex:"[[({]"},{token:"rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",merge:!0,regex:".+"}]},this.embedRules(f,"doc-",[(new f).getEndRule("start")])};d.inherits(h,g),b.JavaHighlightRules=h}),function(){window.require(["ace/ace"],function(a){window.ace||(window.ace={});for(var b in a)a.hasOwnProperty(b)&&(ace[b]=a[b])})}() \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-javascript-uncompressed.js b/apps/files_texteditor/js/aceeditor/mode-javascript-uncompressed.js
new file mode 100755
index 00000000000..ba30b9e438f
--- /dev/null
+++ b/apps/files_texteditor/js/aceeditor/mode-javascript-uncompressed.js
@@ -0,0 +1,1295 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/javascript', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/javascript_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/range', 'ace/worker/worker_client', 'ace/mode/behaviour/cstyle', 'ace/mode/folding/cstyle'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextMode = require("./text").Mode;
+var Tokenizer = require("../tokenizer").Tokenizer;
+var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;
+var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
+var Range = require("../range").Range;
+var WorkerClient = require("../worker/worker_client").WorkerClient;
+var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
+var CStyleFoldMode = require("./folding/cstyle").FoldMode;
+
+var Mode = function() {
+ this.$tokenizer = new Tokenizer(new JavaScriptHighlightRules().getRules());
+ this.$outdent = new MatchingBraceOutdent();
+ this.$behaviour = new CstyleBehaviour();
+ this.foldingRules = new CStyleFoldMode();
+};
+oop.inherits(Mode, TextMode);
+
+(function() {
+
+
+ this.toggleCommentLines = function(state, doc, startRow, endRow) {
+ var outdent = true;
+ var re = /^(\s*)\/\//;
+
+ for (var i=startRow; i<= endRow; i++) {
+ if (!re.test(doc.getLine(i))) {
+ outdent = false;
+ break;
+ }
+ }
+
+ if (outdent) {
+ var deleteRange = new Range(0, 0, 0, 0);
+ for (var i=startRow; i<= endRow; i++)
+ {
+ var line = doc.getLine(i);
+ var m = line.match(re);
+ deleteRange.start.row = i;
+ deleteRange.end.row = i;
+ deleteRange.end.column = m[0].length;
+ doc.replace(deleteRange, m[1]);
+ }
+ }
+ else {
+ doc.indentRows(startRow, endRow, "//");
+ }
+ };
+
+ this.getNextLineIndent = function(state, line, tab) {
+ var indent = this.$getIndent(line);
+
+ var tokenizedLine = this.$tokenizer.getLineTokens(line, state);
+ var tokens = tokenizedLine.tokens;
+ var endState = tokenizedLine.state;
+
+ if (tokens.length && tokens[tokens.length-1].type == "comment") {
+ return indent;
+ }
+
+ if (state == "start" || state == "regex_allowed") {
+ var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);
+ if (match) {
+ indent += tab;
+ }
+ } else if (state == "doc-start") {
+ if (endState == "start" || state == "regex_allowed") {
+ return "";
+ }
+ var match = line.match(/^\s*(\/?)\*/);
+ if (match) {
+ if (match[1]) {
+ indent += " ";
+ }
+ indent += "* ";
+ }
+ }
+
+ return indent;
+ };
+
+ this.checkOutdent = function(state, line, input) {
+ return this.$outdent.checkOutdent(line, input);
+ };
+
+ this.autoOutdent = function(state, doc, row) {
+ this.$outdent.autoOutdent(doc, row);
+ };
+
+ this.createWorker = function(session) {
+ var worker = new WorkerClient(["ace"], "worker-javascript.js", "ace/mode/javascript_worker", "JavaScriptWorker");
+ worker.attachToDocument(session.getDocument());
+
+ worker.on("jslint", function(results) {
+ var errors = [];
+ for (var i=0; i<results.data.length; i++) {
+ var error = results.data[i];
+ if (error)
+ errors.push({
+ row: error.line-1,
+ column: error.character-1,
+ text: error.reason,
+ type: "warning",
+ lint: error
+ });
+ }
+ session.setAnnotations(errors);
+ });
+
+ worker.on("narcissus", function(e) {
+ session.setAnnotations([e.data]);
+ });
+
+ worker.on("terminate", function() {
+ session.clearAnnotations();
+ });
+
+ return worker;
+ };
+
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ * Mihai Sucan <mihai DOT sucan AT gmail DOT com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/javascript_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/unicode', 'ace/mode/doc_comment_highlight_rules', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var lang = require("../lib/lang");
+var unicode = require("../unicode");
+var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var JavaScriptHighlightRules = function() {
+
+ // see: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects
+ var globals = lang.arrayToMap(
+ // Constructors
+ ("Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" +
+ // E4X
+ "Namespace|QName|XML|XMLList|" +
+ "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" +
+ "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" +
+ // Errors
+ "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" +
+ "SyntaxError|TypeError|URIError|" +
+ // Non-constructor functions
+ "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" +
+ "isNaN|parseFloat|parseInt|" +
+ // Other
+ "JSON|Math|" +
+ // Pseudo
+ "this|arguments|prototype|window|document"
+ ).split("|")
+ );
+
+ var keywords = lang.arrayToMap(
+ ("break|case|catch|continue|default|delete|do|else|finally|for|function|" +
+ "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|" +
+ "const|yield|import|get|set").split("|")
+ );
+
+ // keywords which can be followed by regular expressions
+ var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield";
+
+ var deprecated = lang.arrayToMap(
+ ("__parent__|__count__|escape|unescape|with|__proto__").split("|")
+ );
+
+ var definitions = lang.arrayToMap(("const|let|var|function").split("|"));
+
+ var buildinConstants = lang.arrayToMap(
+ ("null|Infinity|NaN|undefined").split("|")
+ );
+
+ var futureReserved = lang.arrayToMap(
+ ("class|enum|extends|super|export|implements|private|" +
+ "public|interface|package|protected|static").split("|")
+ );
+
+ // TODO: Unicode escape sequences
+ var identifierRe = "[" + unicode.packages.L + "\\$_]["
+ + unicode.packages.L
+ + unicode.packages.Mn + unicode.packages.Mc
+ + unicode.packages.Nd
+ + unicode.packages.Pc + "\\$_]*\\b";
+
+ // regexp must not have capturing parentheses. Use (?:) instead.
+ // regexps are ordered -> the first match is used
+
+ this.$rules = {
+ "start" : [
+ {
+ token : "comment",
+ regex : "\\/\\/.*$"
+ },
+ new DocCommentHighlightRules().getStartRule("doc-start"),
+ {
+ token : "comment", // multi line comment
+ merge : true,
+ regex : "\\/\\*",
+ next : "comment"
+ }, {
+ token : "string", // single line
+ regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
+ }, {
+ token : "string", // multi line string start
+ merge : true,
+ regex : '["].*\\\\$',
+ next : "qqstring"
+ }, {
+ token : "string", // single line
+ regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
+ }, {
+ token : "string", // multi line string start
+ merge : true,
+ regex : "['].*\\\\$",
+ next : "qstring"
+ }, {
+ token : "constant.numeric", // hex
+ regex : "0[xX][0-9a-fA-F]+\\b"
+ }, {
+ token : "constant.numeric", // float
+ regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
+ }, {
+ token : ["keyword.definition", "text", "entity.name.function"],
+ regex : "(function)(\\s+)(" + identifierRe + ")"
+ }, {
+ token : "constant.language.boolean",
+ regex : "(?:true|false)\\b"
+ }, {
+ token : "keyword",
+ regex : "(?:" + kwBeforeRe + ")\\b",
+ next : "regex_allowed"
+ }, {
+ token : function(value) {
+ if (globals.hasOwnProperty(value))
+ return "variable.language";
+ else if (deprecated.hasOwnProperty(value))
+ return "invalid.deprecated";
+ else if (definitions.hasOwnProperty(value))
+ return "keyword.definition";
+ else if (keywords.hasOwnProperty(value))
+ return "keyword";
+ else if (buildinConstants.hasOwnProperty(value))
+ return "constant.language";
+ else if (futureReserved.hasOwnProperty(value))
+ return "invalid.illegal";
+ else if (value == "debugger")
+ return "invalid.deprecated";
+ else
+ return "identifier";
+ },
+ regex : identifierRe
+ }, {
+ token : "keyword.operator",
+ regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)",
+ next : "regex_allowed"
+ }, {
+ token : "punctuation.operator",
+ regex : "\\?|\\:|\\,|\\;|\\.",
+ next : "regex_allowed"
+ }, {
+ token : "paren.lparen",
+ regex : "[[({]",
+ next : "regex_allowed"
+ }, {
+ token : "paren.rparen",
+ regex : "[\\])}]"
+ }, {
+ token : "keyword.operator",
+ regex : "\\/=?",
+ next : "regex_allowed"
+ }, {
+ token: "comment",
+ regex: "^#!.*$"
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }
+ ],
+ // regular expressions are only allowed after certain tokens. This
+ // makes sure we don't mix up regexps with the divison operator
+ "regex_allowed": [
+ {
+ token : "comment", // multi line comment
+ merge : true,
+ regex : "\\/\\*",
+ next : "comment_regex_allowed"
+ }, {
+ token : "comment",
+ regex : "\\/\\/.*$"
+ }, {
+ token: "string.regexp",
+ regex: "\\/",
+ next: "regex",
+ merge: true
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }, {
+ // immediately return to the start mode without matching
+ // anything
+ token: "empty",
+ regex: "",
+ next: "start"
+ }
+ ],
+ "regex": [
+ {
+ token: "regexp.keyword.operator",
+ regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)",
+ next: "regex"
+ }, {
+ // flag
+ token: "string.regexp",
+ regex: "/\\w*",
+ next: "start",
+ merge: true
+ }, {
+ token: "string.regexp",
+ regex: "[^\\\\/\\[]+",
+ next: "regex",
+ merge: true
+ }, {
+ token: "string.regexp.charachterclass",
+ regex: "\\[",
+ next: "regex_character_class",
+ merge: true
+ }, {
+ token: "empty",
+ regex: "",
+ next: "start"
+ }
+ ],
+ "regex_character_class": [
+ {
+ token: "regexp.keyword.operator",
+ regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)",
+ next: "regex_character_class"
+ }, {
+ token: "string.regexp.charachterclass",
+ regex: "]",
+ next: "regex",
+ merge: true
+ }, {
+ token: "string.regexp.charachterclass",
+ regex: "[^\\\\\\]]+",
+ next: "regex_character_class",
+ merge: true
+ }, {
+ token: "empty",
+ regex: "",
+ next: "start"
+ }
+ ],
+ "comment_regex_allowed" : [
+ {
+ token : "comment", // closing comment
+ regex : ".*?\\*\\/",
+ merge : true,
+ next : "regex_allowed"
+ }, {
+ token : "comment", // comment spanning whole line
+ merge : true,
+ regex : ".+"
+ }
+ ],
+ "comment" : [
+ {
+ token : "comment", // closing comment
+ regex : ".*?\\*\\/",
+ merge : true,
+ next : "start"
+ }, {
+ token : "comment", // comment spanning whole line
+ merge : true,
+ regex : ".+"
+ }
+ ],
+ "qqstring" : [
+ {
+ token : "string",
+ regex : '(?:(?:\\\\.)|(?:[^"\\\\]))*?"',
+ next : "start"
+ }, {
+ token : "string",
+ merge : true,
+ regex : '.+'
+ }
+ ],
+ "qstring" : [
+ {
+ token : "string",
+ regex : "(?:(?:\\\\.)|(?:[^'\\\\]))*?'",
+ next : "start"
+ }, {
+ token : "string",
+ merge : true,
+ regex : '.+'
+ }
+ ]
+ };
+
+ this.embedRules(DocCommentHighlightRules, "doc-",
+ [ new DocCommentHighlightRules().getEndRule("start") ]);
+};
+
+oop.inherits(JavaScriptHighlightRules, TextHighlightRules);
+
+exports.JavaScriptHighlightRules = JavaScriptHighlightRules;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/doc_comment_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var DocCommentHighlightRules = function() {
+
+ this.$rules = {
+ "start" : [ {
+ token : "comment.doc.tag",
+ regex : "@[\\w\\d_]+" // TODO: fix email addresses
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "\\s+"
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "TODO"
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "[^@\\*]+"
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "."
+ }]
+ };
+};
+
+oop.inherits(DocCommentHighlightRules, TextHighlightRules);
+
+(function() {
+
+ this.getStartRule = function(start) {
+ return {
+ token : "comment.doc", // doc comment
+ merge : true,
+ regex : "\\/\\*(?=\\*)",
+ next : start
+ };
+ };
+
+ this.getEndRule = function (start) {
+ return {
+ token : "comment.doc", // closing comment
+ merge : true,
+ regex : "\\*\\/",
+ next : start
+ };
+ };
+
+}).call(DocCommentHighlightRules.prototype);
+
+exports.DocCommentHighlightRules = DocCommentHighlightRules;
+
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var Range = require("../range").Range;
+
+var MatchingBraceOutdent = function() {};
+
+(function() {
+
+ this.checkOutdent = function(line, input) {
+ if (! /^\s+$/.test(line))
+ return false;
+
+ return /^\s*\}/.test(input);
+ };
+
+ this.autoOutdent = function(doc, row) {
+ var line = doc.getLine(row);
+ var match = line.match(/^(\s*\})/);
+
+ if (!match) return 0;
+
+ var column = match[1].length;
+ var openBracePos = doc.findMatchingBracket({row: row, column: column});
+
+ if (!openBracePos || openBracePos.row == row) return 0;
+
+ var indent = this.$getIndent(doc.getLine(openBracePos.row));
+ doc.replace(new Range(row, 0, row, column-1), indent);
+ };
+
+ this.$getIndent = function(line) {
+ var match = line.match(/^(\s+)/);
+ if (match) {
+ return match[1];
+ }
+
+ return "";
+ };
+
+}).call(MatchingBraceOutdent.prototype);
+
+exports.MatchingBraceOutdent = MatchingBraceOutdent;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/worker/worker_client', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event_emitter'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var EventEmitter = require("../lib/event_emitter").EventEmitter;
+
+var WorkerClient = function(topLevelNamespaces, packagedJs, mod, classname) {
+
+ this.changeListener = this.changeListener.bind(this);
+
+ if (module.packaged) {
+ var base = this.$guessBasePath();
+ this.$worker = new Worker(base + packagedJs);
+ }
+ else {
+ var workerUrl = this.$normalizePath(require.nameToUrl("ace/worker/worker", null, "_"));
+ this.$worker = new Worker(workerUrl);
+
+ var tlns = {};
+ for (var i=0; i<topLevelNamespaces.length; i++) {
+ var ns = topLevelNamespaces[i];
+ var path = this.$normalizePath(require.nameToUrl(ns, null, "_").replace(/.js$/, ""));
+
+ tlns[ns] = path;
+ }
+ }
+
+ this.$worker.postMessage({
+ init : true,
+ tlns: tlns,
+ module: mod,
+ classname: classname
+ });
+
+ this.callbackId = 1;
+ this.callbacks = {};
+
+ var _self = this;
+ this.$worker.onerror = function(e) {
+ window.console && console.log && console.log(e);
+ throw e;
+ };
+ this.$worker.onmessage = function(e) {
+ var msg = e.data;
+ switch(msg.type) {
+ case "log":
+ window.console && console.log && console.log(msg.data);
+ break;
+
+ case "event":
+ _self._emit(msg.name, {data: msg.data});
+ break;
+
+ case "call":
+ var callback = _self.callbacks[msg.id];
+ if (callback) {
+ callback(msg.data);
+ delete _self.callbacks[msg.id];
+ }
+ break;
+ }
+ };
+};
+
+(function(){
+
+ oop.implement(this, EventEmitter);
+
+ this.$normalizePath = function(path) {
+ path = path.replace(/^[a-z]+:\/\/[^\/]+\//, ""); // Remove domain name and rebuild it
+ path = location.protocol + "//" + location.host
+ // paths starting with a slash are relative to the root (host)
+ + (path.charAt(0) == "/" ? "" : location.pathname.replace(/\/[^\/]*$/, ""))
+ + "/" + path.replace(/^[\/]+/, "");
+ return path;
+ };
+
+ this.$guessBasePath = function() {
+ if (require.aceBaseUrl)
+ return require.aceBaseUrl;
+
+ var scripts = document.getElementsByTagName("script");
+ for (var i=0; i<scripts.length; i++) {
+ var script = scripts[i];
+
+ var base = script.getAttribute("data-ace-base");
+ if (base)
+ return base.replace(/\/*$/, "/");
+
+ var src = script.src || script.getAttribute("src");
+ if (!src) {
+ continue;
+ }
+ var m = src.match(/^(?:(.*\/)ace\.js|(.*\/)ace(-uncompressed)?(-noconflict)?\.js)(?:\?|$)/);
+ if (m)
+ return m[1] || m[2];
+ }
+ return "";
+ };
+
+ this.terminate = function() {
+ this._emit("terminate", {});
+ this.$worker.terminate();
+ this.$worker = null;
+ this.$doc.removeEventListener("change", this.changeListener);
+ this.$doc = null;
+ };
+
+ this.send = function(cmd, args) {
+ this.$worker.postMessage({command: cmd, args: args});
+ };
+
+ this.call = function(cmd, args, callback) {
+ if (callback) {
+ var id = this.callbackId++;
+ this.callbacks[id] = callback;
+ args.push(id);
+ }
+ this.send(cmd, args);
+ };
+
+ this.emit = function(event, data) {
+ try {
+ // firefox refuses to clone objects which have function properties
+ // TODO: cleanup event
+ this.$worker.postMessage({event: event, data: {data: data.data}});
+ }
+ catch(ex) {}
+ };
+
+ this.attachToDocument = function(doc) {
+ if(this.$doc)
+ this.terminate();
+
+ this.$doc = doc;
+ this.call("setValue", [doc.getValue()]);
+ doc.on("change", this.changeListener);
+ };
+
+ this.changeListener = function(e) {
+ e.range = {
+ start: e.data.range.start,
+ end: e.data.range.end
+ };
+ this.emit("change", e);
+ };
+
+}).call(WorkerClient.prototype);
+
+exports.WorkerClient = WorkerClient;
+
+});
+/* vim:ts=4:sts=4:sw=4:
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Chris Spencer <chris.ag.spencer AT googlemail DOT com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/behaviour/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var Behaviour = require('../behaviour').Behaviour;
+
+var CstyleBehaviour = function () {
+
+ this.add("braces", "insertion", function (state, action, editor, session, text) {
+ if (text == '{') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '{' + selected + '}',
+ selection: false
+ }
+ } else {
+ return {
+ text: '{}',
+ selection: [1, 1]
+ }
+ }
+ } else if (text == '}') {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '}') {
+ var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});
+ if (matching !== null) {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ } else if (text == "\n") {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '}') {
+ var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column + 1});
+ if (!openBracePos)
+ return null;
+
+ var indent = this.getNextLineIndent(state, line.substring(0, line.length - 1), session.getTabString());
+ var next_indent = this.$getIndent(session.doc.getLine(openBracePos.row));
+
+ return {
+ text: '\n' + indent + '\n' + next_indent,
+ selection: [1, indent.length, 1, indent.length]
+ }
+ }
+ }
+ });
+
+ this.add("braces", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '{') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.end.column, range.end.column + 1);
+ if (rightChar == '}') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+ this.add("parens", "insertion", function (state, action, editor, session, text) {
+ if (text == '(') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '(' + selected + ')',
+ selection: false
+ }
+ } else {
+ return {
+ text: '()',
+ selection: [1, 1]
+ }
+ }
+ } else if (text == ')') {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == ')') {
+ var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});
+ if (matching !== null) {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ }
+ });
+
+ this.add("parens", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '(') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
+ if (rightChar == ')') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+ this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {
+ if (text == '"') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '"' + selected + '"',
+ selection: false
+ }
+ } else {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var leftChar = line.substring(cursor.column-1, cursor.column);
+
+ // We're escaped.
+ if (leftChar == '\\') {
+ return null;
+ }
+
+ // Find what token we're inside.
+ var tokens = session.getTokens(selection.start.row, selection.start.row)[0].tokens;
+ var col = 0, token;
+ var quotepos = -1; // Track whether we're inside an open quote.
+
+ for (var x = 0; x < tokens.length; x++) {
+ token = tokens[x];
+ if (token.type == "string") {
+ quotepos = -1;
+ } else if (quotepos < 0) {
+ quotepos = token.value.indexOf('"');
+ }
+ if ((token.value.length + col) > selection.start.column) {
+ break;
+ }
+ col += tokens[x].value.length;
+ }
+
+ // Try and be smart about when we auto insert.
+ if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf('"') === token.value.length-1)))) {
+ return {
+ text: '""',
+ selection: [1,1]
+ }
+ } else if (token && token.type === "string") {
+ // Ignore input and move right one if we're typing over the closing quote.
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '"') {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ }
+ }
+ });
+
+ this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '"') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
+ if (rightChar == '"') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+}
+oop.inherits(CstyleBehaviour, Behaviour);
+
+exports.CstyleBehaviour = CstyleBehaviour;
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var Range = require("../../range").Range;
+var BaseFoldMode = require("./fold_mode").FoldMode;
+
+var FoldMode = exports.FoldMode = function() {};
+oop.inherits(FoldMode, BaseFoldMode);
+
+(function() {
+
+ this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
+ this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ var line = session.getLine(row);
+ var match = line.match(this.foldingStartMarker);
+ if (match) {
+ var i = match.index;
+
+ if (match[1])
+ return this.openingBracketBlock(session, match[1], row, i);
+
+ var range = session.getCommentFoldRange(row, i + match[0].length);
+ range.end.column -= 2;
+ return range;
+ }
+
+ if (foldStyle !== "markbeginend")
+ return;
+
+ var match = line.match(this.foldingStopMarker);
+ if (match) {
+ var i = match.index + match[0].length;
+
+ if (match[2]) {
+ var range = session.getCommentFoldRange(row, i);
+ range.end.column -= 2;
+ return range;
+ }
+
+ var end = {row: row, column: i};
+ var start = session.$findOpeningBracket(match[1], end);
+
+ if (!start)
+ return;
+
+ start.column++;
+ end.column--;
+
+ return Range.fromPoints(start, end);
+ }
+ };
+
+}).call(FoldMode.prototype);
+
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/fold_mode', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var Range = require("../../range").Range;
+
+var FoldMode = exports.FoldMode = function() {};
+
+(function() {
+
+ this.foldingStartMarker = null;
+ this.foldingStopMarker = null;
+
+ // must return "" if there's no fold, to enable caching
+ this.getFoldWidget = function(session, foldStyle, row) {
+ var line = session.getLine(row);
+ if (this.foldingStartMarker.test(line))
+ return "start";
+ if (foldStyle == "markbeginend"
+ && this.foldingStopMarker
+ && this.foldingStopMarker.test(line))
+ return "end";
+ return "";
+ };
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ return null;
+ };
+
+ this.indentationBlock = function(session, row, column) {
+ var re = /^\s*/;
+ var startRow = row;
+ var endRow = row;
+ var line = session.getLine(row);
+ var startColumn = column || line.length;
+ var startLevel = line.match(re)[0].length;
+ var maxRow = session.getLength()
+
+ while (++row < maxRow) {
+ line = session.getLine(row);
+ var level = line.match(re)[0].length;
+
+ if (level == line.length)
+ continue;
+
+ if (level <= startLevel)
+ break;
+
+ endRow = row;
+ }
+
+ if (endRow > startRow) {
+ var endColumn = session.getLine(endRow).length;
+ return new Range(startRow, startColumn, endRow, endColumn);
+ }
+ };
+
+ this.openingBracketBlock = function(session, bracket, row, column) {
+ var start = {row: row, column: column + 1};
+ var end = session.$findClosingBracket(bracket, start);
+ if (!end)
+ return;
+
+ var fw = session.foldWidgets[end.row];
+ if (fw == null)
+ fw = this.getFoldWidget(session, end.row);
+
+ if (fw == "start") {
+ end.row --;
+ end.column = session.getLine(end.row).length;
+ }
+ return Range.fromPoints(start, end);
+ };
+
+}).call(FoldMode.prototype);
+
+});
+;
+ (function() {
+ window.require(["ace/ace"], function(a) {
+ if (!window.ace)
+ window.ace = {};
+ for (var key in a) if (a.hasOwnProperty(key))
+ ace[key] = a[key];
+ });
+ })();
+ \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-javascript.js b/apps/files_texteditor/js/aceeditor/mode-javascript.js
index 40628310cdb..2f242387fff 100644
--- a/apps/files_texteditor/js/aceeditor/mode-javascript.js
+++ b/apps/files_texteditor/js/aceeditor/mode-javascript.js
@@ -1 +1 @@
-define("ace/mode/javascript",["require","exports","module","pilot/oop","ace/mode/text","ace/tokenizer","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/text").Mode,f=a("ace/tokenizer").Tokenizer,g=a("ace/mode/javascript_highlight_rules").JavaScriptHighlightRules,h=a("ace/mode/matching_brace_outdent").MatchingBraceOutdent,i=a("ace/range").Range,j=a("ace/worker/worker_client").WorkerClient,k=a("ace/mode/behaviour/cstyle").CstyleBehaviour,l=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h,this.$behaviour=new k};d.inherits(l,e),function(){this.toggleCommentLines=function(a,b,c,d){var e=!0,f=[],g=/^(\s*)\/\//;for(var h=c;h<=d;h++)if(!g.test(b.getLine(h))){e=!1;break}if(e){var j=new i(0,0,0,0);for(var h=c;h<=d;h++){var k=b.getLine(h),l=k.match(g);j.start.row=h,j.end.row=h,j.end.column=l[0].length,b.replace(j,l[1])}}else b.indentRows(c,d,"//")},this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=this.$tokenizer.getLineTokens(b,a),f=e.tokens,g=e.state;if(f.length&&f[f.length-1].type=="comment")return d;if(a=="start"){var h=b.match(/^.*[\{\(\[\:]\s*$/);h&&(d+=c)}else if(a=="doc-start"){if(g=="start")return"";var h=b.match(/^\s*(\/?)\*/);h&&(h[1]&&(d+=" "),d+="* ")}return d},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)},this.createWorker=function(a){var b=a.getDocument(),c=new j(["ace","pilot"],"worker-javascript.js","ace/mode/javascript_worker","JavaScriptWorker");c.call("setValue",[b.getValue()]),b.on("change",function(a){a.range={start:a.data.range.start,end:a.data.range.end},c.emit("change",a)}),c.on("jslint",function(b){var c=[];for(var d=0;d<b.data.length;d++){var e=b.data[d];e&&c.push({row:e.line-1,column:e.character-1,text:e.reason,type:"warning",lint:e})}a.setAnnotations(c)}),c.on("narcissus",function(b){a.setAnnotations([b.data])}),c.on("terminate",function(){a.clearAnnotations()});return c}}.call(l.prototype),b.Mode=l}),define("ace/mode/javascript_highlight_rules",["require","exports","module","pilot/oop","pilot/lang","ace/unicode","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(a,b,c){var d=a("pilot/oop"),e=a("pilot/lang"),f=a("ace/unicode"),g=a("ace/mode/doc_comment_highlight_rules").DocCommentHighlightRules,h=a("ace/mode/text_highlight_rules").TextHighlightRules,i=function(){var a=e.arrayToMap("break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|const|yield|import|get|set".split("|")),b=e.arrayToMap("null|Infinity|NaN|undefined".split("|")),c=e.arrayToMap("class|enum|extends|super|export|implements|private|public|interface|package|protected|static".split("|")),d="["+f.packages.L+"\\$_]["+f.packages.L+f.packages.Mn+f.packages.Mc+f.packages.Nd+f.packages.Pc+"\\$_]*\\b";this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},(new g).getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",merge:!0,regex:'["].*\\\\$',next:"qqstring"},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"string",merge:!0,regex:"['].*\\\\$",next:"qstring"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:function(d){return d=="this"?"variable.language":a.hasOwnProperty(d)?"keyword":b.hasOwnProperty(d)?"constant.language":c.hasOwnProperty(d)?"invalid.illegal":d=="debugger"?"invalid.deprecated":"identifier"},regex:d},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)",next:"regex_allowed"},{token:"lparen",regex:"[[({]",next:"regex_allowed"},{token:"rparen",regex:"[\\])}]"},{token:"keyword.operator",regex:"\\/=?",next:"regex_allowed"},{token:"comment",regex:"^#!.*$"},{token:"text",regex:"\\s+"}],regex_allowed:[{token:"string.regexp",regex:"\\/(?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*",next:"start"},{token:"text",regex:"\\s+"},{token:"empty",regex:"",next:"start"}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"string",regex:'(?:(?:\\\\.)|(?:[^"\\\\]))*?"',next:"start"},{token:"string",merge:!0,regex:".+"}],qstring:[{token:"string",regex:"(?:(?:\\\\.)|(?:[^'\\\\]))*?'",next:"start"},{token:"string",merge:!0,regex:".+"}]},this.embedRules(g,"doc-",[(new g).getEndRule("start")])};d.inherits(i,h),b.JavaScriptHighlightRules=i}),define("ace/mode/doc_comment_highlight_rules",["require","exports","module","pilot/oop","ace/mode/text_highlight_rules"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/text_highlight_rules").TextHighlightRules,f=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};d.inherits(f,e),function(){this.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},this.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}}}.call(f.prototype),b.DocCommentHighlightRules=f}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(a,b,c){var d=a("ace/range").Range,e=function(){};(function(){this.checkOutdent=function(a,b){return/^\s+$/.test(a)?/^\s*\}/.test(b):!1},this.autoOutdent=function(a,b){var c=a.getLine(b),e=c.match(/^(\s*\})/);if(!e)return 0;var f=e[1].length,g=a.findMatchingBracket({row:b,column:f});if(!g||g.row==b)return 0;var h=this.$getIndent(a.getLine(g.row));a.replace(new d(b,0,b,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""}}).call(e.prototype),b.MatchingBraceOutdent=e}),define("ace/worker/worker_client",["require","exports","module","pilot/oop","pilot/event_emitter"],function(a,b,c){var d=a("pilot/oop"),e=a("pilot/event_emitter").EventEmitter,f=function(b,c,d,e){this.callbacks=[];if(a.packaged)var f=this.$guessBasePath(),g=this.$worker=new Worker(f+c);else{var h=this.$normalizePath(a.nameToUrl("ace/worker/worker",null,"_")),g=this.$worker=new Worker(h),i={};for(var j=0;j<b.length;j++){var k=b[j],l=this.$normalizePath(a.nameToUrl(k,null,"_").replace(/.js$/,""));i[k]=l}}this.$worker.postMessage({init:!0,tlns:i,module:d,classname:e}),this.callbackId=1,this.callbacks={};var m=this;this.$worker.onerror=function(a){window.console&&console.log&&console.log(a);throw a},this.$worker.onmessage=function(a){var b=a.data;switch(b.type){case"log":window.console&&console.log&&console.log(b.data);break;case"event":m._dispatchEvent(b.name,{data:b.data});break;case"call":var c=m.callbacks[b.id];c&&(c(b.data),delete m.callbacks[b.id])}}};(function(){d.implement(this,e),this.$normalizePath=function(a){a.match(/^\w+:/)||(a=location.protocol+"//"+location.host+location.pathname+"/"+a);return a},this.$guessBasePath=function(){if(a.aceBaseUrl)return a.aceBaseUrl;var b=document.getElementsByTagName("script");for(var c=0;c<b.length;c++){var d=b[c],e=d.getAttribute("data-ace-base");if(e)return e.replace(/\/*$/,"/");var f=d.src||d.getAttribute("src");if(!f)continue;var g=f.match(/^(?:(.*\/)ace\.js|(.*\/)ace-uncompressed\.js)(?:\?|$)/);if(g)return g[1]||g[2]}return""},this.terminate=function(){this._dispatchEvent("terminate",{}),this.$worker.terminate()},this.send=function(a,b){this.$worker.postMessage({command:a,args:b})},this.call=function(a,b,c){if(c){var d=this.callbackId++;this.callbacks[d]=c,b.push(d)}this.send(a,b)},this.emit=function(a,b){this.$worker.postMessage({event:a,data:b})}}).call(f.prototype),b.WorkerClient=f}),define("ace/mode/behaviour/cstyle",["require","exports","module","pilot/oop","ace/mode/behaviour"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/behaviour").Behaviour,f=function(){this.add("braces","insertion",function(a,b,c,d,e){if(e=="{"){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"{"+g+"}",selection:!1}:{text:"{}",selection:[1,1]}}if(e=="}"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var k=d.$findOpeningBracket("}",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}else if(e=="\n"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var l=d.findMatchingBracket({row:h.row,column:h.column+1});if(!l)return!1;var m=this.getNextLineIndent(a,i.substring(0,i.length-1),d.getTabString()),n=this.$getIndent(d.doc.getLine(l.row));return{text:"\n"+m+"\n"+n,selection:[1,m.length,1,m.length]}}}return!1}),this.add("braces","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="{"){var g=d.doc.getLine(e.start.row),h=g.substring(e.end.column,e.end.column+1);if(h=="}"){e.end.column++;return e}}return!1}),this.add("parens","insertion",function(a,b,c,d,e){if(e=="("){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"("+g+")",selection:!1}:{text:"()",selection:[1,1]}}if(e==")"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j==")"){var k=d.$findOpeningBracket(")",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}return!1}),this.add("parens","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="("){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h==")"){e.end.column++;return e}}return!1}),this.add("string_dquotes","insertion",function(a,b,c,d,e){if(e=='"'){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);if(g!=="")return{text:'"'+g+'"',selection:!1};var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column-1,h.column);if(j=="\\")return!1;var k=d.getTokens(f.start.row,f.start.row)[0].tokens,l=0,m,n=-1;for(var o=0;o<k.length;o++){m=k[o],m.type=="string"?n=-1:n<0&&(n=m.value.indexOf('"'));if(m.value.length+l>f.start.column)break;l+=k[o].value.length}if(!m||n<0&&m.type!=="comment"&&(m.type!=="string"||f.start.column!==m.value.length+l-1&&m.value.lastIndexOf('"')===m.value.length-1))return{text:'""',selection:[1,1]};if(m&&m.type==="string"){var p=i.substring(h.column,h.column+1);if(p=='"')return{text:"",selection:[1,1]}}}return!1}),this.add("string_dquotes","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=='"'){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h=='"'){e.end.column++;return e}}return!1})};d.inherits(f,e),b.CstyleBehaviour=f}) \ No newline at end of file
+define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text").Mode,f=a("../tokenizer").Tokenizer,g=a("./javascript_highlight_rules").JavaScriptHighlightRules,h=a("./matching_brace_outdent").MatchingBraceOutdent,i=a("../range").Range,j=a("../worker/worker_client").WorkerClient,k=a("./behaviour/cstyle").CstyleBehaviour,l=a("./folding/cstyle").FoldMode,m=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h,this.$behaviour=new k,this.foldingRules=new l};d.inherits(m,e),function(){this.toggleCommentLines=function(a,b,c,d){var e=!0,f=/^(\s*)\/\//;for(var g=c;g<=d;g++)if(!f.test(b.getLine(g))){e=!1;break}if(e){var h=new i(0,0,0,0);for(var g=c;g<=d;g++){var j=b.getLine(g),k=j.match(f);h.start.row=g,h.end.row=g,h.end.column=k[0].length,b.replace(h,k[1])}}else b.indentRows(c,d,"//")},this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=this.$tokenizer.getLineTokens(b,a),f=e.tokens,g=e.state;if(f.length&&f[f.length-1].type=="comment")return d;if(a=="start"||a=="regex_allowed"){var h=b.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);h&&(d+=c)}else if(a=="doc-start"){if(g=="start"||a=="regex_allowed")return"";var h=b.match(/^\s*(\/?)\*/);h&&(h[1]&&(d+=" "),d+="* ")}return d},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)},this.createWorker=function(a){var b=new j(["ace"],"worker-javascript.js","ace/mode/javascript_worker","JavaScriptWorker");return b.attachToDocument(a.getDocument()),b.on("jslint",function(b){var c=[];for(var d=0;d<b.data.length;d++){var e=b.data[d];e&&c.push({row:e.line-1,column:e.character-1,text:e.reason,type:"warning",lint:e})}a.setAnnotations(c)}),b.on("narcissus",function(b){a.setAnnotations([b.data])}),b.on("terminate",function(){a.clearAnnotations()}),b}}.call(m.prototype),b.Mode=m}),define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/unicode","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("../lib/lang"),f=a("../unicode"),g=a("./doc_comment_highlight_rules").DocCommentHighlightRules,h=a("./text_highlight_rules").TextHighlightRules,i=function(){var a=e.arrayToMap("Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document".split("|")),b=e.arrayToMap("break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|const|yield|import|get|set".split("|")),c="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield",d=e.arrayToMap("__parent__|__count__|escape|unescape|with|__proto__".split("|")),h=e.arrayToMap("const|let|var|function".split("|")),i=e.arrayToMap("null|Infinity|NaN|undefined".split("|")),j=e.arrayToMap("class|enum|extends|super|export|implements|private|public|interface|package|protected|static".split("|")),k="["+f.packages.L+"\\$_]["+f.packages.L+f.packages.Mn+f.packages.Mc+f.packages.Nd+f.packages.Pc+"\\$_]*\\b";this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},(new g).getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",merge:!0,regex:'["].*\\\\$',next:"qqstring"},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"string",merge:!0,regex:"['].*\\\\$",next:"qstring"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:["keyword.definition","text","entity.name.function"],regex:"(function)(\\s+)("+k+")"},{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:"keyword",regex:"(?:"+c+")\\b",next:"regex_allowed"},{token:function(c){return a.hasOwnProperty(c)?"variable.language":d.hasOwnProperty(c)?"invalid.deprecated":h.hasOwnProperty(c)?"keyword.definition":b.hasOwnProperty(c)?"keyword":i.hasOwnProperty(c)?"constant.language":j.hasOwnProperty(c)?"invalid.illegal":c=="debugger"?"invalid.deprecated":"identifier"},regex:k},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)",next:"regex_allowed"},{token:"punctuation.operator",regex:"\\?|\\:|\\,|\\;|\\.",next:"regex_allowed"},{token:"paren.lparen",regex:"[[({]",next:"regex_allowed"},{token:"paren.rparen",regex:"[\\])}]"},{token:"keyword.operator",regex:"\\/=?",next:"regex_allowed"},{token:"comment",regex:"^#!.*$"},{token:"text",regex:"\\s+"}],regex_allowed:[{token:"comment",merge:!0,regex:"\\/\\*",next:"comment_regex_allowed"},{token:"comment",regex:"\\/\\/.*$"},{token:"string.regexp",regex:"\\/",next:"regex",merge:!0},{token:"text",regex:"\\s+"},{token:"empty",regex:"",next:"start"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)",next:"regex"},{token:"string.regexp",regex:"/\\w*",next:"start",merge:!0},{token:"string.regexp",regex:"[^\\\\/\\[]+",next:"regex",merge:!0},{token:"string.regexp.charachterclass",regex:"\\[",next:"regex_character_class",merge:!0},{token:"empty",regex:"",next:"start"}],regex_character_class:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)",next:"regex_character_class"},{token:"string.regexp.charachterclass",regex:"]",next:"regex",merge:!0},{token:"string.regexp.charachterclass",regex:"[^\\\\\\]]+",next:"regex_character_class",merge:!0},{token:"empty",regex:"",next:"start"}],comment_regex_allowed:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"regex_allowed"},{token:"comment",merge:!0,regex:".+"}],comment:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"string",regex:'(?:(?:\\\\.)|(?:[^"\\\\]))*?"',next:"start"},{token:"string",merge:!0,regex:".+"}],qstring:[{token:"string",regex:"(?:(?:\\\\.)|(?:[^'\\\\]))*?'",next:"start"},{token:"string",merge:!0,regex:".+"}]},this.embedRules(g,"doc-",[(new g).getEndRule("start")])};d.inherits(i,h),b.JavaScriptHighlightRules=i}),define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text_highlight_rules").TextHighlightRules,f=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};d.inherits(f,e),function(){this.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},this.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}}}.call(f.prototype),b.DocCommentHighlightRules=f}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(a,b,c){"use strict";var d=a("../range").Range,e=function(){};((function(){this.checkOutdent=function(a,b){return/^\s+$/.test(a)?/^\s*\}/.test(b):!1},this.autoOutdent=function(a,b){var c=a.getLine(b),e=c.match(/^(\s*\})/);if(!e)return 0;var f=e[1].length,g=a.findMatchingBracket({row:b,column:f});if(!g||g.row==b)return 0;var h=this.$getIndent(a.getLine(g.row));a.replace(new d(b,0,b,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""}})).call(e.prototype),b.MatchingBraceOutdent=e}),define("ace/worker/worker_client",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("../lib/event_emitter").EventEmitter,f=function(b,d,e,f){this.changeListener=this.changeListener.bind(this);if(c.packaged){var g=this.$guessBasePath();this.$worker=new Worker(g+d)}else{var h=this.$normalizePath(a.nameToUrl("ace/worker/worker",null,"_"));this.$worker=new Worker(h);var i={};for(var j=0;j<b.length;j++){var k=b[j],l=this.$normalizePath(a.nameToUrl(k,null,"_").replace(/.js$/,""));i[k]=l}}this.$worker.postMessage({init:!0,tlns:i,module:e,classname:f}),this.callbackId=1,this.callbacks={};var m=this;this.$worker.onerror=function(a){throw window.console&&console.log&&console.log(a),a},this.$worker.onmessage=function(a){var b=a.data;switch(b.type){case"log":window.console&&console.log&&console.log(b.data);break;case"event":m._emit(b.name,{data:b.data});break;case"call":var c=m.callbacks[b.id];c&&(c(b.data),delete m.callbacks[b.id])}}};((function(){d.implement(this,e),this.$normalizePath=function(a){return a=a.replace(/^[a-z]+:\/\/[^\/]+\//,""),a=location.protocol+"//"+location.host+(a.charAt(0)=="/"?"":location.pathname.replace(/\/[^\/]*$/,""))+"/"+a.replace(/^[\/]+/,""),a},this.$guessBasePath=function(){if(a.aceBaseUrl)return a.aceBaseUrl;var b=document.getElementsByTagName("script");for(var c=0;c<b.length;c++){var d=b[c],e=d.getAttribute("data-ace-base");if(e)return e.replace(/\/*$/,"/");var f=d.src||d.getAttribute("src");if(!f)continue;var g=f.match(/^(?:(.*\/)ace\.js|(.*\/)ace(-uncompressed)?(-noconflict)?\.js)(?:\?|$)/);if(g)return g[1]||g[2]}return""},this.terminate=function(){this._emit("terminate",{}),this.$worker.terminate(),this.$worker=null,this.$doc.removeEventListener("change",this.changeListener),this.$doc=null},this.send=function(a,b){this.$worker.postMessage({command:a,args:b})},this.call=function(a,b,c){if(c){var d=this.callbackId++;this.callbacks[d]=c,b.push(d)}this.send(a,b)},this.emit=function(a,b){try{this.$worker.postMessage({event:a,data:{data:b.data}})}catch(c){}},this.attachToDocument=function(a){this.$doc&&this.terminate(),this.$doc=a,this.call("setValue",[a.getValue()]),a.on("change",this.changeListener)},this.changeListener=function(a){a.range={start:a.data.range.start,end:a.data.range.end},this.emit("change",a)}})).call(f.prototype),b.WorkerClient=f}),define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("../behaviour").Behaviour,f=function(){this.add("braces","insertion",function(a,b,c,d,e){if(e=="{"){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"{"+g+"}",selection:!1}:{text:"{}",selection:[1,1]}}if(e=="}"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var k=d.$findOpeningBracket("}",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}else if(e=="\n"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var l=d.findMatchingBracket({row:h.row,column:h.column+1});if(!l)return null;var m=this.getNextLineIndent(a,i.substring(0,i.length-1),d.getTabString()),n=this.$getIndent(d.doc.getLine(l.row));return{text:"\n"+m+"\n"+n,selection:[1,m.length,1,m.length]}}}}),this.add("braces","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="{"){var g=d.doc.getLine(e.start.row),h=g.substring(e.end.column,e.end.column+1);if(h=="}")return e.end.column++,e}}),this.add("parens","insertion",function(a,b,c,d,e){if(e=="("){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"("+g+")",selection:!1}:{text:"()",selection:[1,1]}}if(e==")"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j==")"){var k=d.$findOpeningBracket(")",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="("){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h==")")return e.end.column++,e}}),this.add("string_dquotes","insertion",function(a,b,c,d,e){if(e=='"'){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);if(g!=="")return{text:'"'+g+'"',selection:!1};var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column-1,h.column);if(j=="\\")return null;var k=d.getTokens(f.start.row,f.start.row)[0].tokens,l=0,m,n=-1;for(var o=0;o<k.length;o++){m=k[o],m.type=="string"?n=-1:n<0&&(n=m.value.indexOf('"'));if(m.value.length+l>f.start.column)break;l+=k[o].value.length}if(!m||n<0&&m.type!=="comment"&&(m.type!=="string"||f.start.column!==m.value.length+l-1&&m.value.lastIndexOf('"')===m.value.length-1))return{text:'""',selection:[1,1]};if(m&&m.type==="string"){var p=i.substring(h.column,h.column+1);if(p=='"')return{text:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=='"'){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h=='"')return e.end.column++,e}})};d.inherits(f,e),b.CstyleBehaviour=f}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("../../range").Range,f=a("./fold_mode").FoldMode,g=b.FoldMode=function(){};d.inherits(g,f),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(a,b,c){var d=a.getLine(c),f=d.match(this.foldingStartMarker);if(f){var g=f.index;if(f[1])return this.openingBracketBlock(a,f[1],c,g);var h=a.getCommentFoldRange(c,g+f[0].length);return h.end.column-=2,h}if(b!=="markbeginend")return;var f=d.match(this.foldingStopMarker);if(f){var g=f.index+f[0].length;if(f[2]){var h=a.getCommentFoldRange(c,g);return h.end.column-=2,h}var i={row:c,column:g},j=a.$findOpeningBracket(f[1],i);if(!j)return;return j.column++,i.column--,e.fromPoints(j,i)}}}.call(g.prototype)}),define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"],function(a,b,c){"use strict";var d=a("../../range").Range,e=b.FoldMode=function(){};((function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(a,b,c){var d=a.getLine(c);return this.foldingStartMarker.test(d)?"start":b=="markbeginend"&&this.foldingStopMarker&&this.foldingStopMarker.test(d)?"end":""},this.getFoldWidgetRange=function(a,b,c){return null},this.indentationBlock=function(a,b,c){var e=/^\s*/,f=b,g=b,h=a.getLine(b),i=c||h.length,j=h.match(e)[0].length,k=a.getLength();while(++b<k){h=a.getLine(b);var l=h.match(e)[0].length;if(l==h.length)continue;if(l<=j)break;g=b}if(g>f){var m=a.getLine(g).length;return new d(f,i,g,m)}},this.openingBracketBlock=function(a,b,c,e){var f={row:c,column:e+1},g=a.$findClosingBracket(b,f);if(!g)return;var h=a.foldWidgets[g.row];return h==null&&(h=this.getFoldWidget(a,g.row)),h=="start"&&(g.row--,g.column=a.getLine(g.row).length),d.fromPoints(f,g)}})).call(e.prototype)}),function(){window.require(["ace/ace"],function(a){window.ace||(window.ace={});for(var b in a)a.hasOwnProperty(b)&&(ace[b]=a[b])})}() \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-json-uncompressed.js b/apps/files_texteditor/js/aceeditor/mode-json-uncompressed.js
new file mode 100755
index 00000000000..19dc612ab3e
--- /dev/null
+++ b/apps/files_texteditor/js/aceeditor/mode-json-uncompressed.js
@@ -0,0 +1,689 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/json', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/json_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/mode/behaviour/cstyle', 'ace/mode/folding/cstyle'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextMode = require("./text").Mode;
+var Tokenizer = require("../tokenizer").Tokenizer;
+var HighlightRules = require("./json_highlight_rules").JsonHighlightRules;
+var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
+var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
+var CStyleFoldMode = require("./folding/cstyle").FoldMode;
+
+var Mode = function() {
+ this.$tokenizer = new Tokenizer(new HighlightRules().getRules());
+ this.$outdent = new MatchingBraceOutdent();
+ this.$behaviour = new CstyleBehaviour();
+ this.foldingRules = new CStyleFoldMode();
+};
+oop.inherits(Mode, TextMode);
+
+(function() {
+
+ this.getNextLineIndent = function(state, line, tab) {
+ var indent = this.$getIndent(line);
+
+ if (state == "start") {
+ var match = line.match(/^.*[\{\(\[]\s*$/);
+ if (match) {
+ indent += tab;
+ }
+ }
+
+ return indent;
+ };
+
+ this.checkOutdent = function(state, line, input) {
+ return this.$outdent.checkOutdent(line, input);
+ };
+
+ this.autoOutdent = function(state, doc, row) {
+ this.$outdent.autoOutdent(doc, row);
+ };
+
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ * Mihai Sucan <mihai DOT sucan AT gmail DOT com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/json_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var JsonHighlightRules = function() {
+
+ // regexp must not have capturing parentheses. Use (?:) instead.
+ // regexps are ordered -> the first match is used
+ this.$rules = {
+ "start" : [
+ {
+ token : "string", // single line
+ regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
+ }, {
+ token : "constant.numeric", // hex
+ regex : "0[xX][0-9a-fA-F]+\\b"
+ }, {
+ token : "constant.numeric", // float
+ regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
+ }, {
+ token : "constant.language.boolean",
+ regex : "(?:true|false)\\b"
+ }, {
+ token : "invalid.illegal", // single quoted strings are not allowed
+ regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
+ }, {
+ token : "invalid.illegal", // comments are not allowed
+ regex : "\\/\\/.*$"
+ }, {
+ token : "paren.lparen",
+ regex : "[[({]"
+ }, {
+ token : "paren.rparen",
+ regex : "[\\])}]"
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }
+ ]
+ };
+
+};
+
+oop.inherits(JsonHighlightRules, TextHighlightRules);
+
+exports.JsonHighlightRules = JsonHighlightRules;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var Range = require("../range").Range;
+
+var MatchingBraceOutdent = function() {};
+
+(function() {
+
+ this.checkOutdent = function(line, input) {
+ if (! /^\s+$/.test(line))
+ return false;
+
+ return /^\s*\}/.test(input);
+ };
+
+ this.autoOutdent = function(doc, row) {
+ var line = doc.getLine(row);
+ var match = line.match(/^(\s*\})/);
+
+ if (!match) return 0;
+
+ var column = match[1].length;
+ var openBracePos = doc.findMatchingBracket({row: row, column: column});
+
+ if (!openBracePos || openBracePos.row == row) return 0;
+
+ var indent = this.$getIndent(doc.getLine(openBracePos.row));
+ doc.replace(new Range(row, 0, row, column-1), indent);
+ };
+
+ this.$getIndent = function(line) {
+ var match = line.match(/^(\s+)/);
+ if (match) {
+ return match[1];
+ }
+
+ return "";
+ };
+
+}).call(MatchingBraceOutdent.prototype);
+
+exports.MatchingBraceOutdent = MatchingBraceOutdent;
+});
+/* vim:ts=4:sts=4:sw=4:
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Chris Spencer <chris.ag.spencer AT googlemail DOT com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/behaviour/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var Behaviour = require('../behaviour').Behaviour;
+
+var CstyleBehaviour = function () {
+
+ this.add("braces", "insertion", function (state, action, editor, session, text) {
+ if (text == '{') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '{' + selected + '}',
+ selection: false
+ }
+ } else {
+ return {
+ text: '{}',
+ selection: [1, 1]
+ }
+ }
+ } else if (text == '}') {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '}') {
+ var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});
+ if (matching !== null) {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ } else if (text == "\n") {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '}') {
+ var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column + 1});
+ if (!openBracePos)
+ return null;
+
+ var indent = this.getNextLineIndent(state, line.substring(0, line.length - 1), session.getTabString());
+ var next_indent = this.$getIndent(session.doc.getLine(openBracePos.row));
+
+ return {
+ text: '\n' + indent + '\n' + next_indent,
+ selection: [1, indent.length, 1, indent.length]
+ }
+ }
+ }
+ });
+
+ this.add("braces", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '{') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.end.column, range.end.column + 1);
+ if (rightChar == '}') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+ this.add("parens", "insertion", function (state, action, editor, session, text) {
+ if (text == '(') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '(' + selected + ')',
+ selection: false
+ }
+ } else {
+ return {
+ text: '()',
+ selection: [1, 1]
+ }
+ }
+ } else if (text == ')') {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == ')') {
+ var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});
+ if (matching !== null) {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ }
+ });
+
+ this.add("parens", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '(') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
+ if (rightChar == ')') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+ this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {
+ if (text == '"') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '"' + selected + '"',
+ selection: false
+ }
+ } else {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var leftChar = line.substring(cursor.column-1, cursor.column);
+
+ // We're escaped.
+ if (leftChar == '\\') {
+ return null;
+ }
+
+ // Find what token we're inside.
+ var tokens = session.getTokens(selection.start.row, selection.start.row)[0].tokens;
+ var col = 0, token;
+ var quotepos = -1; // Track whether we're inside an open quote.
+
+ for (var x = 0; x < tokens.length; x++) {
+ token = tokens[x];
+ if (token.type == "string") {
+ quotepos = -1;
+ } else if (quotepos < 0) {
+ quotepos = token.value.indexOf('"');
+ }
+ if ((token.value.length + col) > selection.start.column) {
+ break;
+ }
+ col += tokens[x].value.length;
+ }
+
+ // Try and be smart about when we auto insert.
+ if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf('"') === token.value.length-1)))) {
+ return {
+ text: '""',
+ selection: [1,1]
+ }
+ } else if (token && token.type === "string") {
+ // Ignore input and move right one if we're typing over the closing quote.
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '"') {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ }
+ }
+ });
+
+ this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '"') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
+ if (rightChar == '"') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+}
+oop.inherits(CstyleBehaviour, Behaviour);
+
+exports.CstyleBehaviour = CstyleBehaviour;
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var Range = require("../../range").Range;
+var BaseFoldMode = require("./fold_mode").FoldMode;
+
+var FoldMode = exports.FoldMode = function() {};
+oop.inherits(FoldMode, BaseFoldMode);
+
+(function() {
+
+ this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
+ this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ var line = session.getLine(row);
+ var match = line.match(this.foldingStartMarker);
+ if (match) {
+ var i = match.index;
+
+ if (match[1])
+ return this.openingBracketBlock(session, match[1], row, i);
+
+ var range = session.getCommentFoldRange(row, i + match[0].length);
+ range.end.column -= 2;
+ return range;
+ }
+
+ if (foldStyle !== "markbeginend")
+ return;
+
+ var match = line.match(this.foldingStopMarker);
+ if (match) {
+ var i = match.index + match[0].length;
+
+ if (match[2]) {
+ var range = session.getCommentFoldRange(row, i);
+ range.end.column -= 2;
+ return range;
+ }
+
+ var end = {row: row, column: i};
+ var start = session.$findOpeningBracket(match[1], end);
+
+ if (!start)
+ return;
+
+ start.column++;
+ end.column--;
+
+ return Range.fromPoints(start, end);
+ }
+ };
+
+}).call(FoldMode.prototype);
+
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/fold_mode', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var Range = require("../../range").Range;
+
+var FoldMode = exports.FoldMode = function() {};
+
+(function() {
+
+ this.foldingStartMarker = null;
+ this.foldingStopMarker = null;
+
+ // must return "" if there's no fold, to enable caching
+ this.getFoldWidget = function(session, foldStyle, row) {
+ var line = session.getLine(row);
+ if (this.foldingStartMarker.test(line))
+ return "start";
+ if (foldStyle == "markbeginend"
+ && this.foldingStopMarker
+ && this.foldingStopMarker.test(line))
+ return "end";
+ return "";
+ };
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ return null;
+ };
+
+ this.indentationBlock = function(session, row, column) {
+ var re = /^\s*/;
+ var startRow = row;
+ var endRow = row;
+ var line = session.getLine(row);
+ var startColumn = column || line.length;
+ var startLevel = line.match(re)[0].length;
+ var maxRow = session.getLength()
+
+ while (++row < maxRow) {
+ line = session.getLine(row);
+ var level = line.match(re)[0].length;
+
+ if (level == line.length)
+ continue;
+
+ if (level <= startLevel)
+ break;
+
+ endRow = row;
+ }
+
+ if (endRow > startRow) {
+ var endColumn = session.getLine(endRow).length;
+ return new Range(startRow, startColumn, endRow, endColumn);
+ }
+ };
+
+ this.openingBracketBlock = function(session, bracket, row, column) {
+ var start = {row: row, column: column + 1};
+ var end = session.$findClosingBracket(bracket, start);
+ if (!end)
+ return;
+
+ var fw = session.foldWidgets[end.row];
+ if (fw == null)
+ fw = this.getFoldWidget(session, end.row);
+
+ if (fw == "start") {
+ end.row --;
+ end.column = session.getLine(end.row).length;
+ }
+ return Range.fromPoints(start, end);
+ };
+
+}).call(FoldMode.prototype);
+
+});
+;
+ (function() {
+ window.require(["ace/ace"], function(a) {
+ if (!window.ace)
+ window.ace = {};
+ for (var key in a) if (a.hasOwnProperty(key))
+ ace[key] = a[key];
+ });
+ })();
+ \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-json.js b/apps/files_texteditor/js/aceeditor/mode-json.js
index 66df13b26d5..d0dd59fec3e 100644
--- a/apps/files_texteditor/js/aceeditor/mode-json.js
+++ b/apps/files_texteditor/js/aceeditor/mode-json.js
@@ -1 +1 @@
-define("ace/mode/json",["require","exports","module","pilot/oop","ace/mode/text","ace/tokenizer","ace/mode/json_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/mode/behaviour/cstyle"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/text").Mode,f=a("ace/tokenizer").Tokenizer,g=a("ace/mode/json_highlight_rules").JsonHighlightRules,h=a("ace/mode/matching_brace_outdent").MatchingBraceOutdent,i=a("ace/range").Range,j=a("ace/mode/behaviour/cstyle").CstyleBehaviour,k=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h,this.$behaviour=new j};d.inherits(k,e),function(){this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=this.$tokenizer.getLineTokens(b,a),f=e.tokens,g=e.state;if(a=="start"){var h=b.match(/^.*[\{\(\[]\s*$/);h&&(d+=c)}return d},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)}}.call(k.prototype),b.Mode=k}),define("ace/mode/json_highlight_rules",["require","exports","module","pilot/oop","pilot/lang","ace/mode/text_highlight_rules"],function(a,b,c){var d=a("pilot/oop"),e=a("pilot/lang"),f=a("ace/mode/text_highlight_rules").TextHighlightRules,g=function(){this.$rules={start:[{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:"invalid.illegal",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"invalid.illegal",regex:"\\/\\/.*$"},{token:"lparen",regex:"[[({]"},{token:"rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}]}};d.inherits(g,f),b.JsonHighlightRules=g}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(a,b,c){var d=a("ace/range").Range,e=function(){};(function(){this.checkOutdent=function(a,b){return/^\s+$/.test(a)?/^\s*\}/.test(b):!1},this.autoOutdent=function(a,b){var c=a.getLine(b),e=c.match(/^(\s*\})/);if(!e)return 0;var f=e[1].length,g=a.findMatchingBracket({row:b,column:f});if(!g||g.row==b)return 0;var h=this.$getIndent(a.getLine(g.row));a.replace(new d(b,0,b,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""}}).call(e.prototype),b.MatchingBraceOutdent=e}),define("ace/mode/behaviour/cstyle",["require","exports","module","pilot/oop","ace/mode/behaviour"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/behaviour").Behaviour,f=function(){this.add("braces","insertion",function(a,b,c,d,e){if(e=="{"){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"{"+g+"}",selection:!1}:{text:"{}",selection:[1,1]}}if(e=="}"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var k=d.$findOpeningBracket("}",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}else if(e=="\n"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var l=d.findMatchingBracket({row:h.row,column:h.column+1});if(!l)return!1;var m=this.getNextLineIndent(a,i.substring(0,i.length-1),d.getTabString()),n=this.$getIndent(d.doc.getLine(l.row));return{text:"\n"+m+"\n"+n,selection:[1,m.length,1,m.length]}}}return!1}),this.add("braces","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="{"){var g=d.doc.getLine(e.start.row),h=g.substring(e.end.column,e.end.column+1);if(h=="}"){e.end.column++;return e}}return!1}),this.add("parens","insertion",function(a,b,c,d,e){if(e=="("){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"("+g+")",selection:!1}:{text:"()",selection:[1,1]}}if(e==")"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j==")"){var k=d.$findOpeningBracket(")",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}return!1}),this.add("parens","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="("){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h==")"){e.end.column++;return e}}return!1}),this.add("string_dquotes","insertion",function(a,b,c,d,e){if(e=='"'){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);if(g!=="")return{text:'"'+g+'"',selection:!1};var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column-1,h.column);if(j=="\\")return!1;var k=d.getTokens(f.start.row,f.start.row)[0].tokens,l=0,m,n=-1;for(var o=0;o<k.length;o++){m=k[o],m.type=="string"?n=-1:n<0&&(n=m.value.indexOf('"'));if(m.value.length+l>f.start.column)break;l+=k[o].value.length}if(!m||n<0&&m.type!=="comment"&&(m.type!=="string"||f.start.column!==m.value.length+l-1&&m.value.lastIndexOf('"')===m.value.length-1))return{text:'""',selection:[1,1]};if(m&&m.type==="string"){var p=i.substring(h.column,h.column+1);if(p=='"')return{text:"",selection:[1,1]}}}return!1}),this.add("string_dquotes","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=='"'){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h=='"'){e.end.column++;return e}}return!1})};d.inherits(f,e),b.CstyleBehaviour=f}) \ No newline at end of file
+define("ace/mode/json",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/json_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text").Mode,f=a("../tokenizer").Tokenizer,g=a("./json_highlight_rules").JsonHighlightRules,h=a("./matching_brace_outdent").MatchingBraceOutdent,i=a("./behaviour/cstyle").CstyleBehaviour,j=a("./folding/cstyle").FoldMode,k=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h,this.$behaviour=new i,this.foldingRules=new j};d.inherits(k,e),function(){this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b);if(a=="start"){var e=b.match(/^.*[\{\(\[]\s*$/);e&&(d+=c)}return d},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)}}.call(k.prototype),b.Mode=k}),define("ace/mode/json_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text_highlight_rules").TextHighlightRules,f=function(){this.$rules={start:[{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:"invalid.illegal",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"invalid.illegal",regex:"\\/\\/.*$"},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}]}};d.inherits(f,e),b.JsonHighlightRules=f}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(a,b,c){"use strict";var d=a("../range").Range,e=function(){};((function(){this.checkOutdent=function(a,b){return/^\s+$/.test(a)?/^\s*\}/.test(b):!1},this.autoOutdent=function(a,b){var c=a.getLine(b),e=c.match(/^(\s*\})/);if(!e)return 0;var f=e[1].length,g=a.findMatchingBracket({row:b,column:f});if(!g||g.row==b)return 0;var h=this.$getIndent(a.getLine(g.row));a.replace(new d(b,0,b,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""}})).call(e.prototype),b.MatchingBraceOutdent=e}),define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("../behaviour").Behaviour,f=function(){this.add("braces","insertion",function(a,b,c,d,e){if(e=="{"){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"{"+g+"}",selection:!1}:{text:"{}",selection:[1,1]}}if(e=="}"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var k=d.$findOpeningBracket("}",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}else if(e=="\n"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var l=d.findMatchingBracket({row:h.row,column:h.column+1});if(!l)return null;var m=this.getNextLineIndent(a,i.substring(0,i.length-1),d.getTabString()),n=this.$getIndent(d.doc.getLine(l.row));return{text:"\n"+m+"\n"+n,selection:[1,m.length,1,m.length]}}}}),this.add("braces","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="{"){var g=d.doc.getLine(e.start.row),h=g.substring(e.end.column,e.end.column+1);if(h=="}")return e.end.column++,e}}),this.add("parens","insertion",function(a,b,c,d,e){if(e=="("){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"("+g+")",selection:!1}:{text:"()",selection:[1,1]}}if(e==")"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j==")"){var k=d.$findOpeningBracket(")",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="("){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h==")")return e.end.column++,e}}),this.add("string_dquotes","insertion",function(a,b,c,d,e){if(e=='"'){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);if(g!=="")return{text:'"'+g+'"',selection:!1};var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column-1,h.column);if(j=="\\")return null;var k=d.getTokens(f.start.row,f.start.row)[0].tokens,l=0,m,n=-1;for(var o=0;o<k.length;o++){m=k[o],m.type=="string"?n=-1:n<0&&(n=m.value.indexOf('"'));if(m.value.length+l>f.start.column)break;l+=k[o].value.length}if(!m||n<0&&m.type!=="comment"&&(m.type!=="string"||f.start.column!==m.value.length+l-1&&m.value.lastIndexOf('"')===m.value.length-1))return{text:'""',selection:[1,1]};if(m&&m.type==="string"){var p=i.substring(h.column,h.column+1);if(p=='"')return{text:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=='"'){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h=='"')return e.end.column++,e}})};d.inherits(f,e),b.CstyleBehaviour=f}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("../../range").Range,f=a("./fold_mode").FoldMode,g=b.FoldMode=function(){};d.inherits(g,f),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(a,b,c){var d=a.getLine(c),f=d.match(this.foldingStartMarker);if(f){var g=f.index;if(f[1])return this.openingBracketBlock(a,f[1],c,g);var h=a.getCommentFoldRange(c,g+f[0].length);return h.end.column-=2,h}if(b!=="markbeginend")return;var f=d.match(this.foldingStopMarker);if(f){var g=f.index+f[0].length;if(f[2]){var h=a.getCommentFoldRange(c,g);return h.end.column-=2,h}var i={row:c,column:g},j=a.$findOpeningBracket(f[1],i);if(!j)return;return j.column++,i.column--,e.fromPoints(j,i)}}}.call(g.prototype)}),define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"],function(a,b,c){"use strict";var d=a("../../range").Range,e=b.FoldMode=function(){};((function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(a,b,c){var d=a.getLine(c);return this.foldingStartMarker.test(d)?"start":b=="markbeginend"&&this.foldingStopMarker&&this.foldingStopMarker.test(d)?"end":""},this.getFoldWidgetRange=function(a,b,c){return null},this.indentationBlock=function(a,b,c){var e=/^\s*/,f=b,g=b,h=a.getLine(b),i=c||h.length,j=h.match(e)[0].length,k=a.getLength();while(++b<k){h=a.getLine(b);var l=h.match(e)[0].length;if(l==h.length)continue;if(l<=j)break;g=b}if(g>f){var m=a.getLine(g).length;return new d(f,i,g,m)}},this.openingBracketBlock=function(a,b,c,e){var f={row:c,column:e+1},g=a.$findClosingBracket(b,f);if(!g)return;var h=a.foldWidgets[g.row];return h==null&&(h=this.getFoldWidget(a,g.row)),h=="start"&&(g.row--,g.column=a.getLine(g.row).length),d.fromPoints(f,g)}})).call(e.prototype)}),function(){window.require(["ace/ace"],function(a){window.ace||(window.ace={});for(var b in a)a.hasOwnProperty(b)&&(ace[b]=a[b])})}() \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-latex-uncompressed.js b/apps/files_texteditor/js/aceeditor/mode-latex-uncompressed.js
new file mode 100755
index 00000000000..864f28d96a9
--- /dev/null
+++ b/apps/files_texteditor/js/aceeditor/mode-latex-uncompressed.js
@@ -0,0 +1,105 @@
+define('ace/mode/latex', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/latex_highlight_rules', 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextMode = require("./text").Mode;
+var Tokenizer = require("../tokenizer").Tokenizer;
+var LatexHighlightRules = require("./latex_highlight_rules").LatexHighlightRules;
+var Range = require("../range").Range;
+
+var Mode = function()
+{
+ this.$tokenizer = new Tokenizer(new LatexHighlightRules().getRules());
+};
+oop.inherits(Mode, TextMode);
+
+(function() {
+ this.toggleCommentLines = function(state, doc, startRow, endRow) {
+ // This code is adapted from ruby.js
+ var outdent = true;
+
+ // LaTeX comments begin with % and go to the end of the line
+ var commentRegEx = /^(\s*)\%/;
+
+ for (var i = startRow; i <= endRow; i++) {
+ if (!commentRegEx.test(doc.getLine(i))) {
+ outdent = false;
+ break;
+ }
+ }
+
+ if (outdent) {
+ var deleteRange = new Range(0, 0, 0, 0);
+ for (var i = startRow; i <= endRow; i++) {
+ var line = doc.getLine(i);
+ var m = line.match(commentRegEx);
+ deleteRange.start.row = i;
+ deleteRange.end.row = i;
+ deleteRange.end.column = m[0].length;
+ doc.replace(deleteRange, m[1]);
+ }
+ }
+ else {
+ doc.indentRows(startRow, endRow, "%");
+ }
+ };
+
+ // There is no universally accepted way of indenting a tex document
+ // so just maintain the indentation of the previous line
+ this.getNextLineIndent = function(state, line, tab) {
+ return this.$getIndent(line);
+ };
+
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+
+});
+define('ace/mode/latex_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var LatexHighlightRules = function() {
+ this.$rules = {
+ "start" : [{
+ // A tex command e.g. \foo
+ token : "keyword",
+ regex : "\\\\(?:[^a-zA-Z]|[a-zA-Z]+)",
+ }, {
+ // Curly and square braces
+ token : "lparen",
+ regex : "[[({]"
+ }, {
+ // Curly and square braces
+ token : "rparen",
+ regex : "[\\])}]"
+ }, {
+ // Inline math between two $ symbols
+ token : "string",
+ regex : "\\$(?:(?:\\\\.)|(?:[^\\$\\\\]))*?\\$"
+ }, {
+ // A comment. Tex comments start with % and go to
+ // the end of the line
+ token : "comment",
+ regex : "%.*$"
+ }]
+ };
+};
+
+oop.inherits(LatexHighlightRules, TextHighlightRules);
+
+exports.LatexHighlightRules = LatexHighlightRules;
+
+});
+;
+ (function() {
+ window.require(["ace/ace"], function(a) {
+ if (!window.ace)
+ window.ace = {};
+ for (var key in a) if (a.hasOwnProperty(key))
+ ace[key] = a[key];
+ });
+ })();
+ \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-latex.js b/apps/files_texteditor/js/aceeditor/mode-latex.js
new file mode 100755
index 00000000000..3498213a644
--- /dev/null
+++ b/apps/files_texteditor/js/aceeditor/mode-latex.js
@@ -0,0 +1 @@
+define("ace/mode/latex",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/latex_highlight_rules","ace/range"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text").Mode,f=a("../tokenizer").Tokenizer,g=a("./latex_highlight_rules").LatexHighlightRules,h=a("../range").Range,i=function(){this.$tokenizer=new f((new g).getRules())};d.inherits(i,e),function(){this.toggleCommentLines=function(a,b,c,d){var e=!0,f=/^(\s*)\%/;for(var g=c;g<=d;g++)if(!f.test(b.getLine(g))){e=!1;break}if(e){var i=new h(0,0,0,0);for(var g=c;g<=d;g++){var j=b.getLine(g),k=j.match(f);i.start.row=g,i.end.row=g,i.end.column=k[0].length,b.replace(i,k[1])}}else b.indentRows(c,d,"%")},this.getNextLineIndent=function(a,b,c){return this.$getIndent(b)}}.call(i.prototype),b.Mode=i}),define("ace/mode/latex_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text_highlight_rules").TextHighlightRules,f=function(){this.$rules={start:[{token:"keyword",regex:"\\\\(?:[^a-zA-Z]|[a-zA-Z]+)"},{token:"lparen",regex:"[[({]"},{token:"rparen",regex:"[\\])}]"},{token:"string",regex:"\\$(?:(?:\\\\.)|(?:[^\\$\\\\]))*?\\$"},{token:"comment",regex:"%.*$"}]}};d.inherits(f,e),b.LatexHighlightRules=f}),function(){window.require(["ace/ace"],function(a){window.ace||(window.ace={});for(var b in a)a.hasOwnProperty(b)&&(ace[b]=a[b])})}() \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-lua-uncompressed.js b/apps/files_texteditor/js/aceeditor/mode-lua-uncompressed.js
new file mode 100755
index 00000000000..454108c6d44
--- /dev/null
+++ b/apps/files_texteditor/js/aceeditor/mode-lua-uncompressed.js
@@ -0,0 +1,533 @@
+/* ***** BEGIN LICENSE BLOCK *****
+* Version: MPL 1.1/GPL 2.0/LGPL 2.1
+*
+* The contents of this file are subject to the Mozilla Public License Version
+* 1.1 (the "License"); you may not use this file except in compliance with
+* the License. You may obtain a copy of the License at
+* http://www.mozilla.org/MPL/
+*
+* Software distributed under the License is distributed on an "AS IS" basis,
+* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+* for the specific language governing rights and limitations under the
+* License.
+*
+* The Original Code is Ajax.org Code Editor (ACE).
+*
+* The Initial Developer of the Original Code is
+* Ajax.org B.V.
+* Portions created by the Initial Developer are Copyright (C) 2010
+* the Initial Developer. All Rights Reserved.
+*
+* Contributor(s):
+* Fabian Jakobs <fabian AT ajax DOT org>
+* Colin Gourlay <colin DOT j DOT gourlay AT gmail DOT com>
+* Lee Gao
+*
+* Alternatively, the contents of this file may be used under the terms of
+* either the GNU General Public License Version 2 or later (the "GPL"), or
+* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+* in which case the provisions of the GPL or the LGPL are applicable instead
+* of those above. If you wish to allow use of your version of this file only
+* under the terms of either the GPL or the LGPL, and not to allow others to
+* use your version of this file under the terms of the MPL, indicate your
+* decision by deleting the provisions above and replace them with the notice
+* and other provisions required by the GPL or the LGPL. If you do not delete
+* the provisions above, a recipient may use your version of this file under
+* the terms of any one of the MPL, the GPL or the LGPL.
+*
+* ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/lua', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/lua_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextMode = require("./text").Mode;
+var Tokenizer = require("../tokenizer").Tokenizer;
+var LuaHighlightRules = require("./lua_highlight_rules").LuaHighlightRules;
+
+var Mode = function() {
+ this.$tokenizer = new Tokenizer(new LuaHighlightRules().getRules());
+};
+oop.inherits(Mode, TextMode);
+
+(function() {
+ this.getNextLineIndent = function(state, line, tab) {
+ var indent = this.$getIndent(line);
+
+ var tokenizedLine = this.$tokenizer.getLineTokens(line, state);
+ var tokens = tokenizedLine.tokens;
+
+ var chunks = ["function", "then", "do", "repeat"];
+
+ if (state == "start") {
+ var match = line.match(/^.*[\{\(\[]\s*$/);
+ if (match) {
+ indent += tab;
+ } else {
+ for (var i in tokens){
+ var token = tokens[i];
+ if (token.type != "keyword") continue;
+ var chunk_i = chunks.indexOf(token.value);
+ if (chunk_i != -1){
+ indent += tab;
+ break;
+ }
+ }
+ }
+ }
+
+ return indent;
+ };
+
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+});
+
+
+/* ***** BEGIN LICENSE BLOCK *****
+* Version: MPL 1.1/GPL 2.0/LGPL 2.1
+*
+* The contents of this file are subject to the Mozilla Public License Version
+* 1.1 (the "License"); you may not use this file except in compliance with
+* the License. You may obtain a copy of the License at
+* http://www.mozilla.org/MPL/
+*
+* Software distributed under the License is distributed on an "AS IS" basis,
+* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+* for the specific language governing rights and limitations under the
+* License.
+*
+* The Original Code is Ajax.org Code Editor (ACE).
+*
+* The Initial Developer of the Original Code is
+* Ajax.org B.V.
+* Portions created by the Initial Developer are Copyright (C) 2010
+* the Initial Developer. All Rights Reserved.
+*
+* Contributor(s):
+* Fabian Jakobs <fabian AT ajax DOT org>
+* Colin Gourlay <colin DOT j DOT gourlay AT gmail DOT com>
+* Lee Gao
+*
+* Alternatively, the contents of this file may be used under the terms of
+* either the GNU General Public License Version 2 or later (the "GPL"), or
+* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+* in which case the provisions of the GPL or the LGPL are applicable instead
+* of those above. If you wish to allow use of your version of this file only
+* under the terms of either the GPL or the LGPL, and not to allow others to
+* use your version of this file under the terms of the MPL, indicate your
+* decision by deleting the provisions above and replace them with the notice
+* and other provisions required by the GPL or the LGPL. If you do not delete
+* the provisions above, a recipient may use your version of this file under
+* the terms of any one of the MPL, the GPL or the LGPL.
+*
+* ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/lua_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var lang = require("../lib/lang");
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var LuaHighlightRules = function() {
+
+ var keywords = lang.arrayToMap(
+ ("break|do|else|elseif|end|for|function|if|in|local|repeat|"+
+ "return|then|until|while|or|and|not").split("|")
+ );
+
+ var builtinConstants = lang.arrayToMap(
+ ("true|false|nil|_G|_VERSION").split("|")
+ );
+
+ var builtinFunctions = lang.arrayToMap(
+ ("string|xpcall|package|tostring|print|os|unpack|require|"+
+ "getfenv|setmetatable|next|assert|tonumber|io|rawequal|"+
+ "collectgarbage|getmetatable|module|rawset|math|debug|"+
+ "pcall|table|newproxy|type|coroutine|_G|select|gcinfo|"+
+ "pairs|rawget|loadstring|ipairs|_VERSION|dofile|setfenv|"+
+ "load|error|loadfile|"+
+
+ "sub|upper|len|gfind|rep|find|match|char|dump|gmatch|"+
+ "reverse|byte|format|gsub|lower|preload|loadlib|loaded|"+
+ "loaders|cpath|config|path|seeall|exit|setlocale|date|"+
+ "getenv|difftime|remove|time|clock|tmpname|rename|execute|"+
+ "lines|write|close|flush|open|output|type|read|stderr|"+
+ "stdin|input|stdout|popen|tmpfile|log|max|acos|huge|"+
+ "ldexp|pi|cos|tanh|pow|deg|tan|cosh|sinh|random|randomseed|"+
+ "frexp|ceil|floor|rad|abs|sqrt|modf|asin|min|mod|fmod|log10|"+
+ "atan2|exp|sin|atan|getupvalue|debug|sethook|getmetatable|"+
+ "gethook|setmetatable|setlocal|traceback|setfenv|getinfo|"+
+ "setupvalue|getlocal|getregistry|getfenv|setn|insert|getn|"+
+ "foreachi|maxn|foreach|concat|sort|remove|resume|yield|"+
+ "status|wrap|create|running").split("|")
+ );
+
+ var stdLibaries = lang.arrayToMap(
+ ("string|package|os|io|math|debug|table|coroutine").split("|")
+ );
+
+ var metatableMethods = lang.arrayToMap(
+ ("__add|__sub|__mod|__unm|__concat|__lt|__index|__call|__gc|__metatable|"+
+ "__mul|__div|__pow|__len|__eq|__le|__newindex|__tostring|__mode|__tonumber").split("|")
+ );
+
+ var futureReserved = lang.arrayToMap(
+ ("").split("|")
+ );
+
+ var deprecatedIn5152 = lang.arrayToMap(
+ ("setn|foreach|foreachi|gcinfo|log10|maxn").split("|")
+ );
+
+ var strPre = "";
+
+ var decimalInteger = "(?:(?:[1-9]\\d*)|(?:0))";
+ var hexInteger = "(?:0[xX][\\dA-Fa-f]+)";
+ var integer = "(?:" + decimalInteger + "|" + hexInteger + ")";
+
+ var fraction = "(?:\\.\\d+)";
+ var intPart = "(?:\\d+)";
+ var pointFloat = "(?:(?:" + intPart + "?" + fraction + ")|(?:" + intPart + "\\.))";
+ var floatNumber = "(?:" + pointFloat + ")";
+
+ var comment_stack = [];
+
+ this.$rules = {
+ "start" :
+
+
+ // bracketed comments
+ [{
+ token : "comment", // --[[ comment
+ regex : strPre + '\\-\\-\\[\\[.*\\]\\]'
+ }, {
+ token : "comment", // --[=[ comment
+ regex : strPre + '\\-\\-\\[\\=\\[.*\\]\\=\\]'
+ }, {
+ token : "comment", // --[==[ comment
+ regex : strPre + '\\-\\-\\[\\={2}\\[.*\\]\\={2}\\]'
+ }, {
+ token : "comment", // --[===[ comment
+ regex : strPre + '\\-\\-\\[\\={3}\\[.*\\]\\={3}\\]'
+ }, {
+ token : "comment", // --[====[ comment
+ regex : strPre + '\\-\\-\\[\\={4}\\[.*\\]\\={4}\\]'
+ }, {
+ token : "comment", // --[====+[ comment
+ regex : strPre + '\\-\\-\\[\\={5}\\=*\\[.*\\]\\={5}\\=*\\]'
+ },
+
+ // multiline bracketed comments
+ {
+ token : "comment", // --[[ comment
+ regex : strPre + '\\-\\-\\[\\[.*$',
+ merge : true,
+ next : "qcomment"
+ }, {
+ token : "comment", // --[=[ comment
+ regex : strPre + '\\-\\-\\[\\=\\[.*$',
+ merge : true,
+ next : "qcomment1"
+ }, {
+ token : "comment", // --[==[ comment
+ regex : strPre + '\\-\\-\\[\\={2}\\[.*$',
+ merge : true,
+ next : "qcomment2"
+ }, {
+ token : "comment", // --[===[ comment
+ regex : strPre + '\\-\\-\\[\\={3}\\[.*$',
+ merge : true,
+ next : "qcomment3"
+ }, {
+ token : "comment", // --[====[ comment
+ regex : strPre + '\\-\\-\\[\\={4}\\[.*$',
+ merge : true,
+ next : "qcomment4"
+ }, {
+ token : function(value){ // --[====+[ comment
+ // WARNING: EXTREMELY SLOW, but this is the only way to circumvent the
+ // limits imposed by the current automaton.
+ // I've never personally seen any practical code where 5 or more '='s are
+ // used for string or commenting, so this will rarely be invoked.
+ var pattern = /\-\-\[(\=+)\[/, match;
+ // you can never be too paranoid ;)
+ if ((match = pattern.exec(value)) != null && (match = match[1]) != undefined)
+ comment_stack.push(match.length);
+
+ return "comment";
+ },
+ regex : strPre + '\\-\\-\\[\\={5}\\=*\\[.*$',
+ merge : true,
+ next : "qcomment5"
+ },
+
+ // single line comments
+ {
+ token : "comment",
+ regex : "\\-\\-.*$"
+ },
+
+ // bracketed strings
+ {
+ token : "string", // [[ string
+ regex : strPre + '\\[\\[.*\\]\\]'
+ }, {
+ token : "string", // [=[ string
+ regex : strPre + '\\[\\=\\[.*\\]\\=\\]'
+ }, {
+ token : "string", // [==[ string
+ regex : strPre + '\\[\\={2}\\[.*\\]\\={2}\\]'
+ }, {
+ token : "string", // [===[ string
+ regex : strPre + '\\[\\={3}\\[.*\\]\\={3}\\]'
+ }, {
+ token : "string", // [====[ string
+ regex : strPre + '\\[\\={4}\\[.*\\]\\={4}\\]'
+ }, {
+ token : "string", // [====+[ string
+ regex : strPre + '\\[\\={5}\\=*\\[.*\\]\\={5}\\=*\\]'
+ },
+
+ // multiline bracketed strings
+ {
+ token : "string", // [[ string
+ regex : strPre + '\\[\\[.*$',
+ merge : true,
+ next : "qstring"
+ }, {
+ token : "string", // [=[ string
+ regex : strPre + '\\[\\=\\[.*$',
+ merge : true,
+ next : "qstring1"
+ }, {
+ token : "string", // [==[ string
+ regex : strPre + '\\[\\={2}\\[.*$',
+ merge : true,
+ next : "qstring2"
+ }, {
+ token : "string", // [===[ string
+ regex : strPre + '\\[\\={3}\\[.*$',
+ merge : true,
+ next : "qstring3"
+ }, {
+ token : "string", // [====[ string
+ regex : strPre + '\\[\\={4}\\[.*$',
+ merge : true,
+ next : "qstring4"
+ }, {
+ token : function(value){ // --[====+[ string
+ // WARNING: EXTREMELY SLOW, see above.
+ var pattern = /\[(\=+)\[/, match;
+ if ((match = pattern.exec(value)) != null && (match = match[1]) != undefined)
+ comment_stack.push(match.length);
+
+ return "string";
+ },
+ regex : strPre + '\\[\\={5}\\=*\\[.*$',
+ merge : true,
+ next : "qstring5"
+ },
+
+ {
+ token : "string", // " string
+ regex : strPre + '"(?:[^\\\\]|\\\\.)*?"'
+ }, {
+ token : "string", // ' string
+ regex : strPre + "'(?:[^\\\\]|\\\\.)*?'"
+ }, {
+ token : "constant.numeric", // float
+ regex : floatNumber
+ }, {
+ token : "constant.numeric", // integer
+ regex : integer + "\\b"
+ }, {
+ token : function(value) {
+ if (keywords.hasOwnProperty(value))
+ return "keyword";
+ else if (builtinConstants.hasOwnProperty(value))
+ return "constant.language";
+ else if (futureReserved.hasOwnProperty(value))
+ return "invalid.illegal";
+ else if (stdLibaries.hasOwnProperty(value))
+ return "constant.library";
+ else if (deprecatedIn5152.hasOwnProperty(value))
+ return "invalid.deprecated";
+ else if (builtinFunctions.hasOwnProperty(value))
+ return "support.function";
+ else if (metatableMethods.hasOwnProperty(value))
+ return "support.function";
+ else
+ return "identifier";
+ },
+ regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
+ }, {
+ token : "keyword.operator",
+ regex : "\\+|\\-|\\*|\\/|%|\\#|\\^|~|<|>|<=|=>|==|~=|=|\\:|\\.\\.\\.|\\.\\."
+ }, {
+ token : "paren.lparen",
+ regex : "[\\[\\(\\{]"
+ }, {
+ token : "paren.rparen",
+ regex : "[\\]\\)\\}]"
+ }, {
+ token : "text",
+ regex : "\\s+"
+ } ],
+
+ "qcomment": [ {
+ token : "comment",
+ regex : "(?:[^\\\\]|\\\\.)*?\\]\\]",
+ next : "start"
+ }, {
+ token : "comment",
+ merge : true,
+ regex : '.+'
+ } ],
+ "qcomment1": [ {
+ token : "comment",
+ regex : "(?:[^\\\\]|\\\\.)*?\\]\\=\\]",
+ next : "start"
+ }, {
+ token : "comment",
+ merge : true,
+ regex : '.+'
+ } ],
+ "qcomment2": [ {
+ token : "comment",
+ regex : "(?:[^\\\\]|\\\\.)*?\\]\\={2}\\]",
+ next : "start"
+ }, {
+ token : "comment",
+ merge : true,
+ regex : '.+'
+ } ],
+ "qcomment3": [ {
+ token : "comment",
+ regex : "(?:[^\\\\]|\\\\.)*?\\]\\={3}\\]",
+ next : "start"
+ }, {
+ token : "comment",
+ merge : true,
+ regex : '.+'
+ } ],
+ "qcomment4": [ {
+ token : "comment",
+ regex : "(?:[^\\\\]|\\\\.)*?\\]\\={4}\\]",
+ next : "start"
+ }, {
+ token : "comment",
+ merge : true,
+ regex : '.+'
+ } ],
+ "qcomment5": [ {
+ token : function(value){
+ // very hackish, mutates the qcomment5 field on the fly.
+ var pattern = /\](\=+)\]/, rule = this.rules.qcomment5[0], match;
+ rule.next = "start";
+ if ((match = pattern.exec(value)) != null && (match = match[1]) != undefined){
+ var found = match.length, expected;
+ if ((expected = comment_stack.pop()) != found){
+ comment_stack.push(expected);
+ rule.next = "qcomment5";
+ }
+ }
+
+ return "comment";
+ },
+ regex : "(?:[^\\\\]|\\\\.)*?\\]\\={5}\\=*\\]",
+ next : "start"
+ }, {
+ token : "comment",
+ merge : true,
+ regex : '.+'
+ } ],
+
+ "qstring": [ {
+ token : "string",
+ regex : "(?:[^\\\\]|\\\\.)*?\\]\\]",
+ next : "start"
+ }, {
+ token : "string",
+ merge : true,
+ regex : '.+'
+ } ],
+ "qstring1": [ {
+ token : "string",
+ regex : "(?:[^\\\\]|\\\\.)*?\\]\\=\\]",
+ next : "start"
+ }, {
+ token : "string",
+ merge : true,
+ regex : '.+'
+ } ],
+ "qstring2": [ {
+ token : "string",
+ regex : "(?:[^\\\\]|\\\\.)*?\\]\\={2}\\]",
+ next : "start"
+ }, {
+ token : "string",
+ merge : true,
+ regex : '.+'
+ } ],
+ "qstring3": [ {
+ token : "string",
+ regex : "(?:[^\\\\]|\\\\.)*?\\]\\={3}\\]",
+ next : "start"
+ }, {
+ token : "string",
+ merge : true,
+ regex : '.+'
+ } ],
+ "qstring4": [ {
+ token : "string",
+ regex : "(?:[^\\\\]|\\\\.)*?\\]\\={4}\\]",
+ next : "start"
+ }, {
+ token : "string",
+ merge : true,
+ regex : '.+'
+ } ],
+ "qstring5": [ {
+ token : function(value){
+ // very hackish, mutates the qstring5 field on the fly.
+ var pattern = /\](\=+)\]/, rule = this.rules.qstring5[0], match;
+ rule.next = "start";
+ if ((match = pattern.exec(value)) != null && (match = match[1]) != undefined){
+ var found = match.length, expected;
+ if ((expected = comment_stack.pop()) != found){
+ comment_stack.push(expected);
+ rule.next = "qstring5";
+ }
+ }
+
+ return "string";
+ },
+ regex : "(?:[^\\\\]|\\\\.)*?\\]\\={5}\\=*\\]",
+ next : "start"
+ }, {
+ token : "string",
+ merge : true,
+ regex : '.+'
+ } ]
+
+ };
+
+}
+
+oop.inherits(LuaHighlightRules, TextHighlightRules);
+
+exports.LuaHighlightRules = LuaHighlightRules;
+});
+;
+ (function() {
+ window.require(["ace/ace"], function(a) {
+ if (!window.ace)
+ window.ace = {};
+ for (var key in a) if (a.hasOwnProperty(key))
+ ace[key] = a[key];
+ });
+ })();
+ \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-lua.js b/apps/files_texteditor/js/aceeditor/mode-lua.js
new file mode 100755
index 00000000000..63b812c6bd7
--- /dev/null
+++ b/apps/files_texteditor/js/aceeditor/mode-lua.js
@@ -0,0 +1 @@
+define("ace/mode/lua",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/lua_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text").Mode,f=a("../tokenizer").Tokenizer,g=a("./lua_highlight_rules").LuaHighlightRules,h=function(){this.$tokenizer=new f((new g).getRules())};d.inherits(h,e),function(){this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=this.$tokenizer.getLineTokens(b,a),f=e.tokens,g=["function","then","do","repeat"];if(a=="start"){var h=b.match(/^.*[\{\(\[]\s*$/);if(h)d+=c;else for(var i in f){var j=f[i];if(j.type!="keyword")continue;var k=g.indexOf(j.value);if(k!=-1){d+=c;break}}}return d}}.call(h.prototype),b.Mode=h}),define("ace/mode/lua_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("../lib/lang"),f=a("./text_highlight_rules").TextHighlightRules,g=function(){var a=e.arrayToMap("break|do|else|elseif|end|for|function|if|in|local|repeat|return|then|until|while|or|and|not".split("|")),b=e.arrayToMap("true|false|nil|_G|_VERSION".split("|")),c=e.arrayToMap("string|xpcall|package|tostring|print|os|unpack|require|getfenv|setmetatable|next|assert|tonumber|io|rawequal|collectgarbage|getmetatable|module|rawset|math|debug|pcall|table|newproxy|type|coroutine|_G|select|gcinfo|pairs|rawget|loadstring|ipairs|_VERSION|dofile|setfenv|load|error|loadfile|sub|upper|len|gfind|rep|find|match|char|dump|gmatch|reverse|byte|format|gsub|lower|preload|loadlib|loaded|loaders|cpath|config|path|seeall|exit|setlocale|date|getenv|difftime|remove|time|clock|tmpname|rename|execute|lines|write|close|flush|open|output|type|read|stderr|stdin|input|stdout|popen|tmpfile|log|max|acos|huge|ldexp|pi|cos|tanh|pow|deg|tan|cosh|sinh|random|randomseed|frexp|ceil|floor|rad|abs|sqrt|modf|asin|min|mod|fmod|log10|atan2|exp|sin|atan|getupvalue|debug|sethook|getmetatable|gethook|setmetatable|setlocal|traceback|setfenv|getinfo|setupvalue|getlocal|getregistry|getfenv|setn|insert|getn|foreachi|maxn|foreach|concat|sort|remove|resume|yield|status|wrap|create|running".split("|")),d=e.arrayToMap("string|package|os|io|math|debug|table|coroutine".split("|")),f=e.arrayToMap("__add|__sub|__mod|__unm|__concat|__lt|__index|__call|__gc|__metatable|__mul|__div|__pow|__len|__eq|__le|__newindex|__tostring|__mode|__tonumber".split("|")),g=e.arrayToMap("".split("|")),h=e.arrayToMap("setn|foreach|foreachi|gcinfo|log10|maxn".split("|")),i="",j="(?:(?:[1-9]\\d*)|(?:0))",k="(?:0[xX][\\dA-Fa-f]+)",l="(?:"+j+"|"+k+")",m="(?:\\.\\d+)",n="(?:\\d+)",o="(?:(?:"+n+"?"+m+")|(?:"+n+"\\.))",p="(?:"+o+")",q=[];this.$rules={start:[{token:"comment",regex:i+"\\-\\-\\[\\[.*\\]\\]"},{token:"comment",regex:i+"\\-\\-\\[\\=\\[.*\\]\\=\\]"},{token:"comment",regex:i+"\\-\\-\\[\\={2}\\[.*\\]\\={2}\\]"},{token:"comment",regex:i+"\\-\\-\\[\\={3}\\[.*\\]\\={3}\\]"},{token:"comment",regex:i+"\\-\\-\\[\\={4}\\[.*\\]\\={4}\\]"},{token:"comment",regex:i+"\\-\\-\\[\\={5}\\=*\\[.*\\]\\={5}\\=*\\]"},{token:"comment",regex:i+"\\-\\-\\[\\[.*$",merge:!0,next:"qcomment"},{token:"comment",regex:i+"\\-\\-\\[\\=\\[.*$",merge:!0,next:"qcomment1"},{token:"comment",regex:i+"\\-\\-\\[\\={2}\\[.*$",merge:!0,next:"qcomment2"},{token:"comment",regex:i+"\\-\\-\\[\\={3}\\[.*$",merge:!0,next:"qcomment3"},{token:"comment",regex:i+"\\-\\-\\[\\={4}\\[.*$",merge:!0,next:"qcomment4"},{token:function(a){var b=/\-\-\[(\=+)\[/,c;return(c=b.exec(a))!=null&&(c=c[1])!=undefined&&q.push(c.length),"comment"},regex:i+"\\-\\-\\[\\={5}\\=*\\[.*$",merge:!0,next:"qcomment5"},{token:"comment",regex:"\\-\\-.*$"},{token:"string",regex:i+"\\[\\[.*\\]\\]"},{token:"string",regex:i+"\\[\\=\\[.*\\]\\=\\]"},{token:"string",regex:i+"\\[\\={2}\\[.*\\]\\={2}\\]"},{token:"string",regex:i+"\\[\\={3}\\[.*\\]\\={3}\\]"},{token:"string",regex:i+"\\[\\={4}\\[.*\\]\\={4}\\]"},{token:"string",regex:i+"\\[\\={5}\\=*\\[.*\\]\\={5}\\=*\\]"},{token:"string",regex:i+"\\[\\[.*$",merge:!0,next:"qstring"},{token:"string",regex:i+"\\[\\=\\[.*$",merge:!0,next:"qstring1"},{token:"string",regex:i+"\\[\\={2}\\[.*$",merge:!0,next:"qstring2"},{token:"string",regex:i+"\\[\\={3}\\[.*$",merge:!0,next:"qstring3"},{token:"string",regex:i+"\\[\\={4}\\[.*$",merge:!0,next:"qstring4"},{token:function(a){var b=/\[(\=+)\[/,c;return(c=b.exec(a))!=null&&(c=c[1])!=undefined&&q.push(c.length),"string"},regex:i+"\\[\\={5}\\=*\\[.*$",merge:!0,next:"qstring5"},{token:"string",regex:i+'"(?:[^\\\\]|\\\\.)*?"'},{token:"string",regex:i+"'(?:[^\\\\]|\\\\.)*?'"},{token:"constant.numeric",regex:p},{token:"constant.numeric",regex:l+"\\b"},{token:function(e){return a.hasOwnProperty(e)?"keyword":b.hasOwnProperty(e)?"constant.language":g.hasOwnProperty(e)?"invalid.illegal":d.hasOwnProperty(e)?"constant.library":h.hasOwnProperty(e)?"invalid.deprecated":c.hasOwnProperty(e)?"support.function":f.hasOwnProperty(e)?"support.function":"identifier"},regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"\\+|\\-|\\*|\\/|%|\\#|\\^|~|<|>|<=|=>|==|~=|=|\\:|\\.\\.\\.|\\.\\."},{token:"paren.lparen",regex:"[\\[\\(\\{]"},{token:"paren.rparen",regex:"[\\]\\)\\}]"},{token:"text",regex:"\\s+"}],qcomment:[{token:"comment",regex:"(?:[^\\\\]|\\\\.)*?\\]\\]",next:"start"},{token:"comment",merge:!0,regex:".+"}],qcomment1:[{token:"comment",regex:"(?:[^\\\\]|\\\\.)*?\\]\\=\\]",next:"start"},{token:"comment",merge:!0,regex:".+"}],qcomment2:[{token:"comment",regex:"(?:[^\\\\]|\\\\.)*?\\]\\={2}\\]",next:"start"},{token:"comment",merge:!0,regex:".+"}],qcomment3:[{token:"comment",regex:"(?:[^\\\\]|\\\\.)*?\\]\\={3}\\]",next:"start"},{token:"comment",merge:!0,regex:".+"}],qcomment4:[{token:"comment",regex:"(?:[^\\\\]|\\\\.)*?\\]\\={4}\\]",next:"start"},{token:"comment",merge:!0,regex:".+"}],qcomment5:[{token:function(a){var b=/\](\=+)\]/,c=this.rules.qcomment5[0],d;c.next="start";if((d=b.exec(a))!=null&&(d=d[1])!=undefined){var e=d.length,f;(f=q.pop())!=e&&(q.push(f),c.next="qcomment5")}return"comment"},regex:"(?:[^\\\\]|\\\\.)*?\\]\\={5}\\=*\\]",next:"start"},{token:"comment",merge:!0,regex:".+"}],qstring:[{token:"string",regex:"(?:[^\\\\]|\\\\.)*?\\]\\]",next:"start"},{token:"string",merge:!0,regex:".+"}],qstring1:[{token:"string",regex:"(?:[^\\\\]|\\\\.)*?\\]\\=\\]",next:"start"},{token:"string",merge:!0,regex:".+"}],qstring2:[{token:"string",regex:"(?:[^\\\\]|\\\\.)*?\\]\\={2}\\]",next:"start"},{token:"string",merge:!0,regex:".+"}],qstring3:[{token:"string",regex:"(?:[^\\\\]|\\\\.)*?\\]\\={3}\\]",next:"start"},{token:"string",merge:!0,regex:".+"}],qstring4:[{token:"string",regex:"(?:[^\\\\]|\\\\.)*?\\]\\={4}\\]",next:"start"},{token:"string",merge:!0,regex:".+"}],qstring5:[{token:function(a){var b=/\](\=+)\]/,c=this.rules.qstring5[0],d;c.next="start";if((d=b.exec(a))!=null&&(d=d[1])!=undefined){var e=d.length,f;(f=q.pop())!=e&&(q.push(f),c.next="qstring5")}return"string"},regex:"(?:[^\\\\]|\\\\.)*?\\]\\={5}\\=*\\]",next:"start"},{token:"string",merge:!0,regex:".+"}]}};d.inherits(g,f),b.LuaHighlightRules=g}),function(){window.require(["ace/ace"],function(a){window.ace||(window.ace={});for(var b in a)a.hasOwnProperty(b)&&(ace[b]=a[b])})}() \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-markdown-uncompressed.js b/apps/files_texteditor/js/aceeditor/mode-markdown-uncompressed.js
new file mode 100755
index 00000000000..0ddb789736c
--- /dev/null
+++ b/apps/files_texteditor/js/aceeditor/mode-markdown-uncompressed.js
@@ -0,0 +1,3000 @@
+/* vim:ts=4:sts=4:sw=4:
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ * Mihai Sucan <mihai DOT sucan AT gmail DOT com>
+ * Chris Spencer <chris.ag.spencer AT googlemail DOT com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/markdown', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/mode/javascript', 'ace/mode/xml', 'ace/mode/html', 'ace/tokenizer', 'ace/mode/markdown_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextMode = require("./text").Mode;
+var JavaScriptMode = require("./javascript").Mode;
+var XmlMode = require("./xml").Mode;
+var HtmlMode = require("./html").Mode;
+var Tokenizer = require("../tokenizer").Tokenizer;
+var MarkdownHighlightRules = require("./markdown_highlight_rules").MarkdownHighlightRules;
+
+var Mode = function() {
+ var highlighter = new MarkdownHighlightRules();
+
+ this.$tokenizer = new Tokenizer(highlighter.getRules());
+ this.$embeds = highlighter.getEmbeds();
+ this.createModeDelegates({
+ "js-": JavaScriptMode,
+ "xml-": XmlMode,
+ "html-": HtmlMode
+ });
+};
+oop.inherits(Mode, TextMode);
+
+(function() {
+ this.getNextLineIndent = function(state, line, tab) {
+ if (state == "listblock") {
+ var match = /^((?:.+)?)([-+*][ ]+)/.exec(line);
+ if (match) {
+ return new Array(match[1].length + 1).join(" ") + match[2];
+ } else {
+ return "";
+ }
+ } else {
+ return this.$getIndent(line);
+ }
+ };
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/javascript', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/javascript_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/range', 'ace/worker/worker_client', 'ace/mode/behaviour/cstyle', 'ace/mode/folding/cstyle'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextMode = require("./text").Mode;
+var Tokenizer = require("../tokenizer").Tokenizer;
+var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;
+var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
+var Range = require("../range").Range;
+var WorkerClient = require("../worker/worker_client").WorkerClient;
+var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
+var CStyleFoldMode = require("./folding/cstyle").FoldMode;
+
+var Mode = function() {
+ this.$tokenizer = new Tokenizer(new JavaScriptHighlightRules().getRules());
+ this.$outdent = new MatchingBraceOutdent();
+ this.$behaviour = new CstyleBehaviour();
+ this.foldingRules = new CStyleFoldMode();
+};
+oop.inherits(Mode, TextMode);
+
+(function() {
+
+
+ this.toggleCommentLines = function(state, doc, startRow, endRow) {
+ var outdent = true;
+ var re = /^(\s*)\/\//;
+
+ for (var i=startRow; i<= endRow; i++) {
+ if (!re.test(doc.getLine(i))) {
+ outdent = false;
+ break;
+ }
+ }
+
+ if (outdent) {
+ var deleteRange = new Range(0, 0, 0, 0);
+ for (var i=startRow; i<= endRow; i++)
+ {
+ var line = doc.getLine(i);
+ var m = line.match(re);
+ deleteRange.start.row = i;
+ deleteRange.end.row = i;
+ deleteRange.end.column = m[0].length;
+ doc.replace(deleteRange, m[1]);
+ }
+ }
+ else {
+ doc.indentRows(startRow, endRow, "//");
+ }
+ };
+
+ this.getNextLineIndent = function(state, line, tab) {
+ var indent = this.$getIndent(line);
+
+ var tokenizedLine = this.$tokenizer.getLineTokens(line, state);
+ var tokens = tokenizedLine.tokens;
+ var endState = tokenizedLine.state;
+
+ if (tokens.length && tokens[tokens.length-1].type == "comment") {
+ return indent;
+ }
+
+ if (state == "start" || state == "regex_allowed") {
+ var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);
+ if (match) {
+ indent += tab;
+ }
+ } else if (state == "doc-start") {
+ if (endState == "start" || state == "regex_allowed") {
+ return "";
+ }
+ var match = line.match(/^\s*(\/?)\*/);
+ if (match) {
+ if (match[1]) {
+ indent += " ";
+ }
+ indent += "* ";
+ }
+ }
+
+ return indent;
+ };
+
+ this.checkOutdent = function(state, line, input) {
+ return this.$outdent.checkOutdent(line, input);
+ };
+
+ this.autoOutdent = function(state, doc, row) {
+ this.$outdent.autoOutdent(doc, row);
+ };
+
+ this.createWorker = function(session) {
+ var worker = new WorkerClient(["ace"], "worker-javascript.js", "ace/mode/javascript_worker", "JavaScriptWorker");
+ worker.attachToDocument(session.getDocument());
+
+ worker.on("jslint", function(results) {
+ var errors = [];
+ for (var i=0; i<results.data.length; i++) {
+ var error = results.data[i];
+ if (error)
+ errors.push({
+ row: error.line-1,
+ column: error.character-1,
+ text: error.reason,
+ type: "warning",
+ lint: error
+ });
+ }
+ session.setAnnotations(errors);
+ });
+
+ worker.on("narcissus", function(e) {
+ session.setAnnotations([e.data]);
+ });
+
+ worker.on("terminate", function() {
+ session.clearAnnotations();
+ });
+
+ return worker;
+ };
+
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ * Mihai Sucan <mihai DOT sucan AT gmail DOT com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/javascript_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/unicode', 'ace/mode/doc_comment_highlight_rules', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var lang = require("../lib/lang");
+var unicode = require("../unicode");
+var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var JavaScriptHighlightRules = function() {
+
+ // see: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects
+ var globals = lang.arrayToMap(
+ // Constructors
+ ("Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" +
+ // E4X
+ "Namespace|QName|XML|XMLList|" +
+ "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" +
+ "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" +
+ // Errors
+ "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" +
+ "SyntaxError|TypeError|URIError|" +
+ // Non-constructor functions
+ "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" +
+ "isNaN|parseFloat|parseInt|" +
+ // Other
+ "JSON|Math|" +
+ // Pseudo
+ "this|arguments|prototype|window|document"
+ ).split("|")
+ );
+
+ var keywords = lang.arrayToMap(
+ ("break|case|catch|continue|default|delete|do|else|finally|for|function|" +
+ "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|" +
+ "const|yield|import|get|set").split("|")
+ );
+
+ // keywords which can be followed by regular expressions
+ var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield";
+
+ var deprecated = lang.arrayToMap(
+ ("__parent__|__count__|escape|unescape|with|__proto__").split("|")
+ );
+
+ var definitions = lang.arrayToMap(("const|let|var|function").split("|"));
+
+ var buildinConstants = lang.arrayToMap(
+ ("null|Infinity|NaN|undefined").split("|")
+ );
+
+ var futureReserved = lang.arrayToMap(
+ ("class|enum|extends|super|export|implements|private|" +
+ "public|interface|package|protected|static").split("|")
+ );
+
+ // TODO: Unicode escape sequences
+ var identifierRe = "[" + unicode.packages.L + "\\$_]["
+ + unicode.packages.L
+ + unicode.packages.Mn + unicode.packages.Mc
+ + unicode.packages.Nd
+ + unicode.packages.Pc + "\\$_]*\\b";
+
+ // regexp must not have capturing parentheses. Use (?:) instead.
+ // regexps are ordered -> the first match is used
+
+ this.$rules = {
+ "start" : [
+ {
+ token : "comment",
+ regex : "\\/\\/.*$"
+ },
+ new DocCommentHighlightRules().getStartRule("doc-start"),
+ {
+ token : "comment", // multi line comment
+ merge : true,
+ regex : "\\/\\*",
+ next : "comment"
+ }, {
+ token : "string", // single line
+ regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
+ }, {
+ token : "string", // multi line string start
+ merge : true,
+ regex : '["].*\\\\$',
+ next : "qqstring"
+ }, {
+ token : "string", // single line
+ regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
+ }, {
+ token : "string", // multi line string start
+ merge : true,
+ regex : "['].*\\\\$",
+ next : "qstring"
+ }, {
+ token : "constant.numeric", // hex
+ regex : "0[xX][0-9a-fA-F]+\\b"
+ }, {
+ token : "constant.numeric", // float
+ regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
+ }, {
+ token : ["keyword.definition", "text", "entity.name.function"],
+ regex : "(function)(\\s+)(" + identifierRe + ")"
+ }, {
+ token : "constant.language.boolean",
+ regex : "(?:true|false)\\b"
+ }, {
+ token : "keyword",
+ regex : "(?:" + kwBeforeRe + ")\\b",
+ next : "regex_allowed"
+ }, {
+ token : function(value) {
+ if (globals.hasOwnProperty(value))
+ return "variable.language";
+ else if (deprecated.hasOwnProperty(value))
+ return "invalid.deprecated";
+ else if (definitions.hasOwnProperty(value))
+ return "keyword.definition";
+ else if (keywords.hasOwnProperty(value))
+ return "keyword";
+ else if (buildinConstants.hasOwnProperty(value))
+ return "constant.language";
+ else if (futureReserved.hasOwnProperty(value))
+ return "invalid.illegal";
+ else if (value == "debugger")
+ return "invalid.deprecated";
+ else
+ return "identifier";
+ },
+ regex : identifierRe
+ }, {
+ token : "keyword.operator",
+ regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)",
+ next : "regex_allowed"
+ }, {
+ token : "punctuation.operator",
+ regex : "\\?|\\:|\\,|\\;|\\.",
+ next : "regex_allowed"
+ }, {
+ token : "paren.lparen",
+ regex : "[[({]",
+ next : "regex_allowed"
+ }, {
+ token : "paren.rparen",
+ regex : "[\\])}]"
+ }, {
+ token : "keyword.operator",
+ regex : "\\/=?",
+ next : "regex_allowed"
+ }, {
+ token: "comment",
+ regex: "^#!.*$"
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }
+ ],
+ // regular expressions are only allowed after certain tokens. This
+ // makes sure we don't mix up regexps with the divison operator
+ "regex_allowed": [
+ {
+ token : "comment", // multi line comment
+ merge : true,
+ regex : "\\/\\*",
+ next : "comment_regex_allowed"
+ }, {
+ token : "comment",
+ regex : "\\/\\/.*$"
+ }, {
+ token: "string.regexp",
+ regex: "\\/",
+ next: "regex",
+ merge: true
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }, {
+ // immediately return to the start mode without matching
+ // anything
+ token: "empty",
+ regex: "",
+ next: "start"
+ }
+ ],
+ "regex": [
+ {
+ token: "regexp.keyword.operator",
+ regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)",
+ next: "regex"
+ }, {
+ // flag
+ token: "string.regexp",
+ regex: "/\\w*",
+ next: "start",
+ merge: true
+ }, {
+ token: "string.regexp",
+ regex: "[^\\\\/\\[]+",
+ next: "regex",
+ merge: true
+ }, {
+ token: "string.regexp.charachterclass",
+ regex: "\\[",
+ next: "regex_character_class",
+ merge: true
+ }, {
+ token: "empty",
+ regex: "",
+ next: "start"
+ }
+ ],
+ "regex_character_class": [
+ {
+ token: "regexp.keyword.operator",
+ regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)",
+ next: "regex_character_class"
+ }, {
+ token: "string.regexp.charachterclass",
+ regex: "]",
+ next: "regex",
+ merge: true
+ }, {
+ token: "string.regexp.charachterclass",
+ regex: "[^\\\\\\]]+",
+ next: "regex_character_class",
+ merge: true
+ }, {
+ token: "empty",
+ regex: "",
+ next: "start"
+ }
+ ],
+ "comment_regex_allowed" : [
+ {
+ token : "comment", // closing comment
+ regex : ".*?\\*\\/",
+ merge : true,
+ next : "regex_allowed"
+ }, {
+ token : "comment", // comment spanning whole line
+ merge : true,
+ regex : ".+"
+ }
+ ],
+ "comment" : [
+ {
+ token : "comment", // closing comment
+ regex : ".*?\\*\\/",
+ merge : true,
+ next : "start"
+ }, {
+ token : "comment", // comment spanning whole line
+ merge : true,
+ regex : ".+"
+ }
+ ],
+ "qqstring" : [
+ {
+ token : "string",
+ regex : '(?:(?:\\\\.)|(?:[^"\\\\]))*?"',
+ next : "start"
+ }, {
+ token : "string",
+ merge : true,
+ regex : '.+'
+ }
+ ],
+ "qstring" : [
+ {
+ token : "string",
+ regex : "(?:(?:\\\\.)|(?:[^'\\\\]))*?'",
+ next : "start"
+ }, {
+ token : "string",
+ merge : true,
+ regex : '.+'
+ }
+ ]
+ };
+
+ this.embedRules(DocCommentHighlightRules, "doc-",
+ [ new DocCommentHighlightRules().getEndRule("start") ]);
+};
+
+oop.inherits(JavaScriptHighlightRules, TextHighlightRules);
+
+exports.JavaScriptHighlightRules = JavaScriptHighlightRules;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/doc_comment_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var DocCommentHighlightRules = function() {
+
+ this.$rules = {
+ "start" : [ {
+ token : "comment.doc.tag",
+ regex : "@[\\w\\d_]+" // TODO: fix email addresses
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "\\s+"
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "TODO"
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "[^@\\*]+"
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "."
+ }]
+ };
+};
+
+oop.inherits(DocCommentHighlightRules, TextHighlightRules);
+
+(function() {
+
+ this.getStartRule = function(start) {
+ return {
+ token : "comment.doc", // doc comment
+ merge : true,
+ regex : "\\/\\*(?=\\*)",
+ next : start
+ };
+ };
+
+ this.getEndRule = function (start) {
+ return {
+ token : "comment.doc", // closing comment
+ merge : true,
+ regex : "\\*\\/",
+ next : start
+ };
+ };
+
+}).call(DocCommentHighlightRules.prototype);
+
+exports.DocCommentHighlightRules = DocCommentHighlightRules;
+
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var Range = require("../range").Range;
+
+var MatchingBraceOutdent = function() {};
+
+(function() {
+
+ this.checkOutdent = function(line, input) {
+ if (! /^\s+$/.test(line))
+ return false;
+
+ return /^\s*\}/.test(input);
+ };
+
+ this.autoOutdent = function(doc, row) {
+ var line = doc.getLine(row);
+ var match = line.match(/^(\s*\})/);
+
+ if (!match) return 0;
+
+ var column = match[1].length;
+ var openBracePos = doc.findMatchingBracket({row: row, column: column});
+
+ if (!openBracePos || openBracePos.row == row) return 0;
+
+ var indent = this.$getIndent(doc.getLine(openBracePos.row));
+ doc.replace(new Range(row, 0, row, column-1), indent);
+ };
+
+ this.$getIndent = function(line) {
+ var match = line.match(/^(\s+)/);
+ if (match) {
+ return match[1];
+ }
+
+ return "";
+ };
+
+}).call(MatchingBraceOutdent.prototype);
+
+exports.MatchingBraceOutdent = MatchingBraceOutdent;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/worker/worker_client', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event_emitter'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var EventEmitter = require("../lib/event_emitter").EventEmitter;
+
+var WorkerClient = function(topLevelNamespaces, packagedJs, mod, classname) {
+
+ this.changeListener = this.changeListener.bind(this);
+
+ if (module.packaged) {
+ var base = this.$guessBasePath();
+ this.$worker = new Worker(base + packagedJs);
+ }
+ else {
+ var workerUrl = this.$normalizePath(require.nameToUrl("ace/worker/worker", null, "_"));
+ this.$worker = new Worker(workerUrl);
+
+ var tlns = {};
+ for (var i=0; i<topLevelNamespaces.length; i++) {
+ var ns = topLevelNamespaces[i];
+ var path = this.$normalizePath(require.nameToUrl(ns, null, "_").replace(/.js$/, ""));
+
+ tlns[ns] = path;
+ }
+ }
+
+ this.$worker.postMessage({
+ init : true,
+ tlns: tlns,
+ module: mod,
+ classname: classname
+ });
+
+ this.callbackId = 1;
+ this.callbacks = {};
+
+ var _self = this;
+ this.$worker.onerror = function(e) {
+ window.console && console.log && console.log(e);
+ throw e;
+ };
+ this.$worker.onmessage = function(e) {
+ var msg = e.data;
+ switch(msg.type) {
+ case "log":
+ window.console && console.log && console.log(msg.data);
+ break;
+
+ case "event":
+ _self._emit(msg.name, {data: msg.data});
+ break;
+
+ case "call":
+ var callback = _self.callbacks[msg.id];
+ if (callback) {
+ callback(msg.data);
+ delete _self.callbacks[msg.id];
+ }
+ break;
+ }
+ };
+};
+
+(function(){
+
+ oop.implement(this, EventEmitter);
+
+ this.$normalizePath = function(path) {
+ path = path.replace(/^[a-z]+:\/\/[^\/]+\//, ""); // Remove domain name and rebuild it
+ path = location.protocol + "//" + location.host
+ // paths starting with a slash are relative to the root (host)
+ + (path.charAt(0) == "/" ? "" : location.pathname.replace(/\/[^\/]*$/, ""))
+ + "/" + path.replace(/^[\/]+/, "");
+ return path;
+ };
+
+ this.$guessBasePath = function() {
+ if (require.aceBaseUrl)
+ return require.aceBaseUrl;
+
+ var scripts = document.getElementsByTagName("script");
+ for (var i=0; i<scripts.length; i++) {
+ var script = scripts[i];
+
+ var base = script.getAttribute("data-ace-base");
+ if (base)
+ return base.replace(/\/*$/, "/");
+
+ var src = script.src || script.getAttribute("src");
+ if (!src) {
+ continue;
+ }
+ var m = src.match(/^(?:(.*\/)ace\.js|(.*\/)ace(-uncompressed)?(-noconflict)?\.js)(?:\?|$)/);
+ if (m)
+ return m[1] || m[2];
+ }
+ return "";
+ };
+
+ this.terminate = function() {
+ this._emit("terminate", {});
+ this.$worker.terminate();
+ this.$worker = null;
+ this.$doc.removeEventListener("change", this.changeListener);
+ this.$doc = null;
+ };
+
+ this.send = function(cmd, args) {
+ this.$worker.postMessage({command: cmd, args: args});
+ };
+
+ this.call = function(cmd, args, callback) {
+ if (callback) {
+ var id = this.callbackId++;
+ this.callbacks[id] = callback;
+ args.push(id);
+ }
+ this.send(cmd, args);
+ };
+
+ this.emit = function(event, data) {
+ try {
+ // firefox refuses to clone objects which have function properties
+ // TODO: cleanup event
+ this.$worker.postMessage({event: event, data: {data: data.data}});
+ }
+ catch(ex) {}
+ };
+
+ this.attachToDocument = function(doc) {
+ if(this.$doc)
+ this.terminate();
+
+ this.$doc = doc;
+ this.call("setValue", [doc.getValue()]);
+ doc.on("change", this.changeListener);
+ };
+
+ this.changeListener = function(e) {
+ e.range = {
+ start: e.data.range.start,
+ end: e.data.range.end
+ };
+ this.emit("change", e);
+ };
+
+}).call(WorkerClient.prototype);
+
+exports.WorkerClient = WorkerClient;
+
+});
+/* vim:ts=4:sts=4:sw=4:
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Chris Spencer <chris.ag.spencer AT googlemail DOT com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/behaviour/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var Behaviour = require('../behaviour').Behaviour;
+
+var CstyleBehaviour = function () {
+
+ this.add("braces", "insertion", function (state, action, editor, session, text) {
+ if (text == '{') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '{' + selected + '}',
+ selection: false
+ }
+ } else {
+ return {
+ text: '{}',
+ selection: [1, 1]
+ }
+ }
+ } else if (text == '}') {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '}') {
+ var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});
+ if (matching !== null) {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ } else if (text == "\n") {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '}') {
+ var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column + 1});
+ if (!openBracePos)
+ return null;
+
+ var indent = this.getNextLineIndent(state, line.substring(0, line.length - 1), session.getTabString());
+ var next_indent = this.$getIndent(session.doc.getLine(openBracePos.row));
+
+ return {
+ text: '\n' + indent + '\n' + next_indent,
+ selection: [1, indent.length, 1, indent.length]
+ }
+ }
+ }
+ });
+
+ this.add("braces", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '{') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.end.column, range.end.column + 1);
+ if (rightChar == '}') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+ this.add("parens", "insertion", function (state, action, editor, session, text) {
+ if (text == '(') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '(' + selected + ')',
+ selection: false
+ }
+ } else {
+ return {
+ text: '()',
+ selection: [1, 1]
+ }
+ }
+ } else if (text == ')') {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == ')') {
+ var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});
+ if (matching !== null) {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ }
+ });
+
+ this.add("parens", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '(') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
+ if (rightChar == ')') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+ this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {
+ if (text == '"') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '"' + selected + '"',
+ selection: false
+ }
+ } else {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var leftChar = line.substring(cursor.column-1, cursor.column);
+
+ // We're escaped.
+ if (leftChar == '\\') {
+ return null;
+ }
+
+ // Find what token we're inside.
+ var tokens = session.getTokens(selection.start.row, selection.start.row)[0].tokens;
+ var col = 0, token;
+ var quotepos = -1; // Track whether we're inside an open quote.
+
+ for (var x = 0; x < tokens.length; x++) {
+ token = tokens[x];
+ if (token.type == "string") {
+ quotepos = -1;
+ } else if (quotepos < 0) {
+ quotepos = token.value.indexOf('"');
+ }
+ if ((token.value.length + col) > selection.start.column) {
+ break;
+ }
+ col += tokens[x].value.length;
+ }
+
+ // Try and be smart about when we auto insert.
+ if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf('"') === token.value.length-1)))) {
+ return {
+ text: '""',
+ selection: [1,1]
+ }
+ } else if (token && token.type === "string") {
+ // Ignore input and move right one if we're typing over the closing quote.
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '"') {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ }
+ }
+ });
+
+ this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '"') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
+ if (rightChar == '"') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+}
+oop.inherits(CstyleBehaviour, Behaviour);
+
+exports.CstyleBehaviour = CstyleBehaviour;
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var Range = require("../../range").Range;
+var BaseFoldMode = require("./fold_mode").FoldMode;
+
+var FoldMode = exports.FoldMode = function() {};
+oop.inherits(FoldMode, BaseFoldMode);
+
+(function() {
+
+ this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
+ this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ var line = session.getLine(row);
+ var match = line.match(this.foldingStartMarker);
+ if (match) {
+ var i = match.index;
+
+ if (match[1])
+ return this.openingBracketBlock(session, match[1], row, i);
+
+ var range = session.getCommentFoldRange(row, i + match[0].length);
+ range.end.column -= 2;
+ return range;
+ }
+
+ if (foldStyle !== "markbeginend")
+ return;
+
+ var match = line.match(this.foldingStopMarker);
+ if (match) {
+ var i = match.index + match[0].length;
+
+ if (match[2]) {
+ var range = session.getCommentFoldRange(row, i);
+ range.end.column -= 2;
+ return range;
+ }
+
+ var end = {row: row, column: i};
+ var start = session.$findOpeningBracket(match[1], end);
+
+ if (!start)
+ return;
+
+ start.column++;
+ end.column--;
+
+ return Range.fromPoints(start, end);
+ }
+ };
+
+}).call(FoldMode.prototype);
+
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/fold_mode', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var Range = require("../../range").Range;
+
+var FoldMode = exports.FoldMode = function() {};
+
+(function() {
+
+ this.foldingStartMarker = null;
+ this.foldingStopMarker = null;
+
+ // must return "" if there's no fold, to enable caching
+ this.getFoldWidget = function(session, foldStyle, row) {
+ var line = session.getLine(row);
+ if (this.foldingStartMarker.test(line))
+ return "start";
+ if (foldStyle == "markbeginend"
+ && this.foldingStopMarker
+ && this.foldingStopMarker.test(line))
+ return "end";
+ return "";
+ };
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ return null;
+ };
+
+ this.indentationBlock = function(session, row, column) {
+ var re = /^\s*/;
+ var startRow = row;
+ var endRow = row;
+ var line = session.getLine(row);
+ var startColumn = column || line.length;
+ var startLevel = line.match(re)[0].length;
+ var maxRow = session.getLength()
+
+ while (++row < maxRow) {
+ line = session.getLine(row);
+ var level = line.match(re)[0].length;
+
+ if (level == line.length)
+ continue;
+
+ if (level <= startLevel)
+ break;
+
+ endRow = row;
+ }
+
+ if (endRow > startRow) {
+ var endColumn = session.getLine(endRow).length;
+ return new Range(startRow, startColumn, endRow, endColumn);
+ }
+ };
+
+ this.openingBracketBlock = function(session, bracket, row, column) {
+ var start = {row: row, column: column + 1};
+ var end = session.$findClosingBracket(bracket, start);
+ if (!end)
+ return;
+
+ var fw = session.foldWidgets[end.row];
+ if (fw == null)
+ fw = this.getFoldWidget(session, end.row);
+
+ if (fw == "start") {
+ end.row --;
+ end.column = session.getLine(end.row).length;
+ }
+ return Range.fromPoints(start, end);
+ };
+
+}).call(FoldMode.prototype);
+
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/xml', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/xml_highlight_rules', 'ace/mode/behaviour/xml', 'ace/mode/folding/xml'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextMode = require("./text").Mode;
+var Tokenizer = require("../tokenizer").Tokenizer;
+var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules;
+var XmlBehaviour = require("./behaviour/xml").XmlBehaviour;
+var XmlFoldMode = require("./folding/xml").FoldMode;
+
+var Mode = function() {
+ this.$tokenizer = new Tokenizer(new XmlHighlightRules().getRules());
+ this.$behaviour = new XmlBehaviour();
+ this.foldingRules = new XmlFoldMode();
+};
+
+oop.inherits(Mode, TextMode);
+
+(function() {
+
+ this.getNextLineIndent = function(state, line, tab) {
+ return this.$getIndent(line);
+ };
+
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/xml_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/xml_util', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var xmlUtil = require("./xml_util");
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var XmlHighlightRules = function() {
+
+ // regexp must not have capturing parentheses
+ // regexps are ordered -> the first match is used
+ this.$rules = {
+ start : [{
+ token : "text",
+ regex : "<\\!\\[CDATA\\[",
+ next : "cdata"
+ }, {
+ token : "xml_pe",
+ regex : "<\\?.*?\\?>"
+ }, {
+ token : "comment",
+ merge : true,
+ regex : "<\\!--",
+ next : "comment"
+ }, {
+ token : "meta.tag", // opening tag
+ regex : "<\\/?",
+ next : "tag"
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }, {
+ token : "text",
+ regex : "[^<]+"
+ }],
+
+ cdata : [{
+ token : "text",
+ regex : "\\]\\]>",
+ next : "start"
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }, {
+ token : "text",
+ regex : "(?:[^\\]]|\\](?!\\]>))+"
+ }],
+
+ comment : [{
+ token : "comment",
+ regex : ".*?-->",
+ next : "start"
+ }, {
+ token : "comment",
+ merge : true,
+ regex : ".+"
+ }]
+ };
+
+ xmlUtil.tag(this.$rules, "tag", "start");
+};
+
+oop.inherits(XmlHighlightRules, TextHighlightRules);
+
+exports.XmlHighlightRules = XmlHighlightRules;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/xml_util', ['require', 'exports', 'module' , 'ace/lib/lang'], function(require, exports, module) {
+"use strict";
+
+var lang = require("../lib/lang");
+
+var formTags = lang.arrayToMap(
+ ("button|form|input|label|select|textarea").split("|")
+);
+
+var tableTags = lang.arrayToMap(
+ ("table|tbody|td|tfoot|th|tr").split("|")
+);
+
+function string(state) {
+ return [{
+ token : "string",
+ regex : '".*?"'
+ }, {
+ token : "string", // multi line string start
+ merge : true,
+ regex : '["].*',
+ next : state + "-qqstring"
+ }, {
+ token : "string",
+ regex : "'.*?'"
+ }, {
+ token : "string", // multi line string start
+ merge : true,
+ regex : "['].*",
+ next : state + "-qstring"
+ }];
+}
+
+function multiLineString(quote, state) {
+ return [{
+ token : "string",
+ merge : true,
+ regex : ".*?" + quote,
+ next : state
+ }, {
+ token : "string",
+ merge : true,
+ regex : '.+'
+ }];
+}
+
+exports.tag = function(states, name, nextState) {
+ states[name] = [{
+ token : "text",
+ regex : "\\s+"
+ }, {
+ //token : "meta.tag",
+
+ token : function(value) {
+ if ( value==='a' ) {
+ return "meta.tag.anchor";
+ }
+ else if ( value==='img' ) {
+ return "meta.tag.image";
+ }
+ else if ( value==='script' ) {
+ return "meta.tag.script";
+ }
+ else if ( value==='style' ) {
+ return "meta.tag.style";
+ }
+ else if (formTags.hasOwnProperty(value.toLowerCase())) {
+ return "meta.tag.form";
+ }
+ else if (tableTags.hasOwnProperty(value.toLowerCase())) {
+ return "meta.tag.table";
+ }
+ else {
+ return "meta.tag";
+ }
+ },
+ merge : true,
+ regex : "[-_a-zA-Z0-9:!]+",
+ next : name + "embed-attribute-list"
+ }, {
+ token: "empty",
+ regex: "",
+ next : name + "embed-attribute-list"
+ }];
+
+ states[name + "-qstring"] = multiLineString("'", name + "embed-attribute-list");
+ states[name + "-qqstring"] = multiLineString("\"", name + "embed-attribute-list");
+
+ states[name + "embed-attribute-list"] = [{
+ token : "meta.tag",
+ merge : true,
+ regex : "\/?>",
+ next : nextState
+ }, {
+ token : "keyword.operator",
+ regex : "="
+ }, {
+ token : "entity.other.attribute-name",
+ regex : "[-_a-zA-Z0-9:]+"
+ }, {
+ token : "constant.numeric", // float
+ regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }].concat(string(name));
+};
+
+});
+/* vim:ts=4:sts=4:sw=4:
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Chris Spencer <chris.ag.spencer AT googlemail DOT com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/behaviour/xml', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour', 'ace/mode/behaviour/cstyle'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var Behaviour = require("../behaviour").Behaviour;
+var CstyleBehaviour = require("./cstyle").CstyleBehaviour;
+
+var XmlBehaviour = function () {
+
+ this.inherit(CstyleBehaviour, ["string_dquotes"]); // Get string behaviour
+
+ this.add("brackets", "insertion", function (state, action, editor, session, text) {
+ if (text == '<') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return false;
+ } else {
+ return {
+ text: '<>',
+ selection: [1, 1]
+ }
+ }
+ } else if (text == '>') {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '>') { // need some kind of matching check here
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ } else if (text == "\n") {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChars = line.substring(cursor.column, cursor.column + 2);
+ if (rightChars == '</') {
+ var indent = this.$getIndent(session.doc.getLine(cursor.row)) + session.getTabString();
+ var next_indent = this.$getIndent(session.doc.getLine(cursor.row));
+
+ return {
+ text: '\n' + indent + '\n' + next_indent,
+ selection: [1, indent.length, 1, indent.length]
+ }
+ }
+ }
+ });
+
+}
+oop.inherits(XmlBehaviour, Behaviour);
+
+exports.XmlBehaviour = XmlBehaviour;
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/xml', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/range', 'ace/mode/folding/fold_mode', 'ace/token_iterator'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var lang = require("../../lib/lang");
+var Range = require("../../range").Range;
+var BaseFoldMode = require("./fold_mode").FoldMode;
+var TokenIterator = require("../../token_iterator").TokenIterator;
+
+var FoldMode = exports.FoldMode = function(voidElements) {
+ BaseFoldMode.call(this);
+ this.voidElements = voidElements || {};
+};
+oop.inherits(FoldMode, BaseFoldMode);
+
+(function() {
+
+ this.getFoldWidget = function(session, foldStyle, row) {
+ var tag = this._getFirstTagInLine(session, row);
+
+ if (tag.closing)
+ return foldStyle == "markbeginend" ? "end" : "";
+
+ if (!tag.tagName || this.voidElements[tag.tagName.toLowerCase()])
+ return "";
+
+ if (tag.selfClosing)
+ return "";
+
+ if (tag.value.indexOf("/" + tag.tagName) !== -1)
+ return "";
+
+ return "start";
+ };
+
+ this._getFirstTagInLine = function(session, row) {
+ var tokens = session.getTokens(row, row)[0].tokens;
+ var value = "";
+ for (var i = 0; i < tokens.length; i++) {
+ var token = tokens[i];
+ if (token.type.indexOf("meta.tag") === 0)
+ value += token.value;
+ else
+ value += lang.stringRepeat(" ", token.value.length);
+ }
+
+ return this._parseTag(value);
+ };
+
+ this.tagRe = /^(\s*)(<?(\/?)([-_a-zA-Z0-9:!]*)\s*(\/?)>?)/;
+ this._parseTag = function(tag) {
+
+ var match = this.tagRe.exec(tag);
+ var column = this.tagRe.lastIndex || 0;
+ this.tagRe.lastIndex = 0;
+
+ return {
+ value: tag,
+ match: match ? match[2] : "",
+ closing: match ? !!match[3] : false,
+ selfClosing: match ? !!match[5] || match[2] == "/>" : false,
+ tagName: match ? match[4] : "",
+ column: match[1] ? column + match[1].length : column
+ };
+ };
+
+ /**
+ * reads a full tag and places the iterator after the tag
+ */
+ this._readTagForward = function(iterator) {
+ var token = iterator.getCurrentToken();
+ if (!token)
+ return null;
+
+ var value = "";
+ var start;
+
+ do {
+ if (token.type.indexOf("meta.tag") === 0) {
+ if (!start) {
+ var start = {
+ row: iterator.getCurrentTokenRow(),
+ column: iterator.getCurrentTokenColumn()
+ };
+ }
+ value += token.value;
+ if (value.indexOf(">") !== -1) {
+ var tag = this._parseTag(value);
+ tag.start = start;
+ tag.end = {
+ row: iterator.getCurrentTokenRow(),
+ column: iterator.getCurrentTokenColumn() + token.value.length
+ };
+ iterator.stepForward();
+ return tag;
+ }
+ }
+ } while(token = iterator.stepForward());
+
+ return null;
+ };
+
+ this._readTagBackward = function(iterator) {
+ var token = iterator.getCurrentToken();
+ if (!token)
+ return null;
+
+ var value = "";
+ var end;
+
+ do {
+ if (token.type.indexOf("meta.tag") === 0) {
+ if (!end) {
+ end = {
+ row: iterator.getCurrentTokenRow(),
+ column: iterator.getCurrentTokenColumn() + token.value.length
+ };
+ }
+ value = token.value + value;
+ if (value.indexOf("<") !== -1) {
+ var tag = this._parseTag(value);
+ tag.end = end;
+ tag.start = {
+ row: iterator.getCurrentTokenRow(),
+ column: iterator.getCurrentTokenColumn()
+ };
+ iterator.stepBackward();
+ return tag;
+ }
+ }
+ } while(token = iterator.stepBackward());
+
+ return null;
+ };
+
+ this._pop = function(stack, tag) {
+ while (stack.length) {
+
+ var top = stack[stack.length-1];
+ if (!tag || top.tagName == tag.tagName) {
+ return stack.pop();
+ }
+ else if (this.voidElements[tag.tagName]) {
+ return;
+ }
+ else if (this.voidElements[top.tagName]) {
+ stack.pop();
+ continue;
+ } else {
+ return null;
+ }
+ }
+ };
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ var firstTag = this._getFirstTagInLine(session, row);
+
+ if (!firstTag.match)
+ return null;
+
+ var isBackward = firstTag.closing || firstTag.selfClosing;
+ var stack = [];
+ var tag;
+
+ if (!isBackward) {
+ var iterator = new TokenIterator(session, row, firstTag.column);
+ var start = {
+ row: row,
+ column: firstTag.column + firstTag.tagName.length + 2
+ };
+ while (tag = this._readTagForward(iterator)) {
+ if (tag.selfClosing) {
+ if (!stack.length) {
+ tag.start.column += tag.tagName.length + 2;
+ tag.end.column -= 2;
+ return Range.fromPoints(tag.start, tag.end);
+ } else
+ continue;
+ }
+
+ if (tag.closing) {
+ this._pop(stack, tag);
+ if (stack.length == 0)
+ return Range.fromPoints(start, tag.start);
+ }
+ else {
+ stack.push(tag)
+ }
+ }
+ }
+ else {
+ var iterator = new TokenIterator(session, row, firstTag.column + firstTag.match.length);
+ var end = {
+ row: row,
+ column: firstTag.column
+ };
+
+ while (tag = this._readTagBackward(iterator)) {
+ if (tag.selfClosing) {
+ if (!stack.length) {
+ tag.start.column += tag.tagName.length + 2;
+ tag.end.column -= 2;
+ return Range.fromPoints(tag.start, tag.end);
+ } else
+ continue;
+ }
+
+ if (!tag.closing) {
+ this._pop(stack, tag);
+ if (stack.length == 0) {
+ tag.start.column += tag.tagName.length + 2;
+ return Range.fromPoints(tag.start, end);
+ }
+ }
+ else {
+ stack.push(tag)
+ }
+ }
+ }
+
+ };
+
+}).call(FoldMode.prototype);
+
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/html', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/mode/javascript', 'ace/mode/css', 'ace/tokenizer', 'ace/mode/html_highlight_rules', 'ace/mode/behaviour/xml', 'ace/mode/folding/html'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextMode = require("./text").Mode;
+var JavaScriptMode = require("./javascript").Mode;
+var CssMode = require("./css").Mode;
+var Tokenizer = require("../tokenizer").Tokenizer;
+var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules;
+var XmlBehaviour = require("./behaviour/xml").XmlBehaviour;
+var HtmlFoldMode = require("./folding/html").FoldMode;
+
+var Mode = function() {
+ var highlighter = new HtmlHighlightRules();
+ this.$tokenizer = new Tokenizer(highlighter.getRules());
+ this.$behaviour = new XmlBehaviour();
+
+ this.$embeds = highlighter.getEmbeds();
+ this.createModeDelegates({
+ "js-": JavaScriptMode,
+ "css-": CssMode
+ });
+
+ this.foldingRules = new HtmlFoldMode();
+};
+oop.inherits(Mode, TextMode);
+
+(function() {
+
+
+ this.toggleCommentLines = function(state, doc, startRow, endRow) {
+ return 0;
+ };
+
+ this.getNextLineIndent = function(state, line, tab) {
+ return this.$getIndent(line);
+ };
+
+ this.checkOutdent = function(state, line, input) {
+ return false;
+ };
+
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/css', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/css_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/worker/worker_client', 'ace/mode/folding/cstyle'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextMode = require("./text").Mode;
+var Tokenizer = require("../tokenizer").Tokenizer;
+var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;
+var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
+var WorkerClient = require("../worker/worker_client").WorkerClient;
+var CStyleFoldMode = require("./folding/cstyle").FoldMode;
+
+var Mode = function() {
+ this.$tokenizer = new Tokenizer(new CssHighlightRules().getRules(), "i");
+ this.$outdent = new MatchingBraceOutdent();
+ this.foldingRules = new CStyleFoldMode();
+};
+oop.inherits(Mode, TextMode);
+
+(function() {
+
+ this.foldingRules = "cStyle";
+
+ this.getNextLineIndent = function(state, line, tab) {
+ var indent = this.$getIndent(line);
+
+ // ignore braces in comments
+ var tokens = this.$tokenizer.getLineTokens(line, state).tokens;
+ if (tokens.length && tokens[tokens.length-1].type == "comment") {
+ return indent;
+ }
+
+ var match = line.match(/^.*\{\s*$/);
+ if (match) {
+ indent += tab;
+ }
+
+ return indent;
+ };
+
+ this.checkOutdent = function(state, line, input) {
+ return this.$outdent.checkOutdent(line, input);
+ };
+
+ this.autoOutdent = function(state, doc, row) {
+ this.$outdent.autoOutdent(doc, row);
+ };
+
+ this.createWorker = function(session) {
+ var worker = new WorkerClient(["ace"], "worker-css.js", "ace/mode/css_worker", "Worker");
+ worker.attachToDocument(session.getDocument());
+
+ worker.on("csslint", function(e) {
+ var errors = [];
+ e.data.forEach(function(message) {
+ errors.push({
+ row: message.line - 1,
+ column: message.col - 1,
+ text: message.message,
+ type: message.type,
+ lint: message
+ });
+ });
+
+ session.setAnnotations(errors);
+ });
+ return worker;
+ };
+
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/css_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var lang = require("../lib/lang");
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var CssHighlightRules = function() {
+
+ var properties = lang.arrayToMap(
+ ("-moz-appearance|-moz-box-sizing|-webkit-box-sizing|-moz-outline-radius|-moz-transform|-webkit-transform|" +
+ "appearance|azimuth|background-attachment|background-color|background-image|" +
+ "background-origin|background-position|background-repeat|background|border-bottom-color|" +
+ "border-bottom-style|border-bottom-width|border-bottom|border-collapse|" +
+ "border-color|border-left-color|border-left-style|border-left-width|" +
+ "border-left|border-right-color|border-right-style|border-right-width|" +
+ "border-right|border-spacing|border-style|border-top-color|" +
+ "border-top-style|border-top-width|border-top|border-width|border|" +
+ "bottom|box-sizing|caption-side|clear|clip|color|content|counter-increment|" +
+ "counter-reset|cue-after|cue-before|cue|cursor|direction|display|" +
+ "elevation|empty-cells|float|font-family|font-size-adjust|font-size|" +
+ "font-stretch|font-style|font-variant|font-weight|font|height|left|" +
+ "letter-spacing|line-height|list-style-image|list-style-position|" +
+ "list-style-type|list-style|margin-bottom|margin-left|margin-right|" +
+ "margin-top|marker-offset|margin|marks|max-height|max-width|min-height|" +
+ "min-width|-moz-border-radius|opacity|orphans|outline-color|outline-offset|outline-radius|" +
+ "outline-style|outline-width|outline|overflow|overflow-x|overflow-y|padding-bottom|" +
+ "padding-left|padding-right|padding-top|padding|page-break-after|" +
+ "page-break-before|page-break-inside|page|pause-after|pause-before|" +
+ "pause|pitch-range|pitch|play-during|pointer-events|position|quotes|resize|richness|right|" +
+ "size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|" +
+ "stress|table-layout|text-align|text-decoration|text-indent|" +
+ "text-shadow|text-transform|top|transform|unicode-bidi|vertical-align|" +
+ "visibility|voice-family|volume|white-space|widows|width|word-spacing|" +
+ "z-index").split("|")
+ );
+
+ var functions = lang.arrayToMap(
+ ("rgb|rgba|url|attr|counter|counters").split("|")
+ );
+
+ var constants = lang.arrayToMap(
+ ("absolute|all-scroll|always|armenian|auto|baseline|below|bidi-override|" +
+ "block|bold|bolder|border-box|both|bottom|break-all|break-word|capitalize|center|" +
+ "char|circle|cjk-ideographic|col-resize|collapse|content-box|crosshair|dashed|" +
+ "decimal-leading-zero|decimal|default|disabled|disc|" +
+ "distribute-all-lines|distribute-letter|distribute-space|" +
+ "distribute|dotted|double|e-resize|ellipsis|fixed|georgian|groove|" +
+ "hand|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|" +
+ "ideograph-alpha|ideograph-numeric|ideograph-parenthesis|" +
+ "ideograph-space|inactive|inherit|inline-block|inline|inset|inside|" +
+ "inter-ideograph|inter-word|italic|justify|katakana-iroha|katakana|" +
+ "keep-all|left|lighter|line-edge|line-through|line|list-item|loose|" +
+ "lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|" +
+ "medium|middle|move|n-resize|ne-resize|newspaper|no-drop|no-repeat|" +
+ "nw-resize|none|normal|not-allowed|nowrap|oblique|outset|outside|" +
+ "overline|pointer|progress|relative|repeat-x|repeat-y|repeat|right|" +
+ "ridge|row-resize|rtl|s-resize|scroll|se-resize|separate|small-caps|" +
+ "solid|square|static|strict|super|sw-resize|table-footer-group|" +
+ "table-header-group|tb-rl|text-bottom|text-top|text|thick|thin|top|" +
+ "transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|" +
+ "vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|" +
+ "zero").split("|")
+ );
+
+ var colors = lang.arrayToMap(
+ ("aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|" +
+ "purple|red|silver|teal|white|yellow").split("|")
+ );
+
+ // regexp must not have capturing parentheses. Use (?:) instead.
+ // regexps are ordered -> the first match is used
+
+ var numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))";
+
+ var base_ruleset = [
+ {
+ token : "comment", // multi line comment
+ merge : true,
+ regex : "\\/\\*",
+ next : "ruleset_comment"
+ },{
+ token : "string", // single line
+ regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
+ }, {
+ token : "string", // single line
+ regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
+ }, {
+ token : "constant.numeric",
+ regex : numRe + "(?:em|ex|px|cm|mm|in|pt|pc|deg|rad|grad|ms|s|hz|khz|%)"
+ }, {
+ token : "constant.numeric", // hex6 color
+ regex : "#[a-f0-9]{6}"
+ }, {
+ token : "constant.numeric", // hex3 color
+ regex : "#[a-f0-9]{3}"
+ }, {
+ token : function(value) {
+ if (properties.hasOwnProperty(value.toLowerCase())) {
+ return "support.type";
+ }
+ else if (functions.hasOwnProperty(value.toLowerCase())) {
+ return "support.function";
+ }
+ else if (constants.hasOwnProperty(value.toLowerCase())) {
+ return "support.constant";
+ }
+ else if (colors.hasOwnProperty(value.toLowerCase())) {
+ return "support.constant.color";
+ }
+ else {
+ return "text";
+ }
+ },
+ regex : "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"
+ }
+ ];
+
+ var ruleset = lang.copyArray(base_ruleset);
+ ruleset.unshift({
+ token : "paren.rparen",
+ regex : "\\}",
+ next: "start"
+ });
+
+ var media_ruleset = lang.copyArray( base_ruleset );
+ media_ruleset.unshift({
+ token : "paren.rparen",
+ regex : "\\}",
+ next: "media"
+ });
+
+ var base_comment = [{
+ token : "comment", // comment spanning whole line
+ merge : true,
+ regex : ".+"
+ }];
+
+ var comment = lang.copyArray(base_comment);
+ comment.unshift({
+ token : "comment", // closing comment
+ regex : ".*?\\*\\/",
+ next : "start"
+ });
+
+ var media_comment = lang.copyArray(base_comment);
+ media_comment.unshift({
+ token : "comment", // closing comment
+ regex : ".*?\\*\\/",
+ next : "media"
+ });
+
+ var ruleset_comment = lang.copyArray(base_comment);
+ ruleset_comment.unshift({
+ token : "comment", // closing comment
+ regex : ".*?\\*\\/",
+ next : "ruleset"
+ });
+
+ this.$rules = {
+ "start" : [{
+ token : "comment", // multi line comment
+ merge : true,
+ regex : "\\/\\*",
+ next : "comment"
+ }, {
+ token: "paren.lparen",
+ regex: "\\{",
+ next: "ruleset"
+ }, {
+ token: "string",
+ regex: "@.*?{",
+ next: "media"
+ },{
+ token: "keyword",
+ regex: "#[a-z0-9-_]+"
+ },{
+ token: "variable",
+ regex: "\\.[a-z0-9-_]+"
+ },{
+ token: "string",
+ regex: ":[a-z0-9-_]+"
+ },{
+ token: "constant",
+ regex: "[a-z0-9-_]+"
+ }],
+
+ "media" : [ {
+ token : "comment", // multi line comment
+ merge : true,
+ regex : "\\/\\*",
+ next : "media_comment"
+ }, {
+ token: "paren.lparen",
+ regex: "\\{",
+ next: "media_ruleset"
+ },{
+ token: "string",
+ regex: "\\}",
+ next: "start"
+ },{
+ token: "keyword",
+ regex: "#[a-z0-9-_]+"
+ },{
+ token: "variable",
+ regex: "\\.[a-z0-9-_]+"
+ },{
+ token: "string",
+ regex: ":[a-z0-9-_]+"
+ },{
+ token: "constant",
+ regex: "[a-z0-9-_]+"
+ }],
+
+ "comment" : comment,
+
+ "ruleset" : ruleset,
+ "ruleset_comment" : ruleset_comment,
+
+ "media_ruleset" : media_ruleset,
+ "media_comment" : media_comment
+ };
+};
+
+oop.inherits(CssHighlightRules, TextHighlightRules);
+
+exports.CssHighlightRules = CssHighlightRules;
+
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/html_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/css_highlight_rules', 'ace/mode/javascript_highlight_rules', 'ace/mode/xml_util', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;
+var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;
+var xmlUtil = require("./xml_util");
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var HtmlHighlightRules = function() {
+
+ // regexp must not have capturing parentheses
+ // regexps are ordered -> the first match is used
+ this.$rules = {
+ start : [{
+ token : "text",
+ merge : true,
+ regex : "<\\!\\[CDATA\\[",
+ next : "cdata"
+ }, {
+ token : "xml_pe",
+ regex : "<\\?.*?\\?>"
+ }, {
+ token : "comment",
+ merge : true,
+ regex : "<\\!--",
+ next : "comment"
+ }, {
+ token : "meta.tag",
+ regex : "<(?=\s*script\\b)",
+ next : "script"
+ }, {
+ token : "meta.tag",
+ regex : "<(?=\s*style\\b)",
+ next : "css"
+ }, {
+ token : "meta.tag", // opening tag
+ regex : "<\\/?",
+ next : "tag"
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }, {
+ token : "text",
+ regex : "[^<]+"
+ } ],
+
+ cdata : [ {
+ token : "text",
+ regex : "\\]\\]>",
+ next : "start"
+ }, {
+ token : "text",
+ merge : true,
+ regex : "\\s+"
+ }, {
+ token : "text",
+ merge : true,
+ regex : ".+"
+ } ],
+
+ comment : [ {
+ token : "comment",
+ regex : ".*?-->",
+ next : "start"
+ }, {
+ token : "comment",
+ merge : true,
+ regex : ".+"
+ } ]
+ };
+
+ xmlUtil.tag(this.$rules, "tag", "start");
+ xmlUtil.tag(this.$rules, "css", "css-start");
+ xmlUtil.tag(this.$rules, "script", "js-start");
+
+ this.embedRules(JavaScriptHighlightRules, "js-", [{
+ token: "comment",
+ regex: "\\/\\/.*(?=<\\/script>)",
+ next: "tag"
+ }, {
+ token: "meta.tag",
+ regex: "<\\/(?=script)",
+ next: "tag"
+ }]);
+
+ this.embedRules(CssHighlightRules, "css-", [{
+ token: "meta.tag",
+ regex: "<\\/(?=style)",
+ next: "tag"
+ }]);
+};
+
+oop.inherits(HtmlHighlightRules, TextHighlightRules);
+
+exports.HtmlHighlightRules = HtmlHighlightRules;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/html', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/folding/mixed', 'ace/mode/folding/xml', 'ace/mode/folding/cstyle'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var MixedFoldMode = require("./mixed").FoldMode;
+var XmlFoldMode = require("./xml").FoldMode;
+var CStyleFoldMode = require("./cstyle").FoldMode;
+
+var FoldMode = exports.FoldMode = function() {
+ MixedFoldMode.call(this, new XmlFoldMode({
+ // void elements
+ "area": 1,
+ "base": 1,
+ "br": 1,
+ "col": 1,
+ "command": 1,
+ "embed": 1,
+ "hr": 1,
+ "img": 1,
+ "input": 1,
+ "keygen": 1,
+ "link": 1,
+ "meta": 1,
+ "param": 1,
+ "source": 1,
+ "track": 1,
+ "wbr": 1,
+
+ // optional tags
+ "li": 1,
+ "dt": 1,
+ "dd": 1,
+ "p": 1,
+ "rt": 1,
+ "rp": 1,
+ "optgroup": 1,
+ "option": 1,
+ "colgroup": 1,
+ "td": 1,
+ "th": 1
+ }), {
+ "js-": new CStyleFoldMode(),
+ "css-": new CStyleFoldMode()
+ });
+};
+
+oop.inherits(FoldMode, MixedFoldMode);
+
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/mixed', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var BaseFoldMode = require("./fold_mode").FoldMode;
+
+var FoldMode = exports.FoldMode = function(defaultMode, subModes) {
+ this.defaultMode = defaultMode;
+ this.subModes = subModes;
+};
+oop.inherits(FoldMode, BaseFoldMode);
+
+(function() {
+
+
+ this.$getMode = function(state) {
+ for (var key in this.subModes) {
+ if (state.indexOf(key) === 0)
+ return this.subModes[key];
+ }
+ return null;
+ };
+
+ this.$tryMode = function(state, session, foldStyle, row) {
+ var mode = this.$getMode(state);
+ return (mode ? mode.getFoldWidget(session, foldStyle, row) : "");
+ };
+
+ this.getFoldWidget = function(session, foldStyle, row) {
+ return (
+ this.$tryMode(session.getState(row-1), session, foldStyle, row) ||
+ this.$tryMode(session.getState(row), session, foldStyle, row) ||
+ this.defaultMode.getFoldWidget(session, foldStyle, row)
+ );
+ };
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ var mode = this.$getMode(session.getState(row-1));
+
+ if (!mode || !mode.getFoldWidget(session, foldStyle, row))
+ mode = this.$getMode(session.getState(row));
+
+ if (!mode || !mode.getFoldWidget(session, foldStyle, row))
+ mode = this.defaultMode;
+
+ return mode.getFoldWidgetRange(session, foldStyle, row);
+ };
+
+}).call(FoldMode.prototype);
+
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ * Chris Spencer <chris.ag.spencer AT googlemail DOT com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/markdown_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules', 'ace/mode/javascript_highlight_rules', 'ace/mode/xml_highlight_rules', 'ace/mode/html_highlight_rules', 'ace/mode/css_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;
+var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules;
+var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules;
+var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;
+
+function github_embed(tag, prefix) {
+ return { // Github style block
+ token : "support.function",
+ regex : "^```" + tag + "\\s*$",
+ next : prefix + "start"
+ };
+}
+
+var MarkdownHighlightRules = function() {
+
+ // regexp must not have capturing parentheses
+ // regexps are ordered -> the first match is used
+
+ this.$rules = {
+ "start" : [ {
+ token : "empty_line",
+ regex : '^$'
+ }, { // code span `
+ token : "support.function",
+ regex : "(`+)([^\\r]*?[^`])(\\1)"
+ }, { // code block
+ token : "support.function",
+ regex : "^[ ]{4}.+"
+ }, { // h1
+ token: "markup.heading.1",
+ regex: "^=+(?=\\s*$)"
+ }, { // h2
+ token: "markup.heading.1",
+ regex: "^\\-+(?=\\s*$)"
+ }, { // header
+ token : function(value) {
+ return "markup.heading." + value.length;
+ },
+ regex : "^#{1,6}"
+ }, github_embed("javascript", "js-"),
+ github_embed("xml", "xml-"),
+ github_embed("html", "html-"),
+ github_embed("css", "css-"),
+ { // Github style block
+ token : "support.function",
+ regex : "^```[a-zA-Z]+\\s*$",
+ next : "githubblock"
+ }, { // block quote
+ token : "string",
+ regex : "^>[ ].+$",
+ next : "blockquote"
+ }, { // reference
+ token : ["text", "constant", "text", "url", "string", "text"],
+ regex : "^([ ]{0,3}\\[)([^\\]]+)(\\]:\\s*)([^ ]+)(\\s*(?:[\"][^\"]+[\"])?\\s*)$"
+ }, { // link by reference
+ token : ["text", "string", "text", "constant", "text"],
+ regex : "(\\[)((?:[[^\\]]*\\]|[^\\[\\]])*)(\\][ ]?(?:\\n[ ]*)?\\[)(.*?)(\\])"
+ }, { // link by url
+ token : ["text", "string", "text", "markup.underline", "string", "text"],
+ regex : "(\\[)"+
+ "(\\[[^\\]]*\\]|[^\\[\\]]*)"+
+ "(\\]\\([ \\t]*)"+
+ "(<?(?:(?:[^\\(]*?\\([^\\)]*?\\)\\S*?)|(?:.*?))>?)"+
+ "((?:[ \t]*\"(?:.*?)\"[ \\t]*)?)"+
+ "(\\))"
+ }, { // HR *
+ token : "constant",
+ regex : "^[ ]{0,2}(?:[ ]?\\*[ ]?){3,}\\s*$"
+ }, { // HR -
+ token : "constant",
+ regex : "^[ ]{0,2}(?:[ ]?\\-[ ]?){3,}\\s*$"
+ }, { // HR _
+ token : "constant",
+ regex : "^[ ]{0,2}(?:[ ]?\\_[ ]?){3,}\\s*$"
+ }, { // list
+ token : "markup.list",
+ regex : "^\\s{0,3}(?:[*+-]|\\d+\\.)\\s+",
+ next : "listblock"
+ }, { // strong ** __
+ token : "string",
+ regex : "([*]{2}|[_]{2}(?=\\S))([^\\r]*?\\S[*_]*)(\\1)"
+ }, { // emphasis * _
+ token : "string",
+ regex : "([*]|[_](?=\\S))([^\\r]*?\\S[*_]*)(\\1)"
+ }, { //
+ token : ["text", "url", "text"],
+ regex : "(<)("+
+ "(?:https?|ftp|dict):[^'\">\\s]+"+
+ "|"+
+ "(?:mailto:)?[-.\\w]+\\@[-a-z0-9]+(?:\\.[-a-z0-9]+)*\\.[a-z]+"+
+ ")(>)"
+ }, {
+ token : "text",
+ regex : "[^\\*_%$`\\[#<>]+"
+ } ],
+
+ "listblock" : [ { // Lists only escape on completely blank lines.
+ token : "empty_line",
+ regex : "^$",
+ next : "start"
+ }, {
+ token : "markup.list",
+ regex : ".+"
+ } ],
+
+ "blockquote" : [ { // BLockquotes only escape on blank lines.
+ token : "empty_line",
+ regex : "^\\s*$",
+ next : "start"
+ }, {
+ token : "string",
+ regex : ".+"
+ } ],
+
+ "githubblock" : [ {
+ token : "support.function",
+ regex : "^```",
+ next : "start"
+ }, {
+ token : "support.function",
+ regex : ".+"
+ } ]
+ };
+
+ this.embedRules(JavaScriptHighlightRules, "js-", [{
+ token : "support.function",
+ regex : "^```",
+ next : "start"
+ }]);
+
+ this.embedRules(HtmlHighlightRules, "html-", [{
+ token : "support.function",
+ regex : "^```",
+ next : "start"
+ }]);
+
+ this.embedRules(CssHighlightRules, "css-", [{
+ token : "support.function",
+ regex : "^```",
+ next : "start"
+ }]);
+
+ this.embedRules(XmlHighlightRules, "xml-", [{
+ token : "support.function",
+ regex : "^```",
+ next : "start"
+ }]);
+};
+oop.inherits(MarkdownHighlightRules, TextHighlightRules);
+
+exports.MarkdownHighlightRules = MarkdownHighlightRules;
+});;
+ (function() {
+ window.require(["ace/ace"], function(a) {
+ if (!window.ace)
+ window.ace = {};
+ for (var key in a) if (a.hasOwnProperty(key))
+ ace[key] = a[key];
+ });
+ })();
+ \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-markdown.js b/apps/files_texteditor/js/aceeditor/mode-markdown.js
new file mode 100755
index 00000000000..4cf7a4a82b4
--- /dev/null
+++ b/apps/files_texteditor/js/aceeditor/mode-markdown.js
@@ -0,0 +1 @@
+define("ace/mode/markdown",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript","ace/mode/xml","ace/mode/html","ace/tokenizer","ace/mode/markdown_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text").Mode,f=a("./javascript").Mode,g=a("./xml").Mode,h=a("./html").Mode,i=a("../tokenizer").Tokenizer,j=a("./markdown_highlight_rules").MarkdownHighlightRules,k=function(){var a=new j;this.$tokenizer=new i(a.getRules()),this.$embeds=a.getEmbeds(),this.createModeDelegates({"js-":f,"xml-":g,"html-":h})};d.inherits(k,e),function(){this.getNextLineIndent=function(a,b,c){if(a=="listblock"){var d=/^((?:.+)?)([-+*][ ]+)/.exec(b);return d?(new Array(d[1].length+1)).join(" ")+d[2]:""}return this.$getIndent(b)}}.call(k.prototype),b.Mode=k}),define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text").Mode,f=a("../tokenizer").Tokenizer,g=a("./javascript_highlight_rules").JavaScriptHighlightRules,h=a("./matching_brace_outdent").MatchingBraceOutdent,i=a("../range").Range,j=a("../worker/worker_client").WorkerClient,k=a("./behaviour/cstyle").CstyleBehaviour,l=a("./folding/cstyle").FoldMode,m=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h,this.$behaviour=new k,this.foldingRules=new l};d.inherits(m,e),function(){this.toggleCommentLines=function(a,b,c,d){var e=!0,f=/^(\s*)\/\//;for(var g=c;g<=d;g++)if(!f.test(b.getLine(g))){e=!1;break}if(e){var h=new i(0,0,0,0);for(var g=c;g<=d;g++){var j=b.getLine(g),k=j.match(f);h.start.row=g,h.end.row=g,h.end.column=k[0].length,b.replace(h,k[1])}}else b.indentRows(c,d,"//")},this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=this.$tokenizer.getLineTokens(b,a),f=e.tokens,g=e.state;if(f.length&&f[f.length-1].type=="comment")return d;if(a=="start"||a=="regex_allowed"){var h=b.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);h&&(d+=c)}else if(a=="doc-start"){if(g=="start"||a=="regex_allowed")return"";var h=b.match(/^\s*(\/?)\*/);h&&(h[1]&&(d+=" "),d+="* ")}return d},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)},this.createWorker=function(a){var b=new j(["ace"],"worker-javascript.js","ace/mode/javascript_worker","JavaScriptWorker");return b.attachToDocument(a.getDocument()),b.on("jslint",function(b){var c=[];for(var d=0;d<b.data.length;d++){var e=b.data[d];e&&c.push({row:e.line-1,column:e.character-1,text:e.reason,type:"warning",lint:e})}a.setAnnotations(c)}),b.on("narcissus",function(b){a.setAnnotations([b.data])}),b.on("terminate",function(){a.clearAnnotations()}),b}}.call(m.prototype),b.Mode=m}),define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/unicode","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("../lib/lang"),f=a("../unicode"),g=a("./doc_comment_highlight_rules").DocCommentHighlightRules,h=a("./text_highlight_rules").TextHighlightRules,i=function(){var a=e.arrayToMap("Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document".split("|")),b=e.arrayToMap("break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|const|yield|import|get|set".split("|")),c="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield",d=e.arrayToMap("__parent__|__count__|escape|unescape|with|__proto__".split("|")),h=e.arrayToMap("const|let|var|function".split("|")),i=e.arrayToMap("null|Infinity|NaN|undefined".split("|")),j=e.arrayToMap("class|enum|extends|super|export|implements|private|public|interface|package|protected|static".split("|")),k="["+f.packages.L+"\\$_]["+f.packages.L+f.packages.Mn+f.packages.Mc+f.packages.Nd+f.packages.Pc+"\\$_]*\\b";this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},(new g).getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",merge:!0,regex:'["].*\\\\$',next:"qqstring"},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"string",merge:!0,regex:"['].*\\\\$",next:"qstring"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:["keyword.definition","text","entity.name.function"],regex:"(function)(\\s+)("+k+")"},{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:"keyword",regex:"(?:"+c+")\\b",next:"regex_allowed"},{token:function(c){return a.hasOwnProperty(c)?"variable.language":d.hasOwnProperty(c)?"invalid.deprecated":h.hasOwnProperty(c)?"keyword.definition":b.hasOwnProperty(c)?"keyword":i.hasOwnProperty(c)?"constant.language":j.hasOwnProperty(c)?"invalid.illegal":c=="debugger"?"invalid.deprecated":"identifier"},regex:k},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)",next:"regex_allowed"},{token:"punctuation.operator",regex:"\\?|\\:|\\,|\\;|\\.",next:"regex_allowed"},{token:"paren.lparen",regex:"[[({]",next:"regex_allowed"},{token:"paren.rparen",regex:"[\\])}]"},{token:"keyword.operator",regex:"\\/=?",next:"regex_allowed"},{token:"comment",regex:"^#!.*$"},{token:"text",regex:"\\s+"}],regex_allowed:[{token:"comment",merge:!0,regex:"\\/\\*",next:"comment_regex_allowed"},{token:"comment",regex:"\\/\\/.*$"},{token:"string.regexp",regex:"\\/",next:"regex",merge:!0},{token:"text",regex:"\\s+"},{token:"empty",regex:"",next:"start"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)",next:"regex"},{token:"string.regexp",regex:"/\\w*",next:"start",merge:!0},{token:"string.regexp",regex:"[^\\\\/\\[]+",next:"regex",merge:!0},{token:"string.regexp.charachterclass",regex:"\\[",next:"regex_character_class",merge:!0},{token:"empty",regex:"",next:"start"}],regex_character_class:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)",next:"regex_character_class"},{token:"string.regexp.charachterclass",regex:"]",next:"regex",merge:!0},{token:"string.regexp.charachterclass",regex:"[^\\\\\\]]+",next:"regex_character_class",merge:!0},{token:"empty",regex:"",next:"start"}],comment_regex_allowed:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"regex_allowed"},{token:"comment",merge:!0,regex:".+"}],comment:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"string",regex:'(?:(?:\\\\.)|(?:[^"\\\\]))*?"',next:"start"},{token:"string",merge:!0,regex:".+"}],qstring:[{token:"string",regex:"(?:(?:\\\\.)|(?:[^'\\\\]))*?'",next:"start"},{token:"string",merge:!0,regex:".+"}]},this.embedRules(g,"doc-",[(new g).getEndRule("start")])};d.inherits(i,h),b.JavaScriptHighlightRules=i}),define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text_highlight_rules").TextHighlightRules,f=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};d.inherits(f,e),function(){this.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},this.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}}}.call(f.prototype),b.DocCommentHighlightRules=f}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(a,b,c){"use strict";var d=a("../range").Range,e=function(){};((function(){this.checkOutdent=function(a,b){return/^\s+$/.test(a)?/^\s*\}/.test(b):!1},this.autoOutdent=function(a,b){var c=a.getLine(b),e=c.match(/^(\s*\})/);if(!e)return 0;var f=e[1].length,g=a.findMatchingBracket({row:b,column:f});if(!g||g.row==b)return 0;var h=this.$getIndent(a.getLine(g.row));a.replace(new d(b,0,b,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""}})).call(e.prototype),b.MatchingBraceOutdent=e}),define("ace/worker/worker_client",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("../lib/event_emitter").EventEmitter,f=function(b,d,e,f){this.changeListener=this.changeListener.bind(this);if(c.packaged){var g=this.$guessBasePath();this.$worker=new Worker(g+d)}else{var h=this.$normalizePath(a.nameToUrl("ace/worker/worker",null,"_"));this.$worker=new Worker(h);var i={};for(var j=0;j<b.length;j++){var k=b[j],l=this.$normalizePath(a.nameToUrl(k,null,"_").replace(/.js$/,""));i[k]=l}}this.$worker.postMessage({init:!0,tlns:i,module:e,classname:f}),this.callbackId=1,this.callbacks={};var m=this;this.$worker.onerror=function(a){throw window.console&&console.log&&console.log(a),a},this.$worker.onmessage=function(a){var b=a.data;switch(b.type){case"log":window.console&&console.log&&console.log(b.data);break;case"event":m._emit(b.name,{data:b.data});break;case"call":var c=m.callbacks[b.id];c&&(c(b.data),delete m.callbacks[b.id])}}};((function(){d.implement(this,e),this.$normalizePath=function(a){return a=a.replace(/^[a-z]+:\/\/[^\/]+\//,""),a=location.protocol+"//"+location.host+(a.charAt(0)=="/"?"":location.pathname.replace(/\/[^\/]*$/,""))+"/"+a.replace(/^[\/]+/,""),a},this.$guessBasePath=function(){if(a.aceBaseUrl)return a.aceBaseUrl;var b=document.getElementsByTagName("script");for(var c=0;c<b.length;c++){var d=b[c],e=d.getAttribute("data-ace-base");if(e)return e.replace(/\/*$/,"/");var f=d.src||d.getAttribute("src");if(!f)continue;var g=f.match(/^(?:(.*\/)ace\.js|(.*\/)ace(-uncompressed)?(-noconflict)?\.js)(?:\?|$)/);if(g)return g[1]||g[2]}return""},this.terminate=function(){this._emit("terminate",{}),this.$worker.terminate(),this.$worker=null,this.$doc.removeEventListener("change",this.changeListener),this.$doc=null},this.send=function(a,b){this.$worker.postMessage({command:a,args:b})},this.call=function(a,b,c){if(c){var d=this.callbackId++;this.callbacks[d]=c,b.push(d)}this.send(a,b)},this.emit=function(a,b){try{this.$worker.postMessage({event:a,data:{data:b.data}})}catch(c){}},this.attachToDocument=function(a){this.$doc&&this.terminate(),this.$doc=a,this.call("setValue",[a.getValue()]),a.on("change",this.changeListener)},this.changeListener=function(a){a.range={start:a.data.range.start,end:a.data.range.end},this.emit("change",a)}})).call(f.prototype),b.WorkerClient=f}),define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("../behaviour").Behaviour,f=function(){this.add("braces","insertion",function(a,b,c,d,e){if(e=="{"){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"{"+g+"}",selection:!1}:{text:"{}",selection:[1,1]}}if(e=="}"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var k=d.$findOpeningBracket("}",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}else if(e=="\n"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var l=d.findMatchingBracket({row:h.row,column:h.column+1});if(!l)return null;var m=this.getNextLineIndent(a,i.substring(0,i.length-1),d.getTabString()),n=this.$getIndent(d.doc.getLine(l.row));return{text:"\n"+m+"\n"+n,selection:[1,m.length,1,m.length]}}}}),this.add("braces","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="{"){var g=d.doc.getLine(e.start.row),h=g.substring(e.end.column,e.end.column+1);if(h=="}")return e.end.column++,e}}),this.add("parens","insertion",function(a,b,c,d,e){if(e=="("){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"("+g+")",selection:!1}:{text:"()",selection:[1,1]}}if(e==")"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j==")"){var k=d.$findOpeningBracket(")",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="("){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h==")")return e.end.column++,e}}),this.add("string_dquotes","insertion",function(a,b,c,d,e){if(e=='"'){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);if(g!=="")return{text:'"'+g+'"',selection:!1};var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column-1,h.column);if(j=="\\")return null;var k=d.getTokens(f.start.row,f.start.row)[0].tokens,l=0,m,n=-1;for(var o=0;o<k.length;o++){m=k[o],m.type=="string"?n=-1:n<0&&(n=m.value.indexOf('"'));if(m.value.length+l>f.start.column)break;l+=k[o].value.length}if(!m||n<0&&m.type!=="comment"&&(m.type!=="string"||f.start.column!==m.value.length+l-1&&m.value.lastIndexOf('"')===m.value.length-1))return{text:'""',selection:[1,1]};if(m&&m.type==="string"){var p=i.substring(h.column,h.column+1);if(p=='"')return{text:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=='"'){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h=='"')return e.end.column++,e}})};d.inherits(f,e),b.CstyleBehaviour=f}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("../../range").Range,f=a("./fold_mode").FoldMode,g=b.FoldMode=function(){};d.inherits(g,f),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(a,b,c){var d=a.getLine(c),f=d.match(this.foldingStartMarker);if(f){var g=f.index;if(f[1])return this.openingBracketBlock(a,f[1],c,g);var h=a.getCommentFoldRange(c,g+f[0].length);return h.end.column-=2,h}if(b!=="markbeginend")return;var f=d.match(this.foldingStopMarker);if(f){var g=f.index+f[0].length;if(f[2]){var h=a.getCommentFoldRange(c,g);return h.end.column-=2,h}var i={row:c,column:g},j=a.$findOpeningBracket(f[1],i);if(!j)return;return j.column++,i.column--,e.fromPoints(j,i)}}}.call(g.prototype)}),define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"],function(a,b,c){"use strict";var d=a("../../range").Range,e=b.FoldMode=function(){};((function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(a,b,c){var d=a.getLine(c);return this.foldingStartMarker.test(d)?"start":b=="markbeginend"&&this.foldingStopMarker&&this.foldingStopMarker.test(d)?"end":""},this.getFoldWidgetRange=function(a,b,c){return null},this.indentationBlock=function(a,b,c){var e=/^\s*/,f=b,g=b,h=a.getLine(b),i=c||h.length,j=h.match(e)[0].length,k=a.getLength();while(++b<k){h=a.getLine(b);var l=h.match(e)[0].length;if(l==h.length)continue;if(l<=j)break;g=b}if(g>f){var m=a.getLine(g).length;return new d(f,i,g,m)}},this.openingBracketBlock=function(a,b,c,e){var f={row:c,column:e+1},g=a.$findClosingBracket(b,f);if(!g)return;var h=a.foldWidgets[g.row];return h==null&&(h=this.getFoldWidget(a,g.row)),h=="start"&&(g.row--,g.column=a.getLine(g.row).length),d.fromPoints(f,g)}})).call(e.prototype)}),define("ace/mode/xml",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/xml_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/xml"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text").Mode,f=a("../tokenizer").Tokenizer,g=a("./xml_highlight_rules").XmlHighlightRules,h=a("./behaviour/xml").XmlBehaviour,i=a("./folding/xml").FoldMode,j=function(){this.$tokenizer=new f((new g).getRules()),this.$behaviour=new h,this.foldingRules=new i};d.inherits(j,e),function(){this.getNextLineIndent=function(a,b,c){return this.$getIndent(b)}}.call(j.prototype),b.Mode=j}),define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/xml_util","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./xml_util"),f=a("./text_highlight_rules").TextHighlightRules,g=function(){this.$rules={start:[{token:"text",regex:"<\\!\\[CDATA\\[",next:"cdata"},{token:"xml_pe",regex:"<\\?.*?\\?>"},{token:"comment",merge:!0,regex:"<\\!--",next:"comment"},{token:"meta.tag",regex:"<\\/?",next:"tag"},{token:"text",regex:"\\s+"},{token:"text",regex:"[^<]+"}],cdata:[{token:"text",regex:"\\]\\]>",next:"start"},{token:"text",regex:"\\s+"},{token:"text",regex:"(?:[^\\]]|\\](?!\\]>))+"}],comment:[{token:"comment",regex:".*?-->",next:"start"},{token:"comment",merge:!0,regex:".+"}]},e.tag(this.$rules,"tag","start")};d.inherits(g,f),b.XmlHighlightRules=g}),define("ace/mode/xml_util",["require","exports","module","ace/lib/lang"],function(a,b,c){function g(a){return[{token:"string",regex:'".*?"'},{token:"string",merge:!0,regex:'["].*',next:a+"-qqstring"},{token:"string",regex:"'.*?'"},{token:"string",merge:!0,regex:"['].*",next:a+"-qstring"}]}function h(a,b){return[{token:"string",merge:!0,regex:".*?"+a,next:b},{token:"string",merge:!0,regex:".+"}]}"use strict";var d=a("../lib/lang"),e=d.arrayToMap("button|form|input|label|select|textarea".split("|")),f=d.arrayToMap("table|tbody|td|tfoot|th|tr".split("|"));b.tag=function(a,b,c){a[b]=[{token:"text",regex:"\\s+"},{token:function(a){return a==="a"?"meta.tag.anchor":a==="img"?"meta.tag.image":a==="script"?"meta.tag.script":a==="style"?"meta.tag.style":e.hasOwnProperty(a.toLowerCase())?"meta.tag.form":f.hasOwnProperty(a.toLowerCase())?"meta.tag.table":"meta.tag"},merge:!0,regex:"[-_a-zA-Z0-9:!]+",next:b+"embed-attribute-list"},{token:"empty",regex:"",next:b+"embed-attribute-list"}],a[b+"-qstring"]=h("'",b+"embed-attribute-list"),a[b+"-qqstring"]=h('"',b+"embed-attribute-list"),a[b+"embed-attribute-list"]=[{token:"meta.tag",merge:!0,regex:"/?>",next:c},{token:"keyword.operator",regex:"="},{token:"entity.other.attribute-name",regex:"[-_a-zA-Z0-9:]+"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"text",regex:"\\s+"}].concat(g(b))}}),define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("../behaviour").Behaviour,f=a("./cstyle").CstyleBehaviour,g=function(){this.inherit(f,["string_dquotes"]),this.add("brackets","insertion",function(a,b,c,d,e){if(e=="<"){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?!1:{text:"<>",selection:[1,1]}}if(e==">"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j==">")return{text:"",selection:[1,1]}}else if(e=="\n"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),k=i.substring(h.column,h.column+2);if(k=="</"){var l=this.$getIndent(d.doc.getLine(h.row))+d.getTabString(),m=this.$getIndent(d.doc.getLine(h.row));return{text:"\n"+l+"\n"+m,selection:[1,l.length,1,l.length]}}}})};d.inherits(g,e),b.XmlBehaviour=g}),define("ace/mode/folding/xml",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/range","ace/mode/folding/fold_mode","ace/token_iterator"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("../../lib/lang"),f=a("../../range").Range,g=a("./fold_mode").FoldMode,h=a("../../token_iterator").TokenIterator,i=b.FoldMode=function(a){g.call(this),this.voidElements=a||{}};d.inherits(i,g),function(){this.getFoldWidget=function(a,b,c){var d=this._getFirstTagInLine(a,c);return d.closing?b=="markbeginend"?"end":"":!d.tagName||this.voidElements[d.tagName.toLowerCase()]?"":d.selfClosing?"":d.value.indexOf("/"+d.tagName)!==-1?"":"start"},this._getFirstTagInLine=function(a,b){var c=a.getTokens(b,b)[0].tokens,d="";for(var f=0;f<c.length;f++){var g=c[f];g.type.indexOf("meta.tag")===0?d+=g.value:d+=e.stringRepeat(" ",g.value.length)}return this._parseTag(d)},this.tagRe=/^(\s*)(<?(\/?)([-_a-zA-Z0-9:!]*)\s*(\/?)>?)/,this._parseTag=function(a){var b=this.tagRe.exec(a),c=this.tagRe.lastIndex||0;return this.tagRe.lastIndex=0,{value:a,match:b?b[2]:"",closing:b?!!b[3]:!1,selfClosing:b?!!b[5]||b[2]=="/>":!1,tagName:b?b[4]:"",column:b[1]?c+b[1].length:c}},this._readTagForward=function(a){var b=a.getCurrentToken();if(!b)return null;var c="",d;do if(b.type.indexOf("meta.tag")===0){if(!d)var d={row:a.getCurrentTokenRow(),column:a.getCurrentTokenColumn()};c+=b.value;if(c.indexOf(">")!==-1){var e=this._parseTag(c);return e.start=d,e.end={row:a.getCurrentTokenRow(),column:a.getCurrentTokenColumn()+b.value.length},a.stepForward(),e}}while(b=a.stepForward());return null},this._readTagBackward=function(a){var b=a.getCurrentToken();if(!b)return null;var c="",d;do if(b.type.indexOf("meta.tag")===0){d||(d={row:a.getCurrentTokenRow(),column:a.getCurrentTokenColumn()+b.value.length}),c=b.value+c;if(c.indexOf("<")!==-1){var e=this._parseTag(c);return e.end=d,e.start={row:a.getCurrentTokenRow(),column:a.getCurrentTokenColumn()},a.stepBackward(),e}}while(b=a.stepBackward());return null},this._pop=function(a,b){while(a.length){var c=a[a.length-1];if(!b||c.tagName==b.tagName)return a.pop();if(this.voidElements[b.tagName])return;if(this.voidElements[c.tagName]){a.pop();continue}return null}},this.getFoldWidgetRange=function(a,b,c){var d=this._getFirstTagInLine(a,c);if(!d.match)return null;var e=d.closing||d.selfClosing,g=[],i;if(!e){var j=new h(a,c,d.column),k={row:c,column:d.column+d.tagName.length+2};while(i=this._readTagForward(j)){if(i.selfClosing){if(!g.length)return i.start.column+=i.tagName.length+2,i.end.column-=2,f.fromPoints(i.start,i.end);continue}if(i.closing){this._pop(g,i);if(g.length==0)return f.fromPoints(k,i.start)}else g.push(i)}}else{var j=new h(a,c,d.column+d.match.length),l={row:c,column:d.column};while(i=this._readTagBackward(j)){if(i.selfClosing){if(!g.length)return i.start.column+=i.tagName.length+2,i.end.column-=2,f.fromPoints(i.start,i.end);continue}if(!i.closing){this._pop(g,i);if(g.length==0)return i.start.column+=i.tagName.length+2,f.fromPoints(i.start,l)}else g.push(i)}}}}.call(i.prototype)}),define("ace/mode/html",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript","ace/mode/css","ace/tokenizer","ace/mode/html_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/html"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text").Mode,f=a("./javascript").Mode,g=a("./css").Mode,h=a("../tokenizer").Tokenizer,i=a("./html_highlight_rules").HtmlHighlightRules,j=a("./behaviour/xml").XmlBehaviour,k=a("./folding/html").FoldMode,l=function(){var a=new i;this.$tokenizer=new h(a.getRules()),this.$behaviour=new j,this.$embeds=a.getEmbeds(),this.createModeDelegates({"js-":f,"css-":g}),this.foldingRules=new k};d.inherits(l,e),function(){this.toggleCommentLines=function(a,b,c,d){return 0},this.getNextLineIndent=function(a,b,c){return this.$getIndent(b)},this.checkOutdent=function(a,b,c){return!1}}.call(l.prototype),b.Mode=l}),define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/folding/cstyle"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text").Mode,f=a("../tokenizer").Tokenizer,g=a("./css_highlight_rules").CssHighlightRules,h=a("./matching_brace_outdent").MatchingBraceOutdent,i=a("../worker/worker_client").WorkerClient,j=a("./folding/cstyle").FoldMode,k=function(){this.$tokenizer=new f((new g).getRules(),"i"),this.$outdent=new h,this.foldingRules=new j};d.inherits(k,e),function(){this.foldingRules="cStyle",this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=this.$tokenizer.getLineTokens(b,a).tokens;if(e.length&&e[e.length-1].type=="comment")return d;var f=b.match(/^.*\{\s*$/);return f&&(d+=c),d},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)},this.createWorker=function(a){var b=new i(["ace"],"worker-css.js","ace/mode/css_worker","Worker");return b.attachToDocument(a.getDocument()),b.on("csslint",function(b){var c=[];b.data.forEach(function(a){c.push({row:a.line-1,column:a.col-1,text:a.message,type:a.type,lint:a})}),a.setAnnotations(c)}),b}}.call(k.prototype),b.Mode=k}),define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("../lib/lang"),f=a("./text_highlight_rules").TextHighlightRules,g=function(){var a=e.arrayToMap("-moz-appearance|-moz-box-sizing|-webkit-box-sizing|-moz-outline-radius|-moz-transform|-webkit-transform|appearance|azimuth|background-attachment|background-color|background-image|background-origin|background-position|background-repeat|background|border-bottom-color|border-bottom-style|border-bottom-width|border-bottom|border-collapse|border-color|border-left-color|border-left-style|border-left-width|border-left|border-right-color|border-right-style|border-right-width|border-right|border-spacing|border-style|border-top-color|border-top-style|border-top-width|border-top|border-width|border|bottom|box-sizing|caption-side|clear|clip|color|content|counter-increment|counter-reset|cue-after|cue-before|cue|cursor|direction|display|elevation|empty-cells|float|font-family|font-size-adjust|font-size|font-stretch|font-style|font-variant|font-weight|font|height|left|letter-spacing|line-height|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|marker-offset|margin|marks|max-height|max-width|min-height|min-width|-moz-border-radius|opacity|orphans|outline-color|outline-offset|outline-radius|outline-style|outline-width|outline|overflow|overflow-x|overflow-y|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page|pause-after|pause-before|pause|pitch-range|pitch|play-during|pointer-events|position|quotes|resize|richness|right|size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|stress|table-layout|text-align|text-decoration|text-indent|text-shadow|text-transform|top|transform|unicode-bidi|vertical-align|visibility|voice-family|volume|white-space|widows|width|word-spacing|z-index".split("|")),b=e.arrayToMap("rgb|rgba|url|attr|counter|counters".split("|")),c=e.arrayToMap("absolute|all-scroll|always|armenian|auto|baseline|below|bidi-override|block|bold|bolder|border-box|both|bottom|break-all|break-word|capitalize|center|char|circle|cjk-ideographic|col-resize|collapse|content-box|crosshair|dashed|decimal-leading-zero|decimal|default|disabled|disc|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ellipsis|fixed|georgian|groove|hand|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|inactive|inherit|inline-block|inline|inset|inside|inter-ideograph|inter-word|italic|justify|katakana-iroha|katakana|keep-all|left|lighter|line-edge|line-through|line|list-item|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|medium|middle|move|n-resize|ne-resize|newspaper|no-drop|no-repeat|nw-resize|none|normal|not-allowed|nowrap|oblique|outset|outside|overline|pointer|progress|relative|repeat-x|repeat-y|repeat|right|ridge|row-resize|rtl|s-resize|scroll|se-resize|separate|small-caps|solid|square|static|strict|super|sw-resize|table-footer-group|table-header-group|tb-rl|text-bottom|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|zero".split("|")),d=e.arrayToMap("aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow".split("|")),f="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))",g=[{token:"comment",merge:!0,regex:"\\/\\*",next:"ruleset_comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"constant.numeric",regex:f+"(?:em|ex|px|cm|mm|in|pt|pc|deg|rad|grad|ms|s|hz|khz|%)"},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:function(e){return a.hasOwnProperty(e.toLowerCase())?"support.type":b.hasOwnProperty(e.toLowerCase())?"support.function":c.hasOwnProperty(e.toLowerCase())?"support.constant":d.hasOwnProperty(e.toLowerCase())?"support.constant.color":"text"},regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"}],h=e.copyArray(g);h.unshift({token:"paren.rparen",regex:"\\}",next:"start"});var i=e.copyArray(g);i.unshift({token:"paren.rparen",regex:"\\}",next:"media"});var j=[{token:"comment",merge:!0,regex:".+"}],k=e.copyArray(j);k.unshift({token:"comment",regex:".*?\\*\\/",next:"start"});var l=e.copyArray(j);l.unshift({token:"comment",regex:".*?\\*\\/",next:"media"});var m=e.copyArray(j);m.unshift({token:"comment",regex:".*?\\*\\/",next:"ruleset"}),this.$rules={start:[{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"paren.lparen",regex:"\\{",next:"ruleset"},{token:"string",regex:"@.*?{",next:"media"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"}],media:[{token:"comment",merge:!0,regex:"\\/\\*",next:"media_comment"},{token:"paren.lparen",regex:"\\{",next:"media_ruleset"},{token:"string",regex:"\\}",next:"start"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"}],comment:k,ruleset:h,ruleset_comment:m,media_ruleset:i,media_comment:l}};d.inherits(g,f),b.CssHighlightRules=g}),define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_util","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./css_highlight_rules").CssHighlightRules,f=a("./javascript_highlight_rules").JavaScriptHighlightRules,g=a("./xml_util"),h=a("./text_highlight_rules").TextHighlightRules,i=function(){this.$rules={start:[{token:"text",merge:!0,regex:"<\\!\\[CDATA\\[",next:"cdata"},{token:"xml_pe",regex:"<\\?.*?\\?>"},{token:"comment",merge:!0,regex:"<\\!--",next:"comment"},{token:"meta.tag",regex:"<(?=s*script\\b)",next:"script"},{token:"meta.tag",regex:"<(?=s*style\\b)",next:"css"},{token:"meta.tag",regex:"<\\/?",next:"tag"},{token:"text",regex:"\\s+"},{token:"text",regex:"[^<]+"}],cdata:[{token:"text",regex:"\\]\\]>",next:"start"},{token:"text",merge:!0,regex:"\\s+"},{token:"text",merge:!0,regex:".+"}],comment:[{token:"comment",regex:".*?-->",next:"start"},{token:"comment",merge:!0,regex:".+"}]},g.tag(this.$rules,"tag","start"),g.tag(this.$rules,"css","css-start"),g.tag(this.$rules,"script","js-start"),this.embedRules(f,"js-",[{token:"comment",regex:"\\/\\/.*(?=<\\/script>)",next:"tag"},{token:"meta.tag",regex:"<\\/(?=script)",next:"tag"}]),this.embedRules(e,"css-",[{token:"meta.tag",regex:"<\\/(?=style)",next:"tag"}])};d.inherits(i,h),b.HtmlHighlightRules=i}),define("ace/mode/folding/html",["require","exports","module","ace/lib/oop","ace/mode/folding/mixed","ace/mode/folding/xml","ace/mode/folding/cstyle"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("./mixed").FoldMode,f=a("./xml").FoldMode,g=a("./cstyle").FoldMode,h=b.FoldMode=function(){e.call(this,new f({area:1,base:1,br:1,col:1,command:1,embed:1,hr:1,img:1,input:1,keygen:1,link:1,meta:1,param:1,source:1,track:1,wbr:1,li:1,dt:1,dd:1,p:1,rt:1,rp:1,optgroup:1,option:1,colgroup:1,td:1,th:1}),{"js-":new g,"css-":new g})};d.inherits(h,e)}),define("ace/mode/folding/mixed",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("./fold_mode").FoldMode,f=b.FoldMode=function(a,b){this.defaultMode=a,this.subModes=b};d.inherits(f,e),function(){this.$getMode=function(a){for(var b in this.subModes)if(a.indexOf(b)===0)return this.subModes[b];return null},this.$tryMode=function(a,b,c,d){var e=this.$getMode(a);return e?e.getFoldWidget(b,c,d):""},this.getFoldWidget=function(a,b,c){return this.$tryMode(a.getState(c-1),a,b,c)||this.$tryMode(a.getState(c),a,b,c)||this.defaultMode.getFoldWidget(a,b,c)},this.getFoldWidgetRange=function(a,b,c){var d=this.$getMode(a.getState(c-1));if(!d||!d.getFoldWidget(a,b,c))d=this.$getMode(a.getState(c));if(!d||!d.getFoldWidget(a,b,c))d=this.defaultMode;return d.getFoldWidgetRange(a,b,c)}}.call(f.prototype)}),define("ace/mode/markdown_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules","ace/mode/html_highlight_rules","ace/mode/css_highlight_rules"],function(a,b,c){function j(a,b){return{token:"support.function",regex:"^```"+a+"\\s*$",next:b+"start"}}"use strict";var d=a("../lib/oop"),e=a("./text_highlight_rules").TextHighlightRules,f=a("./javascript_highlight_rules").JavaScriptHighlightRules,g=a("./xml_highlight_rules").XmlHighlightRules,h=a("./html_highlight_rules").HtmlHighlightRules,i=a("./css_highlight_rules").CssHighlightRules,k=function(){this.$rules={start:[{token:"empty_line",regex:"^$"},{token:"support.function",regex:"(`+)([^\\r]*?[^`])(\\1)"},{token:"support.function",regex:"^[ ]{4}.+"},{token:"markup.heading.1",regex:"^=+(?=\\s*$)"},{token:"markup.heading.1",regex:"^\\-+(?=\\s*$)"},{token:function(a){return"markup.heading."+a.length},regex:"^#{1,6}"},j("javascript","js-"),j("xml","xml-"),j("html","html-"),j("css","css-"),{token:"support.function",regex:"^```[a-zA-Z]+\\s*$",next:"githubblock"},{token:"string",regex:"^>[ ].+$",next:"blockquote"},{token:["text","constant","text","url","string","text"],regex:'^([ ]{0,3}\\[)([^\\]]+)(\\]:\\s*)([^ ]+)(\\s*(?:["][^"]+["])?\\s*)$'},{token:["text","string","text","constant","text"],regex:"(\\[)((?:[[^\\]]*\\]|[^\\[\\]])*)(\\][ ]?(?:\\n[ ]*)?\\[)(.*?)(\\])"},{token:["text","string","text","markup.underline","string","text"],regex:'(\\[)(\\[[^\\]]*\\]|[^\\[\\]]*)(\\]\\([ \\t]*)(<?(?:(?:[^\\(]*?\\([^\\)]*?\\)\\S*?)|(?:.*?))>?)((?:[ \t]*"(?:.*?)"[ \\t]*)?)(\\))'},{token:"constant",regex:"^[ ]{0,2}(?:[ ]?\\*[ ]?){3,}\\s*$"},{token:"constant",regex:"^[ ]{0,2}(?:[ ]?\\-[ ]?){3,}\\s*$"},{token:"constant",regex:"^[ ]{0,2}(?:[ ]?\\_[ ]?){3,}\\s*$"},{token:"markup.list",regex:"^\\s{0,3}(?:[*+-]|\\d+\\.)\\s+",next:"listblock"},{token:"string",regex:"([*]{2}|[_]{2}(?=\\S))([^\\r]*?\\S[*_]*)(\\1)"},{token:"string",regex:"([*]|[_](?=\\S))([^\\r]*?\\S[*_]*)(\\1)"},{token:["text","url","text"],regex:"(<)((?:https?|ftp|dict):[^'\">\\s]+|(?:mailto:)?[-.\\w]+\\@[-a-z0-9]+(?:\\.[-a-z0-9]+)*\\.[a-z]+)(>)"},{token:"text",regex:"[^\\*_%$`\\[#<>]+"}],listblock:[{token:"empty_line",regex:"^$",next:"start"},{token:"markup.list",regex:".+"}],blockquote:[{token:"empty_line",regex:"^\\s*$",next:"start"},{token:"string",regex:".+"}],githubblock:[{token:"support.function",regex:"^```",next:"start"},{token:"support.function",regex:".+"}]},this.embedRules(f,"js-",[{token:"support.function",regex:"^```",next:"start"}]),this.embedRules(h,"html-",[{token:"support.function",regex:"^```",next:"start"}]),this.embedRules(i,"css-",[{token:"support.function",regex:"^```",next:"start"}]),this.embedRules(g,"xml-",[{token:"support.function",regex:"^```",next:"start"}])};d.inherits(k,e),b.MarkdownHighlightRules=k}),function(){window.require(["ace/ace"],function(a){window.ace||(window.ace={});for(var b in a)a.hasOwnProperty(b)&&(ace[b]=a[b])})}() \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-ocaml-uncompressed.js b/apps/files_texteditor/js/aceeditor/mode-ocaml-uncompressed.js
new file mode 100755
index 00000000000..b91107dea60
--- /dev/null
+++ b/apps/files_texteditor/js/aceeditor/mode-ocaml-uncompressed.js
@@ -0,0 +1,549 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Sergi Mansilla <sergi AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/ocaml', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/ocaml_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextMode = require("./text").Mode;
+var Tokenizer = require("../tokenizer").Tokenizer;
+var OcamlHighlightRules = require("./ocaml_highlight_rules").OcamlHighlightRules;
+var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
+var Range = require("../range").Range;
+
+var Mode = function() {
+ this.$tokenizer = new Tokenizer(new OcamlHighlightRules().getRules());
+ this.$outdent = new MatchingBraceOutdent();
+};
+oop.inherits(Mode, TextMode);
+
+var indenter = /(?:[({[=:]|[-=]>|\b(?:else|try|with))\s*$/;
+
+(function() {
+
+ this.toggleCommentLines = function(state, doc, startRow, endRow) {
+ var i, line;
+ var outdent = true;
+ var re = /^\s*\(\*(.*)\*\)/;
+
+ for (i=startRow; i<= endRow; i++) {
+ if (!re.test(doc.getLine(i))) {
+ outdent = false;
+ break;
+ }
+ }
+
+ var range = new Range(0, 0, 0, 0);
+ for (i=startRow; i<= endRow; i++) {
+ line = doc.getLine(i);
+ range.start.row = i;
+ range.end.row = i;
+ range.end.column = line.length;
+
+ doc.replace(range, outdent ? line.match(re)[1] : "(*" + line + "*)");
+ }
+ };
+
+ this.getNextLineIndent = function(state, line, tab) {
+ var indent = this.$getIndent(line);
+ var tokens = this.$tokenizer.getLineTokens(line, state).tokens;
+
+ if (!(tokens.length && tokens[tokens.length - 1].type === 'comment') &&
+ state === 'start' && indenter.test(line))
+ indent += tab;
+ return indent;
+ };
+
+ this.checkOutdent = function(state, line, input) {
+ return this.$outdent.checkOutdent(line, input);
+ };
+
+ this.autoOutdent = function(state, doc, row) {
+ this.$outdent.autoOutdent(doc, row);
+ };
+
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+});
+
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Sergi Mansilla <sergi AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK *****
+ *
+ */
+
+define('ace/mode/ocaml_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var lang = require("../lib/lang");
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var OcamlHighlightRules = function() {
+
+ var keywords = lang.arrayToMap((
+ "and|as|assert|begin|class|constraint|do|done|downto|else|end|" +
+ "exception|external|for|fun|function|functor|if|in|include|" +
+ "inherit|initializer|lazy|let|match|method|module|mutable|new|" +
+ "object|of|open|or|private|rec|sig|struct|then|to|try|type|val|" +
+ "virtual|when|while|with").split("|")
+ );
+
+ var builtinConstants = lang.arrayToMap(
+ ("true|false").split("|")
+ );
+
+ var builtinFunctions = lang.arrayToMap((
+ "abs|abs_big_int|abs_float|abs_num|abstract_tag|accept|access|acos|add|" +
+ "add_available_units|add_big_int|add_buffer|add_channel|add_char|" +
+ "add_initializer|add_int_big_int|add_interfaces|add_num|add_string|" +
+ "add_substitute|add_substring|alarm|allocated_bytes|allow_only|" +
+ "allow_unsafe_modules|always|append|appname_get|appname_set|" +
+ "approx_num_exp|approx_num_fix|arg|argv|arith_status|array|" +
+ "array1_of_genarray|array2_of_genarray|array3_of_genarray|asin|asr|" +
+ "assoc|assq|at_exit|atan|atan2|auto_synchronize|background|basename|" +
+ "beginning_of_input|big_int_of_int|big_int_of_num|big_int_of_string|bind|" +
+ "bind_class|bind_tag|bits|bits_of_float|black|blit|blit_image|blue|bool|" +
+ "bool_of_string|bounded_full_split|bounded_split|bounded_split_delim|" +
+ "bprintf|break|broadcast|bscanf|button_down|c_layout|capitalize|cardinal|" +
+ "cardinal|catch|catch_break|ceil|ceiling_num|channel|char|char_of_int|" +
+ "chdir|check|check_suffix|chmod|choose|chop_extension|chop_suffix|chown|" +
+ "chown|chr|chroot|classify_float|clear|clear_available_units|" +
+ "clear_close_on_exec|clear_graph|clear_nonblock|clear_parser|" +
+ "close|close|closeTk|close_box|close_graph|close_in|close_in_noerr|" +
+ "close_out|close_out_noerr|close_process|close_process|" +
+ "close_process_full|close_process_in|close_process_out|close_subwindow|" +
+ "close_tag|close_tbox|closedir|closedir|closure_tag|code|combine|" +
+ "combine|combine|command|compact|compare|compare_big_int|compare_num|" +
+ "complex32|complex64|concat|conj|connect|contains|contains_from|contents|" +
+ "copy|cos|cosh|count|count|counters|create|create_alarm|create_image|" +
+ "create_matrix|create_matrix|create_matrix|create_object|" +
+ "create_object_and_run_initializers|create_object_opt|create_process|" +
+ "create_process|create_process_env|create_process_env|create_table|" +
+ "current|current_dir_name|current_point|current_x|current_y|curveto|" +
+ "custom_tag|cyan|data_size|decr|decr_num|default_available_units|delay|" +
+ "delete_alarm|descr_of_in_channel|descr_of_out_channel|destroy|diff|dim|" +
+ "dim1|dim2|dim3|dims|dirname|display_mode|div|div_big_int|div_num|" +
+ "double_array_tag|double_tag|draw_arc|draw_char|draw_circle|draw_ellipse|" +
+ "draw_image|draw_poly|draw_poly_line|draw_rect|draw_segments|draw_string|" +
+ "dummy_pos|dummy_table|dump_image|dup|dup2|elements|empty|end_of_input|" +
+ "environment|eprintf|epsilon_float|eq_big_int|eq_num|equal|err_formatter|" +
+ "error_message|escaped|establish_server|executable_name|execv|execve|execvp|" +
+ "execvpe|exists|exists2|exit|exp|failwith|fast_sort|fchmod|fchown|field|" +
+ "file|file_exists|fill|fill_arc|fill_circle|fill_ellipse|fill_poly|fill_rect|" +
+ "filter|final_tag|finalise|find|find_all|first_chars|firstkey|flatten|" +
+ "float|float32|float64|float_of_big_int|float_of_bits|float_of_int|" +
+ "float_of_num|float_of_string|floor|floor_num|flush|flush_all|flush_input|" +
+ "flush_str_formatter|fold|fold_left|fold_left2|fold_right|fold_right2|" +
+ "for_all|for_all2|force|force_newline|force_val|foreground|fork|" +
+ "format_of_string|formatter_of_buffer|formatter_of_out_channel|" +
+ "fortran_layout|forward_tag|fprintf|frexp|from|from_channel|from_file|" +
+ "from_file_bin|from_function|from_string|fscanf|fst|fstat|ftruncate|" +
+ "full_init|full_major|full_split|gcd_big_int|ge_big_int|ge_num|" +
+ "genarray_of_array1|genarray_of_array2|genarray_of_array3|get|" +
+ "get_all_formatter_output_functions|get_approx_printing|get_copy|" +
+ "get_ellipsis_text|get_error_when_null_denominator|get_floating_precision|" +
+ "get_formatter_output_functions|get_formatter_tag_functions|get_image|" +
+ "get_margin|get_mark_tags|get_max_boxes|get_max_indent|get_method|" +
+ "get_method_label|get_normalize_ratio|get_normalize_ratio_when_printing|" +
+ "get_print_tags|get_state|get_variable|getcwd|getegid|getegid|getenv|" +
+ "getenv|getenv|geteuid|geteuid|getgid|getgid|getgrgid|getgrgid|getgrnam|" +
+ "getgrnam|getgroups|gethostbyaddr|gethostbyname|gethostname|getitimer|" +
+ "getlogin|getpeername|getpid|getppid|getprotobyname|getprotobynumber|" +
+ "getpwnam|getpwuid|getservbyname|getservbyport|getsockname|getsockopt|" +
+ "getsockopt_float|getsockopt_int|getsockopt_optint|gettimeofday|getuid|" +
+ "global_replace|global_substitute|gmtime|green|grid|group_beginning|" +
+ "group_end|gt_big_int|gt_num|guard|handle_unix_error|hash|hash_param|" +
+ "hd|header_size|i|id|ignore|in_channel_length|in_channel_of_descr|incr|" +
+ "incr_num|index|index_from|inet_addr_any|inet_addr_of_string|infinity|" +
+ "infix_tag|init|init_class|input|input_binary_int|input_byte|input_char|" +
+ "input_line|input_value|int|int16_signed|int16_unsigned|int32|int64|" +
+ "int8_signed|int8_unsigned|int_of_big_int|int_of_char|int_of_float|" +
+ "int_of_num|int_of_string|integer_num|inter|interactive|inv|invalid_arg|" +
+ "is_block|is_empty|is_implicit|is_int|is_int_big_int|is_integer_num|" +
+ "is_relative|iter|iter2|iteri|join|junk|key_pressed|kill|kind|kprintf|" +
+ "kscanf|land|last_chars|layout|lazy_from_fun|lazy_from_val|lazy_is_val|" +
+ "lazy_tag|ldexp|le_big_int|le_num|length|lexeme|lexeme_char|lexeme_end|" +
+ "lexeme_end_p|lexeme_start|lexeme_start_p|lineto|link|list|listen|lnot|" +
+ "loadfile|loadfile_private|localtime|lock|lockf|log|log10|logand|lognot|" +
+ "logor|logxor|lor|lower_window|lowercase|lseek|lsl|lsr|lstat|lt_big_int|" +
+ "lt_num|lxor|magenta|magic|mainLoop|major|major_slice|make|make_formatter|" +
+ "make_image|make_lexer|make_matrix|make_self_init|map|map2|map_file|mapi|" +
+ "marshal|match_beginning|match_end|matched_group|matched_string|max|" +
+ "max_array_length|max_big_int|max_elt|max_float|max_int|max_num|" +
+ "max_string_length|mem|mem_assoc|mem_assq|memq|merge|min|min_big_int|" +
+ "min_elt|min_float|min_int|min_num|minor|minus_big_int|minus_num|" +
+ "minus_one|mkdir|mkfifo|mktime|mod|mod_big_int|mod_float|mod_num|modf|" +
+ "mouse_pos|moveto|mul|mult_big_int|mult_int_big_int|mult_num|nan|narrow|" +
+ "nat_of_num|nativeint|neg|neg_infinity|new_block|new_channel|new_method|" +
+ "new_variable|next|nextkey|nice|nice|no_scan_tag|norm|norm2|not|npeek|" +
+ "nth|nth_dim|num_digits_big_int|num_dims|num_of_big_int|num_of_int|" +
+ "num_of_nat|num_of_ratio|num_of_string|O|obj|object_tag|ocaml_version|" +
+ "of_array|of_channel|of_float|of_int|of_int32|of_list|of_nativeint|" +
+ "of_string|one|openTk|open_box|open_connection|open_graph|open_hbox|" +
+ "open_hovbox|open_hvbox|open_in|open_in_bin|open_in_gen|open_out|" +
+ "open_out_bin|open_out_gen|open_process|open_process_full|open_process_in|" +
+ "open_process_out|open_subwindow|open_tag|open_tbox|open_temp_file|" +
+ "open_vbox|opendbm|opendir|openfile|or|os_type|out_channel_length|" +
+ "out_channel_of_descr|output|output_binary_int|output_buffer|output_byte|" +
+ "output_char|output_string|output_value|over_max_boxes|pack|params|" +
+ "parent_dir_name|parse|parse_argv|partition|pause|peek|pipe|pixels|" +
+ "place|plot|plots|point_color|polar|poll|pop|pos_in|pos_out|pow|" +
+ "power_big_int_positive_big_int|power_big_int_positive_int|" +
+ "power_int_positive_big_int|power_int_positive_int|power_num|" +
+ "pp_close_box|pp_close_tag|pp_close_tbox|pp_force_newline|" +
+ "pp_get_all_formatter_output_functions|pp_get_ellipsis_text|" +
+ "pp_get_formatter_output_functions|pp_get_formatter_tag_functions|" +
+ "pp_get_margin|pp_get_mark_tags|pp_get_max_boxes|pp_get_max_indent|" +
+ "pp_get_print_tags|pp_open_box|pp_open_hbox|pp_open_hovbox|pp_open_hvbox|" +
+ "pp_open_tag|pp_open_tbox|pp_open_vbox|pp_over_max_boxes|pp_print_as|" +
+ "pp_print_bool|pp_print_break|pp_print_char|pp_print_cut|pp_print_float|" +
+ "pp_print_flush|pp_print_if_newline|pp_print_int|pp_print_newline|" +
+ "pp_print_space|pp_print_string|pp_print_tab|pp_print_tbreak|" +
+ "pp_set_all_formatter_output_functions|pp_set_ellipsis_text|" +
+ "pp_set_formatter_out_channel|pp_set_formatter_output_functions|" +
+ "pp_set_formatter_tag_functions|pp_set_margin|pp_set_mark_tags|" +
+ "pp_set_max_boxes|pp_set_max_indent|pp_set_print_tags|pp_set_tab|" +
+ "pp_set_tags|pred|pred_big_int|pred_num|prerr_char|prerr_endline|" +
+ "prerr_float|prerr_int|prerr_newline|prerr_string|print|print_as|" +
+ "print_bool|print_break|print_char|print_cut|print_endline|print_float|" +
+ "print_flush|print_if_newline|print_int|print_newline|print_space|" +
+ "print_stat|print_string|print_tab|print_tbreak|printf|prohibit|" +
+ "public_method_label|push|putenv|quo_num|quomod_big_int|quote|raise|" +
+ "raise_window|ratio_of_num|rcontains_from|read|read_float|read_int|" +
+ "read_key|read_line|readdir|readdir|readlink|really_input|receive|recv|" +
+ "recvfrom|red|ref|regexp|regexp_case_fold|regexp_string|" +
+ "regexp_string_case_fold|register|register_exception|rem|remember_mode|" +
+ "remove|remove_assoc|remove_assq|rename|replace|replace_first|" +
+ "replace_matched|repr|reset|reshape|reshape_1|reshape_2|reshape_3|rev|" +
+ "rev_append|rev_map|rev_map2|rewinddir|rgb|rhs_end|rhs_end_pos|rhs_start|" +
+ "rhs_start_pos|rindex|rindex_from|rlineto|rmdir|rmoveto|round_num|" +
+ "run_initializers|run_initializers_opt|scanf|search_backward|" +
+ "search_forward|seek_in|seek_out|select|self|self_init|send|sendto|set|" +
+ "set_all_formatter_output_functions|set_approx_printing|" +
+ "set_binary_mode_in|set_binary_mode_out|set_close_on_exec|" +
+ "set_close_on_exec|set_color|set_ellipsis_text|" +
+ "set_error_when_null_denominator|set_field|set_floating_precision|" +
+ "set_font|set_formatter_out_channel|set_formatter_output_functions|" +
+ "set_formatter_tag_functions|set_line_width|set_margin|set_mark_tags|" +
+ "set_max_boxes|set_max_indent|set_method|set_nonblock|set_nonblock|" +
+ "set_normalize_ratio|set_normalize_ratio_when_printing|set_print_tags|" +
+ "set_signal|set_state|set_tab|set_tag|set_tags|set_text_size|" +
+ "set_window_title|setgid|setgid|setitimer|setitimer|setsid|setsid|" +
+ "setsockopt|setsockopt|setsockopt_float|setsockopt_float|setsockopt_int|" +
+ "setsockopt_int|setsockopt_optint|setsockopt_optint|setuid|setuid|" +
+ "shift_left|shift_left|shift_left|shift_right|shift_right|shift_right|" +
+ "shift_right_logical|shift_right_logical|shift_right_logical|show_buckets|" +
+ "shutdown|shutdown|shutdown_connection|shutdown_connection|sigabrt|" +
+ "sigalrm|sigchld|sigcont|sigfpe|sighup|sigill|sigint|sigkill|sign_big_int|" +
+ "sign_num|signal|signal|sigpending|sigpending|sigpipe|sigprocmask|" +
+ "sigprocmask|sigprof|sigquit|sigsegv|sigstop|sigsuspend|sigsuspend|" +
+ "sigterm|sigtstp|sigttin|sigttou|sigusr1|sigusr2|sigvtalrm|sin|singleton|" +
+ "sinh|size|size|size_x|size_y|sleep|sleep|sleep|slice_left|slice_left|" +
+ "slice_left_1|slice_left_2|slice_right|slice_right|slice_right_1|" +
+ "slice_right_2|snd|socket|socket|socket|socketpair|socketpair|sort|sound|" +
+ "split|split_delim|sprintf|sprintf|sqrt|sqrt|sqrt_big_int|square_big_int|" +
+ "square_num|sscanf|stable_sort|stable_sort|stable_sort|stable_sort|stable_sort|" +
+ "stable_sort|stat|stat|stat|stat|stat|stats|stats|std_formatter|stdbuf|" +
+ "stderr|stderr|stderr|stdib|stdin|stdin|stdin|stdout|stdout|stdout|" +
+ "str_formatter|string|string_after|string_before|string_match|" +
+ "string_of_big_int|string_of_bool|string_of_float|string_of_format|" +
+ "string_of_inet_addr|string_of_inet_addr|string_of_int|string_of_num|" +
+ "string_partial_match|string_tag|sub|sub|sub_big_int|sub_left|sub_num|" +
+ "sub_right|subset|subset|substitute_first|substring|succ|succ|" +
+ "succ|succ|succ_big_int|succ_num|symbol_end|symbol_end_pos|symbol_start|" +
+ "symbol_start_pos|symlink|symlink|sync|synchronize|system|system|system|" +
+ "tag|take|tan|tanh|tcdrain|tcdrain|tcflow|tcflow|tcflush|tcflush|" +
+ "tcgetattr|tcgetattr|tcsendbreak|tcsendbreak|tcsetattr|tcsetattr|" +
+ "temp_file|text_size|time|time|time|timed_read|timed_write|times|times|" +
+ "tl|tl|tl|to_buffer|to_channel|to_float|to_hex|to_int|to_int32|to_list|" +
+ "to_list|to_list|to_nativeint|to_string|to_string|to_string|to_string|" +
+ "to_string|top|top|total_size|transfer|transp|truncate|truncate|truncate|" +
+ "truncate|truncate|truncate|try_lock|umask|umask|uncapitalize|uncapitalize|" +
+ "uncapitalize|union|union|unit_big_int|unlink|unlink|unlock|unmarshal|" +
+ "unsafe_blit|unsafe_fill|unsafe_get|unsafe_get|unsafe_set|unsafe_set|" +
+ "update|uppercase|uppercase|uppercase|uppercase|usage|utimes|utimes|wait|" +
+ "wait|wait|wait|wait_next_event|wait_pid|wait_read|wait_signal|" +
+ "wait_timed_read|wait_timed_write|wait_write|waitpid|white|" +
+ "widen|window_id|word_size|wrap|wrap_abort|write|yellow|yield|zero|zero_big_int|" +
+
+ "Arg|Arith_status|Array|Array1|Array2|Array3|ArrayLabels|Big_int|Bigarray|" +
+ "Buffer|Callback|CamlinternalOO|Char|Complex|Condition|Dbm|Digest|Dynlink|" +
+ "Event|Filename|Format|Gc|Genarray|Genlex|Graphics|GraphicsX11|Hashtbl|" +
+ "Int32|Int64|LargeFile|Lazy|Lexing|List|ListLabels|Make|Map|Marshal|" +
+ "MoreLabels|Mutex|Nativeint|Num|Obj|Oo|Parsing|Pervasives|Printexc|" +
+ "Printf|Queue|Random|Scanf|Scanning|Set|Sort|Stack|State|StdLabels|Str|" +
+ "Stream|String|StringLabels|Sys|Thread|ThreadUnix|Tk|Unix|UnixLabels|Weak"
+ ).split("|"));
+
+ var decimalInteger = "(?:(?:[1-9]\\d*)|(?:0))";
+ var octInteger = "(?:0[oO]?[0-7]+)";
+ var hexInteger = "(?:0[xX][\\dA-Fa-f]+)";
+ var binInteger = "(?:0[bB][01]+)";
+ var integer = "(?:" + decimalInteger + "|" + octInteger + "|" + hexInteger + "|" + binInteger + ")";
+
+ var exponent = "(?:[eE][+-]?\\d+)";
+ var fraction = "(?:\\.\\d+)";
+ var intPart = "(?:\\d+)";
+ var pointFloat = "(?:(?:" + intPart + "?" + fraction + ")|(?:" + intPart + "\\.))";
+ var exponentFloat = "(?:(?:" + pointFloat + "|" + intPart + ")" + exponent + ")";
+ var floatNumber = "(?:" + exponentFloat + "|" + pointFloat + ")";
+
+ this.$rules = {
+ "start" : [
+ {
+ token : "comment",
+ regex : '\\(\\*.*?\\*\\)\\s*?$'
+ },
+ {
+ token : "comment",
+ merge : true,
+ regex : '\\(\\*.*',
+ next : "comment"
+ },
+ {
+ token : "string", // single line
+ regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
+ },
+ {
+ token : "string", // single char
+ regex : "'.'"
+ },
+ {
+ token : "string", // " string
+ merge : true,
+ regex : '"',
+ next : "qstring"
+ },
+ {
+ token : "constant.numeric", // imaginary
+ regex : "(?:" + floatNumber + "|\\d+)[jJ]\\b"
+ },
+ {
+ token : "constant.numeric", // float
+ regex : floatNumber
+ },
+ {
+ token : "constant.numeric", // integer
+ regex : integer + "\\b"
+ },
+ {
+ token : function(value) {
+ if (keywords.hasOwnProperty(value))
+ return "keyword";
+ else if (builtinConstants.hasOwnProperty(value))
+ return "constant.language";
+ else if (builtinFunctions.hasOwnProperty(value))
+ return "support.function";
+ else
+ return "identifier";
+ },
+ regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
+ },
+ {
+ token : "keyword.operator",
+ regex : "\\+\\.|\\-\\.|\\*\\.|\\/\\.|#|;;|\\+|\\-|\\*|\\*\\*\\/|\\/\\/|%|<<|>>|&|\\||\\^|~|<|>|<=|=>|==|!=|<>|<-|="
+ },
+ {
+ token : "paren.lparen",
+ regex : "[[({]"
+ },
+ {
+ token : "paren.rparen",
+ regex : "[\\])}]"
+ },
+ {
+ token : "text",
+ regex : "\\s+"
+ }
+ ],
+ "comment" : [
+ {
+ token : "comment", // closing comment
+ regex : ".*?\\*\\)",
+ next : "start"
+ },
+ {
+ token : "comment", // comment spanning whole line
+ merge : true,
+ regex : ".+"
+ }
+ ],
+
+ "qstring" : [
+ {
+ token : "string",
+ regex : '"',
+ next : "start"
+ }, {
+ token : "string",
+ merge : true,
+ regex : '.+'
+ }
+ ]
+ };
+};
+
+oop.inherits(OcamlHighlightRules, TextHighlightRules);
+
+exports.OcamlHighlightRules = OcamlHighlightRules;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var Range = require("../range").Range;
+
+var MatchingBraceOutdent = function() {};
+
+(function() {
+
+ this.checkOutdent = function(line, input) {
+ if (! /^\s+$/.test(line))
+ return false;
+
+ return /^\s*\}/.test(input);
+ };
+
+ this.autoOutdent = function(doc, row) {
+ var line = doc.getLine(row);
+ var match = line.match(/^(\s*\})/);
+
+ if (!match) return 0;
+
+ var column = match[1].length;
+ var openBracePos = doc.findMatchingBracket({row: row, column: column});
+
+ if (!openBracePos || openBracePos.row == row) return 0;
+
+ var indent = this.$getIndent(doc.getLine(openBracePos.row));
+ doc.replace(new Range(row, 0, row, column-1), indent);
+ };
+
+ this.$getIndent = function(line) {
+ var match = line.match(/^(\s+)/);
+ if (match) {
+ return match[1];
+ }
+
+ return "";
+ };
+
+}).call(MatchingBraceOutdent.prototype);
+
+exports.MatchingBraceOutdent = MatchingBraceOutdent;
+});
+;
+ (function() {
+ window.require(["ace/ace"], function(a) {
+ if (!window.ace)
+ window.ace = {};
+ for (var key in a) if (a.hasOwnProperty(key))
+ ace[key] = a[key];
+ });
+ })();
+ \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-ocaml.js b/apps/files_texteditor/js/aceeditor/mode-ocaml.js
index 56585c0ee61..0e3e15f225c 100644
--- a/apps/files_texteditor/js/aceeditor/mode-ocaml.js
+++ b/apps/files_texteditor/js/aceeditor/mode-ocaml.js
@@ -1 +1 @@
-define("ace/mode/ocaml",["require","exports","module","pilot/oop","ace/mode/text","ace/tokenizer","ace/mode/ocaml_highlight_rules","ace/mode/matching_brace_outdent","ace/range"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/text").Mode,f=a("ace/tokenizer").Tokenizer,g=a("ace/mode/ocaml_highlight_rules").OcamlHighlightRules,h=a("ace/mode/matching_brace_outdent").MatchingBraceOutdent,i=a("ace/range").Range,j=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h};d.inherits(j,e);var k=/(?:[({[=:]|[-=]>|\b(?:else|try|with))\s*$/;(function(){this.toggleCommentLines=function(a,b,c,d){var e,f,g=!0,h=/^\s*\(\*(.*)\*\)/;for(e=c;e<=d;e++)if(!h.test(b.getLine(e))){g=!1;break}var j=new i(0,0,0,0);for(e=c;e<=d;e++)f=b.getLine(e),j.start.row=e,j.end.row=e,j.end.column=f.length,b.replace(j,g?f.match(h)[1]:"(*"+f+"*)")},this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=this.$tokenizer.getLineTokens(b,a).tokens;(!e.length||e[e.length-1].type!=="comment")&&a==="start"&&k.test(b)&&(d+=c);return d},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)}}).call(j.prototype),b.Mode=j}),define("ace/mode/ocaml_highlight_rules",["require","exports","module","pilot/oop","pilot/lang","ace/mode/text_highlight_rules"],function(a,b,c){var d=a("pilot/oop"),e=a("pilot/lang"),f=a("ace/mode/text_highlight_rules").TextHighlightRules,g=function(){var a=e.arrayToMap("and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|object|of|open|or|private|rec|sig|struct|then|to|try|type|val|virtual|when|while|with".split("|")),b=e.arrayToMap("true|false".split("|")),c=e.arrayToMap("abs|abs_big_int|abs_float|abs_num|abstract_tag|accept|access|acos|add|add_available_units|add_big_int|add_buffer|add_channel|add_char|add_initializer|add_int_big_int|add_interfaces|add_num|add_string|add_substitute|add_substring|alarm|allocated_bytes|allow_only|allow_unsafe_modules|always|append|appname_get|appname_set|approx_num_exp|approx_num_fix|arg|argv|arith_status|array|array1_of_genarray|array2_of_genarray|array3_of_genarray|asin|asr|assoc|assq|at_exit|atan|atan2|auto_synchronize|background|basename|beginning_of_input|big_int_of_int|big_int_of_num|big_int_of_string|bind|bind_class|bind_tag|bits|bits_of_float|black|blit|blit_image|blue|bool|bool_of_string|bounded_full_split|bounded_split|bounded_split_delim|bprintf|break|broadcast|bscanf|button_down|c_layout|capitalize|cardinal|cardinal|catch|catch_break|ceil|ceiling_num|channel|char|char_of_int|chdir|check|check_suffix|chmod|choose|chop_extension|chop_suffix|chown|chown|chr|chroot|classify_float|clear|clear_available_units|clear_close_on_exec|clear_graph|clear_nonblock|clear_parser|close|close|closeTk|close_box|close_graph|close_in|close_in_noerr|close_out|close_out_noerr|close_process|close_process|close_process_full|close_process_in|close_process_out|close_subwindow|close_tag|close_tbox|closedir|closedir|closure_tag|code|combine|combine|combine|command|compact|compare|compare_big_int|compare_num|complex32|complex64|concat|conj|connect|contains|contains_from|contents|copy|cos|cosh|count|count|counters|create|create_alarm|create_image|create_matrix|create_matrix|create_matrix|create_object|create_object_and_run_initializers|create_object_opt|create_process|create_process|create_process_env|create_process_env|create_table|current|current_dir_name|current_point|current_x|current_y|curveto|custom_tag|cyan|data_size|decr|decr_num|default_available_units|delay|delete_alarm|descr_of_in_channel|descr_of_out_channel|destroy|diff|dim|dim1|dim2|dim3|dims|dirname|display_mode|div|div_big_int|div_num|double_array_tag|double_tag|draw_arc|draw_char|draw_circle|draw_ellipse|draw_image|draw_poly|draw_poly_line|draw_rect|draw_segments|draw_string|dummy_pos|dummy_table|dump_image|dup|dup2|elements|empty|end_of_input|environment|eprintf|epsilon_float|eq_big_int|eq_num|equal|err_formatter|error_message|escaped|establish_server|executable_name|execv|execve|execvp|execvpe|exists|exists2|exit|exp|failwith|fast_sort|fchmod|fchown|field|file|file_exists|fill|fill_arc|fill_circle|fill_ellipse|fill_poly|fill_rect|filter|final_tag|finalise|find|find_all|first_chars|firstkey|flatten|float|float32|float64|float_of_big_int|float_of_bits|float_of_int|float_of_num|float_of_string|floor|floor_num|flush|flush_all|flush_input|flush_str_formatter|fold|fold_left|fold_left2|fold_right|fold_right2|for_all|for_all2|force|force_newline|force_val|foreground|fork|format_of_string|formatter_of_buffer|formatter_of_out_channel|fortran_layout|forward_tag|fprintf|frexp|from|from_channel|from_file|from_file_bin|from_function|from_string|fscanf|fst|fstat|ftruncate|full_init|full_major|full_split|gcd_big_int|ge_big_int|ge_num|genarray_of_array1|genarray_of_array2|genarray_of_array3|get|get_all_formatter_output_functions|get_approx_printing|get_copy|get_ellipsis_text|get_error_when_null_denominator|get_floating_precision|get_formatter_output_functions|get_formatter_tag_functions|get_image|get_margin|get_mark_tags|get_max_boxes|get_max_indent|get_method|get_method_label|get_normalize_ratio|get_normalize_ratio_when_printing|get_print_tags|get_state|get_variable|getcwd|getegid|getegid|getenv|getenv|getenv|geteuid|geteuid|getgid|getgid|getgrgid|getgrgid|getgrnam|getgrnam|getgroups|gethostbyaddr|gethostbyname|gethostname|getitimer|getlogin|getpeername|getpid|getppid|getprotobyname|getprotobynumber|getpwnam|getpwuid|getservbyname|getservbyport|getsockname|getsockopt|getsockopt_float|getsockopt_int|getsockopt_optint|gettimeofday|getuid|global_replace|global_substitute|gmtime|green|grid|group_beginning|group_end|gt_big_int|gt_num|guard|handle_unix_error|hash|hash_param|hd|header_size|i|id|ignore|in_channel_length|in_channel_of_descr|incr|incr_num|index|index_from|inet_addr_any|inet_addr_of_string|infinity|infix_tag|init|init_class|input|input_binary_int|input_byte|input_char|input_line|input_value|int|int16_signed|int16_unsigned|int32|int64|int8_signed|int8_unsigned|int_of_big_int|int_of_char|int_of_float|int_of_num|int_of_string|integer_num|inter|interactive|inv|invalid_arg|is_block|is_empty|is_implicit|is_int|is_int_big_int|is_integer_num|is_relative|iter|iter2|iteri|join|junk|key_pressed|kill|kind|kprintf|kscanf|land|last_chars|layout|lazy_from_fun|lazy_from_val|lazy_is_val|lazy_tag|ldexp|le_big_int|le_num|length|lexeme|lexeme_char|lexeme_end|lexeme_end_p|lexeme_start|lexeme_start_p|lineto|link|list|listen|lnot|loadfile|loadfile_private|localtime|lock|lockf|log|log10|logand|lognot|logor|logxor|lor|lower_window|lowercase|lseek|lsl|lsr|lstat|lt_big_int|lt_num|lxor|magenta|magic|mainLoop|major|major_slice|make|make_formatter|make_image|make_lexer|make_matrix|make_self_init|map|map2|map_file|mapi|marshal|match_beginning|match_end|matched_group|matched_string|max|max_array_length|max_big_int|max_elt|max_float|max_int|max_num|max_string_length|mem|mem_assoc|mem_assq|memq|merge|min|min_big_int|min_elt|min_float|min_int|min_num|minor|minus_big_int|minus_num|minus_one|mkdir|mkfifo|mktime|mod|mod_big_int|mod_float|mod_num|modf|mouse_pos|moveto|mul|mult_big_int|mult_int_big_int|mult_num|nan|narrow|nat_of_num|nativeint|neg|neg_infinity|new_block|new_channel|new_method|new_variable|next|nextkey|nice|nice|no_scan_tag|norm|norm2|not|npeek|nth|nth_dim|num_digits_big_int|num_dims|num_of_big_int|num_of_int|num_of_nat|num_of_ratio|num_of_string|O|obj|object_tag|ocaml_version|of_array|of_channel|of_float|of_int|of_int32|of_list|of_nativeint|of_string|one|openTk|open_box|open_connection|open_graph|open_hbox|open_hovbox|open_hvbox|open_in|open_in_bin|open_in_gen|open_out|open_out_bin|open_out_gen|open_process|open_process_full|open_process_in|open_process_out|open_subwindow|open_tag|open_tbox|open_temp_file|open_vbox|opendbm|opendir|openfile|or|os_type|out_channel_length|out_channel_of_descr|output|output_binary_int|output_buffer|output_byte|output_char|output_string|output_value|over_max_boxes|pack|params|parent_dir_name|parse|parse_argv|partition|pause|peek|pipe|pixels|place|plot|plots|point_color|polar|poll|pop|pos_in|pos_out|pow|power_big_int_positive_big_int|power_big_int_positive_int|power_int_positive_big_int|power_int_positive_int|power_num|pp_close_box|pp_close_tag|pp_close_tbox|pp_force_newline|pp_get_all_formatter_output_functions|pp_get_ellipsis_text|pp_get_formatter_output_functions|pp_get_formatter_tag_functions|pp_get_margin|pp_get_mark_tags|pp_get_max_boxes|pp_get_max_indent|pp_get_print_tags|pp_open_box|pp_open_hbox|pp_open_hovbox|pp_open_hvbox|pp_open_tag|pp_open_tbox|pp_open_vbox|pp_over_max_boxes|pp_print_as|pp_print_bool|pp_print_break|pp_print_char|pp_print_cut|pp_print_float|pp_print_flush|pp_print_if_newline|pp_print_int|pp_print_newline|pp_print_space|pp_print_string|pp_print_tab|pp_print_tbreak|pp_set_all_formatter_output_functions|pp_set_ellipsis_text|pp_set_formatter_out_channel|pp_set_formatter_output_functions|pp_set_formatter_tag_functions|pp_set_margin|pp_set_mark_tags|pp_set_max_boxes|pp_set_max_indent|pp_set_print_tags|pp_set_tab|pp_set_tags|pred|pred_big_int|pred_num|prerr_char|prerr_endline|prerr_float|prerr_int|prerr_newline|prerr_string|print|print_as|print_bool|print_break|print_char|print_cut|print_endline|print_float|print_flush|print_if_newline|print_int|print_newline|print_space|print_stat|print_string|print_tab|print_tbreak|printf|prohibit|public_method_label|push|putenv|quo_num|quomod_big_int|quote|raise|raise_window|ratio_of_num|rcontains_from|read|read_float|read_int|read_key|read_line|readdir|readdir|readlink|really_input|receive|recv|recvfrom|red|ref|regexp|regexp_case_fold|regexp_string|regexp_string_case_fold|register|register_exception|rem|remember_mode|remove|remove_assoc|remove_assq|rename|replace|replace_first|replace_matched|repr|reset|reshape|reshape_1|reshape_2|reshape_3|rev|rev_append|rev_map|rev_map2|rewinddir|rgb|rhs_end|rhs_end_pos|rhs_start|rhs_start_pos|rindex|rindex_from|rlineto|rmdir|rmoveto|round_num|run_initializers|run_initializers_opt|scanf|search_backward|search_forward|seek_in|seek_out|select|self|self_init|send|sendto|set|set_all_formatter_output_functions|set_approx_printing|set_binary_mode_in|set_binary_mode_out|set_close_on_exec|set_close_on_exec|set_color|set_ellipsis_text|set_error_when_null_denominator|set_field|set_floating_precision|set_font|set_formatter_out_channel|set_formatter_output_functions|set_formatter_tag_functions|set_line_width|set_margin|set_mark_tags|set_max_boxes|set_max_indent|set_method|set_nonblock|set_nonblock|set_normalize_ratio|set_normalize_ratio_when_printing|set_print_tags|set_signal|set_state|set_tab|set_tag|set_tags|set_text_size|set_window_title|setgid|setgid|setitimer|setitimer|setsid|setsid|setsockopt|setsockopt|setsockopt_float|setsockopt_float|setsockopt_int|setsockopt_int|setsockopt_optint|setsockopt_optint|setuid|setuid|shift_left|shift_left|shift_left|shift_right|shift_right|shift_right|shift_right_logical|shift_right_logical|shift_right_logical|show_buckets|shutdown|shutdown|shutdown_connection|shutdown_connection|sigabrt|sigalrm|sigchld|sigcont|sigfpe|sighup|sigill|sigint|sigkill|sign_big_int|sign_num|signal|signal|sigpending|sigpending|sigpipe|sigprocmask|sigprocmask|sigprof|sigquit|sigsegv|sigstop|sigsuspend|sigsuspend|sigterm|sigtstp|sigttin|sigttou|sigusr1|sigusr2|sigvtalrm|sin|singleton|sinh|size|size|size_x|size_y|sleep|sleep|sleep|slice_left|slice_left|slice_left_1|slice_left_2|slice_right|slice_right|slice_right_1|slice_right_2|snd|socket|socket|socket|socketpair|socketpair|sort|sound|split|split_delim|sprintf|sprintf|sqrt|sqrt|sqrt_big_int|square_big_int|square_num|sscanf|stable_sort|stable_sort|stable_sort|stable_sort|stable_sort|stable_sort|stat|stat|stat|stat|stat|stats|stats|std_formatter|stdbuf|stderr|stderr|stderr|stdib|stdin|stdin|stdin|stdout|stdout|stdout|str_formatter|string|string_after|string_before|string_match|string_of_big_int|string_of_bool|string_of_float|string_of_format|string_of_inet_addr|string_of_inet_addr|string_of_int|string_of_num|string_partial_match|string_tag|sub|sub|sub_big_int|sub_left|sub_num|sub_right|subset|subset|substitute_first|substring|succ|succ|succ|succ|succ_big_int|succ_num|symbol_end|symbol_end_pos|symbol_start|symbol_start_pos|symlink|symlink|sync|synchronize|system|system|system|tag|take|tan|tanh|tcdrain|tcdrain|tcflow|tcflow|tcflush|tcflush|tcgetattr|tcgetattr|tcsendbreak|tcsendbreak|tcsetattr|tcsetattr|temp_file|text_size|time|time|time|timed_read|timed_write|times|times|tl|tl|tl|to_buffer|to_channel|to_float|to_hex|to_int|to_int32|to_list|to_list|to_list|to_nativeint|to_string|to_string|to_string|to_string|to_string|top|top|total_size|transfer|transp|truncate|truncate|truncate|truncate|truncate|truncate|try_lock|umask|umask|uncapitalize|uncapitalize|uncapitalize|union|union|unit_big_int|unlink|unlink|unlock|unmarshal|unsafe_blit|unsafe_fill|unsafe_get|unsafe_get|unsafe_set|unsafe_set|update|uppercase|uppercase|uppercase|uppercase|usage|utimes|utimes|wait|wait|wait|wait|wait_next_event|wait_pid|wait_read|wait_signal|wait_timed_read|wait_timed_write|wait_write|waitpid|white|widen|window_id|word_size|wrap|wrap_abort|write|yellow|yield|zero|zero_big_int|Arg|Arith_status|Array|Array1|Array2|Array3|ArrayLabels|Big_int|Bigarray|Buffer|Callback|CamlinternalOO|Char|Complex|Condition|Dbm|Digest|Dynlink|Event|Filename|Format|Gc|Genarray|Genlex|Graphics|GraphicsX11|Hashtbl|Int32|Int64|LargeFile|Lazy|Lexing|List|ListLabels|Make|Map|Marshal|MoreLabels|Mutex|Nativeint|Num|Obj|Oo|Parsing|Pervasives|Printexc|Printf|Queue|Random|Scanf|Scanning|Set|Sort|Stack|State|StdLabels|Str|Stream|String|StringLabels|Sys|Thread|ThreadUnix|Tk|Unix|UnixLabels|Weak".split("|")),d="(?:(?:[1-9]\\d*)|(?:0))",f="(?:0[oO]?[0-7]+)",g="(?:0[xX][\\dA-Fa-f]+)",h="(?:0[bB][01]+)",i="(?:"+d+"|"+f+"|"+g+"|"+h+")",j="(?:[eE][+-]?\\d+)",k="(?:\\.\\d+)",l="(?:\\d+)",m="(?:(?:"+l+"?"+k+")|(?:"+l+"\\.))",n="(?:(?:"+m+"|"+l+")"+j+")",o="(?:"+n+"|"+m+")";this.$rules={start:[{token:"comment",regex:"\\(\\*.*?\\*\\)\\s*?$"},{token:"comment",merge:!0,regex:"\\(\\*.*",next:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"'.'"},{token:"string",merge:!0,regex:'"',next:"qstring"},{token:"constant.numeric",regex:"(?:"+o+"|\\d+)[jJ]\\b"},{token:"constant.numeric",regex:o},{token:"constant.numeric",regex:i+"\\b"},{token:function(d){return a.hasOwnProperty(d)?"keyword":b.hasOwnProperty(d)?"constant.language":c.hasOwnProperty(d)?"support.function":"identifier"},regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"\\+\\.|\\-\\.|\\*\\.|\\/\\.|#|;;|\\+|\\-|\\*|\\*\\*\\/|\\/\\/|%|<<|>>|&|\\||\\^|~|<|>|<=|=>|==|!=|<>|<-|="},{token:"lparen",regex:"[[({]"},{token:"rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:".*?\\*\\)",next:"start"},{token:"comment",merge:!0,regex:".+"}],qstring:[{token:"string",regex:'"',next:"start"},{token:"string",merge:!0,regex:".+"}]}};d.inherits(g,f),b.OcamlHighlightRules=g}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(a,b,c){var d=a("ace/range").Range,e=function(){};(function(){this.checkOutdent=function(a,b){return/^\s+$/.test(a)?/^\s*\}/.test(b):!1},this.autoOutdent=function(a,b){var c=a.getLine(b),e=c.match(/^(\s*\})/);if(!e)return 0;var f=e[1].length,g=a.findMatchingBracket({row:b,column:f});if(!g||g.row==b)return 0;var h=this.$getIndent(a.getLine(g.row));a.replace(new d(b,0,b,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""}}).call(e.prototype),b.MatchingBraceOutdent=e}) \ No newline at end of file
+define("ace/mode/ocaml",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/ocaml_highlight_rules","ace/mode/matching_brace_outdent","ace/range"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text").Mode,f=a("../tokenizer").Tokenizer,g=a("./ocaml_highlight_rules").OcamlHighlightRules,h=a("./matching_brace_outdent").MatchingBraceOutdent,i=a("../range").Range,j=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h};d.inherits(j,e);var k=/(?:[({[=:]|[-=]>|\b(?:else|try|with))\s*$/;((function(){this.toggleCommentLines=function(a,b,c,d){var e,f,g=!0,h=/^\s*\(\*(.*)\*\)/;for(e=c;e<=d;e++)if(!h.test(b.getLine(e))){g=!1;break}var j=new i(0,0,0,0);for(e=c;e<=d;e++)f=b.getLine(e),j.start.row=e,j.end.row=e,j.end.column=f.length,b.replace(j,g?f.match(h)[1]:"(*"+f+"*)")},this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=this.$tokenizer.getLineTokens(b,a).tokens;return(!e.length||e[e.length-1].type!=="comment")&&a==="start"&&k.test(b)&&(d+=c),d},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)}})).call(j.prototype),b.Mode=j}),define("ace/mode/ocaml_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("../lib/lang"),f=a("./text_highlight_rules").TextHighlightRules,g=function(){var a=e.arrayToMap("and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|object|of|open|or|private|rec|sig|struct|then|to|try|type|val|virtual|when|while|with".split("|")),b=e.arrayToMap("true|false".split("|")),c=e.arrayToMap("abs|abs_big_int|abs_float|abs_num|abstract_tag|accept|access|acos|add|add_available_units|add_big_int|add_buffer|add_channel|add_char|add_initializer|add_int_big_int|add_interfaces|add_num|add_string|add_substitute|add_substring|alarm|allocated_bytes|allow_only|allow_unsafe_modules|always|append|appname_get|appname_set|approx_num_exp|approx_num_fix|arg|argv|arith_status|array|array1_of_genarray|array2_of_genarray|array3_of_genarray|asin|asr|assoc|assq|at_exit|atan|atan2|auto_synchronize|background|basename|beginning_of_input|big_int_of_int|big_int_of_num|big_int_of_string|bind|bind_class|bind_tag|bits|bits_of_float|black|blit|blit_image|blue|bool|bool_of_string|bounded_full_split|bounded_split|bounded_split_delim|bprintf|break|broadcast|bscanf|button_down|c_layout|capitalize|cardinal|cardinal|catch|catch_break|ceil|ceiling_num|channel|char|char_of_int|chdir|check|check_suffix|chmod|choose|chop_extension|chop_suffix|chown|chown|chr|chroot|classify_float|clear|clear_available_units|clear_close_on_exec|clear_graph|clear_nonblock|clear_parser|close|close|closeTk|close_box|close_graph|close_in|close_in_noerr|close_out|close_out_noerr|close_process|close_process|close_process_full|close_process_in|close_process_out|close_subwindow|close_tag|close_tbox|closedir|closedir|closure_tag|code|combine|combine|combine|command|compact|compare|compare_big_int|compare_num|complex32|complex64|concat|conj|connect|contains|contains_from|contents|copy|cos|cosh|count|count|counters|create|create_alarm|create_image|create_matrix|create_matrix|create_matrix|create_object|create_object_and_run_initializers|create_object_opt|create_process|create_process|create_process_env|create_process_env|create_table|current|current_dir_name|current_point|current_x|current_y|curveto|custom_tag|cyan|data_size|decr|decr_num|default_available_units|delay|delete_alarm|descr_of_in_channel|descr_of_out_channel|destroy|diff|dim|dim1|dim2|dim3|dims|dirname|display_mode|div|div_big_int|div_num|double_array_tag|double_tag|draw_arc|draw_char|draw_circle|draw_ellipse|draw_image|draw_poly|draw_poly_line|draw_rect|draw_segments|draw_string|dummy_pos|dummy_table|dump_image|dup|dup2|elements|empty|end_of_input|environment|eprintf|epsilon_float|eq_big_int|eq_num|equal|err_formatter|error_message|escaped|establish_server|executable_name|execv|execve|execvp|execvpe|exists|exists2|exit|exp|failwith|fast_sort|fchmod|fchown|field|file|file_exists|fill|fill_arc|fill_circle|fill_ellipse|fill_poly|fill_rect|filter|final_tag|finalise|find|find_all|first_chars|firstkey|flatten|float|float32|float64|float_of_big_int|float_of_bits|float_of_int|float_of_num|float_of_string|floor|floor_num|flush|flush_all|flush_input|flush_str_formatter|fold|fold_left|fold_left2|fold_right|fold_right2|for_all|for_all2|force|force_newline|force_val|foreground|fork|format_of_string|formatter_of_buffer|formatter_of_out_channel|fortran_layout|forward_tag|fprintf|frexp|from|from_channel|from_file|from_file_bin|from_function|from_string|fscanf|fst|fstat|ftruncate|full_init|full_major|full_split|gcd_big_int|ge_big_int|ge_num|genarray_of_array1|genarray_of_array2|genarray_of_array3|get|get_all_formatter_output_functions|get_approx_printing|get_copy|get_ellipsis_text|get_error_when_null_denominator|get_floating_precision|get_formatter_output_functions|get_formatter_tag_functions|get_image|get_margin|get_mark_tags|get_max_boxes|get_max_indent|get_method|get_method_label|get_normalize_ratio|get_normalize_ratio_when_printing|get_print_tags|get_state|get_variable|getcwd|getegid|getegid|getenv|getenv|getenv|geteuid|geteuid|getgid|getgid|getgrgid|getgrgid|getgrnam|getgrnam|getgroups|gethostbyaddr|gethostbyname|gethostname|getitimer|getlogin|getpeername|getpid|getppid|getprotobyname|getprotobynumber|getpwnam|getpwuid|getservbyname|getservbyport|getsockname|getsockopt|getsockopt_float|getsockopt_int|getsockopt_optint|gettimeofday|getuid|global_replace|global_substitute|gmtime|green|grid|group_beginning|group_end|gt_big_int|gt_num|guard|handle_unix_error|hash|hash_param|hd|header_size|i|id|ignore|in_channel_length|in_channel_of_descr|incr|incr_num|index|index_from|inet_addr_any|inet_addr_of_string|infinity|infix_tag|init|init_class|input|input_binary_int|input_byte|input_char|input_line|input_value|int|int16_signed|int16_unsigned|int32|int64|int8_signed|int8_unsigned|int_of_big_int|int_of_char|int_of_float|int_of_num|int_of_string|integer_num|inter|interactive|inv|invalid_arg|is_block|is_empty|is_implicit|is_int|is_int_big_int|is_integer_num|is_relative|iter|iter2|iteri|join|junk|key_pressed|kill|kind|kprintf|kscanf|land|last_chars|layout|lazy_from_fun|lazy_from_val|lazy_is_val|lazy_tag|ldexp|le_big_int|le_num|length|lexeme|lexeme_char|lexeme_end|lexeme_end_p|lexeme_start|lexeme_start_p|lineto|link|list|listen|lnot|loadfile|loadfile_private|localtime|lock|lockf|log|log10|logand|lognot|logor|logxor|lor|lower_window|lowercase|lseek|lsl|lsr|lstat|lt_big_int|lt_num|lxor|magenta|magic|mainLoop|major|major_slice|make|make_formatter|make_image|make_lexer|make_matrix|make_self_init|map|map2|map_file|mapi|marshal|match_beginning|match_end|matched_group|matched_string|max|max_array_length|max_big_int|max_elt|max_float|max_int|max_num|max_string_length|mem|mem_assoc|mem_assq|memq|merge|min|min_big_int|min_elt|min_float|min_int|min_num|minor|minus_big_int|minus_num|minus_one|mkdir|mkfifo|mktime|mod|mod_big_int|mod_float|mod_num|modf|mouse_pos|moveto|mul|mult_big_int|mult_int_big_int|mult_num|nan|narrow|nat_of_num|nativeint|neg|neg_infinity|new_block|new_channel|new_method|new_variable|next|nextkey|nice|nice|no_scan_tag|norm|norm2|not|npeek|nth|nth_dim|num_digits_big_int|num_dims|num_of_big_int|num_of_int|num_of_nat|num_of_ratio|num_of_string|O|obj|object_tag|ocaml_version|of_array|of_channel|of_float|of_int|of_int32|of_list|of_nativeint|of_string|one|openTk|open_box|open_connection|open_graph|open_hbox|open_hovbox|open_hvbox|open_in|open_in_bin|open_in_gen|open_out|open_out_bin|open_out_gen|open_process|open_process_full|open_process_in|open_process_out|open_subwindow|open_tag|open_tbox|open_temp_file|open_vbox|opendbm|opendir|openfile|or|os_type|out_channel_length|out_channel_of_descr|output|output_binary_int|output_buffer|output_byte|output_char|output_string|output_value|over_max_boxes|pack|params|parent_dir_name|parse|parse_argv|partition|pause|peek|pipe|pixels|place|plot|plots|point_color|polar|poll|pop|pos_in|pos_out|pow|power_big_int_positive_big_int|power_big_int_positive_int|power_int_positive_big_int|power_int_positive_int|power_num|pp_close_box|pp_close_tag|pp_close_tbox|pp_force_newline|pp_get_all_formatter_output_functions|pp_get_ellipsis_text|pp_get_formatter_output_functions|pp_get_formatter_tag_functions|pp_get_margin|pp_get_mark_tags|pp_get_max_boxes|pp_get_max_indent|pp_get_print_tags|pp_open_box|pp_open_hbox|pp_open_hovbox|pp_open_hvbox|pp_open_tag|pp_open_tbox|pp_open_vbox|pp_over_max_boxes|pp_print_as|pp_print_bool|pp_print_break|pp_print_char|pp_print_cut|pp_print_float|pp_print_flush|pp_print_if_newline|pp_print_int|pp_print_newline|pp_print_space|pp_print_string|pp_print_tab|pp_print_tbreak|pp_set_all_formatter_output_functions|pp_set_ellipsis_text|pp_set_formatter_out_channel|pp_set_formatter_output_functions|pp_set_formatter_tag_functions|pp_set_margin|pp_set_mark_tags|pp_set_max_boxes|pp_set_max_indent|pp_set_print_tags|pp_set_tab|pp_set_tags|pred|pred_big_int|pred_num|prerr_char|prerr_endline|prerr_float|prerr_int|prerr_newline|prerr_string|print|print_as|print_bool|print_break|print_char|print_cut|print_endline|print_float|print_flush|print_if_newline|print_int|print_newline|print_space|print_stat|print_string|print_tab|print_tbreak|printf|prohibit|public_method_label|push|putenv|quo_num|quomod_big_int|quote|raise|raise_window|ratio_of_num|rcontains_from|read|read_float|read_int|read_key|read_line|readdir|readdir|readlink|really_input|receive|recv|recvfrom|red|ref|regexp|regexp_case_fold|regexp_string|regexp_string_case_fold|register|register_exception|rem|remember_mode|remove|remove_assoc|remove_assq|rename|replace|replace_first|replace_matched|repr|reset|reshape|reshape_1|reshape_2|reshape_3|rev|rev_append|rev_map|rev_map2|rewinddir|rgb|rhs_end|rhs_end_pos|rhs_start|rhs_start_pos|rindex|rindex_from|rlineto|rmdir|rmoveto|round_num|run_initializers|run_initializers_opt|scanf|search_backward|search_forward|seek_in|seek_out|select|self|self_init|send|sendto|set|set_all_formatter_output_functions|set_approx_printing|set_binary_mode_in|set_binary_mode_out|set_close_on_exec|set_close_on_exec|set_color|set_ellipsis_text|set_error_when_null_denominator|set_field|set_floating_precision|set_font|set_formatter_out_channel|set_formatter_output_functions|set_formatter_tag_functions|set_line_width|set_margin|set_mark_tags|set_max_boxes|set_max_indent|set_method|set_nonblock|set_nonblock|set_normalize_ratio|set_normalize_ratio_when_printing|set_print_tags|set_signal|set_state|set_tab|set_tag|set_tags|set_text_size|set_window_title|setgid|setgid|setitimer|setitimer|setsid|setsid|setsockopt|setsockopt|setsockopt_float|setsockopt_float|setsockopt_int|setsockopt_int|setsockopt_optint|setsockopt_optint|setuid|setuid|shift_left|shift_left|shift_left|shift_right|shift_right|shift_right|shift_right_logical|shift_right_logical|shift_right_logical|show_buckets|shutdown|shutdown|shutdown_connection|shutdown_connection|sigabrt|sigalrm|sigchld|sigcont|sigfpe|sighup|sigill|sigint|sigkill|sign_big_int|sign_num|signal|signal|sigpending|sigpending|sigpipe|sigprocmask|sigprocmask|sigprof|sigquit|sigsegv|sigstop|sigsuspend|sigsuspend|sigterm|sigtstp|sigttin|sigttou|sigusr1|sigusr2|sigvtalrm|sin|singleton|sinh|size|size|size_x|size_y|sleep|sleep|sleep|slice_left|slice_left|slice_left_1|slice_left_2|slice_right|slice_right|slice_right_1|slice_right_2|snd|socket|socket|socket|socketpair|socketpair|sort|sound|split|split_delim|sprintf|sprintf|sqrt|sqrt|sqrt_big_int|square_big_int|square_num|sscanf|stable_sort|stable_sort|stable_sort|stable_sort|stable_sort|stable_sort|stat|stat|stat|stat|stat|stats|stats|std_formatter|stdbuf|stderr|stderr|stderr|stdib|stdin|stdin|stdin|stdout|stdout|stdout|str_formatter|string|string_after|string_before|string_match|string_of_big_int|string_of_bool|string_of_float|string_of_format|string_of_inet_addr|string_of_inet_addr|string_of_int|string_of_num|string_partial_match|string_tag|sub|sub|sub_big_int|sub_left|sub_num|sub_right|subset|subset|substitute_first|substring|succ|succ|succ|succ|succ_big_int|succ_num|symbol_end|symbol_end_pos|symbol_start|symbol_start_pos|symlink|symlink|sync|synchronize|system|system|system|tag|take|tan|tanh|tcdrain|tcdrain|tcflow|tcflow|tcflush|tcflush|tcgetattr|tcgetattr|tcsendbreak|tcsendbreak|tcsetattr|tcsetattr|temp_file|text_size|time|time|time|timed_read|timed_write|times|times|tl|tl|tl|to_buffer|to_channel|to_float|to_hex|to_int|to_int32|to_list|to_list|to_list|to_nativeint|to_string|to_string|to_string|to_string|to_string|top|top|total_size|transfer|transp|truncate|truncate|truncate|truncate|truncate|truncate|try_lock|umask|umask|uncapitalize|uncapitalize|uncapitalize|union|union|unit_big_int|unlink|unlink|unlock|unmarshal|unsafe_blit|unsafe_fill|unsafe_get|unsafe_get|unsafe_set|unsafe_set|update|uppercase|uppercase|uppercase|uppercase|usage|utimes|utimes|wait|wait|wait|wait|wait_next_event|wait_pid|wait_read|wait_signal|wait_timed_read|wait_timed_write|wait_write|waitpid|white|widen|window_id|word_size|wrap|wrap_abort|write|yellow|yield|zero|zero_big_int|Arg|Arith_status|Array|Array1|Array2|Array3|ArrayLabels|Big_int|Bigarray|Buffer|Callback|CamlinternalOO|Char|Complex|Condition|Dbm|Digest|Dynlink|Event|Filename|Format|Gc|Genarray|Genlex|Graphics|GraphicsX11|Hashtbl|Int32|Int64|LargeFile|Lazy|Lexing|List|ListLabels|Make|Map|Marshal|MoreLabels|Mutex|Nativeint|Num|Obj|Oo|Parsing|Pervasives|Printexc|Printf|Queue|Random|Scanf|Scanning|Set|Sort|Stack|State|StdLabels|Str|Stream|String|StringLabels|Sys|Thread|ThreadUnix|Tk|Unix|UnixLabels|Weak".split("|")),d="(?:(?:[1-9]\\d*)|(?:0))",f="(?:0[oO]?[0-7]+)",g="(?:0[xX][\\dA-Fa-f]+)",h="(?:0[bB][01]+)",i="(?:"+d+"|"+f+"|"+g+"|"+h+")",j="(?:[eE][+-]?\\d+)",k="(?:\\.\\d+)",l="(?:\\d+)",m="(?:(?:"+l+"?"+k+")|(?:"+l+"\\.))",n="(?:(?:"+m+"|"+l+")"+j+")",o="(?:"+n+"|"+m+")";this.$rules={start:[{token:"comment",regex:"\\(\\*.*?\\*\\)\\s*?$"},{token:"comment",merge:!0,regex:"\\(\\*.*",next:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"'.'"},{token:"string",merge:!0,regex:'"',next:"qstring"},{token:"constant.numeric",regex:"(?:"+o+"|\\d+)[jJ]\\b"},{token:"constant.numeric",regex:o},{token:"constant.numeric",regex:i+"\\b"},{token:function(d){return a.hasOwnProperty(d)?"keyword":b.hasOwnProperty(d)?"constant.language":c.hasOwnProperty(d)?"support.function":"identifier"},regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"\\+\\.|\\-\\.|\\*\\.|\\/\\.|#|;;|\\+|\\-|\\*|\\*\\*\\/|\\/\\/|%|<<|>>|&|\\||\\^|~|<|>|<=|=>|==|!=|<>|<-|="},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:".*?\\*\\)",next:"start"},{token:"comment",merge:!0,regex:".+"}],qstring:[{token:"string",regex:'"',next:"start"},{token:"string",merge:!0,regex:".+"}]}};d.inherits(g,f),b.OcamlHighlightRules=g}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(a,b,c){"use strict";var d=a("../range").Range,e=function(){};((function(){this.checkOutdent=function(a,b){return/^\s+$/.test(a)?/^\s*\}/.test(b):!1},this.autoOutdent=function(a,b){var c=a.getLine(b),e=c.match(/^(\s*\})/);if(!e)return 0;var f=e[1].length,g=a.findMatchingBracket({row:b,column:f});if(!g||g.row==b)return 0;var h=this.$getIndent(a.getLine(g.row));a.replace(new d(b,0,b,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""}})).call(e.prototype),b.MatchingBraceOutdent=e}),function(){window.require(["ace/ace"],function(a){window.ace||(window.ace={});for(var b in a)a.hasOwnProperty(b)&&(ace[b]=a[b])})}() \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-perl-uncompressed.js b/apps/files_texteditor/js/aceeditor/mode-perl-uncompressed.js
new file mode 100755
index 00000000000..c8bf4c47eb5
--- /dev/null
+++ b/apps/files_texteditor/js/aceeditor/mode-perl-uncompressed.js
@@ -0,0 +1,583 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Panagiotis Astithas <pastith AT gmail DOT com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/perl', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/perl_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/range', 'ace/mode/folding/cstyle'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextMode = require("./text").Mode;
+var Tokenizer = require("../tokenizer").Tokenizer;
+var PerlHighlightRules = require("./perl_highlight_rules").PerlHighlightRules;
+var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
+var Range = require("../range").Range;
+var CStyleFoldMode = require("./folding/cstyle").FoldMode;
+
+var Mode = function() {
+ this.$tokenizer = new Tokenizer(new PerlHighlightRules().getRules());
+ this.$outdent = new MatchingBraceOutdent();
+ this.foldingRules = new CStyleFoldMode();
+};
+oop.inherits(Mode, TextMode);
+
+(function() {
+
+ this.toggleCommentLines = function(state, doc, startRow, endRow) {
+ var outdent = true;
+ var re = /^(\s*)#/;
+
+ for (var i=startRow; i<= endRow; i++) {
+ if (!re.test(doc.getLine(i))) {
+ outdent = false;
+ break;
+ }
+ }
+
+ if (outdent) {
+ var deleteRange = new Range(0, 0, 0, 0);
+ for (var i=startRow; i<= endRow; i++)
+ {
+ var line = doc.getLine(i);
+ var m = line.match(re);
+ deleteRange.start.row = i;
+ deleteRange.end.row = i;
+ deleteRange.end.column = m[0].length;
+ doc.replace(deleteRange, m[1]);
+ }
+ }
+ else {
+ doc.indentRows(startRow, endRow, "#");
+ }
+ };
+
+ this.getNextLineIndent = function(state, line, tab) {
+ var indent = this.$getIndent(line);
+
+ var tokenizedLine = this.$tokenizer.getLineTokens(line, state);
+ var tokens = tokenizedLine.tokens;
+
+ if (tokens.length && tokens[tokens.length-1].type == "comment") {
+ return indent;
+ }
+
+ if (state == "start") {
+ var match = line.match(/^.*[\{\(\[\:]\s*$/);
+ if (match) {
+ indent += tab;
+ }
+ }
+
+ return indent;
+ };
+
+ this.checkOutdent = function(state, line, input) {
+ return this.$outdent.checkOutdent(line, input);
+ };
+
+ this.autoOutdent = function(state, doc, row) {
+ this.$outdent.autoOutdent(doc, row);
+ };
+
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Panagiotis Astithas <pastith AT gmail DOT com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/perl_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var lang = require("../lib/lang");
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var PerlHighlightRules = function() {
+
+ var keywords = lang.arrayToMap(
+ ("base|constant|continue|else|elsif|for|foreach|format|goto|if|last|local|my|next|" +
+ "no|package|parent|redo|require|scalar|sub|unless|until|while|use|vars").split("|")
+ );
+
+ var buildinConstants = lang.arrayToMap(
+ ("ARGV|ENV|INC|SIG").split("|")
+ );
+
+ var builtinFunctions = lang.arrayToMap(
+ ("getprotobynumber|getprotobyname|getservbyname|gethostbyaddr|" +
+ "gethostbyname|getservbyport|getnetbyaddr|getnetbyname|getsockname|" +
+ "getpeername|setpriority|getprotoent|setprotoent|getpriority|" +
+ "endprotoent|getservent|setservent|endservent|sethostent|socketpair|" +
+ "getsockopt|gethostent|endhostent|setsockopt|setnetent|quotemeta|" +
+ "localtime|prototype|getnetent|endnetent|rewinddir|wantarray|getpwuid|" +
+ "closedir|getlogin|readlink|endgrent|getgrgid|getgrnam|shmwrite|" +
+ "shutdown|readline|endpwent|setgrent|readpipe|formline|truncate|" +
+ "dbmclose|syswrite|setpwent|getpwnam|getgrent|getpwent|ucfirst|sysread|" +
+ "setpgrp|shmread|sysseek|sysopen|telldir|defined|opendir|connect|" +
+ "lcfirst|getppid|binmode|syscall|sprintf|getpgrp|readdir|seekdir|" +
+ "waitpid|reverse|unshift|symlink|dbmopen|semget|msgrcv|rename|listen|" +
+ "chroot|msgsnd|shmctl|accept|unpack|exists|fileno|shmget|system|" +
+ "unlink|printf|gmtime|msgctl|semctl|values|rindex|substr|splice|" +
+ "length|msgget|select|socket|return|caller|delete|alarm|ioctl|index|" +
+ "undef|lstat|times|srand|chown|fcntl|close|write|umask|rmdir|study|" +
+ "sleep|chomp|untie|print|utime|mkdir|atan2|split|crypt|flock|chmod|" +
+ "BEGIN|bless|chdir|semop|shift|reset|link|stat|chop|grep|fork|dump|" +
+ "join|open|tell|pipe|exit|glob|warn|each|bind|sort|pack|eval|push|" +
+ "keys|getc|kill|seek|sqrt|send|wait|rand|tied|read|time|exec|recv|" +
+ "eof|chr|int|ord|exp|pos|pop|sin|log|abs|oct|hex|tie|cos|vec|END|ref|" +
+ "map|die|uc|lc|do").split("|")
+ );
+
+ // regexp must not have capturing parentheses. Use (?:) instead.
+ // regexps are ordered -> the first match is used
+
+ this.$rules = {
+ "start" : [
+ {
+ token : "comment",
+ regex : "#.*$"
+ }, {
+ token : "string.regexp",
+ regex : "[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)"
+ }, {
+ token : "string", // single line
+ regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
+ }, {
+ token : "string", // multi line string start
+ merge : true,
+ regex : '["].*\\\\$',
+ next : "qqstring"
+ }, {
+ token : "string", // single line
+ regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
+ }, {
+ token : "string", // multi line string start
+ merge : true,
+ regex : "['].*\\\\$",
+ next : "qstring"
+ }, {
+ token : "constant.numeric", // hex
+ regex : "0x[0-9a-fA-F]+\\b"
+ }, {
+ token : "constant.numeric", // float
+ regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
+ }, {
+ token : function(value) {
+ if (keywords.hasOwnProperty(value))
+ return "keyword";
+ else if (buildinConstants.hasOwnProperty(value))
+ return "constant.language";
+ else if (builtinFunctions.hasOwnProperty(value))
+ return "support.function";
+ else
+ return "identifier";
+ },
+ regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
+ }, {
+ token : "keyword.operator",
+ regex : "\\.\\.\\.|\\|\\|=|>>=|<<=|<=>|&&=|=>|!~|\\^=|&=|\\|=|\\.=|x=|%=|\\/=|\\*=|\\-=|\\+=|=~|\\*\\*|\\-\\-|\\.\\.|\\|\\||&&|\\+\\+|\\->|!=|==|>=|<=|>>|<<|,|=|\\?\\:|\\^|\\||x|%|\\/|\\*|<|&|\\\\|~|!|>|\\.|\\-|\\+|\\-C|\\-b|\\-S|\\-u|\\-t|\\-p|\\-l|\\-d|\\-f|\\-g|\\-s|\\-z|\\-k|\\-e|\\-O|\\-T|\\-B|\\-M|\\-A|\\-X|\\-W|\\-c|\\-R|\\-o|\\-x|\\-w|\\-r|\\b(?:and|cmp|eq|ge|gt|le|lt|ne|not|or|xor)"
+ }, {
+ token : "lparen",
+ regex : "[[({]"
+ }, {
+ token : "rparen",
+ regex : "[\\])}]"
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }
+ ],
+ "qqstring" : [
+ {
+ token : "string",
+ regex : '(?:(?:\\\\.)|(?:[^"\\\\]))*?"',
+ next : "start"
+ }, {
+ token : "string",
+ merge : true,
+ regex : '.+'
+ }
+ ],
+ "qstring" : [
+ {
+ token : "string",
+ regex : "(?:(?:\\\\.)|(?:[^'\\\\]))*?'",
+ next : "start"
+ }, {
+ token : "string",
+ merge : true,
+ regex : '.+'
+ }
+ ]
+ };
+};
+
+oop.inherits(PerlHighlightRules, TextHighlightRules);
+
+exports.PerlHighlightRules = PerlHighlightRules;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var Range = require("../range").Range;
+
+var MatchingBraceOutdent = function() {};
+
+(function() {
+
+ this.checkOutdent = function(line, input) {
+ if (! /^\s+$/.test(line))
+ return false;
+
+ return /^\s*\}/.test(input);
+ };
+
+ this.autoOutdent = function(doc, row) {
+ var line = doc.getLine(row);
+ var match = line.match(/^(\s*\})/);
+
+ if (!match) return 0;
+
+ var column = match[1].length;
+ var openBracePos = doc.findMatchingBracket({row: row, column: column});
+
+ if (!openBracePos || openBracePos.row == row) return 0;
+
+ var indent = this.$getIndent(doc.getLine(openBracePos.row));
+ doc.replace(new Range(row, 0, row, column-1), indent);
+ };
+
+ this.$getIndent = function(line) {
+ var match = line.match(/^(\s+)/);
+ if (match) {
+ return match[1];
+ }
+
+ return "";
+ };
+
+}).call(MatchingBraceOutdent.prototype);
+
+exports.MatchingBraceOutdent = MatchingBraceOutdent;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var Range = require("../../range").Range;
+var BaseFoldMode = require("./fold_mode").FoldMode;
+
+var FoldMode = exports.FoldMode = function() {};
+oop.inherits(FoldMode, BaseFoldMode);
+
+(function() {
+
+ this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
+ this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ var line = session.getLine(row);
+ var match = line.match(this.foldingStartMarker);
+ if (match) {
+ var i = match.index;
+
+ if (match[1])
+ return this.openingBracketBlock(session, match[1], row, i);
+
+ var range = session.getCommentFoldRange(row, i + match[0].length);
+ range.end.column -= 2;
+ return range;
+ }
+
+ if (foldStyle !== "markbeginend")
+ return;
+
+ var match = line.match(this.foldingStopMarker);
+ if (match) {
+ var i = match.index + match[0].length;
+
+ if (match[2]) {
+ var range = session.getCommentFoldRange(row, i);
+ range.end.column -= 2;
+ return range;
+ }
+
+ var end = {row: row, column: i};
+ var start = session.$findOpeningBracket(match[1], end);
+
+ if (!start)
+ return;
+
+ start.column++;
+ end.column--;
+
+ return Range.fromPoints(start, end);
+ }
+ };
+
+}).call(FoldMode.prototype);
+
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/fold_mode', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var Range = require("../../range").Range;
+
+var FoldMode = exports.FoldMode = function() {};
+
+(function() {
+
+ this.foldingStartMarker = null;
+ this.foldingStopMarker = null;
+
+ // must return "" if there's no fold, to enable caching
+ this.getFoldWidget = function(session, foldStyle, row) {
+ var line = session.getLine(row);
+ if (this.foldingStartMarker.test(line))
+ return "start";
+ if (foldStyle == "markbeginend"
+ && this.foldingStopMarker
+ && this.foldingStopMarker.test(line))
+ return "end";
+ return "";
+ };
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ return null;
+ };
+
+ this.indentationBlock = function(session, row, column) {
+ var re = /^\s*/;
+ var startRow = row;
+ var endRow = row;
+ var line = session.getLine(row);
+ var startColumn = column || line.length;
+ var startLevel = line.match(re)[0].length;
+ var maxRow = session.getLength()
+
+ while (++row < maxRow) {
+ line = session.getLine(row);
+ var level = line.match(re)[0].length;
+
+ if (level == line.length)
+ continue;
+
+ if (level <= startLevel)
+ break;
+
+ endRow = row;
+ }
+
+ if (endRow > startRow) {
+ var endColumn = session.getLine(endRow).length;
+ return new Range(startRow, startColumn, endRow, endColumn);
+ }
+ };
+
+ this.openingBracketBlock = function(session, bracket, row, column) {
+ var start = {row: row, column: column + 1};
+ var end = session.$findClosingBracket(bracket, start);
+ if (!end)
+ return;
+
+ var fw = session.foldWidgets[end.row];
+ if (fw == null)
+ fw = this.getFoldWidget(session, end.row);
+
+ if (fw == "start") {
+ end.row --;
+ end.column = session.getLine(end.row).length;
+ }
+ return Range.fromPoints(start, end);
+ };
+
+}).call(FoldMode.prototype);
+
+});
+;
+ (function() {
+ window.require(["ace/ace"], function(a) {
+ if (!window.ace)
+ window.ace = {};
+ for (var key in a) if (a.hasOwnProperty(key))
+ ace[key] = a[key];
+ });
+ })();
+ \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-perl.js b/apps/files_texteditor/js/aceeditor/mode-perl.js
index 521280f402c..706bb9362c3 100644
--- a/apps/files_texteditor/js/aceeditor/mode-perl.js
+++ b/apps/files_texteditor/js/aceeditor/mode-perl.js
@@ -1 +1 @@
-define("ace/mode/perl",["require","exports","module","pilot/oop","ace/mode/text","ace/tokenizer","ace/mode/perl_highlight_rules","ace/mode/matching_brace_outdent","ace/range"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/text").Mode,f=a("ace/tokenizer").Tokenizer,g=a("ace/mode/perl_highlight_rules").PerlHighlightRules,h=a("ace/mode/matching_brace_outdent").MatchingBraceOutdent,i=a("ace/range").Range,j=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h};d.inherits(j,e),function(){this.toggleCommentLines=function(a,b,c,d){var e=!0,f=[],g=/^(\s*)#/;for(var h=c;h<=d;h++)if(!g.test(b.getLine(h))){e=!1;break}if(e){var j=new i(0,0,0,0);for(var h=c;h<=d;h++){var k=b.getLine(h),l=k.match(g);j.start.row=h,j.end.row=h,j.end.column=l[0].length,b.replace(j,l[1])}}else b.indentRows(c,d,"#")},this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=this.$tokenizer.getLineTokens(b,a),f=e.tokens,g=e.state;if(f.length&&f[f.length-1].type=="comment")return d;if(a=="start"){var h=b.match(/^.*[\{\(\[\:]\s*$/);h&&(d+=c)}return d},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)}}.call(j.prototype),b.Mode=j}),define("ace/mode/perl_highlight_rules",["require","exports","module","pilot/oop","pilot/lang","ace/mode/text_highlight_rules"],function(a,b,c){var d=a("pilot/oop"),e=a("pilot/lang"),f=a("ace/mode/text_highlight_rules").TextHighlightRules,g=function(){var a=e.arrayToMap("base|constant|continue|else|elsif|for|foreach|format|goto|if|last|local|my|next|no|package|parent|redo|require|scalar|sub|unless|until|while|use|vars".split("|")),b=e.arrayToMap("ARGV|ENV|INC|SIG".split("|")),c=e.arrayToMap("getprotobynumber|getprotobyname|getservbyname|gethostbyaddr|gethostbyname|getservbyport|getnetbyaddr|getnetbyname|getsockname|getpeername|setpriority|getprotoent|setprotoent|getpriority|endprotoent|getservent|setservent|endservent|sethostent|socketpair|getsockopt|gethostent|endhostent|setsockopt|setnetent|quotemeta|localtime|prototype|getnetent|endnetent|rewinddir|wantarray|getpwuid|closedir|getlogin|readlink|endgrent|getgrgid|getgrnam|shmwrite|shutdown|readline|endpwent|setgrent|readpipe|formline|truncate|dbmclose|syswrite|setpwent|getpwnam|getgrent|getpwent|ucfirst|sysread|setpgrp|shmread|sysseek|sysopen|telldir|defined|opendir|connect|lcfirst|getppid|binmode|syscall|sprintf|getpgrp|readdir|seekdir|waitpid|reverse|unshift|symlink|dbmopen|semget|msgrcv|rename|listen|chroot|msgsnd|shmctl|accept|unpack|exists|fileno|shmget|system|unlink|printf|gmtime|msgctl|semctl|values|rindex|substr|splice|length|msgget|select|socket|return|caller|delete|alarm|ioctl|index|undef|lstat|times|srand|chown|fcntl|close|write|umask|rmdir|study|sleep|chomp|untie|print|utime|mkdir|atan2|split|crypt|flock|chmod|BEGIN|bless|chdir|semop|shift|reset|link|stat|chop|grep|fork|dump|join|open|tell|pipe|exit|glob|warn|each|bind|sort|pack|eval|push|keys|getc|kill|seek|sqrt|send|wait|rand|tied|read|time|exec|recv|eof|chr|int|ord|exp|pos|pop|sin|log|abs|oct|hex|tie|cos|vec|END|ref|map|die|uc|lc|do".split("|"));this.$rules={start:[{token:"comment",regex:"#.*$"},{token:"string.regexp",regex:"[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",merge:!0,regex:'["].*\\\\$',next:"qqstring"},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"string",merge:!0,regex:"['].*\\\\$",next:"qstring"},{token:"constant.numeric",regex:"0x[0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:function(d){return a.hasOwnProperty(d)?"keyword":b.hasOwnProperty(d)?"constant.language":c.hasOwnProperty(d)?"support.function":"identifier"},regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"\\.\\.\\.|\\|\\|=|>>=|<<=|<=>|&&=|=>|!~|\\^=|&=|\\|=|\\.=|x=|%=|\\/=|\\*=|\\-=|\\+=|=~|\\*\\*|\\-\\-|\\.\\.|\\|\\||&&|\\+\\+|\\->|!=|==|>=|<=|>>|<<|,|=|\\?\\:|\\^|\\||x|%|\\/|\\*|<|&|\\\\|~|!|>|\\.|\\-|\\+|\\-C|\\-b|\\-S|\\-u|\\-t|\\-p|\\-l|\\-d|\\-f|\\-g|\\-s|\\-z|\\-k|\\-e|\\-O|\\-T|\\-B|\\-M|\\-A|\\-X|\\-W|\\-c|\\-R|\\-o|\\-x|\\-w|\\-r|\\b(?:and|cmp|eq|ge|gt|le|lt|ne|not|or|xor)"},{token:"lparen",regex:"[[({]"},{token:"rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],qqstring:[{token:"string",regex:'(?:(?:\\\\.)|(?:[^"\\\\]))*?"',next:"start"},{token:"string",merge:!0,regex:".+"}],qstring:[{token:"string",regex:"(?:(?:\\\\.)|(?:[^'\\\\]))*?'",next:"start"},{token:"string",merge:!0,regex:".+"}]}};d.inherits(g,f),b.PerlHighlightRules=g}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(a,b,c){var d=a("ace/range").Range,e=function(){};(function(){this.checkOutdent=function(a,b){return/^\s+$/.test(a)?/^\s*\}/.test(b):!1},this.autoOutdent=function(a,b){var c=a.getLine(b),e=c.match(/^(\s*\})/);if(!e)return 0;var f=e[1].length,g=a.findMatchingBracket({row:b,column:f});if(!g||g.row==b)return 0;var h=this.$getIndent(a.getLine(g.row));a.replace(new d(b,0,b,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""}}).call(e.prototype),b.MatchingBraceOutdent=e}) \ No newline at end of file
+define("ace/mode/perl",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/perl_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/mode/folding/cstyle"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text").Mode,f=a("../tokenizer").Tokenizer,g=a("./perl_highlight_rules").PerlHighlightRules,h=a("./matching_brace_outdent").MatchingBraceOutdent,i=a("../range").Range,j=a("./folding/cstyle").FoldMode,k=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h,this.foldingRules=new j};d.inherits(k,e),function(){this.toggleCommentLines=function(a,b,c,d){var e=!0,f=/^(\s*)#/;for(var g=c;g<=d;g++)if(!f.test(b.getLine(g))){e=!1;break}if(e){var h=new i(0,0,0,0);for(var g=c;g<=d;g++){var j=b.getLine(g),k=j.match(f);h.start.row=g,h.end.row=g,h.end.column=k[0].length,b.replace(h,k[1])}}else b.indentRows(c,d,"#")},this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=this.$tokenizer.getLineTokens(b,a),f=e.tokens;if(f.length&&f[f.length-1].type=="comment")return d;if(a=="start"){var g=b.match(/^.*[\{\(\[\:]\s*$/);g&&(d+=c)}return d},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)}}.call(k.prototype),b.Mode=k}),define("ace/mode/perl_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("../lib/lang"),f=a("./text_highlight_rules").TextHighlightRules,g=function(){var a=e.arrayToMap("base|constant|continue|else|elsif|for|foreach|format|goto|if|last|local|my|next|no|package|parent|redo|require|scalar|sub|unless|until|while|use|vars".split("|")),b=e.arrayToMap("ARGV|ENV|INC|SIG".split("|")),c=e.arrayToMap("getprotobynumber|getprotobyname|getservbyname|gethostbyaddr|gethostbyname|getservbyport|getnetbyaddr|getnetbyname|getsockname|getpeername|setpriority|getprotoent|setprotoent|getpriority|endprotoent|getservent|setservent|endservent|sethostent|socketpair|getsockopt|gethostent|endhostent|setsockopt|setnetent|quotemeta|localtime|prototype|getnetent|endnetent|rewinddir|wantarray|getpwuid|closedir|getlogin|readlink|endgrent|getgrgid|getgrnam|shmwrite|shutdown|readline|endpwent|setgrent|readpipe|formline|truncate|dbmclose|syswrite|setpwent|getpwnam|getgrent|getpwent|ucfirst|sysread|setpgrp|shmread|sysseek|sysopen|telldir|defined|opendir|connect|lcfirst|getppid|binmode|syscall|sprintf|getpgrp|readdir|seekdir|waitpid|reverse|unshift|symlink|dbmopen|semget|msgrcv|rename|listen|chroot|msgsnd|shmctl|accept|unpack|exists|fileno|shmget|system|unlink|printf|gmtime|msgctl|semctl|values|rindex|substr|splice|length|msgget|select|socket|return|caller|delete|alarm|ioctl|index|undef|lstat|times|srand|chown|fcntl|close|write|umask|rmdir|study|sleep|chomp|untie|print|utime|mkdir|atan2|split|crypt|flock|chmod|BEGIN|bless|chdir|semop|shift|reset|link|stat|chop|grep|fork|dump|join|open|tell|pipe|exit|glob|warn|each|bind|sort|pack|eval|push|keys|getc|kill|seek|sqrt|send|wait|rand|tied|read|time|exec|recv|eof|chr|int|ord|exp|pos|pop|sin|log|abs|oct|hex|tie|cos|vec|END|ref|map|die|uc|lc|do".split("|"));this.$rules={start:[{token:"comment",regex:"#.*$"},{token:"string.regexp",regex:"[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",merge:!0,regex:'["].*\\\\$',next:"qqstring"},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"string",merge:!0,regex:"['].*\\\\$",next:"qstring"},{token:"constant.numeric",regex:"0x[0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:function(d){return a.hasOwnProperty(d)?"keyword":b.hasOwnProperty(d)?"constant.language":c.hasOwnProperty(d)?"support.function":"identifier"},regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"\\.\\.\\.|\\|\\|=|>>=|<<=|<=>|&&=|=>|!~|\\^=|&=|\\|=|\\.=|x=|%=|\\/=|\\*=|\\-=|\\+=|=~|\\*\\*|\\-\\-|\\.\\.|\\|\\||&&|\\+\\+|\\->|!=|==|>=|<=|>>|<<|,|=|\\?\\:|\\^|\\||x|%|\\/|\\*|<|&|\\\\|~|!|>|\\.|\\-|\\+|\\-C|\\-b|\\-S|\\-u|\\-t|\\-p|\\-l|\\-d|\\-f|\\-g|\\-s|\\-z|\\-k|\\-e|\\-O|\\-T|\\-B|\\-M|\\-A|\\-X|\\-W|\\-c|\\-R|\\-o|\\-x|\\-w|\\-r|\\b(?:and|cmp|eq|ge|gt|le|lt|ne|not|or|xor)"},{token:"lparen",regex:"[[({]"},{token:"rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],qqstring:[{token:"string",regex:'(?:(?:\\\\.)|(?:[^"\\\\]))*?"',next:"start"},{token:"string",merge:!0,regex:".+"}],qstring:[{token:"string",regex:"(?:(?:\\\\.)|(?:[^'\\\\]))*?'",next:"start"},{token:"string",merge:!0,regex:".+"}]}};d.inherits(g,f),b.PerlHighlightRules=g}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(a,b,c){"use strict";var d=a("../range").Range,e=function(){};((function(){this.checkOutdent=function(a,b){return/^\s+$/.test(a)?/^\s*\}/.test(b):!1},this.autoOutdent=function(a,b){var c=a.getLine(b),e=c.match(/^(\s*\})/);if(!e)return 0;var f=e[1].length,g=a.findMatchingBracket({row:b,column:f});if(!g||g.row==b)return 0;var h=this.$getIndent(a.getLine(g.row));a.replace(new d(b,0,b,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""}})).call(e.prototype),b.MatchingBraceOutdent=e}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("../../range").Range,f=a("./fold_mode").FoldMode,g=b.FoldMode=function(){};d.inherits(g,f),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(a,b,c){var d=a.getLine(c),f=d.match(this.foldingStartMarker);if(f){var g=f.index;if(f[1])return this.openingBracketBlock(a,f[1],c,g);var h=a.getCommentFoldRange(c,g+f[0].length);return h.end.column-=2,h}if(b!=="markbeginend")return;var f=d.match(this.foldingStopMarker);if(f){var g=f.index+f[0].length;if(f[2]){var h=a.getCommentFoldRange(c,g);return h.end.column-=2,h}var i={row:c,column:g},j=a.$findOpeningBracket(f[1],i);if(!j)return;return j.column++,i.column--,e.fromPoints(j,i)}}}.call(g.prototype)}),define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"],function(a,b,c){"use strict";var d=a("../../range").Range,e=b.FoldMode=function(){};((function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(a,b,c){var d=a.getLine(c);return this.foldingStartMarker.test(d)?"start":b=="markbeginend"&&this.foldingStopMarker&&this.foldingStopMarker.test(d)?"end":""},this.getFoldWidgetRange=function(a,b,c){return null},this.indentationBlock=function(a,b,c){var e=/^\s*/,f=b,g=b,h=a.getLine(b),i=c||h.length,j=h.match(e)[0].length,k=a.getLength();while(++b<k){h=a.getLine(b);var l=h.match(e)[0].length;if(l==h.length)continue;if(l<=j)break;g=b}if(g>f){var m=a.getLine(g).length;return new d(f,i,g,m)}},this.openingBracketBlock=function(a,b,c,e){var f={row:c,column:e+1},g=a.$findClosingBracket(b,f);if(!g)return;var h=a.foldWidgets[g.row];return h==null&&(h=this.getFoldWidget(a,g.row)),h=="start"&&(g.row--,g.column=a.getLine(g.row).length),d.fromPoints(f,g)}})).call(e.prototype)}),function(){window.require(["ace/ace"],function(a){window.ace||(window.ace={});for(var b in a)a.hasOwnProperty(b)&&(ace[b]=a[b])})}() \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-php-uncompressed.js b/apps/files_texteditor/js/aceeditor/mode-php-uncompressed.js
new file mode 100755
index 00000000000..58c9255623d
--- /dev/null
+++ b/apps/files_texteditor/js/aceeditor/mode-php-uncompressed.js
@@ -0,0 +1,1894 @@
+/* ***** BEGIN LICENSE BLOCK *****
+* Version: MPL 1.1/GPL 2.0/LGPL 2.1
+*
+* The contents of this file are subject to the Mozilla Public License Version
+* 1.1 (the "License"); you may not use this file except in compliance with
+* the License. You may obtain a copy of the License at
+* http://www.mozilla.org/MPL/
+*
+* Software distributed under the License is distributed on an "AS IS" basis,
+* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+* for the specific language governing rights and limitations under the
+* License.
+*
+* The Original Code is Ajax.org Code Editor (ACE).
+*
+* The Initial Developer of the Original Code is
+* Ajax.org B.V.
+* Portions created by the Initial Developer are Copyright (C) 2010
+* the Initial Developer. All Rights Reserved.
+*
+* Contributor(s):
+* André Fiedler <fiedler dot andre a t gmail dot com>
+*
+* Alternatively, the contents of this file may be used under the terms of
+* either the GNU General Public License Version 2 or later (the "GPL"), or
+* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+* in which case the provisions of the GPL or the LGPL are applicable instead
+* of those above. If you wish to allow use of your version of this file only
+* under the terms of either the GPL or the LGPL, and not to allow others to
+* use your version of this file under the terms of the MPL, indicate your
+* decision by deleting the provisions above and replace them with the notice
+* and other provisions required by the GPL or the LGPL. If you do not delete
+* the provisions above, a recipient may use your version of this file under
+* the terms of any one of the MPL, the GPL or the LGPL.
+*
+* ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/php', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/php_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/range', 'ace/mode/behaviour/cstyle', 'ace/mode/folding/cstyle'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextMode = require("./text").Mode;
+var Tokenizer = require("../tokenizer").Tokenizer;
+var PhpHighlightRules = require("./php_highlight_rules").PhpHighlightRules;
+var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
+var Range = require("../range").Range;
+var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
+var CStyleFoldMode = require("./folding/cstyle").FoldMode;
+
+var Mode = function() {
+ this.$tokenizer = new Tokenizer(new PhpHighlightRules().getRules());
+ this.$outdent = new MatchingBraceOutdent();
+ this.$behaviour = new CstyleBehaviour();
+ this.foldingRules = new CStyleFoldMode();
+};
+oop.inherits(Mode, TextMode);
+
+(function() {
+
+ this.toggleCommentLines = function(state, doc, startRow, endRow) {
+ var outdent = true;
+ var re = /^(\s*)#/;
+
+ for (var i=startRow; i<= endRow; i++) {
+ if (!re.test(doc.getLine(i))) {
+ outdent = false;
+ break;
+ }
+ }
+
+ if (outdent) {
+ var deleteRange = new Range(0, 0, 0, 0);
+ for (var i=startRow; i<= endRow; i++)
+ {
+ var line = doc.getLine(i);
+ var m = line.match(re);
+ deleteRange.start.row = i;
+ deleteRange.end.row = i;
+ deleteRange.end.column = m[0].length;
+ doc.replace(deleteRange, m[1]);
+ }
+ }
+ else {
+ doc.indentRows(startRow, endRow, "#");
+ }
+ };
+
+ this.getNextLineIndent = function(state, line, tab) {
+ var indent = this.$getIndent(line);
+
+ var tokenizedLine = this.$tokenizer.getLineTokens(line, state);
+ var tokens = tokenizedLine.tokens;
+
+ if (tokens.length && tokens[tokens.length-1].type == "comment") {
+ return indent;
+ }
+
+ if (state == "start") {
+ var match = line.match(/^.*[\{\(\[\:]\s*$/);
+ if (match) {
+ indent += tab;
+ }
+ }
+
+ return indent;
+ };
+
+ this.checkOutdent = function(state, line, input) {
+ return this.$outdent.checkOutdent(line, input);
+ };
+
+ this.autoOutdent = function(state, doc, row) {
+ this.$outdent.autoOutdent(doc, row);
+ };
+
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * André Fiedler <fiedler dot andre a t gmail dot com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK *****
+ */
+
+define('ace/mode/php_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/mode/doc_comment_highlight_rules', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var lang = require("../lib/lang");
+var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var PhpHighlightRules = function() {
+ var docComment = new DocCommentHighlightRules();
+ // http://php.net/quickref.php
+ var builtinFunctions = lang.arrayToMap(
+ ('abs|acos|acosh|addcslashes|addslashes|aggregate|aggregate_info|aggregate_methods|aggregate_methods_by_list|aggregate_methods_by_regexp|' +
+ 'aggregate_properties|aggregate_properties_by_list|aggregate_properties_by_regexp|aggregation_info|amqpconnection|amqpexchange|amqpqueue|' +
+ 'apache_child_terminate|apache_get_modules|apache_get_version|apache_getenv|apache_lookup_uri|apache_note|apache_request_headers|' +
+ 'apache_reset_timeout|apache_response_headers|apache_setenv|apc_add|apc_bin_dump|apc_bin_dumpfile|apc_bin_load|apc_bin_loadfile|' +
+ 'apc_cache_info|apc_cas|apc_clear_cache|apc_compile_file|apc_dec|apc_define_constants|apc_delete|apc_delete_file|apc_exists|apc_fetch|' +
+ 'apc_inc|apc_load_constants|apc_sma_info|apc_store|apciterator|apd_breakpoint|apd_callstack|apd_clunk|apd_continue|apd_croak|' +
+ 'apd_dump_function_table|apd_dump_persistent_resources|apd_dump_regular_resources|apd_echo|apd_get_active_symbols|apd_set_pprof_trace|' +
+ 'apd_set_session|apd_set_session_trace|apd_set_session_trace_socket|appenditerator|array|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_replace|array_replace_recursive|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|arrayaccess|arrayiterator|arrayobject|arsort|asin|asinh|asort|assert|assert_options|atan|' +
+ 'atan2|atanh|audioproperties|badfunctioncallexception|badmethodcallexception|base64_decode|base64_encode|base_convert|basename|' +
+ 'bbcode_add_element|bbcode_add_smiley|bbcode_create|bbcode_destroy|bbcode_parse|bbcode_set_arg_parser|bbcode_set_flags|bcadd|bccomp|bcdiv|' +
+ 'bcmod|bcmul|bcompiler_load|bcompiler_load_exe|bcompiler_parse_class|bcompiler_read|bcompiler_write_class|bcompiler_write_constant|' +
+ 'bcompiler_write_exe_footer|bcompiler_write_file|bcompiler_write_footer|bcompiler_write_function|bcompiler_write_functions_from_file|' +
+ 'bcompiler_write_header|bcompiler_write_included_filename|bcpow|bcpowmod|bcscale|bcsqrt|bcsub|bin2hex|bind_textdomain_codeset|bindec|' +
+ 'bindtextdomain|bson_decode|bson_encode|bumpValue|bzclose|bzcompress|bzdecompress|bzerrno|bzerror|bzerrstr|bzflush|bzopen|bzread|bzwrite|' +
+ 'cachingiterator|cairo|cairo_create|cairo_font_face_get_type|cairo_font_face_status|cairo_font_options_create|cairo_font_options_equal|' +
+ 'cairo_font_options_get_antialias|cairo_font_options_get_hint_metrics|cairo_font_options_get_hint_style|' +
+ 'cairo_font_options_get_subpixel_order|cairo_font_options_hash|cairo_font_options_merge|cairo_font_options_set_antialias|' +
+ 'cairo_font_options_set_hint_metrics|cairo_font_options_set_hint_style|cairo_font_options_set_subpixel_order|cairo_font_options_status|' +
+ 'cairo_format_stride_for_width|cairo_image_surface_create|cairo_image_surface_create_for_data|cairo_image_surface_create_from_png|' +
+ 'cairo_image_surface_get_data|cairo_image_surface_get_format|cairo_image_surface_get_height|cairo_image_surface_get_stride|' +
+ 'cairo_image_surface_get_width|cairo_matrix_create_scale|cairo_matrix_create_translate|cairo_matrix_invert|cairo_matrix_multiply|' +
+ 'cairo_matrix_rotate|cairo_matrix_transform_distance|cairo_matrix_transform_point|cairo_matrix_translate|cairo_pattern_add_color_stop_rgb|' +
+ 'cairo_pattern_add_color_stop_rgba|cairo_pattern_create_for_surface|cairo_pattern_create_linear|cairo_pattern_create_radial|' +
+ 'cairo_pattern_create_rgb|cairo_pattern_create_rgba|cairo_pattern_get_color_stop_count|cairo_pattern_get_color_stop_rgba|' +
+ 'cairo_pattern_get_extend|cairo_pattern_get_filter|cairo_pattern_get_linear_points|cairo_pattern_get_matrix|' +
+ 'cairo_pattern_get_radial_circles|cairo_pattern_get_rgba|cairo_pattern_get_surface|cairo_pattern_get_type|cairo_pattern_set_extend|' +
+ 'cairo_pattern_set_filter|cairo_pattern_set_matrix|cairo_pattern_status|cairo_pdf_surface_create|cairo_pdf_surface_set_size|' +
+ 'cairo_ps_get_levels|cairo_ps_level_to_string|cairo_ps_surface_create|cairo_ps_surface_dsc_begin_page_setup|' +
+ 'cairo_ps_surface_dsc_begin_setup|cairo_ps_surface_dsc_comment|cairo_ps_surface_get_eps|cairo_ps_surface_restrict_to_level|' +
+ 'cairo_ps_surface_set_eps|cairo_ps_surface_set_size|cairo_scaled_font_create|cairo_scaled_font_extents|cairo_scaled_font_get_ctm|' +
+ 'cairo_scaled_font_get_font_face|cairo_scaled_font_get_font_matrix|cairo_scaled_font_get_font_options|cairo_scaled_font_get_scale_matrix|' +
+ 'cairo_scaled_font_get_type|cairo_scaled_font_glyph_extents|cairo_scaled_font_status|cairo_scaled_font_text_extents|' +
+ 'cairo_surface_copy_page|cairo_surface_create_similar|cairo_surface_finish|cairo_surface_flush|cairo_surface_get_content|' +
+ 'cairo_surface_get_device_offset|cairo_surface_get_font_options|cairo_surface_get_type|cairo_surface_mark_dirty|' +
+ 'cairo_surface_mark_dirty_rectangle|cairo_surface_set_device_offset|cairo_surface_set_fallback_resolution|cairo_surface_show_page|' +
+ 'cairo_surface_status|cairo_surface_write_to_png|cairo_svg_surface_create|cairo_svg_surface_restrict_to_version|' +
+ 'cairo_svg_version_to_string|cairoantialias|cairocontent|cairocontext|cairoexception|cairoextend|cairofillrule|cairofilter|cairofontface|' +
+ 'cairofontoptions|cairofontslant|cairofonttype|cairofontweight|cairoformat|cairogradientpattern|cairohintmetrics|cairohintstyle|' +
+ 'cairoimagesurface|cairolineargradient|cairolinecap|cairolinejoin|cairomatrix|cairooperator|cairopath|cairopattern|cairopatterntype|' +
+ 'cairopdfsurface|cairopslevel|cairopssurface|cairoradialgradient|cairoscaledfont|cairosolidpattern|cairostatus|cairosubpixelorder|' +
+ 'cairosurface|cairosurfacepattern|cairosurfacetype|cairosvgsurface|cairosvgversion|cairotoyfontface|cal_days_in_month|cal_from_jd|cal_info|' +
+ 'cal_to_jd|calcul_hmac|calculhmac|call_user_func|call_user_func_array|call_user_method|call_user_method_array|callbackfilteriterator|ceil|' +
+ 'chdb|chdb_create|chdir|checkdate|checkdnsrr|chgrp|chmod|chop|chown|chr|chroot|chunk_split|class_alias|class_exists|class_implements|' +
+ 'class_parents|classkit_import|classkit_method_add|classkit_method_copy|classkit_method_redefine|classkit_method_remove|' +
+ 'classkit_method_rename|clearstatcache|clone|closedir|closelog|collator|com|com_addref|com_create_guid|com_event_sink|com_get|' +
+ 'com_get_active_object|com_invoke|com_isenum|com_load|com_load_typelib|com_message_pump|com_print_typeinfo|com_propget|com_propput|' +
+ 'com_propset|com_release|com_set|compact|connection_aborted|connection_status|connection_timeout|constant|construct|construct|construct|' +
+ 'convert_cyr_string|convert_uudecode|convert_uuencode|copy|cos|cosh|count|count_chars|countable|counter_bump|counter_bump_value|' +
+ 'counter_create|counter_get|counter_get_meta|counter_get_named|counter_get_value|counter_reset|counter_reset_value|crack_check|' +
+ 'crack_closedict|crack_getlastmessage|crack_opendict|crc32|create_function|crypt|ctype_alnum|ctype_alpha|ctype_cntrl|ctype_digit|' +
+ 'ctype_graph|ctype_lower|ctype_print|ctype_punct|ctype_space|ctype_upper|ctype_xdigit|cubrid_affected_rows|cubrid_bind|' +
+ 'cubrid_client_encoding|cubrid_close|cubrid_close_prepare|cubrid_close_request|cubrid_col_get|cubrid_col_size|cubrid_column_names|' +
+ 'cubrid_column_types|cubrid_commit|cubrid_connect|cubrid_connect_with_url|cubrid_current_oid|cubrid_data_seek|cubrid_db_name|' +
+ 'cubrid_disconnect|cubrid_drop|cubrid_errno|cubrid_error|cubrid_error_code|cubrid_error_code_facility|cubrid_error_msg|cubrid_execute|' +
+ 'cubrid_fetch|cubrid_fetch_array|cubrid_fetch_assoc|cubrid_fetch_field|cubrid_fetch_lengths|cubrid_fetch_object|cubrid_fetch_row|' +
+ 'cubrid_field_flags|cubrid_field_len|cubrid_field_name|cubrid_field_seek|cubrid_field_table|cubrid_field_type|cubrid_free_result|' +
+ 'cubrid_get|cubrid_get_autocommit|cubrid_get_charset|cubrid_get_class_name|cubrid_get_client_info|cubrid_get_db_parameter|' +
+ 'cubrid_get_server_info|cubrid_insert_id|cubrid_is_instance|cubrid_list_dbs|cubrid_load_from_glo|cubrid_lob_close|cubrid_lob_export|' +
+ 'cubrid_lob_get|cubrid_lob_send|cubrid_lob_size|cubrid_lock_read|cubrid_lock_write|cubrid_move_cursor|cubrid_new_glo|cubrid_next_result|' +
+ 'cubrid_num_cols|cubrid_num_fields|cubrid_num_rows|cubrid_ping|cubrid_prepare|cubrid_put|cubrid_query|cubrid_real_escape_string|' +
+ 'cubrid_result|cubrid_rollback|cubrid_save_to_glo|cubrid_schema|cubrid_send_glo|cubrid_seq_drop|cubrid_seq_insert|cubrid_seq_put|' +
+ 'cubrid_set_add|cubrid_set_autocommit|cubrid_set_db_parameter|cubrid_set_drop|cubrid_unbuffered_query|cubrid_version|curl_close|' +
+ 'curl_copy_handle|curl_errno|curl_error|curl_exec|curl_getinfo|curl_init|curl_multi_add_handle|curl_multi_close|curl_multi_exec|' +
+ 'curl_multi_getcontent|curl_multi_info_read|curl_multi_init|curl_multi_remove_handle|curl_multi_select|curl_setopt|curl_setopt_array|' +
+ 'curl_version|current|cyrus_authenticate|cyrus_bind|cyrus_close|cyrus_connect|cyrus_query|cyrus_unbind|date|date_add|date_create|' +
+ 'date_create_from_format|date_date_set|date_default_timezone_get|date_default_timezone_set|date_diff|date_format|date_get_last_errors|' +
+ 'date_interval_create_from_date_string|date_interval_format|date_isodate_set|date_modify|date_offset_get|date_parse|date_parse_from_format|' +
+ 'date_sub|date_sun_info|date_sunrise|date_sunset|date_time_set|date_timestamp_get|date_timestamp_set|date_timezone_get|date_timezone_set|' +
+ 'dateinterval|dateperiod|datetime|datetimezone|db2_autocommit|db2_bind_param|db2_client_info|db2_close|db2_column_privileges|db2_columns|' +
+ 'db2_commit|db2_conn_error|db2_conn_errormsg|db2_connect|db2_cursor_type|db2_escape_string|db2_exec|db2_execute|db2_fetch_array|' +
+ 'db2_fetch_assoc|db2_fetch_both|db2_fetch_object|db2_fetch_row|db2_field_display_size|db2_field_name|db2_field_num|db2_field_precision|' +
+ 'db2_field_scale|db2_field_type|db2_field_width|db2_foreign_keys|db2_free_result|db2_free_stmt|db2_get_option|db2_last_insert_id|' +
+ 'db2_lob_read|db2_next_result|db2_num_fields|db2_num_rows|db2_pclose|db2_pconnect|db2_prepare|db2_primary_keys|db2_procedure_columns|' +
+ 'db2_procedures|db2_result|db2_rollback|db2_server_info|db2_set_option|db2_special_columns|db2_statistics|db2_stmt_error|db2_stmt_errormsg|' +
+ 'db2_table_privileges|db2_tables|dba_close|dba_delete|dba_exists|dba_fetch|dba_firstkey|dba_handlers|dba_insert|dba_key_split|dba_list|' +
+ 'dba_nextkey|dba_open|dba_optimize|dba_popen|dba_replace|dba_sync|dbase_add_record|dbase_close|dbase_create|dbase_delete_record|' +
+ 'dbase_get_header_info|dbase_get_record|dbase_get_record_with_names|dbase_numfields|dbase_numrecords|dbase_open|dbase_pack|' +
+ 'dbase_replace_record|dbplus_add|dbplus_aql|dbplus_chdir|dbplus_close|dbplus_curr|dbplus_errcode|dbplus_errno|dbplus_find|dbplus_first|' +
+ 'dbplus_flush|dbplus_freealllocks|dbplus_freelock|dbplus_freerlocks|dbplus_getlock|dbplus_getunique|dbplus_info|dbplus_last|dbplus_lockrel|' +
+ 'dbplus_next|dbplus_open|dbplus_prev|dbplus_rchperm|dbplus_rcreate|dbplus_rcrtexact|dbplus_rcrtlike|dbplus_resolve|dbplus_restorepos|' +
+ 'dbplus_rkeys|dbplus_ropen|dbplus_rquery|dbplus_rrename|dbplus_rsecindex|dbplus_runlink|dbplus_rzap|dbplus_savepos|dbplus_setindex|' +
+ 'dbplus_setindexbynumber|dbplus_sql|dbplus_tcl|dbplus_tremove|dbplus_undo|dbplus_undoprepare|dbplus_unlockrel|dbplus_unselect|' +
+ 'dbplus_update|dbplus_xlockrel|dbplus_xunlockrel|dbx_close|dbx_compare|dbx_connect|dbx_error|dbx_escape_string|dbx_fetch_row|dbx_query|' +
+ 'dbx_sort|dcgettext|dcngettext|deaggregate|debug_backtrace|debug_print_backtrace|debug_zval_dump|decbin|dechex|decoct|define|' +
+ 'define_syslog_variables|defined|deg2rad|delete|dgettext|die|dio_close|dio_fcntl|dio_open|dio_read|dio_seek|dio_stat|dio_tcsetattr|' +
+ 'dio_truncate|dio_write|dir|directoryiterator|dirname|disk_free_space|disk_total_space|diskfreespace|dl|dngettext|dns_check_record|' +
+ 'dns_get_mx|dns_get_record|dom_import_simplexml|domainexception|domattr|domattribute_name|domattribute_set_value|domattribute_specified|' +
+ 'domattribute_value|domcharacterdata|domcomment|domdocument|domdocument_add_root|domdocument_create_attribute|' +
+ 'domdocument_create_cdata_section|domdocument_create_comment|domdocument_create_element|domdocument_create_element_ns|' +
+ 'domdocument_create_entity_reference|domdocument_create_processing_instruction|domdocument_create_text_node|domdocument_doctype|' +
+ 'domdocument_document_element|domdocument_dump_file|domdocument_dump_mem|domdocument_get_element_by_id|domdocument_get_elements_by_tagname|' +
+ 'domdocument_html_dump_mem|domdocument_xinclude|domdocumentfragment|domdocumenttype|domdocumenttype_entities|' +
+ 'domdocumenttype_internal_subset|domdocumenttype_name|domdocumenttype_notations|domdocumenttype_public_id|domdocumenttype_system_id|' +
+ 'domelement|domelement_get_attribute|domelement_get_attribute_node|domelement_get_elements_by_tagname|domelement_has_attribute|' +
+ 'domelement_remove_attribute|domelement_set_attribute|domelement_set_attribute_node|domelement_tagname|domentity|domentityreference|' +
+ 'domexception|domimplementation|domnamednodemap|domnode|domnode_add_namespace|domnode_append_child|domnode_append_sibling|' +
+ 'domnode_attributes|domnode_child_nodes|domnode_clone_node|domnode_dump_node|domnode_first_child|domnode_get_content|' +
+ 'domnode_has_attributes|domnode_has_child_nodes|domnode_insert_before|domnode_is_blank_node|domnode_last_child|domnode_next_sibling|' +
+ 'domnode_node_name|domnode_node_type|domnode_node_value|domnode_owner_document|domnode_parent_node|domnode_prefix|domnode_previous_sibling|' +
+ 'domnode_remove_child|domnode_replace_child|domnode_replace_node|domnode_set_content|domnode_set_name|domnode_set_namespace|' +
+ 'domnode_unlink_node|domnodelist|domnotation|domprocessinginstruction|domprocessinginstruction_data|domprocessinginstruction_target|' +
+ 'domtext|domxml_new_doc|domxml_open_file|domxml_open_mem|domxml_version|domxml_xmltree|domxml_xslt_stylesheet|domxml_xslt_stylesheet_doc|' +
+ 'domxml_xslt_stylesheet_file|domxml_xslt_version|domxpath|domxsltstylesheet_process|domxsltstylesheet_result_dump_file|' +
+ 'domxsltstylesheet_result_dump_mem|dotnet|dotnet_load|doubleval|each|easter_date|easter_days|echo|empty|emptyiterator|' +
+ 'enchant_broker_describe|enchant_broker_dict_exists|enchant_broker_free|enchant_broker_free_dict|enchant_broker_get_error|' +
+ 'enchant_broker_init|enchant_broker_list_dicts|enchant_broker_request_dict|enchant_broker_request_pwl_dict|enchant_broker_set_ordering|' +
+ 'enchant_dict_add_to_personal|enchant_dict_add_to_session|enchant_dict_check|enchant_dict_describe|enchant_dict_get_error|' +
+ 'enchant_dict_is_in_session|enchant_dict_quick_check|enchant_dict_store_replacement|enchant_dict_suggest|end|ereg|ereg_replace|eregi|' +
+ 'eregi_replace|error_get_last|error_log|error_reporting|errorexception|escapeshellarg|escapeshellcmd|eval|event_add|event_base_free|' +
+ 'event_base_loop|event_base_loopbreak|event_base_loopexit|event_base_new|event_base_priority_init|event_base_set|event_buffer_base_set|' +
+ 'event_buffer_disable|event_buffer_enable|event_buffer_fd_set|event_buffer_free|event_buffer_new|event_buffer_priority_set|' +
+ 'event_buffer_read|event_buffer_set_callback|event_buffer_timeout_set|event_buffer_watermark_set|event_buffer_write|event_del|event_free|' +
+ 'event_new|event_set|exception|exec|exif_imagetype|exif_read_data|exif_tagname|exif_thumbnail|exit|exp|expect_expectl|expect_popen|explode|' +
+ 'expm1|export|export|extension_loaded|extract|ezmlm_hash|fam_cancel_monitor|fam_close|fam_monitor_collection|fam_monitor_directory|' +
+ 'fam_monitor_file|fam_next_event|fam_open|fam_pending|fam_resume_monitor|fam_suspend_monitor|fbsql_affected_rows|fbsql_autocommit|' +
+ 'fbsql_blob_size|fbsql_change_user|fbsql_clob_size|fbsql_close|fbsql_commit|fbsql_connect|fbsql_create_blob|fbsql_create_clob|' +
+ 'fbsql_create_db|fbsql_data_seek|fbsql_database|fbsql_database_password|fbsql_db_query|fbsql_db_status|fbsql_drop_db|fbsql_errno|' +
+ 'fbsql_error|fbsql_fetch_array|fbsql_fetch_assoc|fbsql_fetch_field|fbsql_fetch_lengths|fbsql_fetch_object|fbsql_fetch_row|' +
+ 'fbsql_field_flags|fbsql_field_len|fbsql_field_name|fbsql_field_seek|fbsql_field_table|fbsql_field_type|fbsql_free_result|' +
+ 'fbsql_get_autostart_info|fbsql_hostname|fbsql_insert_id|fbsql_list_dbs|fbsql_list_fields|fbsql_list_tables|fbsql_next_result|' +
+ 'fbsql_num_fields|fbsql_num_rows|fbsql_password|fbsql_pconnect|fbsql_query|fbsql_read_blob|fbsql_read_clob|fbsql_result|fbsql_rollback|' +
+ 'fbsql_rows_fetched|fbsql_select_db|fbsql_set_characterset|fbsql_set_lob_mode|fbsql_set_password|fbsql_set_transaction|fbsql_start_db|' +
+ 'fbsql_stop_db|fbsql_table_name|fbsql_tablename|fbsql_username|fbsql_warnings|fclose|fdf_add_doc_javascript|fdf_add_template|fdf_close|' +
+ 'fdf_create|fdf_enum_values|fdf_errno|fdf_error|fdf_get_ap|fdf_get_attachment|fdf_get_encoding|fdf_get_file|fdf_get_flags|fdf_get_opt|' +
+ 'fdf_get_status|fdf_get_value|fdf_get_version|fdf_header|fdf_next_field_name|fdf_open|fdf_open_string|fdf_remove_item|fdf_save|' +
+ 'fdf_save_string|fdf_set_ap|fdf_set_encoding|fdf_set_file|fdf_set_flags|fdf_set_javascript_action|fdf_set_on_import_javascript|fdf_set_opt|' +
+ 'fdf_set_status|fdf_set_submit_form_action|fdf_set_target_frame|fdf_set_value|fdf_set_version|feof|fflush|fgetc|fgetcsv|fgets|fgetss|file|' +
+ 'file_exists|file_get_contents|file_put_contents|fileatime|filectime|filegroup|fileinode|filemtime|fileowner|fileperms|filepro|' +
+ 'filepro_fieldcount|filepro_fieldname|filepro_fieldtype|filepro_fieldwidth|filepro_retrieve|filepro_rowcount|filesize|filesystemiterator|' +
+ 'filetype|filter_has_var|filter_id|filter_input|filter_input_array|filter_list|filter_var|filter_var_array|filteriterator|finfo_buffer|' +
+ 'finfo_close|finfo_file|finfo_open|finfo_set_flags|floatval|flock|floor|flush|fmod|fnmatch|fopen|forward_static_call|' +
+ 'forward_static_call_array|fpassthru|fprintf|fputcsv|fputs|fread|frenchtojd|fribidi_log2vis|fscanf|fseek|fsockopen|fstat|ftell|ftok|' +
+ 'ftp_alloc|ftp_cdup|ftp_chdir|ftp_chmod|ftp_close|ftp_connect|ftp_delete|ftp_exec|ftp_fget|ftp_fput|ftp_get|ftp_get_option|ftp_login|' +
+ 'ftp_mdtm|ftp_mkdir|ftp_nb_continue|ftp_nb_fget|ftp_nb_fput|ftp_nb_get|ftp_nb_put|ftp_nlist|ftp_pasv|ftp_put|ftp_pwd|ftp_quit|ftp_raw|' +
+ 'ftp_rawlist|ftp_rename|ftp_rmdir|ftp_set_option|ftp_site|ftp_size|ftp_ssl_connect|ftp_systype|ftruncate|func_get_arg|func_get_args|' +
+ 'func_num_args|function_exists|fwrite|gc_collect_cycles|gc_disable|gc_enable|gc_enabled|gd_info|gearmanclient|gearmanjob|gearmantask|' +
+ 'gearmanworker|geoip_continent_code_by_name|geoip_country_code3_by_name|geoip_country_code_by_name|geoip_country_name_by_name|' +
+ 'geoip_database_info|geoip_db_avail|geoip_db_filename|geoip_db_get_all_info|geoip_id_by_name|geoip_isp_by_name|geoip_org_by_name|' +
+ 'geoip_record_by_name|geoip_region_by_name|geoip_region_name_by_code|geoip_time_zone_by_country_and_region|getMeta|getNamed|getValue|' +
+ '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_files|get_resource_type|getallheaders|getconstant|getconstants|getconstructor|' +
+ 'getcwd|getdate|getdefaultproperties|getdoccomment|getendline|getenv|getextension|getextensionname|getfilename|gethostbyaddr|gethostbyname|' +
+ 'gethostbynamel|gethostname|getimagesize|getinterfacenames|getinterfaces|getlastmod|getmethod|getmethods|getmodifiers|getmxrr|getmygid|' +
+ 'getmyinode|getmypid|getmyuid|getname|getnamespacename|getopt|getparentclass|getproperties|getproperty|getprotobyname|getprotobynumber|' +
+ 'getrandmax|getrusage|getservbyname|getservbyport|getshortname|getstartline|getstaticproperties|getstaticpropertyvalue|gettext|' +
+ 'gettimeofday|gettype|glob|globiterator|gmagick|gmagickdraw|gmagickpixel|gmdate|gmmktime|gmp_abs|gmp_add|gmp_and|gmp_clrbit|gmp_cmp|' +
+ 'gmp_com|gmp_div|gmp_div_q|gmp_div_qr|gmp_div_r|gmp_divexact|gmp_fact|gmp_gcd|gmp_gcdext|gmp_hamdist|gmp_init|gmp_intval|gmp_invert|' +
+ 'gmp_jacobi|gmp_legendre|gmp_mod|gmp_mul|gmp_neg|gmp_nextprime|gmp_or|gmp_perfect_square|gmp_popcount|gmp_pow|gmp_powm|gmp_prob_prime|' +
+ 'gmp_random|gmp_scan0|gmp_scan1|gmp_setbit|gmp_sign|gmp_sqrt|gmp_sqrtrem|gmp_strval|gmp_sub|gmp_testbit|gmp_xor|gmstrftime|' +
+ 'gnupg_adddecryptkey|gnupg_addencryptkey|gnupg_addsignkey|gnupg_cleardecryptkeys|gnupg_clearencryptkeys|gnupg_clearsignkeys|gnupg_decrypt|' +
+ 'gnupg_decryptverify|gnupg_encrypt|gnupg_encryptsign|gnupg_export|gnupg_geterror|gnupg_getprotocol|gnupg_import|gnupg_init|gnupg_keyinfo|' +
+ 'gnupg_setarmor|gnupg_seterrormode|gnupg_setsignmode|gnupg_sign|gnupg_verify|gopher_parsedir|grapheme_extract|grapheme_stripos|' +
+ 'grapheme_stristr|grapheme_strlen|grapheme_strpos|grapheme_strripos|grapheme_strrpos|grapheme_strstr|grapheme_substr|gregoriantojd|' +
+ 'gupnp_context_get_host_ip|gupnp_context_get_port|gupnp_context_get_subscription_timeout|gupnp_context_host_path|gupnp_context_new|' +
+ 'gupnp_context_set_subscription_timeout|gupnp_context_timeout_add|gupnp_context_unhost_path|gupnp_control_point_browse_start|' +
+ 'gupnp_control_point_browse_stop|gupnp_control_point_callback_set|gupnp_control_point_new|gupnp_device_action_callback_set|' +
+ 'gupnp_device_info_get|gupnp_device_info_get_service|gupnp_root_device_get_available|gupnp_root_device_get_relative_location|' +
+ 'gupnp_root_device_new|gupnp_root_device_set_available|gupnp_root_device_start|gupnp_root_device_stop|gupnp_service_action_get|' +
+ 'gupnp_service_action_return|gupnp_service_action_return_error|gupnp_service_action_set|gupnp_service_freeze_notify|gupnp_service_info_get|' +
+ 'gupnp_service_info_get_introspection|gupnp_service_introspection_get_state_variable|gupnp_service_notify|gupnp_service_proxy_action_get|' +
+ 'gupnp_service_proxy_action_set|gupnp_service_proxy_add_notify|gupnp_service_proxy_callback_set|gupnp_service_proxy_get_subscribed|' +
+ 'gupnp_service_proxy_remove_notify|gupnp_service_proxy_set_subscribed|gupnp_service_thaw_notify|gzclose|gzcompress|gzdecode|gzdeflate|' +
+ 'gzencode|gzeof|gzfile|gzgetc|gzgets|gzgetss|gzinflate|gzopen|gzpassthru|gzputs|gzread|gzrewind|gzseek|gztell|gzuncompress|gzwrite|' +
+ 'halt_compiler|haruannotation|haruannotation_setborderstyle|haruannotation_sethighlightmode|haruannotation_seticon|' +
+ 'haruannotation_setopened|harudestination|harudestination_setfit|harudestination_setfitb|harudestination_setfitbh|harudestination_setfitbv|' +
+ 'harudestination_setfith|harudestination_setfitr|harudestination_setfitv|harudestination_setxyz|harudoc|harudoc_addpage|' +
+ 'harudoc_addpagelabel|harudoc_construct|harudoc_createoutline|harudoc_getcurrentencoder|harudoc_getcurrentpage|harudoc_getencoder|' +
+ 'harudoc_getfont|harudoc_getinfoattr|harudoc_getpagelayout|harudoc_getpagemode|harudoc_getstreamsize|harudoc_insertpage|harudoc_loadjpeg|' +
+ 'harudoc_loadpng|harudoc_loadraw|harudoc_loadttc|harudoc_loadttf|harudoc_loadtype1|harudoc_output|harudoc_readfromstream|' +
+ 'harudoc_reseterror|harudoc_resetstream|harudoc_save|harudoc_savetostream|harudoc_setcompressionmode|harudoc_setcurrentencoder|' +
+ 'harudoc_setencryptionmode|harudoc_setinfoattr|harudoc_setinfodateattr|harudoc_setopenaction|harudoc_setpagelayout|harudoc_setpagemode|' +
+ 'harudoc_setpagesconfiguration|harudoc_setpassword|harudoc_setpermission|harudoc_usecnsencodings|harudoc_usecnsfonts|' +
+ 'harudoc_usecntencodings|harudoc_usecntfonts|harudoc_usejpencodings|harudoc_usejpfonts|harudoc_usekrencodings|harudoc_usekrfonts|' +
+ 'haruencoder|haruencoder_getbytetype|haruencoder_gettype|haruencoder_getunicode|haruencoder_getwritingmode|haruexception|harufont|' +
+ 'harufont_getascent|harufont_getcapheight|harufont_getdescent|harufont_getencodingname|harufont_getfontname|harufont_gettextwidth|' +
+ 'harufont_getunicodewidth|harufont_getxheight|harufont_measuretext|haruimage|haruimage_getbitspercomponent|haruimage_getcolorspace|' +
+ 'haruimage_getheight|haruimage_getsize|haruimage_getwidth|haruimage_setcolormask|haruimage_setmaskimage|haruoutline|' +
+ 'haruoutline_setdestination|haruoutline_setopened|harupage|harupage_arc|harupage_begintext|harupage_circle|harupage_closepath|' +
+ 'harupage_concat|harupage_createdestination|harupage_createlinkannotation|harupage_createtextannotation|harupage_createurlannotation|' +
+ 'harupage_curveto|harupage_curveto2|harupage_curveto3|harupage_drawimage|harupage_ellipse|harupage_endpath|harupage_endtext|' +
+ 'harupage_eofill|harupage_eofillstroke|harupage_fill|harupage_fillstroke|harupage_getcharspace|harupage_getcmykfill|harupage_getcmykstroke|' +
+ 'harupage_getcurrentfont|harupage_getcurrentfontsize|harupage_getcurrentpos|harupage_getcurrenttextpos|harupage_getdash|' +
+ 'harupage_getfillingcolorspace|harupage_getflatness|harupage_getgmode|harupage_getgrayfill|harupage_getgraystroke|harupage_getheight|' +
+ 'harupage_gethorizontalscaling|harupage_getlinecap|harupage_getlinejoin|harupage_getlinewidth|harupage_getmiterlimit|harupage_getrgbfill|' +
+ 'harupage_getrgbstroke|harupage_getstrokingcolorspace|harupage_gettextleading|harupage_gettextmatrix|harupage_gettextrenderingmode|' +
+ 'harupage_gettextrise|harupage_gettextwidth|harupage_gettransmatrix|harupage_getwidth|harupage_getwordspace|harupage_lineto|' +
+ 'harupage_measuretext|harupage_movetextpos|harupage_moveto|harupage_movetonextline|harupage_rectangle|harupage_setcharspace|' +
+ 'harupage_setcmykfill|harupage_setcmykstroke|harupage_setdash|harupage_setflatness|harupage_setfontandsize|harupage_setgrayfill|' +
+ 'harupage_setgraystroke|harupage_setheight|harupage_sethorizontalscaling|harupage_setlinecap|harupage_setlinejoin|harupage_setlinewidth|' +
+ 'harupage_setmiterlimit|harupage_setrgbfill|harupage_setrgbstroke|harupage_setrotate|harupage_setsize|harupage_setslideshow|' +
+ 'harupage_settextleading|harupage_settextmatrix|harupage_settextrenderingmode|harupage_settextrise|harupage_setwidth|harupage_setwordspace|' +
+ 'harupage_showtext|harupage_showtextnextline|harupage_stroke|harupage_textout|harupage_textrect|hasconstant|hash|hash_algos|hash_copy|' +
+ 'hash_file|hash_final|hash_hmac|hash_hmac_file|hash_init|hash_update|hash_update_file|hash_update_stream|hasmethod|hasproperty|header|' +
+ 'header_register_callback|header_remove|headers_list|headers_sent|hebrev|hebrevc|hex2bin|hexdec|highlight_file|highlight_string|' +
+ 'html_entity_decode|htmlentities|htmlspecialchars|htmlspecialchars_decode|http_build_cookie|http_build_query|http_build_str|http_build_url|' +
+ 'http_cache_etag|http_cache_last_modified|http_chunked_decode|http_date|http_deflate|http_get|http_get_request_body|' +
+ 'http_get_request_body_stream|http_get_request_headers|http_head|http_inflate|http_match_etag|http_match_modified|' +
+ 'http_match_request_header|http_negotiate_charset|http_negotiate_content_type|http_negotiate_language|http_parse_cookie|http_parse_headers|' +
+ 'http_parse_message|http_parse_params|http_persistent_handles_clean|http_persistent_handles_count|http_persistent_handles_ident|' +
+ 'http_post_data|http_post_fields|http_put_data|http_put_file|http_put_stream|http_redirect|http_request|http_request_body_encode|' +
+ 'http_request_method_exists|http_request_method_name|http_request_method_register|http_request_method_unregister|http_response_code|' +
+ 'http_send_content_disposition|http_send_content_type|http_send_data|http_send_file|http_send_last_modified|http_send_status|' +
+ 'http_send_stream|http_support|http_throttle|httpdeflatestream|httpdeflatestream_construct|httpdeflatestream_factory|' +
+ 'httpdeflatestream_finish|httpdeflatestream_flush|httpdeflatestream_update|httpinflatestream|httpinflatestream_construct|' +
+ 'httpinflatestream_factory|httpinflatestream_finish|httpinflatestream_flush|httpinflatestream_update|httpmessage|httpmessage_addheaders|' +
+ 'httpmessage_construct|httpmessage_detach|httpmessage_factory|httpmessage_fromenv|httpmessage_fromstring|httpmessage_getbody|' +
+ 'httpmessage_getheader|httpmessage_getheaders|httpmessage_gethttpversion|httpmessage_getparentmessage|httpmessage_getrequestmethod|' +
+ 'httpmessage_getrequesturl|httpmessage_getresponsecode|httpmessage_getresponsestatus|httpmessage_gettype|httpmessage_guesscontenttype|' +
+ 'httpmessage_prepend|httpmessage_reverse|httpmessage_send|httpmessage_setbody|httpmessage_setheaders|httpmessage_sethttpversion|' +
+ 'httpmessage_setrequestmethod|httpmessage_setrequesturl|httpmessage_setresponsecode|httpmessage_setresponsestatus|httpmessage_settype|' +
+ 'httpmessage_tomessagetypeobject|httpmessage_tostring|httpquerystring|httpquerystring_construct|httpquerystring_get|httpquerystring_mod|' +
+ 'httpquerystring_set|httpquerystring_singleton|httpquerystring_toarray|httpquerystring_tostring|httpquerystring_xlate|httprequest|' +
+ 'httprequest_addcookies|httprequest_addheaders|httprequest_addpostfields|httprequest_addpostfile|httprequest_addputdata|' +
+ 'httprequest_addquerydata|httprequest_addrawpostdata|httprequest_addssloptions|httprequest_clearhistory|httprequest_construct|' +
+ 'httprequest_enablecookies|httprequest_getcontenttype|httprequest_getcookies|httprequest_getheaders|httprequest_gethistory|' +
+ 'httprequest_getmethod|httprequest_getoptions|httprequest_getpostfields|httprequest_getpostfiles|httprequest_getputdata|' +
+ 'httprequest_getputfile|httprequest_getquerydata|httprequest_getrawpostdata|httprequest_getrawrequestmessage|' +
+ 'httprequest_getrawresponsemessage|httprequest_getrequestmessage|httprequest_getresponsebody|httprequest_getresponsecode|' +
+ 'httprequest_getresponsecookies|httprequest_getresponsedata|httprequest_getresponseheader|httprequest_getresponseinfo|' +
+ 'httprequest_getresponsemessage|httprequest_getresponsestatus|httprequest_getssloptions|httprequest_geturl|httprequest_resetcookies|' +
+ 'httprequest_send|httprequest_setcontenttype|httprequest_setcookies|httprequest_setheaders|httprequest_setmethod|httprequest_setoptions|' +
+ 'httprequest_setpostfields|httprequest_setpostfiles|httprequest_setputdata|httprequest_setputfile|httprequest_setquerydata|' +
+ 'httprequest_setrawpostdata|httprequest_setssloptions|httprequest_seturl|httprequestpool|httprequestpool_attach|httprequestpool_construct|' +
+ 'httprequestpool_destruct|httprequestpool_detach|httprequestpool_getattachedrequests|httprequestpool_getfinishedrequests|' +
+ 'httprequestpool_reset|httprequestpool_send|httprequestpool_socketperform|httprequestpool_socketselect|httpresponse|httpresponse_capture|' +
+ 'httpresponse_getbuffersize|httpresponse_getcache|httpresponse_getcachecontrol|httpresponse_getcontentdisposition|' +
+ 'httpresponse_getcontenttype|httpresponse_getdata|httpresponse_getetag|httpresponse_getfile|httpresponse_getgzip|httpresponse_getheader|' +
+ 'httpresponse_getlastmodified|httpresponse_getrequestbody|httpresponse_getrequestbodystream|httpresponse_getrequestheaders|' +
+ 'httpresponse_getstream|httpresponse_getthrottledelay|httpresponse_guesscontenttype|httpresponse_redirect|httpresponse_send|' +
+ 'httpresponse_setbuffersize|httpresponse_setcache|httpresponse_setcachecontrol|httpresponse_setcontentdisposition|' +
+ 'httpresponse_setcontenttype|httpresponse_setdata|httpresponse_setetag|httpresponse_setfile|httpresponse_setgzip|httpresponse_setheader|' +
+ 'httpresponse_setlastmodified|httpresponse_setstream|httpresponse_setthrottledelay|httpresponse_status|hw_array2objrec|hw_changeobject|' +
+ 'hw_children|hw_childrenobj|hw_close|hw_connect|hw_connection_info|hw_cp|hw_deleteobject|hw_docbyanchor|hw_docbyanchorobj|' +
+ 'hw_document_attributes|hw_document_bodytag|hw_document_content|hw_document_setcontent|hw_document_size|hw_dummy|hw_edittext|hw_error|' +
+ 'hw_errormsg|hw_free_document|hw_getanchors|hw_getanchorsobj|hw_getandlock|hw_getchildcoll|hw_getchildcollobj|hw_getchilddoccoll|' +
+ 'hw_getchilddoccollobj|hw_getobject|hw_getobjectbyquery|hw_getobjectbyquerycoll|hw_getobjectbyquerycollobj|hw_getobjectbyqueryobj|' +
+ 'hw_getparents|hw_getparentsobj|hw_getrellink|hw_getremote|hw_getremotechildren|hw_getsrcbydestobj|hw_gettext|hw_getusername|hw_identify|' +
+ 'hw_incollections|hw_info|hw_inscoll|hw_insdoc|hw_insertanchors|hw_insertdocument|hw_insertobject|hw_mapid|hw_modifyobject|hw_mv|' +
+ 'hw_new_document|hw_objrec2array|hw_output_document|hw_pconnect|hw_pipedocument|hw_root|hw_setlinkroot|hw_stat|hw_unlock|hw_who|' +
+ 'hwapi_attribute|hwapi_attribute_key|hwapi_attribute_langdepvalue|hwapi_attribute_value|hwapi_attribute_values|hwapi_checkin|' +
+ 'hwapi_checkout|hwapi_children|hwapi_content|hwapi_content_mimetype|hwapi_content_read|hwapi_copy|hwapi_dbstat|hwapi_dcstat|' +
+ 'hwapi_dstanchors|hwapi_dstofsrcanchor|hwapi_error_count|hwapi_error_reason|hwapi_find|hwapi_ftstat|hwapi_hgcsp|hwapi_hwstat|' +
+ 'hwapi_identify|hwapi_info|hwapi_insert|hwapi_insertanchor|hwapi_insertcollection|hwapi_insertdocument|hwapi_link|hwapi_lock|hwapi_move|' +
+ 'hwapi_new_content|hwapi_object|hwapi_object_assign|hwapi_object_attreditable|hwapi_object_count|hwapi_object_insert|hwapi_object_new|' +
+ 'hwapi_object_remove|hwapi_object_title|hwapi_object_value|hwapi_objectbyanchor|hwapi_parents|hwapi_reason_description|hwapi_reason_type|' +
+ 'hwapi_remove|hwapi_replace|hwapi_setcommittedversion|hwapi_srcanchors|hwapi_srcsofdst|hwapi_unlock|hwapi_user|hwapi_userlist|hypot|' +
+ 'ibase_add_user|ibase_affected_rows|ibase_backup|ibase_blob_add|ibase_blob_cancel|ibase_blob_close|ibase_blob_create|ibase_blob_echo|' +
+ 'ibase_blob_get|ibase_blob_import|ibase_blob_info|ibase_blob_open|ibase_close|ibase_commit|ibase_commit_ret|ibase_connect|ibase_db_info|' +
+ 'ibase_delete_user|ibase_drop_db|ibase_errcode|ibase_errmsg|ibase_execute|ibase_fetch_assoc|ibase_fetch_object|ibase_fetch_row|' +
+ 'ibase_field_info|ibase_free_event_handler|ibase_free_query|ibase_free_result|ibase_gen_id|ibase_maintain_db|ibase_modify_user|' +
+ 'ibase_name_result|ibase_num_fields|ibase_num_params|ibase_param_info|ibase_pconnect|ibase_prepare|ibase_query|ibase_restore|' +
+ 'ibase_rollback|ibase_rollback_ret|ibase_server_info|ibase_service_attach|ibase_service_detach|ibase_set_event_handler|ibase_timefmt|' +
+ 'ibase_trans|ibase_wait_event|iconv|iconv_get_encoding|iconv_mime_decode|iconv_mime_decode_headers|iconv_mime_encode|iconv_set_encoding|' +
+ 'iconv_strlen|iconv_strpos|iconv_strrpos|iconv_substr|id3_get_frame_long_name|id3_get_frame_short_name|id3_get_genre_id|id3_get_genre_list|' +
+ 'id3_get_genre_name|id3_get_tag|id3_get_version|id3_remove_tag|id3_set_tag|id3v2attachedpictureframe|id3v2frame|id3v2tag|idate|' +
+ 'idn_to_ascii|idn_to_unicode|idn_to_utf8|ifx_affected_rows|ifx_blobinfile_mode|ifx_byteasvarchar|ifx_close|ifx_connect|ifx_copy_blob|' +
+ 'ifx_create_blob|ifx_create_char|ifx_do|ifx_error|ifx_errormsg|ifx_fetch_row|ifx_fieldproperties|ifx_fieldtypes|ifx_free_blob|' +
+ 'ifx_free_char|ifx_free_result|ifx_get_blob|ifx_get_char|ifx_getsqlca|ifx_htmltbl_result|ifx_nullformat|ifx_num_fields|ifx_num_rows|' +
+ 'ifx_pconnect|ifx_prepare|ifx_query|ifx_textasvarchar|ifx_update_blob|ifx_update_char|ifxus_close_slob|ifxus_create_slob|ifxus_free_slob|' +
+ 'ifxus_open_slob|ifxus_read_slob|ifxus_seek_slob|ifxus_tell_slob|ifxus_write_slob|ignore_user_abort|iis_add_server|iis_get_dir_security|' +
+ 'iis_get_script_map|iis_get_server_by_comment|iis_get_server_by_path|iis_get_server_rights|iis_get_service_state|iis_remove_server|' +
+ 'iis_set_app_settings|iis_set_dir_security|iis_set_script_map|iis_set_server_rights|iis_start_server|iis_start_service|iis_stop_server|' +
+ 'iis_stop_service|image2wbmp|image_type_to_extension|image_type_to_mime_type|imagealphablending|imageantialias|imagearc|imagechar|' +
+ 'imagecharup|imagecolorallocate|imagecolorallocatealpha|imagecolorat|imagecolorclosest|imagecolorclosestalpha|imagecolorclosesthwb|' +
+ 'imagecolordeallocate|imagecolorexact|imagecolorexactalpha|imagecolormatch|imagecolorresolve|imagecolorresolvealpha|imagecolorset|' +
+ 'imagecolorsforindex|imagecolorstotal|imagecolortransparent|imageconvolution|imagecopy|imagecopymerge|imagecopymergegray|' +
+ 'imagecopyresampled|imagecopyresized|imagecreate|imagecreatefromgd|imagecreatefromgd2|imagecreatefromgd2part|imagecreatefromgif|' +
+ 'imagecreatefromjpeg|imagecreatefrompng|imagecreatefromstring|imagecreatefromwbmp|imagecreatefromxbm|imagecreatefromxpm|' +
+ 'imagecreatetruecolor|imagedashedline|imagedestroy|imageellipse|imagefill|imagefilledarc|imagefilledellipse|imagefilledpolygon|' +
+ 'imagefilledrectangle|imagefilltoborder|imagefilter|imagefontheight|imagefontwidth|imageftbbox|imagefttext|imagegammacorrect|imagegd|' +
+ 'imagegd2|imagegif|imagegrabscreen|imagegrabwindow|imageinterlace|imageistruecolor|imagejpeg|imagelayereffect|imageline|imageloadfont|' +
+ 'imagepalettecopy|imagepng|imagepolygon|imagepsbbox|imagepsencodefont|imagepsextendfont|imagepsfreefont|imagepsloadfont|imagepsslantfont|' +
+ 'imagepstext|imagerectangle|imagerotate|imagesavealpha|imagesetbrush|imagesetpixel|imagesetstyle|imagesetthickness|imagesettile|' +
+ 'imagestring|imagestringup|imagesx|imagesy|imagetruecolortopalette|imagettfbbox|imagettftext|imagetypes|imagewbmp|imagexbm|imagick|' +
+ 'imagick_adaptiveblurimage|imagick_adaptiveresizeimage|imagick_adaptivesharpenimage|imagick_adaptivethresholdimage|imagick_addimage|' +
+ 'imagick_addnoiseimage|imagick_affinetransformimage|imagick_animateimages|imagick_annotateimage|imagick_appendimages|imagick_averageimages|' +
+ 'imagick_blackthresholdimage|imagick_blurimage|imagick_borderimage|imagick_charcoalimage|imagick_chopimage|imagick_clear|imagick_clipimage|' +
+ 'imagick_clippathimage|imagick_clone|imagick_clutimage|imagick_coalesceimages|imagick_colorfloodfillimage|imagick_colorizeimage|' +
+ 'imagick_combineimages|imagick_commentimage|imagick_compareimagechannels|imagick_compareimagelayers|imagick_compareimages|' +
+ 'imagick_compositeimage|imagick_construct|imagick_contrastimage|imagick_contraststretchimage|imagick_convolveimage|imagick_cropimage|' +
+ 'imagick_cropthumbnailimage|imagick_current|imagick_cyclecolormapimage|imagick_decipherimage|imagick_deconstructimages|' +
+ 'imagick_deleteimageartifact|imagick_despeckleimage|imagick_destroy|imagick_displayimage|imagick_displayimages|imagick_distortimage|' +
+ 'imagick_drawimage|imagick_edgeimage|imagick_embossimage|imagick_encipherimage|imagick_enhanceimage|imagick_equalizeimage|' +
+ 'imagick_evaluateimage|imagick_extentimage|imagick_flattenimages|imagick_flipimage|imagick_floodfillpaintimage|imagick_flopimage|' +
+ 'imagick_frameimage|imagick_fximage|imagick_gammaimage|imagick_gaussianblurimage|imagick_getcolorspace|imagick_getcompression|' +
+ 'imagick_getcompressionquality|imagick_getcopyright|imagick_getfilename|imagick_getfont|imagick_getformat|imagick_getgravity|' +
+ 'imagick_gethomeurl|imagick_getimage|imagick_getimagealphachannel|imagick_getimageartifact|imagick_getimagebackgroundcolor|' +
+ 'imagick_getimageblob|imagick_getimageblueprimary|imagick_getimagebordercolor|imagick_getimagechanneldepth|' +
+ 'imagick_getimagechanneldistortion|imagick_getimagechanneldistortions|imagick_getimagechannelextrema|imagick_getimagechannelmean|' +
+ 'imagick_getimagechannelrange|imagick_getimagechannelstatistics|imagick_getimageclipmask|imagick_getimagecolormapcolor|' +
+ 'imagick_getimagecolors|imagick_getimagecolorspace|imagick_getimagecompose|imagick_getimagecompression|imagick_getimagecompressionquality|' +
+ 'imagick_getimagedelay|imagick_getimagedepth|imagick_getimagedispose|imagick_getimagedistortion|imagick_getimageextrema|' +
+ 'imagick_getimagefilename|imagick_getimageformat|imagick_getimagegamma|imagick_getimagegeometry|imagick_getimagegravity|' +
+ 'imagick_getimagegreenprimary|imagick_getimageheight|imagick_getimagehistogram|imagick_getimageindex|imagick_getimageinterlacescheme|' +
+ 'imagick_getimageinterpolatemethod|imagick_getimageiterations|imagick_getimagelength|imagick_getimagemagicklicense|imagick_getimagematte|' +
+ 'imagick_getimagemattecolor|imagick_getimageorientation|imagick_getimagepage|imagick_getimagepixelcolor|imagick_getimageprofile|' +
+ 'imagick_getimageprofiles|imagick_getimageproperties|imagick_getimageproperty|imagick_getimageredprimary|imagick_getimageregion|' +
+ 'imagick_getimagerenderingintent|imagick_getimageresolution|imagick_getimagesblob|imagick_getimagescene|imagick_getimagesignature|' +
+ 'imagick_getimagesize|imagick_getimagetickspersecond|imagick_getimagetotalinkdensity|imagick_getimagetype|imagick_getimageunits|' +
+ 'imagick_getimagevirtualpixelmethod|imagick_getimagewhitepoint|imagick_getimagewidth|imagick_getinterlacescheme|imagick_getiteratorindex|' +
+ 'imagick_getnumberimages|imagick_getoption|imagick_getpackagename|imagick_getpage|imagick_getpixeliterator|imagick_getpixelregioniterator|' +
+ 'imagick_getpointsize|imagick_getquantumdepth|imagick_getquantumrange|imagick_getreleasedate|imagick_getresource|imagick_getresourcelimit|' +
+ 'imagick_getsamplingfactors|imagick_getsize|imagick_getsizeoffset|imagick_getversion|imagick_hasnextimage|imagick_haspreviousimage|' +
+ 'imagick_identifyimage|imagick_implodeimage|imagick_labelimage|imagick_levelimage|imagick_linearstretchimage|imagick_liquidrescaleimage|' +
+ 'imagick_magnifyimage|imagick_mapimage|imagick_mattefloodfillimage|imagick_medianfilterimage|imagick_mergeimagelayers|imagick_minifyimage|' +
+ 'imagick_modulateimage|imagick_montageimage|imagick_morphimages|imagick_mosaicimages|imagick_motionblurimage|imagick_negateimage|' +
+ 'imagick_newimage|imagick_newpseudoimage|imagick_nextimage|imagick_normalizeimage|imagick_oilpaintimage|imagick_opaquepaintimage|' +
+ 'imagick_optimizeimagelayers|imagick_orderedposterizeimage|imagick_paintfloodfillimage|imagick_paintopaqueimage|' +
+ 'imagick_painttransparentimage|imagick_pingimage|imagick_pingimageblob|imagick_pingimagefile|imagick_polaroidimage|imagick_posterizeimage|' +
+ 'imagick_previewimages|imagick_previousimage|imagick_profileimage|imagick_quantizeimage|imagick_quantizeimages|imagick_queryfontmetrics|' +
+ 'imagick_queryfonts|imagick_queryformats|imagick_radialblurimage|imagick_raiseimage|imagick_randomthresholdimage|imagick_readimage|' +
+ 'imagick_readimageblob|imagick_readimagefile|imagick_recolorimage|imagick_reducenoiseimage|imagick_removeimage|imagick_removeimageprofile|' +
+ 'imagick_render|imagick_resampleimage|imagick_resetimagepage|imagick_resizeimage|imagick_rollimage|imagick_rotateimage|' +
+ 'imagick_roundcorners|imagick_sampleimage|imagick_scaleimage|imagick_separateimagechannel|imagick_sepiatoneimage|' +
+ 'imagick_setbackgroundcolor|imagick_setcolorspace|imagick_setcompression|imagick_setcompressionquality|imagick_setfilename|' +
+ 'imagick_setfirstiterator|imagick_setfont|imagick_setformat|imagick_setgravity|imagick_setimage|imagick_setimagealphachannel|' +
+ 'imagick_setimageartifact|imagick_setimagebackgroundcolor|imagick_setimagebias|imagick_setimageblueprimary|imagick_setimagebordercolor|' +
+ 'imagick_setimagechanneldepth|imagick_setimageclipmask|imagick_setimagecolormapcolor|imagick_setimagecolorspace|imagick_setimagecompose|' +
+ 'imagick_setimagecompression|imagick_setimagecompressionquality|imagick_setimagedelay|imagick_setimagedepth|imagick_setimagedispose|' +
+ 'imagick_setimageextent|imagick_setimagefilename|imagick_setimageformat|imagick_setimagegamma|imagick_setimagegravity|' +
+ 'imagick_setimagegreenprimary|imagick_setimageindex|imagick_setimageinterlacescheme|imagick_setimageinterpolatemethod|' +
+ 'imagick_setimageiterations|imagick_setimagematte|imagick_setimagemattecolor|imagick_setimageopacity|imagick_setimageorientation|' +
+ 'imagick_setimagepage|imagick_setimageprofile|imagick_setimageproperty|imagick_setimageredprimary|imagick_setimagerenderingintent|' +
+ 'imagick_setimageresolution|imagick_setimagescene|imagick_setimagetickspersecond|imagick_setimagetype|imagick_setimageunits|' +
+ 'imagick_setimagevirtualpixelmethod|imagick_setimagewhitepoint|imagick_setinterlacescheme|imagick_setiteratorindex|imagick_setlastiterator|' +
+ 'imagick_setoption|imagick_setpage|imagick_setpointsize|imagick_setresolution|imagick_setresourcelimit|imagick_setsamplingfactors|' +
+ 'imagick_setsize|imagick_setsizeoffset|imagick_settype|imagick_shadeimage|imagick_shadowimage|imagick_sharpenimage|imagick_shaveimage|' +
+ 'imagick_shearimage|imagick_sigmoidalcontrastimage|imagick_sketchimage|imagick_solarizeimage|imagick_spliceimage|imagick_spreadimage|' +
+ 'imagick_steganoimage|imagick_stereoimage|imagick_stripimage|imagick_swirlimage|imagick_textureimage|imagick_thresholdimage|' +
+ 'imagick_thumbnailimage|imagick_tintimage|imagick_transformimage|imagick_transparentpaintimage|imagick_transposeimage|' +
+ 'imagick_transverseimage|imagick_trimimage|imagick_uniqueimagecolors|imagick_unsharpmaskimage|imagick_valid|imagick_vignetteimage|' +
+ 'imagick_waveimage|imagick_whitethresholdimage|imagick_writeimage|imagick_writeimagefile|imagick_writeimages|imagick_writeimagesfile|' +
+ 'imagickdraw|imagickdraw_affine|imagickdraw_annotation|imagickdraw_arc|imagickdraw_bezier|imagickdraw_circle|imagickdraw_clear|' +
+ 'imagickdraw_clone|imagickdraw_color|imagickdraw_comment|imagickdraw_composite|imagickdraw_construct|imagickdraw_destroy|' +
+ 'imagickdraw_ellipse|imagickdraw_getclippath|imagickdraw_getcliprule|imagickdraw_getclipunits|imagickdraw_getfillcolor|' +
+ 'imagickdraw_getfillopacity|imagickdraw_getfillrule|imagickdraw_getfont|imagickdraw_getfontfamily|imagickdraw_getfontsize|' +
+ 'imagickdraw_getfontstyle|imagickdraw_getfontweight|imagickdraw_getgravity|imagickdraw_getstrokeantialias|imagickdraw_getstrokecolor|' +
+ 'imagickdraw_getstrokedasharray|imagickdraw_getstrokedashoffset|imagickdraw_getstrokelinecap|imagickdraw_getstrokelinejoin|' +
+ 'imagickdraw_getstrokemiterlimit|imagickdraw_getstrokeopacity|imagickdraw_getstrokewidth|imagickdraw_gettextalignment|' +
+ 'imagickdraw_gettextantialias|imagickdraw_gettextdecoration|imagickdraw_gettextencoding|imagickdraw_gettextundercolor|' +
+ 'imagickdraw_getvectorgraphics|imagickdraw_line|imagickdraw_matte|imagickdraw_pathclose|imagickdraw_pathcurvetoabsolute|' +
+ 'imagickdraw_pathcurvetoquadraticbezierabsolute|imagickdraw_pathcurvetoquadraticbezierrelative|' +
+ 'imagickdraw_pathcurvetoquadraticbeziersmoothabsolute|imagickdraw_pathcurvetoquadraticbeziersmoothrelative|imagickdraw_pathcurvetorelative|' +
+ 'imagickdraw_pathcurvetosmoothabsolute|imagickdraw_pathcurvetosmoothrelative|imagickdraw_pathellipticarcabsolute|' +
+ 'imagickdraw_pathellipticarcrelative|imagickdraw_pathfinish|imagickdraw_pathlinetoabsolute|imagickdraw_pathlinetohorizontalabsolute|' +
+ 'imagickdraw_pathlinetohorizontalrelative|imagickdraw_pathlinetorelative|imagickdraw_pathlinetoverticalabsolute|' +
+ 'imagickdraw_pathlinetoverticalrelative|imagickdraw_pathmovetoabsolute|imagickdraw_pathmovetorelative|imagickdraw_pathstart|' +
+ 'imagickdraw_point|imagickdraw_polygon|imagickdraw_polyline|imagickdraw_pop|imagickdraw_popclippath|imagickdraw_popdefs|' +
+ 'imagickdraw_poppattern|imagickdraw_push|imagickdraw_pushclippath|imagickdraw_pushdefs|imagickdraw_pushpattern|imagickdraw_rectangle|' +
+ 'imagickdraw_render|imagickdraw_rotate|imagickdraw_roundrectangle|imagickdraw_scale|imagickdraw_setclippath|imagickdraw_setcliprule|' +
+ 'imagickdraw_setclipunits|imagickdraw_setfillalpha|imagickdraw_setfillcolor|imagickdraw_setfillopacity|imagickdraw_setfillpatternurl|' +
+ 'imagickdraw_setfillrule|imagickdraw_setfont|imagickdraw_setfontfamily|imagickdraw_setfontsize|imagickdraw_setfontstretch|' +
+ 'imagickdraw_setfontstyle|imagickdraw_setfontweight|imagickdraw_setgravity|imagickdraw_setstrokealpha|imagickdraw_setstrokeantialias|' +
+ 'imagickdraw_setstrokecolor|imagickdraw_setstrokedasharray|imagickdraw_setstrokedashoffset|imagickdraw_setstrokelinecap|' +
+ 'imagickdraw_setstrokelinejoin|imagickdraw_setstrokemiterlimit|imagickdraw_setstrokeopacity|imagickdraw_setstrokepatternurl|' +
+ 'imagickdraw_setstrokewidth|imagickdraw_settextalignment|imagickdraw_settextantialias|imagickdraw_settextdecoration|' +
+ 'imagickdraw_settextencoding|imagickdraw_settextundercolor|imagickdraw_setvectorgraphics|imagickdraw_setviewbox|imagickdraw_skewx|' +
+ 'imagickdraw_skewy|imagickdraw_translate|imagickpixel|imagickpixel_clear|imagickpixel_construct|imagickpixel_destroy|imagickpixel_getcolor|' +
+ 'imagickpixel_getcolorasstring|imagickpixel_getcolorcount|imagickpixel_getcolorvalue|imagickpixel_gethsl|imagickpixel_issimilar|' +
+ 'imagickpixel_setcolor|imagickpixel_setcolorvalue|imagickpixel_sethsl|imagickpixeliterator|imagickpixeliterator_clear|' +
+ 'imagickpixeliterator_construct|imagickpixeliterator_destroy|imagickpixeliterator_getcurrentiteratorrow|' +
+ 'imagickpixeliterator_getiteratorrow|imagickpixeliterator_getnextiteratorrow|imagickpixeliterator_getpreviousiteratorrow|' +
+ 'imagickpixeliterator_newpixeliterator|imagickpixeliterator_newpixelregioniterator|imagickpixeliterator_resetiterator|' +
+ 'imagickpixeliterator_setiteratorfirstrow|imagickpixeliterator_setiteratorlastrow|imagickpixeliterator_setiteratorrow|' +
+ 'imagickpixeliterator_synciterator|imap_8bit|imap_alerts|imap_append|imap_base64|imap_binary|imap_body|imap_bodystruct|imap_check|' +
+ 'imap_clearflag_full|imap_close|imap_create|imap_createmailbox|imap_delete|imap_deletemailbox|imap_errors|imap_expunge|imap_fetch_overview|' +
+ 'imap_fetchbody|imap_fetchheader|imap_fetchmime|imap_fetchstructure|imap_fetchtext|imap_gc|imap_get_quota|imap_get_quotaroot|imap_getacl|' +
+ 'imap_getmailboxes|imap_getsubscribed|imap_header|imap_headerinfo|imap_headers|imap_last_error|imap_list|imap_listmailbox|imap_listscan|' +
+ 'imap_listsubscribed|imap_lsub|imap_mail|imap_mail_compose|imap_mail_copy|imap_mail_move|imap_mailboxmsginfo|imap_mime_header_decode|' +
+ 'imap_msgno|imap_num_msg|imap_num_recent|imap_open|imap_ping|imap_qprint|imap_rename|imap_renamemailbox|imap_reopen|' +
+ 'imap_rfc822_parse_adrlist|imap_rfc822_parse_headers|imap_rfc822_write_address|imap_savebody|imap_scan|imap_scanmailbox|imap_search|' +
+ 'imap_set_quota|imap_setacl|imap_setflag_full|imap_sort|imap_status|imap_subscribe|imap_thread|imap_timeout|imap_uid|imap_undelete|' +
+ 'imap_unsubscribe|imap_utf7_decode|imap_utf7_encode|imap_utf8|implementsinterface|implode|import_request_variables|in_array|include|' +
+ 'include_once|inclued_get_data|inet_ntop|inet_pton|infiniteiterator|ingres_autocommit|ingres_autocommit_state|ingres_charset|ingres_close|' +
+ 'ingres_commit|ingres_connect|ingres_cursor|ingres_errno|ingres_error|ingres_errsqlstate|ingres_escape_string|ingres_execute|' +
+ 'ingres_fetch_array|ingres_fetch_assoc|ingres_fetch_object|ingres_fetch_proc_return|ingres_fetch_row|ingres_field_length|ingres_field_name|' +
+ 'ingres_field_nullable|ingres_field_precision|ingres_field_scale|ingres_field_type|ingres_free_result|ingres_next_error|ingres_num_fields|' +
+ 'ingres_num_rows|ingres_pconnect|ingres_prepare|ingres_query|ingres_result_seek|ingres_rollback|ingres_set_environment|' +
+ 'ingres_unbuffered_query|ini_alter|ini_get|ini_get_all|ini_restore|ini_set|innamespace|inotify_add_watch|inotify_init|inotify_queue_len|' +
+ 'inotify_read|inotify_rm_watch|interface_exists|intl_error_name|intl_get_error_code|intl_get_error_message|intl_is_failure|' +
+ 'intldateformatter|intval|invalidargumentexception|invoke|invokeargs|ip2long|iptcembed|iptcparse|is_a|is_array|is_bool|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_uploaded_file|is_writable|is_writeable|isabstract|' +
+ 'iscloneable|isdisabled|isfinal|isinstance|isinstantiable|isinterface|isinternal|isiterateable|isset|issubclassof|isuserdefined|iterator|' +
+ 'iterator_apply|iterator_count|iterator_to_array|iteratoraggregate|iteratoriterator|java_last_exception_clear|java_last_exception_get|' +
+ 'jddayofweek|jdmonthname|jdtofrench|jdtogregorian|jdtojewish|jdtojulian|jdtounix|jewishtojd|join|jpeg2wbmp|json_decode|json_encode|' +
+ 'json_last_error|jsonserializable|judy|judy_type|judy_version|juliantojd|kadm5_chpass_principal|kadm5_create_principal|' +
+ 'kadm5_delete_principal|kadm5_destroy|kadm5_flush|kadm5_get_policies|kadm5_get_principal|kadm5_get_principals|kadm5_init_with_password|' +
+ 'kadm5_modify_principal|key|krsort|ksort|lcfirst|lcg_value|lchgrp|lchown|ldap_8859_to_t61|ldap_add|ldap_bind|ldap_close|ldap_compare|' +
+ 'ldap_connect|ldap_count_entries|ldap_delete|ldap_dn2ufn|ldap_err2str|ldap_errno|ldap_error|ldap_explode_dn|ldap_first_attribute|' +
+ 'ldap_first_entry|ldap_first_reference|ldap_free_result|ldap_get_attributes|ldap_get_dn|ldap_get_entries|ldap_get_option|ldap_get_values|' +
+ 'ldap_get_values_len|ldap_list|ldap_mod_add|ldap_mod_del|ldap_mod_replace|ldap_modify|ldap_next_attribute|ldap_next_entry|' +
+ 'ldap_next_reference|ldap_parse_reference|ldap_parse_result|ldap_read|ldap_rename|ldap_sasl_bind|ldap_search|ldap_set_option|' +
+ 'ldap_set_rebind_proc|ldap_sort|ldap_start_tls|ldap_t61_to_8859|ldap_unbind|lengthexception|levenshtein|libxml_clear_errors|' +
+ 'libxml_disable_entity_loader|libxml_get_errors|libxml_get_last_error|libxml_set_streams_context|libxml_use_internal_errors|libxmlerror|' +
+ 'limititerator|link|linkinfo|list|locale|localeconv|localtime|log|log10|log1p|logicexception|long2ip|lstat|ltrim|lzf_compress|' +
+ 'lzf_decompress|lzf_optimized_for|m_checkstatus|m_completeauthorizations|m_connect|m_connectionerror|m_deletetrans|m_destroyconn|' +
+ 'm_destroyengine|m_getcell|m_getcellbynum|m_getcommadelimited|m_getheader|m_initconn|m_initengine|m_iscommadelimited|m_maxconntimeout|' +
+ 'm_monitor|m_numcolumns|m_numrows|m_parsecommadelimited|m_responsekeys|m_responseparam|m_returnstatus|m_setblocking|m_setdropfile|m_setip|' +
+ 'm_setssl|m_setssl_cafile|m_setssl_files|m_settimeout|m_sslcert_gen_hash|m_transactionssent|m_transinqueue|m_transkeyval|m_transnew|' +
+ 'm_transsend|m_uwait|m_validateidentifier|m_verifyconnection|m_verifysslcert|magic_quotes_runtime|mail|' +
+ 'mailparse_determine_best_xfer_encoding|mailparse_msg_create|mailparse_msg_extract_part|mailparse_msg_extract_part_file|' +
+ 'mailparse_msg_extract_whole_part_file|mailparse_msg_free|mailparse_msg_get_part|mailparse_msg_get_part_data|mailparse_msg_get_structure|' +
+ 'mailparse_msg_parse|mailparse_msg_parse_file|mailparse_rfc822_parse_addresses|mailparse_stream_encode|mailparse_uudecode_all|main|max|' +
+ 'maxdb_affected_rows|maxdb_autocommit|maxdb_bind_param|maxdb_bind_result|maxdb_change_user|maxdb_character_set_name|maxdb_client_encoding|' +
+ 'maxdb_close|maxdb_close_long_data|maxdb_commit|maxdb_connect|maxdb_connect_errno|maxdb_connect_error|maxdb_data_seek|maxdb_debug|' +
+ 'maxdb_disable_reads_from_master|maxdb_disable_rpl_parse|maxdb_dump_debug_info|maxdb_embedded_connect|maxdb_enable_reads_from_master|' +
+ 'maxdb_enable_rpl_parse|maxdb_errno|maxdb_error|maxdb_escape_string|maxdb_execute|maxdb_fetch|maxdb_fetch_array|maxdb_fetch_assoc|' +
+ 'maxdb_fetch_field|maxdb_fetch_field_direct|maxdb_fetch_fields|maxdb_fetch_lengths|maxdb_fetch_object|maxdb_fetch_row|maxdb_field_count|' +
+ 'maxdb_field_seek|maxdb_field_tell|maxdb_free_result|maxdb_get_client_info|maxdb_get_client_version|maxdb_get_host_info|maxdb_get_metadata|' +
+ 'maxdb_get_proto_info|maxdb_get_server_info|maxdb_get_server_version|maxdb_info|maxdb_init|maxdb_insert_id|maxdb_kill|maxdb_master_query|' +
+ 'maxdb_more_results|maxdb_multi_query|maxdb_next_result|maxdb_num_fields|maxdb_num_rows|maxdb_options|maxdb_param_count|maxdb_ping|' +
+ 'maxdb_prepare|maxdb_query|maxdb_real_connect|maxdb_real_escape_string|maxdb_real_query|maxdb_report|maxdb_rollback|' +
+ 'maxdb_rpl_parse_enabled|maxdb_rpl_probe|maxdb_rpl_query_type|maxdb_select_db|maxdb_send_long_data|maxdb_send_query|maxdb_server_end|' +
+ 'maxdb_server_init|maxdb_set_opt|maxdb_sqlstate|maxdb_ssl_set|maxdb_stat|maxdb_stmt_affected_rows|maxdb_stmt_bind_param|' +
+ 'maxdb_stmt_bind_result|maxdb_stmt_close|maxdb_stmt_close_long_data|maxdb_stmt_data_seek|maxdb_stmt_errno|maxdb_stmt_error|' +
+ 'maxdb_stmt_execute|maxdb_stmt_fetch|maxdb_stmt_free_result|maxdb_stmt_init|maxdb_stmt_num_rows|maxdb_stmt_param_count|maxdb_stmt_prepare|' +
+ 'maxdb_stmt_reset|maxdb_stmt_result_metadata|maxdb_stmt_send_long_data|maxdb_stmt_sqlstate|maxdb_stmt_store_result|maxdb_store_result|' +
+ 'maxdb_thread_id|maxdb_thread_safe|maxdb_use_result|maxdb_warning_count|mb_check_encoding|mb_convert_case|mb_convert_encoding|' +
+ 'mb_convert_kana|mb_convert_variables|mb_decode_mimeheader|mb_decode_numericentity|mb_detect_encoding|mb_detect_order|mb_encode_mimeheader|' +
+ 'mb_encode_numericentity|mb_encoding_aliases|mb_ereg|mb_ereg_match|mb_ereg_replace|mb_ereg_search|mb_ereg_search_getpos|' +
+ 'mb_ereg_search_getregs|mb_ereg_search_init|mb_ereg_search_pos|mb_ereg_search_regs|mb_ereg_search_setpos|mb_eregi|mb_eregi_replace|' +
+ 'mb_get_info|mb_http_input|mb_http_output|mb_internal_encoding|mb_language|mb_list_encodings|mb_output_handler|mb_parse_str|' +
+ 'mb_preferred_mime_name|mb_regex_encoding|mb_regex_set_options|mb_send_mail|mb_split|mb_strcut|mb_strimwidth|mb_stripos|mb_stristr|' +
+ 'mb_strlen|mb_strpos|mb_strrchr|mb_strrichr|mb_strripos|mb_strrpos|mb_strstr|mb_strtolower|mb_strtoupper|mb_strwidth|' +
+ 'mb_substitute_character|mb_substr|mb_substr_count|mcrypt_cbc|mcrypt_cfb|mcrypt_create_iv|mcrypt_decrypt|mcrypt_ecb|' +
+ 'mcrypt_enc_get_algorithms_name|mcrypt_enc_get_block_size|mcrypt_enc_get_iv_size|mcrypt_enc_get_key_size|mcrypt_enc_get_modes_name|' +
+ 'mcrypt_enc_get_supported_key_sizes|mcrypt_enc_is_block_algorithm|mcrypt_enc_is_block_algorithm_mode|mcrypt_enc_is_block_mode|' +
+ 'mcrypt_enc_self_test|mcrypt_encrypt|mcrypt_generic|mcrypt_generic_deinit|mcrypt_generic_end|mcrypt_generic_init|mcrypt_get_block_size|' +
+ 'mcrypt_get_cipher_name|mcrypt_get_iv_size|mcrypt_get_key_size|mcrypt_list_algorithms|mcrypt_list_modes|mcrypt_module_close|' +
+ 'mcrypt_module_get_algo_block_size|mcrypt_module_get_algo_key_size|mcrypt_module_get_supported_key_sizes|mcrypt_module_is_block_algorithm|' +
+ 'mcrypt_module_is_block_algorithm_mode|mcrypt_module_is_block_mode|mcrypt_module_open|mcrypt_module_self_test|mcrypt_ofb|md5|md5_file|' +
+ 'mdecrypt_generic|memcache|memcache_debug|memcached|memory_get_peak_usage|memory_get_usage|messageformatter|metaphone|method_exists|mhash|' +
+ 'mhash_count|mhash_get_block_size|mhash_get_hash_name|mhash_keygen_s2k|microtime|mime_content_type|min|ming_keypress|' +
+ 'ming_setcubicthreshold|ming_setscale|ming_setswfcompression|ming_useconstants|ming_useswfversion|mkdir|mktime|money_format|mongo|' +
+ 'mongobindata|mongocode|mongocollection|mongoconnectionexception|mongocursor|mongocursorexception|mongocursortimeoutexception|mongodate|' +
+ 'mongodb|mongodbref|mongoexception|mongogridfs|mongogridfscursor|mongogridfsexception|mongogridfsfile|mongoid|mongoint32|mongoint64|' +
+ 'mongomaxkey|mongominkey|mongoregex|mongotimestamp|move_uploaded_file|mpegfile|mqseries_back|mqseries_begin|mqseries_close|mqseries_cmit|' +
+ 'mqseries_conn|mqseries_connx|mqseries_disc|mqseries_get|mqseries_inq|mqseries_open|mqseries_put|mqseries_put1|mqseries_set|' +
+ 'mqseries_strerror|msession_connect|msession_count|msession_create|msession_destroy|msession_disconnect|msession_find|msession_get|' +
+ 'msession_get_array|msession_get_data|msession_inc|msession_list|msession_listvar|msession_lock|msession_plugin|msession_randstr|' +
+ 'msession_set|msession_set_array|msession_set_data|msession_timeout|msession_uniq|msession_unlock|msg_get_queue|msg_queue_exists|' +
+ 'msg_receive|msg_remove_queue|msg_send|msg_set_queue|msg_stat_queue|msql|msql_affected_rows|msql_close|msql_connect|msql_create_db|' +
+ 'msql_createdb|msql_data_seek|msql_db_query|msql_dbname|msql_drop_db|msql_error|msql_fetch_array|msql_fetch_field|msql_fetch_object|' +
+ 'msql_fetch_row|msql_field_flags|msql_field_len|msql_field_name|msql_field_seek|msql_field_table|msql_field_type|msql_fieldflags|' +
+ 'msql_fieldlen|msql_fieldname|msql_fieldtable|msql_fieldtype|msql_free_result|msql_list_dbs|msql_list_fields|msql_list_tables|' +
+ 'msql_num_fields|msql_num_rows|msql_numfields|msql_numrows|msql_pconnect|msql_query|msql_regcase|msql_result|msql_select_db|msql_tablename|' +
+ 'mssql_bind|mssql_close|mssql_connect|mssql_data_seek|mssql_execute|mssql_fetch_array|mssql_fetch_assoc|mssql_fetch_batch|' +
+ 'mssql_fetch_field|mssql_fetch_object|mssql_fetch_row|mssql_field_length|mssql_field_name|mssql_field_seek|mssql_field_type|' +
+ 'mssql_free_result|mssql_free_statement|mssql_get_last_message|mssql_guid_string|mssql_init|mssql_min_error_severity|' +
+ 'mssql_min_message_severity|mssql_next_result|mssql_num_fields|mssql_num_rows|mssql_pconnect|mssql_query|mssql_result|mssql_rows_affected|' +
+ 'mssql_select_db|mt_getrandmax|mt_rand|mt_srand|multipleiterator|mysql_affected_rows|mysql_client_encoding|mysql_close|mysql_connect|' +
+ 'mysql_create_db|mysql_data_seek|mysql_db_name|mysql_db_query|mysql_drop_db|mysql_errno|mysql_error|mysql_escape_string|mysql_fetch_array|' +
+ 'mysql_fetch_assoc|mysql_fetch_field|mysql_fetch_lengths|mysql_fetch_object|mysql_fetch_row|mysql_field_flags|mysql_field_len|' +
+ 'mysql_field_name|mysql_field_seek|mysql_field_table|mysql_field_type|mysql_free_result|mysql_get_client_info|mysql_get_host_info|' +
+ 'mysql_get_proto_info|mysql_get_server_info|mysql_info|mysql_insert_id|mysql_list_dbs|mysql_list_fields|mysql_list_processes|' +
+ 'mysql_list_tables|mysql_num_fields|mysql_num_rows|mysql_pconnect|mysql_ping|mysql_query|mysql_real_escape_string|mysql_result|' +
+ 'mysql_select_db|mysql_set_charset|mysql_stat|mysql_tablename|mysql_thread_id|mysql_unbuffered_query|mysqli|mysqli_bind_param|' +
+ 'mysqli_bind_result|mysqli_client_encoding|mysqli_connect|mysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_driver|' +
+ 'mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_escape_string|mysqli_execute|mysqli_fetch|mysqli_get_metadata|' +
+ 'mysqli_master_query|mysqli_param_count|mysqli_report|mysqli_result|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|' +
+ 'mysqli_send_long_data|mysqli_send_query|mysqli_set_opt|mysqli_slave_query|mysqli_stmt|mysqli_warning|mysqlnd_ms_get_stats|' +
+ 'mysqlnd_ms_query_is_select|mysqlnd_ms_set_user_pick_server|mysqlnd_qc_change_handler|mysqlnd_qc_clear_cache|mysqlnd_qc_get_cache_info|' +
+ 'mysqlnd_qc_get_core_stats|mysqlnd_qc_get_handler|mysqlnd_qc_get_query_trace_log|mysqlnd_qc_set_user_handlers|natcasesort|natsort|' +
+ 'ncurses_addch|ncurses_addchnstr|ncurses_addchstr|ncurses_addnstr|ncurses_addstr|ncurses_assume_default_colors|ncurses_attroff|' +
+ 'ncurses_attron|ncurses_attrset|ncurses_baudrate|ncurses_beep|ncurses_bkgd|ncurses_bkgdset|ncurses_border|ncurses_bottom_panel|' +
+ 'ncurses_can_change_color|ncurses_cbreak|ncurses_clear|ncurses_clrtobot|ncurses_clrtoeol|ncurses_color_content|ncurses_color_set|' +
+ 'ncurses_curs_set|ncurses_def_prog_mode|ncurses_def_shell_mode|ncurses_define_key|ncurses_del_panel|ncurses_delay_output|ncurses_delch|' +
+ 'ncurses_deleteln|ncurses_delwin|ncurses_doupdate|ncurses_echo|ncurses_echochar|ncurses_end|ncurses_erase|ncurses_erasechar|ncurses_filter|' +
+ 'ncurses_flash|ncurses_flushinp|ncurses_getch|ncurses_getmaxyx|ncurses_getmouse|ncurses_getyx|ncurses_halfdelay|ncurses_has_colors|' +
+ 'ncurses_has_ic|ncurses_has_il|ncurses_has_key|ncurses_hide_panel|ncurses_hline|ncurses_inch|ncurses_init|ncurses_init_color|' +
+ 'ncurses_init_pair|ncurses_insch|ncurses_insdelln|ncurses_insertln|ncurses_insstr|ncurses_instr|ncurses_isendwin|ncurses_keyok|' +
+ 'ncurses_keypad|ncurses_killchar|ncurses_longname|ncurses_meta|ncurses_mouse_trafo|ncurses_mouseinterval|ncurses_mousemask|ncurses_move|' +
+ 'ncurses_move_panel|ncurses_mvaddch|ncurses_mvaddchnstr|ncurses_mvaddchstr|ncurses_mvaddnstr|ncurses_mvaddstr|ncurses_mvcur|' +
+ 'ncurses_mvdelch|ncurses_mvgetch|ncurses_mvhline|ncurses_mvinch|ncurses_mvvline|ncurses_mvwaddstr|ncurses_napms|ncurses_new_panel|' +
+ 'ncurses_newpad|ncurses_newwin|ncurses_nl|ncurses_nocbreak|ncurses_noecho|ncurses_nonl|ncurses_noqiflush|ncurses_noraw|' +
+ 'ncurses_pair_content|ncurses_panel_above|ncurses_panel_below|ncurses_panel_window|ncurses_pnoutrefresh|ncurses_prefresh|ncurses_putp|' +
+ 'ncurses_qiflush|ncurses_raw|ncurses_refresh|ncurses_replace_panel|ncurses_reset_prog_mode|ncurses_reset_shell_mode|ncurses_resetty|' +
+ 'ncurses_savetty|ncurses_scr_dump|ncurses_scr_init|ncurses_scr_restore|ncurses_scr_set|ncurses_scrl|ncurses_show_panel|ncurses_slk_attr|' +
+ 'ncurses_slk_attroff|ncurses_slk_attron|ncurses_slk_attrset|ncurses_slk_clear|ncurses_slk_color|ncurses_slk_init|ncurses_slk_noutrefresh|' +
+ 'ncurses_slk_refresh|ncurses_slk_restore|ncurses_slk_set|ncurses_slk_touch|ncurses_standend|ncurses_standout|ncurses_start_color|' +
+ 'ncurses_termattrs|ncurses_termname|ncurses_timeout|ncurses_top_panel|ncurses_typeahead|ncurses_ungetch|ncurses_ungetmouse|' +
+ 'ncurses_update_panels|ncurses_use_default_colors|ncurses_use_env|ncurses_use_extended_names|ncurses_vidattr|ncurses_vline|ncurses_waddch|' +
+ 'ncurses_waddstr|ncurses_wattroff|ncurses_wattron|ncurses_wattrset|ncurses_wborder|ncurses_wclear|ncurses_wcolor_set|ncurses_werase|' +
+ 'ncurses_wgetch|ncurses_whline|ncurses_wmouse_trafo|ncurses_wmove|ncurses_wnoutrefresh|ncurses_wrefresh|ncurses_wstandend|' +
+ 'ncurses_wstandout|ncurses_wvline|newinstance|newinstanceargs|newt_bell|newt_button|newt_button_bar|newt_centered_window|newt_checkbox|' +
+ 'newt_checkbox_get_value|newt_checkbox_set_flags|newt_checkbox_set_value|newt_checkbox_tree|newt_checkbox_tree_add_item|' +
+ 'newt_checkbox_tree_find_item|newt_checkbox_tree_get_current|newt_checkbox_tree_get_entry_value|newt_checkbox_tree_get_multi_selection|' +
+ 'newt_checkbox_tree_get_selection|newt_checkbox_tree_multi|newt_checkbox_tree_set_current|newt_checkbox_tree_set_entry|' +
+ 'newt_checkbox_tree_set_entry_value|newt_checkbox_tree_set_width|newt_clear_key_buffer|newt_cls|newt_compact_button|' +
+ 'newt_component_add_callback|newt_component_takes_focus|newt_create_grid|newt_cursor_off|newt_cursor_on|newt_delay|newt_draw_form|' +
+ 'newt_draw_root_text|newt_entry|newt_entry_get_value|newt_entry_set|newt_entry_set_filter|newt_entry_set_flags|newt_finished|newt_form|' +
+ 'newt_form_add_component|newt_form_add_components|newt_form_add_hot_key|newt_form_destroy|newt_form_get_current|newt_form_run|' +
+ 'newt_form_set_background|newt_form_set_height|newt_form_set_size|newt_form_set_timer|newt_form_set_width|newt_form_watch_fd|' +
+ 'newt_get_screen_size|newt_grid_add_components_to_form|newt_grid_basic_window|newt_grid_free|newt_grid_get_size|newt_grid_h_close_stacked|' +
+ 'newt_grid_h_stacked|newt_grid_place|newt_grid_set_field|newt_grid_simple_window|newt_grid_v_close_stacked|newt_grid_v_stacked|' +
+ 'newt_grid_wrapped_window|newt_grid_wrapped_window_at|newt_init|newt_label|newt_label_set_text|newt_listbox|newt_listbox_append_entry|' +
+ 'newt_listbox_clear|newt_listbox_clear_selection|newt_listbox_delete_entry|newt_listbox_get_current|newt_listbox_get_selection|' +
+ 'newt_listbox_insert_entry|newt_listbox_item_count|newt_listbox_select_item|newt_listbox_set_current|newt_listbox_set_current_by_key|' +
+ 'newt_listbox_set_data|newt_listbox_set_entry|newt_listbox_set_width|newt_listitem|newt_listitem_get_data|newt_listitem_set|' +
+ 'newt_open_window|newt_pop_help_line|newt_pop_window|newt_push_help_line|newt_radio_get_current|newt_radiobutton|newt_redraw_help_line|' +
+ 'newt_reflow_text|newt_refresh|newt_resize_screen|newt_resume|newt_run_form|newt_scale|newt_scale_set|newt_scrollbar_set|' +
+ 'newt_set_help_callback|newt_set_suspend_callback|newt_suspend|newt_textbox|newt_textbox_get_num_lines|newt_textbox_reflowed|' +
+ 'newt_textbox_set_height|newt_textbox_set_text|newt_vertical_scrollbar|newt_wait_for_key|newt_win_choice|newt_win_entries|newt_win_menu|' +
+ 'newt_win_message|newt_win_messagev|newt_win_ternary|next|ngettext|nl2br|nl_langinfo|norewinditerator|normalizer|notes_body|notes_copy_db|' +
+ 'notes_create_db|notes_create_note|notes_drop_db|notes_find_note|notes_header_info|notes_list_msgs|notes_mark_read|notes_mark_unread|' +
+ 'notes_nav_create|notes_search|notes_unread|notes_version|nsapi_request_headers|nsapi_response_headers|nsapi_virtual|nthmac|number_format|' +
+ 'numberformatter|oauth|oauth_get_sbs|oauth_urlencode|oauthexception|oauthprovider|ob_clean|ob_deflatehandler|ob_end_clean|ob_end_flush|' +
+ 'ob_etaghandler|ob_flush|ob_get_clean|ob_get_contents|ob_get_flush|ob_get_length|ob_get_level|ob_get_status|ob_gzhandler|ob_iconv_handler|' +
+ 'ob_implicit_flush|ob_inflatehandler|ob_list_handlers|ob_start|ob_tidyhandler|oci_bind_array_by_name|oci_bind_by_name|oci_cancel|' +
+ 'oci_client_version|oci_close|oci_collection_append|oci_collection_assign|oci_collection_element_assign|oci_collection_element_get|' +
+ 'oci_collection_free|oci_collection_max|oci_collection_size|oci_collection_trim|oci_commit|oci_connect|oci_define_by_name|oci_error|' +
+ 'oci_execute|oci_fetch|oci_fetch_all|oci_fetch_array|oci_fetch_assoc|oci_fetch_object|oci_fetch_row|oci_field_is_null|oci_field_name|' +
+ 'oci_field_precision|oci_field_scale|oci_field_size|oci_field_type|oci_field_type_raw|oci_free_statement|oci_internal_debug|oci_lob_append|' +
+ 'oci_lob_close|oci_lob_copy|oci_lob_eof|oci_lob_erase|oci_lob_export|oci_lob_flush|oci_lob_free|oci_lob_getbuffering|oci_lob_import|' +
+ 'oci_lob_is_equal|oci_lob_load|oci_lob_read|oci_lob_rewind|oci_lob_save|oci_lob_savefile|oci_lob_seek|oci_lob_setbuffering|oci_lob_size|' +
+ 'oci_lob_tell|oci_lob_truncate|oci_lob_write|oci_lob_writetemporary|oci_lob_writetofile|oci_new_collection|oci_new_connect|oci_new_cursor|' +
+ 'oci_new_descriptor|oci_num_fields|oci_num_rows|oci_parse|oci_password_change|oci_pconnect|oci_result|oci_rollback|oci_server_version|' +
+ 'oci_set_action|oci_set_client_identifier|oci_set_client_info|oci_set_edition|oci_set_module_name|oci_set_prefetch|oci_statement_type|' +
+ 'ocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|ocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|' +
+ 'ocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|ocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|' +
+ 'ocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|ocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|' +
+ 'ociloadlob|ocilogoff|ocilogon|ocinewcollection|ocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|' +
+ 'ocirollback|ocirowcount|ocisavelob|ocisavelobfile|ociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|' +
+ 'octdec|odbc_autocommit|odbc_binmode|odbc_close|odbc_close_all|odbc_columnprivileges|odbc_columns|odbc_commit|odbc_connect|odbc_cursor|' +
+ 'odbc_data_source|odbc_do|odbc_error|odbc_errormsg|odbc_exec|odbc_execute|odbc_fetch_array|odbc_fetch_into|odbc_fetch_object|' +
+ 'odbc_fetch_row|odbc_field_len|odbc_field_name|odbc_field_num|odbc_field_precision|odbc_field_scale|odbc_field_type|odbc_foreignkeys|' +
+ 'odbc_free_result|odbc_gettypeinfo|odbc_longreadlen|odbc_next_result|odbc_num_fields|odbc_num_rows|odbc_pconnect|odbc_prepare|' +
+ 'odbc_primarykeys|odbc_procedurecolumns|odbc_procedures|odbc_result|odbc_result_all|odbc_rollback|odbc_setoption|odbc_specialcolumns|' +
+ 'odbc_statistics|odbc_tableprivileges|odbc_tables|openal_buffer_create|openal_buffer_data|openal_buffer_destroy|openal_buffer_get|' +
+ 'openal_buffer_loadwav|openal_context_create|openal_context_current|openal_context_destroy|openal_context_process|openal_context_suspend|' +
+ 'openal_device_close|openal_device_open|openal_listener_get|openal_listener_set|openal_source_create|openal_source_destroy|' +
+ 'openal_source_get|openal_source_pause|openal_source_play|openal_source_rewind|openal_source_set|openal_source_stop|openal_stream|opendir|' +
+ 'openlog|openssl_cipher_iv_length|openssl_csr_export|openssl_csr_export_to_file|openssl_csr_get_public_key|openssl_csr_get_subject|' +
+ 'openssl_csr_new|openssl_csr_sign|openssl_decrypt|openssl_dh_compute_key|openssl_digest|openssl_encrypt|openssl_error_string|' +
+ 'openssl_free_key|openssl_get_cipher_methods|openssl_get_md_methods|openssl_get_privatekey|openssl_get_publickey|openssl_open|' +
+ 'openssl_pkcs12_export|openssl_pkcs12_export_to_file|openssl_pkcs12_read|openssl_pkcs7_decrypt|openssl_pkcs7_encrypt|openssl_pkcs7_sign|' +
+ 'openssl_pkcs7_verify|openssl_pkey_export|openssl_pkey_export_to_file|openssl_pkey_free|openssl_pkey_get_details|openssl_pkey_get_private|' +
+ 'openssl_pkey_get_public|openssl_pkey_new|openssl_private_decrypt|openssl_private_encrypt|openssl_public_decrypt|openssl_public_encrypt|' +
+ 'openssl_random_pseudo_bytes|openssl_seal|openssl_sign|openssl_verify|openssl_x509_check_private_key|openssl_x509_checkpurpose|' +
+ 'openssl_x509_export|openssl_x509_export_to_file|openssl_x509_free|openssl_x509_parse|openssl_x509_read|ord|outeriterator|' +
+ 'outofboundsexception|outofrangeexception|output_add_rewrite_var|output_reset_rewrite_vars|overflowexception|overload|override_function|' +
+ 'ovrimos_close|ovrimos_commit|ovrimos_connect|ovrimos_cursor|ovrimos_exec|ovrimos_execute|ovrimos_fetch_into|ovrimos_fetch_row|' +
+ 'ovrimos_field_len|ovrimos_field_name|ovrimos_field_num|ovrimos_field_type|ovrimos_free_result|ovrimos_longreadlen|ovrimos_num_fields|' +
+ 'ovrimos_num_rows|ovrimos_prepare|ovrimos_result|ovrimos_result_all|ovrimos_rollback|pack|parentiterator|parse_ini_file|parse_ini_string|' +
+ 'parse_str|parse_url|parsekit_compile_file|parsekit_compile_string|parsekit_func_arginfo|passthru|pathinfo|pclose|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|' +
+ 'pdf_activate_item|pdf_add_annotation|pdf_add_bookmark|pdf_add_launchlink|pdf_add_locallink|pdf_add_nameddest|pdf_add_note|pdf_add_outline|' +
+ 'pdf_add_pdflink|pdf_add_table_cell|pdf_add_textflow|pdf_add_thumbnail|pdf_add_weblink|pdf_arc|pdf_arcn|pdf_attach_file|pdf_begin_document|' +
+ 'pdf_begin_font|pdf_begin_glyph|pdf_begin_item|pdf_begin_layer|pdf_begin_page|pdf_begin_page_ext|pdf_begin_pattern|pdf_begin_template|' +
+ 'pdf_begin_template_ext|pdf_circle|pdf_clip|pdf_close|pdf_close_image|pdf_close_pdi|pdf_close_pdi_page|pdf_closepath|' +
+ 'pdf_closepath_fill_stroke|pdf_closepath_stroke|pdf_concat|pdf_continue_text|pdf_create_3dview|pdf_create_action|pdf_create_annotation|' +
+ 'pdf_create_bookmark|pdf_create_field|pdf_create_fieldgroup|pdf_create_gstate|pdf_create_pvf|pdf_create_textflow|pdf_curveto|' +
+ 'pdf_define_layer|pdf_delete|pdf_delete_pvf|pdf_delete_table|pdf_delete_textflow|pdf_encoding_set_char|pdf_end_document|pdf_end_font|' +
+ 'pdf_end_glyph|pdf_end_item|pdf_end_layer|pdf_end_page|pdf_end_page_ext|pdf_end_pattern|pdf_end_template|pdf_endpath|pdf_fill|' +
+ 'pdf_fill_imageblock|pdf_fill_pdfblock|pdf_fill_stroke|pdf_fill_textblock|pdf_findfont|pdf_fit_image|pdf_fit_pdi_page|pdf_fit_table|' +
+ 'pdf_fit_textflow|pdf_fit_textline|pdf_get_apiname|pdf_get_buffer|pdf_get_errmsg|pdf_get_errnum|pdf_get_font|pdf_get_fontname|' +
+ 'pdf_get_fontsize|pdf_get_image_height|pdf_get_image_width|pdf_get_majorversion|pdf_get_minorversion|pdf_get_parameter|' +
+ 'pdf_get_pdi_parameter|pdf_get_pdi_value|pdf_get_value|pdf_info_font|pdf_info_matchbox|pdf_info_table|pdf_info_textflow|pdf_info_textline|' +
+ 'pdf_initgraphics|pdf_lineto|pdf_load_3ddata|pdf_load_font|pdf_load_iccprofile|pdf_load_image|pdf_makespotcolor|pdf_moveto|pdf_new|' +
+ 'pdf_open_ccitt|pdf_open_file|pdf_open_gif|pdf_open_image|pdf_open_image_file|pdf_open_jpeg|pdf_open_memory_image|pdf_open_pdi|' +
+ 'pdf_open_pdi_document|pdf_open_pdi_page|pdf_open_tiff|pdf_pcos_get_number|pdf_pcos_get_stream|pdf_pcos_get_string|pdf_place_image|' +
+ 'pdf_place_pdi_page|pdf_process_pdi|pdf_rect|pdf_restore|pdf_resume_page|pdf_rotate|pdf_save|pdf_scale|pdf_set_border_color|' +
+ 'pdf_set_border_dash|pdf_set_border_style|pdf_set_char_spacing|pdf_set_duration|pdf_set_gstate|pdf_set_horiz_scaling|pdf_set_info|' +
+ 'pdf_set_info_author|pdf_set_info_creator|pdf_set_info_keywords|pdf_set_info_subject|pdf_set_info_title|pdf_set_layer_dependency|' +
+ 'pdf_set_leading|pdf_set_parameter|pdf_set_text_matrix|pdf_set_text_pos|pdf_set_text_rendering|pdf_set_text_rise|pdf_set_value|' +
+ 'pdf_set_word_spacing|pdf_setcolor|pdf_setdash|pdf_setdashpattern|pdf_setflat|pdf_setfont|pdf_setgray|pdf_setgray_fill|pdf_setgray_stroke|' +
+ 'pdf_setlinecap|pdf_setlinejoin|pdf_setlinewidth|pdf_setmatrix|pdf_setmiterlimit|pdf_setpolydash|pdf_setrgbcolor|pdf_setrgbcolor_fill|' +
+ 'pdf_setrgbcolor_stroke|pdf_shading|pdf_shading_pattern|pdf_shfill|pdf_show|pdf_show_boxed|pdf_show_xy|pdf_skew|pdf_stringwidth|pdf_stroke|' +
+ 'pdf_suspend_page|pdf_translate|pdf_utf16_to_utf8|pdf_utf32_to_utf16|pdf_utf8_to_utf16|pdo|pdo_cubrid_schema|pdo_pgsqllobcreate|' +
+ 'pdo_pgsqllobopen|pdo_pgsqllobunlink|pdo_sqlitecreateaggregate|pdo_sqlitecreatefunction|pdoexception|pdostatement|pfsockopen|' +
+ 'pg_affected_rows|pg_cancel_query|pg_client_encoding|pg_close|pg_connect|pg_connection_busy|pg_connection_reset|pg_connection_status|' +
+ 'pg_convert|pg_copy_from|pg_copy_to|pg_dbname|pg_delete|pg_end_copy|pg_escape_bytea|pg_escape_string|pg_execute|pg_fetch_all|' +
+ 'pg_fetch_all_columns|pg_fetch_array|pg_fetch_assoc|pg_fetch_object|pg_fetch_result|pg_fetch_row|pg_field_is_null|pg_field_name|' +
+ 'pg_field_num|pg_field_prtlen|pg_field_size|pg_field_table|pg_field_type|pg_field_type_oid|pg_free_result|pg_get_notify|pg_get_pid|' +
+ 'pg_get_result|pg_host|pg_insert|pg_last_error|pg_last_notice|pg_last_oid|pg_lo_close|pg_lo_create|pg_lo_export|pg_lo_import|pg_lo_open|' +
+ 'pg_lo_read|pg_lo_read_all|pg_lo_seek|pg_lo_tell|pg_lo_unlink|pg_lo_write|pg_meta_data|pg_num_fields|pg_num_rows|pg_options|' +
+ 'pg_parameter_status|pg_pconnect|pg_ping|pg_port|pg_prepare|pg_put_line|pg_query|pg_query_params|pg_result_error|pg_result_error_field|' +
+ 'pg_result_seek|pg_result_status|pg_select|pg_send_execute|pg_send_prepare|pg_send_query|pg_send_query_params|pg_set_client_encoding|' +
+ 'pg_set_error_verbosity|pg_trace|pg_transaction_status|pg_tty|pg_unescape_bytea|pg_untrace|pg_update|pg_version|php_check_syntax|' +
+ 'php_ini_loaded_file|php_ini_scanned_files|php_logo_guid|php_sapi_name|php_strip_whitespace|php_uname|phpcredits|phpinfo|phpversion|pi|' +
+ 'png2wbmp|popen|pos|posix_access|posix_ctermid|posix_errno|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|pow|preg_filter|' +
+ 'preg_grep|preg_last_error|preg_match|preg_match_all|preg_quote|preg_replace|preg_replace_callback|preg_split|prev|print|print_r|' +
+ 'printer_abort|printer_close|printer_create_brush|printer_create_dc|printer_create_font|printer_create_pen|printer_delete_brush|' +
+ 'printer_delete_dc|printer_delete_font|printer_delete_pen|printer_draw_bmp|printer_draw_chord|printer_draw_elipse|printer_draw_line|' +
+ 'printer_draw_pie|printer_draw_rectangle|printer_draw_roundrect|printer_draw_text|printer_end_doc|printer_end_page|printer_get_option|' +
+ 'printer_list|printer_logical_fontheight|printer_open|printer_select_brush|printer_select_font|printer_select_pen|printer_set_option|' +
+ 'printer_start_doc|printer_start_page|printer_write|printf|proc_close|proc_get_status|proc_nice|proc_open|proc_terminate|property_exists|' +
+ 'ps_add_bookmark|ps_add_launchlink|ps_add_locallink|ps_add_note|ps_add_pdflink|ps_add_weblink|ps_arc|ps_arcn|ps_begin_page|' +
+ 'ps_begin_pattern|ps_begin_template|ps_circle|ps_clip|ps_close|ps_close_image|ps_closepath|ps_closepath_stroke|ps_continue_text|ps_curveto|' +
+ 'ps_delete|ps_end_page|ps_end_pattern|ps_end_template|ps_fill|ps_fill_stroke|ps_findfont|ps_get_buffer|ps_get_parameter|ps_get_value|' +
+ 'ps_hyphenate|ps_include_file|ps_lineto|ps_makespotcolor|ps_moveto|ps_new|ps_open_file|ps_open_image|ps_open_image_file|' +
+ 'ps_open_memory_image|ps_place_image|ps_rect|ps_restore|ps_rotate|ps_save|ps_scale|ps_set_border_color|ps_set_border_dash|' +
+ 'ps_set_border_style|ps_set_info|ps_set_parameter|ps_set_text_pos|ps_set_value|ps_setcolor|ps_setdash|ps_setflat|ps_setfont|ps_setgray|' +
+ 'ps_setlinecap|ps_setlinejoin|ps_setlinewidth|ps_setmiterlimit|ps_setoverprintmode|ps_setpolydash|ps_shading|ps_shading_pattern|ps_shfill|' +
+ 'ps_show|ps_show2|ps_show_boxed|ps_show_xy|ps_show_xy2|ps_string_geometry|ps_stringwidth|ps_stroke|ps_symbol|ps_symbol_name|' +
+ 'ps_symbol_width|ps_translate|pspell_add_to_personal|pspell_add_to_session|pspell_check|pspell_clear_session|pspell_config_create|' +
+ 'pspell_config_data_dir|pspell_config_dict_dir|pspell_config_ignore|pspell_config_mode|pspell_config_personal|pspell_config_repl|' +
+ 'pspell_config_runtogether|pspell_config_save_repl|pspell_new|pspell_new_config|pspell_new_personal|pspell_save_wordlist|' +
+ 'pspell_store_replacement|pspell_suggest|putenv|px_close|px_create_fp|px_date2string|px_delete|px_delete_record|px_get_field|px_get_info|' +
+ 'px_get_parameter|px_get_record|px_get_schema|px_get_value|px_insert_record|px_new|px_numfields|px_numrecords|px_open_fp|px_put_record|' +
+ 'px_retrieve_record|px_set_blob_file|px_set_parameter|px_set_tablename|px_set_targetencoding|px_set_value|px_timestamp2string|' +
+ 'px_update_record|qdom_error|qdom_tree|quoted_printable_decode|quoted_printable_encode|quotemeta|rad2deg|radius_acct_open|' +
+ 'radius_add_server|radius_auth_open|radius_close|radius_config|radius_create_request|radius_cvt_addr|radius_cvt_int|radius_cvt_string|' +
+ 'radius_demangle|radius_demangle_mppe_key|radius_get_attr|radius_get_vendor_attr|radius_put_addr|radius_put_attr|radius_put_int|' +
+ 'radius_put_string|radius_put_vendor_addr|radius_put_vendor_attr|radius_put_vendor_int|radius_put_vendor_string|' +
+ 'radius_request_authenticator|radius_send_request|radius_server_secret|radius_strerror|rand|range|rangeexception|rar_wrapper_cache_stats|' +
+ 'rararchive|rarentry|rarexception|rawurldecode|rawurlencode|read_exif_data|readdir|readfile|readgzfile|readline|readline_add_history|' +
+ 'readline_callback_handler_install|readline_callback_handler_remove|readline_callback_read_char|readline_clear_history|' +
+ 'readline_completion_function|readline_info|readline_list_history|readline_on_new_line|readline_read_history|readline_redisplay|' +
+ 'readline_write_history|readlink|realpath|realpath_cache_get|realpath_cache_size|recode|recode_file|recode_string|recursivearrayiterator|' +
+ 'recursivecachingiterator|recursivecallbackfilteriterator|recursivedirectoryiterator|recursivefilteriterator|recursiveiterator|' +
+ 'recursiveiteratoriterator|recursiveregexiterator|recursivetreeiterator|reflection|reflectionclass|reflectionexception|reflectionextension|' +
+ 'reflectionfunction|reflectionfunctionabstract|reflectionmethod|reflectionobject|reflectionparameter|reflectionproperty|reflector|' +
+ 'regexiterator|register_shutdown_function|register_tick_function|rename|rename_function|require|require_once|reset|resetValue|' +
+ 'resourcebundle|restore_error_handler|restore_exception_handler|restore_include_path|return|rewind|rewinddir|rmdir|round|rpm_close|' +
+ 'rpm_get_tag|rpm_is_valid|rpm_open|rpm_version|rrd_create|rrd_error|rrd_fetch|rrd_first|rrd_graph|rrd_info|rrd_last|rrd_lastupdate|' +
+ 'rrd_restore|rrd_tune|rrd_update|rrd_xport|rrdcreator|rrdgraph|rrdupdater|rsort|rtrim|runkit_class_adopt|runkit_class_emancipate|' +
+ 'runkit_constant_add|runkit_constant_redefine|runkit_constant_remove|runkit_function_add|runkit_function_copy|runkit_function_redefine|' +
+ 'runkit_function_remove|runkit_function_rename|runkit_import|runkit_lint|runkit_lint_file|runkit_method_add|runkit_method_copy|' +
+ 'runkit_method_redefine|runkit_method_remove|runkit_method_rename|runkit_return_value_used|runkit_sandbox_output_handler|' +
+ 'runkit_superglobals|runtimeexception|samconnection_commit|samconnection_connect|samconnection_constructor|samconnection_disconnect|' +
+ 'samconnection_errno|samconnection_error|samconnection_isconnected|samconnection_peek|samconnection_peekall|samconnection_receive|' +
+ 'samconnection_remove|samconnection_rollback|samconnection_send|samconnection_setDebug|samconnection_subscribe|samconnection_unsubscribe|' +
+ 'sammessage_body|sammessage_constructor|sammessage_header|sca_createdataobject|sca_getservice|sca_localproxy_createdataobject|' +
+ 'sca_soapproxy_createdataobject|scandir|sdo_das_changesummary_beginlogging|sdo_das_changesummary_endlogging|' +
+ 'sdo_das_changesummary_getchangeddataobjects|sdo_das_changesummary_getchangetype|sdo_das_changesummary_getoldcontainer|' +
+ 'sdo_das_changesummary_getoldvalues|sdo_das_changesummary_islogging|sdo_das_datafactory_addpropertytotype|sdo_das_datafactory_addtype|' +
+ 'sdo_das_datafactory_getdatafactory|sdo_das_dataobject_getchangesummary|sdo_das_relational_applychanges|sdo_das_relational_construct|' +
+ 'sdo_das_relational_createrootdataobject|sdo_das_relational_executepreparedquery|sdo_das_relational_executequery|' +
+ 'sdo_das_setting_getlistindex|sdo_das_setting_getpropertyindex|sdo_das_setting_getpropertyname|sdo_das_setting_getvalue|' +
+ 'sdo_das_setting_isset|sdo_das_xml_addtypes|sdo_das_xml_create|sdo_das_xml_createdataobject|sdo_das_xml_createdocument|' +
+ 'sdo_das_xml_document_getrootdataobject|sdo_das_xml_document_getrootelementname|sdo_das_xml_document_getrootelementuri|' +
+ 'sdo_das_xml_document_setencoding|sdo_das_xml_document_setxmldeclaration|sdo_das_xml_document_setxmlversion|sdo_das_xml_loadfile|' +
+ 'sdo_das_xml_loadstring|sdo_das_xml_savefile|sdo_das_xml_savestring|sdo_datafactory_create|sdo_dataobject_clear|' +
+ 'sdo_dataobject_createdataobject|sdo_dataobject_getcontainer|sdo_dataobject_getsequence|sdo_dataobject_gettypename|' +
+ 'sdo_dataobject_gettypenamespaceuri|sdo_exception_getcause|sdo_list_insert|sdo_model_property_getcontainingtype|' +
+ 'sdo_model_property_getdefault|sdo_model_property_getname|sdo_model_property_gettype|sdo_model_property_iscontainment|' +
+ 'sdo_model_property_ismany|sdo_model_reflectiondataobject_construct|sdo_model_reflectiondataobject_export|' +
+ 'sdo_model_reflectiondataobject_getcontainmentproperty|sdo_model_reflectiondataobject_getinstanceproperties|' +
+ 'sdo_model_reflectiondataobject_gettype|sdo_model_type_getbasetype|sdo_model_type_getname|sdo_model_type_getnamespaceuri|' +
+ 'sdo_model_type_getproperties|sdo_model_type_getproperty|sdo_model_type_isabstracttype|sdo_model_type_isdatatype|sdo_model_type_isinstance|' +
+ 'sdo_model_type_isopentype|sdo_model_type_issequencedtype|sdo_sequence_getproperty|sdo_sequence_insert|sdo_sequence_move|seekableiterator|' +
+ 'sem_acquire|sem_get|sem_release|sem_remove|serializable|serialize|session_cache_expire|session_cache_limiter|session_commit|' +
+ 'session_decode|session_destroy|session_encode|session_get_cookie_params|session_id|session_is_registered|session_module_name|session_name|' +
+ 'session_pgsql_add_error|session_pgsql_get_error|session_pgsql_get_field|session_pgsql_reset|session_pgsql_set_field|session_pgsql_status|' +
+ 'session_regenerate_id|session_register|session_save_path|session_set_cookie_params|session_set_save_handler|session_start|' +
+ 'session_unregister|session_unset|session_write_close|setCounterClass|set_error_handler|set_exception_handler|set_file_buffer|' +
+ 'set_include_path|set_magic_quotes_runtime|set_socket_blocking|set_time_limit|setcookie|setlocale|setproctitle|setrawcookie|' +
+ 'setstaticpropertyvalue|setthreadtitle|settype|sha1|sha1_file|shell_exec|shm_attach|shm_detach|shm_get_var|shm_has_var|shm_put_var|' +
+ 'shm_remove|shm_remove_var|shmop_close|shmop_delete|shmop_open|shmop_read|shmop_size|shmop_write|show_source|shuffle|signeurlpaiement|' +
+ 'similar_text|simplexml_import_dom|simplexml_load_file|simplexml_load_string|simplexmlelement|simplexmliterator|sin|sinh|sizeof|sleep|snmp|' +
+ 'snmp2_get|snmp2_getnext|snmp2_real_walk|snmp2_set|snmp2_walk|snmp3_get|snmp3_getnext|snmp3_real_walk|snmp3_set|snmp3_walk|' +
+ 'snmp_get_quick_print|snmp_get_valueretrieval|snmp_read_mib|snmp_set_enum_print|snmp_set_oid_numeric_print|snmp_set_oid_output_format|' +
+ 'snmp_set_quick_print|snmp_set_valueretrieval|snmpget|snmpgetnext|snmprealwalk|snmpset|snmpwalk|snmpwalkoid|soapclient|soapfault|' +
+ 'soapheader|soapparam|soapserver|soapvar|socket_accept|socket_bind|socket_clear_error|socket_close|socket_connect|socket_create|' +
+ 'socket_create_listen|socket_create_pair|socket_get_option|socket_get_status|socket_getpeername|socket_getsockname|socket_last_error|' +
+ 'socket_listen|socket_read|socket_recv|socket_recvfrom|socket_select|socket_send|socket_sendto|socket_set_block|socket_set_blocking|' +
+ 'socket_set_nonblock|socket_set_option|socket_set_timeout|socket_shutdown|socket_strerror|socket_write|solr_get_version|solrclient|' +
+ 'solrclientexception|solrdocument|solrdocumentfield|solrexception|solrgenericresponse|solrillegalargumentexception|' +
+ 'solrillegaloperationexception|solrinputdocument|solrmodifiableparams|solrobject|solrparams|solrpingresponse|solrquery|solrqueryresponse|' +
+ 'solrresponse|solrupdateresponse|solrutils|sort|soundex|sphinxclient|spl_autoload|spl_autoload_call|spl_autoload_extensions|' +
+ 'spl_autoload_functions|spl_autoload_register|spl_autoload_unregister|spl_classes|spl_object_hash|splbool|spldoublylinkedlist|splenum|' +
+ 'splfileinfo|splfileobject|splfixedarray|splfloat|splheap|splint|split|spliti|splmaxheap|splminheap|splobjectstorage|splobserver|' +
+ 'splpriorityqueue|splqueue|splstack|splstring|splsubject|spltempfileobject|spoofchecker|sprintf|sql_regcase|sqlite3|sqlite3result|' +
+ 'sqlite3stmt|sqlite_array_query|sqlite_busy_timeout|sqlite_changes|sqlite_close|sqlite_column|sqlite_create_aggregate|' +
+ 'sqlite_create_function|sqlite_current|sqlite_error_string|sqlite_escape_string|sqlite_exec|sqlite_factory|sqlite_fetch_all|' +
+ 'sqlite_fetch_array|sqlite_fetch_column_types|sqlite_fetch_object|sqlite_fetch_single|sqlite_fetch_string|sqlite_field_name|' +
+ 'sqlite_has_more|sqlite_has_prev|sqlite_key|sqlite_last_error|sqlite_last_insert_rowid|sqlite_libencoding|sqlite_libversion|sqlite_next|' +
+ 'sqlite_num_fields|sqlite_num_rows|sqlite_open|sqlite_popen|sqlite_prev|sqlite_query|sqlite_rewind|sqlite_seek|sqlite_single_query|' +
+ 'sqlite_udf_decode_binary|sqlite_udf_encode_binary|sqlite_unbuffered_query|sqlite_valid|sqrt|srand|sscanf|ssdeep_fuzzy_compare|' +
+ 'ssdeep_fuzzy_hash|ssdeep_fuzzy_hash_filename|ssh2_auth_hostbased_file|ssh2_auth_none|ssh2_auth_password|ssh2_auth_pubkey_file|' +
+ 'ssh2_connect|ssh2_exec|ssh2_fetch_stream|ssh2_fingerprint|ssh2_methods_negotiated|ssh2_publickey_add|ssh2_publickey_init|' +
+ 'ssh2_publickey_list|ssh2_publickey_remove|ssh2_scp_recv|ssh2_scp_send|ssh2_sftp|ssh2_sftp_lstat|ssh2_sftp_mkdir|ssh2_sftp_readlink|' +
+ 'ssh2_sftp_realpath|ssh2_sftp_rename|ssh2_sftp_rmdir|ssh2_sftp_stat|ssh2_sftp_symlink|ssh2_sftp_unlink|ssh2_shell|ssh2_tunnel|stat|' +
+ 'stats_absolute_deviation|stats_cdf_beta|stats_cdf_binomial|stats_cdf_cauchy|stats_cdf_chisquare|stats_cdf_exponential|stats_cdf_f|' +
+ 'stats_cdf_gamma|stats_cdf_laplace|stats_cdf_logistic|stats_cdf_negative_binomial|stats_cdf_noncentral_chisquare|stats_cdf_noncentral_f|' +
+ 'stats_cdf_poisson|stats_cdf_t|stats_cdf_uniform|stats_cdf_weibull|stats_covariance|stats_den_uniform|stats_dens_beta|stats_dens_cauchy|' +
+ 'stats_dens_chisquare|stats_dens_exponential|stats_dens_f|stats_dens_gamma|stats_dens_laplace|stats_dens_logistic|' +
+ 'stats_dens_negative_binomial|stats_dens_normal|stats_dens_pmf_binomial|stats_dens_pmf_hypergeometric|stats_dens_pmf_poisson|stats_dens_t|' +
+ 'stats_dens_weibull|stats_harmonic_mean|stats_kurtosis|stats_rand_gen_beta|stats_rand_gen_chisquare|stats_rand_gen_exponential|' +
+ 'stats_rand_gen_f|stats_rand_gen_funiform|stats_rand_gen_gamma|stats_rand_gen_ibinomial|stats_rand_gen_ibinomial_negative|' +
+ 'stats_rand_gen_int|stats_rand_gen_ipoisson|stats_rand_gen_iuniform|stats_rand_gen_noncenral_chisquare|stats_rand_gen_noncentral_f|' +
+ 'stats_rand_gen_noncentral_t|stats_rand_gen_normal|stats_rand_gen_t|stats_rand_get_seeds|stats_rand_phrase_to_seeds|stats_rand_ranf|' +
+ 'stats_rand_setall|stats_skew|stats_standard_deviation|stats_stat_binomial_coef|stats_stat_correlation|stats_stat_gennch|' +
+ 'stats_stat_independent_t|stats_stat_innerproduct|stats_stat_noncentral_t|stats_stat_paired_t|stats_stat_percentile|stats_stat_powersum|' +
+ 'stats_variance|stomp|stomp_connect_error|stomp_version|stompexception|stompframe|str_getcsv|str_ireplace|str_pad|str_repeat|str_replace|' +
+ 'str_rot13|str_shuffle|str_split|str_word_count|strcasecmp|strchr|strcmp|strcoll|strcspn|stream_bucket_append|stream_bucket_make_writeable|' +
+ 'stream_bucket_new|stream_bucket_prepend|stream_context_create|stream_context_get_default|stream_context_get_options|' +
+ 'stream_context_get_params|stream_context_set_default|stream_context_set_option|stream_context_set_params|stream_copy_to_stream|' +
+ 'stream_encoding|stream_filter_append|stream_filter_prepend|stream_filter_register|stream_filter_remove|stream_get_contents|' +
+ 'stream_get_filters|stream_get_line|stream_get_meta_data|stream_get_transports|stream_get_wrappers|stream_is_local|' +
+ 'stream_notification_callback|stream_register_wrapper|stream_resolve_include_path|stream_select|stream_set_blocking|stream_set_read_buffer|' +
+ 'stream_set_timeout|stream_set_write_buffer|stream_socket_accept|stream_socket_client|stream_socket_enable_crypto|stream_socket_get_name|' +
+ 'stream_socket_pair|stream_socket_recvfrom|stream_socket_sendto|stream_socket_server|stream_socket_shutdown|stream_supports_lock|' +
+ 'stream_wrapper_register|stream_wrapper_restore|stream_wrapper_unregister|streamwrapper|strftime|strip_tags|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|substr_compare|substr_count|substr_replace|svm|svmmodel|svn_add|' +
+ 'svn_auth_get_parameter|svn_auth_set_parameter|svn_blame|svn_cat|svn_checkout|svn_cleanup|svn_client_version|svn_commit|svn_delete|' +
+ 'svn_diff|svn_export|svn_fs_abort_txn|svn_fs_apply_text|svn_fs_begin_txn2|svn_fs_change_node_prop|svn_fs_check_path|' +
+ 'svn_fs_contents_changed|svn_fs_copy|svn_fs_delete|svn_fs_dir_entries|svn_fs_file_contents|svn_fs_file_length|svn_fs_is_dir|svn_fs_is_file|' +
+ 'svn_fs_make_dir|svn_fs_make_file|svn_fs_node_created_rev|svn_fs_node_prop|svn_fs_props_changed|svn_fs_revision_prop|svn_fs_revision_root|' +
+ 'svn_fs_txn_root|svn_fs_youngest_rev|svn_import|svn_log|svn_ls|svn_mkdir|svn_repos_create|svn_repos_fs|svn_repos_fs_begin_txn_for_commit|' +
+ 'svn_repos_fs_commit_txn|svn_repos_hotcopy|svn_repos_open|svn_repos_recover|svn_revert|svn_status|svn_update|swf_actiongeturl|' +
+ 'swf_actiongotoframe|swf_actiongotolabel|swf_actionnextframe|swf_actionplay|swf_actionprevframe|swf_actionsettarget|swf_actionstop|' +
+ 'swf_actiontogglequality|swf_actionwaitforframe|swf_addbuttonrecord|swf_addcolor|swf_closefile|swf_definebitmap|swf_definefont|' +
+ 'swf_defineline|swf_definepoly|swf_definerect|swf_definetext|swf_endbutton|swf_enddoaction|swf_endshape|swf_endsymbol|swf_fontsize|' +
+ 'swf_fontslant|swf_fonttracking|swf_getbitmapinfo|swf_getfontinfo|swf_getframe|swf_labelframe|swf_lookat|swf_modifyobject|swf_mulcolor|' +
+ 'swf_nextid|swf_oncondition|swf_openfile|swf_ortho|swf_ortho2|swf_perspective|swf_placeobject|swf_polarview|swf_popmatrix|swf_posround|' +
+ 'swf_pushmatrix|swf_removeobject|swf_rotate|swf_scale|swf_setfont|swf_setframe|swf_shapearc|swf_shapecurveto|swf_shapecurveto3|' +
+ 'swf_shapefillbitmapclip|swf_shapefillbitmaptile|swf_shapefilloff|swf_shapefillsolid|swf_shapelinesolid|swf_shapelineto|swf_shapemoveto|' +
+ 'swf_showframe|swf_startbutton|swf_startdoaction|swf_startshape|swf_startsymbol|swf_textwidth|swf_translate|swf_viewport|swfaction|' +
+ 'swfbitmap|swfbutton|swfdisplayitem|swffill|swffont|swffontchar|swfgradient|swfmorph|swfmovie|swfprebuiltclip|swfshape|swfsound|' +
+ 'swfsoundinstance|swfsprite|swftext|swftextfield|swfvideostream|swish_construct|swish_getmetalist|swish_getpropertylist|swish_prepare|' +
+ 'swish_query|swishresult_getmetalist|swishresult_stem|swishresults_getparsedwords|swishresults_getremovedstopwords|swishresults_nextresult|' +
+ 'swishresults_seekresult|swishsearch_execute|swishsearch_resetlimit|swishsearch_setlimit|swishsearch_setphrasedelimiter|' +
+ 'swishsearch_setsort|swishsearch_setstructure|sybase_affected_rows|sybase_close|sybase_connect|sybase_data_seek|' +
+ 'sybase_deadlock_retry_count|sybase_fetch_array|sybase_fetch_assoc|sybase_fetch_field|sybase_fetch_object|sybase_fetch_row|' +
+ 'sybase_field_seek|sybase_free_result|sybase_get_last_message|sybase_min_client_severity|sybase_min_error_severity|' +
+ 'sybase_min_message_severity|sybase_min_server_severity|sybase_num_fields|sybase_num_rows|sybase_pconnect|sybase_query|sybase_result|' +
+ 'sybase_select_db|sybase_set_message_handler|sybase_unbuffered_query|symlink|sys_get_temp_dir|sys_getloadavg|syslog|system|tag|tan|tanh|' +
+ 'tcpwrap_check|tempnam|textdomain|tidy|tidy_access_count|tidy_config_count|tidy_diagnose|tidy_error_count|tidy_get_error_buffer|' +
+ 'tidy_get_output|tidy_load_config|tidy_reset_config|tidy_save_config|tidy_set_encoding|tidy_setopt|tidy_warning_count|tidynode|time|' +
+ 'time_nanosleep|time_sleep_until|timezone_abbreviations_list|timezone_identifiers_list|timezone_location_get|timezone_name_from_abbr|' +
+ 'timezone_name_get|timezone_offset_get|timezone_open|timezone_transitions_get|timezone_version_get|tmpfile|token_get_all|token_name|' +
+ 'tokyotyrant|tokyotyrantquery|tokyotyranttable|tostring|tostring|touch|transliterator|traversable|trigger_error|trim|uasort|ucfirst|' +
+ 'ucwords|udm_add_search_limit|udm_alloc_agent|udm_alloc_agent_array|udm_api_version|udm_cat_list|udm_cat_path|udm_check_charset|' +
+ 'udm_check_stored|udm_clear_search_limits|udm_close_stored|udm_crc32|udm_errno|udm_error|udm_find|udm_free_agent|udm_free_ispell_data|' +
+ 'udm_free_res|udm_get_doc_count|udm_get_res_field|udm_get_res_param|udm_hash32|udm_load_ispell_data|udm_open_stored|udm_set_agent_param|' +
+ 'uksort|umask|underflowexception|unexpectedvalueexception|uniqid|unixtojd|unlink|unpack|unregister_tick_function|unserialize|unset|' +
+ 'urldecode|urlencode|use_soap_error_handler|user_error|usleep|usort|utf8_decode|utf8_encode|v8js|v8jsexception|var_dump|var_export|variant|' +
+ 'variant_abs|variant_add|variant_and|variant_cast|variant_cat|variant_cmp|variant_date_from_timestamp|variant_date_to_timestamp|' +
+ 'variant_div|variant_eqv|variant_fix|variant_get_type|variant_idiv|variant_imp|variant_int|variant_mod|variant_mul|variant_neg|variant_not|' +
+ 'variant_or|variant_pow|variant_round|variant_set|variant_set_type|variant_sub|variant_xor|version_compare|vfprintf|virtual|' +
+ 'vpopmail_add_alias_domain|vpopmail_add_alias_domain_ex|vpopmail_add_domain|vpopmail_add_domain_ex|vpopmail_add_user|vpopmail_alias_add|' +
+ 'vpopmail_alias_del|vpopmail_alias_del_domain|vpopmail_alias_get|vpopmail_alias_get_all|vpopmail_auth_user|vpopmail_del_domain|' +
+ 'vpopmail_del_domain_ex|vpopmail_del_user|vpopmail_error|vpopmail_passwd|vpopmail_set_user_quota|vprintf|vsprintf|w32api_deftype|' +
+ 'w32api_init_dtype|w32api_invoke_function|w32api_register_function|w32api_set_call_method|wddx_add_vars|wddx_deserialize|wddx_packet_end|' +
+ 'wddx_packet_start|wddx_serialize_value|wddx_serialize_vars|win32_continue_service|win32_create_service|win32_delete_service|' +
+ 'win32_get_last_control_message|win32_pause_service|win32_ps_list_procs|win32_ps_stat_mem|win32_ps_stat_proc|win32_query_service_status|' +
+ 'win32_set_service_status|win32_start_service|win32_start_service_ctrl_dispatcher|win32_stop_service|wincache_fcache_fileinfo|' +
+ 'wincache_fcache_meminfo|wincache_lock|wincache_ocache_fileinfo|wincache_ocache_meminfo|wincache_refresh_if_changed|' +
+ 'wincache_rplist_fileinfo|wincache_rplist_meminfo|wincache_scache_info|wincache_scache_meminfo|wincache_ucache_add|wincache_ucache_cas|' +
+ 'wincache_ucache_clear|wincache_ucache_dec|wincache_ucache_delete|wincache_ucache_exists|wincache_ucache_get|wincache_ucache_inc|' +
+ 'wincache_ucache_info|wincache_ucache_meminfo|wincache_ucache_set|wincache_unlock|wordwrap|xattr_get|xattr_list|xattr_remove|xattr_set|' +
+ 'xattr_supported|xdiff_file_bdiff|xdiff_file_bdiff_size|xdiff_file_bpatch|xdiff_file_diff|xdiff_file_diff_binary|xdiff_file_merge3|' +
+ 'xdiff_file_patch|xdiff_file_patch_binary|xdiff_file_rabdiff|xdiff_string_bdiff|xdiff_string_bdiff_size|xdiff_string_bpatch|' +
+ 'xdiff_string_diff|xdiff_string_diff_binary|xdiff_string_merge3|xdiff_string_patch|xdiff_string_patch_binary|xdiff_string_rabdiff|' +
+ 'xhprof_disable|xhprof_enable|xhprof_sample_disable|xhprof_sample_enable|xml_error_string|xml_get_current_byte_index|' +
+ 'xml_get_current_column_number|xml_get_current_line_number|xml_get_error_code|xml_parse|xml_parse_into_struct|xml_parser_create|' +
+ 'xml_parser_create_ns|xml_parser_free|xml_parser_get_option|xml_parser_set_option|xml_set_character_data_handler|xml_set_default_handler|' +
+ 'xml_set_element_handler|xml_set_end_namespace_decl_handler|xml_set_external_entity_ref_handler|xml_set_notation_decl_handler|' +
+ 'xml_set_object|xml_set_processing_instruction_handler|xml_set_start_namespace_decl_handler|xml_set_unparsed_entity_decl_handler|xmlreader|' +
+ 'xmlrpc_decode|xmlrpc_decode_request|xmlrpc_encode|xmlrpc_encode_request|xmlrpc_get_type|xmlrpc_is_fault|xmlrpc_parse_method_descriptions|' +
+ 'xmlrpc_server_add_introspection_data|xmlrpc_server_call_method|xmlrpc_server_create|xmlrpc_server_destroy|' +
+ 'xmlrpc_server_register_introspection_callback|xmlrpc_server_register_method|xmlrpc_set_type|xmlwriter_end_attribute|xmlwriter_end_cdata|' +
+ 'xmlwriter_end_comment|xmlwriter_end_document|xmlwriter_end_dtd|xmlwriter_end_dtd_attlist|xmlwriter_end_dtd_element|' +
+ 'xmlwriter_end_dtd_entity|xmlwriter_end_element|xmlwriter_end_pi|xmlwriter_flush|xmlwriter_full_end_element|xmlwriter_open_memory|' +
+ 'xmlwriter_open_uri|xmlwriter_output_memory|xmlwriter_set_indent|xmlwriter_set_indent_string|xmlwriter_start_attribute|' +
+ 'xmlwriter_start_attribute_ns|xmlwriter_start_cdata|xmlwriter_start_comment|xmlwriter_start_document|xmlwriter_start_dtd|' +
+ 'xmlwriter_start_dtd_attlist|xmlwriter_start_dtd_element|xmlwriter_start_dtd_entity|xmlwriter_start_element|xmlwriter_start_element_ns|' +
+ 'xmlwriter_start_pi|xmlwriter_text|xmlwriter_write_attribute|xmlwriter_write_attribute_ns|xmlwriter_write_cdata|xmlwriter_write_comment|' +
+ 'xmlwriter_write_dtd|xmlwriter_write_dtd_attlist|xmlwriter_write_dtd_element|xmlwriter_write_dtd_entity|xmlwriter_write_element|' +
+ 'xmlwriter_write_element_ns|xmlwriter_write_pi|xmlwriter_write_raw|xpath_eval|xpath_eval_expression|xpath_new_context|xpath_register_ns|' +
+ 'xpath_register_ns_auto|xptr_eval|xptr_new_context|xslt_backend_info|xslt_backend_name|xslt_backend_version|xslt_create|xslt_errno|' +
+ 'xslt_error|xslt_free|xslt_getopt|xslt_process|xslt_set_base|xslt_set_encoding|xslt_set_error_handler|xslt_set_log|xslt_set_object|' +
+ 'xslt_set_sax_handler|xslt_set_sax_handlers|xslt_set_scheme_handler|xslt_set_scheme_handlers|xslt_setopt|xsltprocessor|yaml_emit|' +
+ 'yaml_emit_file|yaml_parse|yaml_parse_file|yaml_parse_url|yaz_addinfo|yaz_ccl_conf|yaz_ccl_parse|yaz_close|yaz_connect|yaz_database|' +
+ 'yaz_element|yaz_errno|yaz_error|yaz_es|yaz_es_result|yaz_get_option|yaz_hits|yaz_itemorder|yaz_present|yaz_range|yaz_record|yaz_scan|' +
+ 'yaz_scan_result|yaz_schema|yaz_search|yaz_set_option|yaz_sort|yaz_syntax|yaz_wait|yp_all|yp_cat|yp_err_string|yp_errno|yp_first|' +
+ 'yp_get_default_domain|yp_master|yp_match|yp_next|yp_order|zend_logo_guid|zend_thread_id|zend_version|zip_close|zip_entry_close|' +
+ 'zip_entry_compressedsize|zip_entry_compressionmethod|zip_entry_filesize|zip_entry_name|zip_entry_open|zip_entry_read|zip_open|zip_read|' +
+ 'ziparchive|ziparchive_addemptydir|ziparchive_addfile|ziparchive_addfromstring|ziparchive_close|ziparchive_deleteindex|' +
+ 'ziparchive_deletename|ziparchive_extractto|ziparchive_getarchivecomment|ziparchive_getcommentindex|ziparchive_getcommentname|' +
+ 'ziparchive_getfromindex|ziparchive_getfromname|ziparchive_getnameindex|ziparchive_getstatusstring|ziparchive_getstream|' +
+ 'ziparchive_locatename|ziparchive_open|ziparchive_renameindex|ziparchive_renamename|ziparchive_setCommentName|ziparchive_setarchivecomment|' +
+ 'ziparchive_setcommentindex|ziparchive_statindex|ziparchive_statname|ziparchive_unchangeall|ziparchive_unchangearchive|' +
+ 'ziparchive_unchangeindex|ziparchive_unchangename|zlib_get_coding_type').split('|')
+ );
+
+ // http://php.net/manual/en/reserved.keywords.php
+ var keywords = lang.arrayToMap(
+ ('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').split('|')
+ );
+
+ // http://php.net/manual/en/reserved.keywords.php
+ var languageConstructs = lang.arrayToMap(
+ ('die|echo|empty|exit|eval|include|include_once|isset|list|require|require_once|return|print|unset').split('|')
+ );
+
+ var builtinConstants = lang.arrayToMap(
+ ('true|false|null|__CLASS__|__DIR__|__FILE__|__LINE__|__METHOD__|__FUNCTION__|__NAMESPACE__').split('|')
+ );
+
+ var builtinVariables = lang.arrayToMap(
+ ('$GLOBALS|$_SERVER|$_GET|$_POST|$_FILES|$_REQUEST|$_SESSION|$_ENV|$_COOKIE|$php_errormsg|$HTTP_RAW_POST_DATA|' +
+ '$http_response_header|$argc|$argv').split('|')
+ );
+
+ // Discovery done by downloading 'Many HTML files' from: http://php.net/download-docs.php
+ // Then search for files containing 'deprecated' (case-insensitive) and look at each file that turns up.
+ var builtinFunctionsDeprecated = lang.arrayToMap(
+ ('key_exists|cairo_matrix_create_scale|cairo_matrix_create_translate|call_user_method|call_user_method_array|com_addref|com_get|' +
+ 'com_invoke|com_isenum|com_load|com_release|com_set|connection_timeout|cubrid_load_from_glo|cubrid_new_glo|cubrid_save_to_glo|' +
+ 'cubrid_send_glo|define_syslog_variables|dl|ereg|ereg_replace|eregi|eregi_replace|hw_documentattributes|hw_documentbodytag|' +
+ 'hw_documentsize|hw_outputdocument|imagedashedline|maxdb_bind_param|maxdb_bind_result|maxdb_client_encoding|maxdb_close_long_data|' +
+ 'maxdb_execute|maxdb_fetch|maxdb_get_metadata|maxdb_param_count|maxdb_send_long_data|mcrypt_ecb|mcrypt_generic_end|mime_content_type|' +
+ 'mysql_createdb|mysql_dbname|mysql_db_query|mysql_drop_db|mysql_dropdb|mysql_escape_string|mysql_fieldflags|mysql_fieldflags|' +
+ 'mysql_fieldname|mysql_fieldtable|mysql_fieldtype|mysql_freeresult|mysql_listdbs|mysql_list_fields|mysql_listfields|mysql_list_tables|' +
+ 'mysql_listtables|mysql_numfields|mysql_numrows|mysql_selectdb|mysql_tablename|mysqli_bind_param|mysqli_bind_result|' +
+ 'mysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_execute|' +
+ 'mysqli_fetch|mysqli_get_metadata|mysqli_master_query|mysqli_param_count|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|' +
+ 'mysqli_send_long_data|mysqli_send_query|mysqli_slave_query|ocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|' +
+ 'ocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|ocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|' +
+ 'ocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|ocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|' +
+ 'ocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|ociloadlob|ocilogoff|ocilogon|ocinewcollection|' +
+ 'ocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|ocirollback|ocirowcount|ocisavelob|ocisavelobfile|' +
+ 'ociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|PDF_add_annotation|PDF_add_bookmark|' +
+ 'PDF_add_launchlink|PDF_add_locallink|PDF_add_note|PDF_add_outline|PDF_add_pdflink|PDF_add_weblink|PDF_attach_file|PDF_begin_page|' +
+ 'PDF_begin_template|PDF_close_pdi|PDF_close|PDF_findfont|PDF_get_font|PDF_get_fontname|PDF_get_fontsize|PDF_get_image_height|' +
+ 'PDF_get_image_width|PDF_get_majorversion|PDF_get_minorversion|PDF_get_pdi_parameter|PDF_get_pdi_value|PDF_open_ccitt|PDF_open_file|' +
+ 'PDF_open_gif|PDF_open_image_file|PDF_open_image|PDF_open_jpeg|PDF_open_pdi|PDF_open_tiff|PDF_place_image|PDF_place_pdi_page|' +
+ 'PDF_set_border_color|PDF_set_border_dash|PDF_set_border_style|PDF_set_char_spacing|PDF_set_duration|PDF_set_horiz_scaling|' +
+ 'PDF_set_info_author|PDF_set_info_creator|PDF_set_info_keywords|PDF_set_info_subject|PDF_set_info_title|PDF_set_leading|' +
+ 'PDF_set_text_matrix|PDF_set_text_rendering|PDF_set_text_rise|PDF_set_word_spacing|PDF_setgray_fill|PDF_setgray_stroke|PDF_setgray|' +
+ 'PDF_setpolydash|PDF_setrgbcolor_fill|PDF_setrgbcolor_stroke|PDF_setrgbcolor|PDF_show_boxed|php_check_syntax|px_set_tablename|' +
+ 'px_set_targetencoding|runkit_sandbox_output_handler|session_is_registered|session_register|session_unregister' +
+ 'set_magic_quotes_runtime|magic_quotes_runtime|set_socket_blocking|socket_set_blocking|set_socket_timeout|socket_set_timeout|split|spliti|' +
+ 'sql_regcase').split('|')
+ );
+
+ var keywordsDeprecated = lang.arrayToMap(
+ ('cfunction|old_function').split('|')
+ );
+
+ var futureReserved = lang.arrayToMap([]);
+
+ // regexp must not have capturing parentheses. Use (?:) instead.
+ // regexps are ordered -> the first match is used
+
+ this.$rules = {
+ "start" : [
+ {
+ token : "support.php_tag", // php open tag
+ regex : "<\\?(?:php|\\=)"
+ },
+ {
+ token : "support.php_tag", // php close tag
+ regex : "\\?>"
+ },
+ {
+ token : "comment",
+ regex : "<\\!--",
+ next : "htmlcomment"
+ },
+ {
+ token : "meta.tag",
+ regex : "<style",
+ next : "css"
+ },
+ {
+ token : "meta.tag", // opening tag
+ regex : "<\\/?[-_a-zA-Z0-9:]+",
+ next : "htmltag"
+ },
+ {
+ token : 'meta.tag',
+ regex : '<\!DOCTYPE.*?>'
+ },
+ {
+ token : "comment",
+ regex : "\\/\\/.*$"
+ },
+ {
+ token : "comment",
+ regex : "#.*$"
+ },
+ docComment.getStartRule("doc-start"),
+ {
+ token : "comment", // multi line comment
+ regex : "\\/\\*",
+ next : "comment"
+ }, {
+ token : "string.regexp",
+ regex : "[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/][gimy]*\\s*(?=[).,;]|$)"
+ }, {
+ token : "string", // single line
+ regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
+ }, {
+ token : "string", // multi line string start
+ regex : '["].*\\\\$',
+ next : "qqstring"
+ }, {
+ token : "string", // single line
+ regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
+ }, {
+ token : "string", // multi line string start
+ regex : "['].*\\\\$",
+ next : "qstring"
+ }, {
+ token : "constant.numeric", // hex
+ regex : "0[xX][0-9a-fA-F]+\\b"
+ }, {
+ token : "constant.numeric", // float
+ regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
+ }, {
+ token : "constant.language", // constants
+ regex : "\\b(?:DEFAULT_INCLUDE_PATH|E_(?:ALL|CO(?:MPILE_(?:ERROR|WARNING)|RE_(?:ERROR|WARNING))|" +
+ "ERROR|NOTICE|PARSE|STRICT|USER_(?:ERROR|NOTICE|WARNING)|WARNING)|P(?:EAR_(?:EXTENSION_DIR|INSTALL_DIR)|" +
+ "HP_(?:BINDIR|CONFIG_FILE_(?:PATH|SCAN_DIR)|DATADIR|E(?:OL|XTENSION_DIR)|INT_(?:MAX|SIZE)|" +
+ "L(?:IBDIR|OCALSTATEDIR)|O(?:S|UTPUT_HANDLER_(?:CONT|END|START))|PREFIX|S(?:API|HLIB_SUFFIX|YSCONFDIR)|" +
+ "VERSION))|__COMPILER_HALT_OFFSET__)\\b"
+ }, {
+ token : "constant.language", // constants
+ regex : "\\b(?:A(?:B(?:DAY_(?:1|2|3|4|5|6|7)|MON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9))|LT_DIGITS|M_STR|" +
+ "SSERT_(?:ACTIVE|BAIL|CALLBACK|QUIET_EVAL|WARNING))|C(?:ASE_(?:LOWER|UPPER)|HAR_MAX|" +
+ "O(?:DESET|NNECTION_(?:ABORTED|NORMAL|TIMEOUT)|UNT_(?:NORMAL|RECURSIVE))|" +
+ "R(?:EDITS_(?:ALL|DOCS|FULLPAGE|G(?:ENERAL|ROUP)|MODULES|QA|SAPI)|NCYSTR|" +
+ "YPT_(?:BLOWFISH|EXT_DES|MD5|S(?:ALT_LENGTH|TD_DES)))|URRENCY_SYMBOL)|D(?:AY_(?:1|2|3|4|5|6|7)|" +
+ "ECIMAL_POINT|IRECTORY_SEPARATOR|_(?:FMT|T_FMT))|E(?:NT_(?:COMPAT|NOQUOTES|QUOTES)|RA(?:_(?:D_(?:FMT|T_FMT)|" +
+ "T_FMT|YEAR)|)|XTR_(?:IF_EXISTS|OVERWRITE|PREFIX_(?:ALL|I(?:F_EXISTS|NVALID)|SAME)|SKIP))|FRAC_DIGITS|GROUPING|" +
+ "HTML_(?:ENTITIES|SPECIALCHARS)|IN(?:FO_(?:ALL|C(?:ONFIGURATION|REDITS)|ENVIRONMENT|GENERAL|LICENSE|MODULES|VARIABLES)|" +
+ "I_(?:ALL|PERDIR|SYSTEM|USER)|T_(?:CURR_SYMBOL|FRAC_DIGITS))|L(?:C_(?:ALL|C(?:OLLATE|TYPE)|M(?:ESSAGES|ONETARY)|NUMERIC|TIME)|" +
+ "O(?:CK_(?:EX|NB|SH|UN)|G_(?:A(?:LERT|UTH(?:PRIV|))|C(?:ONS|R(?:IT|ON))|D(?:AEMON|EBUG)|E(?:MERG|RR)|INFO|KERN|" +
+ "L(?:OCAL(?:0|1|2|3|4|5|6|7)|PR)|MAIL|N(?:DELAY|EWS|O(?:TICE|WAIT))|ODELAY|P(?:ERROR|ID)|SYSLOG|U(?:SER|UCP)|WARNING)))|" +
+ "M(?:ON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9|DECIMAL_POINT|GROUPING|THOUSANDS_SEP)|_(?:1_PI|2_(?:PI|SQRTPI)|E|L(?:N(?:10|2)|" +
+ "OG(?:10E|2E))|PI(?:_(?:2|4)|)|SQRT(?:1_2|2)))|N(?:EGATIVE_SIGN|O(?:EXPR|STR)|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|" +
+ "P(?:ATH(?:INFO_(?:BASENAME|DIRNAME|EXTENSION)|_SEPARATOR)|M_STR|OSITIVE_SIGN|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|" +
+ "RADIXCHAR|S(?:EEK_(?:CUR|END|SET)|ORT_(?:ASC|DESC|NUMERIC|REGULAR|STRING)|TR_PAD_(?:BOTH|LEFT|RIGHT))|" +
+ "T(?:HOUS(?:ANDS_SEP|EP)|_FMT(?:_AMPM|))|YES(?:EXPR|STR)|STD(?:IN|OUT|ERR))\\b"
+ }, {
+ token : function(value) {
+ if (keywords.hasOwnProperty(value))
+ return "keyword";
+ else if (builtinConstants.hasOwnProperty(value))
+ return "constant.language";
+ else if (builtinVariables.hasOwnProperty(value))
+ return "variable.language";
+ else if (futureReserved.hasOwnProperty(value))
+ return "invalid.illegal";
+ else if (builtinFunctions.hasOwnProperty(value))
+ return "support.function";
+ else if (value == "debugger")
+ return "invalid.deprecated";
+ else
+ if(value.match(/^(\$[a-zA-Z][a-zA-Z0-9_]*|self|parent)$/))
+ return "variable";
+ return "identifier";
+ },
+ // TODO: Unicode escape sequences
+ // TODO: Unicode identifiers
+ regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
+ }, {
+ token : "keyword.operator",
+ regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"
+ }, {
+ token : "lparen",
+ regex : "[[({]"
+ }, {
+ token : "rparen",
+ regex : "[\\])}]"
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }
+ ],
+ "comment" : [
+ {
+ token : "comment", // closing comment
+ regex : ".*?\\*\\/",
+ next : "start"
+ }, {
+ token : "comment", // comment spanning whole line
+ regex : ".+"
+ }
+ ],
+ "qqstring" : [
+ {
+ token : "string",
+ regex : '(?:(?:\\\\.)|(?:[^"\\\\]))*?"',
+ next : "start"
+ }, {
+ token : "string",
+ regex : '.+'
+ }
+ ],
+ "qstring" : [
+ {
+ token : "string",
+ regex : "(?:(?:\\\\.)|(?:[^'\\\\]))*?'",
+ next : "start"
+ }, {
+ token : "string",
+ regex : '.+'
+ }
+ ],
+ "htmlcomment" : [
+ {
+ token : "comment",
+ regex : ".*?-->",
+ next : "start"
+ }, {
+ token : "comment",
+ regex : ".+"
+ }
+ ],
+ "htmltag" : [
+ {
+ token : "meta.tag",
+ regex : ">",
+ next : "start"
+ }, {
+ token : "text",
+ regex : "[-_a-zA-Z0-9:]+"
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }, {
+ token : "string",
+ regex : '".*?"'
+ }, {
+ token : "string",
+ regex : "'.*?'"
+ }
+ ],
+ "css" : [
+ {
+ token : "meta.tag",
+ regex : "<\/style>",
+ next : "htmltag"
+ }, {
+ token : "meta.tag",
+ regex : ">",
+ }, {
+ token : 'text',
+ regex : "(?:media|type|href)"
+ }, {
+ token : 'string',
+ regex : '=".*?"'
+ }, {
+ token : "paren.lparen",
+ regex : "\{",
+ next : "cssdeclaration",
+ }, {
+ token : "keyword",
+ regex : "#[A-Za-z0-9\-\_\.]+"
+ }, {
+ token : "variable",
+ regex : "\\.[A-Za-z0-9\-\_\.]+"
+ }, {
+ token : "constant",
+ regex : "[A-Za-z0-9]+"
+ }
+ ],
+ "cssdeclaration" : [
+ {
+ token : "support.type",
+ regex : "[\-a-zA-Z]+",
+ next : "cssvalue"
+ },
+ {
+ token : "paren.rparen",
+ regex : '\}',
+ next : "css"
+ }
+ ],
+ "cssvalue" : [
+ {
+ token : "text",
+ regex : "\:"
+ },
+ {
+ token : "constant",
+ regex : "#[0-9a-zA-Z]+"
+ },
+ {
+ token : "text",
+ regex : "[\-\_0-9a-zA-Z\"' ,%]+"
+ },
+ {
+ token : "text",
+ regex : ";",
+ next : "cssdeclaration"
+ }
+ ],
+ };
+
+ this.embedRules(DocCommentHighlightRules, "doc-",
+ [ new DocCommentHighlightRules().getEndRule("start") ]);
+};
+
+oop.inherits(PhpHighlightRules, TextHighlightRules);
+
+exports.PhpHighlightRules = PhpHighlightRules;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/doc_comment_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var DocCommentHighlightRules = function() {
+
+ this.$rules = {
+ "start" : [ {
+ token : "comment.doc.tag",
+ regex : "@[\\w\\d_]+" // TODO: fix email addresses
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "\\s+"
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "TODO"
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "[^@\\*]+"
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "."
+ }]
+ };
+};
+
+oop.inherits(DocCommentHighlightRules, TextHighlightRules);
+
+(function() {
+
+ this.getStartRule = function(start) {
+ return {
+ token : "comment.doc", // doc comment
+ merge : true,
+ regex : "\\/\\*(?=\\*)",
+ next : start
+ };
+ };
+
+ this.getEndRule = function (start) {
+ return {
+ token : "comment.doc", // closing comment
+ merge : true,
+ regex : "\\*\\/",
+ next : start
+ };
+ };
+
+}).call(DocCommentHighlightRules.prototype);
+
+exports.DocCommentHighlightRules = DocCommentHighlightRules;
+
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var Range = require("../range").Range;
+
+var MatchingBraceOutdent = function() {};
+
+(function() {
+
+ this.checkOutdent = function(line, input) {
+ if (! /^\s+$/.test(line))
+ return false;
+
+ return /^\s*\}/.test(input);
+ };
+
+ this.autoOutdent = function(doc, row) {
+ var line = doc.getLine(row);
+ var match = line.match(/^(\s*\})/);
+
+ if (!match) return 0;
+
+ var column = match[1].length;
+ var openBracePos = doc.findMatchingBracket({row: row, column: column});
+
+ if (!openBracePos || openBracePos.row == row) return 0;
+
+ var indent = this.$getIndent(doc.getLine(openBracePos.row));
+ doc.replace(new Range(row, 0, row, column-1), indent);
+ };
+
+ this.$getIndent = function(line) {
+ var match = line.match(/^(\s+)/);
+ if (match) {
+ return match[1];
+ }
+
+ return "";
+ };
+
+}).call(MatchingBraceOutdent.prototype);
+
+exports.MatchingBraceOutdent = MatchingBraceOutdent;
+});
+/* vim:ts=4:sts=4:sw=4:
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Chris Spencer <chris.ag.spencer AT googlemail DOT com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/behaviour/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var Behaviour = require('../behaviour').Behaviour;
+
+var CstyleBehaviour = function () {
+
+ this.add("braces", "insertion", function (state, action, editor, session, text) {
+ if (text == '{') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '{' + selected + '}',
+ selection: false
+ }
+ } else {
+ return {
+ text: '{}',
+ selection: [1, 1]
+ }
+ }
+ } else if (text == '}') {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '}') {
+ var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});
+ if (matching !== null) {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ } else if (text == "\n") {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '}') {
+ var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column + 1});
+ if (!openBracePos)
+ return null;
+
+ var indent = this.getNextLineIndent(state, line.substring(0, line.length - 1), session.getTabString());
+ var next_indent = this.$getIndent(session.doc.getLine(openBracePos.row));
+
+ return {
+ text: '\n' + indent + '\n' + next_indent,
+ selection: [1, indent.length, 1, indent.length]
+ }
+ }
+ }
+ });
+
+ this.add("braces", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '{') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.end.column, range.end.column + 1);
+ if (rightChar == '}') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+ this.add("parens", "insertion", function (state, action, editor, session, text) {
+ if (text == '(') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '(' + selected + ')',
+ selection: false
+ }
+ } else {
+ return {
+ text: '()',
+ selection: [1, 1]
+ }
+ }
+ } else if (text == ')') {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == ')') {
+ var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});
+ if (matching !== null) {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ }
+ });
+
+ this.add("parens", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '(') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
+ if (rightChar == ')') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+ this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {
+ if (text == '"') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '"' + selected + '"',
+ selection: false
+ }
+ } else {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var leftChar = line.substring(cursor.column-1, cursor.column);
+
+ // We're escaped.
+ if (leftChar == '\\') {
+ return null;
+ }
+
+ // Find what token we're inside.
+ var tokens = session.getTokens(selection.start.row, selection.start.row)[0].tokens;
+ var col = 0, token;
+ var quotepos = -1; // Track whether we're inside an open quote.
+
+ for (var x = 0; x < tokens.length; x++) {
+ token = tokens[x];
+ if (token.type == "string") {
+ quotepos = -1;
+ } else if (quotepos < 0) {
+ quotepos = token.value.indexOf('"');
+ }
+ if ((token.value.length + col) > selection.start.column) {
+ break;
+ }
+ col += tokens[x].value.length;
+ }
+
+ // Try and be smart about when we auto insert.
+ if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf('"') === token.value.length-1)))) {
+ return {
+ text: '""',
+ selection: [1,1]
+ }
+ } else if (token && token.type === "string") {
+ // Ignore input and move right one if we're typing over the closing quote.
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '"') {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ }
+ }
+ });
+
+ this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '"') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
+ if (rightChar == '"') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+}
+oop.inherits(CstyleBehaviour, Behaviour);
+
+exports.CstyleBehaviour = CstyleBehaviour;
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var Range = require("../../range").Range;
+var BaseFoldMode = require("./fold_mode").FoldMode;
+
+var FoldMode = exports.FoldMode = function() {};
+oop.inherits(FoldMode, BaseFoldMode);
+
+(function() {
+
+ this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
+ this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ var line = session.getLine(row);
+ var match = line.match(this.foldingStartMarker);
+ if (match) {
+ var i = match.index;
+
+ if (match[1])
+ return this.openingBracketBlock(session, match[1], row, i);
+
+ var range = session.getCommentFoldRange(row, i + match[0].length);
+ range.end.column -= 2;
+ return range;
+ }
+
+ if (foldStyle !== "markbeginend")
+ return;
+
+ var match = line.match(this.foldingStopMarker);
+ if (match) {
+ var i = match.index + match[0].length;
+
+ if (match[2]) {
+ var range = session.getCommentFoldRange(row, i);
+ range.end.column -= 2;
+ return range;
+ }
+
+ var end = {row: row, column: i};
+ var start = session.$findOpeningBracket(match[1], end);
+
+ if (!start)
+ return;
+
+ start.column++;
+ end.column--;
+
+ return Range.fromPoints(start, end);
+ }
+ };
+
+}).call(FoldMode.prototype);
+
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/fold_mode', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var Range = require("../../range").Range;
+
+var FoldMode = exports.FoldMode = function() {};
+
+(function() {
+
+ this.foldingStartMarker = null;
+ this.foldingStopMarker = null;
+
+ // must return "" if there's no fold, to enable caching
+ this.getFoldWidget = function(session, foldStyle, row) {
+ var line = session.getLine(row);
+ if (this.foldingStartMarker.test(line))
+ return "start";
+ if (foldStyle == "markbeginend"
+ && this.foldingStopMarker
+ && this.foldingStopMarker.test(line))
+ return "end";
+ return "";
+ };
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ return null;
+ };
+
+ this.indentationBlock = function(session, row, column) {
+ var re = /^\s*/;
+ var startRow = row;
+ var endRow = row;
+ var line = session.getLine(row);
+ var startColumn = column || line.length;
+ var startLevel = line.match(re)[0].length;
+ var maxRow = session.getLength()
+
+ while (++row < maxRow) {
+ line = session.getLine(row);
+ var level = line.match(re)[0].length;
+
+ if (level == line.length)
+ continue;
+
+ if (level <= startLevel)
+ break;
+
+ endRow = row;
+ }
+
+ if (endRow > startRow) {
+ var endColumn = session.getLine(endRow).length;
+ return new Range(startRow, startColumn, endRow, endColumn);
+ }
+ };
+
+ this.openingBracketBlock = function(session, bracket, row, column) {
+ var start = {row: row, column: column + 1};
+ var end = session.$findClosingBracket(bracket, start);
+ if (!end)
+ return;
+
+ var fw = session.foldWidgets[end.row];
+ if (fw == null)
+ fw = this.getFoldWidget(session, end.row);
+
+ if (fw == "start") {
+ end.row --;
+ end.column = session.getLine(end.row).length;
+ }
+ return Range.fromPoints(start, end);
+ };
+
+}).call(FoldMode.prototype);
+
+});
+;
+ (function() {
+ window.require(["ace/ace"], function(a) {
+ if (!window.ace)
+ window.ace = {};
+ for (var key in a) if (a.hasOwnProperty(key))
+ ace[key] = a[key];
+ });
+ })();
+ \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-php.js b/apps/files_texteditor/js/aceeditor/mode-php.js
index 20b056b16db..a60c8df7269 100644
--- a/apps/files_texteditor/js/aceeditor/mode-php.js
+++ b/apps/files_texteditor/js/aceeditor/mode-php.js
@@ -1 +1 @@
-define("ace/mode/php",["require","exports","module","pilot/oop","ace/mode/text","ace/tokenizer","ace/mode/php_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/mode/behaviour/cstyle"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/text").Mode,f=a("ace/tokenizer").Tokenizer,g=a("ace/mode/php_highlight_rules").PhpHighlightRules,h=a("ace/mode/matching_brace_outdent").MatchingBraceOutdent,i=a("ace/range").Range,j=a("ace/mode/behaviour/cstyle").CstyleBehaviour,k=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h,this.$behaviour=new j};d.inherits(k,e),function(){this.toggleCommentLines=function(a,b,c,d){var e=!0,f=[],g=/^(\s*)#/;for(var h=c;h<=d;h++)if(!g.test(b.getLine(h))){e=!1;break}if(e){var j=new i(0,0,0,0);for(var h=c;h<=d;h++){var k=b.getLine(h),l=k.match(g);j.start.row=h,j.end.row=h,j.end.column=l[0].length,b.replace(j,l[1])}}else b.indentRows(c,d,"#")},this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=this.$tokenizer.getLineTokens(b,a),f=e.tokens,g=e.state;if(f.length&&f[f.length-1].type=="comment")return d;if(a=="start"){var h=b.match(/^.*[\{\(\[\:]\s*$/);h&&(d+=c)}return d},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)}}.call(k.prototype),b.Mode=k}),define("ace/mode/php_highlight_rules",["require","exports","module","pilot/oop","pilot/lang","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(a,b,c){var d=a("pilot/oop"),e=a("pilot/lang"),f=a("ace/mode/doc_comment_highlight_rules").DocCommentHighlightRules,g=a("ace/mode/text_highlight_rules").TextHighlightRules,h=function(){var a=e.arrayToMap("abs|acos|acosh|addcslashes|addslashes|aggregate|aggregate_info|aggregate_methods|aggregate_methods_by_list|aggregate_methods_by_regexp|aggregate_properties|aggregate_properties_by_list|aggregate_properties_by_regexp|aggregation_info|amqpconnection|amqpexchange|amqpqueue|apache_child_terminate|apache_get_modules|apache_get_version|apache_getenv|apache_lookup_uri|apache_note|apache_request_headers|apache_reset_timeout|apache_response_headers|apache_setenv|apc_add|apc_bin_dump|apc_bin_dumpfile|apc_bin_load|apc_bin_loadfile|apc_cache_info|apc_cas|apc_clear_cache|apc_compile_file|apc_dec|apc_define_constants|apc_delete|apc_delete_file|apc_exists|apc_fetch|apc_inc|apc_load_constants|apc_sma_info|apc_store|apciterator|apd_breakpoint|apd_callstack|apd_clunk|apd_continue|apd_croak|apd_dump_function_table|apd_dump_persistent_resources|apd_dump_regular_resources|apd_echo|apd_get_active_symbols|apd_set_pprof_trace|apd_set_session|apd_set_session_trace|apd_set_session_trace_socket|appenditerator|array|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_replace|array_replace_recursive|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|arrayaccess|arrayiterator|arrayobject|arsort|asin|asinh|asort|assert|assert_options|atan|atan2|atanh|audioproperties|badfunctioncallexception|badmethodcallexception|base64_decode|base64_encode|base_convert|basename|bbcode_add_element|bbcode_add_smiley|bbcode_create|bbcode_destroy|bbcode_parse|bbcode_set_arg_parser|bbcode_set_flags|bcadd|bccomp|bcdiv|bcmod|bcmul|bcompiler_load|bcompiler_load_exe|bcompiler_parse_class|bcompiler_read|bcompiler_write_class|bcompiler_write_constant|bcompiler_write_exe_footer|bcompiler_write_file|bcompiler_write_footer|bcompiler_write_function|bcompiler_write_functions_from_file|bcompiler_write_header|bcompiler_write_included_filename|bcpow|bcpowmod|bcscale|bcsqrt|bcsub|bin2hex|bind_textdomain_codeset|bindec|bindtextdomain|bson_decode|bson_encode|bumpValue|bzclose|bzcompress|bzdecompress|bzerrno|bzerror|bzerrstr|bzflush|bzopen|bzread|bzwrite|cachingiterator|cairo|cairo_create|cairo_font_face_get_type|cairo_font_face_status|cairo_font_options_create|cairo_font_options_equal|cairo_font_options_get_antialias|cairo_font_options_get_hint_metrics|cairo_font_options_get_hint_style|cairo_font_options_get_subpixel_order|cairo_font_options_hash|cairo_font_options_merge|cairo_font_options_set_antialias|cairo_font_options_set_hint_metrics|cairo_font_options_set_hint_style|cairo_font_options_set_subpixel_order|cairo_font_options_status|cairo_format_stride_for_width|cairo_image_surface_create|cairo_image_surface_create_for_data|cairo_image_surface_create_from_png|cairo_image_surface_get_data|cairo_image_surface_get_format|cairo_image_surface_get_height|cairo_image_surface_get_stride|cairo_image_surface_get_width|cairo_matrix_create_scale|cairo_matrix_create_translate|cairo_matrix_invert|cairo_matrix_multiply|cairo_matrix_rotate|cairo_matrix_transform_distance|cairo_matrix_transform_point|cairo_matrix_translate|cairo_pattern_add_color_stop_rgb|cairo_pattern_add_color_stop_rgba|cairo_pattern_create_for_surface|cairo_pattern_create_linear|cairo_pattern_create_radial|cairo_pattern_create_rgb|cairo_pattern_create_rgba|cairo_pattern_get_color_stop_count|cairo_pattern_get_color_stop_rgba|cairo_pattern_get_extend|cairo_pattern_get_filter|cairo_pattern_get_linear_points|cairo_pattern_get_matrix|cairo_pattern_get_radial_circles|cairo_pattern_get_rgba|cairo_pattern_get_surface|cairo_pattern_get_type|cairo_pattern_set_extend|cairo_pattern_set_filter|cairo_pattern_set_matrix|cairo_pattern_status|cairo_pdf_surface_create|cairo_pdf_surface_set_size|cairo_ps_get_levels|cairo_ps_level_to_string|cairo_ps_surface_create|cairo_ps_surface_dsc_begin_page_setup|cairo_ps_surface_dsc_begin_setup|cairo_ps_surface_dsc_comment|cairo_ps_surface_get_eps|cairo_ps_surface_restrict_to_level|cairo_ps_surface_set_eps|cairo_ps_surface_set_size|cairo_scaled_font_create|cairo_scaled_font_extents|cairo_scaled_font_get_ctm|cairo_scaled_font_get_font_face|cairo_scaled_font_get_font_matrix|cairo_scaled_font_get_font_options|cairo_scaled_font_get_scale_matrix|cairo_scaled_font_get_type|cairo_scaled_font_glyph_extents|cairo_scaled_font_status|cairo_scaled_font_text_extents|cairo_surface_copy_page|cairo_surface_create_similar|cairo_surface_finish|cairo_surface_flush|cairo_surface_get_content|cairo_surface_get_device_offset|cairo_surface_get_font_options|cairo_surface_get_type|cairo_surface_mark_dirty|cairo_surface_mark_dirty_rectangle|cairo_surface_set_device_offset|cairo_surface_set_fallback_resolution|cairo_surface_show_page|cairo_surface_status|cairo_surface_write_to_png|cairo_svg_surface_create|cairo_svg_surface_restrict_to_version|cairo_svg_version_to_string|cairoantialias|cairocontent|cairocontext|cairoexception|cairoextend|cairofillrule|cairofilter|cairofontface|cairofontoptions|cairofontslant|cairofonttype|cairofontweight|cairoformat|cairogradientpattern|cairohintmetrics|cairohintstyle|cairoimagesurface|cairolineargradient|cairolinecap|cairolinejoin|cairomatrix|cairooperator|cairopath|cairopattern|cairopatterntype|cairopdfsurface|cairopslevel|cairopssurface|cairoradialgradient|cairoscaledfont|cairosolidpattern|cairostatus|cairosubpixelorder|cairosurface|cairosurfacepattern|cairosurfacetype|cairosvgsurface|cairosvgversion|cairotoyfontface|cal_days_in_month|cal_from_jd|cal_info|cal_to_jd|calcul_hmac|calculhmac|call_user_func|call_user_func_array|call_user_method|call_user_method_array|callbackfilteriterator|ceil|chdb|chdb_create|chdir|checkdate|checkdnsrr|chgrp|chmod|chop|chown|chr|chroot|chunk_split|class_alias|class_exists|class_implements|class_parents|classkit_import|classkit_method_add|classkit_method_copy|classkit_method_redefine|classkit_method_remove|classkit_method_rename|clearstatcache|clone|closedir|closelog|collator|com|com_addref|com_create_guid|com_event_sink|com_get|com_get_active_object|com_invoke|com_isenum|com_load|com_load_typelib|com_message_pump|com_print_typeinfo|com_propget|com_propput|com_propset|com_release|com_set|compact|connection_aborted|connection_status|connection_timeout|constant|construct|construct|construct|convert_cyr_string|convert_uudecode|convert_uuencode|copy|cos|cosh|count|count_chars|countable|counter_bump|counter_bump_value|counter_create|counter_get|counter_get_meta|counter_get_named|counter_get_value|counter_reset|counter_reset_value|crack_check|crack_closedict|crack_getlastmessage|crack_opendict|crc32|create_function|crypt|ctype_alnum|ctype_alpha|ctype_cntrl|ctype_digit|ctype_graph|ctype_lower|ctype_print|ctype_punct|ctype_space|ctype_upper|ctype_xdigit|cubrid_affected_rows|cubrid_bind|cubrid_client_encoding|cubrid_close|cubrid_close_prepare|cubrid_close_request|cubrid_col_get|cubrid_col_size|cubrid_column_names|cubrid_column_types|cubrid_commit|cubrid_connect|cubrid_connect_with_url|cubrid_current_oid|cubrid_data_seek|cubrid_db_name|cubrid_disconnect|cubrid_drop|cubrid_errno|cubrid_error|cubrid_error_code|cubrid_error_code_facility|cubrid_error_msg|cubrid_execute|cubrid_fetch|cubrid_fetch_array|cubrid_fetch_assoc|cubrid_fetch_field|cubrid_fetch_lengths|cubrid_fetch_object|cubrid_fetch_row|cubrid_field_flags|cubrid_field_len|cubrid_field_name|cubrid_field_seek|cubrid_field_table|cubrid_field_type|cubrid_free_result|cubrid_get|cubrid_get_autocommit|cubrid_get_charset|cubrid_get_class_name|cubrid_get_client_info|cubrid_get_db_parameter|cubrid_get_server_info|cubrid_insert_id|cubrid_is_instance|cubrid_list_dbs|cubrid_load_from_glo|cubrid_lob_close|cubrid_lob_export|cubrid_lob_get|cubrid_lob_send|cubrid_lob_size|cubrid_lock_read|cubrid_lock_write|cubrid_move_cursor|cubrid_new_glo|cubrid_next_result|cubrid_num_cols|cubrid_num_fields|cubrid_num_rows|cubrid_ping|cubrid_prepare|cubrid_put|cubrid_query|cubrid_real_escape_string|cubrid_result|cubrid_rollback|cubrid_save_to_glo|cubrid_schema|cubrid_send_glo|cubrid_seq_drop|cubrid_seq_insert|cubrid_seq_put|cubrid_set_add|cubrid_set_autocommit|cubrid_set_db_parameter|cubrid_set_drop|cubrid_unbuffered_query|cubrid_version|curl_close|curl_copy_handle|curl_errno|curl_error|curl_exec|curl_getinfo|curl_init|curl_multi_add_handle|curl_multi_close|curl_multi_exec|curl_multi_getcontent|curl_multi_info_read|curl_multi_init|curl_multi_remove_handle|curl_multi_select|curl_setopt|curl_setopt_array|curl_version|current|cyrus_authenticate|cyrus_bind|cyrus_close|cyrus_connect|cyrus_query|cyrus_unbind|date|date_add|date_create|date_create_from_format|date_date_set|date_default_timezone_get|date_default_timezone_set|date_diff|date_format|date_get_last_errors|date_interval_create_from_date_string|date_interval_format|date_isodate_set|date_modify|date_offset_get|date_parse|date_parse_from_format|date_sub|date_sun_info|date_sunrise|date_sunset|date_time_set|date_timestamp_get|date_timestamp_set|date_timezone_get|date_timezone_set|dateinterval|dateperiod|datetime|datetimezone|db2_autocommit|db2_bind_param|db2_client_info|db2_close|db2_column_privileges|db2_columns|db2_commit|db2_conn_error|db2_conn_errormsg|db2_connect|db2_cursor_type|db2_escape_string|db2_exec|db2_execute|db2_fetch_array|db2_fetch_assoc|db2_fetch_both|db2_fetch_object|db2_fetch_row|db2_field_display_size|db2_field_name|db2_field_num|db2_field_precision|db2_field_scale|db2_field_type|db2_field_width|db2_foreign_keys|db2_free_result|db2_free_stmt|db2_get_option|db2_last_insert_id|db2_lob_read|db2_next_result|db2_num_fields|db2_num_rows|db2_pclose|db2_pconnect|db2_prepare|db2_primary_keys|db2_procedure_columns|db2_procedures|db2_result|db2_rollback|db2_server_info|db2_set_option|db2_special_columns|db2_statistics|db2_stmt_error|db2_stmt_errormsg|db2_table_privileges|db2_tables|dba_close|dba_delete|dba_exists|dba_fetch|dba_firstkey|dba_handlers|dba_insert|dba_key_split|dba_list|dba_nextkey|dba_open|dba_optimize|dba_popen|dba_replace|dba_sync|dbase_add_record|dbase_close|dbase_create|dbase_delete_record|dbase_get_header_info|dbase_get_record|dbase_get_record_with_names|dbase_numfields|dbase_numrecords|dbase_open|dbase_pack|dbase_replace_record|dbplus_add|dbplus_aql|dbplus_chdir|dbplus_close|dbplus_curr|dbplus_errcode|dbplus_errno|dbplus_find|dbplus_first|dbplus_flush|dbplus_freealllocks|dbplus_freelock|dbplus_freerlocks|dbplus_getlock|dbplus_getunique|dbplus_info|dbplus_last|dbplus_lockrel|dbplus_next|dbplus_open|dbplus_prev|dbplus_rchperm|dbplus_rcreate|dbplus_rcrtexact|dbplus_rcrtlike|dbplus_resolve|dbplus_restorepos|dbplus_rkeys|dbplus_ropen|dbplus_rquery|dbplus_rrename|dbplus_rsecindex|dbplus_runlink|dbplus_rzap|dbplus_savepos|dbplus_setindex|dbplus_setindexbynumber|dbplus_sql|dbplus_tcl|dbplus_tremove|dbplus_undo|dbplus_undoprepare|dbplus_unlockrel|dbplus_unselect|dbplus_update|dbplus_xlockrel|dbplus_xunlockrel|dbx_close|dbx_compare|dbx_connect|dbx_error|dbx_escape_string|dbx_fetch_row|dbx_query|dbx_sort|dcgettext|dcngettext|deaggregate|debug_backtrace|debug_print_backtrace|debug_zval_dump|decbin|dechex|decoct|define|define_syslog_variables|defined|deg2rad|delete|dgettext|die|dio_close|dio_fcntl|dio_open|dio_read|dio_seek|dio_stat|dio_tcsetattr|dio_truncate|dio_write|dir|directoryiterator|dirname|disk_free_space|disk_total_space|diskfreespace|dl|dngettext|dns_check_record|dns_get_mx|dns_get_record|dom_import_simplexml|domainexception|domattr|domattribute_name|domattribute_set_value|domattribute_specified|domattribute_value|domcharacterdata|domcomment|domdocument|domdocument_add_root|domdocument_create_attribute|domdocument_create_cdata_section|domdocument_create_comment|domdocument_create_element|domdocument_create_element_ns|domdocument_create_entity_reference|domdocument_create_processing_instruction|domdocument_create_text_node|domdocument_doctype|domdocument_document_element|domdocument_dump_file|domdocument_dump_mem|domdocument_get_element_by_id|domdocument_get_elements_by_tagname|domdocument_html_dump_mem|domdocument_xinclude|domdocumentfragment|domdocumenttype|domdocumenttype_entities|domdocumenttype_internal_subset|domdocumenttype_name|domdocumenttype_notations|domdocumenttype_public_id|domdocumenttype_system_id|domelement|domelement_get_attribute|domelement_get_attribute_node|domelement_get_elements_by_tagname|domelement_has_attribute|domelement_remove_attribute|domelement_set_attribute|domelement_set_attribute_node|domelement_tagname|domentity|domentityreference|domexception|domimplementation|domnamednodemap|domnode|domnode_add_namespace|domnode_append_child|domnode_append_sibling|domnode_attributes|domnode_child_nodes|domnode_clone_node|domnode_dump_node|domnode_first_child|domnode_get_content|domnode_has_attributes|domnode_has_child_nodes|domnode_insert_before|domnode_is_blank_node|domnode_last_child|domnode_next_sibling|domnode_node_name|domnode_node_type|domnode_node_value|domnode_owner_document|domnode_parent_node|domnode_prefix|domnode_previous_sibling|domnode_remove_child|domnode_replace_child|domnode_replace_node|domnode_set_content|domnode_set_name|domnode_set_namespace|domnode_unlink_node|domnodelist|domnotation|domprocessinginstruction|domprocessinginstruction_data|domprocessinginstruction_target|domtext|domxml_new_doc|domxml_open_file|domxml_open_mem|domxml_version|domxml_xmltree|domxml_xslt_stylesheet|domxml_xslt_stylesheet_doc|domxml_xslt_stylesheet_file|domxml_xslt_version|domxpath|domxsltstylesheet_process|domxsltstylesheet_result_dump_file|domxsltstylesheet_result_dump_mem|dotnet|dotnet_load|doubleval|each|easter_date|easter_days|echo|empty|emptyiterator|enchant_broker_describe|enchant_broker_dict_exists|enchant_broker_free|enchant_broker_free_dict|enchant_broker_get_error|enchant_broker_init|enchant_broker_list_dicts|enchant_broker_request_dict|enchant_broker_request_pwl_dict|enchant_broker_set_ordering|enchant_dict_add_to_personal|enchant_dict_add_to_session|enchant_dict_check|enchant_dict_describe|enchant_dict_get_error|enchant_dict_is_in_session|enchant_dict_quick_check|enchant_dict_store_replacement|enchant_dict_suggest|end|ereg|ereg_replace|eregi|eregi_replace|error_get_last|error_log|error_reporting|errorexception|escapeshellarg|escapeshellcmd|eval|event_add|event_base_free|event_base_loop|event_base_loopbreak|event_base_loopexit|event_base_new|event_base_priority_init|event_base_set|event_buffer_base_set|event_buffer_disable|event_buffer_enable|event_buffer_fd_set|event_buffer_free|event_buffer_new|event_buffer_priority_set|event_buffer_read|event_buffer_set_callback|event_buffer_timeout_set|event_buffer_watermark_set|event_buffer_write|event_del|event_free|event_new|event_set|exception|exec|exif_imagetype|exif_read_data|exif_tagname|exif_thumbnail|exit|exp|expect_expectl|expect_popen|explode|expm1|export|export|extension_loaded|extract|ezmlm_hash|fam_cancel_monitor|fam_close|fam_monitor_collection|fam_monitor_directory|fam_monitor_file|fam_next_event|fam_open|fam_pending|fam_resume_monitor|fam_suspend_monitor|fbsql_affected_rows|fbsql_autocommit|fbsql_blob_size|fbsql_change_user|fbsql_clob_size|fbsql_close|fbsql_commit|fbsql_connect|fbsql_create_blob|fbsql_create_clob|fbsql_create_db|fbsql_data_seek|fbsql_database|fbsql_database_password|fbsql_db_query|fbsql_db_status|fbsql_drop_db|fbsql_errno|fbsql_error|fbsql_fetch_array|fbsql_fetch_assoc|fbsql_fetch_field|fbsql_fetch_lengths|fbsql_fetch_object|fbsql_fetch_row|fbsql_field_flags|fbsql_field_len|fbsql_field_name|fbsql_field_seek|fbsql_field_table|fbsql_field_type|fbsql_free_result|fbsql_get_autostart_info|fbsql_hostname|fbsql_insert_id|fbsql_list_dbs|fbsql_list_fields|fbsql_list_tables|fbsql_next_result|fbsql_num_fields|fbsql_num_rows|fbsql_password|fbsql_pconnect|fbsql_query|fbsql_read_blob|fbsql_read_clob|fbsql_result|fbsql_rollback|fbsql_rows_fetched|fbsql_select_db|fbsql_set_characterset|fbsql_set_lob_mode|fbsql_set_password|fbsql_set_transaction|fbsql_start_db|fbsql_stop_db|fbsql_table_name|fbsql_tablename|fbsql_username|fbsql_warnings|fclose|fdf_add_doc_javascript|fdf_add_template|fdf_close|fdf_create|fdf_enum_values|fdf_errno|fdf_error|fdf_get_ap|fdf_get_attachment|fdf_get_encoding|fdf_get_file|fdf_get_flags|fdf_get_opt|fdf_get_status|fdf_get_value|fdf_get_version|fdf_header|fdf_next_field_name|fdf_open|fdf_open_string|fdf_remove_item|fdf_save|fdf_save_string|fdf_set_ap|fdf_set_encoding|fdf_set_file|fdf_set_flags|fdf_set_javascript_action|fdf_set_on_import_javascript|fdf_set_opt|fdf_set_status|fdf_set_submit_form_action|fdf_set_target_frame|fdf_set_value|fdf_set_version|feof|fflush|fgetc|fgetcsv|fgets|fgetss|file|file_exists|file_get_contents|file_put_contents|fileatime|filectime|filegroup|fileinode|filemtime|fileowner|fileperms|filepro|filepro_fieldcount|filepro_fieldname|filepro_fieldtype|filepro_fieldwidth|filepro_retrieve|filepro_rowcount|filesize|filesystemiterator|filetype|filter_has_var|filter_id|filter_input|filter_input_array|filter_list|filter_var|filter_var_array|filteriterator|finfo_buffer|finfo_close|finfo_file|finfo_open|finfo_set_flags|floatval|flock|floor|flush|fmod|fnmatch|fopen|forward_static_call|forward_static_call_array|fpassthru|fprintf|fputcsv|fputs|fread|frenchtojd|fribidi_log2vis|fscanf|fseek|fsockopen|fstat|ftell|ftok|ftp_alloc|ftp_cdup|ftp_chdir|ftp_chmod|ftp_close|ftp_connect|ftp_delete|ftp_exec|ftp_fget|ftp_fput|ftp_get|ftp_get_option|ftp_login|ftp_mdtm|ftp_mkdir|ftp_nb_continue|ftp_nb_fget|ftp_nb_fput|ftp_nb_get|ftp_nb_put|ftp_nlist|ftp_pasv|ftp_put|ftp_pwd|ftp_quit|ftp_raw|ftp_rawlist|ftp_rename|ftp_rmdir|ftp_set_option|ftp_site|ftp_size|ftp_ssl_connect|ftp_systype|ftruncate|func_get_arg|func_get_args|func_num_args|function_exists|fwrite|gc_collect_cycles|gc_disable|gc_enable|gc_enabled|gd_info|gearmanclient|gearmanjob|gearmantask|gearmanworker|geoip_continent_code_by_name|geoip_country_code3_by_name|geoip_country_code_by_name|geoip_country_name_by_name|geoip_database_info|geoip_db_avail|geoip_db_filename|geoip_db_get_all_info|geoip_id_by_name|geoip_isp_by_name|geoip_org_by_name|geoip_record_by_name|geoip_region_by_name|geoip_region_name_by_code|geoip_time_zone_by_country_and_region|getMeta|getNamed|getValue|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_files|get_resource_type|getallheaders|getconstant|getconstants|getconstructor|getcwd|getdate|getdefaultproperties|getdoccomment|getendline|getenv|getextension|getextensionname|getfilename|gethostbyaddr|gethostbyname|gethostbynamel|gethostname|getimagesize|getinterfacenames|getinterfaces|getlastmod|getmethod|getmethods|getmodifiers|getmxrr|getmygid|getmyinode|getmypid|getmyuid|getname|getnamespacename|getopt|getparentclass|getproperties|getproperty|getprotobyname|getprotobynumber|getrandmax|getrusage|getservbyname|getservbyport|getshortname|getstartline|getstaticproperties|getstaticpropertyvalue|gettext|gettimeofday|gettype|glob|globiterator|gmagick|gmagickdraw|gmagickpixel|gmdate|gmmktime|gmp_abs|gmp_add|gmp_and|gmp_clrbit|gmp_cmp|gmp_com|gmp_div|gmp_div_q|gmp_div_qr|gmp_div_r|gmp_divexact|gmp_fact|gmp_gcd|gmp_gcdext|gmp_hamdist|gmp_init|gmp_intval|gmp_invert|gmp_jacobi|gmp_legendre|gmp_mod|gmp_mul|gmp_neg|gmp_nextprime|gmp_or|gmp_perfect_square|gmp_popcount|gmp_pow|gmp_powm|gmp_prob_prime|gmp_random|gmp_scan0|gmp_scan1|gmp_setbit|gmp_sign|gmp_sqrt|gmp_sqrtrem|gmp_strval|gmp_sub|gmp_testbit|gmp_xor|gmstrftime|gnupg_adddecryptkey|gnupg_addencryptkey|gnupg_addsignkey|gnupg_cleardecryptkeys|gnupg_clearencryptkeys|gnupg_clearsignkeys|gnupg_decrypt|gnupg_decryptverify|gnupg_encrypt|gnupg_encryptsign|gnupg_export|gnupg_geterror|gnupg_getprotocol|gnupg_import|gnupg_init|gnupg_keyinfo|gnupg_setarmor|gnupg_seterrormode|gnupg_setsignmode|gnupg_sign|gnupg_verify|gopher_parsedir|grapheme_extract|grapheme_stripos|grapheme_stristr|grapheme_strlen|grapheme_strpos|grapheme_strripos|grapheme_strrpos|grapheme_strstr|grapheme_substr|gregoriantojd|gupnp_context_get_host_ip|gupnp_context_get_port|gupnp_context_get_subscription_timeout|gupnp_context_host_path|gupnp_context_new|gupnp_context_set_subscription_timeout|gupnp_context_timeout_add|gupnp_context_unhost_path|gupnp_control_point_browse_start|gupnp_control_point_browse_stop|gupnp_control_point_callback_set|gupnp_control_point_new|gupnp_device_action_callback_set|gupnp_device_info_get|gupnp_device_info_get_service|gupnp_root_device_get_available|gupnp_root_device_get_relative_location|gupnp_root_device_new|gupnp_root_device_set_available|gupnp_root_device_start|gupnp_root_device_stop|gupnp_service_action_get|gupnp_service_action_return|gupnp_service_action_return_error|gupnp_service_action_set|gupnp_service_freeze_notify|gupnp_service_info_get|gupnp_service_info_get_introspection|gupnp_service_introspection_get_state_variable|gupnp_service_notify|gupnp_service_proxy_action_get|gupnp_service_proxy_action_set|gupnp_service_proxy_add_notify|gupnp_service_proxy_callback_set|gupnp_service_proxy_get_subscribed|gupnp_service_proxy_remove_notify|gupnp_service_proxy_set_subscribed|gupnp_service_thaw_notify|gzclose|gzcompress|gzdecode|gzdeflate|gzencode|gzeof|gzfile|gzgetc|gzgets|gzgetss|gzinflate|gzopen|gzpassthru|gzputs|gzread|gzrewind|gzseek|gztell|gzuncompress|gzwrite|halt_compiler|haruannotation|haruannotation_setborderstyle|haruannotation_sethighlightmode|haruannotation_seticon|haruannotation_setopened|harudestination|harudestination_setfit|harudestination_setfitb|harudestination_setfitbh|harudestination_setfitbv|harudestination_setfith|harudestination_setfitr|harudestination_setfitv|harudestination_setxyz|harudoc|harudoc_addpage|harudoc_addpagelabel|harudoc_construct|harudoc_createoutline|harudoc_getcurrentencoder|harudoc_getcurrentpage|harudoc_getencoder|harudoc_getfont|harudoc_getinfoattr|harudoc_getpagelayout|harudoc_getpagemode|harudoc_getstreamsize|harudoc_insertpage|harudoc_loadjpeg|harudoc_loadpng|harudoc_loadraw|harudoc_loadttc|harudoc_loadttf|harudoc_loadtype1|harudoc_output|harudoc_readfromstream|harudoc_reseterror|harudoc_resetstream|harudoc_save|harudoc_savetostream|harudoc_setcompressionmode|harudoc_setcurrentencoder|harudoc_setencryptionmode|harudoc_setinfoattr|harudoc_setinfodateattr|harudoc_setopenaction|harudoc_setpagelayout|harudoc_setpagemode|harudoc_setpagesconfiguration|harudoc_setpassword|harudoc_setpermission|harudoc_usecnsencodings|harudoc_usecnsfonts|harudoc_usecntencodings|harudoc_usecntfonts|harudoc_usejpencodings|harudoc_usejpfonts|harudoc_usekrencodings|harudoc_usekrfonts|haruencoder|haruencoder_getbytetype|haruencoder_gettype|haruencoder_getunicode|haruencoder_getwritingmode|haruexception|harufont|harufont_getascent|harufont_getcapheight|harufont_getdescent|harufont_getencodingname|harufont_getfontname|harufont_gettextwidth|harufont_getunicodewidth|harufont_getxheight|harufont_measuretext|haruimage|haruimage_getbitspercomponent|haruimage_getcolorspace|haruimage_getheight|haruimage_getsize|haruimage_getwidth|haruimage_setcolormask|haruimage_setmaskimage|haruoutline|haruoutline_setdestination|haruoutline_setopened|harupage|harupage_arc|harupage_begintext|harupage_circle|harupage_closepath|harupage_concat|harupage_createdestination|harupage_createlinkannotation|harupage_createtextannotation|harupage_createurlannotation|harupage_curveto|harupage_curveto2|harupage_curveto3|harupage_drawimage|harupage_ellipse|harupage_endpath|harupage_endtext|harupage_eofill|harupage_eofillstroke|harupage_fill|harupage_fillstroke|harupage_getcharspace|harupage_getcmykfill|harupage_getcmykstroke|harupage_getcurrentfont|harupage_getcurrentfontsize|harupage_getcurrentpos|harupage_getcurrenttextpos|harupage_getdash|harupage_getfillingcolorspace|harupage_getflatness|harupage_getgmode|harupage_getgrayfill|harupage_getgraystroke|harupage_getheight|harupage_gethorizontalscaling|harupage_getlinecap|harupage_getlinejoin|harupage_getlinewidth|harupage_getmiterlimit|harupage_getrgbfill|harupage_getrgbstroke|harupage_getstrokingcolorspace|harupage_gettextleading|harupage_gettextmatrix|harupage_gettextrenderingmode|harupage_gettextrise|harupage_gettextwidth|harupage_gettransmatrix|harupage_getwidth|harupage_getwordspace|harupage_lineto|harupage_measuretext|harupage_movetextpos|harupage_moveto|harupage_movetonextline|harupage_rectangle|harupage_setcharspace|harupage_setcmykfill|harupage_setcmykstroke|harupage_setdash|harupage_setflatness|harupage_setfontandsize|harupage_setgrayfill|harupage_setgraystroke|harupage_setheight|harupage_sethorizontalscaling|harupage_setlinecap|harupage_setlinejoin|harupage_setlinewidth|harupage_setmiterlimit|harupage_setrgbfill|harupage_setrgbstroke|harupage_setrotate|harupage_setsize|harupage_setslideshow|harupage_settextleading|harupage_settextmatrix|harupage_settextrenderingmode|harupage_settextrise|harupage_setwidth|harupage_setwordspace|harupage_showtext|harupage_showtextnextline|harupage_stroke|harupage_textout|harupage_textrect|hasconstant|hash|hash_algos|hash_copy|hash_file|hash_final|hash_hmac|hash_hmac_file|hash_init|hash_update|hash_update_file|hash_update_stream|hasmethod|hasproperty|header|header_register_callback|header_remove|headers_list|headers_sent|hebrev|hebrevc|hex2bin|hexdec|highlight_file|highlight_string|html_entity_decode|htmlentities|htmlspecialchars|htmlspecialchars_decode|http_build_cookie|http_build_query|http_build_str|http_build_url|http_cache_etag|http_cache_last_modified|http_chunked_decode|http_date|http_deflate|http_get|http_get_request_body|http_get_request_body_stream|http_get_request_headers|http_head|http_inflate|http_match_etag|http_match_modified|http_match_request_header|http_negotiate_charset|http_negotiate_content_type|http_negotiate_language|http_parse_cookie|http_parse_headers|http_parse_message|http_parse_params|http_persistent_handles_clean|http_persistent_handles_count|http_persistent_handles_ident|http_post_data|http_post_fields|http_put_data|http_put_file|http_put_stream|http_redirect|http_request|http_request_body_encode|http_request_method_exists|http_request_method_name|http_request_method_register|http_request_method_unregister|http_response_code|http_send_content_disposition|http_send_content_type|http_send_data|http_send_file|http_send_last_modified|http_send_status|http_send_stream|http_support|http_throttle|httpdeflatestream|httpdeflatestream_construct|httpdeflatestream_factory|httpdeflatestream_finish|httpdeflatestream_flush|httpdeflatestream_update|httpinflatestream|httpinflatestream_construct|httpinflatestream_factory|httpinflatestream_finish|httpinflatestream_flush|httpinflatestream_update|httpmessage|httpmessage_addheaders|httpmessage_construct|httpmessage_detach|httpmessage_factory|httpmessage_fromenv|httpmessage_fromstring|httpmessage_getbody|httpmessage_getheader|httpmessage_getheaders|httpmessage_gethttpversion|httpmessage_getparentmessage|httpmessage_getrequestmethod|httpmessage_getrequesturl|httpmessage_getresponsecode|httpmessage_getresponsestatus|httpmessage_gettype|httpmessage_guesscontenttype|httpmessage_prepend|httpmessage_reverse|httpmessage_send|httpmessage_setbody|httpmessage_setheaders|httpmessage_sethttpversion|httpmessage_setrequestmethod|httpmessage_setrequesturl|httpmessage_setresponsecode|httpmessage_setresponsestatus|httpmessage_settype|httpmessage_tomessagetypeobject|httpmessage_tostring|httpquerystring|httpquerystring_construct|httpquerystring_get|httpquerystring_mod|httpquerystring_set|httpquerystring_singleton|httpquerystring_toarray|httpquerystring_tostring|httpquerystring_xlate|httprequest|httprequest_addcookies|httprequest_addheaders|httprequest_addpostfields|httprequest_addpostfile|httprequest_addputdata|httprequest_addquerydata|httprequest_addrawpostdata|httprequest_addssloptions|httprequest_clearhistory|httprequest_construct|httprequest_enablecookies|httprequest_getcontenttype|httprequest_getcookies|httprequest_getheaders|httprequest_gethistory|httprequest_getmethod|httprequest_getoptions|httprequest_getpostfields|httprequest_getpostfiles|httprequest_getputdata|httprequest_getputfile|httprequest_getquerydata|httprequest_getrawpostdata|httprequest_getrawrequestmessage|httprequest_getrawresponsemessage|httprequest_getrequestmessage|httprequest_getresponsebody|httprequest_getresponsecode|httprequest_getresponsecookies|httprequest_getresponsedata|httprequest_getresponseheader|httprequest_getresponseinfo|httprequest_getresponsemessage|httprequest_getresponsestatus|httprequest_getssloptions|httprequest_geturl|httprequest_resetcookies|httprequest_send|httprequest_setcontenttype|httprequest_setcookies|httprequest_setheaders|httprequest_setmethod|httprequest_setoptions|httprequest_setpostfields|httprequest_setpostfiles|httprequest_setputdata|httprequest_setputfile|httprequest_setquerydata|httprequest_setrawpostdata|httprequest_setssloptions|httprequest_seturl|httprequestpool|httprequestpool_attach|httprequestpool_construct|httprequestpool_destruct|httprequestpool_detach|httprequestpool_getattachedrequests|httprequestpool_getfinishedrequests|httprequestpool_reset|httprequestpool_send|httprequestpool_socketperform|httprequestpool_socketselect|httpresponse|httpresponse_capture|httpresponse_getbuffersize|httpresponse_getcache|httpresponse_getcachecontrol|httpresponse_getcontentdisposition|httpresponse_getcontenttype|httpresponse_getdata|httpresponse_getetag|httpresponse_getfile|httpresponse_getgzip|httpresponse_getheader|httpresponse_getlastmodified|httpresponse_getrequestbody|httpresponse_getrequestbodystream|httpresponse_getrequestheaders|httpresponse_getstream|httpresponse_getthrottledelay|httpresponse_guesscontenttype|httpresponse_redirect|httpresponse_send|httpresponse_setbuffersize|httpresponse_setcache|httpresponse_setcachecontrol|httpresponse_setcontentdisposition|httpresponse_setcontenttype|httpresponse_setdata|httpresponse_setetag|httpresponse_setfile|httpresponse_setgzip|httpresponse_setheader|httpresponse_setlastmodified|httpresponse_setstream|httpresponse_setthrottledelay|httpresponse_status|hw_array2objrec|hw_changeobject|hw_children|hw_childrenobj|hw_close|hw_connect|hw_connection_info|hw_cp|hw_deleteobject|hw_docbyanchor|hw_docbyanchorobj|hw_document_attributes|hw_document_bodytag|hw_document_content|hw_document_setcontent|hw_document_size|hw_dummy|hw_edittext|hw_error|hw_errormsg|hw_free_document|hw_getanchors|hw_getanchorsobj|hw_getandlock|hw_getchildcoll|hw_getchildcollobj|hw_getchilddoccoll|hw_getchilddoccollobj|hw_getobject|hw_getobjectbyquery|hw_getobjectbyquerycoll|hw_getobjectbyquerycollobj|hw_getobjectbyqueryobj|hw_getparents|hw_getparentsobj|hw_getrellink|hw_getremote|hw_getremotechildren|hw_getsrcbydestobj|hw_gettext|hw_getusername|hw_identify|hw_incollections|hw_info|hw_inscoll|hw_insdoc|hw_insertanchors|hw_insertdocument|hw_insertobject|hw_mapid|hw_modifyobject|hw_mv|hw_new_document|hw_objrec2array|hw_output_document|hw_pconnect|hw_pipedocument|hw_root|hw_setlinkroot|hw_stat|hw_unlock|hw_who|hwapi_attribute|hwapi_attribute_key|hwapi_attribute_langdepvalue|hwapi_attribute_value|hwapi_attribute_values|hwapi_checkin|hwapi_checkout|hwapi_children|hwapi_content|hwapi_content_mimetype|hwapi_content_read|hwapi_copy|hwapi_dbstat|hwapi_dcstat|hwapi_dstanchors|hwapi_dstofsrcanchor|hwapi_error_count|hwapi_error_reason|hwapi_find|hwapi_ftstat|hwapi_hgcsp|hwapi_hwstat|hwapi_identify|hwapi_info|hwapi_insert|hwapi_insertanchor|hwapi_insertcollection|hwapi_insertdocument|hwapi_link|hwapi_lock|hwapi_move|hwapi_new_content|hwapi_object|hwapi_object_assign|hwapi_object_attreditable|hwapi_object_count|hwapi_object_insert|hwapi_object_new|hwapi_object_remove|hwapi_object_title|hwapi_object_value|hwapi_objectbyanchor|hwapi_parents|hwapi_reason_description|hwapi_reason_type|hwapi_remove|hwapi_replace|hwapi_setcommittedversion|hwapi_srcanchors|hwapi_srcsofdst|hwapi_unlock|hwapi_user|hwapi_userlist|hypot|ibase_add_user|ibase_affected_rows|ibase_backup|ibase_blob_add|ibase_blob_cancel|ibase_blob_close|ibase_blob_create|ibase_blob_echo|ibase_blob_get|ibase_blob_import|ibase_blob_info|ibase_blob_open|ibase_close|ibase_commit|ibase_commit_ret|ibase_connect|ibase_db_info|ibase_delete_user|ibase_drop_db|ibase_errcode|ibase_errmsg|ibase_execute|ibase_fetch_assoc|ibase_fetch_object|ibase_fetch_row|ibase_field_info|ibase_free_event_handler|ibase_free_query|ibase_free_result|ibase_gen_id|ibase_maintain_db|ibase_modify_user|ibase_name_result|ibase_num_fields|ibase_num_params|ibase_param_info|ibase_pconnect|ibase_prepare|ibase_query|ibase_restore|ibase_rollback|ibase_rollback_ret|ibase_server_info|ibase_service_attach|ibase_service_detach|ibase_set_event_handler|ibase_timefmt|ibase_trans|ibase_wait_event|iconv|iconv_get_encoding|iconv_mime_decode|iconv_mime_decode_headers|iconv_mime_encode|iconv_set_encoding|iconv_strlen|iconv_strpos|iconv_strrpos|iconv_substr|id3_get_frame_long_name|id3_get_frame_short_name|id3_get_genre_id|id3_get_genre_list|id3_get_genre_name|id3_get_tag|id3_get_version|id3_remove_tag|id3_set_tag|id3v2attachedpictureframe|id3v2frame|id3v2tag|idate|idn_to_ascii|idn_to_unicode|idn_to_utf8|ifx_affected_rows|ifx_blobinfile_mode|ifx_byteasvarchar|ifx_close|ifx_connect|ifx_copy_blob|ifx_create_blob|ifx_create_char|ifx_do|ifx_error|ifx_errormsg|ifx_fetch_row|ifx_fieldproperties|ifx_fieldtypes|ifx_free_blob|ifx_free_char|ifx_free_result|ifx_get_blob|ifx_get_char|ifx_getsqlca|ifx_htmltbl_result|ifx_nullformat|ifx_num_fields|ifx_num_rows|ifx_pconnect|ifx_prepare|ifx_query|ifx_textasvarchar|ifx_update_blob|ifx_update_char|ifxus_close_slob|ifxus_create_slob|ifxus_free_slob|ifxus_open_slob|ifxus_read_slob|ifxus_seek_slob|ifxus_tell_slob|ifxus_write_slob|ignore_user_abort|iis_add_server|iis_get_dir_security|iis_get_script_map|iis_get_server_by_comment|iis_get_server_by_path|iis_get_server_rights|iis_get_service_state|iis_remove_server|iis_set_app_settings|iis_set_dir_security|iis_set_script_map|iis_set_server_rights|iis_start_server|iis_start_service|iis_stop_server|iis_stop_service|image2wbmp|image_type_to_extension|image_type_to_mime_type|imagealphablending|imageantialias|imagearc|imagechar|imagecharup|imagecolorallocate|imagecolorallocatealpha|imagecolorat|imagecolorclosest|imagecolorclosestalpha|imagecolorclosesthwb|imagecolordeallocate|imagecolorexact|imagecolorexactalpha|imagecolormatch|imagecolorresolve|imagecolorresolvealpha|imagecolorset|imagecolorsforindex|imagecolorstotal|imagecolortransparent|imageconvolution|imagecopy|imagecopymerge|imagecopymergegray|imagecopyresampled|imagecopyresized|imagecreate|imagecreatefromgd|imagecreatefromgd2|imagecreatefromgd2part|imagecreatefromgif|imagecreatefromjpeg|imagecreatefrompng|imagecreatefromstring|imagecreatefromwbmp|imagecreatefromxbm|imagecreatefromxpm|imagecreatetruecolor|imagedashedline|imagedestroy|imageellipse|imagefill|imagefilledarc|imagefilledellipse|imagefilledpolygon|imagefilledrectangle|imagefilltoborder|imagefilter|imagefontheight|imagefontwidth|imageftbbox|imagefttext|imagegammacorrect|imagegd|imagegd2|imagegif|imagegrabscreen|imagegrabwindow|imageinterlace|imageistruecolor|imagejpeg|imagelayereffect|imageline|imageloadfont|imagepalettecopy|imagepng|imagepolygon|imagepsbbox|imagepsencodefont|imagepsextendfont|imagepsfreefont|imagepsloadfont|imagepsslantfont|imagepstext|imagerectangle|imagerotate|imagesavealpha|imagesetbrush|imagesetpixel|imagesetstyle|imagesetthickness|imagesettile|imagestring|imagestringup|imagesx|imagesy|imagetruecolortopalette|imagettfbbox|imagettftext|imagetypes|imagewbmp|imagexbm|imagick|imagick_adaptiveblurimage|imagick_adaptiveresizeimage|imagick_adaptivesharpenimage|imagick_adaptivethresholdimage|imagick_addimage|imagick_addnoiseimage|imagick_affinetransformimage|imagick_animateimages|imagick_annotateimage|imagick_appendimages|imagick_averageimages|imagick_blackthresholdimage|imagick_blurimage|imagick_borderimage|imagick_charcoalimage|imagick_chopimage|imagick_clear|imagick_clipimage|imagick_clippathimage|imagick_clone|imagick_clutimage|imagick_coalesceimages|imagick_colorfloodfillimage|imagick_colorizeimage|imagick_combineimages|imagick_commentimage|imagick_compareimagechannels|imagick_compareimagelayers|imagick_compareimages|imagick_compositeimage|imagick_construct|imagick_contrastimage|imagick_contraststretchimage|imagick_convolveimage|imagick_cropimage|imagick_cropthumbnailimage|imagick_current|imagick_cyclecolormapimage|imagick_decipherimage|imagick_deconstructimages|imagick_deleteimageartifact|imagick_despeckleimage|imagick_destroy|imagick_displayimage|imagick_displayimages|imagick_distortimage|imagick_drawimage|imagick_edgeimage|imagick_embossimage|imagick_encipherimage|imagick_enhanceimage|imagick_equalizeimage|imagick_evaluateimage|imagick_extentimage|imagick_flattenimages|imagick_flipimage|imagick_floodfillpaintimage|imagick_flopimage|imagick_frameimage|imagick_fximage|imagick_gammaimage|imagick_gaussianblurimage|imagick_getcolorspace|imagick_getcompression|imagick_getcompressionquality|imagick_getcopyright|imagick_getfilename|imagick_getfont|imagick_getformat|imagick_getgravity|imagick_gethomeurl|imagick_getimage|imagick_getimagealphachannel|imagick_getimageartifact|imagick_getimagebackgroundcolor|imagick_getimageblob|imagick_getimageblueprimary|imagick_getimagebordercolor|imagick_getimagechanneldepth|imagick_getimagechanneldistortion|imagick_getimagechanneldistortions|imagick_getimagechannelextrema|imagick_getimagechannelmean|imagick_getimagechannelrange|imagick_getimagechannelstatistics|imagick_getimageclipmask|imagick_getimagecolormapcolor|imagick_getimagecolors|imagick_getimagecolorspace|imagick_getimagecompose|imagick_getimagecompression|imagick_getimagecompressionquality|imagick_getimagedelay|imagick_getimagedepth|imagick_getimagedispose|imagick_getimagedistortion|imagick_getimageextrema|imagick_getimagefilename|imagick_getimageformat|imagick_getimagegamma|imagick_getimagegeometry|imagick_getimagegravity|imagick_getimagegreenprimary|imagick_getimageheight|imagick_getimagehistogram|imagick_getimageindex|imagick_getimageinterlacescheme|imagick_getimageinterpolatemethod|imagick_getimageiterations|imagick_getimagelength|imagick_getimagemagicklicense|imagick_getimagematte|imagick_getimagemattecolor|imagick_getimageorientation|imagick_getimagepage|imagick_getimagepixelcolor|imagick_getimageprofile|imagick_getimageprofiles|imagick_getimageproperties|imagick_getimageproperty|imagick_getimageredprimary|imagick_getimageregion|imagick_getimagerenderingintent|imagick_getimageresolution|imagick_getimagesblob|imagick_getimagescene|imagick_getimagesignature|imagick_getimagesize|imagick_getimagetickspersecond|imagick_getimagetotalinkdensity|imagick_getimagetype|imagick_getimageunits|imagick_getimagevirtualpixelmethod|imagick_getimagewhitepoint|imagick_getimagewidth|imagick_getinterlacescheme|imagick_getiteratorindex|imagick_getnumberimages|imagick_getoption|imagick_getpackagename|imagick_getpage|imagick_getpixeliterator|imagick_getpixelregioniterator|imagick_getpointsize|imagick_getquantumdepth|imagick_getquantumrange|imagick_getreleasedate|imagick_getresource|imagick_getresourcelimit|imagick_getsamplingfactors|imagick_getsize|imagick_getsizeoffset|imagick_getversion|imagick_hasnextimage|imagick_haspreviousimage|imagick_identifyimage|imagick_implodeimage|imagick_labelimage|imagick_levelimage|imagick_linearstretchimage|imagick_liquidrescaleimage|imagick_magnifyimage|imagick_mapimage|imagick_mattefloodfillimage|imagick_medianfilterimage|imagick_mergeimagelayers|imagick_minifyimage|imagick_modulateimage|imagick_montageimage|imagick_morphimages|imagick_mosaicimages|imagick_motionblurimage|imagick_negateimage|imagick_newimage|imagick_newpseudoimage|imagick_nextimage|imagick_normalizeimage|imagick_oilpaintimage|imagick_opaquepaintimage|imagick_optimizeimagelayers|imagick_orderedposterizeimage|imagick_paintfloodfillimage|imagick_paintopaqueimage|imagick_painttransparentimage|imagick_pingimage|imagick_pingimageblob|imagick_pingimagefile|imagick_polaroidimage|imagick_posterizeimage|imagick_previewimages|imagick_previousimage|imagick_profileimage|imagick_quantizeimage|imagick_quantizeimages|imagick_queryfontmetrics|imagick_queryfonts|imagick_queryformats|imagick_radialblurimage|imagick_raiseimage|imagick_randomthresholdimage|imagick_readimage|imagick_readimageblob|imagick_readimagefile|imagick_recolorimage|imagick_reducenoiseimage|imagick_removeimage|imagick_removeimageprofile|imagick_render|imagick_resampleimage|imagick_resetimagepage|imagick_resizeimage|imagick_rollimage|imagick_rotateimage|imagick_roundcorners|imagick_sampleimage|imagick_scaleimage|imagick_separateimagechannel|imagick_sepiatoneimage|imagick_setbackgroundcolor|imagick_setcolorspace|imagick_setcompression|imagick_setcompressionquality|imagick_setfilename|imagick_setfirstiterator|imagick_setfont|imagick_setformat|imagick_setgravity|imagick_setimage|imagick_setimagealphachannel|imagick_setimageartifact|imagick_setimagebackgroundcolor|imagick_setimagebias|imagick_setimageblueprimary|imagick_setimagebordercolor|imagick_setimagechanneldepth|imagick_setimageclipmask|imagick_setimagecolormapcolor|imagick_setimagecolorspace|imagick_setimagecompose|imagick_setimagecompression|imagick_setimagecompressionquality|imagick_setimagedelay|imagick_setimagedepth|imagick_setimagedispose|imagick_setimageextent|imagick_setimagefilename|imagick_setimageformat|imagick_setimagegamma|imagick_setimagegravity|imagick_setimagegreenprimary|imagick_setimageindex|imagick_setimageinterlacescheme|imagick_setimageinterpolatemethod|imagick_setimageiterations|imagick_setimagematte|imagick_setimagemattecolor|imagick_setimageopacity|imagick_setimageorientation|imagick_setimagepage|imagick_setimageprofile|imagick_setimageproperty|imagick_setimageredprimary|imagick_setimagerenderingintent|imagick_setimageresolution|imagick_setimagescene|imagick_setimagetickspersecond|imagick_setimagetype|imagick_setimageunits|imagick_setimagevirtualpixelmethod|imagick_setimagewhitepoint|imagick_setinterlacescheme|imagick_setiteratorindex|imagick_setlastiterator|imagick_setoption|imagick_setpage|imagick_setpointsize|imagick_setresolution|imagick_setresourcelimit|imagick_setsamplingfactors|imagick_setsize|imagick_setsizeoffset|imagick_settype|imagick_shadeimage|imagick_shadowimage|imagick_sharpenimage|imagick_shaveimage|imagick_shearimage|imagick_sigmoidalcontrastimage|imagick_sketchimage|imagick_solarizeimage|imagick_spliceimage|imagick_spreadimage|imagick_steganoimage|imagick_stereoimage|imagick_stripimage|imagick_swirlimage|imagick_textureimage|imagick_thresholdimage|imagick_thumbnailimage|imagick_tintimage|imagick_transformimage|imagick_transparentpaintimage|imagick_transposeimage|imagick_transverseimage|imagick_trimimage|imagick_uniqueimagecolors|imagick_unsharpmaskimage|imagick_valid|imagick_vignetteimage|imagick_waveimage|imagick_whitethresholdimage|imagick_writeimage|imagick_writeimagefile|imagick_writeimages|imagick_writeimagesfile|imagickdraw|imagickdraw_affine|imagickdraw_annotation|imagickdraw_arc|imagickdraw_bezier|imagickdraw_circle|imagickdraw_clear|imagickdraw_clone|imagickdraw_color|imagickdraw_comment|imagickdraw_composite|imagickdraw_construct|imagickdraw_destroy|imagickdraw_ellipse|imagickdraw_getclippath|imagickdraw_getcliprule|imagickdraw_getclipunits|imagickdraw_getfillcolor|imagickdraw_getfillopacity|imagickdraw_getfillrule|imagickdraw_getfont|imagickdraw_getfontfamily|imagickdraw_getfontsize|imagickdraw_getfontstyle|imagickdraw_getfontweight|imagickdraw_getgravity|imagickdraw_getstrokeantialias|imagickdraw_getstrokecolor|imagickdraw_getstrokedasharray|imagickdraw_getstrokedashoffset|imagickdraw_getstrokelinecap|imagickdraw_getstrokelinejoin|imagickdraw_getstrokemiterlimit|imagickdraw_getstrokeopacity|imagickdraw_getstrokewidth|imagickdraw_gettextalignment|imagickdraw_gettextantialias|imagickdraw_gettextdecoration|imagickdraw_gettextencoding|imagickdraw_gettextundercolor|imagickdraw_getvectorgraphics|imagickdraw_line|imagickdraw_matte|imagickdraw_pathclose|imagickdraw_pathcurvetoabsolute|imagickdraw_pathcurvetoquadraticbezierabsolute|imagickdraw_pathcurvetoquadraticbezierrelative|imagickdraw_pathcurvetoquadraticbeziersmoothabsolute|imagickdraw_pathcurvetoquadraticbeziersmoothrelative|imagickdraw_pathcurvetorelative|imagickdraw_pathcurvetosmoothabsolute|imagickdraw_pathcurvetosmoothrelative|imagickdraw_pathellipticarcabsolute|imagickdraw_pathellipticarcrelative|imagickdraw_pathfinish|imagickdraw_pathlinetoabsolute|imagickdraw_pathlinetohorizontalabsolute|imagickdraw_pathlinetohorizontalrelative|imagickdraw_pathlinetorelative|imagickdraw_pathlinetoverticalabsolute|imagickdraw_pathlinetoverticalrelative|imagickdraw_pathmovetoabsolute|imagickdraw_pathmovetorelative|imagickdraw_pathstart|imagickdraw_point|imagickdraw_polygon|imagickdraw_polyline|imagickdraw_pop|imagickdraw_popclippath|imagickdraw_popdefs|imagickdraw_poppattern|imagickdraw_push|imagickdraw_pushclippath|imagickdraw_pushdefs|imagickdraw_pushpattern|imagickdraw_rectangle|imagickdraw_render|imagickdraw_rotate|imagickdraw_roundrectangle|imagickdraw_scale|imagickdraw_setclippath|imagickdraw_setcliprule|imagickdraw_setclipunits|imagickdraw_setfillalpha|imagickdraw_setfillcolor|imagickdraw_setfillopacity|imagickdraw_setfillpatternurl|imagickdraw_setfillrule|imagickdraw_setfont|imagickdraw_setfontfamily|imagickdraw_setfontsize|imagickdraw_setfontstretch|imagickdraw_setfontstyle|imagickdraw_setfontweight|imagickdraw_setgravity|imagickdraw_setstrokealpha|imagickdraw_setstrokeantialias|imagickdraw_setstrokecolor|imagickdraw_setstrokedasharray|imagickdraw_setstrokedashoffset|imagickdraw_setstrokelinecap|imagickdraw_setstrokelinejoin|imagickdraw_setstrokemiterlimit|imagickdraw_setstrokeopacity|imagickdraw_setstrokepatternurl|imagickdraw_setstrokewidth|imagickdraw_settextalignment|imagickdraw_settextantialias|imagickdraw_settextdecoration|imagickdraw_settextencoding|imagickdraw_settextundercolor|imagickdraw_setvectorgraphics|imagickdraw_setviewbox|imagickdraw_skewx|imagickdraw_skewy|imagickdraw_translate|imagickpixel|imagickpixel_clear|imagickpixel_construct|imagickpixel_destroy|imagickpixel_getcolor|imagickpixel_getcolorasstring|imagickpixel_getcolorcount|imagickpixel_getcolorvalue|imagickpixel_gethsl|imagickpixel_issimilar|imagickpixel_setcolor|imagickpixel_setcolorvalue|imagickpixel_sethsl|imagickpixeliterator|imagickpixeliterator_clear|imagickpixeliterator_construct|imagickpixeliterator_destroy|imagickpixeliterator_getcurrentiteratorrow|imagickpixeliterator_getiteratorrow|imagickpixeliterator_getnextiteratorrow|imagickpixeliterator_getpreviousiteratorrow|imagickpixeliterator_newpixeliterator|imagickpixeliterator_newpixelregioniterator|imagickpixeliterator_resetiterator|imagickpixeliterator_setiteratorfirstrow|imagickpixeliterator_setiteratorlastrow|imagickpixeliterator_setiteratorrow|imagickpixeliterator_synciterator|imap_8bit|imap_alerts|imap_append|imap_base64|imap_binary|imap_body|imap_bodystruct|imap_check|imap_clearflag_full|imap_close|imap_create|imap_createmailbox|imap_delete|imap_deletemailbox|imap_errors|imap_expunge|imap_fetch_overview|imap_fetchbody|imap_fetchheader|imap_fetchmime|imap_fetchstructure|imap_fetchtext|imap_gc|imap_get_quota|imap_get_quotaroot|imap_getacl|imap_getmailboxes|imap_getsubscribed|imap_header|imap_headerinfo|imap_headers|imap_last_error|imap_list|imap_listmailbox|imap_listscan|imap_listsubscribed|imap_lsub|imap_mail|imap_mail_compose|imap_mail_copy|imap_mail_move|imap_mailboxmsginfo|imap_mime_header_decode|imap_msgno|imap_num_msg|imap_num_recent|imap_open|imap_ping|imap_qprint|imap_rename|imap_renamemailbox|imap_reopen|imap_rfc822_parse_adrlist|imap_rfc822_parse_headers|imap_rfc822_write_address|imap_savebody|imap_scan|imap_scanmailbox|imap_search|imap_set_quota|imap_setacl|imap_setflag_full|imap_sort|imap_status|imap_subscribe|imap_thread|imap_timeout|imap_uid|imap_undelete|imap_unsubscribe|imap_utf7_decode|imap_utf7_encode|imap_utf8|implementsinterface|implode|import_request_variables|in_array|include|include_once|inclued_get_data|inet_ntop|inet_pton|infiniteiterator|ingres_autocommit|ingres_autocommit_state|ingres_charset|ingres_close|ingres_commit|ingres_connect|ingres_cursor|ingres_errno|ingres_error|ingres_errsqlstate|ingres_escape_string|ingres_execute|ingres_fetch_array|ingres_fetch_assoc|ingres_fetch_object|ingres_fetch_proc_return|ingres_fetch_row|ingres_field_length|ingres_field_name|ingres_field_nullable|ingres_field_precision|ingres_field_scale|ingres_field_type|ingres_free_result|ingres_next_error|ingres_num_fields|ingres_num_rows|ingres_pconnect|ingres_prepare|ingres_query|ingres_result_seek|ingres_rollback|ingres_set_environment|ingres_unbuffered_query|ini_alter|ini_get|ini_get_all|ini_restore|ini_set|innamespace|inotify_add_watch|inotify_init|inotify_queue_len|inotify_read|inotify_rm_watch|interface_exists|intl_error_name|intl_get_error_code|intl_get_error_message|intl_is_failure|intldateformatter|intval|invalidargumentexception|invoke|invokeargs|ip2long|iptcembed|iptcparse|is_a|is_array|is_bool|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_uploaded_file|is_writable|is_writeable|isabstract|iscloneable|isdisabled|isfinal|isinstance|isinstantiable|isinterface|isinternal|isiterateable|isset|issubclassof|isuserdefined|iterator|iterator_apply|iterator_count|iterator_to_array|iteratoraggregate|iteratoriterator|java_last_exception_clear|java_last_exception_get|jddayofweek|jdmonthname|jdtofrench|jdtogregorian|jdtojewish|jdtojulian|jdtounix|jewishtojd|join|jpeg2wbmp|json_decode|json_encode|json_last_error|jsonserializable|judy|judy_type|judy_version|juliantojd|kadm5_chpass_principal|kadm5_create_principal|kadm5_delete_principal|kadm5_destroy|kadm5_flush|kadm5_get_policies|kadm5_get_principal|kadm5_get_principals|kadm5_init_with_password|kadm5_modify_principal|key|krsort|ksort|lcfirst|lcg_value|lchgrp|lchown|ldap_8859_to_t61|ldap_add|ldap_bind|ldap_close|ldap_compare|ldap_connect|ldap_count_entries|ldap_delete|ldap_dn2ufn|ldap_err2str|ldap_errno|ldap_error|ldap_explode_dn|ldap_first_attribute|ldap_first_entry|ldap_first_reference|ldap_free_result|ldap_get_attributes|ldap_get_dn|ldap_get_entries|ldap_get_option|ldap_get_values|ldap_get_values_len|ldap_list|ldap_mod_add|ldap_mod_del|ldap_mod_replace|ldap_modify|ldap_next_attribute|ldap_next_entry|ldap_next_reference|ldap_parse_reference|ldap_parse_result|ldap_read|ldap_rename|ldap_sasl_bind|ldap_search|ldap_set_option|ldap_set_rebind_proc|ldap_sort|ldap_start_tls|ldap_t61_to_8859|ldap_unbind|lengthexception|levenshtein|libxml_clear_errors|libxml_disable_entity_loader|libxml_get_errors|libxml_get_last_error|libxml_set_streams_context|libxml_use_internal_errors|libxmlerror|limititerator|link|linkinfo|list|locale|localeconv|localtime|log|log10|log1p|logicexception|long2ip|lstat|ltrim|lzf_compress|lzf_decompress|lzf_optimized_for|m_checkstatus|m_completeauthorizations|m_connect|m_connectionerror|m_deletetrans|m_destroyconn|m_destroyengine|m_getcell|m_getcellbynum|m_getcommadelimited|m_getheader|m_initconn|m_initengine|m_iscommadelimited|m_maxconntimeout|m_monitor|m_numcolumns|m_numrows|m_parsecommadelimited|m_responsekeys|m_responseparam|m_returnstatus|m_setblocking|m_setdropfile|m_setip|m_setssl|m_setssl_cafile|m_setssl_files|m_settimeout|m_sslcert_gen_hash|m_transactionssent|m_transinqueue|m_transkeyval|m_transnew|m_transsend|m_uwait|m_validateidentifier|m_verifyconnection|m_verifysslcert|magic_quotes_runtime|mail|mailparse_determine_best_xfer_encoding|mailparse_msg_create|mailparse_msg_extract_part|mailparse_msg_extract_part_file|mailparse_msg_extract_whole_part_file|mailparse_msg_free|mailparse_msg_get_part|mailparse_msg_get_part_data|mailparse_msg_get_structure|mailparse_msg_parse|mailparse_msg_parse_file|mailparse_rfc822_parse_addresses|mailparse_stream_encode|mailparse_uudecode_all|main|max|maxdb_affected_rows|maxdb_autocommit|maxdb_bind_param|maxdb_bind_result|maxdb_change_user|maxdb_character_set_name|maxdb_client_encoding|maxdb_close|maxdb_close_long_data|maxdb_commit|maxdb_connect|maxdb_connect_errno|maxdb_connect_error|maxdb_data_seek|maxdb_debug|maxdb_disable_reads_from_master|maxdb_disable_rpl_parse|maxdb_dump_debug_info|maxdb_embedded_connect|maxdb_enable_reads_from_master|maxdb_enable_rpl_parse|maxdb_errno|maxdb_error|maxdb_escape_string|maxdb_execute|maxdb_fetch|maxdb_fetch_array|maxdb_fetch_assoc|maxdb_fetch_field|maxdb_fetch_field_direct|maxdb_fetch_fields|maxdb_fetch_lengths|maxdb_fetch_object|maxdb_fetch_row|maxdb_field_count|maxdb_field_seek|maxdb_field_tell|maxdb_free_result|maxdb_get_client_info|maxdb_get_client_version|maxdb_get_host_info|maxdb_get_metadata|maxdb_get_proto_info|maxdb_get_server_info|maxdb_get_server_version|maxdb_info|maxdb_init|maxdb_insert_id|maxdb_kill|maxdb_master_query|maxdb_more_results|maxdb_multi_query|maxdb_next_result|maxdb_num_fields|maxdb_num_rows|maxdb_options|maxdb_param_count|maxdb_ping|maxdb_prepare|maxdb_query|maxdb_real_connect|maxdb_real_escape_string|maxdb_real_query|maxdb_report|maxdb_rollback|maxdb_rpl_parse_enabled|maxdb_rpl_probe|maxdb_rpl_query_type|maxdb_select_db|maxdb_send_long_data|maxdb_send_query|maxdb_server_end|maxdb_server_init|maxdb_set_opt|maxdb_sqlstate|maxdb_ssl_set|maxdb_stat|maxdb_stmt_affected_rows|maxdb_stmt_bind_param|maxdb_stmt_bind_result|maxdb_stmt_close|maxdb_stmt_close_long_data|maxdb_stmt_data_seek|maxdb_stmt_errno|maxdb_stmt_error|maxdb_stmt_execute|maxdb_stmt_fetch|maxdb_stmt_free_result|maxdb_stmt_init|maxdb_stmt_num_rows|maxdb_stmt_param_count|maxdb_stmt_prepare|maxdb_stmt_reset|maxdb_stmt_result_metadata|maxdb_stmt_send_long_data|maxdb_stmt_sqlstate|maxdb_stmt_store_result|maxdb_store_result|maxdb_thread_id|maxdb_thread_safe|maxdb_use_result|maxdb_warning_count|mb_check_encoding|mb_convert_case|mb_convert_encoding|mb_convert_kana|mb_convert_variables|mb_decode_mimeheader|mb_decode_numericentity|mb_detect_encoding|mb_detect_order|mb_encode_mimeheader|mb_encode_numericentity|mb_encoding_aliases|mb_ereg|mb_ereg_match|mb_ereg_replace|mb_ereg_search|mb_ereg_search_getpos|mb_ereg_search_getregs|mb_ereg_search_init|mb_ereg_search_pos|mb_ereg_search_regs|mb_ereg_search_setpos|mb_eregi|mb_eregi_replace|mb_get_info|mb_http_input|mb_http_output|mb_internal_encoding|mb_language|mb_list_encodings|mb_output_handler|mb_parse_str|mb_preferred_mime_name|mb_regex_encoding|mb_regex_set_options|mb_send_mail|mb_split|mb_strcut|mb_strimwidth|mb_stripos|mb_stristr|mb_strlen|mb_strpos|mb_strrchr|mb_strrichr|mb_strripos|mb_strrpos|mb_strstr|mb_strtolower|mb_strtoupper|mb_strwidth|mb_substitute_character|mb_substr|mb_substr_count|mcrypt_cbc|mcrypt_cfb|mcrypt_create_iv|mcrypt_decrypt|mcrypt_ecb|mcrypt_enc_get_algorithms_name|mcrypt_enc_get_block_size|mcrypt_enc_get_iv_size|mcrypt_enc_get_key_size|mcrypt_enc_get_modes_name|mcrypt_enc_get_supported_key_sizes|mcrypt_enc_is_block_algorithm|mcrypt_enc_is_block_algorithm_mode|mcrypt_enc_is_block_mode|mcrypt_enc_self_test|mcrypt_encrypt|mcrypt_generic|mcrypt_generic_deinit|mcrypt_generic_end|mcrypt_generic_init|mcrypt_get_block_size|mcrypt_get_cipher_name|mcrypt_get_iv_size|mcrypt_get_key_size|mcrypt_list_algorithms|mcrypt_list_modes|mcrypt_module_close|mcrypt_module_get_algo_block_size|mcrypt_module_get_algo_key_size|mcrypt_module_get_supported_key_sizes|mcrypt_module_is_block_algorithm|mcrypt_module_is_block_algorithm_mode|mcrypt_module_is_block_mode|mcrypt_module_open|mcrypt_module_self_test|mcrypt_ofb|md5|md5_file|mdecrypt_generic|memcache|memcache_debug|memcached|memory_get_peak_usage|memory_get_usage|messageformatter|metaphone|method_exists|mhash|mhash_count|mhash_get_block_size|mhash_get_hash_name|mhash_keygen_s2k|microtime|mime_content_type|min|ming_keypress|ming_setcubicthreshold|ming_setscale|ming_setswfcompression|ming_useconstants|ming_useswfversion|mkdir|mktime|money_format|mongo|mongobindata|mongocode|mongocollection|mongoconnectionexception|mongocursor|mongocursorexception|mongocursortimeoutexception|mongodate|mongodb|mongodbref|mongoexception|mongogridfs|mongogridfscursor|mongogridfsexception|mongogridfsfile|mongoid|mongoint32|mongoint64|mongomaxkey|mongominkey|mongoregex|mongotimestamp|move_uploaded_file|mpegfile|mqseries_back|mqseries_begin|mqseries_close|mqseries_cmit|mqseries_conn|mqseries_connx|mqseries_disc|mqseries_get|mqseries_inq|mqseries_open|mqseries_put|mqseries_put1|mqseries_set|mqseries_strerror|msession_connect|msession_count|msession_create|msession_destroy|msession_disconnect|msession_find|msession_get|msession_get_array|msession_get_data|msession_inc|msession_list|msession_listvar|msession_lock|msession_plugin|msession_randstr|msession_set|msession_set_array|msession_set_data|msession_timeout|msession_uniq|msession_unlock|msg_get_queue|msg_queue_exists|msg_receive|msg_remove_queue|msg_send|msg_set_queue|msg_stat_queue|msql|msql_affected_rows|msql_close|msql_connect|msql_create_db|msql_createdb|msql_data_seek|msql_db_query|msql_dbname|msql_drop_db|msql_error|msql_fetch_array|msql_fetch_field|msql_fetch_object|msql_fetch_row|msql_field_flags|msql_field_len|msql_field_name|msql_field_seek|msql_field_table|msql_field_type|msql_fieldflags|msql_fieldlen|msql_fieldname|msql_fieldtable|msql_fieldtype|msql_free_result|msql_list_dbs|msql_list_fields|msql_list_tables|msql_num_fields|msql_num_rows|msql_numfields|msql_numrows|msql_pconnect|msql_query|msql_regcase|msql_result|msql_select_db|msql_tablename|mssql_bind|mssql_close|mssql_connect|mssql_data_seek|mssql_execute|mssql_fetch_array|mssql_fetch_assoc|mssql_fetch_batch|mssql_fetch_field|mssql_fetch_object|mssql_fetch_row|mssql_field_length|mssql_field_name|mssql_field_seek|mssql_field_type|mssql_free_result|mssql_free_statement|mssql_get_last_message|mssql_guid_string|mssql_init|mssql_min_error_severity|mssql_min_message_severity|mssql_next_result|mssql_num_fields|mssql_num_rows|mssql_pconnect|mssql_query|mssql_result|mssql_rows_affected|mssql_select_db|mt_getrandmax|mt_rand|mt_srand|multipleiterator|mysql_affected_rows|mysql_client_encoding|mysql_close|mysql_connect|mysql_create_db|mysql_data_seek|mysql_db_name|mysql_db_query|mysql_drop_db|mysql_errno|mysql_error|mysql_escape_string|mysql_fetch_array|mysql_fetch_assoc|mysql_fetch_field|mysql_fetch_lengths|mysql_fetch_object|mysql_fetch_row|mysql_field_flags|mysql_field_len|mysql_field_name|mysql_field_seek|mysql_field_table|mysql_field_type|mysql_free_result|mysql_get_client_info|mysql_get_host_info|mysql_get_proto_info|mysql_get_server_info|mysql_info|mysql_insert_id|mysql_list_dbs|mysql_list_fields|mysql_list_processes|mysql_list_tables|mysql_num_fields|mysql_num_rows|mysql_pconnect|mysql_ping|mysql_query|mysql_real_escape_string|mysql_result|mysql_select_db|mysql_set_charset|mysql_stat|mysql_tablename|mysql_thread_id|mysql_unbuffered_query|mysqli|mysqli_bind_param|mysqli_bind_result|mysqli_client_encoding|mysqli_connect|mysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_driver|mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_escape_string|mysqli_execute|mysqli_fetch|mysqli_get_metadata|mysqli_master_query|mysqli_param_count|mysqli_report|mysqli_result|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|mysqli_send_long_data|mysqli_send_query|mysqli_set_opt|mysqli_slave_query|mysqli_stmt|mysqli_warning|mysqlnd_ms_get_stats|mysqlnd_ms_query_is_select|mysqlnd_ms_set_user_pick_server|mysqlnd_qc_change_handler|mysqlnd_qc_clear_cache|mysqlnd_qc_get_cache_info|mysqlnd_qc_get_core_stats|mysqlnd_qc_get_handler|mysqlnd_qc_get_query_trace_log|mysqlnd_qc_set_user_handlers|natcasesort|natsort|ncurses_addch|ncurses_addchnstr|ncurses_addchstr|ncurses_addnstr|ncurses_addstr|ncurses_assume_default_colors|ncurses_attroff|ncurses_attron|ncurses_attrset|ncurses_baudrate|ncurses_beep|ncurses_bkgd|ncurses_bkgdset|ncurses_border|ncurses_bottom_panel|ncurses_can_change_color|ncurses_cbreak|ncurses_clear|ncurses_clrtobot|ncurses_clrtoeol|ncurses_color_content|ncurses_color_set|ncurses_curs_set|ncurses_def_prog_mode|ncurses_def_shell_mode|ncurses_define_key|ncurses_del_panel|ncurses_delay_output|ncurses_delch|ncurses_deleteln|ncurses_delwin|ncurses_doupdate|ncurses_echo|ncurses_echochar|ncurses_end|ncurses_erase|ncurses_erasechar|ncurses_filter|ncurses_flash|ncurses_flushinp|ncurses_getch|ncurses_getmaxyx|ncurses_getmouse|ncurses_getyx|ncurses_halfdelay|ncurses_has_colors|ncurses_has_ic|ncurses_has_il|ncurses_has_key|ncurses_hide_panel|ncurses_hline|ncurses_inch|ncurses_init|ncurses_init_color|ncurses_init_pair|ncurses_insch|ncurses_insdelln|ncurses_insertln|ncurses_insstr|ncurses_instr|ncurses_isendwin|ncurses_keyok|ncurses_keypad|ncurses_killchar|ncurses_longname|ncurses_meta|ncurses_mouse_trafo|ncurses_mouseinterval|ncurses_mousemask|ncurses_move|ncurses_move_panel|ncurses_mvaddch|ncurses_mvaddchnstr|ncurses_mvaddchstr|ncurses_mvaddnstr|ncurses_mvaddstr|ncurses_mvcur|ncurses_mvdelch|ncurses_mvgetch|ncurses_mvhline|ncurses_mvinch|ncurses_mvvline|ncurses_mvwaddstr|ncurses_napms|ncurses_new_panel|ncurses_newpad|ncurses_newwin|ncurses_nl|ncurses_nocbreak|ncurses_noecho|ncurses_nonl|ncurses_noqiflush|ncurses_noraw|ncurses_pair_content|ncurses_panel_above|ncurses_panel_below|ncurses_panel_window|ncurses_pnoutrefresh|ncurses_prefresh|ncurses_putp|ncurses_qiflush|ncurses_raw|ncurses_refresh|ncurses_replace_panel|ncurses_reset_prog_mode|ncurses_reset_shell_mode|ncurses_resetty|ncurses_savetty|ncurses_scr_dump|ncurses_scr_init|ncurses_scr_restore|ncurses_scr_set|ncurses_scrl|ncurses_show_panel|ncurses_slk_attr|ncurses_slk_attroff|ncurses_slk_attron|ncurses_slk_attrset|ncurses_slk_clear|ncurses_slk_color|ncurses_slk_init|ncurses_slk_noutrefresh|ncurses_slk_refresh|ncurses_slk_restore|ncurses_slk_set|ncurses_slk_touch|ncurses_standend|ncurses_standout|ncurses_start_color|ncurses_termattrs|ncurses_termname|ncurses_timeout|ncurses_top_panel|ncurses_typeahead|ncurses_ungetch|ncurses_ungetmouse|ncurses_update_panels|ncurses_use_default_colors|ncurses_use_env|ncurses_use_extended_names|ncurses_vidattr|ncurses_vline|ncurses_waddch|ncurses_waddstr|ncurses_wattroff|ncurses_wattron|ncurses_wattrset|ncurses_wborder|ncurses_wclear|ncurses_wcolor_set|ncurses_werase|ncurses_wgetch|ncurses_whline|ncurses_wmouse_trafo|ncurses_wmove|ncurses_wnoutrefresh|ncurses_wrefresh|ncurses_wstandend|ncurses_wstandout|ncurses_wvline|newinstance|newinstanceargs|newt_bell|newt_button|newt_button_bar|newt_centered_window|newt_checkbox|newt_checkbox_get_value|newt_checkbox_set_flags|newt_checkbox_set_value|newt_checkbox_tree|newt_checkbox_tree_add_item|newt_checkbox_tree_find_item|newt_checkbox_tree_get_current|newt_checkbox_tree_get_entry_value|newt_checkbox_tree_get_multi_selection|newt_checkbox_tree_get_selection|newt_checkbox_tree_multi|newt_checkbox_tree_set_current|newt_checkbox_tree_set_entry|newt_checkbox_tree_set_entry_value|newt_checkbox_tree_set_width|newt_clear_key_buffer|newt_cls|newt_compact_button|newt_component_add_callback|newt_component_takes_focus|newt_create_grid|newt_cursor_off|newt_cursor_on|newt_delay|newt_draw_form|newt_draw_root_text|newt_entry|newt_entry_get_value|newt_entry_set|newt_entry_set_filter|newt_entry_set_flags|newt_finished|newt_form|newt_form_add_component|newt_form_add_components|newt_form_add_hot_key|newt_form_destroy|newt_form_get_current|newt_form_run|newt_form_set_background|newt_form_set_height|newt_form_set_size|newt_form_set_timer|newt_form_set_width|newt_form_watch_fd|newt_get_screen_size|newt_grid_add_components_to_form|newt_grid_basic_window|newt_grid_free|newt_grid_get_size|newt_grid_h_close_stacked|newt_grid_h_stacked|newt_grid_place|newt_grid_set_field|newt_grid_simple_window|newt_grid_v_close_stacked|newt_grid_v_stacked|newt_grid_wrapped_window|newt_grid_wrapped_window_at|newt_init|newt_label|newt_label_set_text|newt_listbox|newt_listbox_append_entry|newt_listbox_clear|newt_listbox_clear_selection|newt_listbox_delete_entry|newt_listbox_get_current|newt_listbox_get_selection|newt_listbox_insert_entry|newt_listbox_item_count|newt_listbox_select_item|newt_listbox_set_current|newt_listbox_set_current_by_key|newt_listbox_set_data|newt_listbox_set_entry|newt_listbox_set_width|newt_listitem|newt_listitem_get_data|newt_listitem_set|newt_open_window|newt_pop_help_line|newt_pop_window|newt_push_help_line|newt_radio_get_current|newt_radiobutton|newt_redraw_help_line|newt_reflow_text|newt_refresh|newt_resize_screen|newt_resume|newt_run_form|newt_scale|newt_scale_set|newt_scrollbar_set|newt_set_help_callback|newt_set_suspend_callback|newt_suspend|newt_textbox|newt_textbox_get_num_lines|newt_textbox_reflowed|newt_textbox_set_height|newt_textbox_set_text|newt_vertical_scrollbar|newt_wait_for_key|newt_win_choice|newt_win_entries|newt_win_menu|newt_win_message|newt_win_messagev|newt_win_ternary|next|ngettext|nl2br|nl_langinfo|norewinditerator|normalizer|notes_body|notes_copy_db|notes_create_db|notes_create_note|notes_drop_db|notes_find_note|notes_header_info|notes_list_msgs|notes_mark_read|notes_mark_unread|notes_nav_create|notes_search|notes_unread|notes_version|nsapi_request_headers|nsapi_response_headers|nsapi_virtual|nthmac|number_format|numberformatter|oauth|oauth_get_sbs|oauth_urlencode|oauthexception|oauthprovider|ob_clean|ob_deflatehandler|ob_end_clean|ob_end_flush|ob_etaghandler|ob_flush|ob_get_clean|ob_get_contents|ob_get_flush|ob_get_length|ob_get_level|ob_get_status|ob_gzhandler|ob_iconv_handler|ob_implicit_flush|ob_inflatehandler|ob_list_handlers|ob_start|ob_tidyhandler|oci_bind_array_by_name|oci_bind_by_name|oci_cancel|oci_client_version|oci_close|oci_collection_append|oci_collection_assign|oci_collection_element_assign|oci_collection_element_get|oci_collection_free|oci_collection_max|oci_collection_size|oci_collection_trim|oci_commit|oci_connect|oci_define_by_name|oci_error|oci_execute|oci_fetch|oci_fetch_all|oci_fetch_array|oci_fetch_assoc|oci_fetch_object|oci_fetch_row|oci_field_is_null|oci_field_name|oci_field_precision|oci_field_scale|oci_field_size|oci_field_type|oci_field_type_raw|oci_free_statement|oci_internal_debug|oci_lob_append|oci_lob_close|oci_lob_copy|oci_lob_eof|oci_lob_erase|oci_lob_export|oci_lob_flush|oci_lob_free|oci_lob_getbuffering|oci_lob_import|oci_lob_is_equal|oci_lob_load|oci_lob_read|oci_lob_rewind|oci_lob_save|oci_lob_savefile|oci_lob_seek|oci_lob_setbuffering|oci_lob_size|oci_lob_tell|oci_lob_truncate|oci_lob_write|oci_lob_writetemporary|oci_lob_writetofile|oci_new_collection|oci_new_connect|oci_new_cursor|oci_new_descriptor|oci_num_fields|oci_num_rows|oci_parse|oci_password_change|oci_pconnect|oci_result|oci_rollback|oci_server_version|oci_set_action|oci_set_client_identifier|oci_set_client_info|oci_set_edition|oci_set_module_name|oci_set_prefetch|oci_statement_type|ocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|ocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|ocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|ocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|ocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|ocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|ociloadlob|ocilogoff|ocilogon|ocinewcollection|ocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|ocirollback|ocirowcount|ocisavelob|ocisavelobfile|ociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|octdec|odbc_autocommit|odbc_binmode|odbc_close|odbc_close_all|odbc_columnprivileges|odbc_columns|odbc_commit|odbc_connect|odbc_cursor|odbc_data_source|odbc_do|odbc_error|odbc_errormsg|odbc_exec|odbc_execute|odbc_fetch_array|odbc_fetch_into|odbc_fetch_object|odbc_fetch_row|odbc_field_len|odbc_field_name|odbc_field_num|odbc_field_precision|odbc_field_scale|odbc_field_type|odbc_foreignkeys|odbc_free_result|odbc_gettypeinfo|odbc_longreadlen|odbc_next_result|odbc_num_fields|odbc_num_rows|odbc_pconnect|odbc_prepare|odbc_primarykeys|odbc_procedurecolumns|odbc_procedures|odbc_result|odbc_result_all|odbc_rollback|odbc_setoption|odbc_specialcolumns|odbc_statistics|odbc_tableprivileges|odbc_tables|openal_buffer_create|openal_buffer_data|openal_buffer_destroy|openal_buffer_get|openal_buffer_loadwav|openal_context_create|openal_context_current|openal_context_destroy|openal_context_process|openal_context_suspend|openal_device_close|openal_device_open|openal_listener_get|openal_listener_set|openal_source_create|openal_source_destroy|openal_source_get|openal_source_pause|openal_source_play|openal_source_rewind|openal_source_set|openal_source_stop|openal_stream|opendir|openlog|openssl_cipher_iv_length|openssl_csr_export|openssl_csr_export_to_file|openssl_csr_get_public_key|openssl_csr_get_subject|openssl_csr_new|openssl_csr_sign|openssl_decrypt|openssl_dh_compute_key|openssl_digest|openssl_encrypt|openssl_error_string|openssl_free_key|openssl_get_cipher_methods|openssl_get_md_methods|openssl_get_privatekey|openssl_get_publickey|openssl_open|openssl_pkcs12_export|openssl_pkcs12_export_to_file|openssl_pkcs12_read|openssl_pkcs7_decrypt|openssl_pkcs7_encrypt|openssl_pkcs7_sign|openssl_pkcs7_verify|openssl_pkey_export|openssl_pkey_export_to_file|openssl_pkey_free|openssl_pkey_get_details|openssl_pkey_get_private|openssl_pkey_get_public|openssl_pkey_new|openssl_private_decrypt|openssl_private_encrypt|openssl_public_decrypt|openssl_public_encrypt|openssl_random_pseudo_bytes|openssl_seal|openssl_sign|openssl_verify|openssl_x509_check_private_key|openssl_x509_checkpurpose|openssl_x509_export|openssl_x509_export_to_file|openssl_x509_free|openssl_x509_parse|openssl_x509_read|ord|outeriterator|outofboundsexception|outofrangeexception|output_add_rewrite_var|output_reset_rewrite_vars|overflowexception|overload|override_function|ovrimos_close|ovrimos_commit|ovrimos_connect|ovrimos_cursor|ovrimos_exec|ovrimos_execute|ovrimos_fetch_into|ovrimos_fetch_row|ovrimos_field_len|ovrimos_field_name|ovrimos_field_num|ovrimos_field_type|ovrimos_free_result|ovrimos_longreadlen|ovrimos_num_fields|ovrimos_num_rows|ovrimos_prepare|ovrimos_result|ovrimos_result_all|ovrimos_rollback|pack|parentiterator|parse_ini_file|parse_ini_string|parse_str|parse_url|parsekit_compile_file|parsekit_compile_string|parsekit_func_arginfo|passthru|pathinfo|pclose|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|pdf_activate_item|pdf_add_annotation|pdf_add_bookmark|pdf_add_launchlink|pdf_add_locallink|pdf_add_nameddest|pdf_add_note|pdf_add_outline|pdf_add_pdflink|pdf_add_table_cell|pdf_add_textflow|pdf_add_thumbnail|pdf_add_weblink|pdf_arc|pdf_arcn|pdf_attach_file|pdf_begin_document|pdf_begin_font|pdf_begin_glyph|pdf_begin_item|pdf_begin_layer|pdf_begin_page|pdf_begin_page_ext|pdf_begin_pattern|pdf_begin_template|pdf_begin_template_ext|pdf_circle|pdf_clip|pdf_close|pdf_close_image|pdf_close_pdi|pdf_close_pdi_page|pdf_closepath|pdf_closepath_fill_stroke|pdf_closepath_stroke|pdf_concat|pdf_continue_text|pdf_create_3dview|pdf_create_action|pdf_create_annotation|pdf_create_bookmark|pdf_create_field|pdf_create_fieldgroup|pdf_create_gstate|pdf_create_pvf|pdf_create_textflow|pdf_curveto|pdf_define_layer|pdf_delete|pdf_delete_pvf|pdf_delete_table|pdf_delete_textflow|pdf_encoding_set_char|pdf_end_document|pdf_end_font|pdf_end_glyph|pdf_end_item|pdf_end_layer|pdf_end_page|pdf_end_page_ext|pdf_end_pattern|pdf_end_template|pdf_endpath|pdf_fill|pdf_fill_imageblock|pdf_fill_pdfblock|pdf_fill_stroke|pdf_fill_textblock|pdf_findfont|pdf_fit_image|pdf_fit_pdi_page|pdf_fit_table|pdf_fit_textflow|pdf_fit_textline|pdf_get_apiname|pdf_get_buffer|pdf_get_errmsg|pdf_get_errnum|pdf_get_font|pdf_get_fontname|pdf_get_fontsize|pdf_get_image_height|pdf_get_image_width|pdf_get_majorversion|pdf_get_minorversion|pdf_get_parameter|pdf_get_pdi_parameter|pdf_get_pdi_value|pdf_get_value|pdf_info_font|pdf_info_matchbox|pdf_info_table|pdf_info_textflow|pdf_info_textline|pdf_initgraphics|pdf_lineto|pdf_load_3ddata|pdf_load_font|pdf_load_iccprofile|pdf_load_image|pdf_makespotcolor|pdf_moveto|pdf_new|pdf_open_ccitt|pdf_open_file|pdf_open_gif|pdf_open_image|pdf_open_image_file|pdf_open_jpeg|pdf_open_memory_image|pdf_open_pdi|pdf_open_pdi_document|pdf_open_pdi_page|pdf_open_tiff|pdf_pcos_get_number|pdf_pcos_get_stream|pdf_pcos_get_string|pdf_place_image|pdf_place_pdi_page|pdf_process_pdi|pdf_rect|pdf_restore|pdf_resume_page|pdf_rotate|pdf_save|pdf_scale|pdf_set_border_color|pdf_set_border_dash|pdf_set_border_style|pdf_set_char_spacing|pdf_set_duration|pdf_set_gstate|pdf_set_horiz_scaling|pdf_set_info|pdf_set_info_author|pdf_set_info_creator|pdf_set_info_keywords|pdf_set_info_subject|pdf_set_info_title|pdf_set_layer_dependency|pdf_set_leading|pdf_set_parameter|pdf_set_text_matrix|pdf_set_text_pos|pdf_set_text_rendering|pdf_set_text_rise|pdf_set_value|pdf_set_word_spacing|pdf_setcolor|pdf_setdash|pdf_setdashpattern|pdf_setflat|pdf_setfont|pdf_setgray|pdf_setgray_fill|pdf_setgray_stroke|pdf_setlinecap|pdf_setlinejoin|pdf_setlinewidth|pdf_setmatrix|pdf_setmiterlimit|pdf_setpolydash|pdf_setrgbcolor|pdf_setrgbcolor_fill|pdf_setrgbcolor_stroke|pdf_shading|pdf_shading_pattern|pdf_shfill|pdf_show|pdf_show_boxed|pdf_show_xy|pdf_skew|pdf_stringwidth|pdf_stroke|pdf_suspend_page|pdf_translate|pdf_utf16_to_utf8|pdf_utf32_to_utf16|pdf_utf8_to_utf16|pdo|pdo_cubrid_schema|pdo_pgsqllobcreate|pdo_pgsqllobopen|pdo_pgsqllobunlink|pdo_sqlitecreateaggregate|pdo_sqlitecreatefunction|pdoexception|pdostatement|pfsockopen|pg_affected_rows|pg_cancel_query|pg_client_encoding|pg_close|pg_connect|pg_connection_busy|pg_connection_reset|pg_connection_status|pg_convert|pg_copy_from|pg_copy_to|pg_dbname|pg_delete|pg_end_copy|pg_escape_bytea|pg_escape_string|pg_execute|pg_fetch_all|pg_fetch_all_columns|pg_fetch_array|pg_fetch_assoc|pg_fetch_object|pg_fetch_result|pg_fetch_row|pg_field_is_null|pg_field_name|pg_field_num|pg_field_prtlen|pg_field_size|pg_field_table|pg_field_type|pg_field_type_oid|pg_free_result|pg_get_notify|pg_get_pid|pg_get_result|pg_host|pg_insert|pg_last_error|pg_last_notice|pg_last_oid|pg_lo_close|pg_lo_create|pg_lo_export|pg_lo_import|pg_lo_open|pg_lo_read|pg_lo_read_all|pg_lo_seek|pg_lo_tell|pg_lo_unlink|pg_lo_write|pg_meta_data|pg_num_fields|pg_num_rows|pg_options|pg_parameter_status|pg_pconnect|pg_ping|pg_port|pg_prepare|pg_put_line|pg_query|pg_query_params|pg_result_error|pg_result_error_field|pg_result_seek|pg_result_status|pg_select|pg_send_execute|pg_send_prepare|pg_send_query|pg_send_query_params|pg_set_client_encoding|pg_set_error_verbosity|pg_trace|pg_transaction_status|pg_tty|pg_unescape_bytea|pg_untrace|pg_update|pg_version|php_check_syntax|php_ini_loaded_file|php_ini_scanned_files|php_logo_guid|php_sapi_name|php_strip_whitespace|php_uname|phpcredits|phpinfo|phpversion|pi|png2wbmp|popen|pos|posix_access|posix_ctermid|posix_errno|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|pow|preg_filter|preg_grep|preg_last_error|preg_match|preg_match_all|preg_quote|preg_replace|preg_replace_callback|preg_split|prev|print|print_r|printer_abort|printer_close|printer_create_brush|printer_create_dc|printer_create_font|printer_create_pen|printer_delete_brush|printer_delete_dc|printer_delete_font|printer_delete_pen|printer_draw_bmp|printer_draw_chord|printer_draw_elipse|printer_draw_line|printer_draw_pie|printer_draw_rectangle|printer_draw_roundrect|printer_draw_text|printer_end_doc|printer_end_page|printer_get_option|printer_list|printer_logical_fontheight|printer_open|printer_select_brush|printer_select_font|printer_select_pen|printer_set_option|printer_start_doc|printer_start_page|printer_write|printf|proc_close|proc_get_status|proc_nice|proc_open|proc_terminate|property_exists|ps_add_bookmark|ps_add_launchlink|ps_add_locallink|ps_add_note|ps_add_pdflink|ps_add_weblink|ps_arc|ps_arcn|ps_begin_page|ps_begin_pattern|ps_begin_template|ps_circle|ps_clip|ps_close|ps_close_image|ps_closepath|ps_closepath_stroke|ps_continue_text|ps_curveto|ps_delete|ps_end_page|ps_end_pattern|ps_end_template|ps_fill|ps_fill_stroke|ps_findfont|ps_get_buffer|ps_get_parameter|ps_get_value|ps_hyphenate|ps_include_file|ps_lineto|ps_makespotcolor|ps_moveto|ps_new|ps_open_file|ps_open_image|ps_open_image_file|ps_open_memory_image|ps_place_image|ps_rect|ps_restore|ps_rotate|ps_save|ps_scale|ps_set_border_color|ps_set_border_dash|ps_set_border_style|ps_set_info|ps_set_parameter|ps_set_text_pos|ps_set_value|ps_setcolor|ps_setdash|ps_setflat|ps_setfont|ps_setgray|ps_setlinecap|ps_setlinejoin|ps_setlinewidth|ps_setmiterlimit|ps_setoverprintmode|ps_setpolydash|ps_shading|ps_shading_pattern|ps_shfill|ps_show|ps_show2|ps_show_boxed|ps_show_xy|ps_show_xy2|ps_string_geometry|ps_stringwidth|ps_stroke|ps_symbol|ps_symbol_name|ps_symbol_width|ps_translate|pspell_add_to_personal|pspell_add_to_session|pspell_check|pspell_clear_session|pspell_config_create|pspell_config_data_dir|pspell_config_dict_dir|pspell_config_ignore|pspell_config_mode|pspell_config_personal|pspell_config_repl|pspell_config_runtogether|pspell_config_save_repl|pspell_new|pspell_new_config|pspell_new_personal|pspell_save_wordlist|pspell_store_replacement|pspell_suggest|putenv|px_close|px_create_fp|px_date2string|px_delete|px_delete_record|px_get_field|px_get_info|px_get_parameter|px_get_record|px_get_schema|px_get_value|px_insert_record|px_new|px_numfields|px_numrecords|px_open_fp|px_put_record|px_retrieve_record|px_set_blob_file|px_set_parameter|px_set_tablename|px_set_targetencoding|px_set_value|px_timestamp2string|px_update_record|qdom_error|qdom_tree|quoted_printable_decode|quoted_printable_encode|quotemeta|rad2deg|radius_acct_open|radius_add_server|radius_auth_open|radius_close|radius_config|radius_create_request|radius_cvt_addr|radius_cvt_int|radius_cvt_string|radius_demangle|radius_demangle_mppe_key|radius_get_attr|radius_get_vendor_attr|radius_put_addr|radius_put_attr|radius_put_int|radius_put_string|radius_put_vendor_addr|radius_put_vendor_attr|radius_put_vendor_int|radius_put_vendor_string|radius_request_authenticator|radius_send_request|radius_server_secret|radius_strerror|rand|range|rangeexception|rar_wrapper_cache_stats|rararchive|rarentry|rarexception|rawurldecode|rawurlencode|read_exif_data|readdir|readfile|readgzfile|readline|readline_add_history|readline_callback_handler_install|readline_callback_handler_remove|readline_callback_read_char|readline_clear_history|readline_completion_function|readline_info|readline_list_history|readline_on_new_line|readline_read_history|readline_redisplay|readline_write_history|readlink|realpath|realpath_cache_get|realpath_cache_size|recode|recode_file|recode_string|recursivearrayiterator|recursivecachingiterator|recursivecallbackfilteriterator|recursivedirectoryiterator|recursivefilteriterator|recursiveiterator|recursiveiteratoriterator|recursiveregexiterator|recursivetreeiterator|reflection|reflectionclass|reflectionexception|reflectionextension|reflectionfunction|reflectionfunctionabstract|reflectionmethod|reflectionobject|reflectionparameter|reflectionproperty|reflector|regexiterator|register_shutdown_function|register_tick_function|rename|rename_function|require|require_once|reset|resetValue|resourcebundle|restore_error_handler|restore_exception_handler|restore_include_path|return|rewind|rewinddir|rmdir|round|rpm_close|rpm_get_tag|rpm_is_valid|rpm_open|rpm_version|rrd_create|rrd_error|rrd_fetch|rrd_first|rrd_graph|rrd_info|rrd_last|rrd_lastupdate|rrd_restore|rrd_tune|rrd_update|rrd_xport|rrdcreator|rrdgraph|rrdupdater|rsort|rtrim|runkit_class_adopt|runkit_class_emancipate|runkit_constant_add|runkit_constant_redefine|runkit_constant_remove|runkit_function_add|runkit_function_copy|runkit_function_redefine|runkit_function_remove|runkit_function_rename|runkit_import|runkit_lint|runkit_lint_file|runkit_method_add|runkit_method_copy|runkit_method_redefine|runkit_method_remove|runkit_method_rename|runkit_return_value_used|runkit_sandbox_output_handler|runkit_superglobals|runtimeexception|samconnection_commit|samconnection_connect|samconnection_constructor|samconnection_disconnect|samconnection_errno|samconnection_error|samconnection_isconnected|samconnection_peek|samconnection_peekall|samconnection_receive|samconnection_remove|samconnection_rollback|samconnection_send|samconnection_setDebug|samconnection_subscribe|samconnection_unsubscribe|sammessage_body|sammessage_constructor|sammessage_header|sca_createdataobject|sca_getservice|sca_localproxy_createdataobject|sca_soapproxy_createdataobject|scandir|sdo_das_changesummary_beginlogging|sdo_das_changesummary_endlogging|sdo_das_changesummary_getchangeddataobjects|sdo_das_changesummary_getchangetype|sdo_das_changesummary_getoldcontainer|sdo_das_changesummary_getoldvalues|sdo_das_changesummary_islogging|sdo_das_datafactory_addpropertytotype|sdo_das_datafactory_addtype|sdo_das_datafactory_getdatafactory|sdo_das_dataobject_getchangesummary|sdo_das_relational_applychanges|sdo_das_relational_construct|sdo_das_relational_createrootdataobject|sdo_das_relational_executepreparedquery|sdo_das_relational_executequery|sdo_das_setting_getlistindex|sdo_das_setting_getpropertyindex|sdo_das_setting_getpropertyname|sdo_das_setting_getvalue|sdo_das_setting_isset|sdo_das_xml_addtypes|sdo_das_xml_create|sdo_das_xml_createdataobject|sdo_das_xml_createdocument|sdo_das_xml_document_getrootdataobject|sdo_das_xml_document_getrootelementname|sdo_das_xml_document_getrootelementuri|sdo_das_xml_document_setencoding|sdo_das_xml_document_setxmldeclaration|sdo_das_xml_document_setxmlversion|sdo_das_xml_loadfile|sdo_das_xml_loadstring|sdo_das_xml_savefile|sdo_das_xml_savestring|sdo_datafactory_create|sdo_dataobject_clear|sdo_dataobject_createdataobject|sdo_dataobject_getcontainer|sdo_dataobject_getsequence|sdo_dataobject_gettypename|sdo_dataobject_gettypenamespaceuri|sdo_exception_getcause|sdo_list_insert|sdo_model_property_getcontainingtype|sdo_model_property_getdefault|sdo_model_property_getname|sdo_model_property_gettype|sdo_model_property_iscontainment|sdo_model_property_ismany|sdo_model_reflectiondataobject_construct|sdo_model_reflectiondataobject_export|sdo_model_reflectiondataobject_getcontainmentproperty|sdo_model_reflectiondataobject_getinstanceproperties|sdo_model_reflectiondataobject_gettype|sdo_model_type_getbasetype|sdo_model_type_getname|sdo_model_type_getnamespaceuri|sdo_model_type_getproperties|sdo_model_type_getproperty|sdo_model_type_isabstracttype|sdo_model_type_isdatatype|sdo_model_type_isinstance|sdo_model_type_isopentype|sdo_model_type_issequencedtype|sdo_sequence_getproperty|sdo_sequence_insert|sdo_sequence_move|seekableiterator|sem_acquire|sem_get|sem_release|sem_remove|serializable|serialize|session_cache_expire|session_cache_limiter|session_commit|session_decode|session_destroy|session_encode|session_get_cookie_params|session_id|session_is_registered|session_module_name|session_name|session_pgsql_add_error|session_pgsql_get_error|session_pgsql_get_field|session_pgsql_reset|session_pgsql_set_field|session_pgsql_status|session_regenerate_id|session_register|session_save_path|session_set_cookie_params|session_set_save_handler|session_start|session_unregister|session_unset|session_write_close|setCounterClass|set_error_handler|set_exception_handler|set_file_buffer|set_include_path|set_magic_quotes_runtime|set_socket_blocking|set_time_limit|setcookie|setlocale|setproctitle|setrawcookie|setstaticpropertyvalue|setthreadtitle|settype|sha1|sha1_file|shell_exec|shm_attach|shm_detach|shm_get_var|shm_has_var|shm_put_var|shm_remove|shm_remove_var|shmop_close|shmop_delete|shmop_open|shmop_read|shmop_size|shmop_write|show_source|shuffle|signeurlpaiement|similar_text|simplexml_import_dom|simplexml_load_file|simplexml_load_string|simplexmlelement|simplexmliterator|sin|sinh|sizeof|sleep|snmp|snmp2_get|snmp2_getnext|snmp2_real_walk|snmp2_set|snmp2_walk|snmp3_get|snmp3_getnext|snmp3_real_walk|snmp3_set|snmp3_walk|snmp_get_quick_print|snmp_get_valueretrieval|snmp_read_mib|snmp_set_enum_print|snmp_set_oid_numeric_print|snmp_set_oid_output_format|snmp_set_quick_print|snmp_set_valueretrieval|snmpget|snmpgetnext|snmprealwalk|snmpset|snmpwalk|snmpwalkoid|soapclient|soapfault|soapheader|soapparam|soapserver|soapvar|socket_accept|socket_bind|socket_clear_error|socket_close|socket_connect|socket_create|socket_create_listen|socket_create_pair|socket_get_option|socket_get_status|socket_getpeername|socket_getsockname|socket_last_error|socket_listen|socket_read|socket_recv|socket_recvfrom|socket_select|socket_send|socket_sendto|socket_set_block|socket_set_blocking|socket_set_nonblock|socket_set_option|socket_set_timeout|socket_shutdown|socket_strerror|socket_write|solr_get_version|solrclient|solrclientexception|solrdocument|solrdocumentfield|solrexception|solrgenericresponse|solrillegalargumentexception|solrillegaloperationexception|solrinputdocument|solrmodifiableparams|solrobject|solrparams|solrpingresponse|solrquery|solrqueryresponse|solrresponse|solrupdateresponse|solrutils|sort|soundex|sphinxclient|spl_autoload|spl_autoload_call|spl_autoload_extensions|spl_autoload_functions|spl_autoload_register|spl_autoload_unregister|spl_classes|spl_object_hash|splbool|spldoublylinkedlist|splenum|splfileinfo|splfileobject|splfixedarray|splfloat|splheap|splint|split|spliti|splmaxheap|splminheap|splobjectstorage|splobserver|splpriorityqueue|splqueue|splstack|splstring|splsubject|spltempfileobject|spoofchecker|sprintf|sql_regcase|sqlite3|sqlite3result|sqlite3stmt|sqlite_array_query|sqlite_busy_timeout|sqlite_changes|sqlite_close|sqlite_column|sqlite_create_aggregate|sqlite_create_function|sqlite_current|sqlite_error_string|sqlite_escape_string|sqlite_exec|sqlite_factory|sqlite_fetch_all|sqlite_fetch_array|sqlite_fetch_column_types|sqlite_fetch_object|sqlite_fetch_single|sqlite_fetch_string|sqlite_field_name|sqlite_has_more|sqlite_has_prev|sqlite_key|sqlite_last_error|sqlite_last_insert_rowid|sqlite_libencoding|sqlite_libversion|sqlite_next|sqlite_num_fields|sqlite_num_rows|sqlite_open|sqlite_popen|sqlite_prev|sqlite_query|sqlite_rewind|sqlite_seek|sqlite_single_query|sqlite_udf_decode_binary|sqlite_udf_encode_binary|sqlite_unbuffered_query|sqlite_valid|sqrt|srand|sscanf|ssdeep_fuzzy_compare|ssdeep_fuzzy_hash|ssdeep_fuzzy_hash_filename|ssh2_auth_hostbased_file|ssh2_auth_none|ssh2_auth_password|ssh2_auth_pubkey_file|ssh2_connect|ssh2_exec|ssh2_fetch_stream|ssh2_fingerprint|ssh2_methods_negotiated|ssh2_publickey_add|ssh2_publickey_init|ssh2_publickey_list|ssh2_publickey_remove|ssh2_scp_recv|ssh2_scp_send|ssh2_sftp|ssh2_sftp_lstat|ssh2_sftp_mkdir|ssh2_sftp_readlink|ssh2_sftp_realpath|ssh2_sftp_rename|ssh2_sftp_rmdir|ssh2_sftp_stat|ssh2_sftp_symlink|ssh2_sftp_unlink|ssh2_shell|ssh2_tunnel|stat|stats_absolute_deviation|stats_cdf_beta|stats_cdf_binomial|stats_cdf_cauchy|stats_cdf_chisquare|stats_cdf_exponential|stats_cdf_f|stats_cdf_gamma|stats_cdf_laplace|stats_cdf_logistic|stats_cdf_negative_binomial|stats_cdf_noncentral_chisquare|stats_cdf_noncentral_f|stats_cdf_poisson|stats_cdf_t|stats_cdf_uniform|stats_cdf_weibull|stats_covariance|stats_den_uniform|stats_dens_beta|stats_dens_cauchy|stats_dens_chisquare|stats_dens_exponential|stats_dens_f|stats_dens_gamma|stats_dens_laplace|stats_dens_logistic|stats_dens_negative_binomial|stats_dens_normal|stats_dens_pmf_binomial|stats_dens_pmf_hypergeometric|stats_dens_pmf_poisson|stats_dens_t|stats_dens_weibull|stats_harmonic_mean|stats_kurtosis|stats_rand_gen_beta|stats_rand_gen_chisquare|stats_rand_gen_exponential|stats_rand_gen_f|stats_rand_gen_funiform|stats_rand_gen_gamma|stats_rand_gen_ibinomial|stats_rand_gen_ibinomial_negative|stats_rand_gen_int|stats_rand_gen_ipoisson|stats_rand_gen_iuniform|stats_rand_gen_noncenral_chisquare|stats_rand_gen_noncentral_f|stats_rand_gen_noncentral_t|stats_rand_gen_normal|stats_rand_gen_t|stats_rand_get_seeds|stats_rand_phrase_to_seeds|stats_rand_ranf|stats_rand_setall|stats_skew|stats_standard_deviation|stats_stat_binomial_coef|stats_stat_correlation|stats_stat_gennch|stats_stat_independent_t|stats_stat_innerproduct|stats_stat_noncentral_t|stats_stat_paired_t|stats_stat_percentile|stats_stat_powersum|stats_variance|stomp|stomp_connect_error|stomp_version|stompexception|stompframe|str_getcsv|str_ireplace|str_pad|str_repeat|str_replace|str_rot13|str_shuffle|str_split|str_word_count|strcasecmp|strchr|strcmp|strcoll|strcspn|stream_bucket_append|stream_bucket_make_writeable|stream_bucket_new|stream_bucket_prepend|stream_context_create|stream_context_get_default|stream_context_get_options|stream_context_get_params|stream_context_set_default|stream_context_set_option|stream_context_set_params|stream_copy_to_stream|stream_encoding|stream_filter_append|stream_filter_prepend|stream_filter_register|stream_filter_remove|stream_get_contents|stream_get_filters|stream_get_line|stream_get_meta_data|stream_get_transports|stream_get_wrappers|stream_is_local|stream_notification_callback|stream_register_wrapper|stream_resolve_include_path|stream_select|stream_set_blocking|stream_set_read_buffer|stream_set_timeout|stream_set_write_buffer|stream_socket_accept|stream_socket_client|stream_socket_enable_crypto|stream_socket_get_name|stream_socket_pair|stream_socket_recvfrom|stream_socket_sendto|stream_socket_server|stream_socket_shutdown|stream_supports_lock|stream_wrapper_register|stream_wrapper_restore|stream_wrapper_unregister|streamwrapper|strftime|strip_tags|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|substr_compare|substr_count|substr_replace|svm|svmmodel|svn_add|svn_auth_get_parameter|svn_auth_set_parameter|svn_blame|svn_cat|svn_checkout|svn_cleanup|svn_client_version|svn_commit|svn_delete|svn_diff|svn_export|svn_fs_abort_txn|svn_fs_apply_text|svn_fs_begin_txn2|svn_fs_change_node_prop|svn_fs_check_path|svn_fs_contents_changed|svn_fs_copy|svn_fs_delete|svn_fs_dir_entries|svn_fs_file_contents|svn_fs_file_length|svn_fs_is_dir|svn_fs_is_file|svn_fs_make_dir|svn_fs_make_file|svn_fs_node_created_rev|svn_fs_node_prop|svn_fs_props_changed|svn_fs_revision_prop|svn_fs_revision_root|svn_fs_txn_root|svn_fs_youngest_rev|svn_import|svn_log|svn_ls|svn_mkdir|svn_repos_create|svn_repos_fs|svn_repos_fs_begin_txn_for_commit|svn_repos_fs_commit_txn|svn_repos_hotcopy|svn_repos_open|svn_repos_recover|svn_revert|svn_status|svn_update|swf_actiongeturl|swf_actiongotoframe|swf_actiongotolabel|swf_actionnextframe|swf_actionplay|swf_actionprevframe|swf_actionsettarget|swf_actionstop|swf_actiontogglequality|swf_actionwaitforframe|swf_addbuttonrecord|swf_addcolor|swf_closefile|swf_definebitmap|swf_definefont|swf_defineline|swf_definepoly|swf_definerect|swf_definetext|swf_endbutton|swf_enddoaction|swf_endshape|swf_endsymbol|swf_fontsize|swf_fontslant|swf_fonttracking|swf_getbitmapinfo|swf_getfontinfo|swf_getframe|swf_labelframe|swf_lookat|swf_modifyobject|swf_mulcolor|swf_nextid|swf_oncondition|swf_openfile|swf_ortho|swf_ortho2|swf_perspective|swf_placeobject|swf_polarview|swf_popmatrix|swf_posround|swf_pushmatrix|swf_removeobject|swf_rotate|swf_scale|swf_setfont|swf_setframe|swf_shapearc|swf_shapecurveto|swf_shapecurveto3|swf_shapefillbitmapclip|swf_shapefillbitmaptile|swf_shapefilloff|swf_shapefillsolid|swf_shapelinesolid|swf_shapelineto|swf_shapemoveto|swf_showframe|swf_startbutton|swf_startdoaction|swf_startshape|swf_startsymbol|swf_textwidth|swf_translate|swf_viewport|swfaction|swfbitmap|swfbutton|swfdisplayitem|swffill|swffont|swffontchar|swfgradient|swfmorph|swfmovie|swfprebuiltclip|swfshape|swfsound|swfsoundinstance|swfsprite|swftext|swftextfield|swfvideostream|swish_construct|swish_getmetalist|swish_getpropertylist|swish_prepare|swish_query|swishresult_getmetalist|swishresult_stem|swishresults_getparsedwords|swishresults_getremovedstopwords|swishresults_nextresult|swishresults_seekresult|swishsearch_execute|swishsearch_resetlimit|swishsearch_setlimit|swishsearch_setphrasedelimiter|swishsearch_setsort|swishsearch_setstructure|sybase_affected_rows|sybase_close|sybase_connect|sybase_data_seek|sybase_deadlock_retry_count|sybase_fetch_array|sybase_fetch_assoc|sybase_fetch_field|sybase_fetch_object|sybase_fetch_row|sybase_field_seek|sybase_free_result|sybase_get_last_message|sybase_min_client_severity|sybase_min_error_severity|sybase_min_message_severity|sybase_min_server_severity|sybase_num_fields|sybase_num_rows|sybase_pconnect|sybase_query|sybase_result|sybase_select_db|sybase_set_message_handler|sybase_unbuffered_query|symlink|sys_get_temp_dir|sys_getloadavg|syslog|system|tag|tan|tanh|tcpwrap_check|tempnam|textdomain|tidy|tidy_access_count|tidy_config_count|tidy_diagnose|tidy_error_count|tidy_get_error_buffer|tidy_get_output|tidy_load_config|tidy_reset_config|tidy_save_config|tidy_set_encoding|tidy_setopt|tidy_warning_count|tidynode|time|time_nanosleep|time_sleep_until|timezone_abbreviations_list|timezone_identifiers_list|timezone_location_get|timezone_name_from_abbr|timezone_name_get|timezone_offset_get|timezone_open|timezone_transitions_get|timezone_version_get|tmpfile|token_get_all|token_name|tokyotyrant|tokyotyrantquery|tokyotyranttable|tostring|tostring|touch|transliterator|traversable|trigger_error|trim|uasort|ucfirst|ucwords|udm_add_search_limit|udm_alloc_agent|udm_alloc_agent_array|udm_api_version|udm_cat_list|udm_cat_path|udm_check_charset|udm_check_stored|udm_clear_search_limits|udm_close_stored|udm_crc32|udm_errno|udm_error|udm_find|udm_free_agent|udm_free_ispell_data|udm_free_res|udm_get_doc_count|udm_get_res_field|udm_get_res_param|udm_hash32|udm_load_ispell_data|udm_open_stored|udm_set_agent_param|uksort|umask|underflowexception|unexpectedvalueexception|uniqid|unixtojd|unlink|unpack|unregister_tick_function|unserialize|unset|urldecode|urlencode|use_soap_error_handler|user_error|usleep|usort|utf8_decode|utf8_encode|v8js|v8jsexception|var_dump|var_export|variant|variant_abs|variant_add|variant_and|variant_cast|variant_cat|variant_cmp|variant_date_from_timestamp|variant_date_to_timestamp|variant_div|variant_eqv|variant_fix|variant_get_type|variant_idiv|variant_imp|variant_int|variant_mod|variant_mul|variant_neg|variant_not|variant_or|variant_pow|variant_round|variant_set|variant_set_type|variant_sub|variant_xor|version_compare|vfprintf|virtual|vpopmail_add_alias_domain|vpopmail_add_alias_domain_ex|vpopmail_add_domain|vpopmail_add_domain_ex|vpopmail_add_user|vpopmail_alias_add|vpopmail_alias_del|vpopmail_alias_del_domain|vpopmail_alias_get|vpopmail_alias_get_all|vpopmail_auth_user|vpopmail_del_domain|vpopmail_del_domain_ex|vpopmail_del_user|vpopmail_error|vpopmail_passwd|vpopmail_set_user_quota|vprintf|vsprintf|w32api_deftype|w32api_init_dtype|w32api_invoke_function|w32api_register_function|w32api_set_call_method|wddx_add_vars|wddx_deserialize|wddx_packet_end|wddx_packet_start|wddx_serialize_value|wddx_serialize_vars|win32_continue_service|win32_create_service|win32_delete_service|win32_get_last_control_message|win32_pause_service|win32_ps_list_procs|win32_ps_stat_mem|win32_ps_stat_proc|win32_query_service_status|win32_set_service_status|win32_start_service|win32_start_service_ctrl_dispatcher|win32_stop_service|wincache_fcache_fileinfo|wincache_fcache_meminfo|wincache_lock|wincache_ocache_fileinfo|wincache_ocache_meminfo|wincache_refresh_if_changed|wincache_rplist_fileinfo|wincache_rplist_meminfo|wincache_scache_info|wincache_scache_meminfo|wincache_ucache_add|wincache_ucache_cas|wincache_ucache_clear|wincache_ucache_dec|wincache_ucache_delete|wincache_ucache_exists|wincache_ucache_get|wincache_ucache_inc|wincache_ucache_info|wincache_ucache_meminfo|wincache_ucache_set|wincache_unlock|wordwrap|xattr_get|xattr_list|xattr_remove|xattr_set|xattr_supported|xdiff_file_bdiff|xdiff_file_bdiff_size|xdiff_file_bpatch|xdiff_file_diff|xdiff_file_diff_binary|xdiff_file_merge3|xdiff_file_patch|xdiff_file_patch_binary|xdiff_file_rabdiff|xdiff_string_bdiff|xdiff_string_bdiff_size|xdiff_string_bpatch|xdiff_string_diff|xdiff_string_diff_binary|xdiff_string_merge3|xdiff_string_patch|xdiff_string_patch_binary|xdiff_string_rabdiff|xhprof_disable|xhprof_enable|xhprof_sample_disable|xhprof_sample_enable|xml_error_string|xml_get_current_byte_index|xml_get_current_column_number|xml_get_current_line_number|xml_get_error_code|xml_parse|xml_parse_into_struct|xml_parser_create|xml_parser_create_ns|xml_parser_free|xml_parser_get_option|xml_parser_set_option|xml_set_character_data_handler|xml_set_default_handler|xml_set_element_handler|xml_set_end_namespace_decl_handler|xml_set_external_entity_ref_handler|xml_set_notation_decl_handler|xml_set_object|xml_set_processing_instruction_handler|xml_set_start_namespace_decl_handler|xml_set_unparsed_entity_decl_handler|xmlreader|xmlrpc_decode|xmlrpc_decode_request|xmlrpc_encode|xmlrpc_encode_request|xmlrpc_get_type|xmlrpc_is_fault|xmlrpc_parse_method_descriptions|xmlrpc_server_add_introspection_data|xmlrpc_server_call_method|xmlrpc_server_create|xmlrpc_server_destroy|xmlrpc_server_register_introspection_callback|xmlrpc_server_register_method|xmlrpc_set_type|xmlwriter_end_attribute|xmlwriter_end_cdata|xmlwriter_end_comment|xmlwriter_end_document|xmlwriter_end_dtd|xmlwriter_end_dtd_attlist|xmlwriter_end_dtd_element|xmlwriter_end_dtd_entity|xmlwriter_end_element|xmlwriter_end_pi|xmlwriter_flush|xmlwriter_full_end_element|xmlwriter_open_memory|xmlwriter_open_uri|xmlwriter_output_memory|xmlwriter_set_indent|xmlwriter_set_indent_string|xmlwriter_start_attribute|xmlwriter_start_attribute_ns|xmlwriter_start_cdata|xmlwriter_start_comment|xmlwriter_start_document|xmlwriter_start_dtd|xmlwriter_start_dtd_attlist|xmlwriter_start_dtd_element|xmlwriter_start_dtd_entity|xmlwriter_start_element|xmlwriter_start_element_ns|xmlwriter_start_pi|xmlwriter_text|xmlwriter_write_attribute|xmlwriter_write_attribute_ns|xmlwriter_write_cdata|xmlwriter_write_comment|xmlwriter_write_dtd|xmlwriter_write_dtd_attlist|xmlwriter_write_dtd_element|xmlwriter_write_dtd_entity|xmlwriter_write_element|xmlwriter_write_element_ns|xmlwriter_write_pi|xmlwriter_write_raw|xpath_eval|xpath_eval_expression|xpath_new_context|xpath_register_ns|xpath_register_ns_auto|xptr_eval|xptr_new_context|xslt_backend_info|xslt_backend_name|xslt_backend_version|xslt_create|xslt_errno|xslt_error|xslt_free|xslt_getopt|xslt_process|xslt_set_base|xslt_set_encoding|xslt_set_error_handler|xslt_set_log|xslt_set_object|xslt_set_sax_handler|xslt_set_sax_handlers|xslt_set_scheme_handler|xslt_set_scheme_handlers|xslt_setopt|xsltprocessor|yaml_emit|yaml_emit_file|yaml_parse|yaml_parse_file|yaml_parse_url|yaz_addinfo|yaz_ccl_conf|yaz_ccl_parse|yaz_close|yaz_connect|yaz_database|yaz_element|yaz_errno|yaz_error|yaz_es|yaz_es_result|yaz_get_option|yaz_hits|yaz_itemorder|yaz_present|yaz_range|yaz_record|yaz_scan|yaz_scan_result|yaz_schema|yaz_search|yaz_set_option|yaz_sort|yaz_syntax|yaz_wait|yp_all|yp_cat|yp_err_string|yp_errno|yp_first|yp_get_default_domain|yp_master|yp_match|yp_next|yp_order|zend_logo_guid|zend_thread_id|zend_version|zip_close|zip_entry_close|zip_entry_compressedsize|zip_entry_compressionmethod|zip_entry_filesize|zip_entry_name|zip_entry_open|zip_entry_read|zip_open|zip_read|ziparchive|ziparchive_addemptydir|ziparchive_addfile|ziparchive_addfromstring|ziparchive_close|ziparchive_deleteindex|ziparchive_deletename|ziparchive_extractto|ziparchive_getarchivecomment|ziparchive_getcommentindex|ziparchive_getcommentname|ziparchive_getfromindex|ziparchive_getfromname|ziparchive_getnameindex|ziparchive_getstatusstring|ziparchive_getstream|ziparchive_locatename|ziparchive_open|ziparchive_renameindex|ziparchive_renamename|ziparchive_setCommentName|ziparchive_setarchivecomment|ziparchive_setcommentindex|ziparchive_statindex|ziparchive_statname|ziparchive_unchangeall|ziparchive_unchangearchive|ziparchive_unchangeindex|ziparchive_unchangename|zlib_get_coding_type".split("|")),b=e.arrayToMap("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".split("|")),c=e.arrayToMap("die|echo|empty|exit|eval|include|include_once|isset|list|require|require_once|return|print|unset".split("|")),d=e.arrayToMap("true|false|null|__CLASS__|__DIR__|__FILE__|__LINE__|__METHOD__|__FUNCTION__|__NAMESPACE__".split("|")),g=e.arrayToMap("$GLOBALS|$_SERVER|$_GET|$_POST|$_FILES|$_REQUEST|$_SESSION|$_ENV|$_COOKIE|$php_errormsg|$HTTP_RAW_POST_DATA|$http_response_header|$argc|$argv".split("|")),h=e.arrayToMap("key_exists|cairo_matrix_create_scale|cairo_matrix_create_translate|call_user_method|call_user_method_array|com_addref|com_get|com_invoke|com_isenum|com_load|com_release|com_set|connection_timeout|cubrid_load_from_glo|cubrid_new_glo|cubrid_save_to_glo|cubrid_send_glo|define_syslog_variables|dl|ereg|ereg_replace|eregi|eregi_replace|hw_documentattributes|hw_documentbodytag|hw_documentsize|hw_outputdocument|imagedashedline|maxdb_bind_param|maxdb_bind_result|maxdb_client_encoding|maxdb_close_long_data|maxdb_execute|maxdb_fetch|maxdb_get_metadata|maxdb_param_count|maxdb_send_long_data|mcrypt_ecb|mcrypt_generic_end|mime_content_type|mysql_createdb|mysql_dbname|mysql_db_query|mysql_drop_db|mysql_dropdb|mysql_escape_string|mysql_fieldflags|mysql_fieldflags|mysql_fieldname|mysql_fieldtable|mysql_fieldtype|mysql_freeresult|mysql_listdbs|mysql_list_fields|mysql_listfields|mysql_list_tables|mysql_listtables|mysql_numfields|mysql_numrows|mysql_selectdb|mysql_tablename|mysqli_bind_param|mysqli_bind_result|mysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_execute|mysqli_fetch|mysqli_get_metadata|mysqli_master_query|mysqli_param_count|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|mysqli_send_long_data|mysqli_send_query|mysqli_slave_query|ocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|ocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|ocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|ocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|ocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|ocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|ociloadlob|ocilogoff|ocilogon|ocinewcollection|ocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|ocirollback|ocirowcount|ocisavelob|ocisavelobfile|ociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|PDF_add_annotation|PDF_add_bookmark|PDF_add_launchlink|PDF_add_locallink|PDF_add_note|PDF_add_outline|PDF_add_pdflink|PDF_add_weblink|PDF_attach_file|PDF_begin_page|PDF_begin_template|PDF_close_pdi|PDF_close|PDF_findfont|PDF_get_font|PDF_get_fontname|PDF_get_fontsize|PDF_get_image_height|PDF_get_image_width|PDF_get_majorversion|PDF_get_minorversion|PDF_get_pdi_parameter|PDF_get_pdi_value|PDF_open_ccitt|PDF_open_file|PDF_open_gif|PDF_open_image_file|PDF_open_image|PDF_open_jpeg|PDF_open_pdi|PDF_open_tiff|PDF_place_image|PDF_place_pdi_page|PDF_set_border_color|PDF_set_border_dash|PDF_set_border_style|PDF_set_char_spacing|PDF_set_duration|PDF_set_horiz_scaling|PDF_set_info_author|PDF_set_info_creator|PDF_set_info_keywords|PDF_set_info_subject|PDF_set_info_title|PDF_set_leading|PDF_set_text_matrix|PDF_set_text_rendering|PDF_set_text_rise|PDF_set_word_spacing|PDF_setgray_fill|PDF_setgray_stroke|PDF_setgray|PDF_setpolydash|PDF_setrgbcolor_fill|PDF_setrgbcolor_stroke|PDF_setrgbcolor|PDF_show_boxed|php_check_syntax|px_set_tablename|px_set_targetencoding|runkit_sandbox_output_handler|session_is_registered|session_register|session_unregisterset_magic_quotes_runtime|magic_quotes_runtime|set_socket_blocking|socket_set_blocking|set_socket_timeout|socket_set_timeout|split|spliti|sql_regcase".split("|")),i=e.arrayToMap("cfunction|old_function".split("|")),j=e.arrayToMap([]);this.$rules={start:[{token:"support",regex:"<\\?(?:php|\\=)"},{token:"support",regex:"\\?>"},{token:"comment",regex:"\\/\\/.*$"},{token:"comment",regex:"#.*$"},(new f).getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"string.regexp",regex:"[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/][gimy]*\\s*(?=[).,;]|$)"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",merge:!0,regex:'["].*\\\\$',next:"qqstring"},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"string",merge:!0,regex:"['].*\\\\$",next:"qstring"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language",regex:"\\b(?:DEFAULT_INCLUDE_PATH|E_(?:ALL|CO(?:MPILE_(?:ERROR|WARNING)|RE_(?:ERROR|WARNING))|ERROR|NOTICE|PARSE|STRICT|USER_(?:ERROR|NOTICE|WARNING)|WARNING)|P(?:EAR_(?:EXTENSION_DIR|INSTALL_DIR)|HP_(?:BINDIR|CONFIG_FILE_(?:PATH|SCAN_DIR)|DATADIR|E(?:OL|XTENSION_DIR)|INT_(?:MAX|SIZE)|L(?:IBDIR|OCALSTATEDIR)|O(?:S|UTPUT_HANDLER_(?:CONT|END|START))|PREFIX|S(?:API|HLIB_SUFFIX|YSCONFDIR)|VERSION))|__COMPILER_HALT_OFFSET__)\\b"},{token:"constant.language",regex:"\\b(?:A(?:B(?:DAY_(?:1|2|3|4|5|6|7)|MON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9))|LT_DIGITS|M_STR|SSERT_(?:ACTIVE|BAIL|CALLBACK|QUIET_EVAL|WARNING))|C(?:ASE_(?:LOWER|UPPER)|HAR_MAX|O(?:DESET|NNECTION_(?:ABORTED|NORMAL|TIMEOUT)|UNT_(?:NORMAL|RECURSIVE))|R(?:EDITS_(?:ALL|DOCS|FULLPAGE|G(?:ENERAL|ROUP)|MODULES|QA|SAPI)|NCYSTR|YPT_(?:BLOWFISH|EXT_DES|MD5|S(?:ALT_LENGTH|TD_DES)))|URRENCY_SYMBOL)|D(?:AY_(?:1|2|3|4|5|6|7)|ECIMAL_POINT|IRECTORY_SEPARATOR|_(?:FMT|T_FMT))|E(?:NT_(?:COMPAT|NOQUOTES|QUOTES)|RA(?:_(?:D_(?:FMT|T_FMT)|T_FMT|YEAR)|)|XTR_(?:IF_EXISTS|OVERWRITE|PREFIX_(?:ALL|I(?:F_EXISTS|NVALID)|SAME)|SKIP))|FRAC_DIGITS|GROUPING|HTML_(?:ENTITIES|SPECIALCHARS)|IN(?:FO_(?:ALL|C(?:ONFIGURATION|REDITS)|ENVIRONMENT|GENERAL|LICENSE|MODULES|VARIABLES)|I_(?:ALL|PERDIR|SYSTEM|USER)|T_(?:CURR_SYMBOL|FRAC_DIGITS))|L(?:C_(?:ALL|C(?:OLLATE|TYPE)|M(?:ESSAGES|ONETARY)|NUMERIC|TIME)|O(?:CK_(?:EX|NB|SH|UN)|G_(?:A(?:LERT|UTH(?:PRIV|))|C(?:ONS|R(?:IT|ON))|D(?:AEMON|EBUG)|E(?:MERG|RR)|INFO|KERN|L(?:OCAL(?:0|1|2|3|4|5|6|7)|PR)|MAIL|N(?:DELAY|EWS|O(?:TICE|WAIT))|ODELAY|P(?:ERROR|ID)|SYSLOG|U(?:SER|UCP)|WARNING)))|M(?:ON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9|DECIMAL_POINT|GROUPING|THOUSANDS_SEP)|_(?:1_PI|2_(?:PI|SQRTPI)|E|L(?:N(?:10|2)|OG(?:10E|2E))|PI(?:_(?:2|4)|)|SQRT(?:1_2|2)))|N(?:EGATIVE_SIGN|O(?:EXPR|STR)|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|P(?:ATH(?:INFO_(?:BASENAME|DIRNAME|EXTENSION)|_SEPARATOR)|M_STR|OSITIVE_SIGN|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|RADIXCHAR|S(?:EEK_(?:CUR|END|SET)|ORT_(?:ASC|DESC|NUMERIC|REGULAR|STRING)|TR_PAD_(?:BOTH|LEFT|RIGHT))|T(?:HOUS(?:ANDS_SEP|EP)|_FMT(?:_AMPM|))|YES(?:EXPR|STR)|STD(?:IN|OUT|ERR))\\b"},{token:function(e){if(i.hasOwnProperty(e))return"invalid.deprecated";if(b.hasOwnProperty(e))return"keyword";if(c.hasOwnProperty(e))return"keyword";if(d.hasOwnProperty(e))return"constant.language";if(g.hasOwnProperty(e))return"variable.language";if(j.hasOwnProperty(e))return"invalid.illegal";if(h.hasOwnProperty(e))return"invalid.deprecated";if(a.hasOwnProperty(e))return"support.function";if(e.match(/^(\$[a-zA-Z_][a-zA-Z0-9_]*|self|parent)$/))return"variable";return"identifier"},regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"},{token:"lparen",regex:"[[({]"},{token:"rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"string",regex:'(?:(?:\\\\.)|(?:[^"\\\\]))*?"',next:"start"},{token:"string",merge:!0,regex:".+"}],qstring:[{token:"string",regex:"(?:(?:\\\\.)|(?:[^'\\\\]))*?'",next:"start"},{token:"string",merge:!0,regex:".+"}]},this.embedRules(f,"doc-",[(new f).getEndRule("start")])};d.inherits(h,g),b.PhpHighlightRules=h}),define("ace/mode/doc_comment_highlight_rules",["require","exports","module","pilot/oop","ace/mode/text_highlight_rules"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/text_highlight_rules").TextHighlightRules,f=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};d.inherits(f,e),function(){this.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},this.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}}}.call(f.prototype),b.DocCommentHighlightRules=f}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(a,b,c){var d=a("ace/range").Range,e=function(){};(function(){this.checkOutdent=function(a,b){return/^\s+$/.test(a)?/^\s*\}/.test(b):!1},this.autoOutdent=function(a,b){var c=a.getLine(b),e=c.match(/^(\s*\})/);if(!e)return 0;var f=e[1].length,g=a.findMatchingBracket({row:b,column:f});if(!g||g.row==b)return 0;var h=this.$getIndent(a.getLine(g.row));a.replace(new d(b,0,b,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""}}).call(e.prototype),b.MatchingBraceOutdent=e}),define("ace/mode/behaviour/cstyle",["require","exports","module","pilot/oop","ace/mode/behaviour"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/behaviour").Behaviour,f=function(){this.add("braces","insertion",function(a,b,c,d,e){if(e=="{"){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"{"+g+"}",selection:!1}:{text:"{}",selection:[1,1]}}if(e=="}"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var k=d.$findOpeningBracket("}",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}else if(e=="\n"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var l=d.findMatchingBracket({row:h.row,column:h.column+1});if(!l)return!1;var m=this.getNextLineIndent(a,i.substring(0,i.length-1),d.getTabString()),n=this.$getIndent(d.doc.getLine(l.row));return{text:"\n"+m+"\n"+n,selection:[1,m.length,1,m.length]}}}return!1}),this.add("braces","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="{"){var g=d.doc.getLine(e.start.row),h=g.substring(e.end.column,e.end.column+1);if(h=="}"){e.end.column++;return e}}return!1}),this.add("parens","insertion",function(a,b,c,d,e){if(e=="("){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"("+g+")",selection:!1}:{text:"()",selection:[1,1]}}if(e==")"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j==")"){var k=d.$findOpeningBracket(")",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}return!1}),this.add("parens","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="("){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h==")"){e.end.column++;return e}}return!1}),this.add("string_dquotes","insertion",function(a,b,c,d,e){if(e=='"'){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);if(g!=="")return{text:'"'+g+'"',selection:!1};var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column-1,h.column);if(j=="\\")return!1;var k=d.getTokens(f.start.row,f.start.row)[0].tokens,l=0,m,n=-1;for(var o=0;o<k.length;o++){m=k[o],m.type=="string"?n=-1:n<0&&(n=m.value.indexOf('"'));if(m.value.length+l>f.start.column)break;l+=k[o].value.length}if(!m||n<0&&m.type!=="comment"&&(m.type!=="string"||f.start.column!==m.value.length+l-1&&m.value.lastIndexOf('"')===m.value.length-1))return{text:'""',selection:[1,1]};if(m&&m.type==="string"){var p=i.substring(h.column,h.column+1);if(p=='"')return{text:"",selection:[1,1]}}}return!1}),this.add("string_dquotes","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=='"'){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h=='"'){e.end.column++;return e}}return!1})};d.inherits(f,e),b.CstyleBehaviour=f}) \ No newline at end of file
+define("ace/mode/php",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/php_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text").Mode,f=a("../tokenizer").Tokenizer,g=a("./php_highlight_rules").PhpHighlightRules,h=a("./matching_brace_outdent").MatchingBraceOutdent,i=a("../range").Range,j=a("./behaviour/cstyle").CstyleBehaviour,k=a("./folding/cstyle").FoldMode,l=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h,this.$behaviour=new j,this.foldingRules=new k};d.inherits(l,e),function(){this.toggleCommentLines=function(a,b,c,d){var e=!0,f=/^(\s*)#/;for(var g=c;g<=d;g++)if(!f.test(b.getLine(g))){e=!1;break}if(e){var h=new i(0,0,0,0);for(var g=c;g<=d;g++){var j=b.getLine(g),k=j.match(f);h.start.row=g,h.end.row=g,h.end.column=k[0].length,b.replace(h,k[1])}}else b.indentRows(c,d,"#")},this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=this.$tokenizer.getLineTokens(b,a),f=e.tokens;if(f.length&&f[f.length-1].type=="comment")return d;if(a=="start"){var g=b.match(/^.*[\{\(\[\:]\s*$/);g&&(d+=c)}return d},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)}}.call(l.prototype),b.Mode=l}),define("ace/mode/php_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("../lib/lang"),f=a("./doc_comment_highlight_rules").DocCommentHighlightRules,g=a("./text_highlight_rules").TextHighlightRules,h=function(){var a=new f,b=e.arrayToMap("abs|acos|acosh|addcslashes|addslashes|aggregate|aggregate_info|aggregate_methods|aggregate_methods_by_list|aggregate_methods_by_regexp|aggregate_properties|aggregate_properties_by_list|aggregate_properties_by_regexp|aggregation_info|amqpconnection|amqpexchange|amqpqueue|apache_child_terminate|apache_get_modules|apache_get_version|apache_getenv|apache_lookup_uri|apache_note|apache_request_headers|apache_reset_timeout|apache_response_headers|apache_setenv|apc_add|apc_bin_dump|apc_bin_dumpfile|apc_bin_load|apc_bin_loadfile|apc_cache_info|apc_cas|apc_clear_cache|apc_compile_file|apc_dec|apc_define_constants|apc_delete|apc_delete_file|apc_exists|apc_fetch|apc_inc|apc_load_constants|apc_sma_info|apc_store|apciterator|apd_breakpoint|apd_callstack|apd_clunk|apd_continue|apd_croak|apd_dump_function_table|apd_dump_persistent_resources|apd_dump_regular_resources|apd_echo|apd_get_active_symbols|apd_set_pprof_trace|apd_set_session|apd_set_session_trace|apd_set_session_trace_socket|appenditerator|array|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_replace|array_replace_recursive|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|arrayaccess|arrayiterator|arrayobject|arsort|asin|asinh|asort|assert|assert_options|atan|atan2|atanh|audioproperties|badfunctioncallexception|badmethodcallexception|base64_decode|base64_encode|base_convert|basename|bbcode_add_element|bbcode_add_smiley|bbcode_create|bbcode_destroy|bbcode_parse|bbcode_set_arg_parser|bbcode_set_flags|bcadd|bccomp|bcdiv|bcmod|bcmul|bcompiler_load|bcompiler_load_exe|bcompiler_parse_class|bcompiler_read|bcompiler_write_class|bcompiler_write_constant|bcompiler_write_exe_footer|bcompiler_write_file|bcompiler_write_footer|bcompiler_write_function|bcompiler_write_functions_from_file|bcompiler_write_header|bcompiler_write_included_filename|bcpow|bcpowmod|bcscale|bcsqrt|bcsub|bin2hex|bind_textdomain_codeset|bindec|bindtextdomain|bson_decode|bson_encode|bumpValue|bzclose|bzcompress|bzdecompress|bzerrno|bzerror|bzerrstr|bzflush|bzopen|bzread|bzwrite|cachingiterator|cairo|cairo_create|cairo_font_face_get_type|cairo_font_face_status|cairo_font_options_create|cairo_font_options_equal|cairo_font_options_get_antialias|cairo_font_options_get_hint_metrics|cairo_font_options_get_hint_style|cairo_font_options_get_subpixel_order|cairo_font_options_hash|cairo_font_options_merge|cairo_font_options_set_antialias|cairo_font_options_set_hint_metrics|cairo_font_options_set_hint_style|cairo_font_options_set_subpixel_order|cairo_font_options_status|cairo_format_stride_for_width|cairo_image_surface_create|cairo_image_surface_create_for_data|cairo_image_surface_create_from_png|cairo_image_surface_get_data|cairo_image_surface_get_format|cairo_image_surface_get_height|cairo_image_surface_get_stride|cairo_image_surface_get_width|cairo_matrix_create_scale|cairo_matrix_create_translate|cairo_matrix_invert|cairo_matrix_multiply|cairo_matrix_rotate|cairo_matrix_transform_distance|cairo_matrix_transform_point|cairo_matrix_translate|cairo_pattern_add_color_stop_rgb|cairo_pattern_add_color_stop_rgba|cairo_pattern_create_for_surface|cairo_pattern_create_linear|cairo_pattern_create_radial|cairo_pattern_create_rgb|cairo_pattern_create_rgba|cairo_pattern_get_color_stop_count|cairo_pattern_get_color_stop_rgba|cairo_pattern_get_extend|cairo_pattern_get_filter|cairo_pattern_get_linear_points|cairo_pattern_get_matrix|cairo_pattern_get_radial_circles|cairo_pattern_get_rgba|cairo_pattern_get_surface|cairo_pattern_get_type|cairo_pattern_set_extend|cairo_pattern_set_filter|cairo_pattern_set_matrix|cairo_pattern_status|cairo_pdf_surface_create|cairo_pdf_surface_set_size|cairo_ps_get_levels|cairo_ps_level_to_string|cairo_ps_surface_create|cairo_ps_surface_dsc_begin_page_setup|cairo_ps_surface_dsc_begin_setup|cairo_ps_surface_dsc_comment|cairo_ps_surface_get_eps|cairo_ps_surface_restrict_to_level|cairo_ps_surface_set_eps|cairo_ps_surface_set_size|cairo_scaled_font_create|cairo_scaled_font_extents|cairo_scaled_font_get_ctm|cairo_scaled_font_get_font_face|cairo_scaled_font_get_font_matrix|cairo_scaled_font_get_font_options|cairo_scaled_font_get_scale_matrix|cairo_scaled_font_get_type|cairo_scaled_font_glyph_extents|cairo_scaled_font_status|cairo_scaled_font_text_extents|cairo_surface_copy_page|cairo_surface_create_similar|cairo_surface_finish|cairo_surface_flush|cairo_surface_get_content|cairo_surface_get_device_offset|cairo_surface_get_font_options|cairo_surface_get_type|cairo_surface_mark_dirty|cairo_surface_mark_dirty_rectangle|cairo_surface_set_device_offset|cairo_surface_set_fallback_resolution|cairo_surface_show_page|cairo_surface_status|cairo_surface_write_to_png|cairo_svg_surface_create|cairo_svg_surface_restrict_to_version|cairo_svg_version_to_string|cairoantialias|cairocontent|cairocontext|cairoexception|cairoextend|cairofillrule|cairofilter|cairofontface|cairofontoptions|cairofontslant|cairofonttype|cairofontweight|cairoformat|cairogradientpattern|cairohintmetrics|cairohintstyle|cairoimagesurface|cairolineargradient|cairolinecap|cairolinejoin|cairomatrix|cairooperator|cairopath|cairopattern|cairopatterntype|cairopdfsurface|cairopslevel|cairopssurface|cairoradialgradient|cairoscaledfont|cairosolidpattern|cairostatus|cairosubpixelorder|cairosurface|cairosurfacepattern|cairosurfacetype|cairosvgsurface|cairosvgversion|cairotoyfontface|cal_days_in_month|cal_from_jd|cal_info|cal_to_jd|calcul_hmac|calculhmac|call_user_func|call_user_func_array|call_user_method|call_user_method_array|callbackfilteriterator|ceil|chdb|chdb_create|chdir|checkdate|checkdnsrr|chgrp|chmod|chop|chown|chr|chroot|chunk_split|class_alias|class_exists|class_implements|class_parents|classkit_import|classkit_method_add|classkit_method_copy|classkit_method_redefine|classkit_method_remove|classkit_method_rename|clearstatcache|clone|closedir|closelog|collator|com|com_addref|com_create_guid|com_event_sink|com_get|com_get_active_object|com_invoke|com_isenum|com_load|com_load_typelib|com_message_pump|com_print_typeinfo|com_propget|com_propput|com_propset|com_release|com_set|compact|connection_aborted|connection_status|connection_timeout|constant|construct|construct|construct|convert_cyr_string|convert_uudecode|convert_uuencode|copy|cos|cosh|count|count_chars|countable|counter_bump|counter_bump_value|counter_create|counter_get|counter_get_meta|counter_get_named|counter_get_value|counter_reset|counter_reset_value|crack_check|crack_closedict|crack_getlastmessage|crack_opendict|crc32|create_function|crypt|ctype_alnum|ctype_alpha|ctype_cntrl|ctype_digit|ctype_graph|ctype_lower|ctype_print|ctype_punct|ctype_space|ctype_upper|ctype_xdigit|cubrid_affected_rows|cubrid_bind|cubrid_client_encoding|cubrid_close|cubrid_close_prepare|cubrid_close_request|cubrid_col_get|cubrid_col_size|cubrid_column_names|cubrid_column_types|cubrid_commit|cubrid_connect|cubrid_connect_with_url|cubrid_current_oid|cubrid_data_seek|cubrid_db_name|cubrid_disconnect|cubrid_drop|cubrid_errno|cubrid_error|cubrid_error_code|cubrid_error_code_facility|cubrid_error_msg|cubrid_execute|cubrid_fetch|cubrid_fetch_array|cubrid_fetch_assoc|cubrid_fetch_field|cubrid_fetch_lengths|cubrid_fetch_object|cubrid_fetch_row|cubrid_field_flags|cubrid_field_len|cubrid_field_name|cubrid_field_seek|cubrid_field_table|cubrid_field_type|cubrid_free_result|cubrid_get|cubrid_get_autocommit|cubrid_get_charset|cubrid_get_class_name|cubrid_get_client_info|cubrid_get_db_parameter|cubrid_get_server_info|cubrid_insert_id|cubrid_is_instance|cubrid_list_dbs|cubrid_load_from_glo|cubrid_lob_close|cubrid_lob_export|cubrid_lob_get|cubrid_lob_send|cubrid_lob_size|cubrid_lock_read|cubrid_lock_write|cubrid_move_cursor|cubrid_new_glo|cubrid_next_result|cubrid_num_cols|cubrid_num_fields|cubrid_num_rows|cubrid_ping|cubrid_prepare|cubrid_put|cubrid_query|cubrid_real_escape_string|cubrid_result|cubrid_rollback|cubrid_save_to_glo|cubrid_schema|cubrid_send_glo|cubrid_seq_drop|cubrid_seq_insert|cubrid_seq_put|cubrid_set_add|cubrid_set_autocommit|cubrid_set_db_parameter|cubrid_set_drop|cubrid_unbuffered_query|cubrid_version|curl_close|curl_copy_handle|curl_errno|curl_error|curl_exec|curl_getinfo|curl_init|curl_multi_add_handle|curl_multi_close|curl_multi_exec|curl_multi_getcontent|curl_multi_info_read|curl_multi_init|curl_multi_remove_handle|curl_multi_select|curl_setopt|curl_setopt_array|curl_version|current|cyrus_authenticate|cyrus_bind|cyrus_close|cyrus_connect|cyrus_query|cyrus_unbind|date|date_add|date_create|date_create_from_format|date_date_set|date_default_timezone_get|date_default_timezone_set|date_diff|date_format|date_get_last_errors|date_interval_create_from_date_string|date_interval_format|date_isodate_set|date_modify|date_offset_get|date_parse|date_parse_from_format|date_sub|date_sun_info|date_sunrise|date_sunset|date_time_set|date_timestamp_get|date_timestamp_set|date_timezone_get|date_timezone_set|dateinterval|dateperiod|datetime|datetimezone|db2_autocommit|db2_bind_param|db2_client_info|db2_close|db2_column_privileges|db2_columns|db2_commit|db2_conn_error|db2_conn_errormsg|db2_connect|db2_cursor_type|db2_escape_string|db2_exec|db2_execute|db2_fetch_array|db2_fetch_assoc|db2_fetch_both|db2_fetch_object|db2_fetch_row|db2_field_display_size|db2_field_name|db2_field_num|db2_field_precision|db2_field_scale|db2_field_type|db2_field_width|db2_foreign_keys|db2_free_result|db2_free_stmt|db2_get_option|db2_last_insert_id|db2_lob_read|db2_next_result|db2_num_fields|db2_num_rows|db2_pclose|db2_pconnect|db2_prepare|db2_primary_keys|db2_procedure_columns|db2_procedures|db2_result|db2_rollback|db2_server_info|db2_set_option|db2_special_columns|db2_statistics|db2_stmt_error|db2_stmt_errormsg|db2_table_privileges|db2_tables|dba_close|dba_delete|dba_exists|dba_fetch|dba_firstkey|dba_handlers|dba_insert|dba_key_split|dba_list|dba_nextkey|dba_open|dba_optimize|dba_popen|dba_replace|dba_sync|dbase_add_record|dbase_close|dbase_create|dbase_delete_record|dbase_get_header_info|dbase_get_record|dbase_get_record_with_names|dbase_numfields|dbase_numrecords|dbase_open|dbase_pack|dbase_replace_record|dbplus_add|dbplus_aql|dbplus_chdir|dbplus_close|dbplus_curr|dbplus_errcode|dbplus_errno|dbplus_find|dbplus_first|dbplus_flush|dbplus_freealllocks|dbplus_freelock|dbplus_freerlocks|dbplus_getlock|dbplus_getunique|dbplus_info|dbplus_last|dbplus_lockrel|dbplus_next|dbplus_open|dbplus_prev|dbplus_rchperm|dbplus_rcreate|dbplus_rcrtexact|dbplus_rcrtlike|dbplus_resolve|dbplus_restorepos|dbplus_rkeys|dbplus_ropen|dbplus_rquery|dbplus_rrename|dbplus_rsecindex|dbplus_runlink|dbplus_rzap|dbplus_savepos|dbplus_setindex|dbplus_setindexbynumber|dbplus_sql|dbplus_tcl|dbplus_tremove|dbplus_undo|dbplus_undoprepare|dbplus_unlockrel|dbplus_unselect|dbplus_update|dbplus_xlockrel|dbplus_xunlockrel|dbx_close|dbx_compare|dbx_connect|dbx_error|dbx_escape_string|dbx_fetch_row|dbx_query|dbx_sort|dcgettext|dcngettext|deaggregate|debug_backtrace|debug_print_backtrace|debug_zval_dump|decbin|dechex|decoct|define|define_syslog_variables|defined|deg2rad|delete|dgettext|die|dio_close|dio_fcntl|dio_open|dio_read|dio_seek|dio_stat|dio_tcsetattr|dio_truncate|dio_write|dir|directoryiterator|dirname|disk_free_space|disk_total_space|diskfreespace|dl|dngettext|dns_check_record|dns_get_mx|dns_get_record|dom_import_simplexml|domainexception|domattr|domattribute_name|domattribute_set_value|domattribute_specified|domattribute_value|domcharacterdata|domcomment|domdocument|domdocument_add_root|domdocument_create_attribute|domdocument_create_cdata_section|domdocument_create_comment|domdocument_create_element|domdocument_create_element_ns|domdocument_create_entity_reference|domdocument_create_processing_instruction|domdocument_create_text_node|domdocument_doctype|domdocument_document_element|domdocument_dump_file|domdocument_dump_mem|domdocument_get_element_by_id|domdocument_get_elements_by_tagname|domdocument_html_dump_mem|domdocument_xinclude|domdocumentfragment|domdocumenttype|domdocumenttype_entities|domdocumenttype_internal_subset|domdocumenttype_name|domdocumenttype_notations|domdocumenttype_public_id|domdocumenttype_system_id|domelement|domelement_get_attribute|domelement_get_attribute_node|domelement_get_elements_by_tagname|domelement_has_attribute|domelement_remove_attribute|domelement_set_attribute|domelement_set_attribute_node|domelement_tagname|domentity|domentityreference|domexception|domimplementation|domnamednodemap|domnode|domnode_add_namespace|domnode_append_child|domnode_append_sibling|domnode_attributes|domnode_child_nodes|domnode_clone_node|domnode_dump_node|domnode_first_child|domnode_get_content|domnode_has_attributes|domnode_has_child_nodes|domnode_insert_before|domnode_is_blank_node|domnode_last_child|domnode_next_sibling|domnode_node_name|domnode_node_type|domnode_node_value|domnode_owner_document|domnode_parent_node|domnode_prefix|domnode_previous_sibling|domnode_remove_child|domnode_replace_child|domnode_replace_node|domnode_set_content|domnode_set_name|domnode_set_namespace|domnode_unlink_node|domnodelist|domnotation|domprocessinginstruction|domprocessinginstruction_data|domprocessinginstruction_target|domtext|domxml_new_doc|domxml_open_file|domxml_open_mem|domxml_version|domxml_xmltree|domxml_xslt_stylesheet|domxml_xslt_stylesheet_doc|domxml_xslt_stylesheet_file|domxml_xslt_version|domxpath|domxsltstylesheet_process|domxsltstylesheet_result_dump_file|domxsltstylesheet_result_dump_mem|dotnet|dotnet_load|doubleval|each|easter_date|easter_days|echo|empty|emptyiterator|enchant_broker_describe|enchant_broker_dict_exists|enchant_broker_free|enchant_broker_free_dict|enchant_broker_get_error|enchant_broker_init|enchant_broker_list_dicts|enchant_broker_request_dict|enchant_broker_request_pwl_dict|enchant_broker_set_ordering|enchant_dict_add_to_personal|enchant_dict_add_to_session|enchant_dict_check|enchant_dict_describe|enchant_dict_get_error|enchant_dict_is_in_session|enchant_dict_quick_check|enchant_dict_store_replacement|enchant_dict_suggest|end|ereg|ereg_replace|eregi|eregi_replace|error_get_last|error_log|error_reporting|errorexception|escapeshellarg|escapeshellcmd|eval|event_add|event_base_free|event_base_loop|event_base_loopbreak|event_base_loopexit|event_base_new|event_base_priority_init|event_base_set|event_buffer_base_set|event_buffer_disable|event_buffer_enable|event_buffer_fd_set|event_buffer_free|event_buffer_new|event_buffer_priority_set|event_buffer_read|event_buffer_set_callback|event_buffer_timeout_set|event_buffer_watermark_set|event_buffer_write|event_del|event_free|event_new|event_set|exception|exec|exif_imagetype|exif_read_data|exif_tagname|exif_thumbnail|exit|exp|expect_expectl|expect_popen|explode|expm1|export|export|extension_loaded|extract|ezmlm_hash|fam_cancel_monitor|fam_close|fam_monitor_collection|fam_monitor_directory|fam_monitor_file|fam_next_event|fam_open|fam_pending|fam_resume_monitor|fam_suspend_monitor|fbsql_affected_rows|fbsql_autocommit|fbsql_blob_size|fbsql_change_user|fbsql_clob_size|fbsql_close|fbsql_commit|fbsql_connect|fbsql_create_blob|fbsql_create_clob|fbsql_create_db|fbsql_data_seek|fbsql_database|fbsql_database_password|fbsql_db_query|fbsql_db_status|fbsql_drop_db|fbsql_errno|fbsql_error|fbsql_fetch_array|fbsql_fetch_assoc|fbsql_fetch_field|fbsql_fetch_lengths|fbsql_fetch_object|fbsql_fetch_row|fbsql_field_flags|fbsql_field_len|fbsql_field_name|fbsql_field_seek|fbsql_field_table|fbsql_field_type|fbsql_free_result|fbsql_get_autostart_info|fbsql_hostname|fbsql_insert_id|fbsql_list_dbs|fbsql_list_fields|fbsql_list_tables|fbsql_next_result|fbsql_num_fields|fbsql_num_rows|fbsql_password|fbsql_pconnect|fbsql_query|fbsql_read_blob|fbsql_read_clob|fbsql_result|fbsql_rollback|fbsql_rows_fetched|fbsql_select_db|fbsql_set_characterset|fbsql_set_lob_mode|fbsql_set_password|fbsql_set_transaction|fbsql_start_db|fbsql_stop_db|fbsql_table_name|fbsql_tablename|fbsql_username|fbsql_warnings|fclose|fdf_add_doc_javascript|fdf_add_template|fdf_close|fdf_create|fdf_enum_values|fdf_errno|fdf_error|fdf_get_ap|fdf_get_attachment|fdf_get_encoding|fdf_get_file|fdf_get_flags|fdf_get_opt|fdf_get_status|fdf_get_value|fdf_get_version|fdf_header|fdf_next_field_name|fdf_open|fdf_open_string|fdf_remove_item|fdf_save|fdf_save_string|fdf_set_ap|fdf_set_encoding|fdf_set_file|fdf_set_flags|fdf_set_javascript_action|fdf_set_on_import_javascript|fdf_set_opt|fdf_set_status|fdf_set_submit_form_action|fdf_set_target_frame|fdf_set_value|fdf_set_version|feof|fflush|fgetc|fgetcsv|fgets|fgetss|file|file_exists|file_get_contents|file_put_contents|fileatime|filectime|filegroup|fileinode|filemtime|fileowner|fileperms|filepro|filepro_fieldcount|filepro_fieldname|filepro_fieldtype|filepro_fieldwidth|filepro_retrieve|filepro_rowcount|filesize|filesystemiterator|filetype|filter_has_var|filter_id|filter_input|filter_input_array|filter_list|filter_var|filter_var_array|filteriterator|finfo_buffer|finfo_close|finfo_file|finfo_open|finfo_set_flags|floatval|flock|floor|flush|fmod|fnmatch|fopen|forward_static_call|forward_static_call_array|fpassthru|fprintf|fputcsv|fputs|fread|frenchtojd|fribidi_log2vis|fscanf|fseek|fsockopen|fstat|ftell|ftok|ftp_alloc|ftp_cdup|ftp_chdir|ftp_chmod|ftp_close|ftp_connect|ftp_delete|ftp_exec|ftp_fget|ftp_fput|ftp_get|ftp_get_option|ftp_login|ftp_mdtm|ftp_mkdir|ftp_nb_continue|ftp_nb_fget|ftp_nb_fput|ftp_nb_get|ftp_nb_put|ftp_nlist|ftp_pasv|ftp_put|ftp_pwd|ftp_quit|ftp_raw|ftp_rawlist|ftp_rename|ftp_rmdir|ftp_set_option|ftp_site|ftp_size|ftp_ssl_connect|ftp_systype|ftruncate|func_get_arg|func_get_args|func_num_args|function_exists|fwrite|gc_collect_cycles|gc_disable|gc_enable|gc_enabled|gd_info|gearmanclient|gearmanjob|gearmantask|gearmanworker|geoip_continent_code_by_name|geoip_country_code3_by_name|geoip_country_code_by_name|geoip_country_name_by_name|geoip_database_info|geoip_db_avail|geoip_db_filename|geoip_db_get_all_info|geoip_id_by_name|geoip_isp_by_name|geoip_org_by_name|geoip_record_by_name|geoip_region_by_name|geoip_region_name_by_code|geoip_time_zone_by_country_and_region|getMeta|getNamed|getValue|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_files|get_resource_type|getallheaders|getconstant|getconstants|getconstructor|getcwd|getdate|getdefaultproperties|getdoccomment|getendline|getenv|getextension|getextensionname|getfilename|gethostbyaddr|gethostbyname|gethostbynamel|gethostname|getimagesize|getinterfacenames|getinterfaces|getlastmod|getmethod|getmethods|getmodifiers|getmxrr|getmygid|getmyinode|getmypid|getmyuid|getname|getnamespacename|getopt|getparentclass|getproperties|getproperty|getprotobyname|getprotobynumber|getrandmax|getrusage|getservbyname|getservbyport|getshortname|getstartline|getstaticproperties|getstaticpropertyvalue|gettext|gettimeofday|gettype|glob|globiterator|gmagick|gmagickdraw|gmagickpixel|gmdate|gmmktime|gmp_abs|gmp_add|gmp_and|gmp_clrbit|gmp_cmp|gmp_com|gmp_div|gmp_div_q|gmp_div_qr|gmp_div_r|gmp_divexact|gmp_fact|gmp_gcd|gmp_gcdext|gmp_hamdist|gmp_init|gmp_intval|gmp_invert|gmp_jacobi|gmp_legendre|gmp_mod|gmp_mul|gmp_neg|gmp_nextprime|gmp_or|gmp_perfect_square|gmp_popcount|gmp_pow|gmp_powm|gmp_prob_prime|gmp_random|gmp_scan0|gmp_scan1|gmp_setbit|gmp_sign|gmp_sqrt|gmp_sqrtrem|gmp_strval|gmp_sub|gmp_testbit|gmp_xor|gmstrftime|gnupg_adddecryptkey|gnupg_addencryptkey|gnupg_addsignkey|gnupg_cleardecryptkeys|gnupg_clearencryptkeys|gnupg_clearsignkeys|gnupg_decrypt|gnupg_decryptverify|gnupg_encrypt|gnupg_encryptsign|gnupg_export|gnupg_geterror|gnupg_getprotocol|gnupg_import|gnupg_init|gnupg_keyinfo|gnupg_setarmor|gnupg_seterrormode|gnupg_setsignmode|gnupg_sign|gnupg_verify|gopher_parsedir|grapheme_extract|grapheme_stripos|grapheme_stristr|grapheme_strlen|grapheme_strpos|grapheme_strripos|grapheme_strrpos|grapheme_strstr|grapheme_substr|gregoriantojd|gupnp_context_get_host_ip|gupnp_context_get_port|gupnp_context_get_subscription_timeout|gupnp_context_host_path|gupnp_context_new|gupnp_context_set_subscription_timeout|gupnp_context_timeout_add|gupnp_context_unhost_path|gupnp_control_point_browse_start|gupnp_control_point_browse_stop|gupnp_control_point_callback_set|gupnp_control_point_new|gupnp_device_action_callback_set|gupnp_device_info_get|gupnp_device_info_get_service|gupnp_root_device_get_available|gupnp_root_device_get_relative_location|gupnp_root_device_new|gupnp_root_device_set_available|gupnp_root_device_start|gupnp_root_device_stop|gupnp_service_action_get|gupnp_service_action_return|gupnp_service_action_return_error|gupnp_service_action_set|gupnp_service_freeze_notify|gupnp_service_info_get|gupnp_service_info_get_introspection|gupnp_service_introspection_get_state_variable|gupnp_service_notify|gupnp_service_proxy_action_get|gupnp_service_proxy_action_set|gupnp_service_proxy_add_notify|gupnp_service_proxy_callback_set|gupnp_service_proxy_get_subscribed|gupnp_service_proxy_remove_notify|gupnp_service_proxy_set_subscribed|gupnp_service_thaw_notify|gzclose|gzcompress|gzdecode|gzdeflate|gzencode|gzeof|gzfile|gzgetc|gzgets|gzgetss|gzinflate|gzopen|gzpassthru|gzputs|gzread|gzrewind|gzseek|gztell|gzuncompress|gzwrite|halt_compiler|haruannotation|haruannotation_setborderstyle|haruannotation_sethighlightmode|haruannotation_seticon|haruannotation_setopened|harudestination|harudestination_setfit|harudestination_setfitb|harudestination_setfitbh|harudestination_setfitbv|harudestination_setfith|harudestination_setfitr|harudestination_setfitv|harudestination_setxyz|harudoc|harudoc_addpage|harudoc_addpagelabel|harudoc_construct|harudoc_createoutline|harudoc_getcurrentencoder|harudoc_getcurrentpage|harudoc_getencoder|harudoc_getfont|harudoc_getinfoattr|harudoc_getpagelayout|harudoc_getpagemode|harudoc_getstreamsize|harudoc_insertpage|harudoc_loadjpeg|harudoc_loadpng|harudoc_loadraw|harudoc_loadttc|harudoc_loadttf|harudoc_loadtype1|harudoc_output|harudoc_readfromstream|harudoc_reseterror|harudoc_resetstream|harudoc_save|harudoc_savetostream|harudoc_setcompressionmode|harudoc_setcurrentencoder|harudoc_setencryptionmode|harudoc_setinfoattr|harudoc_setinfodateattr|harudoc_setopenaction|harudoc_setpagelayout|harudoc_setpagemode|harudoc_setpagesconfiguration|harudoc_setpassword|harudoc_setpermission|harudoc_usecnsencodings|harudoc_usecnsfonts|harudoc_usecntencodings|harudoc_usecntfonts|harudoc_usejpencodings|harudoc_usejpfonts|harudoc_usekrencodings|harudoc_usekrfonts|haruencoder|haruencoder_getbytetype|haruencoder_gettype|haruencoder_getunicode|haruencoder_getwritingmode|haruexception|harufont|harufont_getascent|harufont_getcapheight|harufont_getdescent|harufont_getencodingname|harufont_getfontname|harufont_gettextwidth|harufont_getunicodewidth|harufont_getxheight|harufont_measuretext|haruimage|haruimage_getbitspercomponent|haruimage_getcolorspace|haruimage_getheight|haruimage_getsize|haruimage_getwidth|haruimage_setcolormask|haruimage_setmaskimage|haruoutline|haruoutline_setdestination|haruoutline_setopened|harupage|harupage_arc|harupage_begintext|harupage_circle|harupage_closepath|harupage_concat|harupage_createdestination|harupage_createlinkannotation|harupage_createtextannotation|harupage_createurlannotation|harupage_curveto|harupage_curveto2|harupage_curveto3|harupage_drawimage|harupage_ellipse|harupage_endpath|harupage_endtext|harupage_eofill|harupage_eofillstroke|harupage_fill|harupage_fillstroke|harupage_getcharspace|harupage_getcmykfill|harupage_getcmykstroke|harupage_getcurrentfont|harupage_getcurrentfontsize|harupage_getcurrentpos|harupage_getcurrenttextpos|harupage_getdash|harupage_getfillingcolorspace|harupage_getflatness|harupage_getgmode|harupage_getgrayfill|harupage_getgraystroke|harupage_getheight|harupage_gethorizontalscaling|harupage_getlinecap|harupage_getlinejoin|harupage_getlinewidth|harupage_getmiterlimit|harupage_getrgbfill|harupage_getrgbstroke|harupage_getstrokingcolorspace|harupage_gettextleading|harupage_gettextmatrix|harupage_gettextrenderingmode|harupage_gettextrise|harupage_gettextwidth|harupage_gettransmatrix|harupage_getwidth|harupage_getwordspace|harupage_lineto|harupage_measuretext|harupage_movetextpos|harupage_moveto|harupage_movetonextline|harupage_rectangle|harupage_setcharspace|harupage_setcmykfill|harupage_setcmykstroke|harupage_setdash|harupage_setflatness|harupage_setfontandsize|harupage_setgrayfill|harupage_setgraystroke|harupage_setheight|harupage_sethorizontalscaling|harupage_setlinecap|harupage_setlinejoin|harupage_setlinewidth|harupage_setmiterlimit|harupage_setrgbfill|harupage_setrgbstroke|harupage_setrotate|harupage_setsize|harupage_setslideshow|harupage_settextleading|harupage_settextmatrix|harupage_settextrenderingmode|harupage_settextrise|harupage_setwidth|harupage_setwordspace|harupage_showtext|harupage_showtextnextline|harupage_stroke|harupage_textout|harupage_textrect|hasconstant|hash|hash_algos|hash_copy|hash_file|hash_final|hash_hmac|hash_hmac_file|hash_init|hash_update|hash_update_file|hash_update_stream|hasmethod|hasproperty|header|header_register_callback|header_remove|headers_list|headers_sent|hebrev|hebrevc|hex2bin|hexdec|highlight_file|highlight_string|html_entity_decode|htmlentities|htmlspecialchars|htmlspecialchars_decode|http_build_cookie|http_build_query|http_build_str|http_build_url|http_cache_etag|http_cache_last_modified|http_chunked_decode|http_date|http_deflate|http_get|http_get_request_body|http_get_request_body_stream|http_get_request_headers|http_head|http_inflate|http_match_etag|http_match_modified|http_match_request_header|http_negotiate_charset|http_negotiate_content_type|http_negotiate_language|http_parse_cookie|http_parse_headers|http_parse_message|http_parse_params|http_persistent_handles_clean|http_persistent_handles_count|http_persistent_handles_ident|http_post_data|http_post_fields|http_put_data|http_put_file|http_put_stream|http_redirect|http_request|http_request_body_encode|http_request_method_exists|http_request_method_name|http_request_method_register|http_request_method_unregister|http_response_code|http_send_content_disposition|http_send_content_type|http_send_data|http_send_file|http_send_last_modified|http_send_status|http_send_stream|http_support|http_throttle|httpdeflatestream|httpdeflatestream_construct|httpdeflatestream_factory|httpdeflatestream_finish|httpdeflatestream_flush|httpdeflatestream_update|httpinflatestream|httpinflatestream_construct|httpinflatestream_factory|httpinflatestream_finish|httpinflatestream_flush|httpinflatestream_update|httpmessage|httpmessage_addheaders|httpmessage_construct|httpmessage_detach|httpmessage_factory|httpmessage_fromenv|httpmessage_fromstring|httpmessage_getbody|httpmessage_getheader|httpmessage_getheaders|httpmessage_gethttpversion|httpmessage_getparentmessage|httpmessage_getrequestmethod|httpmessage_getrequesturl|httpmessage_getresponsecode|httpmessage_getresponsestatus|httpmessage_gettype|httpmessage_guesscontenttype|httpmessage_prepend|httpmessage_reverse|httpmessage_send|httpmessage_setbody|httpmessage_setheaders|httpmessage_sethttpversion|httpmessage_setrequestmethod|httpmessage_setrequesturl|httpmessage_setresponsecode|httpmessage_setresponsestatus|httpmessage_settype|httpmessage_tomessagetypeobject|httpmessage_tostring|httpquerystring|httpquerystring_construct|httpquerystring_get|httpquerystring_mod|httpquerystring_set|httpquerystring_singleton|httpquerystring_toarray|httpquerystring_tostring|httpquerystring_xlate|httprequest|httprequest_addcookies|httprequest_addheaders|httprequest_addpostfields|httprequest_addpostfile|httprequest_addputdata|httprequest_addquerydata|httprequest_addrawpostdata|httprequest_addssloptions|httprequest_clearhistory|httprequest_construct|httprequest_enablecookies|httprequest_getcontenttype|httprequest_getcookies|httprequest_getheaders|httprequest_gethistory|httprequest_getmethod|httprequest_getoptions|httprequest_getpostfields|httprequest_getpostfiles|httprequest_getputdata|httprequest_getputfile|httprequest_getquerydata|httprequest_getrawpostdata|httprequest_getrawrequestmessage|httprequest_getrawresponsemessage|httprequest_getrequestmessage|httprequest_getresponsebody|httprequest_getresponsecode|httprequest_getresponsecookies|httprequest_getresponsedata|httprequest_getresponseheader|httprequest_getresponseinfo|httprequest_getresponsemessage|httprequest_getresponsestatus|httprequest_getssloptions|httprequest_geturl|httprequest_resetcookies|httprequest_send|httprequest_setcontenttype|httprequest_setcookies|httprequest_setheaders|httprequest_setmethod|httprequest_setoptions|httprequest_setpostfields|httprequest_setpostfiles|httprequest_setputdata|httprequest_setputfile|httprequest_setquerydata|httprequest_setrawpostdata|httprequest_setssloptions|httprequest_seturl|httprequestpool|httprequestpool_attach|httprequestpool_construct|httprequestpool_destruct|httprequestpool_detach|httprequestpool_getattachedrequests|httprequestpool_getfinishedrequests|httprequestpool_reset|httprequestpool_send|httprequestpool_socketperform|httprequestpool_socketselect|httpresponse|httpresponse_capture|httpresponse_getbuffersize|httpresponse_getcache|httpresponse_getcachecontrol|httpresponse_getcontentdisposition|httpresponse_getcontenttype|httpresponse_getdata|httpresponse_getetag|httpresponse_getfile|httpresponse_getgzip|httpresponse_getheader|httpresponse_getlastmodified|httpresponse_getrequestbody|httpresponse_getrequestbodystream|httpresponse_getrequestheaders|httpresponse_getstream|httpresponse_getthrottledelay|httpresponse_guesscontenttype|httpresponse_redirect|httpresponse_send|httpresponse_setbuffersize|httpresponse_setcache|httpresponse_setcachecontrol|httpresponse_setcontentdisposition|httpresponse_setcontenttype|httpresponse_setdata|httpresponse_setetag|httpresponse_setfile|httpresponse_setgzip|httpresponse_setheader|httpresponse_setlastmodified|httpresponse_setstream|httpresponse_setthrottledelay|httpresponse_status|hw_array2objrec|hw_changeobject|hw_children|hw_childrenobj|hw_close|hw_connect|hw_connection_info|hw_cp|hw_deleteobject|hw_docbyanchor|hw_docbyanchorobj|hw_document_attributes|hw_document_bodytag|hw_document_content|hw_document_setcontent|hw_document_size|hw_dummy|hw_edittext|hw_error|hw_errormsg|hw_free_document|hw_getanchors|hw_getanchorsobj|hw_getandlock|hw_getchildcoll|hw_getchildcollobj|hw_getchilddoccoll|hw_getchilddoccollobj|hw_getobject|hw_getobjectbyquery|hw_getobjectbyquerycoll|hw_getobjectbyquerycollobj|hw_getobjectbyqueryobj|hw_getparents|hw_getparentsobj|hw_getrellink|hw_getremote|hw_getremotechildren|hw_getsrcbydestobj|hw_gettext|hw_getusername|hw_identify|hw_incollections|hw_info|hw_inscoll|hw_insdoc|hw_insertanchors|hw_insertdocument|hw_insertobject|hw_mapid|hw_modifyobject|hw_mv|hw_new_document|hw_objrec2array|hw_output_document|hw_pconnect|hw_pipedocument|hw_root|hw_setlinkroot|hw_stat|hw_unlock|hw_who|hwapi_attribute|hwapi_attribute_key|hwapi_attribute_langdepvalue|hwapi_attribute_value|hwapi_attribute_values|hwapi_checkin|hwapi_checkout|hwapi_children|hwapi_content|hwapi_content_mimetype|hwapi_content_read|hwapi_copy|hwapi_dbstat|hwapi_dcstat|hwapi_dstanchors|hwapi_dstofsrcanchor|hwapi_error_count|hwapi_error_reason|hwapi_find|hwapi_ftstat|hwapi_hgcsp|hwapi_hwstat|hwapi_identify|hwapi_info|hwapi_insert|hwapi_insertanchor|hwapi_insertcollection|hwapi_insertdocument|hwapi_link|hwapi_lock|hwapi_move|hwapi_new_content|hwapi_object|hwapi_object_assign|hwapi_object_attreditable|hwapi_object_count|hwapi_object_insert|hwapi_object_new|hwapi_object_remove|hwapi_object_title|hwapi_object_value|hwapi_objectbyanchor|hwapi_parents|hwapi_reason_description|hwapi_reason_type|hwapi_remove|hwapi_replace|hwapi_setcommittedversion|hwapi_srcanchors|hwapi_srcsofdst|hwapi_unlock|hwapi_user|hwapi_userlist|hypot|ibase_add_user|ibase_affected_rows|ibase_backup|ibase_blob_add|ibase_blob_cancel|ibase_blob_close|ibase_blob_create|ibase_blob_echo|ibase_blob_get|ibase_blob_import|ibase_blob_info|ibase_blob_open|ibase_close|ibase_commit|ibase_commit_ret|ibase_connect|ibase_db_info|ibase_delete_user|ibase_drop_db|ibase_errcode|ibase_errmsg|ibase_execute|ibase_fetch_assoc|ibase_fetch_object|ibase_fetch_row|ibase_field_info|ibase_free_event_handler|ibase_free_query|ibase_free_result|ibase_gen_id|ibase_maintain_db|ibase_modify_user|ibase_name_result|ibase_num_fields|ibase_num_params|ibase_param_info|ibase_pconnect|ibase_prepare|ibase_query|ibase_restore|ibase_rollback|ibase_rollback_ret|ibase_server_info|ibase_service_attach|ibase_service_detach|ibase_set_event_handler|ibase_timefmt|ibase_trans|ibase_wait_event|iconv|iconv_get_encoding|iconv_mime_decode|iconv_mime_decode_headers|iconv_mime_encode|iconv_set_encoding|iconv_strlen|iconv_strpos|iconv_strrpos|iconv_substr|id3_get_frame_long_name|id3_get_frame_short_name|id3_get_genre_id|id3_get_genre_list|id3_get_genre_name|id3_get_tag|id3_get_version|id3_remove_tag|id3_set_tag|id3v2attachedpictureframe|id3v2frame|id3v2tag|idate|idn_to_ascii|idn_to_unicode|idn_to_utf8|ifx_affected_rows|ifx_blobinfile_mode|ifx_byteasvarchar|ifx_close|ifx_connect|ifx_copy_blob|ifx_create_blob|ifx_create_char|ifx_do|ifx_error|ifx_errormsg|ifx_fetch_row|ifx_fieldproperties|ifx_fieldtypes|ifx_free_blob|ifx_free_char|ifx_free_result|ifx_get_blob|ifx_get_char|ifx_getsqlca|ifx_htmltbl_result|ifx_nullformat|ifx_num_fields|ifx_num_rows|ifx_pconnect|ifx_prepare|ifx_query|ifx_textasvarchar|ifx_update_blob|ifx_update_char|ifxus_close_slob|ifxus_create_slob|ifxus_free_slob|ifxus_open_slob|ifxus_read_slob|ifxus_seek_slob|ifxus_tell_slob|ifxus_write_slob|ignore_user_abort|iis_add_server|iis_get_dir_security|iis_get_script_map|iis_get_server_by_comment|iis_get_server_by_path|iis_get_server_rights|iis_get_service_state|iis_remove_server|iis_set_app_settings|iis_set_dir_security|iis_set_script_map|iis_set_server_rights|iis_start_server|iis_start_service|iis_stop_server|iis_stop_service|image2wbmp|image_type_to_extension|image_type_to_mime_type|imagealphablending|imageantialias|imagearc|imagechar|imagecharup|imagecolorallocate|imagecolorallocatealpha|imagecolorat|imagecolorclosest|imagecolorclosestalpha|imagecolorclosesthwb|imagecolordeallocate|imagecolorexact|imagecolorexactalpha|imagecolormatch|imagecolorresolve|imagecolorresolvealpha|imagecolorset|imagecolorsforindex|imagecolorstotal|imagecolortransparent|imageconvolution|imagecopy|imagecopymerge|imagecopymergegray|imagecopyresampled|imagecopyresized|imagecreate|imagecreatefromgd|imagecreatefromgd2|imagecreatefromgd2part|imagecreatefromgif|imagecreatefromjpeg|imagecreatefrompng|imagecreatefromstring|imagecreatefromwbmp|imagecreatefromxbm|imagecreatefromxpm|imagecreatetruecolor|imagedashedline|imagedestroy|imageellipse|imagefill|imagefilledarc|imagefilledellipse|imagefilledpolygon|imagefilledrectangle|imagefilltoborder|imagefilter|imagefontheight|imagefontwidth|imageftbbox|imagefttext|imagegammacorrect|imagegd|imagegd2|imagegif|imagegrabscreen|imagegrabwindow|imageinterlace|imageistruecolor|imagejpeg|imagelayereffect|imageline|imageloadfont|imagepalettecopy|imagepng|imagepolygon|imagepsbbox|imagepsencodefont|imagepsextendfont|imagepsfreefont|imagepsloadfont|imagepsslantfont|imagepstext|imagerectangle|imagerotate|imagesavealpha|imagesetbrush|imagesetpixel|imagesetstyle|imagesetthickness|imagesettile|imagestring|imagestringup|imagesx|imagesy|imagetruecolortopalette|imagettfbbox|imagettftext|imagetypes|imagewbmp|imagexbm|imagick|imagick_adaptiveblurimage|imagick_adaptiveresizeimage|imagick_adaptivesharpenimage|imagick_adaptivethresholdimage|imagick_addimage|imagick_addnoiseimage|imagick_affinetransformimage|imagick_animateimages|imagick_annotateimage|imagick_appendimages|imagick_averageimages|imagick_blackthresholdimage|imagick_blurimage|imagick_borderimage|imagick_charcoalimage|imagick_chopimage|imagick_clear|imagick_clipimage|imagick_clippathimage|imagick_clone|imagick_clutimage|imagick_coalesceimages|imagick_colorfloodfillimage|imagick_colorizeimage|imagick_combineimages|imagick_commentimage|imagick_compareimagechannels|imagick_compareimagelayers|imagick_compareimages|imagick_compositeimage|imagick_construct|imagick_contrastimage|imagick_contraststretchimage|imagick_convolveimage|imagick_cropimage|imagick_cropthumbnailimage|imagick_current|imagick_cyclecolormapimage|imagick_decipherimage|imagick_deconstructimages|imagick_deleteimageartifact|imagick_despeckleimage|imagick_destroy|imagick_displayimage|imagick_displayimages|imagick_distortimage|imagick_drawimage|imagick_edgeimage|imagick_embossimage|imagick_encipherimage|imagick_enhanceimage|imagick_equalizeimage|imagick_evaluateimage|imagick_extentimage|imagick_flattenimages|imagick_flipimage|imagick_floodfillpaintimage|imagick_flopimage|imagick_frameimage|imagick_fximage|imagick_gammaimage|imagick_gaussianblurimage|imagick_getcolorspace|imagick_getcompression|imagick_getcompressionquality|imagick_getcopyright|imagick_getfilename|imagick_getfont|imagick_getformat|imagick_getgravity|imagick_gethomeurl|imagick_getimage|imagick_getimagealphachannel|imagick_getimageartifact|imagick_getimagebackgroundcolor|imagick_getimageblob|imagick_getimageblueprimary|imagick_getimagebordercolor|imagick_getimagechanneldepth|imagick_getimagechanneldistortion|imagick_getimagechanneldistortions|imagick_getimagechannelextrema|imagick_getimagechannelmean|imagick_getimagechannelrange|imagick_getimagechannelstatistics|imagick_getimageclipmask|imagick_getimagecolormapcolor|imagick_getimagecolors|imagick_getimagecolorspace|imagick_getimagecompose|imagick_getimagecompression|imagick_getimagecompressionquality|imagick_getimagedelay|imagick_getimagedepth|imagick_getimagedispose|imagick_getimagedistortion|imagick_getimageextrema|imagick_getimagefilename|imagick_getimageformat|imagick_getimagegamma|imagick_getimagegeometry|imagick_getimagegravity|imagick_getimagegreenprimary|imagick_getimageheight|imagick_getimagehistogram|imagick_getimageindex|imagick_getimageinterlacescheme|imagick_getimageinterpolatemethod|imagick_getimageiterations|imagick_getimagelength|imagick_getimagemagicklicense|imagick_getimagematte|imagick_getimagemattecolor|imagick_getimageorientation|imagick_getimagepage|imagick_getimagepixelcolor|imagick_getimageprofile|imagick_getimageprofiles|imagick_getimageproperties|imagick_getimageproperty|imagick_getimageredprimary|imagick_getimageregion|imagick_getimagerenderingintent|imagick_getimageresolution|imagick_getimagesblob|imagick_getimagescene|imagick_getimagesignature|imagick_getimagesize|imagick_getimagetickspersecond|imagick_getimagetotalinkdensity|imagick_getimagetype|imagick_getimageunits|imagick_getimagevirtualpixelmethod|imagick_getimagewhitepoint|imagick_getimagewidth|imagick_getinterlacescheme|imagick_getiteratorindex|imagick_getnumberimages|imagick_getoption|imagick_getpackagename|imagick_getpage|imagick_getpixeliterator|imagick_getpixelregioniterator|imagick_getpointsize|imagick_getquantumdepth|imagick_getquantumrange|imagick_getreleasedate|imagick_getresource|imagick_getresourcelimit|imagick_getsamplingfactors|imagick_getsize|imagick_getsizeoffset|imagick_getversion|imagick_hasnextimage|imagick_haspreviousimage|imagick_identifyimage|imagick_implodeimage|imagick_labelimage|imagick_levelimage|imagick_linearstretchimage|imagick_liquidrescaleimage|imagick_magnifyimage|imagick_mapimage|imagick_mattefloodfillimage|imagick_medianfilterimage|imagick_mergeimagelayers|imagick_minifyimage|imagick_modulateimage|imagick_montageimage|imagick_morphimages|imagick_mosaicimages|imagick_motionblurimage|imagick_negateimage|imagick_newimage|imagick_newpseudoimage|imagick_nextimage|imagick_normalizeimage|imagick_oilpaintimage|imagick_opaquepaintimage|imagick_optimizeimagelayers|imagick_orderedposterizeimage|imagick_paintfloodfillimage|imagick_paintopaqueimage|imagick_painttransparentimage|imagick_pingimage|imagick_pingimageblob|imagick_pingimagefile|imagick_polaroidimage|imagick_posterizeimage|imagick_previewimages|imagick_previousimage|imagick_profileimage|imagick_quantizeimage|imagick_quantizeimages|imagick_queryfontmetrics|imagick_queryfonts|imagick_queryformats|imagick_radialblurimage|imagick_raiseimage|imagick_randomthresholdimage|imagick_readimage|imagick_readimageblob|imagick_readimagefile|imagick_recolorimage|imagick_reducenoiseimage|imagick_removeimage|imagick_removeimageprofile|imagick_render|imagick_resampleimage|imagick_resetimagepage|imagick_resizeimage|imagick_rollimage|imagick_rotateimage|imagick_roundcorners|imagick_sampleimage|imagick_scaleimage|imagick_separateimagechannel|imagick_sepiatoneimage|imagick_setbackgroundcolor|imagick_setcolorspace|imagick_setcompression|imagick_setcompressionquality|imagick_setfilename|imagick_setfirstiterator|imagick_setfont|imagick_setformat|imagick_setgravity|imagick_setimage|imagick_setimagealphachannel|imagick_setimageartifact|imagick_setimagebackgroundcolor|imagick_setimagebias|imagick_setimageblueprimary|imagick_setimagebordercolor|imagick_setimagechanneldepth|imagick_setimageclipmask|imagick_setimagecolormapcolor|imagick_setimagecolorspace|imagick_setimagecompose|imagick_setimagecompression|imagick_setimagecompressionquality|imagick_setimagedelay|imagick_setimagedepth|imagick_setimagedispose|imagick_setimageextent|imagick_setimagefilename|imagick_setimageformat|imagick_setimagegamma|imagick_setimagegravity|imagick_setimagegreenprimary|imagick_setimageindex|imagick_setimageinterlacescheme|imagick_setimageinterpolatemethod|imagick_setimageiterations|imagick_setimagematte|imagick_setimagemattecolor|imagick_setimageopacity|imagick_setimageorientation|imagick_setimagepage|imagick_setimageprofile|imagick_setimageproperty|imagick_setimageredprimary|imagick_setimagerenderingintent|imagick_setimageresolution|imagick_setimagescene|imagick_setimagetickspersecond|imagick_setimagetype|imagick_setimageunits|imagick_setimagevirtualpixelmethod|imagick_setimagewhitepoint|imagick_setinterlacescheme|imagick_setiteratorindex|imagick_setlastiterator|imagick_setoption|imagick_setpage|imagick_setpointsize|imagick_setresolution|imagick_setresourcelimit|imagick_setsamplingfactors|imagick_setsize|imagick_setsizeoffset|imagick_settype|imagick_shadeimage|imagick_shadowimage|imagick_sharpenimage|imagick_shaveimage|imagick_shearimage|imagick_sigmoidalcontrastimage|imagick_sketchimage|imagick_solarizeimage|imagick_spliceimage|imagick_spreadimage|imagick_steganoimage|imagick_stereoimage|imagick_stripimage|imagick_swirlimage|imagick_textureimage|imagick_thresholdimage|imagick_thumbnailimage|imagick_tintimage|imagick_transformimage|imagick_transparentpaintimage|imagick_transposeimage|imagick_transverseimage|imagick_trimimage|imagick_uniqueimagecolors|imagick_unsharpmaskimage|imagick_valid|imagick_vignetteimage|imagick_waveimage|imagick_whitethresholdimage|imagick_writeimage|imagick_writeimagefile|imagick_writeimages|imagick_writeimagesfile|imagickdraw|imagickdraw_affine|imagickdraw_annotation|imagickdraw_arc|imagickdraw_bezier|imagickdraw_circle|imagickdraw_clear|imagickdraw_clone|imagickdraw_color|imagickdraw_comment|imagickdraw_composite|imagickdraw_construct|imagickdraw_destroy|imagickdraw_ellipse|imagickdraw_getclippath|imagickdraw_getcliprule|imagickdraw_getclipunits|imagickdraw_getfillcolor|imagickdraw_getfillopacity|imagickdraw_getfillrule|imagickdraw_getfont|imagickdraw_getfontfamily|imagickdraw_getfontsize|imagickdraw_getfontstyle|imagickdraw_getfontweight|imagickdraw_getgravity|imagickdraw_getstrokeantialias|imagickdraw_getstrokecolor|imagickdraw_getstrokedasharray|imagickdraw_getstrokedashoffset|imagickdraw_getstrokelinecap|imagickdraw_getstrokelinejoin|imagickdraw_getstrokemiterlimit|imagickdraw_getstrokeopacity|imagickdraw_getstrokewidth|imagickdraw_gettextalignment|imagickdraw_gettextantialias|imagickdraw_gettextdecoration|imagickdraw_gettextencoding|imagickdraw_gettextundercolor|imagickdraw_getvectorgraphics|imagickdraw_line|imagickdraw_matte|imagickdraw_pathclose|imagickdraw_pathcurvetoabsolute|imagickdraw_pathcurvetoquadraticbezierabsolute|imagickdraw_pathcurvetoquadraticbezierrelative|imagickdraw_pathcurvetoquadraticbeziersmoothabsolute|imagickdraw_pathcurvetoquadraticbeziersmoothrelative|imagickdraw_pathcurvetorelative|imagickdraw_pathcurvetosmoothabsolute|imagickdraw_pathcurvetosmoothrelative|imagickdraw_pathellipticarcabsolute|imagickdraw_pathellipticarcrelative|imagickdraw_pathfinish|imagickdraw_pathlinetoabsolute|imagickdraw_pathlinetohorizontalabsolute|imagickdraw_pathlinetohorizontalrelative|imagickdraw_pathlinetorelative|imagickdraw_pathlinetoverticalabsolute|imagickdraw_pathlinetoverticalrelative|imagickdraw_pathmovetoabsolute|imagickdraw_pathmovetorelative|imagickdraw_pathstart|imagickdraw_point|imagickdraw_polygon|imagickdraw_polyline|imagickdraw_pop|imagickdraw_popclippath|imagickdraw_popdefs|imagickdraw_poppattern|imagickdraw_push|imagickdraw_pushclippath|imagickdraw_pushdefs|imagickdraw_pushpattern|imagickdraw_rectangle|imagickdraw_render|imagickdraw_rotate|imagickdraw_roundrectangle|imagickdraw_scale|imagickdraw_setclippath|imagickdraw_setcliprule|imagickdraw_setclipunits|imagickdraw_setfillalpha|imagickdraw_setfillcolor|imagickdraw_setfillopacity|imagickdraw_setfillpatternurl|imagickdraw_setfillrule|imagickdraw_setfont|imagickdraw_setfontfamily|imagickdraw_setfontsize|imagickdraw_setfontstretch|imagickdraw_setfontstyle|imagickdraw_setfontweight|imagickdraw_setgravity|imagickdraw_setstrokealpha|imagickdraw_setstrokeantialias|imagickdraw_setstrokecolor|imagickdraw_setstrokedasharray|imagickdraw_setstrokedashoffset|imagickdraw_setstrokelinecap|imagickdraw_setstrokelinejoin|imagickdraw_setstrokemiterlimit|imagickdraw_setstrokeopacity|imagickdraw_setstrokepatternurl|imagickdraw_setstrokewidth|imagickdraw_settextalignment|imagickdraw_settextantialias|imagickdraw_settextdecoration|imagickdraw_settextencoding|imagickdraw_settextundercolor|imagickdraw_setvectorgraphics|imagickdraw_setviewbox|imagickdraw_skewx|imagickdraw_skewy|imagickdraw_translate|imagickpixel|imagickpixel_clear|imagickpixel_construct|imagickpixel_destroy|imagickpixel_getcolor|imagickpixel_getcolorasstring|imagickpixel_getcolorcount|imagickpixel_getcolorvalue|imagickpixel_gethsl|imagickpixel_issimilar|imagickpixel_setcolor|imagickpixel_setcolorvalue|imagickpixel_sethsl|imagickpixeliterator|imagickpixeliterator_clear|imagickpixeliterator_construct|imagickpixeliterator_destroy|imagickpixeliterator_getcurrentiteratorrow|imagickpixeliterator_getiteratorrow|imagickpixeliterator_getnextiteratorrow|imagickpixeliterator_getpreviousiteratorrow|imagickpixeliterator_newpixeliterator|imagickpixeliterator_newpixelregioniterator|imagickpixeliterator_resetiterator|imagickpixeliterator_setiteratorfirstrow|imagickpixeliterator_setiteratorlastrow|imagickpixeliterator_setiteratorrow|imagickpixeliterator_synciterator|imap_8bit|imap_alerts|imap_append|imap_base64|imap_binary|imap_body|imap_bodystruct|imap_check|imap_clearflag_full|imap_close|imap_create|imap_createmailbox|imap_delete|imap_deletemailbox|imap_errors|imap_expunge|imap_fetch_overview|imap_fetchbody|imap_fetchheader|imap_fetchmime|imap_fetchstructure|imap_fetchtext|imap_gc|imap_get_quota|imap_get_quotaroot|imap_getacl|imap_getmailboxes|imap_getsubscribed|imap_header|imap_headerinfo|imap_headers|imap_last_error|imap_list|imap_listmailbox|imap_listscan|imap_listsubscribed|imap_lsub|imap_mail|imap_mail_compose|imap_mail_copy|imap_mail_move|imap_mailboxmsginfo|imap_mime_header_decode|imap_msgno|imap_num_msg|imap_num_recent|imap_open|imap_ping|imap_qprint|imap_rename|imap_renamemailbox|imap_reopen|imap_rfc822_parse_adrlist|imap_rfc822_parse_headers|imap_rfc822_write_address|imap_savebody|imap_scan|imap_scanmailbox|imap_search|imap_set_quota|imap_setacl|imap_setflag_full|imap_sort|imap_status|imap_subscribe|imap_thread|imap_timeout|imap_uid|imap_undelete|imap_unsubscribe|imap_utf7_decode|imap_utf7_encode|imap_utf8|implementsinterface|implode|import_request_variables|in_array|include|include_once|inclued_get_data|inet_ntop|inet_pton|infiniteiterator|ingres_autocommit|ingres_autocommit_state|ingres_charset|ingres_close|ingres_commit|ingres_connect|ingres_cursor|ingres_errno|ingres_error|ingres_errsqlstate|ingres_escape_string|ingres_execute|ingres_fetch_array|ingres_fetch_assoc|ingres_fetch_object|ingres_fetch_proc_return|ingres_fetch_row|ingres_field_length|ingres_field_name|ingres_field_nullable|ingres_field_precision|ingres_field_scale|ingres_field_type|ingres_free_result|ingres_next_error|ingres_num_fields|ingres_num_rows|ingres_pconnect|ingres_prepare|ingres_query|ingres_result_seek|ingres_rollback|ingres_set_environment|ingres_unbuffered_query|ini_alter|ini_get|ini_get_all|ini_restore|ini_set|innamespace|inotify_add_watch|inotify_init|inotify_queue_len|inotify_read|inotify_rm_watch|interface_exists|intl_error_name|intl_get_error_code|intl_get_error_message|intl_is_failure|intldateformatter|intval|invalidargumentexception|invoke|invokeargs|ip2long|iptcembed|iptcparse|is_a|is_array|is_bool|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_uploaded_file|is_writable|is_writeable|isabstract|iscloneable|isdisabled|isfinal|isinstance|isinstantiable|isinterface|isinternal|isiterateable|isset|issubclassof|isuserdefined|iterator|iterator_apply|iterator_count|iterator_to_array|iteratoraggregate|iteratoriterator|java_last_exception_clear|java_last_exception_get|jddayofweek|jdmonthname|jdtofrench|jdtogregorian|jdtojewish|jdtojulian|jdtounix|jewishtojd|join|jpeg2wbmp|json_decode|json_encode|json_last_error|jsonserializable|judy|judy_type|judy_version|juliantojd|kadm5_chpass_principal|kadm5_create_principal|kadm5_delete_principal|kadm5_destroy|kadm5_flush|kadm5_get_policies|kadm5_get_principal|kadm5_get_principals|kadm5_init_with_password|kadm5_modify_principal|key|krsort|ksort|lcfirst|lcg_value|lchgrp|lchown|ldap_8859_to_t61|ldap_add|ldap_bind|ldap_close|ldap_compare|ldap_connect|ldap_count_entries|ldap_delete|ldap_dn2ufn|ldap_err2str|ldap_errno|ldap_error|ldap_explode_dn|ldap_first_attribute|ldap_first_entry|ldap_first_reference|ldap_free_result|ldap_get_attributes|ldap_get_dn|ldap_get_entries|ldap_get_option|ldap_get_values|ldap_get_values_len|ldap_list|ldap_mod_add|ldap_mod_del|ldap_mod_replace|ldap_modify|ldap_next_attribute|ldap_next_entry|ldap_next_reference|ldap_parse_reference|ldap_parse_result|ldap_read|ldap_rename|ldap_sasl_bind|ldap_search|ldap_set_option|ldap_set_rebind_proc|ldap_sort|ldap_start_tls|ldap_t61_to_8859|ldap_unbind|lengthexception|levenshtein|libxml_clear_errors|libxml_disable_entity_loader|libxml_get_errors|libxml_get_last_error|libxml_set_streams_context|libxml_use_internal_errors|libxmlerror|limititerator|link|linkinfo|list|locale|localeconv|localtime|log|log10|log1p|logicexception|long2ip|lstat|ltrim|lzf_compress|lzf_decompress|lzf_optimized_for|m_checkstatus|m_completeauthorizations|m_connect|m_connectionerror|m_deletetrans|m_destroyconn|m_destroyengine|m_getcell|m_getcellbynum|m_getcommadelimited|m_getheader|m_initconn|m_initengine|m_iscommadelimited|m_maxconntimeout|m_monitor|m_numcolumns|m_numrows|m_parsecommadelimited|m_responsekeys|m_responseparam|m_returnstatus|m_setblocking|m_setdropfile|m_setip|m_setssl|m_setssl_cafile|m_setssl_files|m_settimeout|m_sslcert_gen_hash|m_transactionssent|m_transinqueue|m_transkeyval|m_transnew|m_transsend|m_uwait|m_validateidentifier|m_verifyconnection|m_verifysslcert|magic_quotes_runtime|mail|mailparse_determine_best_xfer_encoding|mailparse_msg_create|mailparse_msg_extract_part|mailparse_msg_extract_part_file|mailparse_msg_extract_whole_part_file|mailparse_msg_free|mailparse_msg_get_part|mailparse_msg_get_part_data|mailparse_msg_get_structure|mailparse_msg_parse|mailparse_msg_parse_file|mailparse_rfc822_parse_addresses|mailparse_stream_encode|mailparse_uudecode_all|main|max|maxdb_affected_rows|maxdb_autocommit|maxdb_bind_param|maxdb_bind_result|maxdb_change_user|maxdb_character_set_name|maxdb_client_encoding|maxdb_close|maxdb_close_long_data|maxdb_commit|maxdb_connect|maxdb_connect_errno|maxdb_connect_error|maxdb_data_seek|maxdb_debug|maxdb_disable_reads_from_master|maxdb_disable_rpl_parse|maxdb_dump_debug_info|maxdb_embedded_connect|maxdb_enable_reads_from_master|maxdb_enable_rpl_parse|maxdb_errno|maxdb_error|maxdb_escape_string|maxdb_execute|maxdb_fetch|maxdb_fetch_array|maxdb_fetch_assoc|maxdb_fetch_field|maxdb_fetch_field_direct|maxdb_fetch_fields|maxdb_fetch_lengths|maxdb_fetch_object|maxdb_fetch_row|maxdb_field_count|maxdb_field_seek|maxdb_field_tell|maxdb_free_result|maxdb_get_client_info|maxdb_get_client_version|maxdb_get_host_info|maxdb_get_metadata|maxdb_get_proto_info|maxdb_get_server_info|maxdb_get_server_version|maxdb_info|maxdb_init|maxdb_insert_id|maxdb_kill|maxdb_master_query|maxdb_more_results|maxdb_multi_query|maxdb_next_result|maxdb_num_fields|maxdb_num_rows|maxdb_options|maxdb_param_count|maxdb_ping|maxdb_prepare|maxdb_query|maxdb_real_connect|maxdb_real_escape_string|maxdb_real_query|maxdb_report|maxdb_rollback|maxdb_rpl_parse_enabled|maxdb_rpl_probe|maxdb_rpl_query_type|maxdb_select_db|maxdb_send_long_data|maxdb_send_query|maxdb_server_end|maxdb_server_init|maxdb_set_opt|maxdb_sqlstate|maxdb_ssl_set|maxdb_stat|maxdb_stmt_affected_rows|maxdb_stmt_bind_param|maxdb_stmt_bind_result|maxdb_stmt_close|maxdb_stmt_close_long_data|maxdb_stmt_data_seek|maxdb_stmt_errno|maxdb_stmt_error|maxdb_stmt_execute|maxdb_stmt_fetch|maxdb_stmt_free_result|maxdb_stmt_init|maxdb_stmt_num_rows|maxdb_stmt_param_count|maxdb_stmt_prepare|maxdb_stmt_reset|maxdb_stmt_result_metadata|maxdb_stmt_send_long_data|maxdb_stmt_sqlstate|maxdb_stmt_store_result|maxdb_store_result|maxdb_thread_id|maxdb_thread_safe|maxdb_use_result|maxdb_warning_count|mb_check_encoding|mb_convert_case|mb_convert_encoding|mb_convert_kana|mb_convert_variables|mb_decode_mimeheader|mb_decode_numericentity|mb_detect_encoding|mb_detect_order|mb_encode_mimeheader|mb_encode_numericentity|mb_encoding_aliases|mb_ereg|mb_ereg_match|mb_ereg_replace|mb_ereg_search|mb_ereg_search_getpos|mb_ereg_search_getregs|mb_ereg_search_init|mb_ereg_search_pos|mb_ereg_search_regs|mb_ereg_search_setpos|mb_eregi|mb_eregi_replace|mb_get_info|mb_http_input|mb_http_output|mb_internal_encoding|mb_language|mb_list_encodings|mb_output_handler|mb_parse_str|mb_preferred_mime_name|mb_regex_encoding|mb_regex_set_options|mb_send_mail|mb_split|mb_strcut|mb_strimwidth|mb_stripos|mb_stristr|mb_strlen|mb_strpos|mb_strrchr|mb_strrichr|mb_strripos|mb_strrpos|mb_strstr|mb_strtolower|mb_strtoupper|mb_strwidth|mb_substitute_character|mb_substr|mb_substr_count|mcrypt_cbc|mcrypt_cfb|mcrypt_create_iv|mcrypt_decrypt|mcrypt_ecb|mcrypt_enc_get_algorithms_name|mcrypt_enc_get_block_size|mcrypt_enc_get_iv_size|mcrypt_enc_get_key_size|mcrypt_enc_get_modes_name|mcrypt_enc_get_supported_key_sizes|mcrypt_enc_is_block_algorithm|mcrypt_enc_is_block_algorithm_mode|mcrypt_enc_is_block_mode|mcrypt_enc_self_test|mcrypt_encrypt|mcrypt_generic|mcrypt_generic_deinit|mcrypt_generic_end|mcrypt_generic_init|mcrypt_get_block_size|mcrypt_get_cipher_name|mcrypt_get_iv_size|mcrypt_get_key_size|mcrypt_list_algorithms|mcrypt_list_modes|mcrypt_module_close|mcrypt_module_get_algo_block_size|mcrypt_module_get_algo_key_size|mcrypt_module_get_supported_key_sizes|mcrypt_module_is_block_algorithm|mcrypt_module_is_block_algorithm_mode|mcrypt_module_is_block_mode|mcrypt_module_open|mcrypt_module_self_test|mcrypt_ofb|md5|md5_file|mdecrypt_generic|memcache|memcache_debug|memcached|memory_get_peak_usage|memory_get_usage|messageformatter|metaphone|method_exists|mhash|mhash_count|mhash_get_block_size|mhash_get_hash_name|mhash_keygen_s2k|microtime|mime_content_type|min|ming_keypress|ming_setcubicthreshold|ming_setscale|ming_setswfcompression|ming_useconstants|ming_useswfversion|mkdir|mktime|money_format|mongo|mongobindata|mongocode|mongocollection|mongoconnectionexception|mongocursor|mongocursorexception|mongocursortimeoutexception|mongodate|mongodb|mongodbref|mongoexception|mongogridfs|mongogridfscursor|mongogridfsexception|mongogridfsfile|mongoid|mongoint32|mongoint64|mongomaxkey|mongominkey|mongoregex|mongotimestamp|move_uploaded_file|mpegfile|mqseries_back|mqseries_begin|mqseries_close|mqseries_cmit|mqseries_conn|mqseries_connx|mqseries_disc|mqseries_get|mqseries_inq|mqseries_open|mqseries_put|mqseries_put1|mqseries_set|mqseries_strerror|msession_connect|msession_count|msession_create|msession_destroy|msession_disconnect|msession_find|msession_get|msession_get_array|msession_get_data|msession_inc|msession_list|msession_listvar|msession_lock|msession_plugin|msession_randstr|msession_set|msession_set_array|msession_set_data|msession_timeout|msession_uniq|msession_unlock|msg_get_queue|msg_queue_exists|msg_receive|msg_remove_queue|msg_send|msg_set_queue|msg_stat_queue|msql|msql_affected_rows|msql_close|msql_connect|msql_create_db|msql_createdb|msql_data_seek|msql_db_query|msql_dbname|msql_drop_db|msql_error|msql_fetch_array|msql_fetch_field|msql_fetch_object|msql_fetch_row|msql_field_flags|msql_field_len|msql_field_name|msql_field_seek|msql_field_table|msql_field_type|msql_fieldflags|msql_fieldlen|msql_fieldname|msql_fieldtable|msql_fieldtype|msql_free_result|msql_list_dbs|msql_list_fields|msql_list_tables|msql_num_fields|msql_num_rows|msql_numfields|msql_numrows|msql_pconnect|msql_query|msql_regcase|msql_result|msql_select_db|msql_tablename|mssql_bind|mssql_close|mssql_connect|mssql_data_seek|mssql_execute|mssql_fetch_array|mssql_fetch_assoc|mssql_fetch_batch|mssql_fetch_field|mssql_fetch_object|mssql_fetch_row|mssql_field_length|mssql_field_name|mssql_field_seek|mssql_field_type|mssql_free_result|mssql_free_statement|mssql_get_last_message|mssql_guid_string|mssql_init|mssql_min_error_severity|mssql_min_message_severity|mssql_next_result|mssql_num_fields|mssql_num_rows|mssql_pconnect|mssql_query|mssql_result|mssql_rows_affected|mssql_select_db|mt_getrandmax|mt_rand|mt_srand|multipleiterator|mysql_affected_rows|mysql_client_encoding|mysql_close|mysql_connect|mysql_create_db|mysql_data_seek|mysql_db_name|mysql_db_query|mysql_drop_db|mysql_errno|mysql_error|mysql_escape_string|mysql_fetch_array|mysql_fetch_assoc|mysql_fetch_field|mysql_fetch_lengths|mysql_fetch_object|mysql_fetch_row|mysql_field_flags|mysql_field_len|mysql_field_name|mysql_field_seek|mysql_field_table|mysql_field_type|mysql_free_result|mysql_get_client_info|mysql_get_host_info|mysql_get_proto_info|mysql_get_server_info|mysql_info|mysql_insert_id|mysql_list_dbs|mysql_list_fields|mysql_list_processes|mysql_list_tables|mysql_num_fields|mysql_num_rows|mysql_pconnect|mysql_ping|mysql_query|mysql_real_escape_string|mysql_result|mysql_select_db|mysql_set_charset|mysql_stat|mysql_tablename|mysql_thread_id|mysql_unbuffered_query|mysqli|mysqli_bind_param|mysqli_bind_result|mysqli_client_encoding|mysqli_connect|mysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_driver|mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_escape_string|mysqli_execute|mysqli_fetch|mysqli_get_metadata|mysqli_master_query|mysqli_param_count|mysqli_report|mysqli_result|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|mysqli_send_long_data|mysqli_send_query|mysqli_set_opt|mysqli_slave_query|mysqli_stmt|mysqli_warning|mysqlnd_ms_get_stats|mysqlnd_ms_query_is_select|mysqlnd_ms_set_user_pick_server|mysqlnd_qc_change_handler|mysqlnd_qc_clear_cache|mysqlnd_qc_get_cache_info|mysqlnd_qc_get_core_stats|mysqlnd_qc_get_handler|mysqlnd_qc_get_query_trace_log|mysqlnd_qc_set_user_handlers|natcasesort|natsort|ncurses_addch|ncurses_addchnstr|ncurses_addchstr|ncurses_addnstr|ncurses_addstr|ncurses_assume_default_colors|ncurses_attroff|ncurses_attron|ncurses_attrset|ncurses_baudrate|ncurses_beep|ncurses_bkgd|ncurses_bkgdset|ncurses_border|ncurses_bottom_panel|ncurses_can_change_color|ncurses_cbreak|ncurses_clear|ncurses_clrtobot|ncurses_clrtoeol|ncurses_color_content|ncurses_color_set|ncurses_curs_set|ncurses_def_prog_mode|ncurses_def_shell_mode|ncurses_define_key|ncurses_del_panel|ncurses_delay_output|ncurses_delch|ncurses_deleteln|ncurses_delwin|ncurses_doupdate|ncurses_echo|ncurses_echochar|ncurses_end|ncurses_erase|ncurses_erasechar|ncurses_filter|ncurses_flash|ncurses_flushinp|ncurses_getch|ncurses_getmaxyx|ncurses_getmouse|ncurses_getyx|ncurses_halfdelay|ncurses_has_colors|ncurses_has_ic|ncurses_has_il|ncurses_has_key|ncurses_hide_panel|ncurses_hline|ncurses_inch|ncurses_init|ncurses_init_color|ncurses_init_pair|ncurses_insch|ncurses_insdelln|ncurses_insertln|ncurses_insstr|ncurses_instr|ncurses_isendwin|ncurses_keyok|ncurses_keypad|ncurses_killchar|ncurses_longname|ncurses_meta|ncurses_mouse_trafo|ncurses_mouseinterval|ncurses_mousemask|ncurses_move|ncurses_move_panel|ncurses_mvaddch|ncurses_mvaddchnstr|ncurses_mvaddchstr|ncurses_mvaddnstr|ncurses_mvaddstr|ncurses_mvcur|ncurses_mvdelch|ncurses_mvgetch|ncurses_mvhline|ncurses_mvinch|ncurses_mvvline|ncurses_mvwaddstr|ncurses_napms|ncurses_new_panel|ncurses_newpad|ncurses_newwin|ncurses_nl|ncurses_nocbreak|ncurses_noecho|ncurses_nonl|ncurses_noqiflush|ncurses_noraw|ncurses_pair_content|ncurses_panel_above|ncurses_panel_below|ncurses_panel_window|ncurses_pnoutrefresh|ncurses_prefresh|ncurses_putp|ncurses_qiflush|ncurses_raw|ncurses_refresh|ncurses_replace_panel|ncurses_reset_prog_mode|ncurses_reset_shell_mode|ncurses_resetty|ncurses_savetty|ncurses_scr_dump|ncurses_scr_init|ncurses_scr_restore|ncurses_scr_set|ncurses_scrl|ncurses_show_panel|ncurses_slk_attr|ncurses_slk_attroff|ncurses_slk_attron|ncurses_slk_attrset|ncurses_slk_clear|ncurses_slk_color|ncurses_slk_init|ncurses_slk_noutrefresh|ncurses_slk_refresh|ncurses_slk_restore|ncurses_slk_set|ncurses_slk_touch|ncurses_standend|ncurses_standout|ncurses_start_color|ncurses_termattrs|ncurses_termname|ncurses_timeout|ncurses_top_panel|ncurses_typeahead|ncurses_ungetch|ncurses_ungetmouse|ncurses_update_panels|ncurses_use_default_colors|ncurses_use_env|ncurses_use_extended_names|ncurses_vidattr|ncurses_vline|ncurses_waddch|ncurses_waddstr|ncurses_wattroff|ncurses_wattron|ncurses_wattrset|ncurses_wborder|ncurses_wclear|ncurses_wcolor_set|ncurses_werase|ncurses_wgetch|ncurses_whline|ncurses_wmouse_trafo|ncurses_wmove|ncurses_wnoutrefresh|ncurses_wrefresh|ncurses_wstandend|ncurses_wstandout|ncurses_wvline|newinstance|newinstanceargs|newt_bell|newt_button|newt_button_bar|newt_centered_window|newt_checkbox|newt_checkbox_get_value|newt_checkbox_set_flags|newt_checkbox_set_value|newt_checkbox_tree|newt_checkbox_tree_add_item|newt_checkbox_tree_find_item|newt_checkbox_tree_get_current|newt_checkbox_tree_get_entry_value|newt_checkbox_tree_get_multi_selection|newt_checkbox_tree_get_selection|newt_checkbox_tree_multi|newt_checkbox_tree_set_current|newt_checkbox_tree_set_entry|newt_checkbox_tree_set_entry_value|newt_checkbox_tree_set_width|newt_clear_key_buffer|newt_cls|newt_compact_button|newt_component_add_callback|newt_component_takes_focus|newt_create_grid|newt_cursor_off|newt_cursor_on|newt_delay|newt_draw_form|newt_draw_root_text|newt_entry|newt_entry_get_value|newt_entry_set|newt_entry_set_filter|newt_entry_set_flags|newt_finished|newt_form|newt_form_add_component|newt_form_add_components|newt_form_add_hot_key|newt_form_destroy|newt_form_get_current|newt_form_run|newt_form_set_background|newt_form_set_height|newt_form_set_size|newt_form_set_timer|newt_form_set_width|newt_form_watch_fd|newt_get_screen_size|newt_grid_add_components_to_form|newt_grid_basic_window|newt_grid_free|newt_grid_get_size|newt_grid_h_close_stacked|newt_grid_h_stacked|newt_grid_place|newt_grid_set_field|newt_grid_simple_window|newt_grid_v_close_stacked|newt_grid_v_stacked|newt_grid_wrapped_window|newt_grid_wrapped_window_at|newt_init|newt_label|newt_label_set_text|newt_listbox|newt_listbox_append_entry|newt_listbox_clear|newt_listbox_clear_selection|newt_listbox_delete_entry|newt_listbox_get_current|newt_listbox_get_selection|newt_listbox_insert_entry|newt_listbox_item_count|newt_listbox_select_item|newt_listbox_set_current|newt_listbox_set_current_by_key|newt_listbox_set_data|newt_listbox_set_entry|newt_listbox_set_width|newt_listitem|newt_listitem_get_data|newt_listitem_set|newt_open_window|newt_pop_help_line|newt_pop_window|newt_push_help_line|newt_radio_get_current|newt_radiobutton|newt_redraw_help_line|newt_reflow_text|newt_refresh|newt_resize_screen|newt_resume|newt_run_form|newt_scale|newt_scale_set|newt_scrollbar_set|newt_set_help_callback|newt_set_suspend_callback|newt_suspend|newt_textbox|newt_textbox_get_num_lines|newt_textbox_reflowed|newt_textbox_set_height|newt_textbox_set_text|newt_vertical_scrollbar|newt_wait_for_key|newt_win_choice|newt_win_entries|newt_win_menu|newt_win_message|newt_win_messagev|newt_win_ternary|next|ngettext|nl2br|nl_langinfo|norewinditerator|normalizer|notes_body|notes_copy_db|notes_create_db|notes_create_note|notes_drop_db|notes_find_note|notes_header_info|notes_list_msgs|notes_mark_read|notes_mark_unread|notes_nav_create|notes_search|notes_unread|notes_version|nsapi_request_headers|nsapi_response_headers|nsapi_virtual|nthmac|number_format|numberformatter|oauth|oauth_get_sbs|oauth_urlencode|oauthexception|oauthprovider|ob_clean|ob_deflatehandler|ob_end_clean|ob_end_flush|ob_etaghandler|ob_flush|ob_get_clean|ob_get_contents|ob_get_flush|ob_get_length|ob_get_level|ob_get_status|ob_gzhandler|ob_iconv_handler|ob_implicit_flush|ob_inflatehandler|ob_list_handlers|ob_start|ob_tidyhandler|oci_bind_array_by_name|oci_bind_by_name|oci_cancel|oci_client_version|oci_close|oci_collection_append|oci_collection_assign|oci_collection_element_assign|oci_collection_element_get|oci_collection_free|oci_collection_max|oci_collection_size|oci_collection_trim|oci_commit|oci_connect|oci_define_by_name|oci_error|oci_execute|oci_fetch|oci_fetch_all|oci_fetch_array|oci_fetch_assoc|oci_fetch_object|oci_fetch_row|oci_field_is_null|oci_field_name|oci_field_precision|oci_field_scale|oci_field_size|oci_field_type|oci_field_type_raw|oci_free_statement|oci_internal_debug|oci_lob_append|oci_lob_close|oci_lob_copy|oci_lob_eof|oci_lob_erase|oci_lob_export|oci_lob_flush|oci_lob_free|oci_lob_getbuffering|oci_lob_import|oci_lob_is_equal|oci_lob_load|oci_lob_read|oci_lob_rewind|oci_lob_save|oci_lob_savefile|oci_lob_seek|oci_lob_setbuffering|oci_lob_size|oci_lob_tell|oci_lob_truncate|oci_lob_write|oci_lob_writetemporary|oci_lob_writetofile|oci_new_collection|oci_new_connect|oci_new_cursor|oci_new_descriptor|oci_num_fields|oci_num_rows|oci_parse|oci_password_change|oci_pconnect|oci_result|oci_rollback|oci_server_version|oci_set_action|oci_set_client_identifier|oci_set_client_info|oci_set_edition|oci_set_module_name|oci_set_prefetch|oci_statement_type|ocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|ocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|ocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|ocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|ocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|ocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|ociloadlob|ocilogoff|ocilogon|ocinewcollection|ocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|ocirollback|ocirowcount|ocisavelob|ocisavelobfile|ociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|octdec|odbc_autocommit|odbc_binmode|odbc_close|odbc_close_all|odbc_columnprivileges|odbc_columns|odbc_commit|odbc_connect|odbc_cursor|odbc_data_source|odbc_do|odbc_error|odbc_errormsg|odbc_exec|odbc_execute|odbc_fetch_array|odbc_fetch_into|odbc_fetch_object|odbc_fetch_row|odbc_field_len|odbc_field_name|odbc_field_num|odbc_field_precision|odbc_field_scale|odbc_field_type|odbc_foreignkeys|odbc_free_result|odbc_gettypeinfo|odbc_longreadlen|odbc_next_result|odbc_num_fields|odbc_num_rows|odbc_pconnect|odbc_prepare|odbc_primarykeys|odbc_procedurecolumns|odbc_procedures|odbc_result|odbc_result_all|odbc_rollback|odbc_setoption|odbc_specialcolumns|odbc_statistics|odbc_tableprivileges|odbc_tables|openal_buffer_create|openal_buffer_data|openal_buffer_destroy|openal_buffer_get|openal_buffer_loadwav|openal_context_create|openal_context_current|openal_context_destroy|openal_context_process|openal_context_suspend|openal_device_close|openal_device_open|openal_listener_get|openal_listener_set|openal_source_create|openal_source_destroy|openal_source_get|openal_source_pause|openal_source_play|openal_source_rewind|openal_source_set|openal_source_stop|openal_stream|opendir|openlog|openssl_cipher_iv_length|openssl_csr_export|openssl_csr_export_to_file|openssl_csr_get_public_key|openssl_csr_get_subject|openssl_csr_new|openssl_csr_sign|openssl_decrypt|openssl_dh_compute_key|openssl_digest|openssl_encrypt|openssl_error_string|openssl_free_key|openssl_get_cipher_methods|openssl_get_md_methods|openssl_get_privatekey|openssl_get_publickey|openssl_open|openssl_pkcs12_export|openssl_pkcs12_export_to_file|openssl_pkcs12_read|openssl_pkcs7_decrypt|openssl_pkcs7_encrypt|openssl_pkcs7_sign|openssl_pkcs7_verify|openssl_pkey_export|openssl_pkey_export_to_file|openssl_pkey_free|openssl_pkey_get_details|openssl_pkey_get_private|openssl_pkey_get_public|openssl_pkey_new|openssl_private_decrypt|openssl_private_encrypt|openssl_public_decrypt|openssl_public_encrypt|openssl_random_pseudo_bytes|openssl_seal|openssl_sign|openssl_verify|openssl_x509_check_private_key|openssl_x509_checkpurpose|openssl_x509_export|openssl_x509_export_to_file|openssl_x509_free|openssl_x509_parse|openssl_x509_read|ord|outeriterator|outofboundsexception|outofrangeexception|output_add_rewrite_var|output_reset_rewrite_vars|overflowexception|overload|override_function|ovrimos_close|ovrimos_commit|ovrimos_connect|ovrimos_cursor|ovrimos_exec|ovrimos_execute|ovrimos_fetch_into|ovrimos_fetch_row|ovrimos_field_len|ovrimos_field_name|ovrimos_field_num|ovrimos_field_type|ovrimos_free_result|ovrimos_longreadlen|ovrimos_num_fields|ovrimos_num_rows|ovrimos_prepare|ovrimos_result|ovrimos_result_all|ovrimos_rollback|pack|parentiterator|parse_ini_file|parse_ini_string|parse_str|parse_url|parsekit_compile_file|parsekit_compile_string|parsekit_func_arginfo|passthru|pathinfo|pclose|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|pdf_activate_item|pdf_add_annotation|pdf_add_bookmark|pdf_add_launchlink|pdf_add_locallink|pdf_add_nameddest|pdf_add_note|pdf_add_outline|pdf_add_pdflink|pdf_add_table_cell|pdf_add_textflow|pdf_add_thumbnail|pdf_add_weblink|pdf_arc|pdf_arcn|pdf_attach_file|pdf_begin_document|pdf_begin_font|pdf_begin_glyph|pdf_begin_item|pdf_begin_layer|pdf_begin_page|pdf_begin_page_ext|pdf_begin_pattern|pdf_begin_template|pdf_begin_template_ext|pdf_circle|pdf_clip|pdf_close|pdf_close_image|pdf_close_pdi|pdf_close_pdi_page|pdf_closepath|pdf_closepath_fill_stroke|pdf_closepath_stroke|pdf_concat|pdf_continue_text|pdf_create_3dview|pdf_create_action|pdf_create_annotation|pdf_create_bookmark|pdf_create_field|pdf_create_fieldgroup|pdf_create_gstate|pdf_create_pvf|pdf_create_textflow|pdf_curveto|pdf_define_layer|pdf_delete|pdf_delete_pvf|pdf_delete_table|pdf_delete_textflow|pdf_encoding_set_char|pdf_end_document|pdf_end_font|pdf_end_glyph|pdf_end_item|pdf_end_layer|pdf_end_page|pdf_end_page_ext|pdf_end_pattern|pdf_end_template|pdf_endpath|pdf_fill|pdf_fill_imageblock|pdf_fill_pdfblock|pdf_fill_stroke|pdf_fill_textblock|pdf_findfont|pdf_fit_image|pdf_fit_pdi_page|pdf_fit_table|pdf_fit_textflow|pdf_fit_textline|pdf_get_apiname|pdf_get_buffer|pdf_get_errmsg|pdf_get_errnum|pdf_get_font|pdf_get_fontname|pdf_get_fontsize|pdf_get_image_height|pdf_get_image_width|pdf_get_majorversion|pdf_get_minorversion|pdf_get_parameter|pdf_get_pdi_parameter|pdf_get_pdi_value|pdf_get_value|pdf_info_font|pdf_info_matchbox|pdf_info_table|pdf_info_textflow|pdf_info_textline|pdf_initgraphics|pdf_lineto|pdf_load_3ddata|pdf_load_font|pdf_load_iccprofile|pdf_load_image|pdf_makespotcolor|pdf_moveto|pdf_new|pdf_open_ccitt|pdf_open_file|pdf_open_gif|pdf_open_image|pdf_open_image_file|pdf_open_jpeg|pdf_open_memory_image|pdf_open_pdi|pdf_open_pdi_document|pdf_open_pdi_page|pdf_open_tiff|pdf_pcos_get_number|pdf_pcos_get_stream|pdf_pcos_get_string|pdf_place_image|pdf_place_pdi_page|pdf_process_pdi|pdf_rect|pdf_restore|pdf_resume_page|pdf_rotate|pdf_save|pdf_scale|pdf_set_border_color|pdf_set_border_dash|pdf_set_border_style|pdf_set_char_spacing|pdf_set_duration|pdf_set_gstate|pdf_set_horiz_scaling|pdf_set_info|pdf_set_info_author|pdf_set_info_creator|pdf_set_info_keywords|pdf_set_info_subject|pdf_set_info_title|pdf_set_layer_dependency|pdf_set_leading|pdf_set_parameter|pdf_set_text_matrix|pdf_set_text_pos|pdf_set_text_rendering|pdf_set_text_rise|pdf_set_value|pdf_set_word_spacing|pdf_setcolor|pdf_setdash|pdf_setdashpattern|pdf_setflat|pdf_setfont|pdf_setgray|pdf_setgray_fill|pdf_setgray_stroke|pdf_setlinecap|pdf_setlinejoin|pdf_setlinewidth|pdf_setmatrix|pdf_setmiterlimit|pdf_setpolydash|pdf_setrgbcolor|pdf_setrgbcolor_fill|pdf_setrgbcolor_stroke|pdf_shading|pdf_shading_pattern|pdf_shfill|pdf_show|pdf_show_boxed|pdf_show_xy|pdf_skew|pdf_stringwidth|pdf_stroke|pdf_suspend_page|pdf_translate|pdf_utf16_to_utf8|pdf_utf32_to_utf16|pdf_utf8_to_utf16|pdo|pdo_cubrid_schema|pdo_pgsqllobcreate|pdo_pgsqllobopen|pdo_pgsqllobunlink|pdo_sqlitecreateaggregate|pdo_sqlitecreatefunction|pdoexception|pdostatement|pfsockopen|pg_affected_rows|pg_cancel_query|pg_client_encoding|pg_close|pg_connect|pg_connection_busy|pg_connection_reset|pg_connection_status|pg_convert|pg_copy_from|pg_copy_to|pg_dbname|pg_delete|pg_end_copy|pg_escape_bytea|pg_escape_string|pg_execute|pg_fetch_all|pg_fetch_all_columns|pg_fetch_array|pg_fetch_assoc|pg_fetch_object|pg_fetch_result|pg_fetch_row|pg_field_is_null|pg_field_name|pg_field_num|pg_field_prtlen|pg_field_size|pg_field_table|pg_field_type|pg_field_type_oid|pg_free_result|pg_get_notify|pg_get_pid|pg_get_result|pg_host|pg_insert|pg_last_error|pg_last_notice|pg_last_oid|pg_lo_close|pg_lo_create|pg_lo_export|pg_lo_import|pg_lo_open|pg_lo_read|pg_lo_read_all|pg_lo_seek|pg_lo_tell|pg_lo_unlink|pg_lo_write|pg_meta_data|pg_num_fields|pg_num_rows|pg_options|pg_parameter_status|pg_pconnect|pg_ping|pg_port|pg_prepare|pg_put_line|pg_query|pg_query_params|pg_result_error|pg_result_error_field|pg_result_seek|pg_result_status|pg_select|pg_send_execute|pg_send_prepare|pg_send_query|pg_send_query_params|pg_set_client_encoding|pg_set_error_verbosity|pg_trace|pg_transaction_status|pg_tty|pg_unescape_bytea|pg_untrace|pg_update|pg_version|php_check_syntax|php_ini_loaded_file|php_ini_scanned_files|php_logo_guid|php_sapi_name|php_strip_whitespace|php_uname|phpcredits|phpinfo|phpversion|pi|png2wbmp|popen|pos|posix_access|posix_ctermid|posix_errno|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|pow|preg_filter|preg_grep|preg_last_error|preg_match|preg_match_all|preg_quote|preg_replace|preg_replace_callback|preg_split|prev|print|print_r|printer_abort|printer_close|printer_create_brush|printer_create_dc|printer_create_font|printer_create_pen|printer_delete_brush|printer_delete_dc|printer_delete_font|printer_delete_pen|printer_draw_bmp|printer_draw_chord|printer_draw_elipse|printer_draw_line|printer_draw_pie|printer_draw_rectangle|printer_draw_roundrect|printer_draw_text|printer_end_doc|printer_end_page|printer_get_option|printer_list|printer_logical_fontheight|printer_open|printer_select_brush|printer_select_font|printer_select_pen|printer_set_option|printer_start_doc|printer_start_page|printer_write|printf|proc_close|proc_get_status|proc_nice|proc_open|proc_terminate|property_exists|ps_add_bookmark|ps_add_launchlink|ps_add_locallink|ps_add_note|ps_add_pdflink|ps_add_weblink|ps_arc|ps_arcn|ps_begin_page|ps_begin_pattern|ps_begin_template|ps_circle|ps_clip|ps_close|ps_close_image|ps_closepath|ps_closepath_stroke|ps_continue_text|ps_curveto|ps_delete|ps_end_page|ps_end_pattern|ps_end_template|ps_fill|ps_fill_stroke|ps_findfont|ps_get_buffer|ps_get_parameter|ps_get_value|ps_hyphenate|ps_include_file|ps_lineto|ps_makespotcolor|ps_moveto|ps_new|ps_open_file|ps_open_image|ps_open_image_file|ps_open_memory_image|ps_place_image|ps_rect|ps_restore|ps_rotate|ps_save|ps_scale|ps_set_border_color|ps_set_border_dash|ps_set_border_style|ps_set_info|ps_set_parameter|ps_set_text_pos|ps_set_value|ps_setcolor|ps_setdash|ps_setflat|ps_setfont|ps_setgray|ps_setlinecap|ps_setlinejoin|ps_setlinewidth|ps_setmiterlimit|ps_setoverprintmode|ps_setpolydash|ps_shading|ps_shading_pattern|ps_shfill|ps_show|ps_show2|ps_show_boxed|ps_show_xy|ps_show_xy2|ps_string_geometry|ps_stringwidth|ps_stroke|ps_symbol|ps_symbol_name|ps_symbol_width|ps_translate|pspell_add_to_personal|pspell_add_to_session|pspell_check|pspell_clear_session|pspell_config_create|pspell_config_data_dir|pspell_config_dict_dir|pspell_config_ignore|pspell_config_mode|pspell_config_personal|pspell_config_repl|pspell_config_runtogether|pspell_config_save_repl|pspell_new|pspell_new_config|pspell_new_personal|pspell_save_wordlist|pspell_store_replacement|pspell_suggest|putenv|px_close|px_create_fp|px_date2string|px_delete|px_delete_record|px_get_field|px_get_info|px_get_parameter|px_get_record|px_get_schema|px_get_value|px_insert_record|px_new|px_numfields|px_numrecords|px_open_fp|px_put_record|px_retrieve_record|px_set_blob_file|px_set_parameter|px_set_tablename|px_set_targetencoding|px_set_value|px_timestamp2string|px_update_record|qdom_error|qdom_tree|quoted_printable_decode|quoted_printable_encode|quotemeta|rad2deg|radius_acct_open|radius_add_server|radius_auth_open|radius_close|radius_config|radius_create_request|radius_cvt_addr|radius_cvt_int|radius_cvt_string|radius_demangle|radius_demangle_mppe_key|radius_get_attr|radius_get_vendor_attr|radius_put_addr|radius_put_attr|radius_put_int|radius_put_string|radius_put_vendor_addr|radius_put_vendor_attr|radius_put_vendor_int|radius_put_vendor_string|radius_request_authenticator|radius_send_request|radius_server_secret|radius_strerror|rand|range|rangeexception|rar_wrapper_cache_stats|rararchive|rarentry|rarexception|rawurldecode|rawurlencode|read_exif_data|readdir|readfile|readgzfile|readline|readline_add_history|readline_callback_handler_install|readline_callback_handler_remove|readline_callback_read_char|readline_clear_history|readline_completion_function|readline_info|readline_list_history|readline_on_new_line|readline_read_history|readline_redisplay|readline_write_history|readlink|realpath|realpath_cache_get|realpath_cache_size|recode|recode_file|recode_string|recursivearrayiterator|recursivecachingiterator|recursivecallbackfilteriterator|recursivedirectoryiterator|recursivefilteriterator|recursiveiterator|recursiveiteratoriterator|recursiveregexiterator|recursivetreeiterator|reflection|reflectionclass|reflectionexception|reflectionextension|reflectionfunction|reflectionfunctionabstract|reflectionmethod|reflectionobject|reflectionparameter|reflectionproperty|reflector|regexiterator|register_shutdown_function|register_tick_function|rename|rename_function|require|require_once|reset|resetValue|resourcebundle|restore_error_handler|restore_exception_handler|restore_include_path|return|rewind|rewinddir|rmdir|round|rpm_close|rpm_get_tag|rpm_is_valid|rpm_open|rpm_version|rrd_create|rrd_error|rrd_fetch|rrd_first|rrd_graph|rrd_info|rrd_last|rrd_lastupdate|rrd_restore|rrd_tune|rrd_update|rrd_xport|rrdcreator|rrdgraph|rrdupdater|rsort|rtrim|runkit_class_adopt|runkit_class_emancipate|runkit_constant_add|runkit_constant_redefine|runkit_constant_remove|runkit_function_add|runkit_function_copy|runkit_function_redefine|runkit_function_remove|runkit_function_rename|runkit_import|runkit_lint|runkit_lint_file|runkit_method_add|runkit_method_copy|runkit_method_redefine|runkit_method_remove|runkit_method_rename|runkit_return_value_used|runkit_sandbox_output_handler|runkit_superglobals|runtimeexception|samconnection_commit|samconnection_connect|samconnection_constructor|samconnection_disconnect|samconnection_errno|samconnection_error|samconnection_isconnected|samconnection_peek|samconnection_peekall|samconnection_receive|samconnection_remove|samconnection_rollback|samconnection_send|samconnection_setDebug|samconnection_subscribe|samconnection_unsubscribe|sammessage_body|sammessage_constructor|sammessage_header|sca_createdataobject|sca_getservice|sca_localproxy_createdataobject|sca_soapproxy_createdataobject|scandir|sdo_das_changesummary_beginlogging|sdo_das_changesummary_endlogging|sdo_das_changesummary_getchangeddataobjects|sdo_das_changesummary_getchangetype|sdo_das_changesummary_getoldcontainer|sdo_das_changesummary_getoldvalues|sdo_das_changesummary_islogging|sdo_das_datafactory_addpropertytotype|sdo_das_datafactory_addtype|sdo_das_datafactory_getdatafactory|sdo_das_dataobject_getchangesummary|sdo_das_relational_applychanges|sdo_das_relational_construct|sdo_das_relational_createrootdataobject|sdo_das_relational_executepreparedquery|sdo_das_relational_executequery|sdo_das_setting_getlistindex|sdo_das_setting_getpropertyindex|sdo_das_setting_getpropertyname|sdo_das_setting_getvalue|sdo_das_setting_isset|sdo_das_xml_addtypes|sdo_das_xml_create|sdo_das_xml_createdataobject|sdo_das_xml_createdocument|sdo_das_xml_document_getrootdataobject|sdo_das_xml_document_getrootelementname|sdo_das_xml_document_getrootelementuri|sdo_das_xml_document_setencoding|sdo_das_xml_document_setxmldeclaration|sdo_das_xml_document_setxmlversion|sdo_das_xml_loadfile|sdo_das_xml_loadstring|sdo_das_xml_savefile|sdo_das_xml_savestring|sdo_datafactory_create|sdo_dataobject_clear|sdo_dataobject_createdataobject|sdo_dataobject_getcontainer|sdo_dataobject_getsequence|sdo_dataobject_gettypename|sdo_dataobject_gettypenamespaceuri|sdo_exception_getcause|sdo_list_insert|sdo_model_property_getcontainingtype|sdo_model_property_getdefault|sdo_model_property_getname|sdo_model_property_gettype|sdo_model_property_iscontainment|sdo_model_property_ismany|sdo_model_reflectiondataobject_construct|sdo_model_reflectiondataobject_export|sdo_model_reflectiondataobject_getcontainmentproperty|sdo_model_reflectiondataobject_getinstanceproperties|sdo_model_reflectiondataobject_gettype|sdo_model_type_getbasetype|sdo_model_type_getname|sdo_model_type_getnamespaceuri|sdo_model_type_getproperties|sdo_model_type_getproperty|sdo_model_type_isabstracttype|sdo_model_type_isdatatype|sdo_model_type_isinstance|sdo_model_type_isopentype|sdo_model_type_issequencedtype|sdo_sequence_getproperty|sdo_sequence_insert|sdo_sequence_move|seekableiterator|sem_acquire|sem_get|sem_release|sem_remove|serializable|serialize|session_cache_expire|session_cache_limiter|session_commit|session_decode|session_destroy|session_encode|session_get_cookie_params|session_id|session_is_registered|session_module_name|session_name|session_pgsql_add_error|session_pgsql_get_error|session_pgsql_get_field|session_pgsql_reset|session_pgsql_set_field|session_pgsql_status|session_regenerate_id|session_register|session_save_path|session_set_cookie_params|session_set_save_handler|session_start|session_unregister|session_unset|session_write_close|setCounterClass|set_error_handler|set_exception_handler|set_file_buffer|set_include_path|set_magic_quotes_runtime|set_socket_blocking|set_time_limit|setcookie|setlocale|setproctitle|setrawcookie|setstaticpropertyvalue|setthreadtitle|settype|sha1|sha1_file|shell_exec|shm_attach|shm_detach|shm_get_var|shm_has_var|shm_put_var|shm_remove|shm_remove_var|shmop_close|shmop_delete|shmop_open|shmop_read|shmop_size|shmop_write|show_source|shuffle|signeurlpaiement|similar_text|simplexml_import_dom|simplexml_load_file|simplexml_load_string|simplexmlelement|simplexmliterator|sin|sinh|sizeof|sleep|snmp|snmp2_get|snmp2_getnext|snmp2_real_walk|snmp2_set|snmp2_walk|snmp3_get|snmp3_getnext|snmp3_real_walk|snmp3_set|snmp3_walk|snmp_get_quick_print|snmp_get_valueretrieval|snmp_read_mib|snmp_set_enum_print|snmp_set_oid_numeric_print|snmp_set_oid_output_format|snmp_set_quick_print|snmp_set_valueretrieval|snmpget|snmpgetnext|snmprealwalk|snmpset|snmpwalk|snmpwalkoid|soapclient|soapfault|soapheader|soapparam|soapserver|soapvar|socket_accept|socket_bind|socket_clear_error|socket_close|socket_connect|socket_create|socket_create_listen|socket_create_pair|socket_get_option|socket_get_status|socket_getpeername|socket_getsockname|socket_last_error|socket_listen|socket_read|socket_recv|socket_recvfrom|socket_select|socket_send|socket_sendto|socket_set_block|socket_set_blocking|socket_set_nonblock|socket_set_option|socket_set_timeout|socket_shutdown|socket_strerror|socket_write|solr_get_version|solrclient|solrclientexception|solrdocument|solrdocumentfield|solrexception|solrgenericresponse|solrillegalargumentexception|solrillegaloperationexception|solrinputdocument|solrmodifiableparams|solrobject|solrparams|solrpingresponse|solrquery|solrqueryresponse|solrresponse|solrupdateresponse|solrutils|sort|soundex|sphinxclient|spl_autoload|spl_autoload_call|spl_autoload_extensions|spl_autoload_functions|spl_autoload_register|spl_autoload_unregister|spl_classes|spl_object_hash|splbool|spldoublylinkedlist|splenum|splfileinfo|splfileobject|splfixedarray|splfloat|splheap|splint|split|spliti|splmaxheap|splminheap|splobjectstorage|splobserver|splpriorityqueue|splqueue|splstack|splstring|splsubject|spltempfileobject|spoofchecker|sprintf|sql_regcase|sqlite3|sqlite3result|sqlite3stmt|sqlite_array_query|sqlite_busy_timeout|sqlite_changes|sqlite_close|sqlite_column|sqlite_create_aggregate|sqlite_create_function|sqlite_current|sqlite_error_string|sqlite_escape_string|sqlite_exec|sqlite_factory|sqlite_fetch_all|sqlite_fetch_array|sqlite_fetch_column_types|sqlite_fetch_object|sqlite_fetch_single|sqlite_fetch_string|sqlite_field_name|sqlite_has_more|sqlite_has_prev|sqlite_key|sqlite_last_error|sqlite_last_insert_rowid|sqlite_libencoding|sqlite_libversion|sqlite_next|sqlite_num_fields|sqlite_num_rows|sqlite_open|sqlite_popen|sqlite_prev|sqlite_query|sqlite_rewind|sqlite_seek|sqlite_single_query|sqlite_udf_decode_binary|sqlite_udf_encode_binary|sqlite_unbuffered_query|sqlite_valid|sqrt|srand|sscanf|ssdeep_fuzzy_compare|ssdeep_fuzzy_hash|ssdeep_fuzzy_hash_filename|ssh2_auth_hostbased_file|ssh2_auth_none|ssh2_auth_password|ssh2_auth_pubkey_file|ssh2_connect|ssh2_exec|ssh2_fetch_stream|ssh2_fingerprint|ssh2_methods_negotiated|ssh2_publickey_add|ssh2_publickey_init|ssh2_publickey_list|ssh2_publickey_remove|ssh2_scp_recv|ssh2_scp_send|ssh2_sftp|ssh2_sftp_lstat|ssh2_sftp_mkdir|ssh2_sftp_readlink|ssh2_sftp_realpath|ssh2_sftp_rename|ssh2_sftp_rmdir|ssh2_sftp_stat|ssh2_sftp_symlink|ssh2_sftp_unlink|ssh2_shell|ssh2_tunnel|stat|stats_absolute_deviation|stats_cdf_beta|stats_cdf_binomial|stats_cdf_cauchy|stats_cdf_chisquare|stats_cdf_exponential|stats_cdf_f|stats_cdf_gamma|stats_cdf_laplace|stats_cdf_logistic|stats_cdf_negative_binomial|stats_cdf_noncentral_chisquare|stats_cdf_noncentral_f|stats_cdf_poisson|stats_cdf_t|stats_cdf_uniform|stats_cdf_weibull|stats_covariance|stats_den_uniform|stats_dens_beta|stats_dens_cauchy|stats_dens_chisquare|stats_dens_exponential|stats_dens_f|stats_dens_gamma|stats_dens_laplace|stats_dens_logistic|stats_dens_negative_binomial|stats_dens_normal|stats_dens_pmf_binomial|stats_dens_pmf_hypergeometric|stats_dens_pmf_poisson|stats_dens_t|stats_dens_weibull|stats_harmonic_mean|stats_kurtosis|stats_rand_gen_beta|stats_rand_gen_chisquare|stats_rand_gen_exponential|stats_rand_gen_f|stats_rand_gen_funiform|stats_rand_gen_gamma|stats_rand_gen_ibinomial|stats_rand_gen_ibinomial_negative|stats_rand_gen_int|stats_rand_gen_ipoisson|stats_rand_gen_iuniform|stats_rand_gen_noncenral_chisquare|stats_rand_gen_noncentral_f|stats_rand_gen_noncentral_t|stats_rand_gen_normal|stats_rand_gen_t|stats_rand_get_seeds|stats_rand_phrase_to_seeds|stats_rand_ranf|stats_rand_setall|stats_skew|stats_standard_deviation|stats_stat_binomial_coef|stats_stat_correlation|stats_stat_gennch|stats_stat_independent_t|stats_stat_innerproduct|stats_stat_noncentral_t|stats_stat_paired_t|stats_stat_percentile|stats_stat_powersum|stats_variance|stomp|stomp_connect_error|stomp_version|stompexception|stompframe|str_getcsv|str_ireplace|str_pad|str_repeat|str_replace|str_rot13|str_shuffle|str_split|str_word_count|strcasecmp|strchr|strcmp|strcoll|strcspn|stream_bucket_append|stream_bucket_make_writeable|stream_bucket_new|stream_bucket_prepend|stream_context_create|stream_context_get_default|stream_context_get_options|stream_context_get_params|stream_context_set_default|stream_context_set_option|stream_context_set_params|stream_copy_to_stream|stream_encoding|stream_filter_append|stream_filter_prepend|stream_filter_register|stream_filter_remove|stream_get_contents|stream_get_filters|stream_get_line|stream_get_meta_data|stream_get_transports|stream_get_wrappers|stream_is_local|stream_notification_callback|stream_register_wrapper|stream_resolve_include_path|stream_select|stream_set_blocking|stream_set_read_buffer|stream_set_timeout|stream_set_write_buffer|stream_socket_accept|stream_socket_client|stream_socket_enable_crypto|stream_socket_get_name|stream_socket_pair|stream_socket_recvfrom|stream_socket_sendto|stream_socket_server|stream_socket_shutdown|stream_supports_lock|stream_wrapper_register|stream_wrapper_restore|stream_wrapper_unregister|streamwrapper|strftime|strip_tags|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|substr_compare|substr_count|substr_replace|svm|svmmodel|svn_add|svn_auth_get_parameter|svn_auth_set_parameter|svn_blame|svn_cat|svn_checkout|svn_cleanup|svn_client_version|svn_commit|svn_delete|svn_diff|svn_export|svn_fs_abort_txn|svn_fs_apply_text|svn_fs_begin_txn2|svn_fs_change_node_prop|svn_fs_check_path|svn_fs_contents_changed|svn_fs_copy|svn_fs_delete|svn_fs_dir_entries|svn_fs_file_contents|svn_fs_file_length|svn_fs_is_dir|svn_fs_is_file|svn_fs_make_dir|svn_fs_make_file|svn_fs_node_created_rev|svn_fs_node_prop|svn_fs_props_changed|svn_fs_revision_prop|svn_fs_revision_root|svn_fs_txn_root|svn_fs_youngest_rev|svn_import|svn_log|svn_ls|svn_mkdir|svn_repos_create|svn_repos_fs|svn_repos_fs_begin_txn_for_commit|svn_repos_fs_commit_txn|svn_repos_hotcopy|svn_repos_open|svn_repos_recover|svn_revert|svn_status|svn_update|swf_actiongeturl|swf_actiongotoframe|swf_actiongotolabel|swf_actionnextframe|swf_actionplay|swf_actionprevframe|swf_actionsettarget|swf_actionstop|swf_actiontogglequality|swf_actionwaitforframe|swf_addbuttonrecord|swf_addcolor|swf_closefile|swf_definebitmap|swf_definefont|swf_defineline|swf_definepoly|swf_definerect|swf_definetext|swf_endbutton|swf_enddoaction|swf_endshape|swf_endsymbol|swf_fontsize|swf_fontslant|swf_fonttracking|swf_getbitmapinfo|swf_getfontinfo|swf_getframe|swf_labelframe|swf_lookat|swf_modifyobject|swf_mulcolor|swf_nextid|swf_oncondition|swf_openfile|swf_ortho|swf_ortho2|swf_perspective|swf_placeobject|swf_polarview|swf_popmatrix|swf_posround|swf_pushmatrix|swf_removeobject|swf_rotate|swf_scale|swf_setfont|swf_setframe|swf_shapearc|swf_shapecurveto|swf_shapecurveto3|swf_shapefillbitmapclip|swf_shapefillbitmaptile|swf_shapefilloff|swf_shapefillsolid|swf_shapelinesolid|swf_shapelineto|swf_shapemoveto|swf_showframe|swf_startbutton|swf_startdoaction|swf_startshape|swf_startsymbol|swf_textwidth|swf_translate|swf_viewport|swfaction|swfbitmap|swfbutton|swfdisplayitem|swffill|swffont|swffontchar|swfgradient|swfmorph|swfmovie|swfprebuiltclip|swfshape|swfsound|swfsoundinstance|swfsprite|swftext|swftextfield|swfvideostream|swish_construct|swish_getmetalist|swish_getpropertylist|swish_prepare|swish_query|swishresult_getmetalist|swishresult_stem|swishresults_getparsedwords|swishresults_getremovedstopwords|swishresults_nextresult|swishresults_seekresult|swishsearch_execute|swishsearch_resetlimit|swishsearch_setlimit|swishsearch_setphrasedelimiter|swishsearch_setsort|swishsearch_setstructure|sybase_affected_rows|sybase_close|sybase_connect|sybase_data_seek|sybase_deadlock_retry_count|sybase_fetch_array|sybase_fetch_assoc|sybase_fetch_field|sybase_fetch_object|sybase_fetch_row|sybase_field_seek|sybase_free_result|sybase_get_last_message|sybase_min_client_severity|sybase_min_error_severity|sybase_min_message_severity|sybase_min_server_severity|sybase_num_fields|sybase_num_rows|sybase_pconnect|sybase_query|sybase_result|sybase_select_db|sybase_set_message_handler|sybase_unbuffered_query|symlink|sys_get_temp_dir|sys_getloadavg|syslog|system|tag|tan|tanh|tcpwrap_check|tempnam|textdomain|tidy|tidy_access_count|tidy_config_count|tidy_diagnose|tidy_error_count|tidy_get_error_buffer|tidy_get_output|tidy_load_config|tidy_reset_config|tidy_save_config|tidy_set_encoding|tidy_setopt|tidy_warning_count|tidynode|time|time_nanosleep|time_sleep_until|timezone_abbreviations_list|timezone_identifiers_list|timezone_location_get|timezone_name_from_abbr|timezone_name_get|timezone_offset_get|timezone_open|timezone_transitions_get|timezone_version_get|tmpfile|token_get_all|token_name|tokyotyrant|tokyotyrantquery|tokyotyranttable|tostring|tostring|touch|transliterator|traversable|trigger_error|trim|uasort|ucfirst|ucwords|udm_add_search_limit|udm_alloc_agent|udm_alloc_agent_array|udm_api_version|udm_cat_list|udm_cat_path|udm_check_charset|udm_check_stored|udm_clear_search_limits|udm_close_stored|udm_crc32|udm_errno|udm_error|udm_find|udm_free_agent|udm_free_ispell_data|udm_free_res|udm_get_doc_count|udm_get_res_field|udm_get_res_param|udm_hash32|udm_load_ispell_data|udm_open_stored|udm_set_agent_param|uksort|umask|underflowexception|unexpectedvalueexception|uniqid|unixtojd|unlink|unpack|unregister_tick_function|unserialize|unset|urldecode|urlencode|use_soap_error_handler|user_error|usleep|usort|utf8_decode|utf8_encode|v8js|v8jsexception|var_dump|var_export|variant|variant_abs|variant_add|variant_and|variant_cast|variant_cat|variant_cmp|variant_date_from_timestamp|variant_date_to_timestamp|variant_div|variant_eqv|variant_fix|variant_get_type|variant_idiv|variant_imp|variant_int|variant_mod|variant_mul|variant_neg|variant_not|variant_or|variant_pow|variant_round|variant_set|variant_set_type|variant_sub|variant_xor|version_compare|vfprintf|virtual|vpopmail_add_alias_domain|vpopmail_add_alias_domain_ex|vpopmail_add_domain|vpopmail_add_domain_ex|vpopmail_add_user|vpopmail_alias_add|vpopmail_alias_del|vpopmail_alias_del_domain|vpopmail_alias_get|vpopmail_alias_get_all|vpopmail_auth_user|vpopmail_del_domain|vpopmail_del_domain_ex|vpopmail_del_user|vpopmail_error|vpopmail_passwd|vpopmail_set_user_quota|vprintf|vsprintf|w32api_deftype|w32api_init_dtype|w32api_invoke_function|w32api_register_function|w32api_set_call_method|wddx_add_vars|wddx_deserialize|wddx_packet_end|wddx_packet_start|wddx_serialize_value|wddx_serialize_vars|win32_continue_service|win32_create_service|win32_delete_service|win32_get_last_control_message|win32_pause_service|win32_ps_list_procs|win32_ps_stat_mem|win32_ps_stat_proc|win32_query_service_status|win32_set_service_status|win32_start_service|win32_start_service_ctrl_dispatcher|win32_stop_service|wincache_fcache_fileinfo|wincache_fcache_meminfo|wincache_lock|wincache_ocache_fileinfo|wincache_ocache_meminfo|wincache_refresh_if_changed|wincache_rplist_fileinfo|wincache_rplist_meminfo|wincache_scache_info|wincache_scache_meminfo|wincache_ucache_add|wincache_ucache_cas|wincache_ucache_clear|wincache_ucache_dec|wincache_ucache_delete|wincache_ucache_exists|wincache_ucache_get|wincache_ucache_inc|wincache_ucache_info|wincache_ucache_meminfo|wincache_ucache_set|wincache_unlock|wordwrap|xattr_get|xattr_list|xattr_remove|xattr_set|xattr_supported|xdiff_file_bdiff|xdiff_file_bdiff_size|xdiff_file_bpatch|xdiff_file_diff|xdiff_file_diff_binary|xdiff_file_merge3|xdiff_file_patch|xdiff_file_patch_binary|xdiff_file_rabdiff|xdiff_string_bdiff|xdiff_string_bdiff_size|xdiff_string_bpatch|xdiff_string_diff|xdiff_string_diff_binary|xdiff_string_merge3|xdiff_string_patch|xdiff_string_patch_binary|xdiff_string_rabdiff|xhprof_disable|xhprof_enable|xhprof_sample_disable|xhprof_sample_enable|xml_error_string|xml_get_current_byte_index|xml_get_current_column_number|xml_get_current_line_number|xml_get_error_code|xml_parse|xml_parse_into_struct|xml_parser_create|xml_parser_create_ns|xml_parser_free|xml_parser_get_option|xml_parser_set_option|xml_set_character_data_handler|xml_set_default_handler|xml_set_element_handler|xml_set_end_namespace_decl_handler|xml_set_external_entity_ref_handler|xml_set_notation_decl_handler|xml_set_object|xml_set_processing_instruction_handler|xml_set_start_namespace_decl_handler|xml_set_unparsed_entity_decl_handler|xmlreader|xmlrpc_decode|xmlrpc_decode_request|xmlrpc_encode|xmlrpc_encode_request|xmlrpc_get_type|xmlrpc_is_fault|xmlrpc_parse_method_descriptions|xmlrpc_server_add_introspection_data|xmlrpc_server_call_method|xmlrpc_server_create|xmlrpc_server_destroy|xmlrpc_server_register_introspection_callback|xmlrpc_server_register_method|xmlrpc_set_type|xmlwriter_end_attribute|xmlwriter_end_cdata|xmlwriter_end_comment|xmlwriter_end_document|xmlwriter_end_dtd|xmlwriter_end_dtd_attlist|xmlwriter_end_dtd_element|xmlwriter_end_dtd_entity|xmlwriter_end_element|xmlwriter_end_pi|xmlwriter_flush|xmlwriter_full_end_element|xmlwriter_open_memory|xmlwriter_open_uri|xmlwriter_output_memory|xmlwriter_set_indent|xmlwriter_set_indent_string|xmlwriter_start_attribute|xmlwriter_start_attribute_ns|xmlwriter_start_cdata|xmlwriter_start_comment|xmlwriter_start_document|xmlwriter_start_dtd|xmlwriter_start_dtd_attlist|xmlwriter_start_dtd_element|xmlwriter_start_dtd_entity|xmlwriter_start_element|xmlwriter_start_element_ns|xmlwriter_start_pi|xmlwriter_text|xmlwriter_write_attribute|xmlwriter_write_attribute_ns|xmlwriter_write_cdata|xmlwriter_write_comment|xmlwriter_write_dtd|xmlwriter_write_dtd_attlist|xmlwriter_write_dtd_element|xmlwriter_write_dtd_entity|xmlwriter_write_element|xmlwriter_write_element_ns|xmlwriter_write_pi|xmlwriter_write_raw|xpath_eval|xpath_eval_expression|xpath_new_context|xpath_register_ns|xpath_register_ns_auto|xptr_eval|xptr_new_context|xslt_backend_info|xslt_backend_name|xslt_backend_version|xslt_create|xslt_errno|xslt_error|xslt_free|xslt_getopt|xslt_process|xslt_set_base|xslt_set_encoding|xslt_set_error_handler|xslt_set_log|xslt_set_object|xslt_set_sax_handler|xslt_set_sax_handlers|xslt_set_scheme_handler|xslt_set_scheme_handlers|xslt_setopt|xsltprocessor|yaml_emit|yaml_emit_file|yaml_parse|yaml_parse_file|yaml_parse_url|yaz_addinfo|yaz_ccl_conf|yaz_ccl_parse|yaz_close|yaz_connect|yaz_database|yaz_element|yaz_errno|yaz_error|yaz_es|yaz_es_result|yaz_get_option|yaz_hits|yaz_itemorder|yaz_present|yaz_range|yaz_record|yaz_scan|yaz_scan_result|yaz_schema|yaz_search|yaz_set_option|yaz_sort|yaz_syntax|yaz_wait|yp_all|yp_cat|yp_err_string|yp_errno|yp_first|yp_get_default_domain|yp_master|yp_match|yp_next|yp_order|zend_logo_guid|zend_thread_id|zend_version|zip_close|zip_entry_close|zip_entry_compressedsize|zip_entry_compressionmethod|zip_entry_filesize|zip_entry_name|zip_entry_open|zip_entry_read|zip_open|zip_read|ziparchive|ziparchive_addemptydir|ziparchive_addfile|ziparchive_addfromstring|ziparchive_close|ziparchive_deleteindex|ziparchive_deletename|ziparchive_extractto|ziparchive_getarchivecomment|ziparchive_getcommentindex|ziparchive_getcommentname|ziparchive_getfromindex|ziparchive_getfromname|ziparchive_getnameindex|ziparchive_getstatusstring|ziparchive_getstream|ziparchive_locatename|ziparchive_open|ziparchive_renameindex|ziparchive_renamename|ziparchive_setCommentName|ziparchive_setarchivecomment|ziparchive_setcommentindex|ziparchive_statindex|ziparchive_statname|ziparchive_unchangeall|ziparchive_unchangearchive|ziparchive_unchangeindex|ziparchive_unchangename|zlib_get_coding_type".split("|")),c=e.arrayToMap("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".split("|")),d=e.arrayToMap("die|echo|empty|exit|eval|include|include_once|isset|list|require|require_once|return|print|unset".split("|")),g=e.arrayToMap("true|false|null|__CLASS__|__DIR__|__FILE__|__LINE__|__METHOD__|__FUNCTION__|__NAMESPACE__".split("|")),h=e.arrayToMap("$GLOBALS|$_SERVER|$_GET|$_POST|$_FILES|$_REQUEST|$_SESSION|$_ENV|$_COOKIE|$php_errormsg|$HTTP_RAW_POST_DATA|$http_response_header|$argc|$argv".split("|")),i=e.arrayToMap("key_exists|cairo_matrix_create_scale|cairo_matrix_create_translate|call_user_method|call_user_method_array|com_addref|com_get|com_invoke|com_isenum|com_load|com_release|com_set|connection_timeout|cubrid_load_from_glo|cubrid_new_glo|cubrid_save_to_glo|cubrid_send_glo|define_syslog_variables|dl|ereg|ereg_replace|eregi|eregi_replace|hw_documentattributes|hw_documentbodytag|hw_documentsize|hw_outputdocument|imagedashedline|maxdb_bind_param|maxdb_bind_result|maxdb_client_encoding|maxdb_close_long_data|maxdb_execute|maxdb_fetch|maxdb_get_metadata|maxdb_param_count|maxdb_send_long_data|mcrypt_ecb|mcrypt_generic_end|mime_content_type|mysql_createdb|mysql_dbname|mysql_db_query|mysql_drop_db|mysql_dropdb|mysql_escape_string|mysql_fieldflags|mysql_fieldflags|mysql_fieldname|mysql_fieldtable|mysql_fieldtype|mysql_freeresult|mysql_listdbs|mysql_list_fields|mysql_listfields|mysql_list_tables|mysql_listtables|mysql_numfields|mysql_numrows|mysql_selectdb|mysql_tablename|mysqli_bind_param|mysqli_bind_result|mysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_execute|mysqli_fetch|mysqli_get_metadata|mysqli_master_query|mysqli_param_count|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|mysqli_send_long_data|mysqli_send_query|mysqli_slave_query|ocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|ocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|ocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|ocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|ocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|ocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|ociloadlob|ocilogoff|ocilogon|ocinewcollection|ocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|ocirollback|ocirowcount|ocisavelob|ocisavelobfile|ociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|PDF_add_annotation|PDF_add_bookmark|PDF_add_launchlink|PDF_add_locallink|PDF_add_note|PDF_add_outline|PDF_add_pdflink|PDF_add_weblink|PDF_attach_file|PDF_begin_page|PDF_begin_template|PDF_close_pdi|PDF_close|PDF_findfont|PDF_get_font|PDF_get_fontname|PDF_get_fontsize|PDF_get_image_height|PDF_get_image_width|PDF_get_majorversion|PDF_get_minorversion|PDF_get_pdi_parameter|PDF_get_pdi_value|PDF_open_ccitt|PDF_open_file|PDF_open_gif|PDF_open_image_file|PDF_open_image|PDF_open_jpeg|PDF_open_pdi|PDF_open_tiff|PDF_place_image|PDF_place_pdi_page|PDF_set_border_color|PDF_set_border_dash|PDF_set_border_style|PDF_set_char_spacing|PDF_set_duration|PDF_set_horiz_scaling|PDF_set_info_author|PDF_set_info_creator|PDF_set_info_keywords|PDF_set_info_subject|PDF_set_info_title|PDF_set_leading|PDF_set_text_matrix|PDF_set_text_rendering|PDF_set_text_rise|PDF_set_word_spacing|PDF_setgray_fill|PDF_setgray_stroke|PDF_setgray|PDF_setpolydash|PDF_setrgbcolor_fill|PDF_setrgbcolor_stroke|PDF_setrgbcolor|PDF_show_boxed|php_check_syntax|px_set_tablename|px_set_targetencoding|runkit_sandbox_output_handler|session_is_registered|session_register|session_unregisterset_magic_quotes_runtime|magic_quotes_runtime|set_socket_blocking|socket_set_blocking|set_socket_timeout|socket_set_timeout|split|spliti|sql_regcase".split("|")),j=e.arrayToMap("cfunction|old_function".split("|")),k=e.arrayToMap([]);this.$rules={start:[{token:"support.php_tag",regex:"<\\?(?:php|\\=)"},{token:"support.php_tag",regex:"\\?>"},{token:"comment",regex:"<\\!--",next:"htmlcomment"},{token:"meta.tag",regex:"<style",next:"css"},{token:"meta.tag",regex:"<\\/?[-_a-zA-Z0-9:]+",next:"htmltag"},{token:"meta.tag",regex:"<!DOCTYPE.*?>"},{token:"comment",regex:"\\/\\/.*$"},{token:"comment",regex:"#.*$"},a.getStartRule("doc-start"),{token:"comment",regex:"\\/\\*",next:"comment"},{token:"string.regexp",regex:"[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/][gimy]*\\s*(?=[).,;]|$)"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:'["].*\\\\$',next:"qqstring"},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"string",regex:"['].*\\\\$",next:"qstring"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language",regex:"\\b(?:DEFAULT_INCLUDE_PATH|E_(?:ALL|CO(?:MPILE_(?:ERROR|WARNING)|RE_(?:ERROR|WARNING))|ERROR|NOTICE|PARSE|STRICT|USER_(?:ERROR|NOTICE|WARNING)|WARNING)|P(?:EAR_(?:EXTENSION_DIR|INSTALL_DIR)|HP_(?:BINDIR|CONFIG_FILE_(?:PATH|SCAN_DIR)|DATADIR|E(?:OL|XTENSION_DIR)|INT_(?:MAX|SIZE)|L(?:IBDIR|OCALSTATEDIR)|O(?:S|UTPUT_HANDLER_(?:CONT|END|START))|PREFIX|S(?:API|HLIB_SUFFIX|YSCONFDIR)|VERSION))|__COMPILER_HALT_OFFSET__)\\b"},{token:"constant.language",regex:"\\b(?:A(?:B(?:DAY_(?:1|2|3|4|5|6|7)|MON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9))|LT_DIGITS|M_STR|SSERT_(?:ACTIVE|BAIL|CALLBACK|QUIET_EVAL|WARNING))|C(?:ASE_(?:LOWER|UPPER)|HAR_MAX|O(?:DESET|NNECTION_(?:ABORTED|NORMAL|TIMEOUT)|UNT_(?:NORMAL|RECURSIVE))|R(?:EDITS_(?:ALL|DOCS|FULLPAGE|G(?:ENERAL|ROUP)|MODULES|QA|SAPI)|NCYSTR|YPT_(?:BLOWFISH|EXT_DES|MD5|S(?:ALT_LENGTH|TD_DES)))|URRENCY_SYMBOL)|D(?:AY_(?:1|2|3|4|5|6|7)|ECIMAL_POINT|IRECTORY_SEPARATOR|_(?:FMT|T_FMT))|E(?:NT_(?:COMPAT|NOQUOTES|QUOTES)|RA(?:_(?:D_(?:FMT|T_FMT)|T_FMT|YEAR)|)|XTR_(?:IF_EXISTS|OVERWRITE|PREFIX_(?:ALL|I(?:F_EXISTS|NVALID)|SAME)|SKIP))|FRAC_DIGITS|GROUPING|HTML_(?:ENTITIES|SPECIALCHARS)|IN(?:FO_(?:ALL|C(?:ONFIGURATION|REDITS)|ENVIRONMENT|GENERAL|LICENSE|MODULES|VARIABLES)|I_(?:ALL|PERDIR|SYSTEM|USER)|T_(?:CURR_SYMBOL|FRAC_DIGITS))|L(?:C_(?:ALL|C(?:OLLATE|TYPE)|M(?:ESSAGES|ONETARY)|NUMERIC|TIME)|O(?:CK_(?:EX|NB|SH|UN)|G_(?:A(?:LERT|UTH(?:PRIV|))|C(?:ONS|R(?:IT|ON))|D(?:AEMON|EBUG)|E(?:MERG|RR)|INFO|KERN|L(?:OCAL(?:0|1|2|3|4|5|6|7)|PR)|MAIL|N(?:DELAY|EWS|O(?:TICE|WAIT))|ODELAY|P(?:ERROR|ID)|SYSLOG|U(?:SER|UCP)|WARNING)))|M(?:ON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9|DECIMAL_POINT|GROUPING|THOUSANDS_SEP)|_(?:1_PI|2_(?:PI|SQRTPI)|E|L(?:N(?:10|2)|OG(?:10E|2E))|PI(?:_(?:2|4)|)|SQRT(?:1_2|2)))|N(?:EGATIVE_SIGN|O(?:EXPR|STR)|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|P(?:ATH(?:INFO_(?:BASENAME|DIRNAME|EXTENSION)|_SEPARATOR)|M_STR|OSITIVE_SIGN|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|RADIXCHAR|S(?:EEK_(?:CUR|END|SET)|ORT_(?:ASC|DESC|NUMERIC|REGULAR|STRING)|TR_PAD_(?:BOTH|LEFT|RIGHT))|T(?:HOUS(?:ANDS_SEP|EP)|_FMT(?:_AMPM|))|YES(?:EXPR|STR)|STD(?:IN|OUT|ERR))\\b"},{token:function(a){return c.hasOwnProperty(a)?"keyword":g.hasOwnProperty(a)?"constant.language":h.hasOwnProperty(a)?"variable.language":k.hasOwnProperty(a)?"invalid.illegal":b.hasOwnProperty(a)?"support.function":a=="debugger"?"invalid.deprecated":a.match(/^(\$[a-zA-Z][a-zA-Z0-9_]*|self|parent)$/)?"variable":"identifier"},regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"},{token:"lparen",regex:"[[({]"},{token:"rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",regex:".+"}],qqstring:[{token:"string",regex:'(?:(?:\\\\.)|(?:[^"\\\\]))*?"',next:"start"},{token:"string",regex:".+"}],qstring:[{token:"string",regex:"(?:(?:\\\\.)|(?:[^'\\\\]))*?'",next:"start"},{token:"string",regex:".+"}],htmlcomment:[{token:"comment",regex:".*?-->",next:"start"},{token:"comment",regex:".+"}],htmltag:[{token:"meta.tag",regex:">",next:"start"},{token:"text",regex:"[-_a-zA-Z0-9:]+"},{token:"text",regex:"\\s+"},{token:"string",regex:'".*?"'},{token:"string",regex:"'.*?'"}],css:[{token:"meta.tag",regex:"</style>",next:"htmltag"},{token:"meta.tag",regex:">"},{token:"text",regex:"(?:media|type|href)"},{token:"string",regex:'=".*?"'},{token:"paren.lparen",regex:"{",next:"cssdeclaration"},{token:"keyword",regex:"#[A-Za-z0-9-_.]+"},{token:"variable",regex:"\\.[A-Za-z0-9-_.]+"},{token:"constant",regex:"[A-Za-z0-9]+"}],cssdeclaration:[{token:"support.type",regex:"[-a-zA-Z]+",next:"cssvalue"},{token:"paren.rparen",regex:"}",next:"css"}],cssvalue:[{token:"text",regex:":"},{token:"constant",regex:"#[0-9a-zA-Z]+"},{token:"text",regex:"[-_0-9a-zA-Z\"' ,%]+"},{token:"text",regex:";",next:"cssdeclaration"}]},this.embedRules(f,"doc-",[(new f).getEndRule("start")])};d.inherits(h,g),b.PhpHighlightRules=h}),define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text_highlight_rules").TextHighlightRules,f=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};d.inherits(f,e),function(){this.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},this.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}}}.call(f.prototype),b.DocCommentHighlightRules=f}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(a,b,c){"use strict";var d=a("../range").Range,e=function(){};((function(){this.checkOutdent=function(a,b){return/^\s+$/.test(a)?/^\s*\}/.test(b):!1},this.autoOutdent=function(a,b){var c=a.getLine(b),e=c.match(/^(\s*\})/);if(!e)return 0;var f=e[1].length,g=a.findMatchingBracket({row:b,column:f});if(!g||g.row==b)return 0;var h=this.$getIndent(a.getLine(g.row));a.replace(new d(b,0,b,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""}})).call(e.prototype),b.MatchingBraceOutdent=e}),define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("../behaviour").Behaviour,f=function(){this.add("braces","insertion",function(a,b,c,d,e){if(e=="{"){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"{"+g+"}",selection:!1}:{text:"{}",selection:[1,1]}}if(e=="}"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var k=d.$findOpeningBracket("}",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}else if(e=="\n"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var l=d.findMatchingBracket({row:h.row,column:h.column+1});if(!l)return null;var m=this.getNextLineIndent(a,i.substring(0,i.length-1),d.getTabString()),n=this.$getIndent(d.doc.getLine(l.row));return{text:"\n"+m+"\n"+n,selection:[1,m.length,1,m.length]}}}}),this.add("braces","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="{"){var g=d.doc.getLine(e.start.row),h=g.substring(e.end.column,e.end.column+1);if(h=="}")return e.end.column++,e}}),this.add("parens","insertion",function(a,b,c,d,e){if(e=="("){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"("+g+")",selection:!1}:{text:"()",selection:[1,1]}}if(e==")"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j==")"){var k=d.$findOpeningBracket(")",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="("){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h==")")return e.end.column++,e}}),this.add("string_dquotes","insertion",function(a,b,c,d,e){if(e=='"'){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);if(g!=="")return{text:'"'+g+'"',selection:!1};var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column-1,h.column);if(j=="\\")return null;var k=d.getTokens(f.start.row,f.start.row)[0].tokens,l=0,m,n=-1;for(var o=0;o<k.length;o++){m=k[o],m.type=="string"?n=-1:n<0&&(n=m.value.indexOf('"'));if(m.value.length+l>f.start.column)break;l+=k[o].value.length}if(!m||n<0&&m.type!=="comment"&&(m.type!=="string"||f.start.column!==m.value.length+l-1&&m.value.lastIndexOf('"')===m.value.length-1))return{text:'""',selection:[1,1]};if(m&&m.type==="string"){var p=i.substring(h.column,h.column+1);if(p=='"')return{text:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=='"'){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h=='"')return e.end.column++,e}})};d.inherits(f,e),b.CstyleBehaviour=f}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("../../range").Range,f=a("./fold_mode").FoldMode,g=b.FoldMode=function(){};d.inherits(g,f),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(a,b,c){var d=a.getLine(c),f=d.match(this.foldingStartMarker);if(f){var g=f.index;if(f[1])return this.openingBracketBlock(a,f[1],c,g);var h=a.getCommentFoldRange(c,g+f[0].length);return h.end.column-=2,h}if(b!=="markbeginend")return;var f=d.match(this.foldingStopMarker);if(f){var g=f.index+f[0].length;if(f[2]){var h=a.getCommentFoldRange(c,g);return h.end.column-=2,h}var i={row:c,column:g},j=a.$findOpeningBracket(f[1],i);if(!j)return;return j.column++,i.column--,e.fromPoints(j,i)}}}.call(g.prototype)}),define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"],function(a,b,c){"use strict";var d=a("../../range").Range,e=b.FoldMode=function(){};((function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(a,b,c){var d=a.getLine(c);return this.foldingStartMarker.test(d)?"start":b=="markbeginend"&&this.foldingStopMarker&&this.foldingStopMarker.test(d)?"end":""},this.getFoldWidgetRange=function(a,b,c){return null},this.indentationBlock=function(a,b,c){var e=/^\s*/,f=b,g=b,h=a.getLine(b),i=c||h.length,j=h.match(e)[0].length,k=a.getLength();while(++b<k){h=a.getLine(b);var l=h.match(e)[0].length;if(l==h.length)continue;if(l<=j)break;g=b}if(g>f){var m=a.getLine(g).length;return new d(f,i,g,m)}},this.openingBracketBlock=function(a,b,c,e){var f={row:c,column:e+1},g=a.$findClosingBracket(b,f);if(!g)return;var h=a.foldWidgets[g.row];return h==null&&(h=this.getFoldWidget(a,g.row)),h=="start"&&(g.row--,g.column=a.getLine(g.row).length),d.fromPoints(f,g)}})).call(e.prototype)}),function(){window.require(["ace/ace"],function(a){window.ace||(window.ace={});for(var b in a)a.hasOwnProperty(b)&&(ace[b]=a[b])})}() \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-powershell-uncompressed.js b/apps/files_texteditor/js/aceeditor/mode-powershell-uncompressed.js
new file mode 100755
index 00000000000..e5877f62373
--- /dev/null
+++ b/apps/files_texteditor/js/aceeditor/mode-powershell-uncompressed.js
@@ -0,0 +1,716 @@
+define('ace/mode/powershell', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/powershell_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/mode/behaviour/cstyle', 'ace/mode/folding/cstyle'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextMode = require("./text").Mode;
+var Tokenizer = require("../tokenizer").Tokenizer;
+var PowershellHighlightRules = require("./powershell_highlight_rules").PowershellHighlightRules;
+var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
+var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
+var CStyleFoldMode = require("./folding/cstyle").FoldMode;
+
+var Mode = function() {
+ this.$tokenizer = new Tokenizer(new PowershellHighlightRules().getRules());
+ this.$outdent = new MatchingBraceOutdent();
+ this.$behaviour = new CstyleBehaviour();
+ this.foldingRules = new CStyleFoldMode();
+};
+oop.inherits(Mode, TextMode);
+
+(function() {
+
+ this.getNextLineIndent = function(state, line, tab) {
+ var indent = this.$getIndent(line);
+
+ var tokenizedLine = this.$tokenizer.getLineTokens(line, state);
+ var tokens = tokenizedLine.tokens;
+
+ if (tokens.length && tokens[tokens.length-1].type == "comment") {
+ return indent;
+ }
+
+ if (state == "start") {
+ var match = line.match(/^.*[\{\(\[]\s*$/);
+ if (match) {
+ indent += tab;
+ }
+ }
+
+ return indent;
+ };
+
+ this.checkOutdent = function(state, line, input) {
+ return this.$outdent.checkOutdent(line, input);
+ };
+
+ this.autoOutdent = function(state, doc, row) {
+ this.$outdent.autoOutdent(doc, row);
+ };
+
+
+ this.createWorker = function(session) {
+ return null;
+ };
+
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+});
+define('ace/mode/powershell_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var lang = require("../lib/lang");
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var PowershellHighlightRules = function() {
+
+ var keywords = lang.arrayToMap(
+ ("function|if|else|elseif|switch|while|default|for|do|until|break|continue|" +
+ "foreach|return|filter|in|trap|throw|param|begin|process|end").split("|")
+ );
+
+ var builtinFunctions = lang.arrayToMap(
+ ("Get-Alias|Import-Alias|New-Alias|Set-Alias|Get-AuthenticodeSignature|Set-AuthenticodeSignature|" +
+ "Set-Location|Get-ChildItem|Clear-Item|Get-Command|Measure-Command|Trace-Command|" +
+ "Add-Computer|Checkpoint-Computer|Remove-Computer|Restart-Computer|Restore-Computer|Stop-Computer|" +
+ "Reset-ComputerMachinePassword|Test-ComputerSecureChannel|Add-Content|Get-Content|Set-Content|Clear-Content|" +
+ "Get-Command|Invoke-Command|Enable-ComputerRestore|Disable-ComputerRestore|Get-ComputerRestorePoint|Test-Connection|" +
+ "ConvertFrom-CSV|ConvertTo-CSV|ConvertTo-Html|ConvertTo-Xml|ConvertFrom-SecureString|ConvertTo-SecureString|" +
+ "Copy-Item|Export-Counter|Get-Counter|Import-Counter|Get-Credential|Get-Culture|" +
+ "Get-ChildItem|Get-Date|Set-Date|Remove-Item|Compare-Object|Get-Event|" +
+ "Get-WinEvent|New-Event|Remove-Event|Unregister-Event|Wait-Event|Clear-EventLog|" +
+ "Get-Eventlog|Limit-EventLog|New-Eventlog|Remove-EventLog|Show-EventLog|Write-EventLog|" +
+ "Get-EventSubscriber|Register-EngineEvent|Register-ObjectEvent|Register-WmiEvent|Get-ExecutionPolicy|Set-ExecutionPolicy|" +
+ "Export-Alias|Export-Clixml|Export-Console|Export-Csv|ForEach-Object|Format-Custom|" +
+ "Format-List|Format-Table|Format-Wide|Export-FormatData|Get-FormatData|Get-Item|" +
+ "Get-ChildItem|Get-Help|Add-History|Clear-History|Get-History|Invoke-History|" +
+ "Get-Host|Read-Host|Write-Host|Get-HotFix|Import-Clixml|Import-Csv|" +
+ "Invoke-Command|Invoke-Expression|Get-Item|Invoke-Item|New-Item|Remove-Item|" +
+ "Set-Item|Clear-ItemProperty|Copy-ItemProperty|Get-ItemProperty|Move-ItemProperty|New-ItemProperty|" +
+ "Remove-ItemProperty|Rename-ItemProperty|Set-ItemProperty|Get-Job|Receive-Job|Remove-Job|" +
+ "Start-Job|Stop-Job|Wait-Job|Stop-Process|Update-List|Get-Location|" +
+ "Pop-Location|Push-Location|Set-Location|Send-MailMessage|Add-Member|Get-Member|" +
+ "Move-Item|Compare-Object|Group-Object|Measure-Object|New-Object|Select-Object|" +
+ "Sort-Object|Where-Object|Out-Default|Out-File|Out-GridView|Out-Host|" +
+ "Out-Null|Out-Printer|Out-String|Convert-Path|Join-Path|Resolve-Path|" +
+ "Split-Path|Test-Path|Get-Pfxcertificate|Pop-Location|Push-Location|Get-Process|" +
+ "Start-Process|Stop-Process|Wait-Process|Enable-PSBreakpoint|Disable-PSBreakpoint|Get-PSBreakpoint|" +
+ "Set-PSBreakpoint|Remove-PSBreakpoint|Get-PSDrive|New-PSDrive|Remove-PSDrive|Get-PSProvider|" +
+ "Set-PSdebug|Enter-PSSession|Exit-PSSession|Export-PSSession|Get-PSSession|Import-PSSession|" +
+ "New-PSSession|Remove-PSSession|Disable-PSSessionConfiguration|Enable-PSSessionConfiguration|Get-PSSessionConfiguration|Register-PSSessionConfiguration|" +
+ "Set-PSSessionConfiguration|Unregister-PSSessionConfiguration|New-PSSessionOption|Add-PsSnapIn|Get-PsSnapin|Remove-PSSnapin|" +
+ "Get-Random|Read-Host|Remove-Item|Rename-Item|Rename-ItemProperty|Select-Object|" +
+ "Select-XML|Send-MailMessage|Get-Service|New-Service|Restart-Service|Resume-Service|" +
+ "Set-Service|Start-Service|Stop-Service|Suspend-Service|Sort-Object|Start-Sleep|" +
+ "ConvertFrom-StringData|Select-String|Tee-Object|New-Timespan|Trace-Command|Get-Tracesource|" +
+ "Set-Tracesource|Start-Transaction|Complete-Transaction|Get-Transaction|Use-Transaction|Undo-Transaction|" +
+ "Start-Transcript|Stop-Transcript|Add-Type|Update-TypeData|Get-Uiculture|Get-Unique|" +
+ "Update-Formatdata|Update-Typedata|Clear-Variable|Get-Variable|New-Variable|Remove-Variable|" +
+ "Set-Variable|New-WebServiceProxy|Where-Object|Write-Debug|Write-Error|Write-Host|" +
+ "Write-Output|Write-Progress|Write-Verbose|Write-Warning|Set-WmiInstance|Invoke-WmiMethod|" +
+ "Get-WmiObject|Remove-WmiObject|Connect-WSMan|Disconnect-WSMan|Test-WSMan|Invoke-WSManAction|" +
+ "Disable-WSManCredSSP|Enable-WSManCredSSP|Get-WSManCredSSP|New-WSManInstance|Get-WSManInstance|Set-WSManInstance|" +
+ "Remove-WSManInstance|Set-WSManQuickConfig|New-WSManSessionOption").split("|"));
+
+ var binaryOperatorsRe = "eq|ne|ge|gt|lt|le|like|notlike|match|notmatch|replace|contains|notcontains|" +
+ "ieq|ine|ige|igt|ile|ilt|ilike|inotlike|imatch|inotmatch|ireplace|icontains|inotcontains|" +
+ "is|isnot|as|" +
+ "and|or|band|bor|not";
+
+ // regexp must not have capturing parentheses. Use (?:) instead.
+ // regexps are ordered -> the first match is used
+
+ this.$rules = {
+ "start" : [
+ {
+ token : "comment",
+ regex : "#.*$"
+ }, {
+ token : "string", // single line
+ regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
+ }, {
+ token : "string", // single line
+ regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
+ }, {
+ token : "constant.numeric", // hex
+ regex : "0[xX][0-9a-fA-F]+\\b"
+ }, {
+ token : "constant.numeric", // float
+ regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
+ }, {
+ token : "constant.language.boolean",
+ regex : "[$](?:[Tt]rue|[Ff]alse)\\b"
+ }, {
+ token : "constant.language",
+ regex : "[$][Nn]ull\\b"
+ }, {
+ token : "variable.instance",
+ regex : "[$][a-zA-Z][a-zA-Z0-9_]*\\b"
+ }, {
+ token : function(value) {
+ if (keywords.hasOwnProperty(value))
+ return "keyword";
+ else if (builtinFunctions.hasOwnProperty(value))
+ return "support.function";
+ else
+ return "identifier";
+ },
+ // TODO: Unicode escape sequences
+ // TODO: Unicode identifiers
+ regex : "[a-zA-Z_$][a-zA-Z0-9_$\\-]*\\b"
+ }, {
+ token : "keyword.operator",
+ regex : "\\-(?:" + binaryOperatorsRe + ")"
+ }, {
+ token : "keyword.operator",
+ regex : "&|\\*|\\+|\\-|\\=|\\+=|\\-="
+ }, {
+ token : "lparen",
+ regex : "[[({]"
+ }, {
+ token : "rparen",
+ regex : "[\\])}]"
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }
+ ],
+ "comment" : [
+ {
+ token : "comment", // closing comment
+ regex : ".*?\\*\\/",
+ next : "start"
+ }, {
+ token : "comment", // comment spanning whole line
+ merge : true,
+ regex : ".+"
+ }
+ ]
+ };
+};
+
+oop.inherits(PowershellHighlightRules, TextHighlightRules);
+
+exports.PowershellHighlightRules = PowershellHighlightRules;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var Range = require("../range").Range;
+
+var MatchingBraceOutdent = function() {};
+
+(function() {
+
+ this.checkOutdent = function(line, input) {
+ if (! /^\s+$/.test(line))
+ return false;
+
+ return /^\s*\}/.test(input);
+ };
+
+ this.autoOutdent = function(doc, row) {
+ var line = doc.getLine(row);
+ var match = line.match(/^(\s*\})/);
+
+ if (!match) return 0;
+
+ var column = match[1].length;
+ var openBracePos = doc.findMatchingBracket({row: row, column: column});
+
+ if (!openBracePos || openBracePos.row == row) return 0;
+
+ var indent = this.$getIndent(doc.getLine(openBracePos.row));
+ doc.replace(new Range(row, 0, row, column-1), indent);
+ };
+
+ this.$getIndent = function(line) {
+ var match = line.match(/^(\s+)/);
+ if (match) {
+ return match[1];
+ }
+
+ return "";
+ };
+
+}).call(MatchingBraceOutdent.prototype);
+
+exports.MatchingBraceOutdent = MatchingBraceOutdent;
+});
+/* vim:ts=4:sts=4:sw=4:
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Chris Spencer <chris.ag.spencer AT googlemail DOT com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/behaviour/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var Behaviour = require('../behaviour').Behaviour;
+
+var CstyleBehaviour = function () {
+
+ this.add("braces", "insertion", function (state, action, editor, session, text) {
+ if (text == '{') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '{' + selected + '}',
+ selection: false
+ }
+ } else {
+ return {
+ text: '{}',
+ selection: [1, 1]
+ }
+ }
+ } else if (text == '}') {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '}') {
+ var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});
+ if (matching !== null) {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ } else if (text == "\n") {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '}') {
+ var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column + 1});
+ if (!openBracePos)
+ return null;
+
+ var indent = this.getNextLineIndent(state, line.substring(0, line.length - 1), session.getTabString());
+ var next_indent = this.$getIndent(session.doc.getLine(openBracePos.row));
+
+ return {
+ text: '\n' + indent + '\n' + next_indent,
+ selection: [1, indent.length, 1, indent.length]
+ }
+ }
+ }
+ });
+
+ this.add("braces", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '{') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.end.column, range.end.column + 1);
+ if (rightChar == '}') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+ this.add("parens", "insertion", function (state, action, editor, session, text) {
+ if (text == '(') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '(' + selected + ')',
+ selection: false
+ }
+ } else {
+ return {
+ text: '()',
+ selection: [1, 1]
+ }
+ }
+ } else if (text == ')') {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == ')') {
+ var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});
+ if (matching !== null) {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ }
+ });
+
+ this.add("parens", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '(') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
+ if (rightChar == ')') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+ this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {
+ if (text == '"') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '"' + selected + '"',
+ selection: false
+ }
+ } else {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var leftChar = line.substring(cursor.column-1, cursor.column);
+
+ // We're escaped.
+ if (leftChar == '\\') {
+ return null;
+ }
+
+ // Find what token we're inside.
+ var tokens = session.getTokens(selection.start.row, selection.start.row)[0].tokens;
+ var col = 0, token;
+ var quotepos = -1; // Track whether we're inside an open quote.
+
+ for (var x = 0; x < tokens.length; x++) {
+ token = tokens[x];
+ if (token.type == "string") {
+ quotepos = -1;
+ } else if (quotepos < 0) {
+ quotepos = token.value.indexOf('"');
+ }
+ if ((token.value.length + col) > selection.start.column) {
+ break;
+ }
+ col += tokens[x].value.length;
+ }
+
+ // Try and be smart about when we auto insert.
+ if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf('"') === token.value.length-1)))) {
+ return {
+ text: '""',
+ selection: [1,1]
+ }
+ } else if (token && token.type === "string") {
+ // Ignore input and move right one if we're typing over the closing quote.
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '"') {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ }
+ }
+ });
+
+ this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '"') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
+ if (rightChar == '"') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+}
+oop.inherits(CstyleBehaviour, Behaviour);
+
+exports.CstyleBehaviour = CstyleBehaviour;
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var Range = require("../../range").Range;
+var BaseFoldMode = require("./fold_mode").FoldMode;
+
+var FoldMode = exports.FoldMode = function() {};
+oop.inherits(FoldMode, BaseFoldMode);
+
+(function() {
+
+ this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
+ this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ var line = session.getLine(row);
+ var match = line.match(this.foldingStartMarker);
+ if (match) {
+ var i = match.index;
+
+ if (match[1])
+ return this.openingBracketBlock(session, match[1], row, i);
+
+ var range = session.getCommentFoldRange(row, i + match[0].length);
+ range.end.column -= 2;
+ return range;
+ }
+
+ if (foldStyle !== "markbeginend")
+ return;
+
+ var match = line.match(this.foldingStopMarker);
+ if (match) {
+ var i = match.index + match[0].length;
+
+ if (match[2]) {
+ var range = session.getCommentFoldRange(row, i);
+ range.end.column -= 2;
+ return range;
+ }
+
+ var end = {row: row, column: i};
+ var start = session.$findOpeningBracket(match[1], end);
+
+ if (!start)
+ return;
+
+ start.column++;
+ end.column--;
+
+ return Range.fromPoints(start, end);
+ }
+ };
+
+}).call(FoldMode.prototype);
+
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/fold_mode', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var Range = require("../../range").Range;
+
+var FoldMode = exports.FoldMode = function() {};
+
+(function() {
+
+ this.foldingStartMarker = null;
+ this.foldingStopMarker = null;
+
+ // must return "" if there's no fold, to enable caching
+ this.getFoldWidget = function(session, foldStyle, row) {
+ var line = session.getLine(row);
+ if (this.foldingStartMarker.test(line))
+ return "start";
+ if (foldStyle == "markbeginend"
+ && this.foldingStopMarker
+ && this.foldingStopMarker.test(line))
+ return "end";
+ return "";
+ };
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ return null;
+ };
+
+ this.indentationBlock = function(session, row, column) {
+ var re = /^\s*/;
+ var startRow = row;
+ var endRow = row;
+ var line = session.getLine(row);
+ var startColumn = column || line.length;
+ var startLevel = line.match(re)[0].length;
+ var maxRow = session.getLength()
+
+ while (++row < maxRow) {
+ line = session.getLine(row);
+ var level = line.match(re)[0].length;
+
+ if (level == line.length)
+ continue;
+
+ if (level <= startLevel)
+ break;
+
+ endRow = row;
+ }
+
+ if (endRow > startRow) {
+ var endColumn = session.getLine(endRow).length;
+ return new Range(startRow, startColumn, endRow, endColumn);
+ }
+ };
+
+ this.openingBracketBlock = function(session, bracket, row, column) {
+ var start = {row: row, column: column + 1};
+ var end = session.$findClosingBracket(bracket, start);
+ if (!end)
+ return;
+
+ var fw = session.foldWidgets[end.row];
+ if (fw == null)
+ fw = this.getFoldWidget(session, end.row);
+
+ if (fw == "start") {
+ end.row --;
+ end.column = session.getLine(end.row).length;
+ }
+ return Range.fromPoints(start, end);
+ };
+
+}).call(FoldMode.prototype);
+
+});
+;
+ (function() {
+ window.require(["ace/ace"], function(a) {
+ if (!window.ace)
+ window.ace = {};
+ for (var key in a) if (a.hasOwnProperty(key))
+ ace[key] = a[key];
+ });
+ })();
+ \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-powershell.js b/apps/files_texteditor/js/aceeditor/mode-powershell.js
new file mode 100755
index 00000000000..9bbdef6989b
--- /dev/null
+++ b/apps/files_texteditor/js/aceeditor/mode-powershell.js
@@ -0,0 +1 @@
+define("ace/mode/powershell",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/powershell_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text").Mode,f=a("../tokenizer").Tokenizer,g=a("./powershell_highlight_rules").PowershellHighlightRules,h=a("./matching_brace_outdent").MatchingBraceOutdent,i=a("./behaviour/cstyle").CstyleBehaviour,j=a("./folding/cstyle").FoldMode,k=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h,this.$behaviour=new i,this.foldingRules=new j};d.inherits(k,e),function(){this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=this.$tokenizer.getLineTokens(b,a),f=e.tokens;if(f.length&&f[f.length-1].type=="comment")return d;if(a=="start"){var g=b.match(/^.*[\{\(\[]\s*$/);g&&(d+=c)}return d},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)},this.createWorker=function(a){return null}}.call(k.prototype),b.Mode=k}),define("ace/mode/powershell_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("../lib/lang"),f=a("./text_highlight_rules").TextHighlightRules,g=function(){var a=e.arrayToMap("function|if|else|elseif|switch|while|default|for|do|until|break|continue|foreach|return|filter|in|trap|throw|param|begin|process|end".split("|")),b=e.arrayToMap("Get-Alias|Import-Alias|New-Alias|Set-Alias|Get-AuthenticodeSignature|Set-AuthenticodeSignature|Set-Location|Get-ChildItem|Clear-Item|Get-Command|Measure-Command|Trace-Command|Add-Computer|Checkpoint-Computer|Remove-Computer|Restart-Computer|Restore-Computer|Stop-Computer|Reset-ComputerMachinePassword|Test-ComputerSecureChannel|Add-Content|Get-Content|Set-Content|Clear-Content|Get-Command|Invoke-Command|Enable-ComputerRestore|Disable-ComputerRestore|Get-ComputerRestorePoint|Test-Connection|ConvertFrom-CSV|ConvertTo-CSV|ConvertTo-Html|ConvertTo-Xml|ConvertFrom-SecureString|ConvertTo-SecureString|Copy-Item|Export-Counter|Get-Counter|Import-Counter|Get-Credential|Get-Culture|Get-ChildItem|Get-Date|Set-Date|Remove-Item|Compare-Object|Get-Event|Get-WinEvent|New-Event|Remove-Event|Unregister-Event|Wait-Event|Clear-EventLog|Get-Eventlog|Limit-EventLog|New-Eventlog|Remove-EventLog|Show-EventLog|Write-EventLog|Get-EventSubscriber|Register-EngineEvent|Register-ObjectEvent|Register-WmiEvent|Get-ExecutionPolicy|Set-ExecutionPolicy|Export-Alias|Export-Clixml|Export-Console|Export-Csv|ForEach-Object|Format-Custom|Format-List|Format-Table|Format-Wide|Export-FormatData|Get-FormatData|Get-Item|Get-ChildItem|Get-Help|Add-History|Clear-History|Get-History|Invoke-History|Get-Host|Read-Host|Write-Host|Get-HotFix|Import-Clixml|Import-Csv|Invoke-Command|Invoke-Expression|Get-Item|Invoke-Item|New-Item|Remove-Item|Set-Item|Clear-ItemProperty|Copy-ItemProperty|Get-ItemProperty|Move-ItemProperty|New-ItemProperty|Remove-ItemProperty|Rename-ItemProperty|Set-ItemProperty|Get-Job|Receive-Job|Remove-Job|Start-Job|Stop-Job|Wait-Job|Stop-Process|Update-List|Get-Location|Pop-Location|Push-Location|Set-Location|Send-MailMessage|Add-Member|Get-Member|Move-Item|Compare-Object|Group-Object|Measure-Object|New-Object|Select-Object|Sort-Object|Where-Object|Out-Default|Out-File|Out-GridView|Out-Host|Out-Null|Out-Printer|Out-String|Convert-Path|Join-Path|Resolve-Path|Split-Path|Test-Path|Get-Pfxcertificate|Pop-Location|Push-Location|Get-Process|Start-Process|Stop-Process|Wait-Process|Enable-PSBreakpoint|Disable-PSBreakpoint|Get-PSBreakpoint|Set-PSBreakpoint|Remove-PSBreakpoint|Get-PSDrive|New-PSDrive|Remove-PSDrive|Get-PSProvider|Set-PSdebug|Enter-PSSession|Exit-PSSession|Export-PSSession|Get-PSSession|Import-PSSession|New-PSSession|Remove-PSSession|Disable-PSSessionConfiguration|Enable-PSSessionConfiguration|Get-PSSessionConfiguration|Register-PSSessionConfiguration|Set-PSSessionConfiguration|Unregister-PSSessionConfiguration|New-PSSessionOption|Add-PsSnapIn|Get-PsSnapin|Remove-PSSnapin|Get-Random|Read-Host|Remove-Item|Rename-Item|Rename-ItemProperty|Select-Object|Select-XML|Send-MailMessage|Get-Service|New-Service|Restart-Service|Resume-Service|Set-Service|Start-Service|Stop-Service|Suspend-Service|Sort-Object|Start-Sleep|ConvertFrom-StringData|Select-String|Tee-Object|New-Timespan|Trace-Command|Get-Tracesource|Set-Tracesource|Start-Transaction|Complete-Transaction|Get-Transaction|Use-Transaction|Undo-Transaction|Start-Transcript|Stop-Transcript|Add-Type|Update-TypeData|Get-Uiculture|Get-Unique|Update-Formatdata|Update-Typedata|Clear-Variable|Get-Variable|New-Variable|Remove-Variable|Set-Variable|New-WebServiceProxy|Where-Object|Write-Debug|Write-Error|Write-Host|Write-Output|Write-Progress|Write-Verbose|Write-Warning|Set-WmiInstance|Invoke-WmiMethod|Get-WmiObject|Remove-WmiObject|Connect-WSMan|Disconnect-WSMan|Test-WSMan|Invoke-WSManAction|Disable-WSManCredSSP|Enable-WSManCredSSP|Get-WSManCredSSP|New-WSManInstance|Get-WSManInstance|Set-WSManInstance|Remove-WSManInstance|Set-WSManQuickConfig|New-WSManSessionOption".split("|")),c="eq|ne|ge|gt|lt|le|like|notlike|match|notmatch|replace|contains|notcontains|ieq|ine|ige|igt|ile|ilt|ilike|inotlike|imatch|inotmatch|ireplace|icontains|inotcontains|is|isnot|as|and|or|band|bor|not";this.$rules={start:[{token:"comment",regex:"#.*$"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language.boolean",regex:"[$](?:[Tt]rue|[Ff]alse)\\b"},{token:"constant.language",regex:"[$][Nn]ull\\b"},{token:"variable.instance",regex:"[$][a-zA-Z][a-zA-Z0-9_]*\\b"},{token:function(c){return a.hasOwnProperty(c)?"keyword":b.hasOwnProperty(c)?"support.function":"identifier"},regex:"[a-zA-Z_$][a-zA-Z0-9_$\\-]*\\b"},{token:"keyword.operator",regex:"\\-(?:"+c+")"},{token:"keyword.operator",regex:"&|\\*|\\+|\\-|\\=|\\+=|\\-="},{token:"lparen",regex:"[[({]"},{token:"rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",merge:!0,regex:".+"}]}};d.inherits(g,f),b.PowershellHighlightRules=g}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(a,b,c){"use strict";var d=a("../range").Range,e=function(){};((function(){this.checkOutdent=function(a,b){return/^\s+$/.test(a)?/^\s*\}/.test(b):!1},this.autoOutdent=function(a,b){var c=a.getLine(b),e=c.match(/^(\s*\})/);if(!e)return 0;var f=e[1].length,g=a.findMatchingBracket({row:b,column:f});if(!g||g.row==b)return 0;var h=this.$getIndent(a.getLine(g.row));a.replace(new d(b,0,b,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""}})).call(e.prototype),b.MatchingBraceOutdent=e}),define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("../behaviour").Behaviour,f=function(){this.add("braces","insertion",function(a,b,c,d,e){if(e=="{"){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"{"+g+"}",selection:!1}:{text:"{}",selection:[1,1]}}if(e=="}"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var k=d.$findOpeningBracket("}",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}else if(e=="\n"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var l=d.findMatchingBracket({row:h.row,column:h.column+1});if(!l)return null;var m=this.getNextLineIndent(a,i.substring(0,i.length-1),d.getTabString()),n=this.$getIndent(d.doc.getLine(l.row));return{text:"\n"+m+"\n"+n,selection:[1,m.length,1,m.length]}}}}),this.add("braces","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="{"){var g=d.doc.getLine(e.start.row),h=g.substring(e.end.column,e.end.column+1);if(h=="}")return e.end.column++,e}}),this.add("parens","insertion",function(a,b,c,d,e){if(e=="("){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"("+g+")",selection:!1}:{text:"()",selection:[1,1]}}if(e==")"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j==")"){var k=d.$findOpeningBracket(")",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="("){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h==")")return e.end.column++,e}}),this.add("string_dquotes","insertion",function(a,b,c,d,e){if(e=='"'){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);if(g!=="")return{text:'"'+g+'"',selection:!1};var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column-1,h.column);if(j=="\\")return null;var k=d.getTokens(f.start.row,f.start.row)[0].tokens,l=0,m,n=-1;for(var o=0;o<k.length;o++){m=k[o],m.type=="string"?n=-1:n<0&&(n=m.value.indexOf('"'));if(m.value.length+l>f.start.column)break;l+=k[o].value.length}if(!m||n<0&&m.type!=="comment"&&(m.type!=="string"||f.start.column!==m.value.length+l-1&&m.value.lastIndexOf('"')===m.value.length-1))return{text:'""',selection:[1,1]};if(m&&m.type==="string"){var p=i.substring(h.column,h.column+1);if(p=='"')return{text:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=='"'){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h=='"')return e.end.column++,e}})};d.inherits(f,e),b.CstyleBehaviour=f}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("../../range").Range,f=a("./fold_mode").FoldMode,g=b.FoldMode=function(){};d.inherits(g,f),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(a,b,c){var d=a.getLine(c),f=d.match(this.foldingStartMarker);if(f){var g=f.index;if(f[1])return this.openingBracketBlock(a,f[1],c,g);var h=a.getCommentFoldRange(c,g+f[0].length);return h.end.column-=2,h}if(b!=="markbeginend")return;var f=d.match(this.foldingStopMarker);if(f){var g=f.index+f[0].length;if(f[2]){var h=a.getCommentFoldRange(c,g);return h.end.column-=2,h}var i={row:c,column:g},j=a.$findOpeningBracket(f[1],i);if(!j)return;return j.column++,i.column--,e.fromPoints(j,i)}}}.call(g.prototype)}),define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"],function(a,b,c){"use strict";var d=a("../../range").Range,e=b.FoldMode=function(){};((function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(a,b,c){var d=a.getLine(c);return this.foldingStartMarker.test(d)?"start":b=="markbeginend"&&this.foldingStopMarker&&this.foldingStopMarker.test(d)?"end":""},this.getFoldWidgetRange=function(a,b,c){return null},this.indentationBlock=function(a,b,c){var e=/^\s*/,f=b,g=b,h=a.getLine(b),i=c||h.length,j=h.match(e)[0].length,k=a.getLength();while(++b<k){h=a.getLine(b);var l=h.match(e)[0].length;if(l==h.length)continue;if(l<=j)break;g=b}if(g>f){var m=a.getLine(g).length;return new d(f,i,g,m)}},this.openingBracketBlock=function(a,b,c,e){var f={row:c,column:e+1},g=a.$findClosingBracket(b,f);if(!g)return;var h=a.foldWidgets[g.row];return h==null&&(h=this.getFoldWidget(a,g.row)),h=="start"&&(g.row--,g.column=a.getLine(g.row).length),d.fromPoints(f,g)}})).call(e.prototype)}),function(){window.require(["ace/ace"],function(a){window.ace||(window.ace={});for(var b in a)a.hasOwnProperty(b)&&(ace[b]=a[b])})}() \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-python-uncompressed.js b/apps/files_texteditor/js/aceeditor/mode-python-uncompressed.js
new file mode 100755
index 00000000000..ad0add6d775
--- /dev/null
+++ b/apps/files_texteditor/js/aceeditor/mode-python-uncompressed.js
@@ -0,0 +1,516 @@
+/* ***** BEGIN LICENSE BLOCK *****
+* Version: MPL 1.1/GPL 2.0/LGPL 2.1
+*
+* The contents of this file are subject to the Mozilla Public License Version
+* 1.1 (the "License"); you may not use this file except in compliance with
+* the License. You may obtain a copy of the License at
+* http://www.mozilla.org/MPL/
+*
+* Software distributed under the License is distributed on an "AS IS" basis,
+* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+* for the specific language governing rights and limitations under the
+* License.
+*
+* The Original Code is Ajax.org Code Editor (ACE).
+*
+* The Initial Developer of the Original Code is
+* Ajax.org B.V.
+* Portions created by the Initial Developer are Copyright (C) 2010
+* the Initial Developer. All Rights Reserved.
+*
+* Contributor(s):
+* Fabian Jakobs <fabian AT ajax DOT org>
+* Colin Gourlay <colin DOT j DOT gourlay AT gmail DOT com>
+*
+* Alternatively, the contents of this file may be used under the terms of
+* either the GNU General Public License Version 2 or later (the "GPL"), or
+* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+* in which case the provisions of the GPL or the LGPL are applicable instead
+* of those above. If you wish to allow use of your version of this file only
+* under the terms of either the GPL or the LGPL, and not to allow others to
+* use your version of this file under the terms of the MPL, indicate your
+* decision by deleting the provisions above and replace them with the notice
+* and other provisions required by the GPL or the LGPL. If you do not delete
+* the provisions above, a recipient may use your version of this file under
+* the terms of any one of the MPL, the GPL or the LGPL.
+*
+* ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/python', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/python_highlight_rules', 'ace/mode/folding/pythonic', 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextMode = require("./text").Mode;
+var Tokenizer = require("../tokenizer").Tokenizer;
+var PythonHighlightRules = require("./python_highlight_rules").PythonHighlightRules;
+var PythonFoldMode = require("./folding/pythonic").FoldMode;
+var Range = require("../range").Range;
+
+var Mode = function() {
+ this.$tokenizer = new Tokenizer(new PythonHighlightRules().getRules());
+ this.foldingRules = new PythonFoldMode("\\:");
+};
+oop.inherits(Mode, TextMode);
+
+(function() {
+
+ this.toggleCommentLines = function(state, doc, startRow, endRow) {
+ var outdent = true;
+ var re = /^(\s*)#/;
+
+ for (var i=startRow; i<= endRow; i++) {
+ if (!re.test(doc.getLine(i))) {
+ outdent = false;
+ break;
+ }
+ }
+
+ if (outdent) {
+ var deleteRange = new Range(0, 0, 0, 0);
+ for (var i=startRow; i<= endRow; i++)
+ {
+ var line = doc.getLine(i);
+ var m = line.match(re);
+ deleteRange.start.row = i;
+ deleteRange.end.row = i;
+ deleteRange.end.column = m[0].length;
+ doc.replace(deleteRange, m[1]);
+ }
+ }
+ else {
+ doc.indentRows(startRow, endRow, "#");
+ }
+ };
+
+ this.getNextLineIndent = function(state, line, tab) {
+ var indent = this.$getIndent(line);
+
+ var tokenizedLine = this.$tokenizer.getLineTokens(line, state);
+ var tokens = tokenizedLine.tokens;
+
+ if (tokens.length && tokens[tokens.length-1].type == "comment") {
+ return indent;
+ }
+
+ if (state == "start") {
+ var match = line.match(/^.*[\{\(\[\:]\s*$/);
+ if (match) {
+ indent += tab;
+ }
+ }
+
+ return indent;
+ };
+
+ var outdents = {
+ "pass": 1,
+ "return": 1,
+ "raise": 1,
+ "break": 1,
+ "continue": 1
+ };
+
+ this.checkOutdent = function(state, line, input) {
+ if (input !== "\r\n" && input !== "\r" && input !== "\n")
+ return false;
+
+ var tokens = this.$tokenizer.getLineTokens(line.trim(), state).tokens;
+
+ if (!tokens)
+ return false;
+
+ // ignore trailing comments
+ do {
+ var last = tokens.pop();
+ } while (last && (last.type == "comment" || (last.type == "text" && last.value.match(/^\s+$/))));
+
+ if (!last)
+ return false;
+
+ return (last.type == "keyword" && outdents[last.value]);
+ };
+
+ this.autoOutdent = function(state, doc, row) {
+ // outdenting in python is slightly different because it always applies
+ // to the next line and only of a new line is inserted
+
+ row += 1;
+ var indent = this.$getIndent(doc.getLine(row));
+ var tab = doc.getTabString();
+ if (indent.slice(-tab.length) == tab)
+ doc.remove(new Range(row, indent.length-tab.length, row, indent.length));
+ };
+
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ * Colin Gourlay <colin DOT j DOT gourlay AT gmail DOT com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK *****
+ *
+ * TODO: python delimiters
+ */
+
+define('ace/mode/python_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var lang = require("../lib/lang");
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var PythonHighlightRules = function() {
+
+ var keywords = lang.arrayToMap(
+ ("and|as|assert|break|class|continue|def|del|elif|else|except|exec|" +
+ "finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|" +
+ "raise|return|try|while|with|yield").split("|")
+ );
+
+ var builtinConstants = lang.arrayToMap(
+ ("True|False|None|NotImplemented|Ellipsis|__debug__").split("|")
+ );
+
+ var builtinFunctions = lang.arrayToMap(
+ ("abs|divmod|input|open|staticmethod|all|enumerate|int|ord|str|any|" +
+ "eval|isinstance|pow|sum|basestring|execfile|issubclass|print|super|" +
+ "binfile|iter|property|tuple|bool|filter|len|range|type|bytearray|" +
+ "float|list|raw_input|unichr|callable|format|locals|reduce|unicode|" +
+ "chr|frozenset|long|reload|vars|classmethod|getattr|map|repr|xrange|" +
+ "cmp|globals|max|reversed|zip|compile|hasattr|memoryview|round|" +
+ "__import__|complex|hash|min|set|apply|delattr|help|next|setattr|" +
+ "buffer|dict|hex|object|slice|coerce|dir|id|oct|sorted|intern").split("|")
+ );
+
+ var futureReserved = lang.arrayToMap(
+ ("").split("|")
+ );
+
+ var strPre = "(?:r|u|ur|R|U|UR|Ur|uR)?";
+
+ var decimalInteger = "(?:(?:[1-9]\\d*)|(?:0))";
+ var octInteger = "(?:0[oO]?[0-7]+)";
+ var hexInteger = "(?:0[xX][\\dA-Fa-f]+)";
+ var binInteger = "(?:0[bB][01]+)";
+ var integer = "(?:" + decimalInteger + "|" + octInteger + "|" + hexInteger + "|" + binInteger + ")";
+
+ var exponent = "(?:[eE][+-]?\\d+)";
+ var fraction = "(?:\\.\\d+)";
+ var intPart = "(?:\\d+)";
+ var pointFloat = "(?:(?:" + intPart + "?" + fraction + ")|(?:" + intPart + "\\.))";
+ var exponentFloat = "(?:(?:" + pointFloat + "|" + intPart + ")" + exponent + ")";
+ var floatNumber = "(?:" + exponentFloat + "|" + pointFloat + ")";
+
+ this.$rules = {
+ "start" : [ {
+ token : "comment",
+ regex : "#.*$"
+ }, {
+ token : "string", // """ string
+ regex : strPre + '"{3}(?:[^\\\\]|\\\\.)*?"{3}'
+ }, {
+ token : "string", // multi line """ string start
+ merge : true,
+ regex : strPre + '"{3}.*$',
+ next : "qqstring"
+ }, {
+ token : "string", // " string
+ regex : strPre + '"(?:[^\\\\]|\\\\.)*?"'
+ }, {
+ token : "string", // ''' string
+ regex : strPre + "'{3}(?:[^\\\\]|\\\\.)*?'{3}"
+ }, {
+ token : "string", // multi line ''' string start
+ merge : true,
+ regex : strPre + "'{3}.*$",
+ next : "qstring"
+ }, {
+ token : "string", // ' string
+ regex : strPre + "'(?:[^\\\\]|\\\\.)*?'"
+ }, {
+ token : "constant.numeric", // imaginary
+ regex : "(?:" + floatNumber + "|\\d+)[jJ]\\b"
+ }, {
+ token : "constant.numeric", // float
+ regex : floatNumber
+ }, {
+ token : "constant.numeric", // long integer
+ regex : integer + "[lL]\\b"
+ }, {
+ token : "constant.numeric", // integer
+ regex : integer + "\\b"
+ }, {
+ token : function(value) {
+ if (keywords.hasOwnProperty(value))
+ return "keyword";
+ else if (builtinConstants.hasOwnProperty(value))
+ return "constant.language";
+ else if (futureReserved.hasOwnProperty(value))
+ return "invalid.illegal";
+ else if (builtinFunctions.hasOwnProperty(value))
+ return "support.function";
+ else if (value == "debugger")
+ return "invalid.deprecated";
+ else
+ return "identifier";
+ },
+ regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
+ }, {
+ token : "keyword.operator",
+ regex : "\\+|\\-|\\*|\\*\\*|\\/|\\/\\/|%|<<|>>|&|\\||\\^|~|<|>|<=|=>|==|!=|<>|="
+ }, {
+ token : "lparen.paren",
+ regex : "[\\[\\(\\{]"
+ }, {
+ token : "paren.rparen",
+ regex : "[\\]\\)\\}]"
+ }, {
+ token : "text",
+ regex : "\\s+"
+ } ],
+ "qqstring" : [ {
+ token : "string", // multi line """ string end
+ regex : '(?:[^\\\\]|\\\\.)*?"{3}',
+ next : "start"
+ }, {
+ token : "string",
+ merge : true,
+ regex : '.+'
+ } ],
+ "qstring" : [ {
+ token : "string", // multi line ''' string end
+ regex : "(?:[^\\\\]|\\\\.)*?'{3}",
+ next : "start"
+ }, {
+ token : "string",
+ merge : true,
+ regex : '.+'
+ } ]
+ };
+};
+
+oop.inherits(PythonHighlightRules, TextHighlightRules);
+
+exports.PythonHighlightRules = PythonHighlightRules;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/pythonic', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var BaseFoldMode = require("./fold_mode").FoldMode;
+
+var FoldMode = exports.FoldMode = function(markers) {
+ this.foldingStartMarker = new RegExp("(?:([\\[{])|(" + markers + "))(?:\\s*)(?:#.*)?$");
+};
+oop.inherits(FoldMode, BaseFoldMode);
+
+(function() {
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ var line = session.getLine(row);
+ var match = line.match(this.foldingStartMarker);
+ if (match) {
+ if (match[1])
+ return this.openingBracketBlock(session, match[1], row, match.index);
+ if (match[2])
+ return this.indentationBlock(session, row, match.index + match[2].length);
+ return this.indentationBlock(session, row);
+ }
+ }
+
+}).call(FoldMode.prototype);
+
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/fold_mode', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var Range = require("../../range").Range;
+
+var FoldMode = exports.FoldMode = function() {};
+
+(function() {
+
+ this.foldingStartMarker = null;
+ this.foldingStopMarker = null;
+
+ // must return "" if there's no fold, to enable caching
+ this.getFoldWidget = function(session, foldStyle, row) {
+ var line = session.getLine(row);
+ if (this.foldingStartMarker.test(line))
+ return "start";
+ if (foldStyle == "markbeginend"
+ && this.foldingStopMarker
+ && this.foldingStopMarker.test(line))
+ return "end";
+ return "";
+ };
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ return null;
+ };
+
+ this.indentationBlock = function(session, row, column) {
+ var re = /^\s*/;
+ var startRow = row;
+ var endRow = row;
+ var line = session.getLine(row);
+ var startColumn = column || line.length;
+ var startLevel = line.match(re)[0].length;
+ var maxRow = session.getLength()
+
+ while (++row < maxRow) {
+ line = session.getLine(row);
+ var level = line.match(re)[0].length;
+
+ if (level == line.length)
+ continue;
+
+ if (level <= startLevel)
+ break;
+
+ endRow = row;
+ }
+
+ if (endRow > startRow) {
+ var endColumn = session.getLine(endRow).length;
+ return new Range(startRow, startColumn, endRow, endColumn);
+ }
+ };
+
+ this.openingBracketBlock = function(session, bracket, row, column) {
+ var start = {row: row, column: column + 1};
+ var end = session.$findClosingBracket(bracket, start);
+ if (!end)
+ return;
+
+ var fw = session.foldWidgets[end.row];
+ if (fw == null)
+ fw = this.getFoldWidget(session, end.row);
+
+ if (fw == "start") {
+ end.row --;
+ end.column = session.getLine(end.row).length;
+ }
+ return Range.fromPoints(start, end);
+ };
+
+}).call(FoldMode.prototype);
+
+});
+;
+ (function() {
+ window.require(["ace/ace"], function(a) {
+ if (!window.ace)
+ window.ace = {};
+ for (var key in a) if (a.hasOwnProperty(key))
+ ace[key] = a[key];
+ });
+ })();
+ \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-python.js b/apps/files_texteditor/js/aceeditor/mode-python.js
index e0632e253ea..116f838b1d9 100644
--- a/apps/files_texteditor/js/aceeditor/mode-python.js
+++ b/apps/files_texteditor/js/aceeditor/mode-python.js
@@ -1 +1 @@
-define("ace/mode/python",["require","exports","module","pilot/oop","ace/mode/text","ace/tokenizer","ace/mode/python_highlight_rules","ace/mode/matching_brace_outdent","ace/range"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/text").Mode,f=a("ace/tokenizer").Tokenizer,g=a("ace/mode/python_highlight_rules").PythonHighlightRules,h=a("ace/mode/matching_brace_outdent").MatchingBraceOutdent,i=a("ace/range").Range,j=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h};d.inherits(j,e),function(){this.toggleCommentLines=function(a,b,c,d){var e=!0,f=[],g=/^(\s*)#/;for(var h=c;h<=d;h++)if(!g.test(b.getLine(h))){e=!1;break}if(e){var j=new i(0,0,0,0);for(var h=c;h<=d;h++){var k=b.getLine(h),l=k.match(g);j.start.row=h,j.end.row=h,j.end.column=l[0].length,b.replace(j,l[1])}}else b.indentRows(c,d,"#")},this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=this.$tokenizer.getLineTokens(b,a),f=e.tokens,g=e.state;if(f.length&&f[f.length-1].type=="comment")return d;if(a=="start"){var h=b.match(/^.*[\{\(\[\:]\s*$/);h&&(d+=c)}return d},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)}}.call(j.prototype),b.Mode=j}),define("ace/mode/python_highlight_rules",["require","exports","module","pilot/oop","pilot/lang","ace/mode/text_highlight_rules"],function(a,b,c){var d=a("pilot/oop"),e=a("pilot/lang"),f=a("ace/mode/text_highlight_rules").TextHighlightRules,g=function(){var a=e.arrayToMap("and|as|assert|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|raise|return|try|while|with|yield".split("|")),b=e.arrayToMap("True|False|None|NotImplemented|Ellipsis|__debug__".split("|")),c=e.arrayToMap("abs|divmod|input|open|staticmethod|all|enumerate|int|ord|str|any|eval|isinstance|pow|sum|basestring|execfile|issubclass|print|super|binfile|iter|property|tuple|bool|filter|len|range|type|bytearray|float|list|raw_input|unichr|callable|format|locals|reduce|unicode|chr|frozenset|long|reload|vars|classmethod|getattr|map|repr|xrange|cmp|globals|max|reversed|zip|compile|hasattr|memoryview|round|__import__|complex|hash|min|set|apply|delattr|help|next|setattr|buffer|dict|hex|object|slice|coerce|dir|id|oct|sorted|intern".split("|")),d=e.arrayToMap("".split("|")),f="(?:r|u|ur|R|U|UR|Ur|uR)?",g="(?:(?:[1-9]\\d*)|(?:0))",h="(?:0[oO]?[0-7]+)",i="(?:0[xX][\\dA-Fa-f]+)",j="(?:0[bB][01]+)",k="(?:"+g+"|"+h+"|"+i+"|"+j+")",l="(?:[eE][+-]?\\d+)",m="(?:\\.\\d+)",n="(?:\\d+)",o="(?:(?:"+n+"?"+m+")|(?:"+n+"\\.))",p="(?:(?:"+o+"|"+n+")"+l+")",q="(?:"+p+"|"+o+")";this.$rules={start:[{token:"comment",regex:"#.*$"},{token:"string",regex:f+'"{3}(?:[^\\\\]|\\\\.)*?"{3}'},{token:"string",merge:!0,regex:f+'"{3}.*$',next:"qqstring"},{token:"string",regex:f+'"(?:[^\\\\]|\\\\.)*?"'},{token:"string",regex:f+"'{3}(?:[^\\\\]|\\\\.)*?'{3}"},{token:"string",merge:!0,regex:f+"'{3}.*$",next:"qstring"},{token:"string",regex:f+"'(?:[^\\\\]|\\\\.)*?'"},{token:"constant.numeric",regex:"(?:"+q+"|\\d+)[jJ]\\b"},{token:"constant.numeric",regex:q},{token:"constant.numeric",regex:k+"[lL]\\b"},{token:"constant.numeric",regex:k+"\\b"},{token:function(e){return a.hasOwnProperty(e)?"keyword":b.hasOwnProperty(e)?"constant.language":d.hasOwnProperty(e)?"invalid.illegal":c.hasOwnProperty(e)?"support.function":e=="debugger"?"invalid.deprecated":"identifier"},regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"\\+|\\-|\\*|\\*\\*|\\/|\\/\\/|%|<<|>>|&|\\||\\^|~|<|>|<=|=>|==|!=|<>|="},{token:"lparen",regex:"[\\[\\(\\{]"},{token:"rparen",regex:"[\\]\\)\\}]"},{token:"text",regex:"\\s+"}],qqstring:[{token:"string",regex:'(?:[^\\\\]|\\\\.)*?"{3}',next:"start"},{token:"string",merge:!0,regex:".+"}],qstring:[{token:"string",regex:"(?:[^\\\\]|\\\\.)*?'{3}",next:"start"},{token:"string",merge:!0,regex:".+"}]}};d.inherits(g,f),b.PythonHighlightRules=g}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(a,b,c){var d=a("ace/range").Range,e=function(){};(function(){this.checkOutdent=function(a,b){return/^\s+$/.test(a)?/^\s*\}/.test(b):!1},this.autoOutdent=function(a,b){var c=a.getLine(b),e=c.match(/^(\s*\})/);if(!e)return 0;var f=e[1].length,g=a.findMatchingBracket({row:b,column:f});if(!g||g.row==b)return 0;var h=this.$getIndent(a.getLine(g.row));a.replace(new d(b,0,b,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""}}).call(e.prototype),b.MatchingBraceOutdent=e}) \ No newline at end of file
+define("ace/mode/python",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/python_highlight_rules","ace/mode/folding/pythonic","ace/range"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text").Mode,f=a("../tokenizer").Tokenizer,g=a("./python_highlight_rules").PythonHighlightRules,h=a("./folding/pythonic").FoldMode,i=a("../range").Range,j=function(){this.$tokenizer=new f((new g).getRules()),this.foldingRules=new h("\\:")};d.inherits(j,e),function(){this.toggleCommentLines=function(a,b,c,d){var e=!0,f=/^(\s*)#/;for(var g=c;g<=d;g++)if(!f.test(b.getLine(g))){e=!1;break}if(e){var h=new i(0,0,0,0);for(var g=c;g<=d;g++){var j=b.getLine(g),k=j.match(f);h.start.row=g,h.end.row=g,h.end.column=k[0].length,b.replace(h,k[1])}}else b.indentRows(c,d,"#")},this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=this.$tokenizer.getLineTokens(b,a),f=e.tokens;if(f.length&&f[f.length-1].type=="comment")return d;if(a=="start"){var g=b.match(/^.*[\{\(\[\:]\s*$/);g&&(d+=c)}return d};var a={pass:1,"return":1,raise:1,"break":1,"continue":1};this.checkOutdent=function(b,c,d){if(d!=="\r\n"&&d!=="\r"&&d!=="\n")return!1;var e=this.$tokenizer.getLineTokens(c.trim(),b).tokens;if(!e)return!1;do var f=e.pop();while(f&&(f.type=="comment"||f.type=="text"&&f.value.match(/^\s+$/)));return f?f.type=="keyword"&&a[f.value]:!1},this.autoOutdent=function(a,b,c){c+=1;var d=this.$getIndent(b.getLine(c)),e=b.getTabString();d.slice(-e.length)==e&&b.remove(new i(c,d.length-e.length,c,d.length))}}.call(j.prototype),b.Mode=j}),define("ace/mode/python_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("../lib/lang"),f=a("./text_highlight_rules").TextHighlightRules,g=function(){var a=e.arrayToMap("and|as|assert|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|raise|return|try|while|with|yield".split("|")),b=e.arrayToMap("True|False|None|NotImplemented|Ellipsis|__debug__".split("|")),c=e.arrayToMap("abs|divmod|input|open|staticmethod|all|enumerate|int|ord|str|any|eval|isinstance|pow|sum|basestring|execfile|issubclass|print|super|binfile|iter|property|tuple|bool|filter|len|range|type|bytearray|float|list|raw_input|unichr|callable|format|locals|reduce|unicode|chr|frozenset|long|reload|vars|classmethod|getattr|map|repr|xrange|cmp|globals|max|reversed|zip|compile|hasattr|memoryview|round|__import__|complex|hash|min|set|apply|delattr|help|next|setattr|buffer|dict|hex|object|slice|coerce|dir|id|oct|sorted|intern".split("|")),d=e.arrayToMap("".split("|")),f="(?:r|u|ur|R|U|UR|Ur|uR)?",g="(?:(?:[1-9]\\d*)|(?:0))",h="(?:0[oO]?[0-7]+)",i="(?:0[xX][\\dA-Fa-f]+)",j="(?:0[bB][01]+)",k="(?:"+g+"|"+h+"|"+i+"|"+j+")",l="(?:[eE][+-]?\\d+)",m="(?:\\.\\d+)",n="(?:\\d+)",o="(?:(?:"+n+"?"+m+")|(?:"+n+"\\.))",p="(?:(?:"+o+"|"+n+")"+l+")",q="(?:"+p+"|"+o+")";this.$rules={start:[{token:"comment",regex:"#.*$"},{token:"string",regex:f+'"{3}(?:[^\\\\]|\\\\.)*?"{3}'},{token:"string",merge:!0,regex:f+'"{3}.*$',next:"qqstring"},{token:"string",regex:f+'"(?:[^\\\\]|\\\\.)*?"'},{token:"string",regex:f+"'{3}(?:[^\\\\]|\\\\.)*?'{3}"},{token:"string",merge:!0,regex:f+"'{3}.*$",next:"qstring"},{token:"string",regex:f+"'(?:[^\\\\]|\\\\.)*?'"},{token:"constant.numeric",regex:"(?:"+q+"|\\d+)[jJ]\\b"},{token:"constant.numeric",regex:q},{token:"constant.numeric",regex:k+"[lL]\\b"},{token:"constant.numeric",regex:k+"\\b"},{token:function(e){return a.hasOwnProperty(e)?"keyword":b.hasOwnProperty(e)?"constant.language":d.hasOwnProperty(e)?"invalid.illegal":c.hasOwnProperty(e)?"support.function":e=="debugger"?"invalid.deprecated":"identifier"},regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"\\+|\\-|\\*|\\*\\*|\\/|\\/\\/|%|<<|>>|&|\\||\\^|~|<|>|<=|=>|==|!=|<>|="},{token:"lparen.paren",regex:"[\\[\\(\\{]"},{token:"paren.rparen",regex:"[\\]\\)\\}]"},{token:"text",regex:"\\s+"}],qqstring:[{token:"string",regex:'(?:[^\\\\]|\\\\.)*?"{3}',next:"start"},{token:"string",merge:!0,regex:".+"}],qstring:[{token:"string",regex:"(?:[^\\\\]|\\\\.)*?'{3}",next:"start"},{token:"string",merge:!0,regex:".+"}]}};d.inherits(g,f),b.PythonHighlightRules=g}),define("ace/mode/folding/pythonic",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("./fold_mode").FoldMode,f=b.FoldMode=function(a){this.foldingStartMarker=new RegExp("(?:([\\[{])|("+a+"))(?:\\s*)(?:#.*)?$")};d.inherits(f,e),function(){this.getFoldWidgetRange=function(a,b,c){var d=a.getLine(c),e=d.match(this.foldingStartMarker);if(e)return e[1]?this.openingBracketBlock(a,e[1],c,e.index):e[2]?this.indentationBlock(a,c,e.index+e[2].length):this.indentationBlock(a,c)}}.call(f.prototype)}),define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"],function(a,b,c){"use strict";var d=a("../../range").Range,e=b.FoldMode=function(){};((function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(a,b,c){var d=a.getLine(c);return this.foldingStartMarker.test(d)?"start":b=="markbeginend"&&this.foldingStopMarker&&this.foldingStopMarker.test(d)?"end":""},this.getFoldWidgetRange=function(a,b,c){return null},this.indentationBlock=function(a,b,c){var e=/^\s*/,f=b,g=b,h=a.getLine(b),i=c||h.length,j=h.match(e)[0].length,k=a.getLength();while(++b<k){h=a.getLine(b);var l=h.match(e)[0].length;if(l==h.length)continue;if(l<=j)break;g=b}if(g>f){var m=a.getLine(g).length;return new d(f,i,g,m)}},this.openingBracketBlock=function(a,b,c,e){var f={row:c,column:e+1},g=a.$findClosingBracket(b,f);if(!g)return;var h=a.foldWidgets[g.row];return h==null&&(h=this.getFoldWidget(a,g.row)),h=="start"&&(g.row--,g.column=a.getLine(g.row).length),d.fromPoints(f,g)}})).call(e.prototype)}),function(){window.require(["ace/ace"],function(a){window.ace||(window.ace={});for(var b in a)a.hasOwnProperty(b)&&(ace[b]=a[b])})}() \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-ruby-uncompressed.js b/apps/files_texteditor/js/aceeditor/mode-ruby-uncompressed.js
new file mode 100755
index 00000000000..96de75ef8ba
--- /dev/null
+++ b/apps/files_texteditor/js/aceeditor/mode-ruby-uncompressed.js
@@ -0,0 +1,401 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ * Shlomo Zalman Heigh <shlomozalmanheigh AT gmail DOT com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/ruby', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/ruby_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextMode = require("./text").Mode;
+var Tokenizer = require("../tokenizer").Tokenizer;
+var RubyHighlightRules = require("./ruby_highlight_rules").RubyHighlightRules;
+var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
+var Range = require("../range").Range;
+
+var Mode = function() {
+ this.$tokenizer = new Tokenizer(new RubyHighlightRules().getRules());
+ this.$outdent = new MatchingBraceOutdent();
+};
+oop.inherits(Mode, TextMode);
+
+(function() {
+
+ this.toggleCommentLines = function(state, doc, startRow, endRow) {
+ var outdent = true;
+ var re = /^(\s*)#/;
+
+ for (var i=startRow; i<= endRow; i++) {
+ if (!re.test(doc.getLine(i))) {
+ outdent = false;
+ break;
+ }
+ }
+
+ if (outdent) {
+ var deleteRange = new Range(0, 0, 0, 0);
+ for (var i=startRow; i<= endRow; i++)
+ {
+ var line = doc.getLine(i);
+ var m = line.match(re);
+ deleteRange.start.row = i;
+ deleteRange.end.row = i;
+ deleteRange.end.column = m[0].length;
+ doc.replace(deleteRange, m[1]);
+ }
+ }
+ else {
+ doc.indentRows(startRow, endRow, "#");
+ }
+ };
+
+ this.getNextLineIndent = function(state, line, tab) {
+ var indent = this.$getIndent(line);
+
+ var tokenizedLine = this.$tokenizer.getLineTokens(line, state);
+ var tokens = tokenizedLine.tokens;
+
+ if (tokens.length && tokens[tokens.length-1].type == "comment") {
+ return indent;
+ }
+
+ if (state == "start") {
+ var match = line.match(/^.*[\{\(\[]\s*$/);
+ if (match) {
+ indent += tab;
+ }
+ }
+
+ return indent;
+ };
+
+ this.checkOutdent = function(state, line, input) {
+ return this.$outdent.checkOutdent(line, input);
+ };
+
+ this.autoOutdent = function(state, doc, row) {
+ this.$outdent.autoOutdent(doc, row);
+ };
+
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ * Shlomo Zalman Heigh <shlomozalmanheigh AT gmail DOT com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/ruby_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var lang = require("../lib/lang");
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var RubyHighlightRules = function() {
+
+ var builtinFunctions = lang.arrayToMap(
+ ("abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|" +
+ "assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|" +
+ "assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|" +
+ "assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|" +
+ "assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|" +
+ "assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|" +
+ "attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|" +
+ "caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|" +
+ "exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|" +
+ "gsub!|get_via_redirect|h|host!|https?|https!|include|Integer|lambda|link_to|" +
+ "link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|" +
+ "p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|" +
+ "raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|" +
+ "set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|" +
+ "throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|" +
+ "render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|" +
+ "content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|" +
+ "fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|" +
+ "time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|" +
+ "select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|" +
+ "file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|" +
+ "protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|" +
+ "send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|" +
+ "validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|" +
+ "validates_inclusion_of|validates_numericality_of|validates_with|validates_each|" +
+ "authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|" +
+ "filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|" +
+ "translate|localize|extract_locale_from_tld|t|l|caches_page|expire_page|caches_action|expire_action|" +
+ "cache|expire_fragment|expire_cache_for|observe|cache_sweeper|" +
+ "has_many|has_one|belongs_to|has_and_belongs_to_many").split("|")
+ );
+
+ var keywords = lang.arrayToMap(
+ ("alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|" +
+ "__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|" +
+ "redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield").split("|")
+ );
+
+ var buildinConstants = lang.arrayToMap(
+ ("true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|" +
+ "RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING").split("|")
+ );
+
+ var builtinVariables = lang.arrayToMap(
+ ("\$DEBUG|\$defout|\$FILENAME|\$LOAD_PATH|\$SAFE|\$stdin|\$stdout|\$stderr|\$VERBOSE|" +
+ "$!|root_url|flash|session|cookies|params|request|response|logger").split("|")
+ );
+
+ // regexp must not have capturing parentheses. Use (?:) instead.
+ // regexps are ordered -> the first match is used
+
+ this.$rules = {
+ "start" : [
+ {
+ token : "comment",
+ regex : "#.*$"
+ }, {
+ token : "comment", // multi line comment
+ merge : true,
+ regex : "^\=begin$",
+ next : "comment"
+ }, {
+ token : "string.regexp",
+ regex : "[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)"
+ }, {
+ token : "string", // single line
+ regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
+ }, {
+ token : "string", // single line
+ regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
+ }, {
+ token : "string", // backtick string
+ regex : "[`](?:(?:\\\\.)|(?:[^'\\\\]))*?[`]"
+ }, {
+ token : "text", // namespaces aren't symbols
+ regex : "::"
+ }, {
+ token : "variable.instancce", // instance variable
+ regex : "@{1,2}(?:[a-zA-Z_]|\d)+"
+ }, {
+ token : "variable.class", // class name
+ regex : "[A-Z](?:[a-zA-Z_]|\d)+"
+ }, {
+ token : "string", // symbol
+ regex : "[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?"
+ }, {
+ token : "constant.numeric", // hex
+ regex : "0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\b"
+ }, {
+ token : "constant.numeric", // float
+ regex : "[+-]?\\d(?:\\d|_(?=\\d))*(?:(?:\\.\\d(?:\\d|_(?=\\d))*)?(?:[eE][+-]?\\d+)?)?\\b"
+ }, {
+ token : "constant.language.boolean",
+ regex : "(?:true|false)\\b"
+ }, {
+ token : function(value) {
+ if (value == "self")
+ return "variable.language";
+ else if (keywords.hasOwnProperty(value))
+ return "keyword";
+ else if (buildinConstants.hasOwnProperty(value))
+ return "constant.language";
+ else if (builtinVariables.hasOwnProperty(value))
+ return "variable.language";
+ else if (builtinFunctions.hasOwnProperty(value))
+ return "support.function";
+ else if (value == "debugger")
+ return "invalid.deprecated";
+ else
+ return "identifier";
+ },
+ // TODO: Unicode escape sequences
+ // TODO: Unicode identifiers
+ regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
+ }, {
+ token : "keyword.operator",
+ regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"
+ }, {
+ token : "paren.lparen",
+ regex : "[[({]"
+ }, {
+ token : "paren.rparen",
+ regex : "[\\])}]"
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }
+ ],
+ "comment" : [
+ {
+ token : "comment", // closing comment
+ regex : "^\=end$",
+ next : "start"
+ }, {
+ token : "comment", // comment spanning whole line
+ merge : true,
+ regex : ".+"
+ }
+ ]
+ };
+};
+
+oop.inherits(RubyHighlightRules, TextHighlightRules);
+
+exports.RubyHighlightRules = RubyHighlightRules;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var Range = require("../range").Range;
+
+var MatchingBraceOutdent = function() {};
+
+(function() {
+
+ this.checkOutdent = function(line, input) {
+ if (! /^\s+$/.test(line))
+ return false;
+
+ return /^\s*\}/.test(input);
+ };
+
+ this.autoOutdent = function(doc, row) {
+ var line = doc.getLine(row);
+ var match = line.match(/^(\s*\})/);
+
+ if (!match) return 0;
+
+ var column = match[1].length;
+ var openBracePos = doc.findMatchingBracket({row: row, column: column});
+
+ if (!openBracePos || openBracePos.row == row) return 0;
+
+ var indent = this.$getIndent(doc.getLine(openBracePos.row));
+ doc.replace(new Range(row, 0, row, column-1), indent);
+ };
+
+ this.$getIndent = function(line) {
+ var match = line.match(/^(\s+)/);
+ if (match) {
+ return match[1];
+ }
+
+ return "";
+ };
+
+}).call(MatchingBraceOutdent.prototype);
+
+exports.MatchingBraceOutdent = MatchingBraceOutdent;
+});
+;
+ (function() {
+ window.require(["ace/ace"], function(a) {
+ if (!window.ace)
+ window.ace = {};
+ for (var key in a) if (a.hasOwnProperty(key))
+ ace[key] = a[key];
+ });
+ })();
+ \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-ruby.js b/apps/files_texteditor/js/aceeditor/mode-ruby.js
index 43bfa2a5d8a..2eeb69f5d5a 100644
--- a/apps/files_texteditor/js/aceeditor/mode-ruby.js
+++ b/apps/files_texteditor/js/aceeditor/mode-ruby.js
@@ -1 +1 @@
-define("ace/mode/ruby",["require","exports","module","pilot/oop","ace/mode/text","ace/tokenizer","ace/mode/ruby_highlight_rules","ace/mode/matching_brace_outdent","ace/range"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/text").Mode,f=a("ace/tokenizer").Tokenizer,g=a("ace/mode/ruby_highlight_rules").RubyHighlightRules,h=a("ace/mode/matching_brace_outdent").MatchingBraceOutdent,i=a("ace/range").Range,j=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h};d.inherits(j,e),function(){this.toggleCommentLines=function(a,b,c,d){var e=!0,f=[],g=/^(\s*)#/;for(var h=c;h<=d;h++)if(!g.test(b.getLine(h))){e=!1;break}if(e){var j=new i(0,0,0,0);for(var h=c;h<=d;h++){var k=b.getLine(h),l=k.match(g);j.start.row=h,j.end.row=h,j.end.column=l[0].length,b.replace(j,l[1])}}else b.indentRows(c,d,"#")},this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=this.$tokenizer.getLineTokens(b,a),f=e.tokens,g=e.state;if(f.length&&f[f.length-1].type=="comment")return d;if(a=="start"){var h=b.match(/^.*[\{\(\[]\s*$/);h&&(d+=c)}return d},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)}}.call(j.prototype),b.Mode=j}),define("ace/mode/ruby_highlight_rules",["require","exports","module","pilot/oop","pilot/lang","ace/mode/text_highlight_rules"],function(a,b,c){var d=a("pilot/oop"),e=a("pilot/lang"),f=a("ace/mode/text_highlight_rules").TextHighlightRules,g=function(){var a=e.arrayToMap("abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|gsub!|get_via_redirect|h|host!|https?|https!|include|Integer|lambda|link_to|link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|validates_inclusion_of|validates_numericality_of|validates_with|validates_each|authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|translate|localize|extract_locale_from_tld|t|l|caches_page|expire_page|caches_action|expire_action|cache|expire_fragment|expire_cache_for|observe|cache_sweeper|has_many|has_one|belongs_to|has_and_belongs_to_many".split("|")),b=e.arrayToMap("alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield".split("|")),c=e.arrayToMap("true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING".split("|")),d=e.arrayToMap("$DEBUG|$defout|$FILENAME|$LOAD_PATH|$SAFE|$stdin|$stdout|$stderr|$VERBOSE|$!|root_url|flash|session|cookies|params|request|response|logger".split("|"));this.$rules={start:[{token:"comment",regex:"#.*$"},{token:"comment",merge:!0,regex:"^=begin$",next:"comment"},{token:"string.regexp",regex:"[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"string",regex:"[`](?:(?:\\\\.)|(?:[^'\\\\]))*?[`]"},{token:"text",regex:"::"},{token:"variable.instancce",regex:"@{1,2}(?:[a-zA-Z_]|d)+"},{token:"variable.class",regex:"[A-Z](?:[a-zA-Z_]|d)+"},{token:"string",regex:"[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\b"},{token:"constant.numeric",regex:"[+-]?\\d(?:\\d|_(?=\\d))*(?:(?:\\.\\d(?:\\d|_(?=\\d))*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:function(e){return e=="self"?"variable.language":b.hasOwnProperty(e)?"keyword":c.hasOwnProperty(e)?"constant.language":d.hasOwnProperty(e)?"variable.language":a.hasOwnProperty(e)?"support.function":e=="debugger"?"invalid.deprecated":"identifier"},regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"},{token:"lparen",regex:"[[({]"},{token:"rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:"^=end$",next:"start"},{token:"comment",merge:!0,regex:".+"}]}};d.inherits(g,f),b.RubyHighlightRules=g}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(a,b,c){var d=a("ace/range").Range,e=function(){};(function(){this.checkOutdent=function(a,b){return/^\s+$/.test(a)?/^\s*\}/.test(b):!1},this.autoOutdent=function(a,b){var c=a.getLine(b),e=c.match(/^(\s*\})/);if(!e)return 0;var f=e[1].length,g=a.findMatchingBracket({row:b,column:f});if(!g||g.row==b)return 0;var h=this.$getIndent(a.getLine(g.row));a.replace(new d(b,0,b,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""}}).call(e.prototype),b.MatchingBraceOutdent=e}) \ No newline at end of file
+define("ace/mode/ruby",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/ruby_highlight_rules","ace/mode/matching_brace_outdent","ace/range"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text").Mode,f=a("../tokenizer").Tokenizer,g=a("./ruby_highlight_rules").RubyHighlightRules,h=a("./matching_brace_outdent").MatchingBraceOutdent,i=a("../range").Range,j=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h};d.inherits(j,e),function(){this.toggleCommentLines=function(a,b,c,d){var e=!0,f=/^(\s*)#/;for(var g=c;g<=d;g++)if(!f.test(b.getLine(g))){e=!1;break}if(e){var h=new i(0,0,0,0);for(var g=c;g<=d;g++){var j=b.getLine(g),k=j.match(f);h.start.row=g,h.end.row=g,h.end.column=k[0].length,b.replace(h,k[1])}}else b.indentRows(c,d,"#")},this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=this.$tokenizer.getLineTokens(b,a),f=e.tokens;if(f.length&&f[f.length-1].type=="comment")return d;if(a=="start"){var g=b.match(/^.*[\{\(\[]\s*$/);g&&(d+=c)}return d},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)}}.call(j.prototype),b.Mode=j}),define("ace/mode/ruby_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("../lib/lang"),f=a("./text_highlight_rules").TextHighlightRules,g=function(){var a=e.arrayToMap("abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|gsub!|get_via_redirect|h|host!|https?|https!|include|Integer|lambda|link_to|link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|validates_inclusion_of|validates_numericality_of|validates_with|validates_each|authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|translate|localize|extract_locale_from_tld|t|l|caches_page|expire_page|caches_action|expire_action|cache|expire_fragment|expire_cache_for|observe|cache_sweeper|has_many|has_one|belongs_to|has_and_belongs_to_many".split("|")),b=e.arrayToMap("alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield".split("|")),c=e.arrayToMap("true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING".split("|")),d=e.arrayToMap("$DEBUG|$defout|$FILENAME|$LOAD_PATH|$SAFE|$stdin|$stdout|$stderr|$VERBOSE|$!|root_url|flash|session|cookies|params|request|response|logger".split("|"));this.$rules={start:[{token:"comment",regex:"#.*$"},{token:"comment",merge:!0,regex:"^=begin$",next:"comment"},{token:"string.regexp",regex:"[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"string",regex:"[`](?:(?:\\\\.)|(?:[^'\\\\]))*?[`]"},{token:"text",regex:"::"},{token:"variable.instancce",regex:"@{1,2}(?:[a-zA-Z_]|d)+"},{token:"variable.class",regex:"[A-Z](?:[a-zA-Z_]|d)+"},{token:"string",regex:"[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\b"},{token:"constant.numeric",regex:"[+-]?\\d(?:\\d|_(?=\\d))*(?:(?:\\.\\d(?:\\d|_(?=\\d))*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:function(e){return e=="self"?"variable.language":b.hasOwnProperty(e)?"keyword":c.hasOwnProperty(e)?"constant.language":d.hasOwnProperty(e)?"variable.language":a.hasOwnProperty(e)?"support.function":e=="debugger"?"invalid.deprecated":"identifier"},regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:"^=end$",next:"start"},{token:"comment",merge:!0,regex:".+"}]}};d.inherits(g,f),b.RubyHighlightRules=g}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(a,b,c){"use strict";var d=a("../range").Range,e=function(){};((function(){this.checkOutdent=function(a,b){return/^\s+$/.test(a)?/^\s*\}/.test(b):!1},this.autoOutdent=function(a,b){var c=a.getLine(b),e=c.match(/^(\s*\})/);if(!e)return 0;var f=e[1].length,g=a.findMatchingBracket({row:b,column:f});if(!g||g.row==b)return 0;var h=this.$getIndent(a.getLine(g.row));a.replace(new d(b,0,b,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""}})).call(e.prototype),b.MatchingBraceOutdent=e}),function(){window.require(["ace/ace"],function(a){window.ace||(window.ace={});for(var b in a)a.hasOwnProperty(b)&&(ace[b]=a[b])})}() \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-scad-uncompressed.js b/apps/files_texteditor/js/aceeditor/mode-scad-uncompressed.js
new file mode 100755
index 00000000000..07e368130ef
--- /dev/null
+++ b/apps/files_texteditor/js/aceeditor/mode-scad-uncompressed.js
@@ -0,0 +1,916 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ * Gastón Kleiman <gaston.kleiman AT gmail DOT com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/scad', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/scad_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/range', 'ace/mode/behaviour/cstyle', 'ace/mode/folding/cstyle'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextMode = require("./text").Mode;
+var Tokenizer = require("../tokenizer").Tokenizer;
+var scadHighlightRules = require("./scad_highlight_rules").scadHighlightRules;
+var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
+var Range = require("../range").Range;
+var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
+var CStyleFoldMode = require("./folding/cstyle").FoldMode;
+
+var Mode = function() {
+ this.$tokenizer = new Tokenizer(new scadHighlightRules().getRules());
+ this.$outdent = new MatchingBraceOutdent();
+ this.$behaviour = new CstyleBehaviour();
+ this.foldingRules = new CStyleFoldMode();
+};
+oop.inherits(Mode, TextMode);
+
+(function() {
+
+ this.toggleCommentLines = function(state, doc, startRow, endRow) {
+ var outdent = true;
+ var re = /^(\s*)\/\//;
+
+ for (var i=startRow; i<= endRow; i++) {
+ if (!re.test(doc.getLine(i))) {
+ outdent = false;
+ break;
+ }
+ }
+
+ if (outdent) {
+ var deleteRange = new Range(0, 0, 0, 0);
+ for (var i=startRow; i<= endRow; i++)
+ {
+ var line = doc.getLine(i);
+ var m = line.match(re);
+ deleteRange.start.row = i;
+ deleteRange.end.row = i;
+ deleteRange.end.column = m[0].length;
+ doc.replace(deleteRange, m[1]);
+ }
+ }
+ else {
+ doc.indentRows(startRow, endRow, "//");
+ }
+ };
+
+ this.getNextLineIndent = function(state, line, tab) {
+ var indent = this.$getIndent(line);
+
+ var tokenizedLine = this.$tokenizer.getLineTokens(line, state);
+ var tokens = tokenizedLine.tokens;
+ var endState = tokenizedLine.state;
+
+ if (tokens.length && tokens[tokens.length-1].type == "comment") {
+ return indent;
+ }
+
+ if (state == "start") {
+ var match = line.match(/^.*[\{\(\[]\s*$/);
+ if (match) {
+ indent += tab;
+ }
+ } else if (state == "doc-start") {
+ if (endState == "start") {
+ return "";
+ }
+ var match = line.match(/^\s*(\/?)\*/);
+ if (match) {
+ if (match[1]) {
+ indent += " ";
+ }
+ indent += "* ";
+ }
+ }
+
+ return indent;
+ };
+
+ this.checkOutdent = function(state, line, input) {
+ return this.$outdent.checkOutdent(line, input);
+ };
+
+ this.autoOutdent = function(state, doc, row) {
+ this.$outdent.autoOutdent(doc, row);
+ };
+
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ * Gastón Kleiman <gaston.kleiman AT gmail DOT com>
+ *
+ * Based on Bespin's C/C++ Syntax Plugin by Marc McIntyre.
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/scad_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/mode/doc_comment_highlight_rules', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var lang = require("../lib/lang");
+var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var scadHighlightRules = function() {
+
+ var keywords = lang.arrayToMap(
+ ("module|if|else|for").split("|")
+ );
+
+ var buildinConstants = lang.arrayToMap(
+ ("NULL").split("|")
+ );
+
+ // regexp must not have capturing parentheses. Use (?:) instead.
+ // regexps are ordered -> the first match is used
+
+ this.$rules = {
+ "start" : [
+ {
+ token : "comment",
+ regex : "\\/\\/.*$"
+ },
+ new DocCommentHighlightRules().getStartRule("start"),
+ {
+ token : "comment", // multi line comment
+ merge : true,
+ regex : "\\/\\*",
+ next : "comment"
+ }, {
+ token : "string", // single line
+ regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
+ }, {
+ token : "string", // multi line string start
+ regex : '["].*\\\\$',
+ next : "qqstring"
+ }, {
+ token : "string", // single line
+ regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
+ }, {
+ token : "string", // multi line string start
+ regex : "['].*\\\\$",
+ next : "qstring"
+ }, {
+ token : "constant.numeric", // hex
+ regex : "0[xX][0-9a-fA-F]+\\b"
+ }, {
+ token : "constant.numeric", // float
+ regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
+ }, {
+ token : "constant", // <CONSTANT>
+ regex : "<[a-zA-Z0-9.]+>"
+ }, {
+ token : "keyword", // pre-compiler directivs
+ regex : "(?:use|include)"
+ }, {
+ token : function(value) {
+ if (value == "this")
+ return "variable.language";
+ else if (keywords.hasOwnProperty(value))
+ return "keyword";
+ else if (buildinConstants.hasOwnProperty(value))
+ return "constant.language";
+ else
+ return "identifier";
+ },
+ regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
+ }, {
+ token : "keyword.operator",
+ regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|new|delete|typeof|void)"
+ }, {
+ token : "paren.lparen",
+ regex : "[[({]"
+ }, {
+ token : "paren.rparen",
+ regex : "[\\])}]"
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }
+ ],
+ "comment" : [
+ {
+ token : "comment", // closing comment
+ regex : ".*?\\*\\/",
+ next : "start"
+ }, {
+ token : "comment", // comment spanning whole line
+ merge : true,
+ regex : ".+"
+ }
+ ],
+ "qqstring" : [
+ {
+ token : "string",
+ regex : '(?:(?:\\\\.)|(?:[^"\\\\]))*?"',
+ next : "start"
+ }, {
+ token : "string",
+ merge : true,
+ regex : '.+'
+ }
+ ],
+ "qstring" : [
+ {
+ token : "string",
+ regex : "(?:(?:\\\\.)|(?:[^'\\\\]))*?'",
+ next : "start"
+ }, {
+ token : "string",
+ merge : true,
+ regex : '.+'
+ }
+ ]
+ };
+
+ this.embedRules(DocCommentHighlightRules, "doc-",
+ [ new DocCommentHighlightRules().getEndRule("start") ]);
+};
+
+oop.inherits(scadHighlightRules, TextHighlightRules);
+
+exports.scadHighlightRules = scadHighlightRules;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/doc_comment_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var DocCommentHighlightRules = function() {
+
+ this.$rules = {
+ "start" : [ {
+ token : "comment.doc.tag",
+ regex : "@[\\w\\d_]+" // TODO: fix email addresses
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "\\s+"
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "TODO"
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "[^@\\*]+"
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "."
+ }]
+ };
+};
+
+oop.inherits(DocCommentHighlightRules, TextHighlightRules);
+
+(function() {
+
+ this.getStartRule = function(start) {
+ return {
+ token : "comment.doc", // doc comment
+ merge : true,
+ regex : "\\/\\*(?=\\*)",
+ next : start
+ };
+ };
+
+ this.getEndRule = function (start) {
+ return {
+ token : "comment.doc", // closing comment
+ merge : true,
+ regex : "\\*\\/",
+ next : start
+ };
+ };
+
+}).call(DocCommentHighlightRules.prototype);
+
+exports.DocCommentHighlightRules = DocCommentHighlightRules;
+
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var Range = require("../range").Range;
+
+var MatchingBraceOutdent = function() {};
+
+(function() {
+
+ this.checkOutdent = function(line, input) {
+ if (! /^\s+$/.test(line))
+ return false;
+
+ return /^\s*\}/.test(input);
+ };
+
+ this.autoOutdent = function(doc, row) {
+ var line = doc.getLine(row);
+ var match = line.match(/^(\s*\})/);
+
+ if (!match) return 0;
+
+ var column = match[1].length;
+ var openBracePos = doc.findMatchingBracket({row: row, column: column});
+
+ if (!openBracePos || openBracePos.row == row) return 0;
+
+ var indent = this.$getIndent(doc.getLine(openBracePos.row));
+ doc.replace(new Range(row, 0, row, column-1), indent);
+ };
+
+ this.$getIndent = function(line) {
+ var match = line.match(/^(\s+)/);
+ if (match) {
+ return match[1];
+ }
+
+ return "";
+ };
+
+}).call(MatchingBraceOutdent.prototype);
+
+exports.MatchingBraceOutdent = MatchingBraceOutdent;
+});
+/* vim:ts=4:sts=4:sw=4:
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Chris Spencer <chris.ag.spencer AT googlemail DOT com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/behaviour/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var Behaviour = require('../behaviour').Behaviour;
+
+var CstyleBehaviour = function () {
+
+ this.add("braces", "insertion", function (state, action, editor, session, text) {
+ if (text == '{') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '{' + selected + '}',
+ selection: false
+ }
+ } else {
+ return {
+ text: '{}',
+ selection: [1, 1]
+ }
+ }
+ } else if (text == '}') {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '}') {
+ var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});
+ if (matching !== null) {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ } else if (text == "\n") {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '}') {
+ var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column + 1});
+ if (!openBracePos)
+ return null;
+
+ var indent = this.getNextLineIndent(state, line.substring(0, line.length - 1), session.getTabString());
+ var next_indent = this.$getIndent(session.doc.getLine(openBracePos.row));
+
+ return {
+ text: '\n' + indent + '\n' + next_indent,
+ selection: [1, indent.length, 1, indent.length]
+ }
+ }
+ }
+ });
+
+ this.add("braces", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '{') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.end.column, range.end.column + 1);
+ if (rightChar == '}') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+ this.add("parens", "insertion", function (state, action, editor, session, text) {
+ if (text == '(') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '(' + selected + ')',
+ selection: false
+ }
+ } else {
+ return {
+ text: '()',
+ selection: [1, 1]
+ }
+ }
+ } else if (text == ')') {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == ')') {
+ var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});
+ if (matching !== null) {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ }
+ });
+
+ this.add("parens", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '(') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
+ if (rightChar == ')') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+ this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {
+ if (text == '"') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '"' + selected + '"',
+ selection: false
+ }
+ } else {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var leftChar = line.substring(cursor.column-1, cursor.column);
+
+ // We're escaped.
+ if (leftChar == '\\') {
+ return null;
+ }
+
+ // Find what token we're inside.
+ var tokens = session.getTokens(selection.start.row, selection.start.row)[0].tokens;
+ var col = 0, token;
+ var quotepos = -1; // Track whether we're inside an open quote.
+
+ for (var x = 0; x < tokens.length; x++) {
+ token = tokens[x];
+ if (token.type == "string") {
+ quotepos = -1;
+ } else if (quotepos < 0) {
+ quotepos = token.value.indexOf('"');
+ }
+ if ((token.value.length + col) > selection.start.column) {
+ break;
+ }
+ col += tokens[x].value.length;
+ }
+
+ // Try and be smart about when we auto insert.
+ if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf('"') === token.value.length-1)))) {
+ return {
+ text: '""',
+ selection: [1,1]
+ }
+ } else if (token && token.type === "string") {
+ // Ignore input and move right one if we're typing over the closing quote.
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '"') {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ }
+ }
+ });
+
+ this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '"') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
+ if (rightChar == '"') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+}
+oop.inherits(CstyleBehaviour, Behaviour);
+
+exports.CstyleBehaviour = CstyleBehaviour;
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var Range = require("../../range").Range;
+var BaseFoldMode = require("./fold_mode").FoldMode;
+
+var FoldMode = exports.FoldMode = function() {};
+oop.inherits(FoldMode, BaseFoldMode);
+
+(function() {
+
+ this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
+ this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ var line = session.getLine(row);
+ var match = line.match(this.foldingStartMarker);
+ if (match) {
+ var i = match.index;
+
+ if (match[1])
+ return this.openingBracketBlock(session, match[1], row, i);
+
+ var range = session.getCommentFoldRange(row, i + match[0].length);
+ range.end.column -= 2;
+ return range;
+ }
+
+ if (foldStyle !== "markbeginend")
+ return;
+
+ var match = line.match(this.foldingStopMarker);
+ if (match) {
+ var i = match.index + match[0].length;
+
+ if (match[2]) {
+ var range = session.getCommentFoldRange(row, i);
+ range.end.column -= 2;
+ return range;
+ }
+
+ var end = {row: row, column: i};
+ var start = session.$findOpeningBracket(match[1], end);
+
+ if (!start)
+ return;
+
+ start.column++;
+ end.column--;
+
+ return Range.fromPoints(start, end);
+ }
+ };
+
+}).call(FoldMode.prototype);
+
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/fold_mode', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var Range = require("../../range").Range;
+
+var FoldMode = exports.FoldMode = function() {};
+
+(function() {
+
+ this.foldingStartMarker = null;
+ this.foldingStopMarker = null;
+
+ // must return "" if there's no fold, to enable caching
+ this.getFoldWidget = function(session, foldStyle, row) {
+ var line = session.getLine(row);
+ if (this.foldingStartMarker.test(line))
+ return "start";
+ if (foldStyle == "markbeginend"
+ && this.foldingStopMarker
+ && this.foldingStopMarker.test(line))
+ return "end";
+ return "";
+ };
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ return null;
+ };
+
+ this.indentationBlock = function(session, row, column) {
+ var re = /^\s*/;
+ var startRow = row;
+ var endRow = row;
+ var line = session.getLine(row);
+ var startColumn = column || line.length;
+ var startLevel = line.match(re)[0].length;
+ var maxRow = session.getLength()
+
+ while (++row < maxRow) {
+ line = session.getLine(row);
+ var level = line.match(re)[0].length;
+
+ if (level == line.length)
+ continue;
+
+ if (level <= startLevel)
+ break;
+
+ endRow = row;
+ }
+
+ if (endRow > startRow) {
+ var endColumn = session.getLine(endRow).length;
+ return new Range(startRow, startColumn, endRow, endColumn);
+ }
+ };
+
+ this.openingBracketBlock = function(session, bracket, row, column) {
+ var start = {row: row, column: column + 1};
+ var end = session.$findClosingBracket(bracket, start);
+ if (!end)
+ return;
+
+ var fw = session.foldWidgets[end.row];
+ if (fw == null)
+ fw = this.getFoldWidget(session, end.row);
+
+ if (fw == "start") {
+ end.row --;
+ end.column = session.getLine(end.row).length;
+ }
+ return Range.fromPoints(start, end);
+ };
+
+}).call(FoldMode.prototype);
+
+});
+;
+ (function() {
+ window.require(["ace/ace"], function(a) {
+ if (!window.ace)
+ window.ace = {};
+ for (var key in a) if (a.hasOwnProperty(key))
+ ace[key] = a[key];
+ });
+ })();
+ \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-scad.js b/apps/files_texteditor/js/aceeditor/mode-scad.js
index 32054602fa4..1deeef11524 100644
--- a/apps/files_texteditor/js/aceeditor/mode-scad.js
+++ b/apps/files_texteditor/js/aceeditor/mode-scad.js
@@ -1 +1 @@
-define("ace/mode/scad",["require","exports","module","pilot/oop","ace/mode/text","ace/tokenizer","ace/mode/scad_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/mode/behaviour/cstyle"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/text").Mode,f=a("ace/tokenizer").Tokenizer,g=a("ace/mode/scad_highlight_rules").scadHighlightRules,h=a("ace/mode/matching_brace_outdent").MatchingBraceOutdent,i=a("ace/range").Range,j=a("ace/mode/behaviour/cstyle").CstyleBehaviour,k=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h,this.$behaviour=new j};d.inherits(k,e),function(){this.toggleCommentLines=function(a,b,c,d){var e=!0,f=[],g=/^(\s*)\/\//;for(var h=c;h<=d;h++)if(!g.test(b.getLine(h))){e=!1;break}if(e){var j=new i(0,0,0,0);for(var h=c;h<=d;h++){var k=b.getLine(h),l=k.match(g);j.start.row=h,j.end.row=h,j.end.column=l[0].length,b.replace(j,l[1])}}else b.indentRows(c,d,"//")},this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=this.$tokenizer.getLineTokens(b,a),f=e.tokens,g=e.state;if(f.length&&f[f.length-1].type=="comment")return d;if(a=="start"){var h=b.match(/^.*[\{\(\[]\s*$/);h&&(d+=c)}else if(a=="doc-start"){if(g=="start")return"";var h=b.match(/^\s*(\/?)\*/);h&&(h[1]&&(d+=" "),d+="* ")}return d},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)}}.call(k.prototype),b.Mode=k}),define("ace/mode/scad_highlight_rules",["require","exports","module","pilot/oop","pilot/lang","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(a,b,c){var d=a("pilot/oop"),e=a("pilot/lang"),f=a("ace/mode/doc_comment_highlight_rules").DocCommentHighlightRules,g=a("ace/mode/text_highlight_rules").TextHighlightRules,h=function(){var a=e.arrayToMap("module|if|else|for".split("|")),b=e.arrayToMap("NULL".split("|"));this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},(new f).getStartRule("start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:'["].*\\\\$',next:"qqstring"},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"string",regex:"['].*\\\\$",next:"qstring"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant",regex:"<[a-zA-Z0-9.]+>"},{token:"keyword",regex:"(?:use|include)"},{token:function(c){return c=="this"?"variable.language":a.hasOwnProperty(c)?"keyword":b.hasOwnProperty(c)?"constant.language":"identifier"},regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|new|delete|typeof|void)"},{token:"lparen",regex:"[[({]"},{token:"rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"string",regex:'(?:(?:\\\\.)|(?:[^"\\\\]))*?"',next:"start"},{token:"string",merge:!0,regex:".+"}],qstring:[{token:"string",regex:"(?:(?:\\\\.)|(?:[^'\\\\]))*?'",next:"start"},{token:"string",merge:!0,regex:".+"}]},this.embedRules(f,"doc-",[(new f).getEndRule("start")])};d.inherits(h,g),b.scadHighlightRules=h}),define("ace/mode/doc_comment_highlight_rules",["require","exports","module","pilot/oop","ace/mode/text_highlight_rules"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/text_highlight_rules").TextHighlightRules,f=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};d.inherits(f,e),function(){this.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},this.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}}}.call(f.prototype),b.DocCommentHighlightRules=f}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(a,b,c){var d=a("ace/range").Range,e=function(){};(function(){this.checkOutdent=function(a,b){return/^\s+$/.test(a)?/^\s*\}/.test(b):!1},this.autoOutdent=function(a,b){var c=a.getLine(b),e=c.match(/^(\s*\})/);if(!e)return 0;var f=e[1].length,g=a.findMatchingBracket({row:b,column:f});if(!g||g.row==b)return 0;var h=this.$getIndent(a.getLine(g.row));a.replace(new d(b,0,b,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""}}).call(e.prototype),b.MatchingBraceOutdent=e}),define("ace/mode/behaviour/cstyle",["require","exports","module","pilot/oop","ace/mode/behaviour"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/behaviour").Behaviour,f=function(){this.add("braces","insertion",function(a,b,c,d,e){if(e=="{"){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"{"+g+"}",selection:!1}:{text:"{}",selection:[1,1]}}if(e=="}"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var k=d.$findOpeningBracket("}",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}else if(e=="\n"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var l=d.findMatchingBracket({row:h.row,column:h.column+1});if(!l)return!1;var m=this.getNextLineIndent(a,i.substring(0,i.length-1),d.getTabString()),n=this.$getIndent(d.doc.getLine(l.row));return{text:"\n"+m+"\n"+n,selection:[1,m.length,1,m.length]}}}return!1}),this.add("braces","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="{"){var g=d.doc.getLine(e.start.row),h=g.substring(e.end.column,e.end.column+1);if(h=="}"){e.end.column++;return e}}return!1}),this.add("parens","insertion",function(a,b,c,d,e){if(e=="("){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"("+g+")",selection:!1}:{text:"()",selection:[1,1]}}if(e==")"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j==")"){var k=d.$findOpeningBracket(")",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}return!1}),this.add("parens","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="("){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h==")"){e.end.column++;return e}}return!1}),this.add("string_dquotes","insertion",function(a,b,c,d,e){if(e=='"'){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);if(g!=="")return{text:'"'+g+'"',selection:!1};var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column-1,h.column);if(j=="\\")return!1;var k=d.getTokens(f.start.row,f.start.row)[0].tokens,l=0,m,n=-1;for(var o=0;o<k.length;o++){m=k[o],m.type=="string"?n=-1:n<0&&(n=m.value.indexOf('"'));if(m.value.length+l>f.start.column)break;l+=k[o].value.length}if(!m||n<0&&m.type!=="comment"&&(m.type!=="string"||f.start.column!==m.value.length+l-1&&m.value.lastIndexOf('"')===m.value.length-1))return{text:'""',selection:[1,1]};if(m&&m.type==="string"){var p=i.substring(h.column,h.column+1);if(p=='"')return{text:"",selection:[1,1]}}}return!1}),this.add("string_dquotes","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=='"'){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h=='"'){e.end.column++;return e}}return!1})};d.inherits(f,e),b.CstyleBehaviour=f}) \ No newline at end of file
+define("ace/mode/scad",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/scad_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text").Mode,f=a("../tokenizer").Tokenizer,g=a("./scad_highlight_rules").scadHighlightRules,h=a("./matching_brace_outdent").MatchingBraceOutdent,i=a("../range").Range,j=a("./behaviour/cstyle").CstyleBehaviour,k=a("./folding/cstyle").FoldMode,l=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h,this.$behaviour=new j,this.foldingRules=new k};d.inherits(l,e),function(){this.toggleCommentLines=function(a,b,c,d){var e=!0,f=/^(\s*)\/\//;for(var g=c;g<=d;g++)if(!f.test(b.getLine(g))){e=!1;break}if(e){var h=new i(0,0,0,0);for(var g=c;g<=d;g++){var j=b.getLine(g),k=j.match(f);h.start.row=g,h.end.row=g,h.end.column=k[0].length,b.replace(h,k[1])}}else b.indentRows(c,d,"//")},this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=this.$tokenizer.getLineTokens(b,a),f=e.tokens,g=e.state;if(f.length&&f[f.length-1].type=="comment")return d;if(a=="start"){var h=b.match(/^.*[\{\(\[]\s*$/);h&&(d+=c)}else if(a=="doc-start"){if(g=="start")return"";var h=b.match(/^\s*(\/?)\*/);h&&(h[1]&&(d+=" "),d+="* ")}return d},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)}}.call(l.prototype),b.Mode=l}),define("ace/mode/scad_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("../lib/lang"),f=a("./doc_comment_highlight_rules").DocCommentHighlightRules,g=a("./text_highlight_rules").TextHighlightRules,h=function(){var a=e.arrayToMap("module|if|else|for".split("|")),b=e.arrayToMap("NULL".split("|"));this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},(new f).getStartRule("start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:'["].*\\\\$',next:"qqstring"},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"string",regex:"['].*\\\\$",next:"qstring"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant",regex:"<[a-zA-Z0-9.]+>"},{token:"keyword",regex:"(?:use|include)"},{token:function(c){return c=="this"?"variable.language":a.hasOwnProperty(c)?"keyword":b.hasOwnProperty(c)?"constant.language":"identifier"},regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|new|delete|typeof|void)"},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"string",regex:'(?:(?:\\\\.)|(?:[^"\\\\]))*?"',next:"start"},{token:"string",merge:!0,regex:".+"}],qstring:[{token:"string",regex:"(?:(?:\\\\.)|(?:[^'\\\\]))*?'",next:"start"},{token:"string",merge:!0,regex:".+"}]},this.embedRules(f,"doc-",[(new f).getEndRule("start")])};d.inherits(h,g),b.scadHighlightRules=h}),define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text_highlight_rules").TextHighlightRules,f=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};d.inherits(f,e),function(){this.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},this.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}}}.call(f.prototype),b.DocCommentHighlightRules=f}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(a,b,c){"use strict";var d=a("../range").Range,e=function(){};((function(){this.checkOutdent=function(a,b){return/^\s+$/.test(a)?/^\s*\}/.test(b):!1},this.autoOutdent=function(a,b){var c=a.getLine(b),e=c.match(/^(\s*\})/);if(!e)return 0;var f=e[1].length,g=a.findMatchingBracket({row:b,column:f});if(!g||g.row==b)return 0;var h=this.$getIndent(a.getLine(g.row));a.replace(new d(b,0,b,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""}})).call(e.prototype),b.MatchingBraceOutdent=e}),define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("../behaviour").Behaviour,f=function(){this.add("braces","insertion",function(a,b,c,d,e){if(e=="{"){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"{"+g+"}",selection:!1}:{text:"{}",selection:[1,1]}}if(e=="}"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var k=d.$findOpeningBracket("}",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}else if(e=="\n"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var l=d.findMatchingBracket({row:h.row,column:h.column+1});if(!l)return null;var m=this.getNextLineIndent(a,i.substring(0,i.length-1),d.getTabString()),n=this.$getIndent(d.doc.getLine(l.row));return{text:"\n"+m+"\n"+n,selection:[1,m.length,1,m.length]}}}}),this.add("braces","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="{"){var g=d.doc.getLine(e.start.row),h=g.substring(e.end.column,e.end.column+1);if(h=="}")return e.end.column++,e}}),this.add("parens","insertion",function(a,b,c,d,e){if(e=="("){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"("+g+")",selection:!1}:{text:"()",selection:[1,1]}}if(e==")"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j==")"){var k=d.$findOpeningBracket(")",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="("){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h==")")return e.end.column++,e}}),this.add("string_dquotes","insertion",function(a,b,c,d,e){if(e=='"'){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);if(g!=="")return{text:'"'+g+'"',selection:!1};var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column-1,h.column);if(j=="\\")return null;var k=d.getTokens(f.start.row,f.start.row)[0].tokens,l=0,m,n=-1;for(var o=0;o<k.length;o++){m=k[o],m.type=="string"?n=-1:n<0&&(n=m.value.indexOf('"'));if(m.value.length+l>f.start.column)break;l+=k[o].value.length}if(!m||n<0&&m.type!=="comment"&&(m.type!=="string"||f.start.column!==m.value.length+l-1&&m.value.lastIndexOf('"')===m.value.length-1))return{text:'""',selection:[1,1]};if(m&&m.type==="string"){var p=i.substring(h.column,h.column+1);if(p=='"')return{text:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=='"'){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h=='"')return e.end.column++,e}})};d.inherits(f,e),b.CstyleBehaviour=f}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("../../range").Range,f=a("./fold_mode").FoldMode,g=b.FoldMode=function(){};d.inherits(g,f),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(a,b,c){var d=a.getLine(c),f=d.match(this.foldingStartMarker);if(f){var g=f.index;if(f[1])return this.openingBracketBlock(a,f[1],c,g);var h=a.getCommentFoldRange(c,g+f[0].length);return h.end.column-=2,h}if(b!=="markbeginend")return;var f=d.match(this.foldingStopMarker);if(f){var g=f.index+f[0].length;if(f[2]){var h=a.getCommentFoldRange(c,g);return h.end.column-=2,h}var i={row:c,column:g},j=a.$findOpeningBracket(f[1],i);if(!j)return;return j.column++,i.column--,e.fromPoints(j,i)}}}.call(g.prototype)}),define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"],function(a,b,c){"use strict";var d=a("../../range").Range,e=b.FoldMode=function(){};((function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(a,b,c){var d=a.getLine(c);return this.foldingStartMarker.test(d)?"start":b=="markbeginend"&&this.foldingStopMarker&&this.foldingStopMarker.test(d)?"end":""},this.getFoldWidgetRange=function(a,b,c){return null},this.indentationBlock=function(a,b,c){var e=/^\s*/,f=b,g=b,h=a.getLine(b),i=c||h.length,j=h.match(e)[0].length,k=a.getLength();while(++b<k){h=a.getLine(b);var l=h.match(e)[0].length;if(l==h.length)continue;if(l<=j)break;g=b}if(g>f){var m=a.getLine(g).length;return new d(f,i,g,m)}},this.openingBracketBlock=function(a,b,c,e){var f={row:c,column:e+1},g=a.$findClosingBracket(b,f);if(!g)return;var h=a.foldWidgets[g.row];return h==null&&(h=this.getFoldWidget(a,g.row)),h=="start"&&(g.row--,g.column=a.getLine(g.row).length),d.fromPoints(f,g)}})).call(e.prototype)}),function(){window.require(["ace/ace"],function(a){window.ace||(window.ace={});for(var b in a)a.hasOwnProperty(b)&&(ace[b]=a[b])})}() \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-scala-uncompressed.js b/apps/files_texteditor/js/aceeditor/mode-scala-uncompressed.js
new file mode 100755
index 00000000000..098b14e066c
--- /dev/null
+++ b/apps/files_texteditor/js/aceeditor/mode-scala-uncompressed.js
@@ -0,0 +1,1464 @@
+define('ace/mode/scala', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/javascript', 'ace/tokenizer', 'ace/mode/scala_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var JavaScriptMode = require("./javascript").Mode;
+var Tokenizer = require("../tokenizer").Tokenizer;
+var ScalaHighlightRules = require("./scala_highlight_rules").ScalaHighlightRules;
+
+var Mode = function() {
+ JavaScriptMode.call(this);
+
+ this.$tokenizer = new Tokenizer(new ScalaHighlightRules().getRules());
+};
+oop.inherits(Mode, JavaScriptMode);
+
+(function() {
+
+ this.createWorker = function(session) {
+ return null;
+ };
+
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/javascript', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/javascript_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/range', 'ace/worker/worker_client', 'ace/mode/behaviour/cstyle', 'ace/mode/folding/cstyle'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextMode = require("./text").Mode;
+var Tokenizer = require("../tokenizer").Tokenizer;
+var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;
+var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
+var Range = require("../range").Range;
+var WorkerClient = require("../worker/worker_client").WorkerClient;
+var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
+var CStyleFoldMode = require("./folding/cstyle").FoldMode;
+
+var Mode = function() {
+ this.$tokenizer = new Tokenizer(new JavaScriptHighlightRules().getRules());
+ this.$outdent = new MatchingBraceOutdent();
+ this.$behaviour = new CstyleBehaviour();
+ this.foldingRules = new CStyleFoldMode();
+};
+oop.inherits(Mode, TextMode);
+
+(function() {
+
+
+ this.toggleCommentLines = function(state, doc, startRow, endRow) {
+ var outdent = true;
+ var re = /^(\s*)\/\//;
+
+ for (var i=startRow; i<= endRow; i++) {
+ if (!re.test(doc.getLine(i))) {
+ outdent = false;
+ break;
+ }
+ }
+
+ if (outdent) {
+ var deleteRange = new Range(0, 0, 0, 0);
+ for (var i=startRow; i<= endRow; i++)
+ {
+ var line = doc.getLine(i);
+ var m = line.match(re);
+ deleteRange.start.row = i;
+ deleteRange.end.row = i;
+ deleteRange.end.column = m[0].length;
+ doc.replace(deleteRange, m[1]);
+ }
+ }
+ else {
+ doc.indentRows(startRow, endRow, "//");
+ }
+ };
+
+ this.getNextLineIndent = function(state, line, tab) {
+ var indent = this.$getIndent(line);
+
+ var tokenizedLine = this.$tokenizer.getLineTokens(line, state);
+ var tokens = tokenizedLine.tokens;
+ var endState = tokenizedLine.state;
+
+ if (tokens.length && tokens[tokens.length-1].type == "comment") {
+ return indent;
+ }
+
+ if (state == "start" || state == "regex_allowed") {
+ var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);
+ if (match) {
+ indent += tab;
+ }
+ } else if (state == "doc-start") {
+ if (endState == "start" || state == "regex_allowed") {
+ return "";
+ }
+ var match = line.match(/^\s*(\/?)\*/);
+ if (match) {
+ if (match[1]) {
+ indent += " ";
+ }
+ indent += "* ";
+ }
+ }
+
+ return indent;
+ };
+
+ this.checkOutdent = function(state, line, input) {
+ return this.$outdent.checkOutdent(line, input);
+ };
+
+ this.autoOutdent = function(state, doc, row) {
+ this.$outdent.autoOutdent(doc, row);
+ };
+
+ this.createWorker = function(session) {
+ var worker = new WorkerClient(["ace"], "worker-javascript.js", "ace/mode/javascript_worker", "JavaScriptWorker");
+ worker.attachToDocument(session.getDocument());
+
+ worker.on("jslint", function(results) {
+ var errors = [];
+ for (var i=0; i<results.data.length; i++) {
+ var error = results.data[i];
+ if (error)
+ errors.push({
+ row: error.line-1,
+ column: error.character-1,
+ text: error.reason,
+ type: "warning",
+ lint: error
+ });
+ }
+ session.setAnnotations(errors);
+ });
+
+ worker.on("narcissus", function(e) {
+ session.setAnnotations([e.data]);
+ });
+
+ worker.on("terminate", function() {
+ session.clearAnnotations();
+ });
+
+ return worker;
+ };
+
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ * Mihai Sucan <mihai DOT sucan AT gmail DOT com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/javascript_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/unicode', 'ace/mode/doc_comment_highlight_rules', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var lang = require("../lib/lang");
+var unicode = require("../unicode");
+var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var JavaScriptHighlightRules = function() {
+
+ // see: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects
+ var globals = lang.arrayToMap(
+ // Constructors
+ ("Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" +
+ // E4X
+ "Namespace|QName|XML|XMLList|" +
+ "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" +
+ "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" +
+ // Errors
+ "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" +
+ "SyntaxError|TypeError|URIError|" +
+ // Non-constructor functions
+ "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" +
+ "isNaN|parseFloat|parseInt|" +
+ // Other
+ "JSON|Math|" +
+ // Pseudo
+ "this|arguments|prototype|window|document"
+ ).split("|")
+ );
+
+ var keywords = lang.arrayToMap(
+ ("break|case|catch|continue|default|delete|do|else|finally|for|function|" +
+ "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|" +
+ "const|yield|import|get|set").split("|")
+ );
+
+ // keywords which can be followed by regular expressions
+ var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield";
+
+ var deprecated = lang.arrayToMap(
+ ("__parent__|__count__|escape|unescape|with|__proto__").split("|")
+ );
+
+ var definitions = lang.arrayToMap(("const|let|var|function").split("|"));
+
+ var buildinConstants = lang.arrayToMap(
+ ("null|Infinity|NaN|undefined").split("|")
+ );
+
+ var futureReserved = lang.arrayToMap(
+ ("class|enum|extends|super|export|implements|private|" +
+ "public|interface|package|protected|static").split("|")
+ );
+
+ // TODO: Unicode escape sequences
+ var identifierRe = "[" + unicode.packages.L + "\\$_]["
+ + unicode.packages.L
+ + unicode.packages.Mn + unicode.packages.Mc
+ + unicode.packages.Nd
+ + unicode.packages.Pc + "\\$_]*\\b";
+
+ // regexp must not have capturing parentheses. Use (?:) instead.
+ // regexps are ordered -> the first match is used
+
+ this.$rules = {
+ "start" : [
+ {
+ token : "comment",
+ regex : "\\/\\/.*$"
+ },
+ new DocCommentHighlightRules().getStartRule("doc-start"),
+ {
+ token : "comment", // multi line comment
+ merge : true,
+ regex : "\\/\\*",
+ next : "comment"
+ }, {
+ token : "string", // single line
+ regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
+ }, {
+ token : "string", // multi line string start
+ merge : true,
+ regex : '["].*\\\\$',
+ next : "qqstring"
+ }, {
+ token : "string", // single line
+ regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
+ }, {
+ token : "string", // multi line string start
+ merge : true,
+ regex : "['].*\\\\$",
+ next : "qstring"
+ }, {
+ token : "constant.numeric", // hex
+ regex : "0[xX][0-9a-fA-F]+\\b"
+ }, {
+ token : "constant.numeric", // float
+ regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
+ }, {
+ token : ["keyword.definition", "text", "entity.name.function"],
+ regex : "(function)(\\s+)(" + identifierRe + ")"
+ }, {
+ token : "constant.language.boolean",
+ regex : "(?:true|false)\\b"
+ }, {
+ token : "keyword",
+ regex : "(?:" + kwBeforeRe + ")\\b",
+ next : "regex_allowed"
+ }, {
+ token : function(value) {
+ if (globals.hasOwnProperty(value))
+ return "variable.language";
+ else if (deprecated.hasOwnProperty(value))
+ return "invalid.deprecated";
+ else if (definitions.hasOwnProperty(value))
+ return "keyword.definition";
+ else if (keywords.hasOwnProperty(value))
+ return "keyword";
+ else if (buildinConstants.hasOwnProperty(value))
+ return "constant.language";
+ else if (futureReserved.hasOwnProperty(value))
+ return "invalid.illegal";
+ else if (value == "debugger")
+ return "invalid.deprecated";
+ else
+ return "identifier";
+ },
+ regex : identifierRe
+ }, {
+ token : "keyword.operator",
+ regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)",
+ next : "regex_allowed"
+ }, {
+ token : "punctuation.operator",
+ regex : "\\?|\\:|\\,|\\;|\\.",
+ next : "regex_allowed"
+ }, {
+ token : "paren.lparen",
+ regex : "[[({]",
+ next : "regex_allowed"
+ }, {
+ token : "paren.rparen",
+ regex : "[\\])}]"
+ }, {
+ token : "keyword.operator",
+ regex : "\\/=?",
+ next : "regex_allowed"
+ }, {
+ token: "comment",
+ regex: "^#!.*$"
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }
+ ],
+ // regular expressions are only allowed after certain tokens. This
+ // makes sure we don't mix up regexps with the divison operator
+ "regex_allowed": [
+ {
+ token : "comment", // multi line comment
+ merge : true,
+ regex : "\\/\\*",
+ next : "comment_regex_allowed"
+ }, {
+ token : "comment",
+ regex : "\\/\\/.*$"
+ }, {
+ token: "string.regexp",
+ regex: "\\/",
+ next: "regex",
+ merge: true
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }, {
+ // immediately return to the start mode without matching
+ // anything
+ token: "empty",
+ regex: "",
+ next: "start"
+ }
+ ],
+ "regex": [
+ {
+ token: "regexp.keyword.operator",
+ regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)",
+ next: "regex"
+ }, {
+ // flag
+ token: "string.regexp",
+ regex: "/\\w*",
+ next: "start",
+ merge: true
+ }, {
+ token: "string.regexp",
+ regex: "[^\\\\/\\[]+",
+ next: "regex",
+ merge: true
+ }, {
+ token: "string.regexp.charachterclass",
+ regex: "\\[",
+ next: "regex_character_class",
+ merge: true
+ }, {
+ token: "empty",
+ regex: "",
+ next: "start"
+ }
+ ],
+ "regex_character_class": [
+ {
+ token: "regexp.keyword.operator",
+ regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)",
+ next: "regex_character_class"
+ }, {
+ token: "string.regexp.charachterclass",
+ regex: "]",
+ next: "regex",
+ merge: true
+ }, {
+ token: "string.regexp.charachterclass",
+ regex: "[^\\\\\\]]+",
+ next: "regex_character_class",
+ merge: true
+ }, {
+ token: "empty",
+ regex: "",
+ next: "start"
+ }
+ ],
+ "comment_regex_allowed" : [
+ {
+ token : "comment", // closing comment
+ regex : ".*?\\*\\/",
+ merge : true,
+ next : "regex_allowed"
+ }, {
+ token : "comment", // comment spanning whole line
+ merge : true,
+ regex : ".+"
+ }
+ ],
+ "comment" : [
+ {
+ token : "comment", // closing comment
+ regex : ".*?\\*\\/",
+ merge : true,
+ next : "start"
+ }, {
+ token : "comment", // comment spanning whole line
+ merge : true,
+ regex : ".+"
+ }
+ ],
+ "qqstring" : [
+ {
+ token : "string",
+ regex : '(?:(?:\\\\.)|(?:[^"\\\\]))*?"',
+ next : "start"
+ }, {
+ token : "string",
+ merge : true,
+ regex : '.+'
+ }
+ ],
+ "qstring" : [
+ {
+ token : "string",
+ regex : "(?:(?:\\\\.)|(?:[^'\\\\]))*?'",
+ next : "start"
+ }, {
+ token : "string",
+ merge : true,
+ regex : '.+'
+ }
+ ]
+ };
+
+ this.embedRules(DocCommentHighlightRules, "doc-",
+ [ new DocCommentHighlightRules().getEndRule("start") ]);
+};
+
+oop.inherits(JavaScriptHighlightRules, TextHighlightRules);
+
+exports.JavaScriptHighlightRules = JavaScriptHighlightRules;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/doc_comment_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var DocCommentHighlightRules = function() {
+
+ this.$rules = {
+ "start" : [ {
+ token : "comment.doc.tag",
+ regex : "@[\\w\\d_]+" // TODO: fix email addresses
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "\\s+"
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "TODO"
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "[^@\\*]+"
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "."
+ }]
+ };
+};
+
+oop.inherits(DocCommentHighlightRules, TextHighlightRules);
+
+(function() {
+
+ this.getStartRule = function(start) {
+ return {
+ token : "comment.doc", // doc comment
+ merge : true,
+ regex : "\\/\\*(?=\\*)",
+ next : start
+ };
+ };
+
+ this.getEndRule = function (start) {
+ return {
+ token : "comment.doc", // closing comment
+ merge : true,
+ regex : "\\*\\/",
+ next : start
+ };
+ };
+
+}).call(DocCommentHighlightRules.prototype);
+
+exports.DocCommentHighlightRules = DocCommentHighlightRules;
+
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var Range = require("../range").Range;
+
+var MatchingBraceOutdent = function() {};
+
+(function() {
+
+ this.checkOutdent = function(line, input) {
+ if (! /^\s+$/.test(line))
+ return false;
+
+ return /^\s*\}/.test(input);
+ };
+
+ this.autoOutdent = function(doc, row) {
+ var line = doc.getLine(row);
+ var match = line.match(/^(\s*\})/);
+
+ if (!match) return 0;
+
+ var column = match[1].length;
+ var openBracePos = doc.findMatchingBracket({row: row, column: column});
+
+ if (!openBracePos || openBracePos.row == row) return 0;
+
+ var indent = this.$getIndent(doc.getLine(openBracePos.row));
+ doc.replace(new Range(row, 0, row, column-1), indent);
+ };
+
+ this.$getIndent = function(line) {
+ var match = line.match(/^(\s+)/);
+ if (match) {
+ return match[1];
+ }
+
+ return "";
+ };
+
+}).call(MatchingBraceOutdent.prototype);
+
+exports.MatchingBraceOutdent = MatchingBraceOutdent;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/worker/worker_client', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event_emitter'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var EventEmitter = require("../lib/event_emitter").EventEmitter;
+
+var WorkerClient = function(topLevelNamespaces, packagedJs, mod, classname) {
+
+ this.changeListener = this.changeListener.bind(this);
+
+ if (module.packaged) {
+ var base = this.$guessBasePath();
+ this.$worker = new Worker(base + packagedJs);
+ }
+ else {
+ var workerUrl = this.$normalizePath(require.nameToUrl("ace/worker/worker", null, "_"));
+ this.$worker = new Worker(workerUrl);
+
+ var tlns = {};
+ for (var i=0; i<topLevelNamespaces.length; i++) {
+ var ns = topLevelNamespaces[i];
+ var path = this.$normalizePath(require.nameToUrl(ns, null, "_").replace(/.js$/, ""));
+
+ tlns[ns] = path;
+ }
+ }
+
+ this.$worker.postMessage({
+ init : true,
+ tlns: tlns,
+ module: mod,
+ classname: classname
+ });
+
+ this.callbackId = 1;
+ this.callbacks = {};
+
+ var _self = this;
+ this.$worker.onerror = function(e) {
+ window.console && console.log && console.log(e);
+ throw e;
+ };
+ this.$worker.onmessage = function(e) {
+ var msg = e.data;
+ switch(msg.type) {
+ case "log":
+ window.console && console.log && console.log(msg.data);
+ break;
+
+ case "event":
+ _self._emit(msg.name, {data: msg.data});
+ break;
+
+ case "call":
+ var callback = _self.callbacks[msg.id];
+ if (callback) {
+ callback(msg.data);
+ delete _self.callbacks[msg.id];
+ }
+ break;
+ }
+ };
+};
+
+(function(){
+
+ oop.implement(this, EventEmitter);
+
+ this.$normalizePath = function(path) {
+ path = path.replace(/^[a-z]+:\/\/[^\/]+\//, ""); // Remove domain name and rebuild it
+ path = location.protocol + "//" + location.host
+ // paths starting with a slash are relative to the root (host)
+ + (path.charAt(0) == "/" ? "" : location.pathname.replace(/\/[^\/]*$/, ""))
+ + "/" + path.replace(/^[\/]+/, "");
+ return path;
+ };
+
+ this.$guessBasePath = function() {
+ if (require.aceBaseUrl)
+ return require.aceBaseUrl;
+
+ var scripts = document.getElementsByTagName("script");
+ for (var i=0; i<scripts.length; i++) {
+ var script = scripts[i];
+
+ var base = script.getAttribute("data-ace-base");
+ if (base)
+ return base.replace(/\/*$/, "/");
+
+ var src = script.src || script.getAttribute("src");
+ if (!src) {
+ continue;
+ }
+ var m = src.match(/^(?:(.*\/)ace\.js|(.*\/)ace(-uncompressed)?(-noconflict)?\.js)(?:\?|$)/);
+ if (m)
+ return m[1] || m[2];
+ }
+ return "";
+ };
+
+ this.terminate = function() {
+ this._emit("terminate", {});
+ this.$worker.terminate();
+ this.$worker = null;
+ this.$doc.removeEventListener("change", this.changeListener);
+ this.$doc = null;
+ };
+
+ this.send = function(cmd, args) {
+ this.$worker.postMessage({command: cmd, args: args});
+ };
+
+ this.call = function(cmd, args, callback) {
+ if (callback) {
+ var id = this.callbackId++;
+ this.callbacks[id] = callback;
+ args.push(id);
+ }
+ this.send(cmd, args);
+ };
+
+ this.emit = function(event, data) {
+ try {
+ // firefox refuses to clone objects which have function properties
+ // TODO: cleanup event
+ this.$worker.postMessage({event: event, data: {data: data.data}});
+ }
+ catch(ex) {}
+ };
+
+ this.attachToDocument = function(doc) {
+ if(this.$doc)
+ this.terminate();
+
+ this.$doc = doc;
+ this.call("setValue", [doc.getValue()]);
+ doc.on("change", this.changeListener);
+ };
+
+ this.changeListener = function(e) {
+ e.range = {
+ start: e.data.range.start,
+ end: e.data.range.end
+ };
+ this.emit("change", e);
+ };
+
+}).call(WorkerClient.prototype);
+
+exports.WorkerClient = WorkerClient;
+
+});
+/* vim:ts=4:sts=4:sw=4:
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Chris Spencer <chris.ag.spencer AT googlemail DOT com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/behaviour/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var Behaviour = require('../behaviour').Behaviour;
+
+var CstyleBehaviour = function () {
+
+ this.add("braces", "insertion", function (state, action, editor, session, text) {
+ if (text == '{') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '{' + selected + '}',
+ selection: false
+ }
+ } else {
+ return {
+ text: '{}',
+ selection: [1, 1]
+ }
+ }
+ } else if (text == '}') {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '}') {
+ var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});
+ if (matching !== null) {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ } else if (text == "\n") {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '}') {
+ var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column + 1});
+ if (!openBracePos)
+ return null;
+
+ var indent = this.getNextLineIndent(state, line.substring(0, line.length - 1), session.getTabString());
+ var next_indent = this.$getIndent(session.doc.getLine(openBracePos.row));
+
+ return {
+ text: '\n' + indent + '\n' + next_indent,
+ selection: [1, indent.length, 1, indent.length]
+ }
+ }
+ }
+ });
+
+ this.add("braces", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '{') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.end.column, range.end.column + 1);
+ if (rightChar == '}') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+ this.add("parens", "insertion", function (state, action, editor, session, text) {
+ if (text == '(') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '(' + selected + ')',
+ selection: false
+ }
+ } else {
+ return {
+ text: '()',
+ selection: [1, 1]
+ }
+ }
+ } else if (text == ')') {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == ')') {
+ var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});
+ if (matching !== null) {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ }
+ });
+
+ this.add("parens", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '(') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
+ if (rightChar == ')') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+ this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {
+ if (text == '"') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '"' + selected + '"',
+ selection: false
+ }
+ } else {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var leftChar = line.substring(cursor.column-1, cursor.column);
+
+ // We're escaped.
+ if (leftChar == '\\') {
+ return null;
+ }
+
+ // Find what token we're inside.
+ var tokens = session.getTokens(selection.start.row, selection.start.row)[0].tokens;
+ var col = 0, token;
+ var quotepos = -1; // Track whether we're inside an open quote.
+
+ for (var x = 0; x < tokens.length; x++) {
+ token = tokens[x];
+ if (token.type == "string") {
+ quotepos = -1;
+ } else if (quotepos < 0) {
+ quotepos = token.value.indexOf('"');
+ }
+ if ((token.value.length + col) > selection.start.column) {
+ break;
+ }
+ col += tokens[x].value.length;
+ }
+
+ // Try and be smart about when we auto insert.
+ if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf('"') === token.value.length-1)))) {
+ return {
+ text: '""',
+ selection: [1,1]
+ }
+ } else if (token && token.type === "string") {
+ // Ignore input and move right one if we're typing over the closing quote.
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '"') {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ }
+ }
+ });
+
+ this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '"') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
+ if (rightChar == '"') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+}
+oop.inherits(CstyleBehaviour, Behaviour);
+
+exports.CstyleBehaviour = CstyleBehaviour;
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var Range = require("../../range").Range;
+var BaseFoldMode = require("./fold_mode").FoldMode;
+
+var FoldMode = exports.FoldMode = function() {};
+oop.inherits(FoldMode, BaseFoldMode);
+
+(function() {
+
+ this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
+ this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ var line = session.getLine(row);
+ var match = line.match(this.foldingStartMarker);
+ if (match) {
+ var i = match.index;
+
+ if (match[1])
+ return this.openingBracketBlock(session, match[1], row, i);
+
+ var range = session.getCommentFoldRange(row, i + match[0].length);
+ range.end.column -= 2;
+ return range;
+ }
+
+ if (foldStyle !== "markbeginend")
+ return;
+
+ var match = line.match(this.foldingStopMarker);
+ if (match) {
+ var i = match.index + match[0].length;
+
+ if (match[2]) {
+ var range = session.getCommentFoldRange(row, i);
+ range.end.column -= 2;
+ return range;
+ }
+
+ var end = {row: row, column: i};
+ var start = session.$findOpeningBracket(match[1], end);
+
+ if (!start)
+ return;
+
+ start.column++;
+ end.column--;
+
+ return Range.fromPoints(start, end);
+ }
+ };
+
+}).call(FoldMode.prototype);
+
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/fold_mode', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var Range = require("../../range").Range;
+
+var FoldMode = exports.FoldMode = function() {};
+
+(function() {
+
+ this.foldingStartMarker = null;
+ this.foldingStopMarker = null;
+
+ // must return "" if there's no fold, to enable caching
+ this.getFoldWidget = function(session, foldStyle, row) {
+ var line = session.getLine(row);
+ if (this.foldingStartMarker.test(line))
+ return "start";
+ if (foldStyle == "markbeginend"
+ && this.foldingStopMarker
+ && this.foldingStopMarker.test(line))
+ return "end";
+ return "";
+ };
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ return null;
+ };
+
+ this.indentationBlock = function(session, row, column) {
+ var re = /^\s*/;
+ var startRow = row;
+ var endRow = row;
+ var line = session.getLine(row);
+ var startColumn = column || line.length;
+ var startLevel = line.match(re)[0].length;
+ var maxRow = session.getLength()
+
+ while (++row < maxRow) {
+ line = session.getLine(row);
+ var level = line.match(re)[0].length;
+
+ if (level == line.length)
+ continue;
+
+ if (level <= startLevel)
+ break;
+
+ endRow = row;
+ }
+
+ if (endRow > startRow) {
+ var endColumn = session.getLine(endRow).length;
+ return new Range(startRow, startColumn, endRow, endColumn);
+ }
+ };
+
+ this.openingBracketBlock = function(session, bracket, row, column) {
+ var start = {row: row, column: column + 1};
+ var end = session.$findClosingBracket(bracket, start);
+ if (!end)
+ return;
+
+ var fw = session.foldWidgets[end.row];
+ if (fw == null)
+ fw = this.getFoldWidget(session, end.row);
+
+ if (fw == "start") {
+ end.row --;
+ end.column = session.getLine(end.row).length;
+ }
+ return Range.fromPoints(start, end);
+ };
+
+}).call(FoldMode.prototype);
+
+});
+define('ace/mode/scala_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/mode/doc_comment_highlight_rules', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var lang = require("../lib/lang");
+var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var ScalaHighlightRules = function() {
+
+ // taken from http://download.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html
+ var keywords = lang.arrayToMap(
+ (
+ "case|default|do|else|for|if|match|while|throw|return|try|catch|finally|yield|" +
+ "abstract|class|def|extends|final|forSome|implicit|implicits|import|lazy|new|object|" +
+ "override|package|private|protected|sealed|super|this|trait|type|val|var|with"
+ ).split("|")
+ );
+
+ var buildinConstants = lang.arrayToMap(
+ ("true|false").split("|")
+ );
+
+ var langClasses = lang.arrayToMap(
+ ("AbstractMethodError|AssertionError|ClassCircularityError|"+
+ "ClassFormatError|Deprecated|EnumConstantNotPresentException|"+
+ "ExceptionInInitializerError|IllegalAccessError|"+
+ "IllegalThreadStateException|InstantiationError|InternalError|"+
+
+ "NegativeArraySizeException|NoSuchFieldError|Override|Process|"+
+ "ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|"+
+ "SuppressWarnings|TypeNotPresentException|UnknownError|"+
+ "UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|"+
+ "InstantiationException|IndexOutOfBoundsException|"+
+ "ArrayIndexOutOfBoundsException|CloneNotSupportedException|"+
+ "NoSuchFieldException|IllegalArgumentException|NumberFormatException|"+
+ "SecurityException|Void|InheritableThreadLocal|IllegalStateException|"+
+ "InterruptedException|NoSuchMethodException|IllegalAccessException|"+
+ "UnsupportedOperationException|Enum|StrictMath|Package|Compiler|"+
+ "Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|"+
+ "NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|"+
+ "NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|"+
+ "Character|Boolean|StackTraceElement|Appendable|StringBuffer|"+
+ "Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|"+
+ "StackOverflowError|OutOfMemoryError|VirtualMachineError|"+
+ "ArrayStoreException|ClassCastException|LinkageError|"+
+ "NoClassDefFoundError|ClassNotFoundException|RuntimeException|"+
+ "Exception|ThreadDeath|Error|Throwable|System|ClassLoader|"+
+ "Cloneable|Class|CharSequence|Comparable|String|Object|" +
+ "Unit|Any|AnyVal|AnyRef|Null|ScalaObject|Singleton|Seq|Iterable|List|" +
+ "Option|Array|Char|Byte|Short|Int|Long|Nothing"
+
+ ).split("|")
+ );
+
+ var importClasses = lang.arrayToMap(
+ ("").split("|")
+ );
+ // regexp must not have capturing parentheses. Use (?:) instead.
+ // regexps are ordered -> the first match is used
+
+ this.$rules = {
+ "start" : [
+ {
+ token : "comment",
+ regex : "\\/\\/.*$"
+ },
+ new DocCommentHighlightRules().getStartRule("doc-start"),
+ {
+ token : "comment", // multi line comment
+ merge : true,
+ regex : "\\/\\*",
+ next : "comment"
+ }, {
+ token : "string.regexp",
+ regex : "[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)"
+ }, {
+ token : "string", // single line
+ regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
+ }, {
+ token : "string", // single line
+ regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
+ }, {
+ token : "constant.numeric", // hex
+ regex : "0[xX][0-9a-fA-F]+\\b"
+ }, {
+ token : "constant.numeric", // float
+ regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
+ }, {
+ token : "constant.language.boolean",
+ regex : "(?:true|false)\\b"
+ }, {
+ token : function(value) {
+ if (value == "this")
+ return "variable.language";
+ else if (keywords.hasOwnProperty(value))
+ return "keyword";
+ else if (langClasses.hasOwnProperty(value))
+ return "support.function";
+ else if (importClasses.hasOwnProperty(value))
+ return "support.function";
+ else if (buildinConstants.hasOwnProperty(value))
+ return "constant.language";
+ else
+ return "identifier";
+ },
+ // TODO: Unicode escape sequences
+ // TODO: Unicode identifiers
+ regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
+ }, {
+ token : "keyword.operator",
+ regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"
+ }, {
+ token : "paren.lparen",
+ regex : "[[({]"
+ }, {
+ token : "paren.rparen",
+ regex : "[\\])}]"
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }
+ ],
+ "comment" : [
+ {
+ token : "comment", // closing comment
+ regex : ".*?\\*\\/",
+ next : "start"
+ }, {
+ token : "comment", // comment spanning whole line
+ merge : true,
+ regex : ".+"
+ }
+ ]
+ };
+
+ this.embedRules(DocCommentHighlightRules, "doc-",
+ [ new DocCommentHighlightRules().getEndRule("start") ]);
+};
+
+oop.inherits(ScalaHighlightRules, TextHighlightRules);
+
+exports.ScalaHighlightRules = ScalaHighlightRules;
+});
+;
+ (function() {
+ window.require(["ace/ace"], function(a) {
+ if (!window.ace)
+ window.ace = {};
+ for (var key in a) if (a.hasOwnProperty(key))
+ ace[key] = a[key];
+ });
+ })();
+ \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-scala.js b/apps/files_texteditor/js/aceeditor/mode-scala.js
index aab530c11aa..c697fe1781a 100644
--- a/apps/files_texteditor/js/aceeditor/mode-scala.js
+++ b/apps/files_texteditor/js/aceeditor/mode-scala.js
@@ -1 +1 @@
-define("ace/mode/scala",["require","exports","module","pilot/oop","ace/mode/javascript","ace/tokenizer","ace/mode/scala_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/cstyle"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/javascript").Mode,f=a("ace/tokenizer").Tokenizer,g=a("ace/mode/scala_highlight_rules").ScalaHighlightRules,h=a("ace/mode/matching_brace_outdent").MatchingBraceOutdent,i=a("ace/mode/behaviour/cstyle").CstyleBehaviour,j=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h,this.$behaviour=new i};d.inherits(j,e),function(){this.createWorker=function(a){return null}}.call(j.prototype),b.Mode=j}),define("ace/mode/javascript",["require","exports","module","pilot/oop","ace/mode/text","ace/tokenizer","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/text").Mode,f=a("ace/tokenizer").Tokenizer,g=a("ace/mode/javascript_highlight_rules").JavaScriptHighlightRules,h=a("ace/mode/matching_brace_outdent").MatchingBraceOutdent,i=a("ace/range").Range,j=a("ace/worker/worker_client").WorkerClient,k=a("ace/mode/behaviour/cstyle").CstyleBehaviour,l=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h,this.$behaviour=new k};d.inherits(l,e),function(){this.toggleCommentLines=function(a,b,c,d){var e=!0,f=[],g=/^(\s*)\/\//;for(var h=c;h<=d;h++)if(!g.test(b.getLine(h))){e=!1;break}if(e){var j=new i(0,0,0,0);for(var h=c;h<=d;h++){var k=b.getLine(h),l=k.match(g);j.start.row=h,j.end.row=h,j.end.column=l[0].length,b.replace(j,l[1])}}else b.indentRows(c,d,"//")},this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=this.$tokenizer.getLineTokens(b,a),f=e.tokens,g=e.state;if(f.length&&f[f.length-1].type=="comment")return d;if(a=="start"){var h=b.match(/^.*[\{\(\[\:]\s*$/);h&&(d+=c)}else if(a=="doc-start"){if(g=="start")return"";var h=b.match(/^\s*(\/?)\*/);h&&(h[1]&&(d+=" "),d+="* ")}return d},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)},this.createWorker=function(a){var b=a.getDocument(),c=new j(["ace","pilot"],"worker-javascript.js","ace/mode/javascript_worker","JavaScriptWorker");c.call("setValue",[b.getValue()]),b.on("change",function(a){a.range={start:a.data.range.start,end:a.data.range.end},c.emit("change",a)}),c.on("jslint",function(b){var c=[];for(var d=0;d<b.data.length;d++){var e=b.data[d];e&&c.push({row:e.line-1,column:e.character-1,text:e.reason,type:"warning",lint:e})}a.setAnnotations(c)}),c.on("narcissus",function(b){a.setAnnotations([b.data])}),c.on("terminate",function(){a.clearAnnotations()});return c}}.call(l.prototype),b.Mode=l}),define("ace/mode/javascript_highlight_rules",["require","exports","module","pilot/oop","pilot/lang","ace/unicode","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(a,b,c){var d=a("pilot/oop"),e=a("pilot/lang"),f=a("ace/unicode"),g=a("ace/mode/doc_comment_highlight_rules").DocCommentHighlightRules,h=a("ace/mode/text_highlight_rules").TextHighlightRules,i=function(){var a=e.arrayToMap("break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|const|yield|import|get|set".split("|")),b=e.arrayToMap("null|Infinity|NaN|undefined".split("|")),c=e.arrayToMap("class|enum|extends|super|export|implements|private|public|interface|package|protected|static".split("|")),d="["+f.packages.L+"\\$_]["+f.packages.L+f.packages.Mn+f.packages.Mc+f.packages.Nd+f.packages.Pc+"\\$_]*\\b";this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},(new g).getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",merge:!0,regex:'["].*\\\\$',next:"qqstring"},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"string",merge:!0,regex:"['].*\\\\$",next:"qstring"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:function(d){return d=="this"?"variable.language":a.hasOwnProperty(d)?"keyword":b.hasOwnProperty(d)?"constant.language":c.hasOwnProperty(d)?"invalid.illegal":d=="debugger"?"invalid.deprecated":"identifier"},regex:d},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)",next:"regex_allowed"},{token:"lparen",regex:"[[({]",next:"regex_allowed"},{token:"rparen",regex:"[\\])}]"},{token:"keyword.operator",regex:"\\/=?",next:"regex_allowed"},{token:"comment",regex:"^#!.*$"},{token:"text",regex:"\\s+"}],regex_allowed:[{token:"string.regexp",regex:"\\/(?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*",next:"start"},{token:"text",regex:"\\s+"},{token:"empty",regex:"",next:"start"}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"string",regex:'(?:(?:\\\\.)|(?:[^"\\\\]))*?"',next:"start"},{token:"string",merge:!0,regex:".+"}],qstring:[{token:"string",regex:"(?:(?:\\\\.)|(?:[^'\\\\]))*?'",next:"start"},{token:"string",merge:!0,regex:".+"}]},this.embedRules(g,"doc-",[(new g).getEndRule("start")])};d.inherits(i,h),b.JavaScriptHighlightRules=i}),define("ace/mode/doc_comment_highlight_rules",["require","exports","module","pilot/oop","ace/mode/text_highlight_rules"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/text_highlight_rules").TextHighlightRules,f=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};d.inherits(f,e),function(){this.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},this.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}}}.call(f.prototype),b.DocCommentHighlightRules=f}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(a,b,c){var d=a("ace/range").Range,e=function(){};(function(){this.checkOutdent=function(a,b){return/^\s+$/.test(a)?/^\s*\}/.test(b):!1},this.autoOutdent=function(a,b){var c=a.getLine(b),e=c.match(/^(\s*\})/);if(!e)return 0;var f=e[1].length,g=a.findMatchingBracket({row:b,column:f});if(!g||g.row==b)return 0;var h=this.$getIndent(a.getLine(g.row));a.replace(new d(b,0,b,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""}}).call(e.prototype),b.MatchingBraceOutdent=e}),define("ace/worker/worker_client",["require","exports","module","pilot/oop","pilot/event_emitter"],function(a,b,c){var d=a("pilot/oop"),e=a("pilot/event_emitter").EventEmitter,f=function(b,c,d,e){this.callbacks=[];if(a.packaged)var f=this.$guessBasePath(),g=this.$worker=new Worker(f+c);else{var h=this.$normalizePath(a.nameToUrl("ace/worker/worker",null,"_")),g=this.$worker=new Worker(h),i={};for(var j=0;j<b.length;j++){var k=b[j],l=this.$normalizePath(a.nameToUrl(k,null,"_").replace(/.js$/,""));i[k]=l}}this.$worker.postMessage({init:!0,tlns:i,module:d,classname:e}),this.callbackId=1,this.callbacks={};var m=this;this.$worker.onerror=function(a){window.console&&console.log&&console.log(a);throw a},this.$worker.onmessage=function(a){var b=a.data;switch(b.type){case"log":window.console&&console.log&&console.log(b.data);break;case"event":m._dispatchEvent(b.name,{data:b.data});break;case"call":var c=m.callbacks[b.id];c&&(c(b.data),delete m.callbacks[b.id])}}};(function(){d.implement(this,e),this.$normalizePath=function(a){a.match(/^\w+:/)||(a=location.protocol+"//"+location.host+location.pathname+"/"+a);return a},this.$guessBasePath=function(){if(a.aceBaseUrl)return a.aceBaseUrl;var b=document.getElementsByTagName("script");for(var c=0;c<b.length;c++){var d=b[c],e=d.getAttribute("data-ace-base");if(e)return e.replace(/\/*$/,"/");var f=d.src||d.getAttribute("src");if(!f)continue;var g=f.match(/^(?:(.*\/)ace\.js|(.*\/)ace-uncompressed\.js)(?:\?|$)/);if(g)return g[1]||g[2]}return""},this.terminate=function(){this._dispatchEvent("terminate",{}),this.$worker.terminate()},this.send=function(a,b){this.$worker.postMessage({command:a,args:b})},this.call=function(a,b,c){if(c){var d=this.callbackId++;this.callbacks[d]=c,b.push(d)}this.send(a,b)},this.emit=function(a,b){this.$worker.postMessage({event:a,data:b})}}).call(f.prototype),b.WorkerClient=f}),define("ace/mode/behaviour/cstyle",["require","exports","module","pilot/oop","ace/mode/behaviour"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/behaviour").Behaviour,f=function(){this.add("braces","insertion",function(a,b,c,d,e){if(e=="{"){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"{"+g+"}",selection:!1}:{text:"{}",selection:[1,1]}}if(e=="}"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var k=d.$findOpeningBracket("}",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}else if(e=="\n"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var l=d.findMatchingBracket({row:h.row,column:h.column+1});if(!l)return!1;var m=this.getNextLineIndent(a,i.substring(0,i.length-1),d.getTabString()),n=this.$getIndent(d.doc.getLine(l.row));return{text:"\n"+m+"\n"+n,selection:[1,m.length,1,m.length]}}}return!1}),this.add("braces","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="{"){var g=d.doc.getLine(e.start.row),h=g.substring(e.end.column,e.end.column+1);if(h=="}"){e.end.column++;return e}}return!1}),this.add("parens","insertion",function(a,b,c,d,e){if(e=="("){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"("+g+")",selection:!1}:{text:"()",selection:[1,1]}}if(e==")"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j==")"){var k=d.$findOpeningBracket(")",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}return!1}),this.add("parens","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="("){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h==")"){e.end.column++;return e}}return!1}),this.add("string_dquotes","insertion",function(a,b,c,d,e){if(e=='"'){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);if(g!=="")return{text:'"'+g+'"',selection:!1};var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column-1,h.column);if(j=="\\")return!1;var k=d.getTokens(f.start.row,f.start.row)[0].tokens,l=0,m,n=-1;for(var o=0;o<k.length;o++){m=k[o],m.type=="string"?n=-1:n<0&&(n=m.value.indexOf('"'));if(m.value.length+l>f.start.column)break;l+=k[o].value.length}if(!m||n<0&&m.type!=="comment"&&(m.type!=="string"||f.start.column!==m.value.length+l-1&&m.value.lastIndexOf('"')===m.value.length-1))return{text:'""',selection:[1,1]};if(m&&m.type==="string"){var p=i.substring(h.column,h.column+1);if(p=='"')return{text:"",selection:[1,1]}}}return!1}),this.add("string_dquotes","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=='"'){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h=='"'){e.end.column++;return e}}return!1})};d.inherits(f,e),b.CstyleBehaviour=f}),define("ace/mode/scala_highlight_rules",["require","exports","module","pilot/oop","pilot/lang","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(a,b,c){var d=a("pilot/oop"),e=a("pilot/lang"),f=a("ace/mode/doc_comment_highlight_rules").DocCommentHighlightRules,g=a("ace/mode/text_highlight_rules").TextHighlightRules,h=function(){var a=e.arrayToMap("case|default|do|else|for|if|match|while|throw|return|try|catch|finally|yield|abstract|class|def|extends|final|forSome|implicit|implicits|import|lazy|new|object|override|package|private|protected|sealed|super|this|trait|type|val|var|with".split("|")),b=e.arrayToMap("true|false".split("|")),c=e.arrayToMap("AbstractMethodError|AssertionError|ClassCircularityError|ClassFormatError|Deprecated|EnumConstantNotPresentException|ExceptionInInitializerError|IllegalAccessError|IllegalThreadStateException|InstantiationError|InternalError|NegativeArraySizeException|NoSuchFieldError|Override|Process|ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|SuppressWarnings|TypeNotPresentException|UnknownError|UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|InstantiationException|IndexOutOfBoundsException|ArrayIndexOutOfBoundsException|CloneNotSupportedException|NoSuchFieldException|IllegalArgumentException|NumberFormatException|SecurityException|Void|InheritableThreadLocal|IllegalStateException|InterruptedException|NoSuchMethodException|IllegalAccessException|UnsupportedOperationException|Enum|StrictMath|Package|Compiler|Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|Character|Boolean|StackTraceElement|Appendable|StringBuffer|Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|StackOverflowError|OutOfMemoryError|VirtualMachineError|ArrayStoreException|ClassCastException|LinkageError|NoClassDefFoundError|ClassNotFoundException|RuntimeException|Exception|ThreadDeath|Error|Throwable|System|ClassLoader|Cloneable|Class|CharSequence|Comparable|String|Object|Unit|Any|AnyVal|AnyRef|Null|ScalaObject|Singleton|Seq|Iterable|List|Option|Array|Char|Byte|Short|Int|Long|Nothing".split("|")),d=e.arrayToMap("".split("|"));this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},(new f).getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"string.regexp",regex:"[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:function(e){return e=="this"?"variable.language":a.hasOwnProperty(e)?"keyword":c.hasOwnProperty(e)?"support.function":d.hasOwnProperty(e)?"support.function":b.hasOwnProperty(e)?"constant.language":"identifier"},regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"},{token:"lparen",regex:"[[({]"},{token:"rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",merge:!0,regex:".+"}]},this.embedRules(f,"doc-",[(new f).getEndRule("start")])};d.inherits(h,g),b.ScalaHighlightRules=h}) \ No newline at end of file
+define("ace/mode/scala",["require","exports","module","ace/lib/oop","ace/mode/javascript","ace/tokenizer","ace/mode/scala_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./javascript").Mode,f=a("../tokenizer").Tokenizer,g=a("./scala_highlight_rules").ScalaHighlightRules,h=function(){e.call(this),this.$tokenizer=new f((new g).getRules())};d.inherits(h,e),function(){this.createWorker=function(a){return null}}.call(h.prototype),b.Mode=h}),define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text").Mode,f=a("../tokenizer").Tokenizer,g=a("./javascript_highlight_rules").JavaScriptHighlightRules,h=a("./matching_brace_outdent").MatchingBraceOutdent,i=a("../range").Range,j=a("../worker/worker_client").WorkerClient,k=a("./behaviour/cstyle").CstyleBehaviour,l=a("./folding/cstyle").FoldMode,m=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h,this.$behaviour=new k,this.foldingRules=new l};d.inherits(m,e),function(){this.toggleCommentLines=function(a,b,c,d){var e=!0,f=/^(\s*)\/\//;for(var g=c;g<=d;g++)if(!f.test(b.getLine(g))){e=!1;break}if(e){var h=new i(0,0,0,0);for(var g=c;g<=d;g++){var j=b.getLine(g),k=j.match(f);h.start.row=g,h.end.row=g,h.end.column=k[0].length,b.replace(h,k[1])}}else b.indentRows(c,d,"//")},this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=this.$tokenizer.getLineTokens(b,a),f=e.tokens,g=e.state;if(f.length&&f[f.length-1].type=="comment")return d;if(a=="start"||a=="regex_allowed"){var h=b.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);h&&(d+=c)}else if(a=="doc-start"){if(g=="start"||a=="regex_allowed")return"";var h=b.match(/^\s*(\/?)\*/);h&&(h[1]&&(d+=" "),d+="* ")}return d},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)},this.createWorker=function(a){var b=new j(["ace"],"worker-javascript.js","ace/mode/javascript_worker","JavaScriptWorker");return b.attachToDocument(a.getDocument()),b.on("jslint",function(b){var c=[];for(var d=0;d<b.data.length;d++){var e=b.data[d];e&&c.push({row:e.line-1,column:e.character-1,text:e.reason,type:"warning",lint:e})}a.setAnnotations(c)}),b.on("narcissus",function(b){a.setAnnotations([b.data])}),b.on("terminate",function(){a.clearAnnotations()}),b}}.call(m.prototype),b.Mode=m}),define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/unicode","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("../lib/lang"),f=a("../unicode"),g=a("./doc_comment_highlight_rules").DocCommentHighlightRules,h=a("./text_highlight_rules").TextHighlightRules,i=function(){var a=e.arrayToMap("Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document".split("|")),b=e.arrayToMap("break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|const|yield|import|get|set".split("|")),c="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield",d=e.arrayToMap("__parent__|__count__|escape|unescape|with|__proto__".split("|")),h=e.arrayToMap("const|let|var|function".split("|")),i=e.arrayToMap("null|Infinity|NaN|undefined".split("|")),j=e.arrayToMap("class|enum|extends|super|export|implements|private|public|interface|package|protected|static".split("|")),k="["+f.packages.L+"\\$_]["+f.packages.L+f.packages.Mn+f.packages.Mc+f.packages.Nd+f.packages.Pc+"\\$_]*\\b";this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},(new g).getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",merge:!0,regex:'["].*\\\\$',next:"qqstring"},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"string",merge:!0,regex:"['].*\\\\$",next:"qstring"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:["keyword.definition","text","entity.name.function"],regex:"(function)(\\s+)("+k+")"},{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:"keyword",regex:"(?:"+c+")\\b",next:"regex_allowed"},{token:function(c){return a.hasOwnProperty(c)?"variable.language":d.hasOwnProperty(c)?"invalid.deprecated":h.hasOwnProperty(c)?"keyword.definition":b.hasOwnProperty(c)?"keyword":i.hasOwnProperty(c)?"constant.language":j.hasOwnProperty(c)?"invalid.illegal":c=="debugger"?"invalid.deprecated":"identifier"},regex:k},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)",next:"regex_allowed"},{token:"punctuation.operator",regex:"\\?|\\:|\\,|\\;|\\.",next:"regex_allowed"},{token:"paren.lparen",regex:"[[({]",next:"regex_allowed"},{token:"paren.rparen",regex:"[\\])}]"},{token:"keyword.operator",regex:"\\/=?",next:"regex_allowed"},{token:"comment",regex:"^#!.*$"},{token:"text",regex:"\\s+"}],regex_allowed:[{token:"comment",merge:!0,regex:"\\/\\*",next:"comment_regex_allowed"},{token:"comment",regex:"\\/\\/.*$"},{token:"string.regexp",regex:"\\/",next:"regex",merge:!0},{token:"text",regex:"\\s+"},{token:"empty",regex:"",next:"start"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)",next:"regex"},{token:"string.regexp",regex:"/\\w*",next:"start",merge:!0},{token:"string.regexp",regex:"[^\\\\/\\[]+",next:"regex",merge:!0},{token:"string.regexp.charachterclass",regex:"\\[",next:"regex_character_class",merge:!0},{token:"empty",regex:"",next:"start"}],regex_character_class:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)",next:"regex_character_class"},{token:"string.regexp.charachterclass",regex:"]",next:"regex",merge:!0},{token:"string.regexp.charachterclass",regex:"[^\\\\\\]]+",next:"regex_character_class",merge:!0},{token:"empty",regex:"",next:"start"}],comment_regex_allowed:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"regex_allowed"},{token:"comment",merge:!0,regex:".+"}],comment:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"string",regex:'(?:(?:\\\\.)|(?:[^"\\\\]))*?"',next:"start"},{token:"string",merge:!0,regex:".+"}],qstring:[{token:"string",regex:"(?:(?:\\\\.)|(?:[^'\\\\]))*?'",next:"start"},{token:"string",merge:!0,regex:".+"}]},this.embedRules(g,"doc-",[(new g).getEndRule("start")])};d.inherits(i,h),b.JavaScriptHighlightRules=i}),define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text_highlight_rules").TextHighlightRules,f=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};d.inherits(f,e),function(){this.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},this.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}}}.call(f.prototype),b.DocCommentHighlightRules=f}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(a,b,c){"use strict";var d=a("../range").Range,e=function(){};((function(){this.checkOutdent=function(a,b){return/^\s+$/.test(a)?/^\s*\}/.test(b):!1},this.autoOutdent=function(a,b){var c=a.getLine(b),e=c.match(/^(\s*\})/);if(!e)return 0;var f=e[1].length,g=a.findMatchingBracket({row:b,column:f});if(!g||g.row==b)return 0;var h=this.$getIndent(a.getLine(g.row));a.replace(new d(b,0,b,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""}})).call(e.prototype),b.MatchingBraceOutdent=e}),define("ace/worker/worker_client",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("../lib/event_emitter").EventEmitter,f=function(b,d,e,f){this.changeListener=this.changeListener.bind(this);if(c.packaged){var g=this.$guessBasePath();this.$worker=new Worker(g+d)}else{var h=this.$normalizePath(a.nameToUrl("ace/worker/worker",null,"_"));this.$worker=new Worker(h);var i={};for(var j=0;j<b.length;j++){var k=b[j],l=this.$normalizePath(a.nameToUrl(k,null,"_").replace(/.js$/,""));i[k]=l}}this.$worker.postMessage({init:!0,tlns:i,module:e,classname:f}),this.callbackId=1,this.callbacks={};var m=this;this.$worker.onerror=function(a){throw window.console&&console.log&&console.log(a),a},this.$worker.onmessage=function(a){var b=a.data;switch(b.type){case"log":window.console&&console.log&&console.log(b.data);break;case"event":m._emit(b.name,{data:b.data});break;case"call":var c=m.callbacks[b.id];c&&(c(b.data),delete m.callbacks[b.id])}}};((function(){d.implement(this,e),this.$normalizePath=function(a){return a=a.replace(/^[a-z]+:\/\/[^\/]+\//,""),a=location.protocol+"//"+location.host+(a.charAt(0)=="/"?"":location.pathname.replace(/\/[^\/]*$/,""))+"/"+a.replace(/^[\/]+/,""),a},this.$guessBasePath=function(){if(a.aceBaseUrl)return a.aceBaseUrl;var b=document.getElementsByTagName("script");for(var c=0;c<b.length;c++){var d=b[c],e=d.getAttribute("data-ace-base");if(e)return e.replace(/\/*$/,"/");var f=d.src||d.getAttribute("src");if(!f)continue;var g=f.match(/^(?:(.*\/)ace\.js|(.*\/)ace(-uncompressed)?(-noconflict)?\.js)(?:\?|$)/);if(g)return g[1]||g[2]}return""},this.terminate=function(){this._emit("terminate",{}),this.$worker.terminate(),this.$worker=null,this.$doc.removeEventListener("change",this.changeListener),this.$doc=null},this.send=function(a,b){this.$worker.postMessage({command:a,args:b})},this.call=function(a,b,c){if(c){var d=this.callbackId++;this.callbacks[d]=c,b.push(d)}this.send(a,b)},this.emit=function(a,b){try{this.$worker.postMessage({event:a,data:{data:b.data}})}catch(c){}},this.attachToDocument=function(a){this.$doc&&this.terminate(),this.$doc=a,this.call("setValue",[a.getValue()]),a.on("change",this.changeListener)},this.changeListener=function(a){a.range={start:a.data.range.start,end:a.data.range.end},this.emit("change",a)}})).call(f.prototype),b.WorkerClient=f}),define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("../behaviour").Behaviour,f=function(){this.add("braces","insertion",function(a,b,c,d,e){if(e=="{"){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"{"+g+"}",selection:!1}:{text:"{}",selection:[1,1]}}if(e=="}"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var k=d.$findOpeningBracket("}",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}else if(e=="\n"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var l=d.findMatchingBracket({row:h.row,column:h.column+1});if(!l)return null;var m=this.getNextLineIndent(a,i.substring(0,i.length-1),d.getTabString()),n=this.$getIndent(d.doc.getLine(l.row));return{text:"\n"+m+"\n"+n,selection:[1,m.length,1,m.length]}}}}),this.add("braces","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="{"){var g=d.doc.getLine(e.start.row),h=g.substring(e.end.column,e.end.column+1);if(h=="}")return e.end.column++,e}}),this.add("parens","insertion",function(a,b,c,d,e){if(e=="("){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"("+g+")",selection:!1}:{text:"()",selection:[1,1]}}if(e==")"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j==")"){var k=d.$findOpeningBracket(")",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="("){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h==")")return e.end.column++,e}}),this.add("string_dquotes","insertion",function(a,b,c,d,e){if(e=='"'){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);if(g!=="")return{text:'"'+g+'"',selection:!1};var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column-1,h.column);if(j=="\\")return null;var k=d.getTokens(f.start.row,f.start.row)[0].tokens,l=0,m,n=-1;for(var o=0;o<k.length;o++){m=k[o],m.type=="string"?n=-1:n<0&&(n=m.value.indexOf('"'));if(m.value.length+l>f.start.column)break;l+=k[o].value.length}if(!m||n<0&&m.type!=="comment"&&(m.type!=="string"||f.start.column!==m.value.length+l-1&&m.value.lastIndexOf('"')===m.value.length-1))return{text:'""',selection:[1,1]};if(m&&m.type==="string"){var p=i.substring(h.column,h.column+1);if(p=='"')return{text:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=='"'){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h=='"')return e.end.column++,e}})};d.inherits(f,e),b.CstyleBehaviour=f}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("../../range").Range,f=a("./fold_mode").FoldMode,g=b.FoldMode=function(){};d.inherits(g,f),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(a,b,c){var d=a.getLine(c),f=d.match(this.foldingStartMarker);if(f){var g=f.index;if(f[1])return this.openingBracketBlock(a,f[1],c,g);var h=a.getCommentFoldRange(c,g+f[0].length);return h.end.column-=2,h}if(b!=="markbeginend")return;var f=d.match(this.foldingStopMarker);if(f){var g=f.index+f[0].length;if(f[2]){var h=a.getCommentFoldRange(c,g);return h.end.column-=2,h}var i={row:c,column:g},j=a.$findOpeningBracket(f[1],i);if(!j)return;return j.column++,i.column--,e.fromPoints(j,i)}}}.call(g.prototype)}),define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"],function(a,b,c){"use strict";var d=a("../../range").Range,e=b.FoldMode=function(){};((function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(a,b,c){var d=a.getLine(c);return this.foldingStartMarker.test(d)?"start":b=="markbeginend"&&this.foldingStopMarker&&this.foldingStopMarker.test(d)?"end":""},this.getFoldWidgetRange=function(a,b,c){return null},this.indentationBlock=function(a,b,c){var e=/^\s*/,f=b,g=b,h=a.getLine(b),i=c||h.length,j=h.match(e)[0].length,k=a.getLength();while(++b<k){h=a.getLine(b);var l=h.match(e)[0].length;if(l==h.length)continue;if(l<=j)break;g=b}if(g>f){var m=a.getLine(g).length;return new d(f,i,g,m)}},this.openingBracketBlock=function(a,b,c,e){var f={row:c,column:e+1},g=a.$findClosingBracket(b,f);if(!g)return;var h=a.foldWidgets[g.row];return h==null&&(h=this.getFoldWidget(a,g.row)),h=="start"&&(g.row--,g.column=a.getLine(g.row).length),d.fromPoints(f,g)}})).call(e.prototype)}),define("ace/mode/scala_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("../lib/lang"),f=a("./doc_comment_highlight_rules").DocCommentHighlightRules,g=a("./text_highlight_rules").TextHighlightRules,h=function(){var a=e.arrayToMap("case|default|do|else|for|if|match|while|throw|return|try|catch|finally|yield|abstract|class|def|extends|final|forSome|implicit|implicits|import|lazy|new|object|override|package|private|protected|sealed|super|this|trait|type|val|var|with".split("|")),b=e.arrayToMap("true|false".split("|")),c=e.arrayToMap("AbstractMethodError|AssertionError|ClassCircularityError|ClassFormatError|Deprecated|EnumConstantNotPresentException|ExceptionInInitializerError|IllegalAccessError|IllegalThreadStateException|InstantiationError|InternalError|NegativeArraySizeException|NoSuchFieldError|Override|Process|ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|SuppressWarnings|TypeNotPresentException|UnknownError|UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|InstantiationException|IndexOutOfBoundsException|ArrayIndexOutOfBoundsException|CloneNotSupportedException|NoSuchFieldException|IllegalArgumentException|NumberFormatException|SecurityException|Void|InheritableThreadLocal|IllegalStateException|InterruptedException|NoSuchMethodException|IllegalAccessException|UnsupportedOperationException|Enum|StrictMath|Package|Compiler|Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|Character|Boolean|StackTraceElement|Appendable|StringBuffer|Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|StackOverflowError|OutOfMemoryError|VirtualMachineError|ArrayStoreException|ClassCastException|LinkageError|NoClassDefFoundError|ClassNotFoundException|RuntimeException|Exception|ThreadDeath|Error|Throwable|System|ClassLoader|Cloneable|Class|CharSequence|Comparable|String|Object|Unit|Any|AnyVal|AnyRef|Null|ScalaObject|Singleton|Seq|Iterable|List|Option|Array|Char|Byte|Short|Int|Long|Nothing".split("|")),d=e.arrayToMap("".split("|"));this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},(new f).getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"string.regexp",regex:"[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:function(e){return e=="this"?"variable.language":a.hasOwnProperty(e)?"keyword":c.hasOwnProperty(e)?"support.function":d.hasOwnProperty(e)?"support.function":b.hasOwnProperty(e)?"constant.language":"identifier"},regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",merge:!0,regex:".+"}]},this.embedRules(f,"doc-",[(new f).getEndRule("start")])};d.inherits(h,g),b.ScalaHighlightRules=h}),function(){window.require(["ace/ace"],function(a){window.ace||(window.ace={});for(var b in a)a.hasOwnProperty(b)&&(ace[b]=a[b])})}() \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-scss-uncompressed.js b/apps/files_texteditor/js/aceeditor/mode-scss-uncompressed.js
new file mode 100755
index 00000000000..9639f0d4d2a
--- /dev/null
+++ b/apps/files_texteditor/js/aceeditor/mode-scss-uncompressed.js
@@ -0,0 +1,688 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/scss', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/scss_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/mode/folding/cstyle'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextMode = require("./text").Mode;
+var Tokenizer = require("../tokenizer").Tokenizer;
+var ScssHighlightRules = require("./scss_highlight_rules").ScssHighlightRules;
+var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
+var CStyleFoldMode = require("./folding/cstyle").FoldMode;
+
+var Mode = function() {
+ this.$tokenizer = new Tokenizer(new ScssHighlightRules().getRules(), "i");
+ this.$outdent = new MatchingBraceOutdent();
+ this.foldingRules = new CStyleFoldMode();
+};
+oop.inherits(Mode, TextMode);
+
+(function() {
+
+ this.getNextLineIndent = function(state, line, tab) {
+ var indent = this.$getIndent(line);
+
+ // ignore braces in comments
+ var tokens = this.$tokenizer.getLineTokens(line, state).tokens;
+ if (tokens.length && tokens[tokens.length-1].type == "comment") {
+ return indent;
+ }
+
+ var match = line.match(/^.*\{\s*$/);
+ if (match) {
+ indent += tab;
+ }
+
+ return indent;
+ };
+
+ this.checkOutdent = function(state, line, input) {
+ return this.$outdent.checkOutdent(line, input);
+ };
+
+ this.autoOutdent = function(state, doc, row) {
+ this.$outdent.autoOutdent(doc, row);
+ };
+
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/scss_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var lang = require("../lib/lang");
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var ScssHighlightRules = function() {
+
+ var properties = lang.arrayToMap( (function () {
+
+ var browserPrefix = ("-webkit-|-moz-|-o-|-ms-|-svg-|-pie-|-khtml-").split("|");
+
+ var prefixProperties = ("appearance|background-clip|background-inline-policy|background-origin|" +
+ "background-size|binding|border-bottom-colors|border-left-colors|" +
+ "border-right-colors|border-top-colors|border-end|border-end-color|" +
+ "border-end-style|border-end-width|border-image|border-start|" +
+ "border-start-color|border-start-style|border-start-width|box-align|" +
+ "box-direction|box-flex|box-flexgroup|box-ordinal-group|box-orient|" +
+ "box-pack|box-sizing|column-count|column-gap|column-width|column-rule|" +
+ "column-rule-width|column-rule-style|column-rule-color|float-edge|" +
+ "font-feature-settings|font-language-override|force-broken-image-icon|" +
+ "image-region|margin-end|margin-start|opacity|outline|outline-color|" +
+ "outline-offset|outline-radius|outline-radius-bottomleft|" +
+ "outline-radius-bottomright|outline-radius-topleft|outline-radius-topright|" +
+ "outline-style|outline-width|padding-end|padding-start|stack-sizing|" +
+ "tab-size|text-blink|text-decoration-color|text-decoration-line|" +
+ "text-decoration-style|transform|transform-origin|transition|" +
+ "transition-delay|transition-duration|transition-property|" +
+ "transition-timing-function|user-focus|user-input|user-modify|user-select|" +
+ "window-shadow|border-radius").split("|");
+
+ var properties = ("azimuth|background-attachment|background-color|background-image|" +
+ "background-position|background-repeat|background|border-bottom-color|" +
+ "border-bottom-style|border-bottom-width|border-bottom|border-collapse|" +
+ "border-color|border-left-color|border-left-style|border-left-width|" +
+ "border-left|border-right-color|border-right-style|border-right-width|" +
+ "border-right|border-spacing|border-style|border-top-color|" +
+ "border-top-style|border-top-width|border-top|border-width|border|" +
+ "bottom|box-sizing|caption-side|clear|clip|color|content|counter-increment|" +
+ "counter-reset|cue-after|cue-before|cue|cursor|direction|display|" +
+ "elevation|empty-cells|float|font-family|font-size-adjust|font-size|" +
+ "font-stretch|font-style|font-variant|font-weight|font|height|left|" +
+ "letter-spacing|line-height|list-style-image|list-style-position|" +
+ "list-style-type|list-style|margin-bottom|margin-left|margin-right|" +
+ "margin-top|marker-offset|margin|marks|max-height|max-width|min-height|" +
+ "min-width|opacity|orphans|outline-color|" +
+ "outline-style|outline-width|outline|overflow|overflow-x|overflow-y|padding-bottom|" +
+ "padding-left|padding-right|padding-top|padding|page-break-after|" +
+ "page-break-before|page-break-inside|page|pause-after|pause-before|" +
+ "pause|pitch-range|pitch|play-during|position|quotes|richness|right|" +
+ "size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|" +
+ "stress|table-layout|text-align|text-decoration|text-indent|" +
+ "text-shadow|text-transform|top|unicode-bidi|vertical-align|" +
+ "visibility|voice-family|volume|white-space|widows|width|word-spacing|" +
+ "z-index").split("|");
+
+ //The return array
+ var ret = [];
+
+ //All prefixProperties will get the browserPrefix in
+ //the begning by join the prefixProperties array with the value of browserPrefix
+ for (var i=0, ln=browserPrefix.length; i<ln; i++) {
+ Array.prototype.push.apply(
+ ret,
+ (( browserPrefix[i] + prefixProperties.join("|" + browserPrefix[i]) ).split("|"))
+ );
+ }
+
+ //Add also prefixProperties and properties without any browser prefix
+ Array.prototype.push.apply(ret, prefixProperties);
+ Array.prototype.push.apply(ret, properties);
+
+ return ret;
+
+ })() );
+
+
+
+ var functions = lang.arrayToMap(
+ ("hsl|hsla|rgb|rgba|url|attr|counter|counters|abs|adjust_color|adjust_hue|" +
+ "alpha|join|blue|ceil|change_color|comparable|complement|darken|desaturate|" +
+ "floor|grayscale|green|hue|if|invert|join|length|lighten|lightness|mix|" +
+ "nth|opacify|opacity|percentage|quote|red|round|saturate|saturation|" +
+ "scale_color|transparentize|type_of|unit|unitless|unqoute").split("|")
+ );
+
+ var constants = lang.arrayToMap(
+ ("absolute|all-scroll|always|armenian|auto|baseline|below|bidi-override|" +
+ "block|bold|bolder|border-box|both|bottom|break-all|break-word|capitalize|center|" +
+ "char|circle|cjk-ideographic|col-resize|collapse|content-box|crosshair|dashed|" +
+ "decimal-leading-zero|decimal|default|disabled|disc|" +
+ "distribute-all-lines|distribute-letter|distribute-space|" +
+ "distribute|dotted|double|e-resize|ellipsis|fixed|georgian|groove|" +
+ "hand|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|" +
+ "ideograph-alpha|ideograph-numeric|ideograph-parenthesis|" +
+ "ideograph-space|inactive|inherit|inline-block|inline|inset|inside|" +
+ "inter-ideograph|inter-word|italic|justify|katakana-iroha|katakana|" +
+ "keep-all|left|lighter|line-edge|line-through|line|list-item|loose|" +
+ "lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|" +
+ "medium|middle|move|n-resize|ne-resize|newspaper|no-drop|no-repeat|" +
+ "nw-resize|none|normal|not-allowed|nowrap|oblique|outset|outside|" +
+ "overline|pointer|progress|relative|repeat-x|repeat-y|repeat|right|" +
+ "ridge|row-resize|rtl|s-resize|scroll|se-resize|separate|small-caps|" +
+ "solid|square|static|strict|super|sw-resize|table-footer-group|" +
+ "table-header-group|tb-rl|text-bottom|text-top|text|thick|thin|top|" +
+ "transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|" +
+ "vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|" +
+ "zero").split("|")
+ );
+
+ var colors = lang.arrayToMap(
+ ("aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|" +
+ "purple|red|silver|teal|white|yellow").split("|")
+ );
+
+ var keywords = lang.arrayToMap(
+ ("@mixin|@extend|@include|@import|@media|@debug|@warn|@if|@for|@each|@while|@else|@font-face|@-webkit-keyframes|if|and|!default|module|def|end|declare").split("|")
+ )
+
+ var tags = lang.arrayToMap(
+ ("a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|" +
+ "big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|" +
+ "command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|" +
+ "figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|" +
+ "header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|" +
+ "link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|" +
+ "option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|" +
+ "small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|" +
+ "textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp").split("|")
+ );
+
+ // regexp must not have capturing parentheses. Use (?:) instead.
+ // regexps are ordered -> the first match is used
+
+ var numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))";
+
+ // regexp must not have capturing parentheses. Use (?:) instead.
+ // regexps are ordered -> the first match is used
+
+ this.$rules = {
+ "start" : [
+ {
+ token : "comment",
+ regex : "\\/\\/.*$"
+ },
+ {
+ token : "comment", // multi line comment
+ merge : true,
+ regex : "\\/\\*",
+ next : "comment"
+ }, {
+ token : "string", // single line
+ regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
+ }, {
+ token : "string", // multi line string start
+ merge : true,
+ regex : '["].*\\\\$',
+ next : "qqstring"
+ }, {
+ token : "string", // single line
+ regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
+ }, {
+ token : "string", // multi line string start
+ merge : true,
+ regex : "['].*\\\\$",
+ next : "qstring"
+ }, {
+ token : "constant.numeric",
+ regex : numRe + "(?:em|ex|px|cm|mm|in|pt|pc|deg|rad|grad|ms|s|hz|khz|%)"
+ }, {
+ token : "constant.numeric", // hex6 color
+ regex : "#[a-f0-9]{6}"
+ }, {
+ token : "constant.numeric", // hex3 color
+ regex : "#[a-f0-9]{3}"
+ }, {
+ token : "constant.numeric",
+ regex : numRe
+ }, {
+ token : function(value) {
+ if (properties.hasOwnProperty(value.toLowerCase()))
+ return "support.type";
+ if (keywords.hasOwnProperty(value))
+ return "keyword";
+ else if (constants.hasOwnProperty(value))
+ return "constant.language";
+ else if (functions.hasOwnProperty(value))
+ return "support.function";
+ else if (colors.hasOwnProperty(value.toLowerCase()))
+ return "support.constant.color";
+ else if (tags.hasOwnProperty(value.toLowerCase()))
+ return "variable.language";
+ else
+ return "text";
+ },
+ regex : "\\-?[@a-z_][@a-z0-9_\\-]*"
+ }, {
+ token : "variable",
+ regex : "[a-z_\\-$][a-z0-9_\\-$]*\\b"
+ }, {
+ token: "variable.language",
+ regex: "#[a-z0-9-_]+"
+ }, {
+ token: "variable.language",
+ regex: "\\.[a-z0-9-_]+"
+ }, {
+ token: "variable.language",
+ regex: ":[a-z0-9-_]+"
+ }, {
+ token: "constant",
+ regex: "[a-z0-9-_]+"
+ }, {
+ token : "keyword.operator",
+ regex : "<|>|<=|>=|==|!=|-|%|#|\\+|\\$|\\+|\\*"
+ }, {
+ token : "paren.lparen",
+ regex : "[[({]"
+ }, {
+ token : "paren.rparen",
+ regex : "[\\])}]"
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }
+ ],
+ "comment" : [
+ {
+ token : "comment", // closing comment
+ regex : ".*?\\*\\/",
+ next : "start"
+ }, {
+ token : "comment", // comment spanning whole line
+ merge : true,
+ regex : ".+"
+ }
+ ],
+ "qqstring" : [
+ {
+ token : "string",
+ regex : '(?:(?:\\\\.)|(?:[^"\\\\]))*?"',
+ next : "start"
+ }, {
+ token : "string",
+ merge : true,
+ regex : '.+'
+ }
+ ],
+ "qstring" : [
+ {
+ token : "string",
+ regex : "(?:(?:\\\\.)|(?:[^'\\\\]))*?'",
+ next : "start"
+ }, {
+ token : "string",
+ merge : true,
+ regex : '.+'
+ }
+ ]
+ };
+};
+
+oop.inherits(ScssHighlightRules, TextHighlightRules);
+
+exports.ScssHighlightRules = ScssHighlightRules;
+
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var Range = require("../range").Range;
+
+var MatchingBraceOutdent = function() {};
+
+(function() {
+
+ this.checkOutdent = function(line, input) {
+ if (! /^\s+$/.test(line))
+ return false;
+
+ return /^\s*\}/.test(input);
+ };
+
+ this.autoOutdent = function(doc, row) {
+ var line = doc.getLine(row);
+ var match = line.match(/^(\s*\})/);
+
+ if (!match) return 0;
+
+ var column = match[1].length;
+ var openBracePos = doc.findMatchingBracket({row: row, column: column});
+
+ if (!openBracePos || openBracePos.row == row) return 0;
+
+ var indent = this.$getIndent(doc.getLine(openBracePos.row));
+ doc.replace(new Range(row, 0, row, column-1), indent);
+ };
+
+ this.$getIndent = function(line) {
+ var match = line.match(/^(\s+)/);
+ if (match) {
+ return match[1];
+ }
+
+ return "";
+ };
+
+}).call(MatchingBraceOutdent.prototype);
+
+exports.MatchingBraceOutdent = MatchingBraceOutdent;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var Range = require("../../range").Range;
+var BaseFoldMode = require("./fold_mode").FoldMode;
+
+var FoldMode = exports.FoldMode = function() {};
+oop.inherits(FoldMode, BaseFoldMode);
+
+(function() {
+
+ this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
+ this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ var line = session.getLine(row);
+ var match = line.match(this.foldingStartMarker);
+ if (match) {
+ var i = match.index;
+
+ if (match[1])
+ return this.openingBracketBlock(session, match[1], row, i);
+
+ var range = session.getCommentFoldRange(row, i + match[0].length);
+ range.end.column -= 2;
+ return range;
+ }
+
+ if (foldStyle !== "markbeginend")
+ return;
+
+ var match = line.match(this.foldingStopMarker);
+ if (match) {
+ var i = match.index + match[0].length;
+
+ if (match[2]) {
+ var range = session.getCommentFoldRange(row, i);
+ range.end.column -= 2;
+ return range;
+ }
+
+ var end = {row: row, column: i};
+ var start = session.$findOpeningBracket(match[1], end);
+
+ if (!start)
+ return;
+
+ start.column++;
+ end.column--;
+
+ return Range.fromPoints(start, end);
+ }
+ };
+
+}).call(FoldMode.prototype);
+
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/fold_mode', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var Range = require("../../range").Range;
+
+var FoldMode = exports.FoldMode = function() {};
+
+(function() {
+
+ this.foldingStartMarker = null;
+ this.foldingStopMarker = null;
+
+ // must return "" if there's no fold, to enable caching
+ this.getFoldWidget = function(session, foldStyle, row) {
+ var line = session.getLine(row);
+ if (this.foldingStartMarker.test(line))
+ return "start";
+ if (foldStyle == "markbeginend"
+ && this.foldingStopMarker
+ && this.foldingStopMarker.test(line))
+ return "end";
+ return "";
+ };
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ return null;
+ };
+
+ this.indentationBlock = function(session, row, column) {
+ var re = /^\s*/;
+ var startRow = row;
+ var endRow = row;
+ var line = session.getLine(row);
+ var startColumn = column || line.length;
+ var startLevel = line.match(re)[0].length;
+ var maxRow = session.getLength()
+
+ while (++row < maxRow) {
+ line = session.getLine(row);
+ var level = line.match(re)[0].length;
+
+ if (level == line.length)
+ continue;
+
+ if (level <= startLevel)
+ break;
+
+ endRow = row;
+ }
+
+ if (endRow > startRow) {
+ var endColumn = session.getLine(endRow).length;
+ return new Range(startRow, startColumn, endRow, endColumn);
+ }
+ };
+
+ this.openingBracketBlock = function(session, bracket, row, column) {
+ var start = {row: row, column: column + 1};
+ var end = session.$findClosingBracket(bracket, start);
+ if (!end)
+ return;
+
+ var fw = session.foldWidgets[end.row];
+ if (fw == null)
+ fw = this.getFoldWidget(session, end.row);
+
+ if (fw == "start") {
+ end.row --;
+ end.column = session.getLine(end.row).length;
+ }
+ return Range.fromPoints(start, end);
+ };
+
+}).call(FoldMode.prototype);
+
+});
+;
+ (function() {
+ window.require(["ace/ace"], function(a) {
+ if (!window.ace)
+ window.ace = {};
+ for (var key in a) if (a.hasOwnProperty(key))
+ ace[key] = a[key];
+ });
+ })();
+ \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-scss.js b/apps/files_texteditor/js/aceeditor/mode-scss.js
index 9b4e118427a..3f63dc4305d 100644
--- a/apps/files_texteditor/js/aceeditor/mode-scss.js
+++ b/apps/files_texteditor/js/aceeditor/mode-scss.js
@@ -1 +1 @@
-define("ace/mode/scss",["require","exports","module","pilot/oop","ace/mode/text","ace/tokenizer","ace/mode/scss_highlight_rules","ace/mode/matching_brace_outdent"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/text").Mode,f=a("ace/tokenizer").Tokenizer,g=a("ace/mode/scss_highlight_rules").ScssHighlightRules,h=a("ace/mode/matching_brace_outdent").MatchingBraceOutdent,i=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h};d.inherits(i,e),function(){this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=this.$tokenizer.getLineTokens(b,a).tokens;if(e.length&&e[e.length-1].type=="comment")return d;var f=b.match(/^.*\{\s*$/);f&&(d+=c);return d},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)}}.call(i.prototype),b.Mode=i}),define("ace/mode/scss_highlight_rules",["require","exports","module","pilot/oop","pilot/lang","ace/mode/text_highlight_rules"],function(a,b,c){var d=a("pilot/oop"),e=a("pilot/lang"),f=a("ace/mode/text_highlight_rules").TextHighlightRules,g=function(){function i(a){var b=[],c=a.split("");for(var d=0;d<c.length;d++)b.push("[",c[d].toLowerCase(),c[d].toUpperCase(),"]");return b.join("")}var a=e.arrayToMap(function(){var a="-webkit-|-moz-|-o-|-ms-|-svg-|-pie-|-khtml-".split("|"),b="appearance|background-clip|background-inline-policy|background-origin|background-size|binding|border-bottom-colors|border-left-colors|border-right-colors|border-top-colors|border-end|border-end-color|border-end-style|border-end-width|border-image|border-start|border-start-color|border-start-style|border-start-width|box-align|box-direction|box-flex|box-flexgroup|box-ordinal-group|box-orient|box-pack|box-sizing|column-count|column-gap|column-width|column-rule|column-rule-width|column-rule-style|column-rule-color|float-edge|font-feature-settings|font-language-override|force-broken-image-icon|image-region|margin-end|margin-start|opacity|outline|outline-color|outline-offset|outline-radius|outline-radius-bottomleft|outline-radius-bottomright|outline-radius-topleft|outline-radius-topright|outline-style|outline-width|padding-end|padding-start|stack-sizing|tab-size|text-blink|text-decoration-color|text-decoration-line|text-decoration-style|transform|transform-origin|transition|transition-delay|transition-duration|transition-property|transition-timing-function|user-focus|user-input|user-modify|user-select|window-shadow|border-radius".split("|"),c="azimuth|background-attachment|background-color|background-image|background-position|background-repeat|background|border-bottom-color|border-bottom-style|border-bottom-width|border-bottom|border-collapse|border-color|border-left-color|border-left-style|border-left-width|border-left|border-right-color|border-right-style|border-right-width|border-right|border-spacing|border-style|border-top-color|border-top-style|border-top-width|border-top|border-width|border|bottom|box-sizing|caption-side|clear|clip|color|content|counter-increment|counter-reset|cue-after|cue-before|cue|cursor|direction|display|elevation|empty-cells|float|font-family|font-size-adjust|font-size|font-stretch|font-style|font-variant|font-weight|font|height|left|letter-spacing|line-height|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|marker-offset|margin|marks|max-height|max-width|min-height|min-width|opacity|orphans|outline-color|outline-style|outline-width|outline|overflow|overflow-x|overflow-y|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page|pause-after|pause-before|pause|pitch-range|pitch|play-during|position|quotes|richness|right|size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|stress|table-layout|text-align|text-decoration|text-indent|text-shadow|text-transform|top|unicode-bidi|vertical-align|visibility|voice-family|volume|white-space|widows|width|word-spacing|z-index".split("|"),d=[];for(var e=0,f=a.length;e<f;e++)Array.prototype.push.apply(d,(a[e]+b.join("|"+a[e])).split("|"));Array.prototype.push.apply(d,b),Array.prototype.push.apply(d,c);return d}()),b=e.arrayToMap("hsl|hsla|rgb|rgba|url|attr|counter|counters|abs|adjust_color|adjust_hue|alpha|join|blue|ceil|change_color|comparable|complement|darken|desaturate|floor|grayscale|green|hue|if|invert|join|length|lighten|lightness|mix|nth|opacify|opacity|percentage|quote|red|round|saturate|saturation|scale_color|transparentize|type_of|unit|unitless|unqoute".split("|")),c=e.arrayToMap("absolute|all-scroll|always|armenian|auto|baseline|below|bidi-override|block|bold|bolder|border-box|both|bottom|break-all|break-word|capitalize|center|char|circle|cjk-ideographic|col-resize|collapse|content-box|crosshair|dashed|decimal-leading-zero|decimal|default|disabled|disc|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ellipsis|fixed|georgian|groove|hand|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|inactive|inherit|inline-block|inline|inset|inside|inter-ideograph|inter-word|italic|justify|katakana-iroha|katakana|keep-all|left|lighter|line-edge|line-through|line|list-item|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|medium|middle|move|n-resize|ne-resize|newspaper|no-drop|no-repeat|nw-resize|none|normal|not-allowed|nowrap|oblique|outset|outside|overline|pointer|progress|relative|repeat-x|repeat-y|repeat|right|ridge|row-resize|rtl|s-resize|scroll|se-resize|separate|small-caps|solid|square|static|strict|super|sw-resize|table-footer-group|table-header-group|tb-rl|text-bottom|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|zero".split("|")),d=e.arrayToMap("aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow".split("|")),f=e.arrayToMap("@mixin|@extend|@include|@import|@media|@debug|@warn|@if|@for|@each|@while|@else|@font-face|@-webkit-keyframes|if|and|!default|module|def|end|declare".split("|")),g=e.arrayToMap("a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp".split("|")),h="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))";this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",merge:!0,regex:'["].*\\\\$',next:"qqstring"},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"string",merge:!0,regex:"['].*\\\\$",next:"qstring"},{token:"constant.numeric",regex:h+i("em")},{token:"constant.numeric",regex:h+i("ex")},{token:"constant.numeric",regex:h+i("px")},{token:"constant.numeric",regex:h+i("cm")},{token:"constant.numeric",regex:h+i("mm")},{token:"constant.numeric",regex:h+i("in")},{token:"constant.numeric",regex:h+i("pt")},{token:"constant.numeric",regex:h+i("pc")},{token:"constant.numeric",regex:h+i("deg")},{token:"constant.numeric",regex:h+i("rad")},{token:"constant.numeric",regex:h+i("grad")},{token:"constant.numeric",regex:h+i("ms")},{token:"constant.numeric",regex:h+i("s")},{token:"constant.numeric",regex:h+i("hz")},{token:"constant.numeric",regex:h+i("khz")},{token:"constant.numeric",regex:h+"%"},{token:"constant.numeric",regex:"#[a-fA-F0-9]{6}"},{token:"constant.numeric",regex:"#[a-fA-F0-9]{3}"},{token:"constant.numeric",regex:h},{token:function(e){return a.hasOwnProperty(e.toLowerCase())?"support.type":f.hasOwnProperty(e)?"keyword":c.hasOwnProperty(e)?"constant.language":b.hasOwnProperty(e)?"support.function":d.hasOwnProperty(e.toLowerCase())?"support.constant.color":g.hasOwnProperty(e.toLowerCase())?"variable.language":"text"},regex:"\\-?[@a-zA-Z_][@a-zA-Z0-9_\\-]*"},{token:"variable",regex:"[a-zA-Z_\\-$][a-zA-Z0-9_\\-$]*\\b"},{token:"variable.language",regex:"#[a-zA-Z0-9-_]+"},{token:"variable.language",regex:"\\.[a-zA-Z0-9-_]+"},{token:"variable.language",regex:":[a-zA-Z0-9-_]+"},{token:"constant",regex:"[a-zA-Z0-9-_]+"},{token:"keyword.operator",regex:"<|>|<=|>=|==|!=|-|%|#|\\+|\\$|\\+|\\*"},{token:"lparen",regex:"[[({]"},{token:"rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"string",regex:'(?:(?:\\\\.)|(?:[^"\\\\]))*?"',next:"start"},{token:"string",merge:!0,regex:".+"}],qstring:[{token:"string",regex:"(?:(?:\\\\.)|(?:[^'\\\\]))*?'",next:"start"},{token:"string",merge:!0,regex:".+"}]}};d.inherits(g,f),b.ScssHighlightRules=g}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(a,b,c){var d=a("ace/range").Range,e=function(){};(function(){this.checkOutdent=function(a,b){return/^\s+$/.test(a)?/^\s*\}/.test(b):!1},this.autoOutdent=function(a,b){var c=a.getLine(b),e=c.match(/^(\s*\})/);if(!e)return 0;var f=e[1].length,g=a.findMatchingBracket({row:b,column:f});if(!g||g.row==b)return 0;var h=this.$getIndent(a.getLine(g.row));a.replace(new d(b,0,b,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""}}).call(e.prototype),b.MatchingBraceOutdent=e}) \ No newline at end of file
+define("ace/mode/scss",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/scss_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/folding/cstyle"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text").Mode,f=a("../tokenizer").Tokenizer,g=a("./scss_highlight_rules").ScssHighlightRules,h=a("./matching_brace_outdent").MatchingBraceOutdent,i=a("./folding/cstyle").FoldMode,j=function(){this.$tokenizer=new f((new g).getRules(),"i"),this.$outdent=new h,this.foldingRules=new i};d.inherits(j,e),function(){this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=this.$tokenizer.getLineTokens(b,a).tokens;if(e.length&&e[e.length-1].type=="comment")return d;var f=b.match(/^.*\{\s*$/);return f&&(d+=c),d},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)}}.call(j.prototype),b.Mode=j}),define("ace/mode/scss_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("../lib/lang"),f=a("./text_highlight_rules").TextHighlightRules,g=function(){var a=e.arrayToMap(function(){var a="-webkit-|-moz-|-o-|-ms-|-svg-|-pie-|-khtml-".split("|"),b="appearance|background-clip|background-inline-policy|background-origin|background-size|binding|border-bottom-colors|border-left-colors|border-right-colors|border-top-colors|border-end|border-end-color|border-end-style|border-end-width|border-image|border-start|border-start-color|border-start-style|border-start-width|box-align|box-direction|box-flex|box-flexgroup|box-ordinal-group|box-orient|box-pack|box-sizing|column-count|column-gap|column-width|column-rule|column-rule-width|column-rule-style|column-rule-color|float-edge|font-feature-settings|font-language-override|force-broken-image-icon|image-region|margin-end|margin-start|opacity|outline|outline-color|outline-offset|outline-radius|outline-radius-bottomleft|outline-radius-bottomright|outline-radius-topleft|outline-radius-topright|outline-style|outline-width|padding-end|padding-start|stack-sizing|tab-size|text-blink|text-decoration-color|text-decoration-line|text-decoration-style|transform|transform-origin|transition|transition-delay|transition-duration|transition-property|transition-timing-function|user-focus|user-input|user-modify|user-select|window-shadow|border-radius".split("|"),c="azimuth|background-attachment|background-color|background-image|background-position|background-repeat|background|border-bottom-color|border-bottom-style|border-bottom-width|border-bottom|border-collapse|border-color|border-left-color|border-left-style|border-left-width|border-left|border-right-color|border-right-style|border-right-width|border-right|border-spacing|border-style|border-top-color|border-top-style|border-top-width|border-top|border-width|border|bottom|box-sizing|caption-side|clear|clip|color|content|counter-increment|counter-reset|cue-after|cue-before|cue|cursor|direction|display|elevation|empty-cells|float|font-family|font-size-adjust|font-size|font-stretch|font-style|font-variant|font-weight|font|height|left|letter-spacing|line-height|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|marker-offset|margin|marks|max-height|max-width|min-height|min-width|opacity|orphans|outline-color|outline-style|outline-width|outline|overflow|overflow-x|overflow-y|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page|pause-after|pause-before|pause|pitch-range|pitch|play-during|position|quotes|richness|right|size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|stress|table-layout|text-align|text-decoration|text-indent|text-shadow|text-transform|top|unicode-bidi|vertical-align|visibility|voice-family|volume|white-space|widows|width|word-spacing|z-index".split("|"),d=[];for(var e=0,f=a.length;e<f;e++)Array.prototype.push.apply(d,(a[e]+b.join("|"+a[e])).split("|"));return Array.prototype.push.apply(d,b),Array.prototype.push.apply(d,c),d}()),b=e.arrayToMap("hsl|hsla|rgb|rgba|url|attr|counter|counters|abs|adjust_color|adjust_hue|alpha|join|blue|ceil|change_color|comparable|complement|darken|desaturate|floor|grayscale|green|hue|if|invert|join|length|lighten|lightness|mix|nth|opacify|opacity|percentage|quote|red|round|saturate|saturation|scale_color|transparentize|type_of|unit|unitless|unqoute".split("|")),c=e.arrayToMap("absolute|all-scroll|always|armenian|auto|baseline|below|bidi-override|block|bold|bolder|border-box|both|bottom|break-all|break-word|capitalize|center|char|circle|cjk-ideographic|col-resize|collapse|content-box|crosshair|dashed|decimal-leading-zero|decimal|default|disabled|disc|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ellipsis|fixed|georgian|groove|hand|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|inactive|inherit|inline-block|inline|inset|inside|inter-ideograph|inter-word|italic|justify|katakana-iroha|katakana|keep-all|left|lighter|line-edge|line-through|line|list-item|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|medium|middle|move|n-resize|ne-resize|newspaper|no-drop|no-repeat|nw-resize|none|normal|not-allowed|nowrap|oblique|outset|outside|overline|pointer|progress|relative|repeat-x|repeat-y|repeat|right|ridge|row-resize|rtl|s-resize|scroll|se-resize|separate|small-caps|solid|square|static|strict|super|sw-resize|table-footer-group|table-header-group|tb-rl|text-bottom|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|zero".split("|")),d=e.arrayToMap("aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow".split("|")),f=e.arrayToMap("@mixin|@extend|@include|@import|@media|@debug|@warn|@if|@for|@each|@while|@else|@font-face|@-webkit-keyframes|if|and|!default|module|def|end|declare".split("|")),g=e.arrayToMap("a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp".split("|")),h="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))";this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",merge:!0,regex:'["].*\\\\$',next:"qqstring"},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"string",merge:!0,regex:"['].*\\\\$",next:"qstring"},{token:"constant.numeric",regex:h+"(?:em|ex|px|cm|mm|in|pt|pc|deg|rad|grad|ms|s|hz|khz|%)"},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:"constant.numeric",regex:h},{token:function(e){return a.hasOwnProperty(e.toLowerCase())?"support.type":f.hasOwnProperty(e)?"keyword":c.hasOwnProperty(e)?"constant.language":b.hasOwnProperty(e)?"support.function":d.hasOwnProperty(e.toLowerCase())?"support.constant.color":g.hasOwnProperty(e.toLowerCase())?"variable.language":"text"},regex:"\\-?[@a-z_][@a-z0-9_\\-]*"},{token:"variable",regex:"[a-z_\\-$][a-z0-9_\\-$]*\\b"},{token:"variable.language",regex:"#[a-z0-9-_]+"},{token:"variable.language",regex:"\\.[a-z0-9-_]+"},{token:"variable.language",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"},{token:"keyword.operator",regex:"<|>|<=|>=|==|!=|-|%|#|\\+|\\$|\\+|\\*"},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"string",regex:'(?:(?:\\\\.)|(?:[^"\\\\]))*?"',next:"start"},{token:"string",merge:!0,regex:".+"}],qstring:[{token:"string",regex:"(?:(?:\\\\.)|(?:[^'\\\\]))*?'",next:"start"},{token:"string",merge:!0,regex:".+"}]}};d.inherits(g,f),b.ScssHighlightRules=g}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(a,b,c){"use strict";var d=a("../range").Range,e=function(){};((function(){this.checkOutdent=function(a,b){return/^\s+$/.test(a)?/^\s*\}/.test(b):!1},this.autoOutdent=function(a,b){var c=a.getLine(b),e=c.match(/^(\s*\})/);if(!e)return 0;var f=e[1].length,g=a.findMatchingBracket({row:b,column:f});if(!g||g.row==b)return 0;var h=this.$getIndent(a.getLine(g.row));a.replace(new d(b,0,b,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""}})).call(e.prototype),b.MatchingBraceOutdent=e}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("../../range").Range,f=a("./fold_mode").FoldMode,g=b.FoldMode=function(){};d.inherits(g,f),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(a,b,c){var d=a.getLine(c),f=d.match(this.foldingStartMarker);if(f){var g=f.index;if(f[1])return this.openingBracketBlock(a,f[1],c,g);var h=a.getCommentFoldRange(c,g+f[0].length);return h.end.column-=2,h}if(b!=="markbeginend")return;var f=d.match(this.foldingStopMarker);if(f){var g=f.index+f[0].length;if(f[2]){var h=a.getCommentFoldRange(c,g);return h.end.column-=2,h}var i={row:c,column:g},j=a.$findOpeningBracket(f[1],i);if(!j)return;return j.column++,i.column--,e.fromPoints(j,i)}}}.call(g.prototype)}),define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"],function(a,b,c){"use strict";var d=a("../../range").Range,e=b.FoldMode=function(){};((function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(a,b,c){var d=a.getLine(c);return this.foldingStartMarker.test(d)?"start":b=="markbeginend"&&this.foldingStopMarker&&this.foldingStopMarker.test(d)?"end":""},this.getFoldWidgetRange=function(a,b,c){return null},this.indentationBlock=function(a,b,c){var e=/^\s*/,f=b,g=b,h=a.getLine(b),i=c||h.length,j=h.match(e)[0].length,k=a.getLength();while(++b<k){h=a.getLine(b);var l=h.match(e)[0].length;if(l==h.length)continue;if(l<=j)break;g=b}if(g>f){var m=a.getLine(g).length;return new d(f,i,g,m)}},this.openingBracketBlock=function(a,b,c,e){var f={row:c,column:e+1},g=a.$findClosingBracket(b,f);if(!g)return;var h=a.foldWidgets[g.row];return h==null&&(h=this.getFoldWidget(a,g.row)),h=="start"&&(g.row--,g.column=a.getLine(g.row).length),d.fromPoints(f,g)}})).call(e.prototype)}),function(){window.require(["ace/ace"],function(a){window.ace||(window.ace={});for(var b in a)a.hasOwnProperty(b)&&(ace[b]=a[b])})}() \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-sql-uncompressed.js b/apps/files_texteditor/js/aceeditor/mode-sql-uncompressed.js
new file mode 100755
index 00000000000..61195988d98
--- /dev/null
+++ b/apps/files_texteditor/js/aceeditor/mode-sql-uncompressed.js
@@ -0,0 +1,169 @@
+/* ***** BEGIN LICENSE BLOCK *****
+* The Original Code is Ajax.org Code Editor (ACE).
+*
+* Contributor(s):
+* Jonathan Camile <jonathan.camile AT gmail DOT com>
+*
+* Alternatively, the contents of this file may be used under the terms of
+* either the GNU General Public License Version 2 or later (the "GPL"), or
+* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+* in which case the provisions of the GPL or the LGPL are applicable instead
+* of those above. If you wish to allow use of your version of this file only
+* under the terms of either the GPL or the LGPL, and not to allow others to
+* use your version of this file under the terms of the MPL, indicate your
+* decision by deleting the provisions above and replace them with the notice
+* and other provisions required by the GPL or the LGPL. If you do not delete
+* the provisions above, a recipient may use your version of this file under
+* the terms of any one of the MPL, the GPL or the LGPL.
+*
+* ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/sql', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/sql_highlight_rules', 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextMode = require("./text").Mode;
+var Tokenizer = require("../tokenizer").Tokenizer;
+var SqlHighlightRules = require("./sql_highlight_rules").SqlHighlightRules;
+var Range = require("../range").Range;
+
+var Mode = function() {
+ this.$tokenizer = new Tokenizer(new SqlHighlightRules().getRules());
+};
+oop.inherits(Mode, TextMode);
+
+(function() {
+
+ this.toggleCommentLines = function(state, doc, startRow, endRow) {
+ var outdent = true;
+ var outentedRows = [];
+ var re = /^(\s*)--/;
+
+ for (var i=startRow; i<= endRow; i++) {
+ if (!re.test(doc.getLine(i))) {
+ outdent = false;
+ break;
+ }
+ }
+
+ if (outdent) {
+ var deleteRange = new Range(0, 0, 0, 0);
+ for (var i=startRow; i<= endRow; i++)
+ {
+ var line = doc.getLine(i);
+ var m = line.match(re);
+ deleteRange.start.row = i;
+ deleteRange.end.row = i;
+ deleteRange.end.column = m[0].length;
+ doc.replace(deleteRange, m[1]);
+ }
+ }
+ else {
+ doc.indentRows(startRow, endRow, "--");
+ }
+ };
+
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * Contributor(s):
+ * Jonathan Camile <jonathan.camile AT gmail DOT com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/sql_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var lang = require("../lib/lang");
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var SqlHighlightRules = function() {
+
+ var keywords = lang.arrayToMap(
+ ("select|from|where|and|or|group|by|order|limit|offset|having|as|case|" +
+ "when|else|end|type|left|right|join|on|outer|desc|asc").split("|")
+ );
+
+ var builtinConstants = lang.arrayToMap(
+ ("true|false|null").split("|")
+ );
+
+ var builtinFunctions = lang.arrayToMap(
+ ("count|min|max|avg|sum|rank|now|coalesce").split("|")
+ );
+
+ this.$rules = {
+ "start" : [ {
+ token : "comment",
+ regex : "--.*$"
+ }, {
+ token : "string", // " string
+ regex : '".*"'
+ }, {
+ token : "string", // ' string
+ regex : "'.*'"
+ }, {
+ token : "constant.numeric", // float
+ regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
+ }, {
+ token : function(value) {
+ value = value.toLowerCase();
+ if (keywords.hasOwnProperty(value))
+ return "keyword";
+ else if (builtinConstants.hasOwnProperty(value))
+ return "constant.language";
+ else if (builtinFunctions.hasOwnProperty(value))
+ return "support.function";
+ else
+ return "identifier";
+ },
+ regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
+ }, {
+ token : "keyword.operator",
+ regex : "\\+|\\-|\\/|\\/\\/|%|<@>|@>|<@|&|\\^|~|<|>|<=|=>|==|!=|<>|="
+ }, {
+ token : "lparen.paren",
+ regex : "[\\(]"
+ }, {
+ token : "paren.rparen",
+ regex : "[\\)]"
+ }, {
+ token : "text",
+ regex : "\\s+"
+ } ]
+ };
+};
+
+oop.inherits(SqlHighlightRules, TextHighlightRules);
+
+exports.SqlHighlightRules = SqlHighlightRules;
+});
+
+;
+ (function() {
+ window.require(["ace/ace"], function(a) {
+ if (!window.ace)
+ window.ace = {};
+ for (var key in a) if (a.hasOwnProperty(key))
+ ace[key] = a[key];
+ });
+ })();
+ \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-sql.js b/apps/files_texteditor/js/aceeditor/mode-sql.js
new file mode 100755
index 00000000000..3ca95359086
--- /dev/null
+++ b/apps/files_texteditor/js/aceeditor/mode-sql.js
@@ -0,0 +1 @@
+define("ace/mode/sql",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/sql_highlight_rules","ace/range"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text").Mode,f=a("../tokenizer").Tokenizer,g=a("./sql_highlight_rules").SqlHighlightRules,h=a("../range").Range,i=function(){this.$tokenizer=new f((new g).getRules())};d.inherits(i,e),function(){this.toggleCommentLines=function(a,b,c,d){var e=!0,f=[],g=/^(\s*)--/;for(var i=c;i<=d;i++)if(!g.test(b.getLine(i))){e=!1;break}if(e){var j=new h(0,0,0,0);for(var i=c;i<=d;i++){var k=b.getLine(i),l=k.match(g);j.start.row=i,j.end.row=i,j.end.column=l[0].length,b.replace(j,l[1])}}else b.indentRows(c,d,"--")}}.call(i.prototype),b.Mode=i}),define("ace/mode/sql_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("../lib/lang"),f=a("./text_highlight_rules").TextHighlightRules,g=function(){var a=e.arrayToMap("select|from|where|and|or|group|by|order|limit|offset|having|as|case|when|else|end|type|left|right|join|on|outer|desc|asc".split("|")),b=e.arrayToMap("true|false|null".split("|")),c=e.arrayToMap("count|min|max|avg|sum|rank|now|coalesce".split("|"));this.$rules={start:[{token:"comment",regex:"--.*$"},{token:"string",regex:'".*"'},{token:"string",regex:"'.*'"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:function(d){return d=d.toLowerCase(),a.hasOwnProperty(d)?"keyword":b.hasOwnProperty(d)?"constant.language":c.hasOwnProperty(d)?"support.function":"identifier"},regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"\\+|\\-|\\/|\\/\\/|%|<@>|@>|<@|&|\\^|~|<|>|<=|=>|==|!=|<>|="},{token:"lparen.paren",regex:"[\\(]"},{token:"paren.rparen",regex:"[\\)]"},{token:"text",regex:"\\s+"}]}};d.inherits(g,f),b.SqlHighlightRules=g}),function(){window.require(["ace/ace"],function(a){window.ace||(window.ace={});for(var b in a)a.hasOwnProperty(b)&&(ace[b]=a[b])})}() \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-svg-uncompressed.js b/apps/files_texteditor/js/aceeditor/mode-svg-uncompressed.js
new file mode 100755
index 00000000000..8d3bb3b873a
--- /dev/null
+++ b/apps/files_texteditor/js/aceeditor/mode-svg-uncompressed.js
@@ -0,0 +1,2197 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/svg', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/xml', 'ace/mode/javascript', 'ace/tokenizer', 'ace/mode/svg_highlight_rules', 'ace/mode/folding/mixed', 'ace/mode/folding/xml', 'ace/mode/folding/cstyle'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var XmlMode = require("./xml").Mode;
+var JavaScriptMode = require("./javascript").Mode;
+var Tokenizer = require("../tokenizer").Tokenizer;
+var SvgHighlightRules = require("./svg_highlight_rules").SvgHighlightRules;
+var MixedFoldMode = require("./folding/mixed").FoldMode;
+var XmlFoldMode = require("./folding/xml").FoldMode;
+var CStyleFoldMode = require("./folding/cstyle").FoldMode;
+
+var Mode = function() {
+ XmlMode.call(this);
+
+ this.highlighter = new SvgHighlightRules();
+ this.$tokenizer = new Tokenizer(this.highlighter.getRules());
+
+ this.$embeds = this.highlighter.getEmbeds();
+ this.createModeDelegates({
+ "js-": JavaScriptMode
+ });
+
+ this.foldingRules = new MixedFoldMode(new XmlFoldMode({}), {
+ "js-": new CStyleFoldMode()
+ });
+};
+
+oop.inherits(Mode, XmlMode);
+
+(function() {
+
+ this.getNextLineIndent = function(state, line, tab) {
+ return this.$getIndent(line);
+ };
+
+
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/xml', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/xml_highlight_rules', 'ace/mode/behaviour/xml', 'ace/mode/folding/xml'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextMode = require("./text").Mode;
+var Tokenizer = require("../tokenizer").Tokenizer;
+var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules;
+var XmlBehaviour = require("./behaviour/xml").XmlBehaviour;
+var XmlFoldMode = require("./folding/xml").FoldMode;
+
+var Mode = function() {
+ this.$tokenizer = new Tokenizer(new XmlHighlightRules().getRules());
+ this.$behaviour = new XmlBehaviour();
+ this.foldingRules = new XmlFoldMode();
+};
+
+oop.inherits(Mode, TextMode);
+
+(function() {
+
+ this.getNextLineIndent = function(state, line, tab) {
+ return this.$getIndent(line);
+ };
+
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/xml_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/xml_util', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var xmlUtil = require("./xml_util");
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var XmlHighlightRules = function() {
+
+ // regexp must not have capturing parentheses
+ // regexps are ordered -> the first match is used
+ this.$rules = {
+ start : [{
+ token : "text",
+ regex : "<\\!\\[CDATA\\[",
+ next : "cdata"
+ }, {
+ token : "xml_pe",
+ regex : "<\\?.*?\\?>"
+ }, {
+ token : "comment",
+ merge : true,
+ regex : "<\\!--",
+ next : "comment"
+ }, {
+ token : "meta.tag", // opening tag
+ regex : "<\\/?",
+ next : "tag"
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }, {
+ token : "text",
+ regex : "[^<]+"
+ }],
+
+ cdata : [{
+ token : "text",
+ regex : "\\]\\]>",
+ next : "start"
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }, {
+ token : "text",
+ regex : "(?:[^\\]]|\\](?!\\]>))+"
+ }],
+
+ comment : [{
+ token : "comment",
+ regex : ".*?-->",
+ next : "start"
+ }, {
+ token : "comment",
+ merge : true,
+ regex : ".+"
+ }]
+ };
+
+ xmlUtil.tag(this.$rules, "tag", "start");
+};
+
+oop.inherits(XmlHighlightRules, TextHighlightRules);
+
+exports.XmlHighlightRules = XmlHighlightRules;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/xml_util', ['require', 'exports', 'module' , 'ace/lib/lang'], function(require, exports, module) {
+"use strict";
+
+var lang = require("../lib/lang");
+
+var formTags = lang.arrayToMap(
+ ("button|form|input|label|select|textarea").split("|")
+);
+
+var tableTags = lang.arrayToMap(
+ ("table|tbody|td|tfoot|th|tr").split("|")
+);
+
+function string(state) {
+ return [{
+ token : "string",
+ regex : '".*?"'
+ }, {
+ token : "string", // multi line string start
+ merge : true,
+ regex : '["].*',
+ next : state + "-qqstring"
+ }, {
+ token : "string",
+ regex : "'.*?'"
+ }, {
+ token : "string", // multi line string start
+ merge : true,
+ regex : "['].*",
+ next : state + "-qstring"
+ }];
+}
+
+function multiLineString(quote, state) {
+ return [{
+ token : "string",
+ merge : true,
+ regex : ".*?" + quote,
+ next : state
+ }, {
+ token : "string",
+ merge : true,
+ regex : '.+'
+ }];
+}
+
+exports.tag = function(states, name, nextState) {
+ states[name] = [{
+ token : "text",
+ regex : "\\s+"
+ }, {
+ //token : "meta.tag",
+
+ token : function(value) {
+ if ( value==='a' ) {
+ return "meta.tag.anchor";
+ }
+ else if ( value==='img' ) {
+ return "meta.tag.image";
+ }
+ else if ( value==='script' ) {
+ return "meta.tag.script";
+ }
+ else if ( value==='style' ) {
+ return "meta.tag.style";
+ }
+ else if (formTags.hasOwnProperty(value.toLowerCase())) {
+ return "meta.tag.form";
+ }
+ else if (tableTags.hasOwnProperty(value.toLowerCase())) {
+ return "meta.tag.table";
+ }
+ else {
+ return "meta.tag";
+ }
+ },
+ merge : true,
+ regex : "[-_a-zA-Z0-9:!]+",
+ next : name + "embed-attribute-list"
+ }, {
+ token: "empty",
+ regex: "",
+ next : name + "embed-attribute-list"
+ }];
+
+ states[name + "-qstring"] = multiLineString("'", name + "embed-attribute-list");
+ states[name + "-qqstring"] = multiLineString("\"", name + "embed-attribute-list");
+
+ states[name + "embed-attribute-list"] = [{
+ token : "meta.tag",
+ merge : true,
+ regex : "\/?>",
+ next : nextState
+ }, {
+ token : "keyword.operator",
+ regex : "="
+ }, {
+ token : "entity.other.attribute-name",
+ regex : "[-_a-zA-Z0-9:]+"
+ }, {
+ token : "constant.numeric", // float
+ regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }].concat(string(name));
+};
+
+});
+/* vim:ts=4:sts=4:sw=4:
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Chris Spencer <chris.ag.spencer AT googlemail DOT com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/behaviour/xml', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour', 'ace/mode/behaviour/cstyle'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var Behaviour = require("../behaviour").Behaviour;
+var CstyleBehaviour = require("./cstyle").CstyleBehaviour;
+
+var XmlBehaviour = function () {
+
+ this.inherit(CstyleBehaviour, ["string_dquotes"]); // Get string behaviour
+
+ this.add("brackets", "insertion", function (state, action, editor, session, text) {
+ if (text == '<') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return false;
+ } else {
+ return {
+ text: '<>',
+ selection: [1, 1]
+ }
+ }
+ } else if (text == '>') {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '>') { // need some kind of matching check here
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ } else if (text == "\n") {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChars = line.substring(cursor.column, cursor.column + 2);
+ if (rightChars == '</') {
+ var indent = this.$getIndent(session.doc.getLine(cursor.row)) + session.getTabString();
+ var next_indent = this.$getIndent(session.doc.getLine(cursor.row));
+
+ return {
+ text: '\n' + indent + '\n' + next_indent,
+ selection: [1, indent.length, 1, indent.length]
+ }
+ }
+ }
+ });
+
+}
+oop.inherits(XmlBehaviour, Behaviour);
+
+exports.XmlBehaviour = XmlBehaviour;
+});/* vim:ts=4:sts=4:sw=4:
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Chris Spencer <chris.ag.spencer AT googlemail DOT com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/behaviour/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var Behaviour = require('../behaviour').Behaviour;
+
+var CstyleBehaviour = function () {
+
+ this.add("braces", "insertion", function (state, action, editor, session, text) {
+ if (text == '{') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '{' + selected + '}',
+ selection: false
+ }
+ } else {
+ return {
+ text: '{}',
+ selection: [1, 1]
+ }
+ }
+ } else if (text == '}') {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '}') {
+ var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});
+ if (matching !== null) {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ } else if (text == "\n") {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '}') {
+ var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column + 1});
+ if (!openBracePos)
+ return null;
+
+ var indent = this.getNextLineIndent(state, line.substring(0, line.length - 1), session.getTabString());
+ var next_indent = this.$getIndent(session.doc.getLine(openBracePos.row));
+
+ return {
+ text: '\n' + indent + '\n' + next_indent,
+ selection: [1, indent.length, 1, indent.length]
+ }
+ }
+ }
+ });
+
+ this.add("braces", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '{') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.end.column, range.end.column + 1);
+ if (rightChar == '}') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+ this.add("parens", "insertion", function (state, action, editor, session, text) {
+ if (text == '(') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '(' + selected + ')',
+ selection: false
+ }
+ } else {
+ return {
+ text: '()',
+ selection: [1, 1]
+ }
+ }
+ } else if (text == ')') {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == ')') {
+ var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});
+ if (matching !== null) {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ }
+ });
+
+ this.add("parens", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '(') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
+ if (rightChar == ')') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+ this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {
+ if (text == '"') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '"' + selected + '"',
+ selection: false
+ }
+ } else {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var leftChar = line.substring(cursor.column-1, cursor.column);
+
+ // We're escaped.
+ if (leftChar == '\\') {
+ return null;
+ }
+
+ // Find what token we're inside.
+ var tokens = session.getTokens(selection.start.row, selection.start.row)[0].tokens;
+ var col = 0, token;
+ var quotepos = -1; // Track whether we're inside an open quote.
+
+ for (var x = 0; x < tokens.length; x++) {
+ token = tokens[x];
+ if (token.type == "string") {
+ quotepos = -1;
+ } else if (quotepos < 0) {
+ quotepos = token.value.indexOf('"');
+ }
+ if ((token.value.length + col) > selection.start.column) {
+ break;
+ }
+ col += tokens[x].value.length;
+ }
+
+ // Try and be smart about when we auto insert.
+ if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf('"') === token.value.length-1)))) {
+ return {
+ text: '""',
+ selection: [1,1]
+ }
+ } else if (token && token.type === "string") {
+ // Ignore input and move right one if we're typing over the closing quote.
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '"') {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ }
+ }
+ });
+
+ this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '"') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
+ if (rightChar == '"') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+}
+oop.inherits(CstyleBehaviour, Behaviour);
+
+exports.CstyleBehaviour = CstyleBehaviour;
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/xml', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/range', 'ace/mode/folding/fold_mode', 'ace/token_iterator'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var lang = require("../../lib/lang");
+var Range = require("../../range").Range;
+var BaseFoldMode = require("./fold_mode").FoldMode;
+var TokenIterator = require("../../token_iterator").TokenIterator;
+
+var FoldMode = exports.FoldMode = function(voidElements) {
+ BaseFoldMode.call(this);
+ this.voidElements = voidElements || {};
+};
+oop.inherits(FoldMode, BaseFoldMode);
+
+(function() {
+
+ this.getFoldWidget = function(session, foldStyle, row) {
+ var tag = this._getFirstTagInLine(session, row);
+
+ if (tag.closing)
+ return foldStyle == "markbeginend" ? "end" : "";
+
+ if (!tag.tagName || this.voidElements[tag.tagName.toLowerCase()])
+ return "";
+
+ if (tag.selfClosing)
+ return "";
+
+ if (tag.value.indexOf("/" + tag.tagName) !== -1)
+ return "";
+
+ return "start";
+ };
+
+ this._getFirstTagInLine = function(session, row) {
+ var tokens = session.getTokens(row, row)[0].tokens;
+ var value = "";
+ for (var i = 0; i < tokens.length; i++) {
+ var token = tokens[i];
+ if (token.type.indexOf("meta.tag") === 0)
+ value += token.value;
+ else
+ value += lang.stringRepeat(" ", token.value.length);
+ }
+
+ return this._parseTag(value);
+ };
+
+ this.tagRe = /^(\s*)(<?(\/?)([-_a-zA-Z0-9:!]*)\s*(\/?)>?)/;
+ this._parseTag = function(tag) {
+
+ var match = this.tagRe.exec(tag);
+ var column = this.tagRe.lastIndex || 0;
+ this.tagRe.lastIndex = 0;
+
+ return {
+ value: tag,
+ match: match ? match[2] : "",
+ closing: match ? !!match[3] : false,
+ selfClosing: match ? !!match[5] || match[2] == "/>" : false,
+ tagName: match ? match[4] : "",
+ column: match[1] ? column + match[1].length : column
+ };
+ };
+
+ /**
+ * reads a full tag and places the iterator after the tag
+ */
+ this._readTagForward = function(iterator) {
+ var token = iterator.getCurrentToken();
+ if (!token)
+ return null;
+
+ var value = "";
+ var start;
+
+ do {
+ if (token.type.indexOf("meta.tag") === 0) {
+ if (!start) {
+ var start = {
+ row: iterator.getCurrentTokenRow(),
+ column: iterator.getCurrentTokenColumn()
+ };
+ }
+ value += token.value;
+ if (value.indexOf(">") !== -1) {
+ var tag = this._parseTag(value);
+ tag.start = start;
+ tag.end = {
+ row: iterator.getCurrentTokenRow(),
+ column: iterator.getCurrentTokenColumn() + token.value.length
+ };
+ iterator.stepForward();
+ return tag;
+ }
+ }
+ } while(token = iterator.stepForward());
+
+ return null;
+ };
+
+ this._readTagBackward = function(iterator) {
+ var token = iterator.getCurrentToken();
+ if (!token)
+ return null;
+
+ var value = "";
+ var end;
+
+ do {
+ if (token.type.indexOf("meta.tag") === 0) {
+ if (!end) {
+ end = {
+ row: iterator.getCurrentTokenRow(),
+ column: iterator.getCurrentTokenColumn() + token.value.length
+ };
+ }
+ value = token.value + value;
+ if (value.indexOf("<") !== -1) {
+ var tag = this._parseTag(value);
+ tag.end = end;
+ tag.start = {
+ row: iterator.getCurrentTokenRow(),
+ column: iterator.getCurrentTokenColumn()
+ };
+ iterator.stepBackward();
+ return tag;
+ }
+ }
+ } while(token = iterator.stepBackward());
+
+ return null;
+ };
+
+ this._pop = function(stack, tag) {
+ while (stack.length) {
+
+ var top = stack[stack.length-1];
+ if (!tag || top.tagName == tag.tagName) {
+ return stack.pop();
+ }
+ else if (this.voidElements[tag.tagName]) {
+ return;
+ }
+ else if (this.voidElements[top.tagName]) {
+ stack.pop();
+ continue;
+ } else {
+ return null;
+ }
+ }
+ };
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ var firstTag = this._getFirstTagInLine(session, row);
+
+ if (!firstTag.match)
+ return null;
+
+ var isBackward = firstTag.closing || firstTag.selfClosing;
+ var stack = [];
+ var tag;
+
+ if (!isBackward) {
+ var iterator = new TokenIterator(session, row, firstTag.column);
+ var start = {
+ row: row,
+ column: firstTag.column + firstTag.tagName.length + 2
+ };
+ while (tag = this._readTagForward(iterator)) {
+ if (tag.selfClosing) {
+ if (!stack.length) {
+ tag.start.column += tag.tagName.length + 2;
+ tag.end.column -= 2;
+ return Range.fromPoints(tag.start, tag.end);
+ } else
+ continue;
+ }
+
+ if (tag.closing) {
+ this._pop(stack, tag);
+ if (stack.length == 0)
+ return Range.fromPoints(start, tag.start);
+ }
+ else {
+ stack.push(tag)
+ }
+ }
+ }
+ else {
+ var iterator = new TokenIterator(session, row, firstTag.column + firstTag.match.length);
+ var end = {
+ row: row,
+ column: firstTag.column
+ };
+
+ while (tag = this._readTagBackward(iterator)) {
+ if (tag.selfClosing) {
+ if (!stack.length) {
+ tag.start.column += tag.tagName.length + 2;
+ tag.end.column -= 2;
+ return Range.fromPoints(tag.start, tag.end);
+ } else
+ continue;
+ }
+
+ if (!tag.closing) {
+ this._pop(stack, tag);
+ if (stack.length == 0) {
+ tag.start.column += tag.tagName.length + 2;
+ return Range.fromPoints(tag.start, end);
+ }
+ }
+ else {
+ stack.push(tag)
+ }
+ }
+ }
+
+ };
+
+}).call(FoldMode.prototype);
+
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/fold_mode', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var Range = require("../../range").Range;
+
+var FoldMode = exports.FoldMode = function() {};
+
+(function() {
+
+ this.foldingStartMarker = null;
+ this.foldingStopMarker = null;
+
+ // must return "" if there's no fold, to enable caching
+ this.getFoldWidget = function(session, foldStyle, row) {
+ var line = session.getLine(row);
+ if (this.foldingStartMarker.test(line))
+ return "start";
+ if (foldStyle == "markbeginend"
+ && this.foldingStopMarker
+ && this.foldingStopMarker.test(line))
+ return "end";
+ return "";
+ };
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ return null;
+ };
+
+ this.indentationBlock = function(session, row, column) {
+ var re = /^\s*/;
+ var startRow = row;
+ var endRow = row;
+ var line = session.getLine(row);
+ var startColumn = column || line.length;
+ var startLevel = line.match(re)[0].length;
+ var maxRow = session.getLength()
+
+ while (++row < maxRow) {
+ line = session.getLine(row);
+ var level = line.match(re)[0].length;
+
+ if (level == line.length)
+ continue;
+
+ if (level <= startLevel)
+ break;
+
+ endRow = row;
+ }
+
+ if (endRow > startRow) {
+ var endColumn = session.getLine(endRow).length;
+ return new Range(startRow, startColumn, endRow, endColumn);
+ }
+ };
+
+ this.openingBracketBlock = function(session, bracket, row, column) {
+ var start = {row: row, column: column + 1};
+ var end = session.$findClosingBracket(bracket, start);
+ if (!end)
+ return;
+
+ var fw = session.foldWidgets[end.row];
+ if (fw == null)
+ fw = this.getFoldWidget(session, end.row);
+
+ if (fw == "start") {
+ end.row --;
+ end.column = session.getLine(end.row).length;
+ }
+ return Range.fromPoints(start, end);
+ };
+
+}).call(FoldMode.prototype);
+
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/javascript', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/javascript_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/range', 'ace/worker/worker_client', 'ace/mode/behaviour/cstyle', 'ace/mode/folding/cstyle'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextMode = require("./text").Mode;
+var Tokenizer = require("../tokenizer").Tokenizer;
+var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;
+var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
+var Range = require("../range").Range;
+var WorkerClient = require("../worker/worker_client").WorkerClient;
+var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
+var CStyleFoldMode = require("./folding/cstyle").FoldMode;
+
+var Mode = function() {
+ this.$tokenizer = new Tokenizer(new JavaScriptHighlightRules().getRules());
+ this.$outdent = new MatchingBraceOutdent();
+ this.$behaviour = new CstyleBehaviour();
+ this.foldingRules = new CStyleFoldMode();
+};
+oop.inherits(Mode, TextMode);
+
+(function() {
+
+
+ this.toggleCommentLines = function(state, doc, startRow, endRow) {
+ var outdent = true;
+ var re = /^(\s*)\/\//;
+
+ for (var i=startRow; i<= endRow; i++) {
+ if (!re.test(doc.getLine(i))) {
+ outdent = false;
+ break;
+ }
+ }
+
+ if (outdent) {
+ var deleteRange = new Range(0, 0, 0, 0);
+ for (var i=startRow; i<= endRow; i++)
+ {
+ var line = doc.getLine(i);
+ var m = line.match(re);
+ deleteRange.start.row = i;
+ deleteRange.end.row = i;
+ deleteRange.end.column = m[0].length;
+ doc.replace(deleteRange, m[1]);
+ }
+ }
+ else {
+ doc.indentRows(startRow, endRow, "//");
+ }
+ };
+
+ this.getNextLineIndent = function(state, line, tab) {
+ var indent = this.$getIndent(line);
+
+ var tokenizedLine = this.$tokenizer.getLineTokens(line, state);
+ var tokens = tokenizedLine.tokens;
+ var endState = tokenizedLine.state;
+
+ if (tokens.length && tokens[tokens.length-1].type == "comment") {
+ return indent;
+ }
+
+ if (state == "start" || state == "regex_allowed") {
+ var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);
+ if (match) {
+ indent += tab;
+ }
+ } else if (state == "doc-start") {
+ if (endState == "start" || state == "regex_allowed") {
+ return "";
+ }
+ var match = line.match(/^\s*(\/?)\*/);
+ if (match) {
+ if (match[1]) {
+ indent += " ";
+ }
+ indent += "* ";
+ }
+ }
+
+ return indent;
+ };
+
+ this.checkOutdent = function(state, line, input) {
+ return this.$outdent.checkOutdent(line, input);
+ };
+
+ this.autoOutdent = function(state, doc, row) {
+ this.$outdent.autoOutdent(doc, row);
+ };
+
+ this.createWorker = function(session) {
+ var worker = new WorkerClient(["ace"], "worker-javascript.js", "ace/mode/javascript_worker", "JavaScriptWorker");
+ worker.attachToDocument(session.getDocument());
+
+ worker.on("jslint", function(results) {
+ var errors = [];
+ for (var i=0; i<results.data.length; i++) {
+ var error = results.data[i];
+ if (error)
+ errors.push({
+ row: error.line-1,
+ column: error.character-1,
+ text: error.reason,
+ type: "warning",
+ lint: error
+ });
+ }
+ session.setAnnotations(errors);
+ });
+
+ worker.on("narcissus", function(e) {
+ session.setAnnotations([e.data]);
+ });
+
+ worker.on("terminate", function() {
+ session.clearAnnotations();
+ });
+
+ return worker;
+ };
+
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ * Mihai Sucan <mihai DOT sucan AT gmail DOT com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/javascript_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/unicode', 'ace/mode/doc_comment_highlight_rules', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var lang = require("../lib/lang");
+var unicode = require("../unicode");
+var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var JavaScriptHighlightRules = function() {
+
+ // see: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects
+ var globals = lang.arrayToMap(
+ // Constructors
+ ("Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" +
+ // E4X
+ "Namespace|QName|XML|XMLList|" +
+ "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" +
+ "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" +
+ // Errors
+ "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" +
+ "SyntaxError|TypeError|URIError|" +
+ // Non-constructor functions
+ "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" +
+ "isNaN|parseFloat|parseInt|" +
+ // Other
+ "JSON|Math|" +
+ // Pseudo
+ "this|arguments|prototype|window|document"
+ ).split("|")
+ );
+
+ var keywords = lang.arrayToMap(
+ ("break|case|catch|continue|default|delete|do|else|finally|for|function|" +
+ "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|" +
+ "const|yield|import|get|set").split("|")
+ );
+
+ // keywords which can be followed by regular expressions
+ var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield";
+
+ var deprecated = lang.arrayToMap(
+ ("__parent__|__count__|escape|unescape|with|__proto__").split("|")
+ );
+
+ var definitions = lang.arrayToMap(("const|let|var|function").split("|"));
+
+ var buildinConstants = lang.arrayToMap(
+ ("null|Infinity|NaN|undefined").split("|")
+ );
+
+ var futureReserved = lang.arrayToMap(
+ ("class|enum|extends|super|export|implements|private|" +
+ "public|interface|package|protected|static").split("|")
+ );
+
+ // TODO: Unicode escape sequences
+ var identifierRe = "[" + unicode.packages.L + "\\$_]["
+ + unicode.packages.L
+ + unicode.packages.Mn + unicode.packages.Mc
+ + unicode.packages.Nd
+ + unicode.packages.Pc + "\\$_]*\\b";
+
+ // regexp must not have capturing parentheses. Use (?:) instead.
+ // regexps are ordered -> the first match is used
+
+ this.$rules = {
+ "start" : [
+ {
+ token : "comment",
+ regex : "\\/\\/.*$"
+ },
+ new DocCommentHighlightRules().getStartRule("doc-start"),
+ {
+ token : "comment", // multi line comment
+ merge : true,
+ regex : "\\/\\*",
+ next : "comment"
+ }, {
+ token : "string", // single line
+ regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
+ }, {
+ token : "string", // multi line string start
+ merge : true,
+ regex : '["].*\\\\$',
+ next : "qqstring"
+ }, {
+ token : "string", // single line
+ regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
+ }, {
+ token : "string", // multi line string start
+ merge : true,
+ regex : "['].*\\\\$",
+ next : "qstring"
+ }, {
+ token : "constant.numeric", // hex
+ regex : "0[xX][0-9a-fA-F]+\\b"
+ }, {
+ token : "constant.numeric", // float
+ regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
+ }, {
+ token : ["keyword.definition", "text", "entity.name.function"],
+ regex : "(function)(\\s+)(" + identifierRe + ")"
+ }, {
+ token : "constant.language.boolean",
+ regex : "(?:true|false)\\b"
+ }, {
+ token : "keyword",
+ regex : "(?:" + kwBeforeRe + ")\\b",
+ next : "regex_allowed"
+ }, {
+ token : function(value) {
+ if (globals.hasOwnProperty(value))
+ return "variable.language";
+ else if (deprecated.hasOwnProperty(value))
+ return "invalid.deprecated";
+ else if (definitions.hasOwnProperty(value))
+ return "keyword.definition";
+ else if (keywords.hasOwnProperty(value))
+ return "keyword";
+ else if (buildinConstants.hasOwnProperty(value))
+ return "constant.language";
+ else if (futureReserved.hasOwnProperty(value))
+ return "invalid.illegal";
+ else if (value == "debugger")
+ return "invalid.deprecated";
+ else
+ return "identifier";
+ },
+ regex : identifierRe
+ }, {
+ token : "keyword.operator",
+ regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)",
+ next : "regex_allowed"
+ }, {
+ token : "punctuation.operator",
+ regex : "\\?|\\:|\\,|\\;|\\.",
+ next : "regex_allowed"
+ }, {
+ token : "paren.lparen",
+ regex : "[[({]",
+ next : "regex_allowed"
+ }, {
+ token : "paren.rparen",
+ regex : "[\\])}]"
+ }, {
+ token : "keyword.operator",
+ regex : "\\/=?",
+ next : "regex_allowed"
+ }, {
+ token: "comment",
+ regex: "^#!.*$"
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }
+ ],
+ // regular expressions are only allowed after certain tokens. This
+ // makes sure we don't mix up regexps with the divison operator
+ "regex_allowed": [
+ {
+ token : "comment", // multi line comment
+ merge : true,
+ regex : "\\/\\*",
+ next : "comment_regex_allowed"
+ }, {
+ token : "comment",
+ regex : "\\/\\/.*$"
+ }, {
+ token: "string.regexp",
+ regex: "\\/",
+ next: "regex",
+ merge: true
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }, {
+ // immediately return to the start mode without matching
+ // anything
+ token: "empty",
+ regex: "",
+ next: "start"
+ }
+ ],
+ "regex": [
+ {
+ token: "regexp.keyword.operator",
+ regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)",
+ next: "regex"
+ }, {
+ // flag
+ token: "string.regexp",
+ regex: "/\\w*",
+ next: "start",
+ merge: true
+ }, {
+ token: "string.regexp",
+ regex: "[^\\\\/\\[]+",
+ next: "regex",
+ merge: true
+ }, {
+ token: "string.regexp.charachterclass",
+ regex: "\\[",
+ next: "regex_character_class",
+ merge: true
+ }, {
+ token: "empty",
+ regex: "",
+ next: "start"
+ }
+ ],
+ "regex_character_class": [
+ {
+ token: "regexp.keyword.operator",
+ regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)",
+ next: "regex_character_class"
+ }, {
+ token: "string.regexp.charachterclass",
+ regex: "]",
+ next: "regex",
+ merge: true
+ }, {
+ token: "string.regexp.charachterclass",
+ regex: "[^\\\\\\]]+",
+ next: "regex_character_class",
+ merge: true
+ }, {
+ token: "empty",
+ regex: "",
+ next: "start"
+ }
+ ],
+ "comment_regex_allowed" : [
+ {
+ token : "comment", // closing comment
+ regex : ".*?\\*\\/",
+ merge : true,
+ next : "regex_allowed"
+ }, {
+ token : "comment", // comment spanning whole line
+ merge : true,
+ regex : ".+"
+ }
+ ],
+ "comment" : [
+ {
+ token : "comment", // closing comment
+ regex : ".*?\\*\\/",
+ merge : true,
+ next : "start"
+ }, {
+ token : "comment", // comment spanning whole line
+ merge : true,
+ regex : ".+"
+ }
+ ],
+ "qqstring" : [
+ {
+ token : "string",
+ regex : '(?:(?:\\\\.)|(?:[^"\\\\]))*?"',
+ next : "start"
+ }, {
+ token : "string",
+ merge : true,
+ regex : '.+'
+ }
+ ],
+ "qstring" : [
+ {
+ token : "string",
+ regex : "(?:(?:\\\\.)|(?:[^'\\\\]))*?'",
+ next : "start"
+ }, {
+ token : "string",
+ merge : true,
+ regex : '.+'
+ }
+ ]
+ };
+
+ this.embedRules(DocCommentHighlightRules, "doc-",
+ [ new DocCommentHighlightRules().getEndRule("start") ]);
+};
+
+oop.inherits(JavaScriptHighlightRules, TextHighlightRules);
+
+exports.JavaScriptHighlightRules = JavaScriptHighlightRules;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/doc_comment_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var DocCommentHighlightRules = function() {
+
+ this.$rules = {
+ "start" : [ {
+ token : "comment.doc.tag",
+ regex : "@[\\w\\d_]+" // TODO: fix email addresses
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "\\s+"
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "TODO"
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "[^@\\*]+"
+ }, {
+ token : "comment.doc",
+ merge : true,
+ regex : "."
+ }]
+ };
+};
+
+oop.inherits(DocCommentHighlightRules, TextHighlightRules);
+
+(function() {
+
+ this.getStartRule = function(start) {
+ return {
+ token : "comment.doc", // doc comment
+ merge : true,
+ regex : "\\/\\*(?=\\*)",
+ next : start
+ };
+ };
+
+ this.getEndRule = function (start) {
+ return {
+ token : "comment.doc", // closing comment
+ merge : true,
+ regex : "\\*\\/",
+ next : start
+ };
+ };
+
+}).call(DocCommentHighlightRules.prototype);
+
+exports.DocCommentHighlightRules = DocCommentHighlightRules;
+
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var Range = require("../range").Range;
+
+var MatchingBraceOutdent = function() {};
+
+(function() {
+
+ this.checkOutdent = function(line, input) {
+ if (! /^\s+$/.test(line))
+ return false;
+
+ return /^\s*\}/.test(input);
+ };
+
+ this.autoOutdent = function(doc, row) {
+ var line = doc.getLine(row);
+ var match = line.match(/^(\s*\})/);
+
+ if (!match) return 0;
+
+ var column = match[1].length;
+ var openBracePos = doc.findMatchingBracket({row: row, column: column});
+
+ if (!openBracePos || openBracePos.row == row) return 0;
+
+ var indent = this.$getIndent(doc.getLine(openBracePos.row));
+ doc.replace(new Range(row, 0, row, column-1), indent);
+ };
+
+ this.$getIndent = function(line) {
+ var match = line.match(/^(\s+)/);
+ if (match) {
+ return match[1];
+ }
+
+ return "";
+ };
+
+}).call(MatchingBraceOutdent.prototype);
+
+exports.MatchingBraceOutdent = MatchingBraceOutdent;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/worker/worker_client', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event_emitter'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var EventEmitter = require("../lib/event_emitter").EventEmitter;
+
+var WorkerClient = function(topLevelNamespaces, packagedJs, mod, classname) {
+
+ this.changeListener = this.changeListener.bind(this);
+
+ if (module.packaged) {
+ var base = this.$guessBasePath();
+ this.$worker = new Worker(base + packagedJs);
+ }
+ else {
+ var workerUrl = this.$normalizePath(require.nameToUrl("ace/worker/worker", null, "_"));
+ this.$worker = new Worker(workerUrl);
+
+ var tlns = {};
+ for (var i=0; i<topLevelNamespaces.length; i++) {
+ var ns = topLevelNamespaces[i];
+ var path = this.$normalizePath(require.nameToUrl(ns, null, "_").replace(/.js$/, ""));
+
+ tlns[ns] = path;
+ }
+ }
+
+ this.$worker.postMessage({
+ init : true,
+ tlns: tlns,
+ module: mod,
+ classname: classname
+ });
+
+ this.callbackId = 1;
+ this.callbacks = {};
+
+ var _self = this;
+ this.$worker.onerror = function(e) {
+ window.console && console.log && console.log(e);
+ throw e;
+ };
+ this.$worker.onmessage = function(e) {
+ var msg = e.data;
+ switch(msg.type) {
+ case "log":
+ window.console && console.log && console.log(msg.data);
+ break;
+
+ case "event":
+ _self._emit(msg.name, {data: msg.data});
+ break;
+
+ case "call":
+ var callback = _self.callbacks[msg.id];
+ if (callback) {
+ callback(msg.data);
+ delete _self.callbacks[msg.id];
+ }
+ break;
+ }
+ };
+};
+
+(function(){
+
+ oop.implement(this, EventEmitter);
+
+ this.$normalizePath = function(path) {
+ path = path.replace(/^[a-z]+:\/\/[^\/]+\//, ""); // Remove domain name and rebuild it
+ path = location.protocol + "//" + location.host
+ // paths starting with a slash are relative to the root (host)
+ + (path.charAt(0) == "/" ? "" : location.pathname.replace(/\/[^\/]*$/, ""))
+ + "/" + path.replace(/^[\/]+/, "");
+ return path;
+ };
+
+ this.$guessBasePath = function() {
+ if (require.aceBaseUrl)
+ return require.aceBaseUrl;
+
+ var scripts = document.getElementsByTagName("script");
+ for (var i=0; i<scripts.length; i++) {
+ var script = scripts[i];
+
+ var base = script.getAttribute("data-ace-base");
+ if (base)
+ return base.replace(/\/*$/, "/");
+
+ var src = script.src || script.getAttribute("src");
+ if (!src) {
+ continue;
+ }
+ var m = src.match(/^(?:(.*\/)ace\.js|(.*\/)ace(-uncompressed)?(-noconflict)?\.js)(?:\?|$)/);
+ if (m)
+ return m[1] || m[2];
+ }
+ return "";
+ };
+
+ this.terminate = function() {
+ this._emit("terminate", {});
+ this.$worker.terminate();
+ this.$worker = null;
+ this.$doc.removeEventListener("change", this.changeListener);
+ this.$doc = null;
+ };
+
+ this.send = function(cmd, args) {
+ this.$worker.postMessage({command: cmd, args: args});
+ };
+
+ this.call = function(cmd, args, callback) {
+ if (callback) {
+ var id = this.callbackId++;
+ this.callbacks[id] = callback;
+ args.push(id);
+ }
+ this.send(cmd, args);
+ };
+
+ this.emit = function(event, data) {
+ try {
+ // firefox refuses to clone objects which have function properties
+ // TODO: cleanup event
+ this.$worker.postMessage({event: event, data: {data: data.data}});
+ }
+ catch(ex) {}
+ };
+
+ this.attachToDocument = function(doc) {
+ if(this.$doc)
+ this.terminate();
+
+ this.$doc = doc;
+ this.call("setValue", [doc.getValue()]);
+ doc.on("change", this.changeListener);
+ };
+
+ this.changeListener = function(e) {
+ e.range = {
+ start: e.data.range.start,
+ end: e.data.range.end
+ };
+ this.emit("change", e);
+ };
+
+}).call(WorkerClient.prototype);
+
+exports.WorkerClient = WorkerClient;
+
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var Range = require("../../range").Range;
+var BaseFoldMode = require("./fold_mode").FoldMode;
+
+var FoldMode = exports.FoldMode = function() {};
+oop.inherits(FoldMode, BaseFoldMode);
+
+(function() {
+
+ this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
+ this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ var line = session.getLine(row);
+ var match = line.match(this.foldingStartMarker);
+ if (match) {
+ var i = match.index;
+
+ if (match[1])
+ return this.openingBracketBlock(session, match[1], row, i);
+
+ var range = session.getCommentFoldRange(row, i + match[0].length);
+ range.end.column -= 2;
+ return range;
+ }
+
+ if (foldStyle !== "markbeginend")
+ return;
+
+ var match = line.match(this.foldingStopMarker);
+ if (match) {
+ var i = match.index + match[0].length;
+
+ if (match[2]) {
+ var range = session.getCommentFoldRange(row, i);
+ range.end.column -= 2;
+ return range;
+ }
+
+ var end = {row: row, column: i};
+ var start = session.$findOpeningBracket(match[1], end);
+
+ if (!start)
+ return;
+
+ start.column++;
+ end.column--;
+
+ return Range.fromPoints(start, end);
+ }
+ };
+
+}).call(FoldMode.prototype);
+
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/svg_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/javascript_highlight_rules', 'ace/mode/xml_highlight_rules', 'ace/mode/xml_util'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;
+var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules;
+var xmlUtil = require("./xml_util");
+
+var SvgHighlightRules = function() {
+ XmlHighlightRules.call(this);
+
+ this.$rules.start.splice(3, 0, {
+ token : "meta.tag",
+ regex : "<(?=\s*script)",
+ next : "script"
+ });
+
+ xmlUtil.tag(this.$rules, "script", "js-start");
+
+ this.embedRules(JavaScriptHighlightRules, "js-", [{
+ token: "comment",
+ regex: "\\/\\/.*(?=<\\/script>)",
+ next: "tag"
+ }, {
+ token: "meta.tag",
+ regex: "<\\/(?=script)",
+ next: "tag"
+ }]);
+};
+
+oop.inherits(SvgHighlightRules, XmlHighlightRules);
+
+exports.SvgHighlightRules = SvgHighlightRules;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/mixed', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var BaseFoldMode = require("./fold_mode").FoldMode;
+
+var FoldMode = exports.FoldMode = function(defaultMode, subModes) {
+ this.defaultMode = defaultMode;
+ this.subModes = subModes;
+};
+oop.inherits(FoldMode, BaseFoldMode);
+
+(function() {
+
+
+ this.$getMode = function(state) {
+ for (var key in this.subModes) {
+ if (state.indexOf(key) === 0)
+ return this.subModes[key];
+ }
+ return null;
+ };
+
+ this.$tryMode = function(state, session, foldStyle, row) {
+ var mode = this.$getMode(state);
+ return (mode ? mode.getFoldWidget(session, foldStyle, row) : "");
+ };
+
+ this.getFoldWidget = function(session, foldStyle, row) {
+ return (
+ this.$tryMode(session.getState(row-1), session, foldStyle, row) ||
+ this.$tryMode(session.getState(row), session, foldStyle, row) ||
+ this.defaultMode.getFoldWidget(session, foldStyle, row)
+ );
+ };
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ var mode = this.$getMode(session.getState(row-1));
+
+ if (!mode || !mode.getFoldWidget(session, foldStyle, row))
+ mode = this.$getMode(session.getState(row));
+
+ if (!mode || !mode.getFoldWidget(session, foldStyle, row))
+ mode = this.defaultMode;
+
+ return mode.getFoldWidgetRange(session, foldStyle, row);
+ };
+
+}).call(FoldMode.prototype);
+
+});;
+ (function() {
+ window.require(["ace/ace"], function(a) {
+ if (!window.ace)
+ window.ace = {};
+ for (var key in a) if (a.hasOwnProperty(key))
+ ace[key] = a[key];
+ });
+ })();
+ \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-svg.js b/apps/files_texteditor/js/aceeditor/mode-svg.js
index d8b49f8971e..e3865a788d3 100644
--- a/apps/files_texteditor/js/aceeditor/mode-svg.js
+++ b/apps/files_texteditor/js/aceeditor/mode-svg.js
@@ -1 +1 @@
-define("ace/mode/svg",["require","exports","module","pilot/oop","ace/mode/text","ace/mode/javascript","ace/tokenizer","ace/mode/svg_highlight_rules","ace/mode/behaviour/xml"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/text").Mode,f=a("ace/mode/javascript").Mode,g=a("ace/tokenizer").Tokenizer,h=a("ace/mode/svg_highlight_rules").SvgHighlightRules,i=a("ace/mode/behaviour/xml").XmlBehaviour,j=function(){this.highlighter=new h,this.$tokenizer=new g(this.highlighter.getRules()),this.$behaviour=new i,this.$embeds=this.highlighter.getEmbeds(),this.createModeDelegates({"js-":f})};d.inherits(j,e),function(){this.toggleCommentLines=function(a,b,c,d){return 0},this.getNextLineIndent=function(a,b,c){return this.$getIndent(b)},this.checkOutdent=function(a,b,c){return!1}}.call(j.prototype),b.Mode=j}),define("ace/mode/javascript",["require","exports","module","pilot/oop","ace/mode/text","ace/tokenizer","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/text").Mode,f=a("ace/tokenizer").Tokenizer,g=a("ace/mode/javascript_highlight_rules").JavaScriptHighlightRules,h=a("ace/mode/matching_brace_outdent").MatchingBraceOutdent,i=a("ace/range").Range,j=a("ace/worker/worker_client").WorkerClient,k=a("ace/mode/behaviour/cstyle").CstyleBehaviour,l=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h,this.$behaviour=new k};d.inherits(l,e),function(){this.toggleCommentLines=function(a,b,c,d){var e=!0,f=[],g=/^(\s*)\/\//;for(var h=c;h<=d;h++)if(!g.test(b.getLine(h))){e=!1;break}if(e){var j=new i(0,0,0,0);for(var h=c;h<=d;h++){var k=b.getLine(h),l=k.match(g);j.start.row=h,j.end.row=h,j.end.column=l[0].length,b.replace(j,l[1])}}else b.indentRows(c,d,"//")},this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=this.$tokenizer.getLineTokens(b,a),f=e.tokens,g=e.state;if(f.length&&f[f.length-1].type=="comment")return d;if(a=="start"){var h=b.match(/^.*[\{\(\[\:]\s*$/);h&&(d+=c)}else if(a=="doc-start"){if(g=="start")return"";var h=b.match(/^\s*(\/?)\*/);h&&(h[1]&&(d+=" "),d+="* ")}return d},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)},this.createWorker=function(a){var b=a.getDocument(),c=new j(["ace","pilot"],"worker-javascript.js","ace/mode/javascript_worker","JavaScriptWorker");c.call("setValue",[b.getValue()]),b.on("change",function(a){a.range={start:a.data.range.start,end:a.data.range.end},c.emit("change",a)}),c.on("jslint",function(b){var c=[];for(var d=0;d<b.data.length;d++){var e=b.data[d];e&&c.push({row:e.line-1,column:e.character-1,text:e.reason,type:"warning",lint:e})}a.setAnnotations(c)}),c.on("narcissus",function(b){a.setAnnotations([b.data])}),c.on("terminate",function(){a.clearAnnotations()});return c}}.call(l.prototype),b.Mode=l}),define("ace/mode/javascript_highlight_rules",["require","exports","module","pilot/oop","pilot/lang","ace/unicode","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(a,b,c){var d=a("pilot/oop"),e=a("pilot/lang"),f=a("ace/unicode"),g=a("ace/mode/doc_comment_highlight_rules").DocCommentHighlightRules,h=a("ace/mode/text_highlight_rules").TextHighlightRules,i=function(){var a=e.arrayToMap("break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|const|yield|import|get|set".split("|")),b=e.arrayToMap("null|Infinity|NaN|undefined".split("|")),c=e.arrayToMap("class|enum|extends|super|export|implements|private|public|interface|package|protected|static".split("|")),d="["+f.packages.L+"\\$_]["+f.packages.L+f.packages.Mn+f.packages.Mc+f.packages.Nd+f.packages.Pc+"\\$_]*\\b";this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},(new g).getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",merge:!0,regex:'["].*\\\\$',next:"qqstring"},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"string",merge:!0,regex:"['].*\\\\$",next:"qstring"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:function(d){return d=="this"?"variable.language":a.hasOwnProperty(d)?"keyword":b.hasOwnProperty(d)?"constant.language":c.hasOwnProperty(d)?"invalid.illegal":d=="debugger"?"invalid.deprecated":"identifier"},regex:d},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)",next:"regex_allowed"},{token:"lparen",regex:"[[({]",next:"regex_allowed"},{token:"rparen",regex:"[\\])}]"},{token:"keyword.operator",regex:"\\/=?",next:"regex_allowed"},{token:"comment",regex:"^#!.*$"},{token:"text",regex:"\\s+"}],regex_allowed:[{token:"string.regexp",regex:"\\/(?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*",next:"start"},{token:"text",regex:"\\s+"},{token:"empty",regex:"",next:"start"}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"string",regex:'(?:(?:\\\\.)|(?:[^"\\\\]))*?"',next:"start"},{token:"string",merge:!0,regex:".+"}],qstring:[{token:"string",regex:"(?:(?:\\\\.)|(?:[^'\\\\]))*?'",next:"start"},{token:"string",merge:!0,regex:".+"}]},this.embedRules(g,"doc-",[(new g).getEndRule("start")])};d.inherits(i,h),b.JavaScriptHighlightRules=i}),define("ace/mode/doc_comment_highlight_rules",["require","exports","module","pilot/oop","ace/mode/text_highlight_rules"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/text_highlight_rules").TextHighlightRules,f=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};d.inherits(f,e),function(){this.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},this.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}}}.call(f.prototype),b.DocCommentHighlightRules=f}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(a,b,c){var d=a("ace/range").Range,e=function(){};(function(){this.checkOutdent=function(a,b){return/^\s+$/.test(a)?/^\s*\}/.test(b):!1},this.autoOutdent=function(a,b){var c=a.getLine(b),e=c.match(/^(\s*\})/);if(!e)return 0;var f=e[1].length,g=a.findMatchingBracket({row:b,column:f});if(!g||g.row==b)return 0;var h=this.$getIndent(a.getLine(g.row));a.replace(new d(b,0,b,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""}}).call(e.prototype),b.MatchingBraceOutdent=e}),define("ace/worker/worker_client",["require","exports","module","pilot/oop","pilot/event_emitter"],function(a,b,c){var d=a("pilot/oop"),e=a("pilot/event_emitter").EventEmitter,f=function(b,c,d,e){this.callbacks=[];if(a.packaged)var f=this.$guessBasePath(),g=this.$worker=new Worker(f+c);else{var h=this.$normalizePath(a.nameToUrl("ace/worker/worker",null,"_")),g=this.$worker=new Worker(h),i={};for(var j=0;j<b.length;j++){var k=b[j],l=this.$normalizePath(a.nameToUrl(k,null,"_").replace(/.js$/,""));i[k]=l}}this.$worker.postMessage({init:!0,tlns:i,module:d,classname:e}),this.callbackId=1,this.callbacks={};var m=this;this.$worker.onerror=function(a){window.console&&console.log&&console.log(a);throw a},this.$worker.onmessage=function(a){var b=a.data;switch(b.type){case"log":window.console&&console.log&&console.log(b.data);break;case"event":m._dispatchEvent(b.name,{data:b.data});break;case"call":var c=m.callbacks[b.id];c&&(c(b.data),delete m.callbacks[b.id])}}};(function(){d.implement(this,e),this.$normalizePath=function(a){a.match(/^\w+:/)||(a=location.protocol+"//"+location.host+location.pathname+"/"+a);return a},this.$guessBasePath=function(){if(a.aceBaseUrl)return a.aceBaseUrl;var b=document.getElementsByTagName("script");for(var c=0;c<b.length;c++){var d=b[c],e=d.getAttribute("data-ace-base");if(e)return e.replace(/\/*$/,"/");var f=d.src||d.getAttribute("src");if(!f)continue;var g=f.match(/^(?:(.*\/)ace\.js|(.*\/)ace-uncompressed\.js)(?:\?|$)/);if(g)return g[1]||g[2]}return""},this.terminate=function(){this._dispatchEvent("terminate",{}),this.$worker.terminate()},this.send=function(a,b){this.$worker.postMessage({command:a,args:b})},this.call=function(a,b,c){if(c){var d=this.callbackId++;this.callbacks[d]=c,b.push(d)}this.send(a,b)},this.emit=function(a,b){this.$worker.postMessage({event:a,data:b})}}).call(f.prototype),b.WorkerClient=f}),define("ace/mode/behaviour/cstyle",["require","exports","module","pilot/oop","ace/mode/behaviour"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/behaviour").Behaviour,f=function(){this.add("braces","insertion",function(a,b,c,d,e){if(e=="{"){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"{"+g+"}",selection:!1}:{text:"{}",selection:[1,1]}}if(e=="}"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var k=d.$findOpeningBracket("}",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}else if(e=="\n"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var l=d.findMatchingBracket({row:h.row,column:h.column+1});if(!l)return!1;var m=this.getNextLineIndent(a,i.substring(0,i.length-1),d.getTabString()),n=this.$getIndent(d.doc.getLine(l.row));return{text:"\n"+m+"\n"+n,selection:[1,m.length,1,m.length]}}}return!1}),this.add("braces","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="{"){var g=d.doc.getLine(e.start.row),h=g.substring(e.end.column,e.end.column+1);if(h=="}"){e.end.column++;return e}}return!1}),this.add("parens","insertion",function(a,b,c,d,e){if(e=="("){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"("+g+")",selection:!1}:{text:"()",selection:[1,1]}}if(e==")"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j==")"){var k=d.$findOpeningBracket(")",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}return!1}),this.add("parens","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="("){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h==")"){e.end.column++;return e}}return!1}),this.add("string_dquotes","insertion",function(a,b,c,d,e){if(e=='"'){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);if(g!=="")return{text:'"'+g+'"',selection:!1};var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column-1,h.column);if(j=="\\")return!1;var k=d.getTokens(f.start.row,f.start.row)[0].tokens,l=0,m,n=-1;for(var o=0;o<k.length;o++){m=k[o],m.type=="string"?n=-1:n<0&&(n=m.value.indexOf('"'));if(m.value.length+l>f.start.column)break;l+=k[o].value.length}if(!m||n<0&&m.type!=="comment"&&(m.type!=="string"||f.start.column!==m.value.length+l-1&&m.value.lastIndexOf('"')===m.value.length-1))return{text:'""',selection:[1,1]};if(m&&m.type==="string"){var p=i.substring(h.column,h.column+1);if(p=='"')return{text:"",selection:[1,1]}}}return!1}),this.add("string_dquotes","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=='"'){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h=='"'){e.end.column++;return e}}return!1})};d.inherits(f,e),b.CstyleBehaviour=f}),define("ace/mode/svg_highlight_rules",["require","exports","module","pilot/oop","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/javascript_highlight_rules").JavaScriptHighlightRules,f=a("ace/mode/xml_highlight_rules").XmlHighlightRules,g=function(){f.call(this),this.$rules.start.splice(3,0,{token:"text",regex:"<(?=s*script)",next:"script"}),this.$rules.script=[{token:"text",regex:">",next:"js-start"},{token:"keyword",regex:"[-_a-zA-Z0-9:]+"},{token:"text",regex:"\\s+"},{token:"string",regex:'".*?"'},{token:"string",regex:"'.*?'"}],this.embedRules(e,"js-",[{token:"comment",regex:"\\/\\/.*(?=<\\/script>)",next:"tag"},{token:"text",regex:"<\\/(?=script)",next:"tag"}])};d.inherits(g,f),b.SvgHighlightRules=g}),define("ace/mode/xml_highlight_rules",["require","exports","module","pilot/oop","ace/mode/text_highlight_rules"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/text_highlight_rules").TextHighlightRules,f=function(){this.$rules={start:[{token:"text",regex:"<\\!\\[CDATA\\[",next:"cdata"},{token:"xml_pe",regex:"<\\?.*?\\?>"},{token:"comment",merge:!0,regex:"<\\!--",next:"comment"},{token:"text",regex:"<\\/?",next:"tag"},{token:"text",regex:"\\s+"},{token:"text",regex:"[^<]+"}],tag:[{token:"text",regex:">",next:"start"},{token:"keyword",regex:"[-_a-zA-Z0-9:]+"},{token:"text",regex:"\\s+"},{token:"string",regex:'".*?"'},{token:"string",merge:!0,regex:'["].*$',next:"qqstring"},{token:"string",regex:"'.*?'"},{token:"string",merge:!0,regex:"['].*$",next:"qstring"}],qstring:[{token:"string",regex:".*'",next:"tag"},{token:"string",merge:!0,regex:".+"}],qqstring:[{token:"string",regex:'.*"',next:"tag"},{token:"string",merge:!0,regex:".+"}],cdata:[{token:"text",regex:"\\]\\]>",next:"start"},{token:"text",regex:"\\s+"},{token:"text",regex:"(?:[^\\]]|\\](?!\\]>))+"}],comment:[{token:"comment",regex:".*?-->",next:"start"},{token:"comment",merge:!0,regex:".+"}]}};d.inherits(f,e),b.XmlHighlightRules=f}),define("ace/mode/behaviour/xml",["require","exports","module","pilot/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/behaviour").Behaviour,f=a("ace/mode/behaviour/cstyle").CstyleBehaviour,g=function(){this.inherit(f,["string_dquotes"]),this.add("brackets","insertion",function(a,b,c,d,e){if(e=="<"){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?!1:{text:"<>",selection:[1,1]}}if(e==">"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j==">")return{text:"",selection:[1,1]}}else if(e=="\n"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),k=i.substring(h.column,h.column+2);if(k=="</"){var l=this.$getIndent(d.doc.getLine(h.row))+d.getTabString(),m=this.$getIndent(d.doc.getLine(h.row));return{text:"\n"+l+"\n"+m,selection:[1,l.length,1,l.length]}}}return!1})};d.inherits(g,e),b.XmlBehaviour=g}) \ No newline at end of file
+define("ace/mode/svg",["require","exports","module","ace/lib/oop","ace/mode/xml","ace/mode/javascript","ace/tokenizer","ace/mode/svg_highlight_rules","ace/mode/folding/mixed","ace/mode/folding/xml","ace/mode/folding/cstyle"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./xml").Mode,f=a("./javascript").Mode,g=a("../tokenizer").Tokenizer,h=a("./svg_highlight_rules").SvgHighlightRules,i=a("./folding/mixed").FoldMode,j=a("./folding/xml").FoldMode,k=a("./folding/cstyle").FoldMode,l=function(){e.call(this),this.highlighter=new h,this.$tokenizer=new g(this.highlighter.getRules()),this.$embeds=this.highlighter.getEmbeds(),this.createModeDelegates({"js-":f}),this.foldingRules=new i(new j({}),{"js-":new k})};d.inherits(l,e),function(){this.getNextLineIndent=function(a,b,c){return this.$getIndent(b)}}.call(l.prototype),b.Mode=l}),define("ace/mode/xml",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/xml_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/xml"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text").Mode,f=a("../tokenizer").Tokenizer,g=a("./xml_highlight_rules").XmlHighlightRules,h=a("./behaviour/xml").XmlBehaviour,i=a("./folding/xml").FoldMode,j=function(){this.$tokenizer=new f((new g).getRules()),this.$behaviour=new h,this.foldingRules=new i};d.inherits(j,e),function(){this.getNextLineIndent=function(a,b,c){return this.$getIndent(b)}}.call(j.prototype),b.Mode=j}),define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/xml_util","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./xml_util"),f=a("./text_highlight_rules").TextHighlightRules,g=function(){this.$rules={start:[{token:"text",regex:"<\\!\\[CDATA\\[",next:"cdata"},{token:"xml_pe",regex:"<\\?.*?\\?>"},{token:"comment",merge:!0,regex:"<\\!--",next:"comment"},{token:"meta.tag",regex:"<\\/?",next:"tag"},{token:"text",regex:"\\s+"},{token:"text",regex:"[^<]+"}],cdata:[{token:"text",regex:"\\]\\]>",next:"start"},{token:"text",regex:"\\s+"},{token:"text",regex:"(?:[^\\]]|\\](?!\\]>))+"}],comment:[{token:"comment",regex:".*?-->",next:"start"},{token:"comment",merge:!0,regex:".+"}]},e.tag(this.$rules,"tag","start")};d.inherits(g,f),b.XmlHighlightRules=g}),define("ace/mode/xml_util",["require","exports","module","ace/lib/lang"],function(a,b,c){function g(a){return[{token:"string",regex:'".*?"'},{token:"string",merge:!0,regex:'["].*',next:a+"-qqstring"},{token:"string",regex:"'.*?'"},{token:"string",merge:!0,regex:"['].*",next:a+"-qstring"}]}function h(a,b){return[{token:"string",merge:!0,regex:".*?"+a,next:b},{token:"string",merge:!0,regex:".+"}]}"use strict";var d=a("../lib/lang"),e=d.arrayToMap("button|form|input|label|select|textarea".split("|")),f=d.arrayToMap("table|tbody|td|tfoot|th|tr".split("|"));b.tag=function(a,b,c){a[b]=[{token:"text",regex:"\\s+"},{token:function(a){return a==="a"?"meta.tag.anchor":a==="img"?"meta.tag.image":a==="script"?"meta.tag.script":a==="style"?"meta.tag.style":e.hasOwnProperty(a.toLowerCase())?"meta.tag.form":f.hasOwnProperty(a.toLowerCase())?"meta.tag.table":"meta.tag"},merge:!0,regex:"[-_a-zA-Z0-9:!]+",next:b+"embed-attribute-list"},{token:"empty",regex:"",next:b+"embed-attribute-list"}],a[b+"-qstring"]=h("'",b+"embed-attribute-list"),a[b+"-qqstring"]=h('"',b+"embed-attribute-list"),a[b+"embed-attribute-list"]=[{token:"meta.tag",merge:!0,regex:"/?>",next:c},{token:"keyword.operator",regex:"="},{token:"entity.other.attribute-name",regex:"[-_a-zA-Z0-9:]+"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"text",regex:"\\s+"}].concat(g(b))}}),define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("../behaviour").Behaviour,f=a("./cstyle").CstyleBehaviour,g=function(){this.inherit(f,["string_dquotes"]),this.add("brackets","insertion",function(a,b,c,d,e){if(e=="<"){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?!1:{text:"<>",selection:[1,1]}}if(e==">"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j==">")return{text:"",selection:[1,1]}}else if(e=="\n"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),k=i.substring(h.column,h.column+2);if(k=="</"){var l=this.$getIndent(d.doc.getLine(h.row))+d.getTabString(),m=this.$getIndent(d.doc.getLine(h.row));return{text:"\n"+l+"\n"+m,selection:[1,l.length,1,l.length]}}}})};d.inherits(g,e),b.XmlBehaviour=g}),define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("../behaviour").Behaviour,f=function(){this.add("braces","insertion",function(a,b,c,d,e){if(e=="{"){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"{"+g+"}",selection:!1}:{text:"{}",selection:[1,1]}}if(e=="}"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var k=d.$findOpeningBracket("}",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}else if(e=="\n"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var l=d.findMatchingBracket({row:h.row,column:h.column+1});if(!l)return null;var m=this.getNextLineIndent(a,i.substring(0,i.length-1),d.getTabString()),n=this.$getIndent(d.doc.getLine(l.row));return{text:"\n"+m+"\n"+n,selection:[1,m.length,1,m.length]}}}}),this.add("braces","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="{"){var g=d.doc.getLine(e.start.row),h=g.substring(e.end.column,e.end.column+1);if(h=="}")return e.end.column++,e}}),this.add("parens","insertion",function(a,b,c,d,e){if(e=="("){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"("+g+")",selection:!1}:{text:"()",selection:[1,1]}}if(e==")"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j==")"){var k=d.$findOpeningBracket(")",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="("){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h==")")return e.end.column++,e}}),this.add("string_dquotes","insertion",function(a,b,c,d,e){if(e=='"'){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);if(g!=="")return{text:'"'+g+'"',selection:!1};var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column-1,h.column);if(j=="\\")return null;var k=d.getTokens(f.start.row,f.start.row)[0].tokens,l=0,m,n=-1;for(var o=0;o<k.length;o++){m=k[o],m.type=="string"?n=-1:n<0&&(n=m.value.indexOf('"'));if(m.value.length+l>f.start.column)break;l+=k[o].value.length}if(!m||n<0&&m.type!=="comment"&&(m.type!=="string"||f.start.column!==m.value.length+l-1&&m.value.lastIndexOf('"')===m.value.length-1))return{text:'""',selection:[1,1]};if(m&&m.type==="string"){var p=i.substring(h.column,h.column+1);if(p=='"')return{text:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=='"'){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h=='"')return e.end.column++,e}})};d.inherits(f,e),b.CstyleBehaviour=f}),define("ace/mode/folding/xml",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/range","ace/mode/folding/fold_mode","ace/token_iterator"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("../../lib/lang"),f=a("../../range").Range,g=a("./fold_mode").FoldMode,h=a("../../token_iterator").TokenIterator,i=b.FoldMode=function(a){g.call(this),this.voidElements=a||{}};d.inherits(i,g),function(){this.getFoldWidget=function(a,b,c){var d=this._getFirstTagInLine(a,c);return d.closing?b=="markbeginend"?"end":"":!d.tagName||this.voidElements[d.tagName.toLowerCase()]?"":d.selfClosing?"":d.value.indexOf("/"+d.tagName)!==-1?"":"start"},this._getFirstTagInLine=function(a,b){var c=a.getTokens(b,b)[0].tokens,d="";for(var f=0;f<c.length;f++){var g=c[f];g.type.indexOf("meta.tag")===0?d+=g.value:d+=e.stringRepeat(" ",g.value.length)}return this._parseTag(d)},this.tagRe=/^(\s*)(<?(\/?)([-_a-zA-Z0-9:!]*)\s*(\/?)>?)/,this._parseTag=function(a){var b=this.tagRe.exec(a),c=this.tagRe.lastIndex||0;return this.tagRe.lastIndex=0,{value:a,match:b?b[2]:"",closing:b?!!b[3]:!1,selfClosing:b?!!b[5]||b[2]=="/>":!1,tagName:b?b[4]:"",column:b[1]?c+b[1].length:c}},this._readTagForward=function(a){var b=a.getCurrentToken();if(!b)return null;var c="",d;do if(b.type.indexOf("meta.tag")===0){if(!d)var d={row:a.getCurrentTokenRow(),column:a.getCurrentTokenColumn()};c+=b.value;if(c.indexOf(">")!==-1){var e=this._parseTag(c);return e.start=d,e.end={row:a.getCurrentTokenRow(),column:a.getCurrentTokenColumn()+b.value.length},a.stepForward(),e}}while(b=a.stepForward());return null},this._readTagBackward=function(a){var b=a.getCurrentToken();if(!b)return null;var c="",d;do if(b.type.indexOf("meta.tag")===0){d||(d={row:a.getCurrentTokenRow(),column:a.getCurrentTokenColumn()+b.value.length}),c=b.value+c;if(c.indexOf("<")!==-1){var e=this._parseTag(c);return e.end=d,e.start={row:a.getCurrentTokenRow(),column:a.getCurrentTokenColumn()},a.stepBackward(),e}}while(b=a.stepBackward());return null},this._pop=function(a,b){while(a.length){var c=a[a.length-1];if(!b||c.tagName==b.tagName)return a.pop();if(this.voidElements[b.tagName])return;if(this.voidElements[c.tagName]){a.pop();continue}return null}},this.getFoldWidgetRange=function(a,b,c){var d=this._getFirstTagInLine(a,c);if(!d.match)return null;var e=d.closing||d.selfClosing,g=[],i;if(!e){var j=new h(a,c,d.column),k={row:c,column:d.column+d.tagName.length+2};while(i=this._readTagForward(j)){if(i.selfClosing){if(!g.length)return i.start.column+=i.tagName.length+2,i.end.column-=2,f.fromPoints(i.start,i.end);continue}if(i.closing){this._pop(g,i);if(g.length==0)return f.fromPoints(k,i.start)}else g.push(i)}}else{var j=new h(a,c,d.column+d.match.length),l={row:c,column:d.column};while(i=this._readTagBackward(j)){if(i.selfClosing){if(!g.length)return i.start.column+=i.tagName.length+2,i.end.column-=2,f.fromPoints(i.start,i.end);continue}if(!i.closing){this._pop(g,i);if(g.length==0)return i.start.column+=i.tagName.length+2,f.fromPoints(i.start,l)}else g.push(i)}}}}.call(i.prototype)}),define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"],function(a,b,c){"use strict";var d=a("../../range").Range,e=b.FoldMode=function(){};((function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(a,b,c){var d=a.getLine(c);return this.foldingStartMarker.test(d)?"start":b=="markbeginend"&&this.foldingStopMarker&&this.foldingStopMarker.test(d)?"end":""},this.getFoldWidgetRange=function(a,b,c){return null},this.indentationBlock=function(a,b,c){var e=/^\s*/,f=b,g=b,h=a.getLine(b),i=c||h.length,j=h.match(e)[0].length,k=a.getLength();while(++b<k){h=a.getLine(b);var l=h.match(e)[0].length;if(l==h.length)continue;if(l<=j)break;g=b}if(g>f){var m=a.getLine(g).length;return new d(f,i,g,m)}},this.openingBracketBlock=function(a,b,c,e){var f={row:c,column:e+1},g=a.$findClosingBracket(b,f);if(!g)return;var h=a.foldWidgets[g.row];return h==null&&(h=this.getFoldWidget(a,g.row)),h=="start"&&(g.row--,g.column=a.getLine(g.row).length),d.fromPoints(f,g)}})).call(e.prototype)}),define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text").Mode,f=a("../tokenizer").Tokenizer,g=a("./javascript_highlight_rules").JavaScriptHighlightRules,h=a("./matching_brace_outdent").MatchingBraceOutdent,i=a("../range").Range,j=a("../worker/worker_client").WorkerClient,k=a("./behaviour/cstyle").CstyleBehaviour,l=a("./folding/cstyle").FoldMode,m=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h,this.$behaviour=new k,this.foldingRules=new l};d.inherits(m,e),function(){this.toggleCommentLines=function(a,b,c,d){var e=!0,f=/^(\s*)\/\//;for(var g=c;g<=d;g++)if(!f.test(b.getLine(g))){e=!1;break}if(e){var h=new i(0,0,0,0);for(var g=c;g<=d;g++){var j=b.getLine(g),k=j.match(f);h.start.row=g,h.end.row=g,h.end.column=k[0].length,b.replace(h,k[1])}}else b.indentRows(c,d,"//")},this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=this.$tokenizer.getLineTokens(b,a),f=e.tokens,g=e.state;if(f.length&&f[f.length-1].type=="comment")return d;if(a=="start"||a=="regex_allowed"){var h=b.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);h&&(d+=c)}else if(a=="doc-start"){if(g=="start"||a=="regex_allowed")return"";var h=b.match(/^\s*(\/?)\*/);h&&(h[1]&&(d+=" "),d+="* ")}return d},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)},this.createWorker=function(a){var b=new j(["ace"],"worker-javascript.js","ace/mode/javascript_worker","JavaScriptWorker");return b.attachToDocument(a.getDocument()),b.on("jslint",function(b){var c=[];for(var d=0;d<b.data.length;d++){var e=b.data[d];e&&c.push({row:e.line-1,column:e.character-1,text:e.reason,type:"warning",lint:e})}a.setAnnotations(c)}),b.on("narcissus",function(b){a.setAnnotations([b.data])}),b.on("terminate",function(){a.clearAnnotations()}),b}}.call(m.prototype),b.Mode=m}),define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/unicode","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("../lib/lang"),f=a("../unicode"),g=a("./doc_comment_highlight_rules").DocCommentHighlightRules,h=a("./text_highlight_rules").TextHighlightRules,i=function(){var a=e.arrayToMap("Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document".split("|")),b=e.arrayToMap("break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|const|yield|import|get|set".split("|")),c="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield",d=e.arrayToMap("__parent__|__count__|escape|unescape|with|__proto__".split("|")),h=e.arrayToMap("const|let|var|function".split("|")),i=e.arrayToMap("null|Infinity|NaN|undefined".split("|")),j=e.arrayToMap("class|enum|extends|super|export|implements|private|public|interface|package|protected|static".split("|")),k="["+f.packages.L+"\\$_]["+f.packages.L+f.packages.Mn+f.packages.Mc+f.packages.Nd+f.packages.Pc+"\\$_]*\\b";this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},(new g).getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",merge:!0,regex:'["].*\\\\$',next:"qqstring"},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"string",merge:!0,regex:"['].*\\\\$",next:"qstring"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:["keyword.definition","text","entity.name.function"],regex:"(function)(\\s+)("+k+")"},{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:"keyword",regex:"(?:"+c+")\\b",next:"regex_allowed"},{token:function(c){return a.hasOwnProperty(c)?"variable.language":d.hasOwnProperty(c)?"invalid.deprecated":h.hasOwnProperty(c)?"keyword.definition":b.hasOwnProperty(c)?"keyword":i.hasOwnProperty(c)?"constant.language":j.hasOwnProperty(c)?"invalid.illegal":c=="debugger"?"invalid.deprecated":"identifier"},regex:k},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)",next:"regex_allowed"},{token:"punctuation.operator",regex:"\\?|\\:|\\,|\\;|\\.",next:"regex_allowed"},{token:"paren.lparen",regex:"[[({]",next:"regex_allowed"},{token:"paren.rparen",regex:"[\\])}]"},{token:"keyword.operator",regex:"\\/=?",next:"regex_allowed"},{token:"comment",regex:"^#!.*$"},{token:"text",regex:"\\s+"}],regex_allowed:[{token:"comment",merge:!0,regex:"\\/\\*",next:"comment_regex_allowed"},{token:"comment",regex:"\\/\\/.*$"},{token:"string.regexp",regex:"\\/",next:"regex",merge:!0},{token:"text",regex:"\\s+"},{token:"empty",regex:"",next:"start"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)",next:"regex"},{token:"string.regexp",regex:"/\\w*",next:"start",merge:!0},{token:"string.regexp",regex:"[^\\\\/\\[]+",next:"regex",merge:!0},{token:"string.regexp.charachterclass",regex:"\\[",next:"regex_character_class",merge:!0},{token:"empty",regex:"",next:"start"}],regex_character_class:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)",next:"regex_character_class"},{token:"string.regexp.charachterclass",regex:"]",next:"regex",merge:!0},{token:"string.regexp.charachterclass",regex:"[^\\\\\\]]+",next:"regex_character_class",merge:!0},{token:"empty",regex:"",next:"start"}],comment_regex_allowed:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"regex_allowed"},{token:"comment",merge:!0,regex:".+"}],comment:[{token:"comment",regex:".*?\\*\\/",merge:!0,next:"start"},{token:"comment",merge:!0,regex:".+"}],qqstring:[{token:"string",regex:'(?:(?:\\\\.)|(?:[^"\\\\]))*?"',next:"start"},{token:"string",merge:!0,regex:".+"}],qstring:[{token:"string",regex:"(?:(?:\\\\.)|(?:[^'\\\\]))*?'",next:"start"},{token:"string",merge:!0,regex:".+"}]},this.embedRules(g,"doc-",[(new g).getEndRule("start")])};d.inherits(i,h),b.JavaScriptHighlightRules=i}),define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text_highlight_rules").TextHighlightRules,f=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},{token:"comment.doc",merge:!0,regex:"\\s+"},{token:"comment.doc",merge:!0,regex:"TODO"},{token:"comment.doc",merge:!0,regex:"[^@\\*]+"},{token:"comment.doc",merge:!0,regex:"."}]}};d.inherits(f,e),function(){this.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},this.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}}}.call(f.prototype),b.DocCommentHighlightRules=f}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(a,b,c){"use strict";var d=a("../range").Range,e=function(){};((function(){this.checkOutdent=function(a,b){return/^\s+$/.test(a)?/^\s*\}/.test(b):!1},this.autoOutdent=function(a,b){var c=a.getLine(b),e=c.match(/^(\s*\})/);if(!e)return 0;var f=e[1].length,g=a.findMatchingBracket({row:b,column:f});if(!g||g.row==b)return 0;var h=this.$getIndent(a.getLine(g.row));a.replace(new d(b,0,b,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""}})).call(e.prototype),b.MatchingBraceOutdent=e}),define("ace/worker/worker_client",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("../lib/event_emitter").EventEmitter,f=function(b,d,e,f){this.changeListener=this.changeListener.bind(this);if(c.packaged){var g=this.$guessBasePath();this.$worker=new Worker(g+d)}else{var h=this.$normalizePath(a.nameToUrl("ace/worker/worker",null,"_"));this.$worker=new Worker(h);var i={};for(var j=0;j<b.length;j++){var k=b[j],l=this.$normalizePath(a.nameToUrl(k,null,"_").replace(/.js$/,""));i[k]=l}}this.$worker.postMessage({init:!0,tlns:i,module:e,classname:f}),this.callbackId=1,this.callbacks={};var m=this;this.$worker.onerror=function(a){throw window.console&&console.log&&console.log(a),a},this.$worker.onmessage=function(a){var b=a.data;switch(b.type){case"log":window.console&&console.log&&console.log(b.data);break;case"event":m._emit(b.name,{data:b.data});break;case"call":var c=m.callbacks[b.id];c&&(c(b.data),delete m.callbacks[b.id])}}};((function(){d.implement(this,e),this.$normalizePath=function(a){return a=a.replace(/^[a-z]+:\/\/[^\/]+\//,""),a=location.protocol+"//"+location.host+(a.charAt(0)=="/"?"":location.pathname.replace(/\/[^\/]*$/,""))+"/"+a.replace(/^[\/]+/,""),a},this.$guessBasePath=function(){if(a.aceBaseUrl)return a.aceBaseUrl;var b=document.getElementsByTagName("script");for(var c=0;c<b.length;c++){var d=b[c],e=d.getAttribute("data-ace-base");if(e)return e.replace(/\/*$/,"/");var f=d.src||d.getAttribute("src");if(!f)continue;var g=f.match(/^(?:(.*\/)ace\.js|(.*\/)ace(-uncompressed)?(-noconflict)?\.js)(?:\?|$)/);if(g)return g[1]||g[2]}return""},this.terminate=function(){this._emit("terminate",{}),this.$worker.terminate(),this.$worker=null,this.$doc.removeEventListener("change",this.changeListener),this.$doc=null},this.send=function(a,b){this.$worker.postMessage({command:a,args:b})},this.call=function(a,b,c){if(c){var d=this.callbackId++;this.callbacks[d]=c,b.push(d)}this.send(a,b)},this.emit=function(a,b){try{this.$worker.postMessage({event:a,data:{data:b.data}})}catch(c){}},this.attachToDocument=function(a){this.$doc&&this.terminate(),this.$doc=a,this.call("setValue",[a.getValue()]),a.on("change",this.changeListener)},this.changeListener=function(a){a.range={start:a.data.range.start,end:a.data.range.end},this.emit("change",a)}})).call(f.prototype),b.WorkerClient=f}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("../../range").Range,f=a("./fold_mode").FoldMode,g=b.FoldMode=function(){};d.inherits(g,f),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.getFoldWidgetRange=function(a,b,c){var d=a.getLine(c),f=d.match(this.foldingStartMarker);if(f){var g=f.index;if(f[1])return this.openingBracketBlock(a,f[1],c,g);var h=a.getCommentFoldRange(c,g+f[0].length);return h.end.column-=2,h}if(b!=="markbeginend")return;var f=d.match(this.foldingStopMarker);if(f){var g=f.index+f[0].length;if(f[2]){var h=a.getCommentFoldRange(c,g);return h.end.column-=2,h}var i={row:c,column:g},j=a.$findOpeningBracket(f[1],i);if(!j)return;return j.column++,i.column--,e.fromPoints(j,i)}}}.call(g.prototype)}),define("ace/mode/svg_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules","ace/mode/xml_util"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./javascript_highlight_rules").JavaScriptHighlightRules,f=a("./xml_highlight_rules").XmlHighlightRules,g=a("./xml_util"),h=function(){f.call(this),this.$rules.start.splice(3,0,{token:"meta.tag",regex:"<(?=s*script)",next:"script"}),g.tag(this.$rules,"script","js-start"),this.embedRules(e,"js-",[{token:"comment",regex:"\\/\\/.*(?=<\\/script>)",next:"tag"},{token:"meta.tag",regex:"<\\/(?=script)",next:"tag"}])};d.inherits(h,f),b.SvgHighlightRules=h}),define("ace/mode/folding/mixed",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("./fold_mode").FoldMode,f=b.FoldMode=function(a,b){this.defaultMode=a,this.subModes=b};d.inherits(f,e),function(){this.$getMode=function(a){for(var b in this.subModes)if(a.indexOf(b)===0)return this.subModes[b];return null},this.$tryMode=function(a,b,c,d){var e=this.$getMode(a);return e?e.getFoldWidget(b,c,d):""},this.getFoldWidget=function(a,b,c){return this.$tryMode(a.getState(c-1),a,b,c)||this.$tryMode(a.getState(c),a,b,c)||this.defaultMode.getFoldWidget(a,b,c)},this.getFoldWidgetRange=function(a,b,c){var d=this.$getMode(a.getState(c-1));if(!d||!d.getFoldWidget(a,b,c))d=this.$getMode(a.getState(c));if(!d||!d.getFoldWidget(a,b,c))d=this.defaultMode;return d.getFoldWidgetRange(a,b,c)}}.call(f.prototype)}),function(){window.require(["ace/ace"],function(a){window.ace||(window.ace={});for(var b in a)a.hasOwnProperty(b)&&(ace[b]=a[b])})}() \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-textile-uncompressed.js b/apps/files_texteditor/js/aceeditor/mode-textile-uncompressed.js
new file mode 100755
index 00000000000..8512479596e
--- /dev/null
+++ b/apps/files_texteditor/js/aceeditor/mode-textile-uncompressed.js
@@ -0,0 +1,264 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Kelley van Evert <kelley.vanevert@gmail.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/textile', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/textile_highlight_rules', 'ace/mode/matching_brace_outdent'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextMode = require("./text").Mode;
+var Tokenizer = require("../tokenizer").Tokenizer;
+var TextileHighlightRules = require("./textile_highlight_rules").TextileHighlightRules;
+var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
+
+var Mode = function() {
+ this.$tokenizer = new Tokenizer(new TextileHighlightRules().getRules());
+ this.$outdent = new MatchingBraceOutdent();
+};
+oop.inherits(Mode, TextMode);
+
+(function() {
+ this.getNextLineIndent = function(state, line, tab) {
+ if (state == "intag")
+ return tab;
+
+ return "";
+ };
+
+ this.checkOutdent = function(state, line, input) {
+ return this.$outdent.checkOutdent(line, input);
+ };
+
+ this.autoOutdent = function(state, doc, row) {
+ this.$outdent.autoOutdent(doc, row);
+ };
+
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Kelley van Evert <kelley.vanevert@gmail.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/textile_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var TextileHighlightRules = function() {
+ this.$rules = {
+ "start" : [
+ {
+ token : function(value) {
+ if (value.match(/^h\d$/))
+ return "markup.heading." + value.charAt(1);
+ else
+ return "markup.heading";
+ },
+ regex : "h1|h2|h3|h4|h5|h6|bq|p|bc|pre",
+ next : "blocktag"
+ },
+ {
+ token : "keyword",
+ regex : "[\\*]+|[#]+"
+ },
+ {
+ token : "text",
+ regex : ".+"
+ }
+ ],
+ "blocktag" : [
+ {
+ token : "keyword",
+ regex : "\\. ",
+ next : "start"
+ },
+ {
+ token : "keyword",
+ regex : "\\(",
+ next : "blocktagproperties"
+ }
+ ],
+ "blocktagproperties" : [
+ {
+ token : "keyword",
+ regex : "\\)",
+ next : "blocktag"
+ },
+ {
+ token : "string",
+ regex : "[a-zA-Z0-9\\-_]+"
+ },
+ {
+ token : "keyword",
+ regex : "#"
+ }
+ ]
+ };
+};
+
+oop.inherits(TextileHighlightRules, TextHighlightRules);
+
+exports.TextileHighlightRules = TextileHighlightRules;
+
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var Range = require("../range").Range;
+
+var MatchingBraceOutdent = function() {};
+
+(function() {
+
+ this.checkOutdent = function(line, input) {
+ if (! /^\s+$/.test(line))
+ return false;
+
+ return /^\s*\}/.test(input);
+ };
+
+ this.autoOutdent = function(doc, row) {
+ var line = doc.getLine(row);
+ var match = line.match(/^(\s*\})/);
+
+ if (!match) return 0;
+
+ var column = match[1].length;
+ var openBracePos = doc.findMatchingBracket({row: row, column: column});
+
+ if (!openBracePos || openBracePos.row == row) return 0;
+
+ var indent = this.$getIndent(doc.getLine(openBracePos.row));
+ doc.replace(new Range(row, 0, row, column-1), indent);
+ };
+
+ this.$getIndent = function(line) {
+ var match = line.match(/^(\s+)/);
+ if (match) {
+ return match[1];
+ }
+
+ return "";
+ };
+
+}).call(MatchingBraceOutdent.prototype);
+
+exports.MatchingBraceOutdent = MatchingBraceOutdent;
+});
+;
+ (function() {
+ window.require(["ace/ace"], function(a) {
+ if (!window.ace)
+ window.ace = {};
+ for (var key in a) if (a.hasOwnProperty(key))
+ ace[key] = a[key];
+ });
+ })();
+ \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-textile.js b/apps/files_texteditor/js/aceeditor/mode-textile.js
index 6767f638716..ad30c2d579e 100644
--- a/apps/files_texteditor/js/aceeditor/mode-textile.js
+++ b/apps/files_texteditor/js/aceeditor/mode-textile.js
@@ -1 +1 @@
-define("ace/mode/textile",["require","exports","module","pilot/oop","ace/mode/text","ace/tokenizer","ace/mode/textile_highlight_rules","ace/mode/matching_brace_outdent","ace/range"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/text").Mode,f=a("ace/tokenizer").Tokenizer,g=a("ace/mode/textile_highlight_rules").TextileHighlightRules,h=a("ace/mode/matching_brace_outdent").MatchingBraceOutdent,i=a("ace/range").Range,j=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h};d.inherits(j,e),function(){this.getNextLineIndent=function(a,b,c){return a=="intag"?c:""},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)}}.call(j.prototype),b.Mode=j}),define("ace/mode/textile_highlight_rules",["require","exports","module","pilot/oop","ace/mode/text_highlight_rules"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/text_highlight_rules").TextHighlightRules,f=function(){this.$rules={start:[{token:"keyword",regex:"h1|h2|h3|h4|h5|h6|bq|p|bc|pre",next:"blocktag"},{token:"keyword",regex:"[\\*]+|[#]+"},{token:"text",regex:".+"}],blocktag:[{token:"keyword",regex:"\\. ",next:"start"},{token:"keyword",regex:"\\(",next:"blocktagproperties"}],blocktagproperties:[{token:"keyword",regex:"\\)",next:"blocktag"},{token:"string",regex:"[a-zA-Z0-9\\-_]+"},{token:"keyword",regex:"#"}]}};d.inherits(f,e),b.TextileHighlightRules=f}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(a,b,c){var d=a("ace/range").Range,e=function(){};(function(){this.checkOutdent=function(a,b){return/^\s+$/.test(a)?/^\s*\}/.test(b):!1},this.autoOutdent=function(a,b){var c=a.getLine(b),e=c.match(/^(\s*\})/);if(!e)return 0;var f=e[1].length,g=a.findMatchingBracket({row:b,column:f});if(!g||g.row==b)return 0;var h=this.$getIndent(a.getLine(g.row));a.replace(new d(b,0,b,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""}}).call(e.prototype),b.MatchingBraceOutdent=e}) \ No newline at end of file
+define("ace/mode/textile",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/textile_highlight_rules","ace/mode/matching_brace_outdent"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text").Mode,f=a("../tokenizer").Tokenizer,g=a("./textile_highlight_rules").TextileHighlightRules,h=a("./matching_brace_outdent").MatchingBraceOutdent,i=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h};d.inherits(i,e),function(){this.getNextLineIndent=function(a,b,c){return a=="intag"?c:""},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)}}.call(i.prototype),b.Mode=i}),define("ace/mode/textile_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text_highlight_rules").TextHighlightRules,f=function(){this.$rules={start:[{token:function(a){return a.match(/^h\d$/)?"markup.heading."+a.charAt(1):"markup.heading"},regex:"h1|h2|h3|h4|h5|h6|bq|p|bc|pre",next:"blocktag"},{token:"keyword",regex:"[\\*]+|[#]+"},{token:"text",regex:".+"}],blocktag:[{token:"keyword",regex:"\\. ",next:"start"},{token:"keyword",regex:"\\(",next:"blocktagproperties"}],blocktagproperties:[{token:"keyword",regex:"\\)",next:"blocktag"},{token:"string",regex:"[a-zA-Z0-9\\-_]+"},{token:"keyword",regex:"#"}]}};d.inherits(f,e),b.TextileHighlightRules=f}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(a,b,c){"use strict";var d=a("../range").Range,e=function(){};((function(){this.checkOutdent=function(a,b){return/^\s+$/.test(a)?/^\s*\}/.test(b):!1},this.autoOutdent=function(a,b){var c=a.getLine(b),e=c.match(/^(\s*\})/);if(!e)return 0;var f=e[1].length,g=a.findMatchingBracket({row:b,column:f});if(!g||g.row==b)return 0;var h=this.$getIndent(a.getLine(g.row));a.replace(new d(b,0,b,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""}})).call(e.prototype),b.MatchingBraceOutdent=e}),function(){window.require(["ace/ace"],function(a){window.ace||(window.ace={});for(var b in a)a.hasOwnProperty(b)&&(ace[b]=a[b])})}() \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-xml-uncompressed.js b/apps/files_texteditor/js/aceeditor/mode-xml-uncompressed.js
new file mode 100755
index 00000000000..bc27c17f55b
--- /dev/null
+++ b/apps/files_texteditor/js/aceeditor/mode-xml-uncompressed.js
@@ -0,0 +1,1011 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/xml', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/xml_highlight_rules', 'ace/mode/behaviour/xml', 'ace/mode/folding/xml'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextMode = require("./text").Mode;
+var Tokenizer = require("../tokenizer").Tokenizer;
+var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules;
+var XmlBehaviour = require("./behaviour/xml").XmlBehaviour;
+var XmlFoldMode = require("./folding/xml").FoldMode;
+
+var Mode = function() {
+ this.$tokenizer = new Tokenizer(new XmlHighlightRules().getRules());
+ this.$behaviour = new XmlBehaviour();
+ this.foldingRules = new XmlFoldMode();
+};
+
+oop.inherits(Mode, TextMode);
+
+(function() {
+
+ this.getNextLineIndent = function(state, line, tab) {
+ return this.$getIndent(line);
+ };
+
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/xml_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/xml_util', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var xmlUtil = require("./xml_util");
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var XmlHighlightRules = function() {
+
+ // regexp must not have capturing parentheses
+ // regexps are ordered -> the first match is used
+ this.$rules = {
+ start : [{
+ token : "text",
+ regex : "<\\!\\[CDATA\\[",
+ next : "cdata"
+ }, {
+ token : "xml_pe",
+ regex : "<\\?.*?\\?>"
+ }, {
+ token : "comment",
+ merge : true,
+ regex : "<\\!--",
+ next : "comment"
+ }, {
+ token : "meta.tag", // opening tag
+ regex : "<\\/?",
+ next : "tag"
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }, {
+ token : "text",
+ regex : "[^<]+"
+ }],
+
+ cdata : [{
+ token : "text",
+ regex : "\\]\\]>",
+ next : "start"
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }, {
+ token : "text",
+ regex : "(?:[^\\]]|\\](?!\\]>))+"
+ }],
+
+ comment : [{
+ token : "comment",
+ regex : ".*?-->",
+ next : "start"
+ }, {
+ token : "comment",
+ merge : true,
+ regex : ".+"
+ }]
+ };
+
+ xmlUtil.tag(this.$rules, "tag", "start");
+};
+
+oop.inherits(XmlHighlightRules, TextHighlightRules);
+
+exports.XmlHighlightRules = XmlHighlightRules;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/xml_util', ['require', 'exports', 'module' , 'ace/lib/lang'], function(require, exports, module) {
+"use strict";
+
+var lang = require("../lib/lang");
+
+var formTags = lang.arrayToMap(
+ ("button|form|input|label|select|textarea").split("|")
+);
+
+var tableTags = lang.arrayToMap(
+ ("table|tbody|td|tfoot|th|tr").split("|")
+);
+
+function string(state) {
+ return [{
+ token : "string",
+ regex : '".*?"'
+ }, {
+ token : "string", // multi line string start
+ merge : true,
+ regex : '["].*',
+ next : state + "-qqstring"
+ }, {
+ token : "string",
+ regex : "'.*?'"
+ }, {
+ token : "string", // multi line string start
+ merge : true,
+ regex : "['].*",
+ next : state + "-qstring"
+ }];
+}
+
+function multiLineString(quote, state) {
+ return [{
+ token : "string",
+ merge : true,
+ regex : ".*?" + quote,
+ next : state
+ }, {
+ token : "string",
+ merge : true,
+ regex : '.+'
+ }];
+}
+
+exports.tag = function(states, name, nextState) {
+ states[name] = [{
+ token : "text",
+ regex : "\\s+"
+ }, {
+ //token : "meta.tag",
+
+ token : function(value) {
+ if ( value==='a' ) {
+ return "meta.tag.anchor";
+ }
+ else if ( value==='img' ) {
+ return "meta.tag.image";
+ }
+ else if ( value==='script' ) {
+ return "meta.tag.script";
+ }
+ else if ( value==='style' ) {
+ return "meta.tag.style";
+ }
+ else if (formTags.hasOwnProperty(value.toLowerCase())) {
+ return "meta.tag.form";
+ }
+ else if (tableTags.hasOwnProperty(value.toLowerCase())) {
+ return "meta.tag.table";
+ }
+ else {
+ return "meta.tag";
+ }
+ },
+ merge : true,
+ regex : "[-_a-zA-Z0-9:!]+",
+ next : name + "embed-attribute-list"
+ }, {
+ token: "empty",
+ regex: "",
+ next : name + "embed-attribute-list"
+ }];
+
+ states[name + "-qstring"] = multiLineString("'", name + "embed-attribute-list");
+ states[name + "-qqstring"] = multiLineString("\"", name + "embed-attribute-list");
+
+ states[name + "embed-attribute-list"] = [{
+ token : "meta.tag",
+ merge : true,
+ regex : "\/?>",
+ next : nextState
+ }, {
+ token : "keyword.operator",
+ regex : "="
+ }, {
+ token : "entity.other.attribute-name",
+ regex : "[-_a-zA-Z0-9:]+"
+ }, {
+ token : "constant.numeric", // float
+ regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
+ }, {
+ token : "text",
+ regex : "\\s+"
+ }].concat(string(name));
+};
+
+});
+/* vim:ts=4:sts=4:sw=4:
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Chris Spencer <chris.ag.spencer AT googlemail DOT com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/behaviour/xml', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour', 'ace/mode/behaviour/cstyle'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var Behaviour = require("../behaviour").Behaviour;
+var CstyleBehaviour = require("./cstyle").CstyleBehaviour;
+
+var XmlBehaviour = function () {
+
+ this.inherit(CstyleBehaviour, ["string_dquotes"]); // Get string behaviour
+
+ this.add("brackets", "insertion", function (state, action, editor, session, text) {
+ if (text == '<') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return false;
+ } else {
+ return {
+ text: '<>',
+ selection: [1, 1]
+ }
+ }
+ } else if (text == '>') {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '>') { // need some kind of matching check here
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ } else if (text == "\n") {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChars = line.substring(cursor.column, cursor.column + 2);
+ if (rightChars == '</') {
+ var indent = this.$getIndent(session.doc.getLine(cursor.row)) + session.getTabString();
+ var next_indent = this.$getIndent(session.doc.getLine(cursor.row));
+
+ return {
+ text: '\n' + indent + '\n' + next_indent,
+ selection: [1, indent.length, 1, indent.length]
+ }
+ }
+ }
+ });
+
+}
+oop.inherits(XmlBehaviour, Behaviour);
+
+exports.XmlBehaviour = XmlBehaviour;
+});/* vim:ts=4:sts=4:sw=4:
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Chris Spencer <chris.ag.spencer AT googlemail DOT com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/behaviour/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var Behaviour = require('../behaviour').Behaviour;
+
+var CstyleBehaviour = function () {
+
+ this.add("braces", "insertion", function (state, action, editor, session, text) {
+ if (text == '{') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '{' + selected + '}',
+ selection: false
+ }
+ } else {
+ return {
+ text: '{}',
+ selection: [1, 1]
+ }
+ }
+ } else if (text == '}') {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '}') {
+ var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});
+ if (matching !== null) {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ } else if (text == "\n") {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '}') {
+ var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column + 1});
+ if (!openBracePos)
+ return null;
+
+ var indent = this.getNextLineIndent(state, line.substring(0, line.length - 1), session.getTabString());
+ var next_indent = this.$getIndent(session.doc.getLine(openBracePos.row));
+
+ return {
+ text: '\n' + indent + '\n' + next_indent,
+ selection: [1, indent.length, 1, indent.length]
+ }
+ }
+ }
+ });
+
+ this.add("braces", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '{') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.end.column, range.end.column + 1);
+ if (rightChar == '}') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+ this.add("parens", "insertion", function (state, action, editor, session, text) {
+ if (text == '(') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '(' + selected + ')',
+ selection: false
+ }
+ } else {
+ return {
+ text: '()',
+ selection: [1, 1]
+ }
+ }
+ } else if (text == ')') {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == ')') {
+ var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});
+ if (matching !== null) {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ }
+ });
+
+ this.add("parens", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '(') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
+ if (rightChar == ')') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+ this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {
+ if (text == '"') {
+ var selection = editor.getSelectionRange();
+ var selected = session.doc.getTextRange(selection);
+ if (selected !== "") {
+ return {
+ text: '"' + selected + '"',
+ selection: false
+ }
+ } else {
+ var cursor = editor.getCursorPosition();
+ var line = session.doc.getLine(cursor.row);
+ var leftChar = line.substring(cursor.column-1, cursor.column);
+
+ // We're escaped.
+ if (leftChar == '\\') {
+ return null;
+ }
+
+ // Find what token we're inside.
+ var tokens = session.getTokens(selection.start.row, selection.start.row)[0].tokens;
+ var col = 0, token;
+ var quotepos = -1; // Track whether we're inside an open quote.
+
+ for (var x = 0; x < tokens.length; x++) {
+ token = tokens[x];
+ if (token.type == "string") {
+ quotepos = -1;
+ } else if (quotepos < 0) {
+ quotepos = token.value.indexOf('"');
+ }
+ if ((token.value.length + col) > selection.start.column) {
+ break;
+ }
+ col += tokens[x].value.length;
+ }
+
+ // Try and be smart about when we auto insert.
+ if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf('"') === token.value.length-1)))) {
+ return {
+ text: '""',
+ selection: [1,1]
+ }
+ } else if (token && token.type === "string") {
+ // Ignore input and move right one if we're typing over the closing quote.
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
+ if (rightChar == '"') {
+ return {
+ text: '',
+ selection: [1, 1]
+ }
+ }
+ }
+ }
+ }
+ });
+
+ this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {
+ var selected = session.doc.getTextRange(range);
+ if (!range.isMultiLine() && selected == '"') {
+ var line = session.doc.getLine(range.start.row);
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
+ if (rightChar == '"') {
+ range.end.column++;
+ return range;
+ }
+ }
+ });
+
+}
+oop.inherits(CstyleBehaviour, Behaviour);
+
+exports.CstyleBehaviour = CstyleBehaviour;
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/xml', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/range', 'ace/mode/folding/fold_mode', 'ace/token_iterator'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var lang = require("../../lib/lang");
+var Range = require("../../range").Range;
+var BaseFoldMode = require("./fold_mode").FoldMode;
+var TokenIterator = require("../../token_iterator").TokenIterator;
+
+var FoldMode = exports.FoldMode = function(voidElements) {
+ BaseFoldMode.call(this);
+ this.voidElements = voidElements || {};
+};
+oop.inherits(FoldMode, BaseFoldMode);
+
+(function() {
+
+ this.getFoldWidget = function(session, foldStyle, row) {
+ var tag = this._getFirstTagInLine(session, row);
+
+ if (tag.closing)
+ return foldStyle == "markbeginend" ? "end" : "";
+
+ if (!tag.tagName || this.voidElements[tag.tagName.toLowerCase()])
+ return "";
+
+ if (tag.selfClosing)
+ return "";
+
+ if (tag.value.indexOf("/" + tag.tagName) !== -1)
+ return "";
+
+ return "start";
+ };
+
+ this._getFirstTagInLine = function(session, row) {
+ var tokens = session.getTokens(row, row)[0].tokens;
+ var value = "";
+ for (var i = 0; i < tokens.length; i++) {
+ var token = tokens[i];
+ if (token.type.indexOf("meta.tag") === 0)
+ value += token.value;
+ else
+ value += lang.stringRepeat(" ", token.value.length);
+ }
+
+ return this._parseTag(value);
+ };
+
+ this.tagRe = /^(\s*)(<?(\/?)([-_a-zA-Z0-9:!]*)\s*(\/?)>?)/;
+ this._parseTag = function(tag) {
+
+ var match = this.tagRe.exec(tag);
+ var column = this.tagRe.lastIndex || 0;
+ this.tagRe.lastIndex = 0;
+
+ return {
+ value: tag,
+ match: match ? match[2] : "",
+ closing: match ? !!match[3] : false,
+ selfClosing: match ? !!match[5] || match[2] == "/>" : false,
+ tagName: match ? match[4] : "",
+ column: match[1] ? column + match[1].length : column
+ };
+ };
+
+ /**
+ * reads a full tag and places the iterator after the tag
+ */
+ this._readTagForward = function(iterator) {
+ var token = iterator.getCurrentToken();
+ if (!token)
+ return null;
+
+ var value = "";
+ var start;
+
+ do {
+ if (token.type.indexOf("meta.tag") === 0) {
+ if (!start) {
+ var start = {
+ row: iterator.getCurrentTokenRow(),
+ column: iterator.getCurrentTokenColumn()
+ };
+ }
+ value += token.value;
+ if (value.indexOf(">") !== -1) {
+ var tag = this._parseTag(value);
+ tag.start = start;
+ tag.end = {
+ row: iterator.getCurrentTokenRow(),
+ column: iterator.getCurrentTokenColumn() + token.value.length
+ };
+ iterator.stepForward();
+ return tag;
+ }
+ }
+ } while(token = iterator.stepForward());
+
+ return null;
+ };
+
+ this._readTagBackward = function(iterator) {
+ var token = iterator.getCurrentToken();
+ if (!token)
+ return null;
+
+ var value = "";
+ var end;
+
+ do {
+ if (token.type.indexOf("meta.tag") === 0) {
+ if (!end) {
+ end = {
+ row: iterator.getCurrentTokenRow(),
+ column: iterator.getCurrentTokenColumn() + token.value.length
+ };
+ }
+ value = token.value + value;
+ if (value.indexOf("<") !== -1) {
+ var tag = this._parseTag(value);
+ tag.end = end;
+ tag.start = {
+ row: iterator.getCurrentTokenRow(),
+ column: iterator.getCurrentTokenColumn()
+ };
+ iterator.stepBackward();
+ return tag;
+ }
+ }
+ } while(token = iterator.stepBackward());
+
+ return null;
+ };
+
+ this._pop = function(stack, tag) {
+ while (stack.length) {
+
+ var top = stack[stack.length-1];
+ if (!tag || top.tagName == tag.tagName) {
+ return stack.pop();
+ }
+ else if (this.voidElements[tag.tagName]) {
+ return;
+ }
+ else if (this.voidElements[top.tagName]) {
+ stack.pop();
+ continue;
+ } else {
+ return null;
+ }
+ }
+ };
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ var firstTag = this._getFirstTagInLine(session, row);
+
+ if (!firstTag.match)
+ return null;
+
+ var isBackward = firstTag.closing || firstTag.selfClosing;
+ var stack = [];
+ var tag;
+
+ if (!isBackward) {
+ var iterator = new TokenIterator(session, row, firstTag.column);
+ var start = {
+ row: row,
+ column: firstTag.column + firstTag.tagName.length + 2
+ };
+ while (tag = this._readTagForward(iterator)) {
+ if (tag.selfClosing) {
+ if (!stack.length) {
+ tag.start.column += tag.tagName.length + 2;
+ tag.end.column -= 2;
+ return Range.fromPoints(tag.start, tag.end);
+ } else
+ continue;
+ }
+
+ if (tag.closing) {
+ this._pop(stack, tag);
+ if (stack.length == 0)
+ return Range.fromPoints(start, tag.start);
+ }
+ else {
+ stack.push(tag)
+ }
+ }
+ }
+ else {
+ var iterator = new TokenIterator(session, row, firstTag.column + firstTag.match.length);
+ var end = {
+ row: row,
+ column: firstTag.column
+ };
+
+ while (tag = this._readTagBackward(iterator)) {
+ if (tag.selfClosing) {
+ if (!stack.length) {
+ tag.start.column += tag.tagName.length + 2;
+ tag.end.column -= 2;
+ return Range.fromPoints(tag.start, tag.end);
+ } else
+ continue;
+ }
+
+ if (!tag.closing) {
+ this._pop(stack, tag);
+ if (stack.length == 0) {
+ tag.start.column += tag.tagName.length + 2;
+ return Range.fromPoints(tag.start, end);
+ }
+ }
+ else {
+ stack.push(tag)
+ }
+ }
+ }
+
+ };
+
+}).call(FoldMode.prototype);
+
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/folding/fold_mode', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
+"use strict";
+
+var Range = require("../../range").Range;
+
+var FoldMode = exports.FoldMode = function() {};
+
+(function() {
+
+ this.foldingStartMarker = null;
+ this.foldingStopMarker = null;
+
+ // must return "" if there's no fold, to enable caching
+ this.getFoldWidget = function(session, foldStyle, row) {
+ var line = session.getLine(row);
+ if (this.foldingStartMarker.test(line))
+ return "start";
+ if (foldStyle == "markbeginend"
+ && this.foldingStopMarker
+ && this.foldingStopMarker.test(line))
+ return "end";
+ return "";
+ };
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ return null;
+ };
+
+ this.indentationBlock = function(session, row, column) {
+ var re = /^\s*/;
+ var startRow = row;
+ var endRow = row;
+ var line = session.getLine(row);
+ var startColumn = column || line.length;
+ var startLevel = line.match(re)[0].length;
+ var maxRow = session.getLength()
+
+ while (++row < maxRow) {
+ line = session.getLine(row);
+ var level = line.match(re)[0].length;
+
+ if (level == line.length)
+ continue;
+
+ if (level <= startLevel)
+ break;
+
+ endRow = row;
+ }
+
+ if (endRow > startRow) {
+ var endColumn = session.getLine(endRow).length;
+ return new Range(startRow, startColumn, endRow, endColumn);
+ }
+ };
+
+ this.openingBracketBlock = function(session, bracket, row, column) {
+ var start = {row: row, column: column + 1};
+ var end = session.$findClosingBracket(bracket, start);
+ if (!end)
+ return;
+
+ var fw = session.foldWidgets[end.row];
+ if (fw == null)
+ fw = this.getFoldWidget(session, end.row);
+
+ if (fw == "start") {
+ end.row --;
+ end.column = session.getLine(end.row).length;
+ }
+ return Range.fromPoints(start, end);
+ };
+
+}).call(FoldMode.prototype);
+
+});
+;
+ (function() {
+ window.require(["ace/ace"], function(a) {
+ if (!window.ace)
+ window.ace = {};
+ for (var key in a) if (a.hasOwnProperty(key))
+ ace[key] = a[key];
+ });
+ })();
+ \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/mode-xml.js b/apps/files_texteditor/js/aceeditor/mode-xml.js
index d000462f33b..236ab2430eb 100644
--- a/apps/files_texteditor/js/aceeditor/mode-xml.js
+++ b/apps/files_texteditor/js/aceeditor/mode-xml.js
@@ -1 +1 @@
-define("ace/mode/xml",["require","exports","module","pilot/oop","ace/mode/text","ace/tokenizer","ace/mode/xml_highlight_rules","ace/mode/behaviour/xml"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/text").Mode,f=a("ace/tokenizer").Tokenizer,g=a("ace/mode/xml_highlight_rules").XmlHighlightRules,h=a("ace/mode/behaviour/xml").XmlBehaviour,i=function(){this.$tokenizer=new f((new g).getRules()),this.$behaviour=new h};d.inherits(i,e),function(){this.getNextLineIndent=function(a,b,c){return this.$getIndent(b)}}.call(i.prototype),b.Mode=i}),define("ace/mode/xml_highlight_rules",["require","exports","module","pilot/oop","ace/mode/text_highlight_rules"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/text_highlight_rules").TextHighlightRules,f=function(){this.$rules={start:[{token:"text",regex:"<\\!\\[CDATA\\[",next:"cdata"},{token:"xml_pe",regex:"<\\?.*?\\?>"},{token:"comment",merge:!0,regex:"<\\!--",next:"comment"},{token:"text",regex:"<\\/?",next:"tag"},{token:"text",regex:"\\s+"},{token:"text",regex:"[^<]+"}],tag:[{token:"text",regex:">",next:"start"},{token:"keyword",regex:"[-_a-zA-Z0-9:]+"},{token:"text",regex:"\\s+"},{token:"string",regex:'".*?"'},{token:"string",merge:!0,regex:'["].*$',next:"qqstring"},{token:"string",regex:"'.*?'"},{token:"string",merge:!0,regex:"['].*$",next:"qstring"}],qstring:[{token:"string",regex:".*'",next:"tag"},{token:"string",merge:!0,regex:".+"}],qqstring:[{token:"string",regex:'.*"',next:"tag"},{token:"string",merge:!0,regex:".+"}],cdata:[{token:"text",regex:"\\]\\]>",next:"start"},{token:"text",regex:"\\s+"},{token:"text",regex:"(?:[^\\]]|\\](?!\\]>))+"}],comment:[{token:"comment",regex:".*?-->",next:"start"},{token:"comment",merge:!0,regex:".+"}]}};d.inherits(f,e),b.XmlHighlightRules=f}),define("ace/mode/behaviour/xml",["require","exports","module","pilot/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/behaviour").Behaviour,f=a("ace/mode/behaviour/cstyle").CstyleBehaviour,g=function(){this.inherit(f,["string_dquotes"]),this.add("brackets","insertion",function(a,b,c,d,e){if(e=="<"){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?!1:{text:"<>",selection:[1,1]}}if(e==">"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j==">")return{text:"",selection:[1,1]}}else if(e=="\n"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),k=i.substring(h.column,h.column+2);if(k=="</"){var l=this.$getIndent(d.doc.getLine(h.row))+d.getTabString(),m=this.$getIndent(d.doc.getLine(h.row));return{text:"\n"+l+"\n"+m,selection:[1,l.length,1,l.length]}}}return!1})};d.inherits(g,e),b.XmlBehaviour=g}),define("ace/mode/behaviour/cstyle",["require","exports","module","pilot/oop","ace/mode/behaviour"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/behaviour").Behaviour,f=function(){this.add("braces","insertion",function(a,b,c,d,e){if(e=="{"){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"{"+g+"}",selection:!1}:{text:"{}",selection:[1,1]}}if(e=="}"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var k=d.$findOpeningBracket("}",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}else if(e=="\n"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var l=d.findMatchingBracket({row:h.row,column:h.column+1});if(!l)return!1;var m=this.getNextLineIndent(a,i.substring(0,i.length-1),d.getTabString()),n=this.$getIndent(d.doc.getLine(l.row));return{text:"\n"+m+"\n"+n,selection:[1,m.length,1,m.length]}}}return!1}),this.add("braces","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="{"){var g=d.doc.getLine(e.start.row),h=g.substring(e.end.column,e.end.column+1);if(h=="}"){e.end.column++;return e}}return!1}),this.add("parens","insertion",function(a,b,c,d,e){if(e=="("){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"("+g+")",selection:!1}:{text:"()",selection:[1,1]}}if(e==")"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j==")"){var k=d.$findOpeningBracket(")",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}return!1}),this.add("parens","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="("){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h==")"){e.end.column++;return e}}return!1}),this.add("string_dquotes","insertion",function(a,b,c,d,e){if(e=='"'){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);if(g!=="")return{text:'"'+g+'"',selection:!1};var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column-1,h.column);if(j=="\\")return!1;var k=d.getTokens(f.start.row,f.start.row)[0].tokens,l=0,m,n=-1;for(var o=0;o<k.length;o++){m=k[o],m.type=="string"?n=-1:n<0&&(n=m.value.indexOf('"'));if(m.value.length+l>f.start.column)break;l+=k[o].value.length}if(!m||n<0&&m.type!=="comment"&&(m.type!=="string"||f.start.column!==m.value.length+l-1&&m.value.lastIndexOf('"')===m.value.length-1))return{text:'""',selection:[1,1]};if(m&&m.type==="string"){var p=i.substring(h.column,h.column+1);if(p=='"')return{text:"",selection:[1,1]}}}return!1}),this.add("string_dquotes","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=='"'){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h=='"'){e.end.column++;return e}}return!1})};d.inherits(f,e),b.CstyleBehaviour=f}) \ No newline at end of file
+define("ace/mode/xml",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/xml_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/xml"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text").Mode,f=a("../tokenizer").Tokenizer,g=a("./xml_highlight_rules").XmlHighlightRules,h=a("./behaviour/xml").XmlBehaviour,i=a("./folding/xml").FoldMode,j=function(){this.$tokenizer=new f((new g).getRules()),this.$behaviour=new h,this.foldingRules=new i};d.inherits(j,e),function(){this.getNextLineIndent=function(a,b,c){return this.$getIndent(b)}}.call(j.prototype),b.Mode=j}),define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/xml_util","ace/mode/text_highlight_rules"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./xml_util"),f=a("./text_highlight_rules").TextHighlightRules,g=function(){this.$rules={start:[{token:"text",regex:"<\\!\\[CDATA\\[",next:"cdata"},{token:"xml_pe",regex:"<\\?.*?\\?>"},{token:"comment",merge:!0,regex:"<\\!--",next:"comment"},{token:"meta.tag",regex:"<\\/?",next:"tag"},{token:"text",regex:"\\s+"},{token:"text",regex:"[^<]+"}],cdata:[{token:"text",regex:"\\]\\]>",next:"start"},{token:"text",regex:"\\s+"},{token:"text",regex:"(?:[^\\]]|\\](?!\\]>))+"}],comment:[{token:"comment",regex:".*?-->",next:"start"},{token:"comment",merge:!0,regex:".+"}]},e.tag(this.$rules,"tag","start")};d.inherits(g,f),b.XmlHighlightRules=g}),define("ace/mode/xml_util",["require","exports","module","ace/lib/lang"],function(a,b,c){function g(a){return[{token:"string",regex:'".*?"'},{token:"string",merge:!0,regex:'["].*',next:a+"-qqstring"},{token:"string",regex:"'.*?'"},{token:"string",merge:!0,regex:"['].*",next:a+"-qstring"}]}function h(a,b){return[{token:"string",merge:!0,regex:".*?"+a,next:b},{token:"string",merge:!0,regex:".+"}]}"use strict";var d=a("../lib/lang"),e=d.arrayToMap("button|form|input|label|select|textarea".split("|")),f=d.arrayToMap("table|tbody|td|tfoot|th|tr".split("|"));b.tag=function(a,b,c){a[b]=[{token:"text",regex:"\\s+"},{token:function(a){return a==="a"?"meta.tag.anchor":a==="img"?"meta.tag.image":a==="script"?"meta.tag.script":a==="style"?"meta.tag.style":e.hasOwnProperty(a.toLowerCase())?"meta.tag.form":f.hasOwnProperty(a.toLowerCase())?"meta.tag.table":"meta.tag"},merge:!0,regex:"[-_a-zA-Z0-9:!]+",next:b+"embed-attribute-list"},{token:"empty",regex:"",next:b+"embed-attribute-list"}],a[b+"-qstring"]=h("'",b+"embed-attribute-list"),a[b+"-qqstring"]=h('"',b+"embed-attribute-list"),a[b+"embed-attribute-list"]=[{token:"meta.tag",merge:!0,regex:"/?>",next:c},{token:"keyword.operator",regex:"="},{token:"entity.other.attribute-name",regex:"[-_a-zA-Z0-9:]+"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"text",regex:"\\s+"}].concat(g(b))}}),define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("../behaviour").Behaviour,f=a("./cstyle").CstyleBehaviour,g=function(){this.inherit(f,["string_dquotes"]),this.add("brackets","insertion",function(a,b,c,d,e){if(e=="<"){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?!1:{text:"<>",selection:[1,1]}}if(e==">"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j==">")return{text:"",selection:[1,1]}}else if(e=="\n"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),k=i.substring(h.column,h.column+2);if(k=="</"){var l=this.$getIndent(d.doc.getLine(h.row))+d.getTabString(),m=this.$getIndent(d.doc.getLine(h.row));return{text:"\n"+l+"\n"+m,selection:[1,l.length,1,l.length]}}}})};d.inherits(g,e),b.XmlBehaviour=g}),define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("../behaviour").Behaviour,f=function(){this.add("braces","insertion",function(a,b,c,d,e){if(e=="{"){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"{"+g+"}",selection:!1}:{text:"{}",selection:[1,1]}}if(e=="}"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var k=d.$findOpeningBracket("}",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}else if(e=="\n"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j=="}"){var l=d.findMatchingBracket({row:h.row,column:h.column+1});if(!l)return null;var m=this.getNextLineIndent(a,i.substring(0,i.length-1),d.getTabString()),n=this.$getIndent(d.doc.getLine(l.row));return{text:"\n"+m+"\n"+n,selection:[1,m.length,1,m.length]}}}}),this.add("braces","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="{"){var g=d.doc.getLine(e.start.row),h=g.substring(e.end.column,e.end.column+1);if(h=="}")return e.end.column++,e}}),this.add("parens","insertion",function(a,b,c,d,e){if(e=="("){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);return g!==""?{text:"("+g+")",selection:!1}:{text:"()",selection:[1,1]}}if(e==")"){var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column,h.column+1);if(j==")"){var k=d.$findOpeningBracket(")",{column:h.column+1,row:h.row});if(k!==null)return{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=="("){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h==")")return e.end.column++,e}}),this.add("string_dquotes","insertion",function(a,b,c,d,e){if(e=='"'){var f=c.getSelectionRange(),g=d.doc.getTextRange(f);if(g!=="")return{text:'"'+g+'"',selection:!1};var h=c.getCursorPosition(),i=d.doc.getLine(h.row),j=i.substring(h.column-1,h.column);if(j=="\\")return null;var k=d.getTokens(f.start.row,f.start.row)[0].tokens,l=0,m,n=-1;for(var o=0;o<k.length;o++){m=k[o],m.type=="string"?n=-1:n<0&&(n=m.value.indexOf('"'));if(m.value.length+l>f.start.column)break;l+=k[o].value.length}if(!m||n<0&&m.type!=="comment"&&(m.type!=="string"||f.start.column!==m.value.length+l-1&&m.value.lastIndexOf('"')===m.value.length-1))return{text:'""',selection:[1,1]};if(m&&m.type==="string"){var p=i.substring(h.column,h.column+1);if(p=='"')return{text:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(a,b,c,d,e){var f=d.doc.getTextRange(e);if(!e.isMultiLine()&&f=='"'){var g=d.doc.getLine(e.start.row),h=g.substring(e.start.column+1,e.start.column+2);if(h=='"')return e.end.column++,e}})};d.inherits(f,e),b.CstyleBehaviour=f}),define("ace/mode/folding/xml",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/range","ace/mode/folding/fold_mode","ace/token_iterator"],function(a,b,c){"use strict";var d=a("../../lib/oop"),e=a("../../lib/lang"),f=a("../../range").Range,g=a("./fold_mode").FoldMode,h=a("../../token_iterator").TokenIterator,i=b.FoldMode=function(a){g.call(this),this.voidElements=a||{}};d.inherits(i,g),function(){this.getFoldWidget=function(a,b,c){var d=this._getFirstTagInLine(a,c);return d.closing?b=="markbeginend"?"end":"":!d.tagName||this.voidElements[d.tagName.toLowerCase()]?"":d.selfClosing?"":d.value.indexOf("/"+d.tagName)!==-1?"":"start"},this._getFirstTagInLine=function(a,b){var c=a.getTokens(b,b)[0].tokens,d="";for(var f=0;f<c.length;f++){var g=c[f];g.type.indexOf("meta.tag")===0?d+=g.value:d+=e.stringRepeat(" ",g.value.length)}return this._parseTag(d)},this.tagRe=/^(\s*)(<?(\/?)([-_a-zA-Z0-9:!]*)\s*(\/?)>?)/,this._parseTag=function(a){var b=this.tagRe.exec(a),c=this.tagRe.lastIndex||0;return this.tagRe.lastIndex=0,{value:a,match:b?b[2]:"",closing:b?!!b[3]:!1,selfClosing:b?!!b[5]||b[2]=="/>":!1,tagName:b?b[4]:"",column:b[1]?c+b[1].length:c}},this._readTagForward=function(a){var b=a.getCurrentToken();if(!b)return null;var c="",d;do if(b.type.indexOf("meta.tag")===0){if(!d)var d={row:a.getCurrentTokenRow(),column:a.getCurrentTokenColumn()};c+=b.value;if(c.indexOf(">")!==-1){var e=this._parseTag(c);return e.start=d,e.end={row:a.getCurrentTokenRow(),column:a.getCurrentTokenColumn()+b.value.length},a.stepForward(),e}}while(b=a.stepForward());return null},this._readTagBackward=function(a){var b=a.getCurrentToken();if(!b)return null;var c="",d;do if(b.type.indexOf("meta.tag")===0){d||(d={row:a.getCurrentTokenRow(),column:a.getCurrentTokenColumn()+b.value.length}),c=b.value+c;if(c.indexOf("<")!==-1){var e=this._parseTag(c);return e.end=d,e.start={row:a.getCurrentTokenRow(),column:a.getCurrentTokenColumn()},a.stepBackward(),e}}while(b=a.stepBackward());return null},this._pop=function(a,b){while(a.length){var c=a[a.length-1];if(!b||c.tagName==b.tagName)return a.pop();if(this.voidElements[b.tagName])return;if(this.voidElements[c.tagName]){a.pop();continue}return null}},this.getFoldWidgetRange=function(a,b,c){var d=this._getFirstTagInLine(a,c);if(!d.match)return null;var e=d.closing||d.selfClosing,g=[],i;if(!e){var j=new h(a,c,d.column),k={row:c,column:d.column+d.tagName.length+2};while(i=this._readTagForward(j)){if(i.selfClosing){if(!g.length)return i.start.column+=i.tagName.length+2,i.end.column-=2,f.fromPoints(i.start,i.end);continue}if(i.closing){this._pop(g,i);if(g.length==0)return f.fromPoints(k,i.start)}else g.push(i)}}else{var j=new h(a,c,d.column+d.match.length),l={row:c,column:d.column};while(i=this._readTagBackward(j)){if(i.selfClosing){if(!g.length)return i.start.column+=i.tagName.length+2,i.end.column-=2,f.fromPoints(i.start,i.end);continue}if(!i.closing){this._pop(g,i);if(g.length==0)return i.start.column+=i.tagName.length+2,f.fromPoints(i.start,l)}else g.push(i)}}}}.call(i.prototype)}),define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"],function(a,b,c){"use strict";var d=a("../../range").Range,e=b.FoldMode=function(){};((function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(a,b,c){var d=a.getLine(c);return this.foldingStartMarker.test(d)?"start":b=="markbeginend"&&this.foldingStopMarker&&this.foldingStopMarker.test(d)?"end":""},this.getFoldWidgetRange=function(a,b,c){return null},this.indentationBlock=function(a,b,c){var e=/^\s*/,f=b,g=b,h=a.getLine(b),i=c||h.length,j=h.match(e)[0].length,k=a.getLength();while(++b<k){h=a.getLine(b);var l=h.match(e)[0].length;if(l==h.length)continue;if(l<=j)break;g=b}if(g>f){var m=a.getLine(g).length;return new d(f,i,g,m)}},this.openingBracketBlock=function(a,b,c,e){var f={row:c,column:e+1},g=a.$findClosingBracket(b,f);if(!g)return;var h=a.foldWidgets[g.row];return h==null&&(h=this.getFoldWidget(a,g.row)),h=="start"&&(g.row--,g.column=a.getLine(g.row).length),d.fromPoints(f,g)}})).call(e.prototype)}),function(){window.require(["ace/ace"],function(a){window.ace||(window.ace={});for(var b in a)a.hasOwnProperty(b)&&(ace[b]=a[b])})}() \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/theme-clouds-uncompressed.js b/apps/files_texteditor/js/aceeditor/theme-clouds-uncompressed.js
new file mode 100755
index 00000000000..0c0445151b5
--- /dev/null
+++ b/apps/files_texteditor/js/aceeditor/theme-clouds-uncompressed.js
@@ -0,0 +1,162 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/theme/clouds', ['require', 'exports', 'module' ], function(require, exports, module) {
+
+exports.isDark = false;
+exports.cssClass = "ace-clouds";
+exports.cssText = "\
+.ace-clouds .ace_editor {\
+ border: 2px solid rgb(159, 159, 159);\
+}\
+\
+.ace-clouds .ace_editor.ace_focus {\
+ border: 2px solid #327fbd;\
+}\
+\
+.ace-clouds .ace_gutter {\
+ background: #e8e8e8;\
+ color: #333;\
+}\
+\
+.ace-clouds .ace_print_margin {\
+ width: 1px;\
+ background: #e8e8e8;\
+}\
+\
+.ace-clouds .ace_scroller {\
+ background-color: #FFFFFF;\
+}\
+\
+.ace-clouds .ace_text-layer {\
+ cursor: text;\
+ color: #000000;\
+}\
+\
+.ace-clouds .ace_cursor {\
+ border-left: 2px solid #000000;\
+}\
+\
+.ace-clouds .ace_cursor.ace_overwrite {\
+ border-left: 0px;\
+ border-bottom: 1px solid #000000;\
+}\
+ \
+.ace-clouds .ace_marker-layer .ace_selection {\
+ background: #BDD5FC;\
+}\
+\
+.ace-clouds .ace_marker-layer .ace_step {\
+ background: rgb(198, 219, 174);\
+}\
+\
+.ace-clouds .ace_marker-layer .ace_bracket {\
+ margin: -1px 0 0 -1px;\
+ border: 1px solid #BFBFBF;\
+}\
+\
+.ace-clouds .ace_marker-layer .ace_active_line {\
+ background: #FFFBD1;\
+}\
+\
+.ace-clouds .ace_marker-layer .ace_selected_word {\
+ border: 1px solid #BDD5FC;\
+}\
+ \
+.ace-clouds .ace_invisible {\
+ color: #BFBFBF;\
+}\
+\
+.ace-clouds .ace_keyword {\
+ color:#AF956F;\
+}\
+\
+.ace-clouds .ace_keyword.ace_operator {\
+ color:#484848;\
+}\
+\
+.ace-clouds .ace_constant.ace_language {\
+ color:#39946A;\
+}\
+\
+.ace-clouds .ace_constant.ace_numeric {\
+ color:#46A609;\
+}\
+\
+.ace-clouds .ace_invalid {\
+ background-color:#FF002A;\
+}\
+\
+.ace-clouds .ace_fold {\
+ background-color: #AF956F;\
+ border-color: #000000;\
+}\
+\
+.ace-clouds .ace_support.ace_function {\
+ color:#C52727;\
+}\
+\
+.ace-clouds .ace_string {\
+ color:#5D90CD;\
+}\
+\
+.ace-clouds .ace_comment {\
+ color:#BCC8BA;\
+}\
+\
+.ace-clouds .ace_entity.ace_other.ace_attribute-name {\
+ color:#606060;\
+}\
+\
+.ace-clouds .ace_markup.ace_underline {\
+ text-decoration:underline;\
+}";
+
+var dom = require("../lib/dom");
+dom.importCssString(exports.cssText, exports.cssClass);
+
+});
+;
+ (function() {
+ window.require(["ace/ace"], function(a) {
+ if (!window.ace)
+ window.ace = {};
+ for (var key in a) if (a.hasOwnProperty(key))
+ ace[key] = a[key];
+ });
+ })();
+ \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/theme-clouds.js b/apps/files_texteditor/js/aceeditor/theme-clouds.js
index c14d3cbcff6..78a1d5b5e5c 100644
--- a/apps/files_texteditor/js/aceeditor/theme-clouds.js
+++ b/apps/files_texteditor/js/aceeditor/theme-clouds.js
@@ -1 +1 @@
-define("ace/theme/clouds",["require","exports","module"],function(a,b,c){var d=a("pilot/dom"),e=".ace-clouds .ace_editor {\n border: 2px solid rgb(159, 159, 159);\n}\n\n.ace-clouds .ace_editor.ace_focus {\n border: 2px solid #327fbd;\n}\n\n.ace-clouds .ace_gutter {\n width: 50px;\n background: #e8e8e8;\n color: #333;\n overflow : hidden;\n}\n\n.ace-clouds .ace_gutter-layer {\n width: 100%;\n text-align: right;\n}\n\n.ace-clouds .ace_gutter-layer .ace_gutter-cell {\n padding-right: 6px;\n}\n\n.ace-clouds .ace_print_margin {\n width: 1px;\n background: #e8e8e8;\n}\n\n.ace-clouds .ace_scroller {\n background-color: #FFFFFF;\n}\n\n.ace-clouds .ace_text-layer {\n cursor: text;\n color: #000000;\n}\n\n.ace-clouds .ace_cursor {\n border-left: 2px solid #000000;\n}\n\n.ace-clouds .ace_cursor.ace_overwrite {\n border-left: 0px;\n border-bottom: 1px solid #000000;\n}\n \n.ace-clouds .ace_marker-layer .ace_selection {\n background: #BDD5FC;\n}\n\n.ace-clouds .ace_marker-layer .ace_step {\n background: rgb(198, 219, 174);\n}\n\n.ace-clouds .ace_marker-layer .ace_bracket {\n margin: -1px 0 0 -1px;\n border: 1px solid #BFBFBF;\n}\n\n.ace-clouds .ace_marker-layer .ace_active_line {\n background: #FFFBD1;\n}\n\n \n.ace-clouds .ace_invisible {\n color: #BFBFBF;\n}\n\n.ace-clouds .ace_keyword {\n color:#AF956F;\n}\n\n.ace-clouds .ace_keyword.ace_operator {\n color:#484848;\n}\n\n.ace-clouds .ace_constant {\n \n}\n\n.ace-clouds .ace_constant.ace_language {\n color:#39946A;\n}\n\n.ace-clouds .ace_constant.ace_library {\n \n}\n\n.ace-clouds .ace_constant.ace_numeric {\n color:#46A609;\n}\n\n.ace-clouds .ace_invalid {\n background-color:#FF002A;\n}\n\n.ace-clouds .ace_invalid.ace_illegal {\n \n}\n\n.ace-clouds .ace_invalid.ace_deprecated {\n \n}\n\n.ace-clouds .ace_support {\n \n}\n\n.ace-clouds .ace_support.ace_function {\n color:#C52727;\n}\n\n.ace-clouds .ace_function.ace_buildin {\n \n}\n\n.ace-clouds .ace_string {\n color:#5D90CD;\n}\n\n.ace-clouds .ace_string.ace_regexp {\n \n}\n\n.ace-clouds .ace_comment {\n color:#BCC8BA;\n}\n\n.ace-clouds .ace_comment.ace_doc {\n \n}\n\n.ace-clouds .ace_comment.ace_doc.ace_tag {\n \n}\n\n.ace-clouds .ace_variable {\n \n}\n\n.ace-clouds .ace_variable.ace_language {\n \n}\n\n.ace-clouds .ace_xml_pe {\n \n}";d.importCssString(e),b.cssClass="ace-clouds"}) \ No newline at end of file
+define("ace/theme/clouds",["require","exports","module"],function(a,b,c){b.isDark=!1,b.cssClass="ace-clouds",b.cssText=".ace-clouds .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-clouds .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-clouds .ace_gutter { background: #e8e8e8; color: #333;}.ace-clouds .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-clouds .ace_scroller { background-color: #FFFFFF;}.ace-clouds .ace_text-layer { cursor: text; color: #000000;}.ace-clouds .ace_cursor { border-left: 2px solid #000000;}.ace-clouds .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid #000000;} .ace-clouds .ace_marker-layer .ace_selection { background: #BDD5FC;}.ace-clouds .ace_marker-layer .ace_step { background: rgb(198, 219, 174);}.ace-clouds .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid #BFBFBF;}.ace-clouds .ace_marker-layer .ace_active_line { background: #FFFBD1;}.ace-clouds .ace_marker-layer .ace_selected_word { border: 1px solid #BDD5FC;} .ace-clouds .ace_invisible { color: #BFBFBF;}.ace-clouds .ace_keyword { color:#AF956F;}.ace-clouds .ace_keyword.ace_operator { color:#484848;}.ace-clouds .ace_constant.ace_language { color:#39946A;}.ace-clouds .ace_constant.ace_numeric { color:#46A609;}.ace-clouds .ace_invalid { background-color:#FF002A;}.ace-clouds .ace_fold { background-color: #AF956F; border-color: #000000;}.ace-clouds .ace_support.ace_function { color:#C52727;}.ace-clouds .ace_string { color:#5D90CD;}.ace-clouds .ace_comment { color:#BCC8BA;}.ace-clouds .ace_entity.ace_other.ace_attribute-name { color:#606060;}.ace-clouds .ace_markup.ace_underline { text-decoration:underline;}";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}),function(){window.require(["ace/ace"],function(a){window.ace||(window.ace={});for(var b in a)a.hasOwnProperty(b)&&(ace[b]=a[b])})}() \ No newline at end of file
diff --git a/apps/files_texteditor/js/aceeditor/worker-coffee.js b/apps/files_texteditor/js/aceeditor/worker-coffee.js
index a4cbf589440..d47238ceb7d 100644
--- a/apps/files_texteditor/js/aceeditor/worker-coffee.js
+++ b/apps/files_texteditor/js/aceeditor/worker-coffee.js
@@ -1 +1,7054 @@
-function initSender(){var a=require("pilot/event_emitter").EventEmitter,b=require("pilot/oop"),c=function(){};(function(){b.implement(this,a),this.callback=function(a,b){postMessage({type:"call",id:b,data:a})},this.emit=function(a,b){postMessage({type:"event",name:a,data:b})}}).call(c.prototype);return new c}function initBaseUrls(a){require.tlns=a}var console={log:function(a){postMessage({type:"log",data:a})}},window={console:console},require=function(a){var b=require.modules[a];if(b){b.initialized||(b.exports=b.factory().exports,b.initialized=!0);return b.exports}var c=a.split("/");c[0]=require.tlns[c[0]]||c[0],path=c.join("/")+".js",require.id=a,importScripts(path);return require(a)};require.modules={},require.tlns={};var define=function(a,b,c){arguments.length==2?c=b:arguments.length==1&&(c=a,a=require.id);a.indexOf("text/")!==0&&(require.modules[a]={factory:function(){var a={exports:{}},b=c(require,a.exports,a);b&&(a.exports=b);return a}})},main,sender;onmessage=function(a){var b=a.data;if(b.command)main[b.command].apply(main,b.args);else if(b.init){initBaseUrls(b.tlns),require("pilot/fixoldbrowsers"),sender=initSender();var c=require(b.module)[b.classname];main=new c(sender)}else b.event&&sender&&sender._dispatchEvent(b.event,b.data)},define("pilot/fixoldbrowsers",["require","exports","module"],function(a,b,c){if(!Function.prototype.bind){var d=Array.prototype.slice;Function.prototype.bind=function(a){var b=this;if(typeof b.apply!="function"||typeof b.call!="function")return new TypeError;var c=d.call(arguments),e=function f(){if(this instanceof f){var a=Object.create(b.prototype);b.apply(a,c.concat(d.call(arguments)));return a}return b.call.apply(b,c.concat(d.call(arguments)))};e.length=typeof b=="function"?Math.max(b.length-c.length,0):0;return e}}var e=Function.prototype.call,f=Array.prototype,g=Object.prototype,h=e.bind(g.hasOwnProperty),i,j,k,l,m;if(m=h(g,"__defineGetter__"))i=e.bind(g.__defineGetter__),j=e.bind(g.__defineSetter__),k=e.bind(g.__lookupGetter__),l=e.bind(g.__lookupSetter__);Array.isArray||(Array.isArray=function(a){return Object.prototype.toString.call(a)==="[object Array]"}),Array.prototype.forEach||(Array.prototype.forEach=function(a,b){var c=+this.length;for(var d=0;d<c;d++)d in this&&a.call(b,this[d],d,this)}),Array.prototype.map||(Array.prototype.map=function(a){var b=+this.length;if(typeof a!="function")throw new TypeError;var c=Array(b),d=arguments[1];for(var e=0;e<b;e++)e in this&&(c[e]=a.call(d,this[e],e,this));return c}),Array.prototype.filter||(Array.prototype.filter=function(a){var b=[],c=arguments[1];for(var d=0;d<this.length;d++)a.call(c,this[d])&&b.push(this[d]);return b}),Array.prototype.every||(Array.prototype.every=function(a){var b=arguments[1];for(var c=0;c<this.length;c++)if(!a.call(b,this[c]))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(a){var b=arguments[1];for(var c=0;c<this.length;c++)if(a.call(b,this[c]))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(a){var b=+this.length;if(typeof a!="function")throw new TypeError;if(b===0&&arguments.length===1)throw new TypeError;var c=0;if(arguments.length>=2)var d=arguments[1];else do{if(c in this){d=this[c++];break}if(++c>=b)throw new TypeError}while(!0);for(;c<b;c++)c in this&&(d=a.call(null,d,this[c],c,this));return d}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(a){var b=+this.length;if(typeof a!="function")throw new TypeError;if(b===0&&arguments.length===1)throw new TypeError;var c=b-1;if(arguments.length>=2)var d=arguments[1];else do{if(c in this){d=this[c--];break}if(--c<0)throw new TypeError}while(!0);for(;c>=0;c--)c in this&&(d=a.call(null,d,this[c],c,this));return d}),Array.prototype.indexOf||(Array.prototype.indexOf=function(a){var b=this.length;if(!b)return-1;var c=arguments[1]||0;if(c>=b)return-1;c<0&&(c+=b);for(;c<b;c++){if(!h(this,c))continue;if(a===this[c])return c}return-1}),Array.prototype.lastIndexOf||(Array.prototype.lastIndexOf=function(a){var b=this.length;if(!b)return-1;var c=arguments[1]||b;c<0&&(c+=b),c=Math.min(c,b-1);for(;c>=0;c--){if(!h(this,c))continue;if(a===this[c])return c}return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(a){return a.__proto__||a.constructor.prototype});if(!Object.getOwnPropertyDescriptor){var n="Object.getOwnPropertyDescriptor called on a non-object: ";Object.getOwnPropertyDescriptor=function(a,b){if(typeof a!="object"&&typeof a!="function"||a===null)throw new TypeError(n+a);if(!h(a,b))return undefined;var c,d,e;c={enumerable:!0,configurable:!0};if(m){var f=a.__proto__;a.__proto__=g;var d=k(a,b),e=l(a,b);a.__proto__=f;if(d||e){d&&(descriptor.get=d),e&&(descriptor.set=e);return descriptor}}descriptor.value=a[b];return descriptor}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(a){return Object.keys(a)}),Object.create||(Object.create=function(a,b){var c;if(a===null)c={"__proto__":null};else{if(typeof a!="object")throw new TypeError("typeof prototype["+typeof a+"] != 'object'");var d=function(){};d.prototype=a,c=new d,c.__proto__=a}typeof b!="undefined"&&Object.defineProperties(c,b);return c});if(!Object.defineProperty){var o="Property description must be an object: ",p="Object.defineProperty called on non-object: ",q="getters & setters can not be defined on this javascript engine";Object.defineProperty=function(a,b,c){if(typeof a!="object"&&typeof a!="function")throw new TypeError(p+a);if(typeof a!="object"||a===null)throw new TypeError(o+c);if(h(c,"value"))if(m&&(k(a,b)||l(a,b))){var d=a.__proto__;a.__proto__=g,delete a[b],a[b]=c.value,a.prototype}else a[b]=c.value;else{if(!m)throw new TypeError(q);h(c,"get")&&i(a,b,c.get),h(c,"set")&&j(a,b,c.set)}return a}}Object.defineProperties||(Object.defineProperties=function(a,b){for(var c in b)h(b,c)&&Object.defineProperty(a,c,b[c]);return a}),Object.seal||(Object.seal=function(a){return a}),Object.freeze||(Object.freeze=function(a){return a});try{Object.freeze(function(){})}catch(r){Object.freeze=function(a){return function b(b){return typeof b=="function"?b:a(b)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(a){return a}),Object.isSealed||(Object.isSealed=function(a){return!1}),Object.isFrozen||(Object.isFrozen=function(a){return!1}),Object.isExtensible||(Object.isExtensible=function(a){return!0});if(!Object.keys){var s=!0,t=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],u=t.length;for(var v in{toString:null})s=!1;Object.keys=function W(a){if(typeof a!="object"&&typeof a!="function"||a===null)throw new TypeError("Object.keys called on a non-object");var W=[];for(var b in a)h(a,b)&&W.push(b);if(s)for(var c=0,d=u;c<d;c++){var e=t[c];h(a,e)&&W.push(e)}return W}}Date.prototype.toISOString||(Date.prototype.toISOString=function(){return this.getUTCFullYear()+"-"+(this.getUTCMonth()+1)+"-"+this.getUTCDate()+"T"+this.getUTCHours()+":"+this.getUTCMinutes()+":"+this.getUTCSeconds()+"Z"}),Date.now||(Date.now=function(){return(new Date).getTime()}),Date.prototype.toJSON||(Date.prototype.toJSON=function(a){if(typeof this.toISOString!="function")throw new TypeError;return this.toISOString()}),isNaN(Date.parse("T00:00"))&&(Date=function(a){var b=function(c,d,e,f,g,h,i){var j=arguments.length;if(this instanceof a){var k=j===1&&String(c)===c?new a(b.parse(c)):j>=7?new a(c,d,e,f,g,h,i):j>=6?new a(c,d,e,f,g,h):j>=5?new a(c,d,e,f,g):j>=4?new a(c,d,e,f):j>=3?new a(c,d,e):j>=2?new a(c,d):j>=1?new a(c):new a;k.constructor=b;return k}return a.apply(this,arguments)},c=new RegExp("^(?:((?:[+-]\\d\\d)?\\d\\d\\d\\d)(?:-(\\d\\d)(?:-(\\d\\d))?)?)?(?:T(\\d\\d):(\\d\\d)(?::(\\d\\d)(?:\\.(\\d\\d\\d))?)?)?(?:Z|([+-])(\\d\\d):(\\d\\d))?$");for(var d in a)b[d]=a[d];b.now=a.now,b.UTC=a.UTC,b.prototype=a.prototype,b.prototype.constructor=b,b.parse=function e(b){var d=c.exec(b);if(d){d.shift();var e=d[0]===undefined;for(var f=0;f<10;f++){if(f===7)continue;d[f]=+(d[f]||(f<3?1:0)),f===1&&d[f]--}if(e)return((d[3]*60+d[4])*60+d[5])*1e3+d[6];var g=(d[8]*60+d[9])*60*1e3;d[6]==="-"&&(g=-g);return a.UTC.apply(this,d.slice(0,7))+g}return a.parse.apply(this,arguments)};return b}(Date));if(!String.prototype.trim){var w=/^\s\s*/,x=/\s\s*$/;String.prototype.trim=function(){return String(this).replace(w,"").replace(x,"")}}}),define("pilot/event_emitter",["require","exports","module"],function(a,b,c){var d={};d._emit=d._dispatchEvent=function(a,b){this._eventRegistry=this._eventRegistry||{};var c=this._eventRegistry[a];if(!!c&&!!c.length){var b=b||{};b.type=a;for(var d=0;d<c.length;d++)c[d](b)}},d.on=d.addEventListener=function(a,b){this._eventRegistry=this._eventRegistry||{};var c=this._eventRegistry[a];if(!c)var c=this._eventRegistry[a]=[];c.indexOf(b)==-1&&c.push(b)},d.removeListener=d.removeEventListener=function(a,b){this._eventRegistry=this._eventRegistry||{};var c=this._eventRegistry[a];if(!!c){var d=c.indexOf(b);d!==-1&&c.splice(d,1)}},d.removeAllListeners=function(a){this._eventRegistry&&(this._eventRegistry[a]=[])},b.EventEmitter=d}),define("pilot/oop",["require","exports","module"],function(a,b,c){b.inherits=function(){var a=function(){};return function(b,c){a.prototype=c.prototype,b.super_=c.prototype,b.prototype=new a,b.prototype.constructor=b}}(),b.mixin=function(a,b){for(var c in b)a[c]=b[c]},b.implement=function(a,c){b.mixin(a,c)}}),define("ace/mode/coffee_worker",["require","exports","module","pilot/oop","ace/worker/mirror","ace/mode/coffee/coffee-script"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/worker/mirror").Mirror,f=a("ace/mode/coffee/coffee-script");window.addEventListener=function(){};var g=b.Worker=function(a){e.call(this,a),this.setTimeout(200)};d.inherits(g,e),function(){this.onUpdate=function(){var a=this.doc.getValue();try{f.parse(a)}catch(b){var c=b.message.match(/Parse error on line (\d+): (.*)/);if(c){this.sender.emit("error",{row:parseInt(c[1])-1,column:null,text:c[2],type:"error"});return}if(b instanceof SyntaxError){var c=b.message.match(/ on line (\d+)/);c&&this.sender.emit("error",{row:parseInt(c[1])-1,column:null,text:b.message.replace(c[0],""),type:"error"})}return}this.sender.emit("ok")}}.call(g.prototype)}),define("ace/worker/mirror",["require","exports","module","ace/document","pilot/lang"],function(a,b,c){var d=a("ace/document").Document,e=a("pilot/lang"),f=b.Mirror=function(a){this.sender=a;var b=this.doc=new d(""),c=this.deferredUpdate=e.deferredCall(this.onUpdate.bind(this)),f=this;a.on("change",function(a){b.applyDeltas([a.data]),c.schedule(f.$timeout)})};(function(){this.$timeout=500,this.setTimeout=function(a){this.$timeout=a},this.setValue=function(a){this.doc.setValue(a),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(a){this.sender.callback(this.doc.getValue(),a)},this.onUpdate=function(){}}).call(f.prototype)}),define("ace/document",["require","exports","module","pilot/oop","pilot/event_emitter","ace/range","ace/anchor"],function(a,b,c){var d=a("pilot/oop"),e=a("pilot/event_emitter").EventEmitter,f=a("ace/range").Range,g=a("ace/anchor").Anchor,h=function(a){this.$lines=[],Array.isArray(a)?this.insertLines(0,a):a.length==0?this.$lines=[""]:this.insert({row:0,column:0},a)};(function(){d.implement(this,e),this.setValue=function(a){var b=this.getLength();this.remove(new f(0,0,b,this.getLine(b-1).length)),this.insert({row:0,column:0},a)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(a,b){return new g(this,a,b)},"aaa".split(/a/).length==0?this.$split=function(a){return a.replace(/\r\n|\r/g,"\n").split("\n")}:this.$split=function(a){return a.split(/\r\n|\r|\n/)},this.$detectNewLine=function(a){var b=a.match(/^.*?(\r?\n)/m);b?this.$autoNewLine=b[1]:this.$autoNewLine="\n"},this.getNewLineCharacter=function(){switch(this.$newLineMode){case"windows":return"\r\n";case"unix":return"\n";case"auto":return this.$autoNewLine}},this.$autoNewLine="\n",this.$newLineMode="auto",this.setNewLineMode=function(a){this.$newLineMode!==a&&(this.$newLineMode=a)},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(a){return a=="\r\n"||a=="\r"||a=="\n"},this.getLine=function(a){return this.$lines[a]||""},this.getLines=function(a,b){return this.$lines.slice(a,b+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(a){if(a.start.row==a.end.row)return this.$lines[a.start.row].substring(a.start.column,a.end.column);var b=[];b.push(this.$lines[a.start.row].substring(a.start.column)),b.push.apply(b,this.getLines(a.start.row+1,a.end.row-1)),b.push(this.$lines[a.end.row].substring(0,a.end.column));return b.join(this.getNewLineCharacter())},this.$clipPosition=function(a){var b=this.getLength();a.row>=b&&(a.row=Math.max(0,b-1),a.column=this.getLine(b-1).length);return a},this.insert=function(a,b){if(b.length==0)return a;a=this.$clipPosition(a),this.getLength()<=1&&this.$detectNewLine(b);var c=this.$split(b),d=c.splice(0,1)[0],e=c.length==0?null:c.splice(c.length-1,1)[0];a=this.insertInLine(a,d),e!==null&&(a=this.insertNewLine(a),a=this.insertLines(a.row,c),a=this.insertInLine(a,e||""));return a},this.insertLines=function(a,b){if(b.length==0)return{row:a,column:0};var c=[a,0];c.push.apply(c,b),this.$lines.splice.apply(this.$lines,c);var d=new f(a,0,a+b.length,0),e={action:"insertLines",range:d,lines:b};this._dispatchEvent("change",{data:e});return d.end},this.insertNewLine=function(a){a=this.$clipPosition(a);var b=this.$lines[a.row]||"";this.$lines[a.row]=b.substring(0,a.column),this.$lines.splice(a.row+1,0,b.substring(a.column,b.length));var c={row:a.row+1,column:0},d={action:"insertText",range:f.fromPoints(a,c),text:this.getNewLineCharacter()};this._dispatchEvent("change",{data:d});return c},this.insertInLine=function(a,b){if(b.length==0)return a;var c=this.$lines[a.row]||"";this.$lines[a.row]=c.substring(0,a.column)+b+c.substring(a.column);var d={row:a.row,column:a.column+b.length},e={action:"insertText",range:f.fromPoints(a,d),text:b};this._dispatchEvent("change",{data:e});return d},this.remove=function(a){a.start=this.$clipPosition(a.start),a.end=this.$clipPosition(a.end);if(a.isEmpty())return a.start;var b=a.start.row,c=a.end.row;if(a.isMultiLine()){var d=a.start.column==0?b:b+1,e=c-1;a.end.column>0&&this.removeInLine(c,0,a.end.column),e>=d&&this.removeLines(d,e),d!=b&&(this.removeInLine(b,a.start.column,this.getLine(b).length),this.removeNewLine(a.start.row))}else this.removeInLine(b,a.start.column,a.end.column);return a.start},this.removeInLine=function(a,b,c){if(b!=c){var d=new f(a,b,a,c),e=this.getLine(a),g=e.substring(b,c),h=e.substring(0,b)+e.substring(c,e.length);this.$lines.splice(a,1,h);var i={action:"removeText",range:d,text:g};this._dispatchEvent("change",{data:i});return d.start}},this.removeLines=function(a,b){var c=new f(a,0,b+1,0),d=this.$lines.splice(a,b-a+1),e={action:"removeLines",range:c,nl:this.getNewLineCharacter(),lines:d};this._dispatchEvent("change",{data:e});return d},this.removeNewLine=function(a){var b=this.getLine(a),c=this.getLine(a+1),d=new f(a,b.length,a+1,0),e=b+c;this.$lines.splice(a,2,e);var g={action:"removeText",range:d,text:this.getNewLineCharacter()};this._dispatchEvent("change",{data:g})},this.replace=function(a,b){if(b.length==0&&a.isEmpty())return a.start;if(b==this.getTextRange(a))return a.end;this.remove(a);if(b)var c=this.insert(a.start,b);else c=a.start;return c},this.applyDeltas=function(a){for(var b=0;b<a.length;b++){var c=a[b],d=f.fromPoints(c.range.start,c.range.end);c.action=="insertLines"?this.insertLines(d.start.row,c.lines):c.action=="insertText"?this.insert(d.start,c.text):c.action=="removeLines"?this.removeLines(d.start.row,d.end.row-1):c.action=="removeText"&&this.remove(d)}},this.revertDeltas=function(a){for(var b=a.length-1;b>=0;b--){var c=a[b],d=f.fromPoints(c.range.start,c.range.end);c.action=="insertLines"?this.removeLines(d.start.row,d.end.row-1):c.action=="insertText"?this.remove(d):c.action=="removeLines"?this.insertLines(d.start.row,c.lines):c.action=="removeText"&&this.insert(d.start,c.text)}}}).call(h.prototype),b.Document=h}),define("ace/range",["require","exports","module"],function(a,b,c){var d=function(a,b,c,d){this.start={row:a,column:b},this.end={row:c,column:d}};(function(){this.toString=function(){return"Range: ["+this.start.row+"/"+this.start.column+"] -> ["+this.end.row+"/"+this.end.column+"]"},this.contains=function(a,b){return this.compare(a,b)==0},this.compareRange=function(a){var b,c=a.end,d=a.start;b=this.compare(c.row,c.column);if(b==1){b=this.compare(d.row,d.column);return b==1?2:b==0?1:0}if(b==-1)return-2;b=this.compare(d.row,d.column);return b==-1?-1:b==1?42:0},this.containsRange=function(a){var b=this.compareRange(a);return b==-1||b==0||b==1},this.isEnd=function(a,b){return this.end.row==a&&this.end.column==b},this.isStart=function(a,b){return this.start.row==a&&this.start.column==b},this.setStart=function(a,b){typeof a=="object"?(this.start.column=a.column,this.start.row=a.row):(this.start.row=a,this.start.column=b)},this.setEnd=function(a,b){typeof a=="object"?(this.end.column=a.column,this.end.row=a.row):(this.end.row=a,this.end.column=b)},this.inside=function(a,b){if(this.compare(a,b)==0)return this.isEnd(a,b)||this.isStart(a,b)?!1:!0;return!1},this.insideStart=function(a,b){if(this.compare(a,b)==0)return this.isEnd(a,b)?!1:!0;return!1},this.insideEnd=function(a,b){if(this.compare(a,b)==0)return this.isStart(a,b)?!1:!0;return!1},this.compare=function(a,b){if(!this.isMultiLine()&&a===this.start.row)return b<this.start.column?-1:b>this.end.column?1:0;return a<this.start.row?-1:a>this.end.row?1:this.start.row===a?b>=this.start.column?0:-1:this.end.row===a?b<=this.end.column?0:1:0},this.compareStart=function(a,b){return this.start.row==a&&this.start.column==b?-1:this.compare(a,b)},this.compareEnd=function(a,b){return this.end.row==a&&this.end.column==b?1:this.compare(a,b)},this.compareInside=function(a,b){return this.end.row==a&&this.end.column==b?1:this.start.row==a&&this.start.column==b?-1:this.compare(a,b)},this.clipRows=function(a,b){if(this.end.row>b)var c={row:b+1,column:0};if(this.start.row>b)var e={row:b+1,column:0};if(this.start.row<a)var e={row:a,column:0};if(this.end.row<a)var c={row:a,column:0};return d.fromPoints(e||this.start,c||this.end)},this.extend=function(a,b){var c=this.compare(a,b);if(c==0)return this;if(c==-1)var e={row:a,column:b};else var f={row:a,column:b};return d.fromPoints(e||this.start,f||this.end)},this.isEmpty=function(){return this.start.row==this.end.row&&this.start.column==this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return d.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new d(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new d(this.start.row,0,this.end.row,0)},this.toScreenRange=function(a){var b=a.documentToScreenPosition(this.start),c=a.documentToScreenPosition(this.end);return new d(b.row,b.column,c.row,c.column)}}).call(d.prototype),d.fromPoints=function(a,b){return new d(a.row,a.column,b.row,b.column)},b.Range=d}),define("ace/anchor",["require","exports","module","pilot/oop","pilot/event_emitter"],function(a,b,c){var d=a("pilot/oop"),e=a("pilot/event_emitter").EventEmitter,f=b.Anchor=function(a,b,c){this.document=a,typeof c=="undefined"?this.setPosition(b.row,b.column):this.setPosition(b,c),this.$onChange=this.onChange.bind(this),a.on("change",this.$onChange)};(function(){d.implement(this,e),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.onChange=function(a){var b=a.data,c=b.range;if(c.start.row!=c.end.row||c.start.row==this.row){if(c.start.row>this.row)return;if(c.start.row==this.row&&c.start.column>this.column)return;var d=this.row,e=this.column;b.action==="insertText"?c.start.row===d&&c.start.column<=e?c.start.row===c.end.row?e+=c.end.column-c.start.column:(e-=c.start.column,d+=c.end.row-c.start.row):c.start.row!==c.end.row&&c.start.row<d&&(d+=c.end.row-c.start.row):b.action==="insertLines"?c.start.row<=d&&(d+=c.end.row-c.start.row):b.action=="removeText"?c.start.row==d&&c.start.column<e?c.end.column>=e?e=c.start.column:e=Math.max(0,e-(c.end.column-c.start.column)):c.start.row!==c.end.row&&c.start.row<d?(c.end.row==d&&(e=Math.max(0,e-c.end.column)+c.start.column),d-=c.end.row-c.start.row):c.end.row==d&&(d-=c.end.row-c.start.row,e=Math.max(0,e-c.end.column)+c.start.column):b.action=="removeLines"&&c.start.row<=d&&(c.end.row<=d?d-=c.end.row-c.start.row:(d=c.start.row,e=0)),this.setPosition(d,e,!0)}},this.setPosition=function(a,b,c){var d;c?d={row:a,column:b}:d=this.$clipPositionToDocument(a,b);if(this.row!=d.row||this.column!=d.column){var e={row:this.row,column:this.column};this.row=d.row,this.column=d.column,this._dispatchEvent("change",{old:e,value:d})}},this.detach=function(){this.document.removeEventListener("change",this.$onChange)},this.$clipPositionToDocument=function(a,b){var c={};a>=this.document.getLength()?(c.row=Math.max(0,this.document.getLength()-1),c.column=this.document.getLine(c.row).length):a<0?(c.row=0,c.column=0):(c.row=a,c.column=Math.min(this.document.getLine(c.row).length,Math.max(0,b))),b<0&&(c.column=0);return c}}).call(f.prototype)}),define("pilot/lang",["require","exports","module"],function(a,b,c){b.stringReverse=function(a){return a.split("").reverse().join("")},b.stringRepeat=function(a,b){return Array(b+1).join(a)};var d=/^\s\s*/,e=/\s\s*$/;b.stringTrimLeft=function(a){return a.replace(d,"")},b.stringTrimRight=function(a){return a.replace(e,"")},b.copyObject=function(a){var b={};for(var c in a)b[c]=a[c];return b},b.copyArray=function(a){var b=[];for(i=0,l=a.length;i<l;i++)a[i]&&typeof a[i]=="object"?b[i]=this.copyObject(a[i]):b[i]=a[i];return b},b.deepCopy=function(a){if(typeof a!="object")return a;var b=a.constructor();for(var c in a)typeof a[c]=="object"?b[c]=this.deepCopy(a[c]):b[c]=a[c];return b},b.arrayToMap=function(a){var b={};for(var c=0;c<a.length;c++)b[a[c]]=1;return b},b.arrayRemove=function(a,b){for(var c=0;c<=a.length;c++)b===a[c]&&a.splice(c,1)},b.escapeRegExp=function(a){return a.replace(/([.*+?^${}()|[\]\/\\])/g,"\\$1")},b.deferredCall=function(a){var b=null,c=function(){b=null,a()},d=function(a){b||(b=setTimeout(c,a||0));return d};d.schedule=d,d.call=function(){this.cancel(),a();return d},d.cancel=function(){clearTimeout(b),b=null;return d};return d}}),define("ace/mode/coffee/coffee-script",["require","exports","module","ace/mode/coffee/lexer","ace/mode/coffee/parser","ace/mode/coffee/nodes"],function(a,b,c){var d=a("ace/mode/coffee/lexer").Lexer,e=a("ace/mode/coffee/parser"),f=new d;e.lexer={lex:function(){var a,b;b=this.tokens[this.pos++]||[""],a=b[0],this.yytext=b[1],this.yylineno=b[2];return a},setInput:function(a){this.tokens=a;return this.pos=0},upcomingInput:function(){return""}},e.yy=a("ace/mode/coffee/nodes"),b.parse=function(a){return e.parse(f.tokenize(a))}}),define("ace/mode/coffee/lexer",["require","exports","module","ace/mode/coffee/rewriter","ace/mode/coffee/helpers"],function(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,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=Array.prototype.indexOf||function(a){for(var b=0,c=this.length;b<c;b++)if(this[b]===a)return b;return-1};M=a("ace/mode/coffee/rewriter").Rewriter,X=a("ace/mode/coffee/helpers"),T=X.count,W=X.starts,S=X.compact,V=X.last,b.Lexer=A=function(){function a(){}a.prototype.tokenize=function(a,b){var c;b==null&&(b={}),R.test(a)&&(a="\n"+a),a=a.replace(/\r/g,"").replace(P,""),this.code=a,this.line=b.line||0,this.indent=0,this.indebt=0,this.outdebt=0,this.indents=[],this.tokens=[],c=0;while(this.chunk=a.slice(c))c+=this.identifierToken()||this.commentToken()||this.whitespaceToken()||this.lineToken()||this.heredocToken()||this.stringToken()||this.numberToken()||this.regexToken()||this.jsToken()||this.literalToken();this.closeIndentation();return b.rewrite===!1?this.tokens:(new M).rewrite(this.tokens)},a.prototype.identifierToken=function(){var a,b,c,d,e,f,g,k,l;if(!(e=s.exec(this.chunk)))return 0;d=e[0],c=e[1],a=e[2];if(c==="own"&&this.tag()==="FOR"){this.token("OWN",c);return c.length}b=a||(f=V(this.tokens))&&((k=f[0])==="."||k==="?."||k==="::"||!f.spaced&&f[0]==="@"),g="IDENTIFIER";if(Y.call(w,c)>=0||!b&&Y.call(j,c)>=0)g=c.toUpperCase(),g==="WHEN"&&(l=this.tag(),Y.call(x,l)>=0)?g="LEADING_WHEN":g==="FOR"?this.seenFor=!0:g==="UNLESS"?g="IF":Y.call(Q,g)>=0?g="UNARY":Y.call(K,g)>=0&&(g!=="INSTANCEOF"&&this.seenFor?(g="FOR"+g,this.seenFor=!1):(g="RELATION",this.value()==="!"&&(this.tokens.pop(),c="!"+c)));Y.call(v,c)>=0&&(b?(g="IDENTIFIER",c=new String(c),c.reserved=!0):Y.call(L,c)>=0&&this.identifierError(c)),b||(Y.call(h,c)>=0&&(c=i[c]),g=function(){switch(c){case"!":return"UNARY";case"==":case"!=":return"COMPARE";case"&&":case"||":return"LOGIC";case"true":case"false":case"null":case"undefined":return"BOOL";case"break":case"continue":case"debugger":return"STATEMENT";default:return g}}()),this.token(g,c),a&&this.token(":",":");return d.length},a.prototype.numberToken=function(){var a,b;if(!(a=H.exec(this.chunk)))return 0;b=a[0],this.token("NUMBER",b);return b.length},a.prototype.stringToken=function(){var a,b;switch(this.chunk.charAt(0)){case"'":if(!(a=O.exec(this.chunk)))return 0;this.token("STRING",(b=a[0]).replace(C,"\\\n"));break;case'"':if(!(b=this.balancedString(this.chunk,'"')))return 0;0<b.indexOf("#{",1)?this.interpolateString(b.slice(1,-1)):this.token("STRING",this.escapeLines(b));break;default:return 0}this.line+=T(b,"\n");return b.length},a.prototype.heredocToken=function(){var a,b,c,d;if(!(c=n.exec(this.chunk)))return 0;b=c[0],d=b.charAt(0),a=this.sanitizeHeredoc(c[2],{quote:d,indent:null}),d==='"'&&0<=a.indexOf("#{")?this.interpolateString(a,{heredoc:!0}):this.token("STRING",this.makeString(a,d,!0)),this.line+=T(b,"\n");return b.length},a.prototype.commentToken=function(){var a,b,c;if(!(c=this.chunk.match(k)))return 0;a=c[0],b=c[1],b&&(this.token("HERECOMMENT",this.sanitizeHeredoc(b,{herecomment:!0,indent:Array(this.indent+1).join(" ")})),this.token("TERMINATOR","\n")),this.line+=T(a,"\n");return a.length},a.prototype.jsToken=function(){var a,b;if(this.chunk.charAt(0)!=="`"||!(a=u.exec(this.chunk)))return 0;this.token("JS",(b=a[0]).slice(1,-1));return b.length},a.prototype.regexToken=function(){var a,b,c,d;if(this.chunk.charAt(0)!=="/")return 0;if(a=q.exec(this.chunk)){this.line+=T(a[0],"\n");return this.heregexToken(a)}b=V(this.tokens);if(b&&(d=b[0],Y.call(b.spaced?E:F,d)>=0))return 0;if(!(a=J.exec(this.chunk)))return 0;c=a[0],this.token("REGEX",c==="//"?"/(?:)/":c);return c.length},a.prototype.heregexToken=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;d=a[0],b=a[1],c=a[2];if(0>b.indexOf("#{")){e=b.replace(r,"").replace(/\//g,"\\/"),this.token("REGEX","/"+(e||"(?:)")+"/"+c);return d.length}this.token("IDENTIFIER","RegExp"),this.tokens.push(["CALL_START","("]),g=[],k=this.interpolateString(b,{regex:!0});for(i=0,j=k.length;i<j;i++){l=k[i],f=l[0],h=l[1];if(f==="TOKENS")g.push.apply(g,h);else{if(!(h=h.replace(r,"")))continue;h=h.replace(/\\/g,"\\\\"),g.push(["STRING",this.makeString(h,'"',!0)])}g.push(["+","+"])}g.pop(),((m=g[0])!=null?m[0]:void 0)!=="STRING"&&this.tokens.push(["STRING",'""'],["+","+"]),(n=this.tokens).push.apply(n,g),c&&this.tokens.push([",",","],["STRING",'"'+c+'"']),this.token(")",")");return d.length},a.prototype.lineToken=function(){var a,b,c,d,e,f;if(!(c=D.exec(this.chunk)))return 0;b=c[0],this.line+=T(b,"\n"),e=V(this.tokens,1),f=b.length-1-b.lastIndexOf("\n"),d=this.unfinished();if(f-this.indebt===this.indent){d?this.suppressNewlines():this.newlineToken();return b.length}if(f>this.indent){if(d){this.indebt=f-this.indent,this.suppressNewlines();return b.length}a=f-this.indent+this.outdebt,this.token("INDENT",a),this.indents.push(a),this.outdebt=this.indebt=0}else this.indebt=0,this.outdentToken(this.indent-f,d);this.indent=f;return b.length},a.prototype.outdentToken=function(a,b,c){var d,e;while(a>0)e=this.indents.length-1,this.indents[e]===void 0?a=0:this.indents[e]===this.outdebt?(a-=this.outdebt,this.outdebt=0):this.indents[e]<this.outdebt?(this.outdebt-=this.indents[e],a-=this.indents[e]):(d=this.indents.pop()-this.outdebt,a-=d,this.outdebt=0,this.token("OUTDENT",d));d&&(this.outdebt-=a),this.tag()!=="TERMINATOR"&&!b&&this.token("TERMINATOR","\n");return this},a.prototype.whitespaceToken=function(){var a,b,c;if(!(a=R.exec(this.chunk))&&!(b=this.chunk.charAt(0)==="\n"))return 0;c=V(this.tokens),c&&(c[a?"spaced":"newLine"]=!0);return a?a[0].length:0},a.prototype.newlineToken=function(){this.tag()!=="TERMINATOR"&&this.token("TERMINATOR","\n");return this},a.prototype.suppressNewlines=function(){this.value()==="\\"&&this.tokens.pop();return this},a.prototype.literalToken=function(){var a,b,c,d,e,h,i,j;(a=I.exec(this.chunk))?(d=a[0],g.test(d)&&this.tagParameters()):d=this.chunk.charAt(0),c=d,b=V(this.tokens);if(d==="="&&b){!b[1].reserved&&(e=b[1],Y.call(v,e)>=0)&&this.assignmentError();if((h=b[1])==="||"||h==="&&"){b[0]="COMPOUND_ASSIGN",b[1]+="=";return d.length}}if(d===";")c="TERMINATOR";else if(Y.call(B,d)>=0)c="MATH";else if(Y.call(l,d)>=0)c="COMPARE";else if(Y.call(m,d)>=0)c="COMPOUND_ASSIGN";else if(Y.call(Q,d)>=0)c="UNARY";else if(Y.call(N,d)>=0)c="SHIFT";else if(Y.call(z,d)>=0||d==="?"&&(b!=null?b.spaced:void 0))c="LOGIC";else if(b&&!b.spaced)if(d==="("&&(i=b[0],Y.call(f,i)>=0))b[0]==="?"&&(b[0]="FUNC_EXIST"),c="CALL_START";else if(d==="["&&(j=b[0],Y.call(t,j)>=0)){c="INDEX_START";switch(b[0]){case"?":b[0]="INDEX_SOAK";break;case"::":b[0]="INDEX_PROTO"}}this.token(c,d);return d.length},a.prototype.sanitizeHeredoc=function(a,b){var c,d,e,f,g;e=b.indent,d=b.herecomment;if(d){if(o.test(a))throw new Error('block comment cannot contain "*/", starting on line '+(this.line+1));if(a.indexOf("\n")<=0)return a}else while(f=p.exec(a)){c=f[1];if(e===null||0<(g=c.length)&&g<e.length)e=c}e&&(a=a.replace(RegExp("\\n"+e,"g"),"\n")),d||(a=a.replace(/^\n/,""));return a},a.prototype.tagParameters=function(){var a,b,c,d;if(this.tag()!==")")return this;b=[],d=this.tokens,a=d.length,d[--a][0]="PARAM_END";while(c=d[--a])switch(c[0]){case")":b.push(c);break;case"(":case"CALL_START":if(b.length)b.pop();else if(c[0]==="("){c[0]="PARAM_START";return this}}return this},a.prototype.closeIndentation=function(){return this.outdentToken(this.indent)},a.prototype.identifierError=function(a){throw SyntaxError('Reserved word "'+a+'" on line '+(this.line+1))},a.prototype.assignmentError=function(){throw SyntaxError('Reserved word "'+this.value()+'" on line '+(this.line+1)+" can't be assigned")},a.prototype.balancedString=function(a,b){var c,d,e,f,g;f=[b];for(c=1,g=a.length;1<=g?c<g:c>g;1<=g?c++:c--){switch(d=a.charAt(c)){case"\\":c++;continue;case b:f.pop();if(!f.length)return a.slice(0,c+1);b=f[f.length-1];continue}b!=="}"||d!=='"'&&d!=="'"?b==="}"&&d==="{"?f.push(b="}"):b==='"'&&e==="#"&&d==="{"&&f.push(b="}"):f.push(b=d),e=d}throw new Error("missing "+f.pop()+", starting on line "+(this.line+1))},a.prototype.interpolateString=function(b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;c==null&&(c={}),e=c.heredoc,m=c.regex,o=[],l=0,f=-1;while(j=b.charAt(f+=1)){if(j==="\\"){f+=1;continue}if(j!=="#"||b.charAt(f+1)!=="{"||!(d=this.balancedString(b.slice(f+1),"}")))continue;l<f&&o.push(["NEOSTRING",b.slice(l,f)]),g=d.slice(1,-1);if(g.length){k=(new a).tokenize(g,{line:this.line,rewrite:!1}),k.pop(),((r=k[0])!=null?r[0]:void 0)==="TERMINATOR"&&k.shift();if(i=k.length)i>1&&(k.unshift(["(","("]),k.push([")",")"])),o.push(["TOKENS",k])}f+=d.length,l=f+1}f>l&&l<b.length&&o.push(["NEOSTRING",b.slice(l)]);if(m)return o;if(!o.length)return this.token("STRING",'""');o[0][0]!=="NEOSTRING"&&o.unshift(["",""]),(h=o.length>1)&&this.token("(","(");for(f=0,q=o.length;f<q;f++)s=o[f],n=s[0],p=s[1],f&&this.token("+","+"),n==="TOKENS"?(t=this.tokens).push.apply(t,p):this.token("STRING",this.makeString(p,'"',e));h&&this.token(")",")");return o},a.prototype.token=function(a,b){return this.tokens.push([a,b,this.line])},a.prototype.tag=function(a,b){var c;return(c=V(this.tokens,a))&&(b?c[0]=b:c[0])},a.prototype.value=function(a,b){var c;return(c=V(this.tokens,a))&&(b?c[1]=b:c[1])},a.prototype.unfinished=function(){var a,b;return y.test(this.chunk)||(a=V(this.tokens,1))&&a[0]!=="."&&(b=this.value())&&!b.reserved&&G.test(b)&&!g.test(b)&&!d.test(this.chunk)},a.prototype.escapeLines=function(a,b){return a.replace(C,b?"\\n":"")},a.prototype.makeString=function(a,b,c){if(!a)return b+b;a=a.replace(/\\([\s\S])/g,function(a,c){return c==="\n"||c===b?c:a}),a=a.replace(RegExp(""+b,"g"),"\\$&");return b+this.escapeLines(a,c)+b};return a}(),w=["true","false","null","this","new","delete","typeof","in","instanceof","return","throw","break","continue","debugger","if","else","switch","for","while","do","try","catch","finally","class","extends","super"],j=["undefined","then","unless","until","loop","of","by","when"],i={and:"&&",or:"||",is:"==",isnt:"!=",not:"!",yes:"true",no:"false",on:"true",off:"false"},h=function(){var a;a=[];for(U in i)a.push(U);return a}(),j=j.concat(h),L=["case","default","function","var","void","with","const","let","enum","export","import","native","__hasProp","__extends","__slice","__bind","__indexOf"],v=w.concat(L),b.RESERVED=L.concat(w).concat(j),s=/^([$A-Za-z_\x7f-\uffff][$\w\x7f-\uffff]*)([^\n\S]*:(?!:))?/,H=/^0x[\da-f]+|^(?:\d+(\.\d+)?|\.\d+)(?:e[+-]?\d+)?/i,n=/^("""|''')([\s\S]*?)(?:\n[^\n\S]*)?\1/,I=/^(?:[-=]>|[-+*\/%<>&|^!?=]=|>>>=?|([-+:])\1|([&|<>])\2=?|\?\.|\.{2,3})/,R=/^[^\n\S]+/,k=/^###([^#][\s\S]*?)(?:###[^\n\S]*|(?:###)?$)|^(?:\s*#(?!##[^#]).*)+/,g=/^[-=]>/,D=/^(?:\n[^\n\S]*)+/,O=/^'[^\\']*(?:\\.[^\\']*)*'/,u=/^`[^\\`]*(?:\\.[^\\`]*)*`/,J=/^\/(?![\s=])[^[\/\n\\]*(?:(?:\\[\s\S]|\[[^\]\n\\]*(?:\\[\s\S][^\]\n\\]*)*])[^[\/\n\\]*)*\/[imgy]{0,4}(?!\w)/,q=/^\/{3}([\s\S]+?)\/{3}([imgy]{0,4})(?!\w)/,r=/\s+(?:#.*)?/g,C=/\n/g,p=/\n+([^\n\S]*)/g,o=/\*\//,d=/^\s*@?([$A-Za-z_][$\w\x7f-\uffff]*|['"].*['"])[^\n\S]*?[:=][^:=>]/,y=/^\s*(?:,|\??\.(?![.\d])|::)/,P=/\s+$/,G=/^(?:[-+*&|\/%=<>!.\\][<>=&|]*|and|or|is(?:nt)?|n(?:ot|ew)|delete|typeof|instanceof)$/,m=["-=","+=","/=","*=","%=","||=","&&=","?=","<<=",">>=",">>>=","&=","^=","|="],Q=["!","~","NEW","TYPEOF","DELETE","DO"],z=["&&","||","&","|","^"],N=["<<",">>",">>>"],l=["==","!=","<",">","<=",">="],B=["*","/","%"],K=["IN","OF","INSTANCEOF"],e=["TRUE","FALSE","NULL","UNDEFINED"],E=["NUMBER","REGEX","BOOL","++","--","]"],F=E.concat(")","}","THIS","IDENTIFIER","STRING"),f=["IDENTIFIER","STRING","REGEX",")","]","}","?","::","@","THIS","SUPER"],t=f.concat("NUMBER","BOOL"),x=["INDENT","OUTDENT","TERMINATOR"]}),define("ace/mode/coffee/rewriter",["require","exports","module"],function(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v=Array.prototype.indexOf||function(a){for(var b=0,c=this.length;b<c;b++)if(this[b]===a)return b;return-1},w=Array.prototype.slice;b.Rewriter=function(){function a(){}a.prototype.rewrite=function(a){this.tokens=a,this.removeLeadingNewlines(),this.removeMidExpressionNewlines(),this.closeOpenCalls(),this.closeOpenIndexes(),this.addImplicitIndentation(),this.tagPostfixConditionals(),this.addImplicitBraces(),this.addImplicitParentheses(),this.ensureBalance(d),this.rewriteClosingParens();return this.tokens},a.prototype.scanTokens=function(a){var b,c,d;d=this.tokens,b=0;while(c=d[b])b+=a.call(this,c,b,d);return!0},a.prototype.detectEnd=function(a,b,c){var d,e,h,i,j;h=this.tokens,d=0;while(e=h[a]){if(d===0&&b.call(this,e,a))return c.call(this,e,a);if(!e||d<0)return c.call(this,e,a-1);if(i=e[0],v.call(g,i)>=0)d+=1;else if(j=e[0],v.call(f,j)>=0)d-=1;a+=1}return a-1},a.prototype.removeLeadingNewlines=function(){var a,b,c,d;d=this.tokens;for(a=0,c=d.length;a<c;a++){b=d[a][0];if(b!=="TERMINATOR")break}if(a)return this.tokens.splice(0,a)},a.prototype.removeMidExpressionNewlines=function(){return this.scanTokens(function(a,b,c){var d;if(a[0]==="TERMINATOR"&&(d=this.tag(b+1),v.call(e,d)>=0)){c.splice(b,1);return 0}return 1})},a.prototype.closeOpenCalls=function(){var a,b;b=function(a,b){var c;return(c=a[0])===")"||c==="CALL_END"||a[0]==="OUTDENT"&&this.tag(b-1)===")"},a=function(a,b){return this.tokens[a[0]==="OUTDENT"?b-1:b][0]="CALL_END"};return this.scanTokens(function(c,d){c[0]==="CALL_START"&&this.detectEnd(d+1,b,a);return 1})},a.prototype.closeOpenIndexes=function(){var a,b;b=function(a,b){var c;return(c=a[0])==="]"||c==="INDEX_END"},a=function(a,b){return a[0]="INDEX_END"};return this.scanTokens(function(c,d){c[0]==="INDEX_START"&&this.detectEnd(d+1,b,a);return 1})},a.prototype.addImplicitBraces=function(){var a,b,c,d,e;c=[],d=null,e=0,b=function(a,b){var c,d,e,f,g,h;g=this.tokens.slice(b+1,b+3+1||9e9),c=g[0],f=g[1],e=g[2];if("HERECOMMENT"===(c!=null?c[0]:void 0))return!1;d=a[0];return(d==="TERMINATOR"||d==="OUTDENT")&&(f!=null?f[0]:void 0)!==":"&&((c!=null?c[0]:void 0)!=="@"||(e!=null?e[0]:void 0)!==":")||d===","&&c&&(h=c[0])!=="IDENTIFIER"&&h!=="NUMBER"&&h!=="STRING"&&h!=="@"&&h!=="TERMINATOR"&&h!=="OUTDENT"},a=function(a,b){var c;c=["}","}",a[2]],c.generated=!0;return this.tokens.splice(b,0,c)};return this.scanTokens(function(e,h,i){var j,k,l,m,n,o,p;if(o=l=e[0],v.call(g,o)>=0){c.push([l==="INDENT"&&this.tag(h-1)==="{"?"{":l,h]);return 1}if(v.call(f,l)>=0){d=c.pop();return 1}if(l!==":"||(j=this.tag(h-2))!==":"&&((p=c[c.length-1])!=null?p[0]:void 0)==="{")return 1;c.push(["{"]),k=j==="@"?h-2:h-1;while(this.tag(k-2)==="HERECOMMENT")k-=2;n=new String("{"),n.generated=!0,m=["{",n,e[2]],m.generated=!0,i.splice(k,0,m),this.detectEnd(h+2,b,a);return 2})},a.prototype.addImplicitParentheses=function(){var a,b;b=!1,a=function(a,b){var c;c=a[0]==="OUTDENT"?b+1:b;return this.tokens.splice(c,0,["CALL_END",")",a[2]])};return this.scanTokens(function(c,d,e){var f,g,m,o,p,q,r,s,t,u;r=c[0];if(r==="CLASS"||r==="IF")b=!0;s=e.slice(d-1,d+1+1||9e9),o=s[0],g=s[1],m=s[2],f=!b&&r==="INDENT"&&m&&m.generated&&m[0]==="{"&&o&&(t=o[0],v.call(k,t)>=0),q=!1,p=!1,v.call(n,r)>=0&&(b=!1),o&&!o.spaced&&r==="?"&&(c.call=!0);if(c.fromThen)return 1;if(!(f||(o!=null?o.spaced:void 0)&&(o.call||(u=o[0],v.call(k,u)>=0))&&(v.call(i,r)>=0||!c.spaced&&!c.newLine&&v.call(l,r)>=0)))return 1;e.splice(d,0,["CALL_START","(",c[2]]),this.detectEnd(d+1,function(a,b){var c,d;r=a[0];if(!q&&a.fromThen)return!0;if(r==="IF"||r==="ELSE"||r==="CATCH"||r==="->"||r==="=>")q=!0;if(r==="IF"||r==="ELSE"||r==="SWITCH"||r==="TRY")p=!0;return r!=="."&&r!=="?."&&r!=="::"||this.tag(b-1)!=="OUTDENT"?!a.generated&&this.tag(b-1)!==","&&(v.call(j,r)>=0||r==="INDENT"&&!p)&&(r!=="INDENT"||this.tag(b-2)!=="CLASS"&&(d=this.tag(b-1),v.call(h,d)<0)&&(!(c=this.tokens[b+1])||!c.generated||c[0]!=="{")):!0},a),o[0]==="?"&&(o[0]="FUNC_EXIST");return 2})},a.prototype.addImplicitIndentation=function(){return this.scanTokens(function(a,b,c){var d,e,f,g,h,i,j,k;i=a[0];if(i==="TERMINATOR"&&this.tag(b+1)==="THEN"){c.splice(b,1);return 0}if(i==="ELSE"&&this.tag(b-1)!=="OUTDENT"){c.splice.apply(c,[b,0].concat(w.call(this.indentation(a))));return 2}if(i!=="CATCH"||(j=this.tag(b+2))!=="OUTDENT"&&j!=="TERMINATOR"&&j!=="FINALLY"){if(v.call(p,i)>=0&&this.tag(b+1)!=="INDENT"&&(i!=="ELSE"||this.tag(b+1)!=="IF")){h=i,k=this.indentation(a),f=k[0],g=k[1],h==="THEN"&&(f.fromThen=!0),f.generated=g.generated=!0,c.splice(b+1,0,f),e=function(a,b){var c;return a[1]!==";"&&(c=a[0],v.call(o,c)>=0)&&(a[0]!=="ELSE"||h==="IF"||h==="THEN")},d=function(a,b){return this.tokens.splice(this.tag(b-1)===","?b-1:b,0,g)},this.detectEnd(b+2,e,d),i==="THEN"&&c.splice(b,1);return 1}return 1}c.splice.apply(c,[b+2,0].concat(w.call(this.indentation(a))));return 4})},a.prototype.tagPostfixConditionals=function(){var a;a=function(a,b){var c;return(c=a[0])==="TERMINATOR"||c==="INDENT"};return this.scanTokens(function(b,c){var d;if(b[0]!=="IF")return 1;d=b,this.detectEnd(c+1,a,function(a,b){if(a[0]!=="INDENT")return d[0]="POST_"+d[0]});return 1})},a.prototype.ensureBalance=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;d={},f={},m=this.tokens;for(i=0,k=m.length;i<k;i++){h=m[i],g=h[0];for(j=0,l=a.length;j<l;j++){n=a[j],e=n[0],b=n[1],d[e]|=0;if(g===e)d[e]++===0&&(f[e]=h[2]);else if(g===b&&--d[e]<0)throw Error("too many "+h[1]+" on line "+(h[2]+1))}}for(e in d){c=d[e];if(c>0)throw Error("unclosed "+e+" on line "+(f[e]+1))}return this},a.prototype.rewriteClosingParens=function(){var a,b,c;c=[],a={};for(b in m)a[b]=0;return this.scanTokens(function(b,d,e){var h,i,j,k,l,n,o;if(o=l=b[0],v.call(g,o)>=0){c.push(b);return 1}if(v.call(f,l)<0)return 1;if(a[h=m[l]]>0){a[h]-=1,e.splice(d,1);return 0}i=c.pop(),j=i[0],k=m[j];if(l===k)return 1;a[j]+=1,n=[k,j==="INDENT"?i[1]:k],this.tag(d+2)===j?(e.splice(d+3,0,n),c.push(i)):e.splice(d,0,n);return 1})},a.prototype.indentation=function(a){return[["INDENT",2,a[2]],["OUTDENT",2,a[2]]]},a.prototype.tag=function(a){var b;return(b=this.tokens[a])!=null?b[0]:void 0};return a}(),d=[["(",")"],["[","]"],["{","}"],["INDENT","OUTDENT"],["CALL_START","CALL_END"],["PARAM_START","PARAM_END"],["INDEX_START","INDEX_END"]],m={},g=[],f=[];for(s=0,t=d.length;s<t;s++)u=d[s],q=u[0],r=u[1],g.push(m[r]=q),f.push(m[q]=r);e=["CATCH","WHEN","ELSE","FINALLY"].concat(f),k=["IDENTIFIER","SUPER",")","CALL_END","]","INDEX_END","@","THIS"],i=["IDENTIFIER","NUMBER","STRING","JS","REGEX","NEW","PARAM_START","CLASS","IF","TRY","SWITCH","THIS","BOOL","UNARY","SUPER","@","->","=>","[","(","{","--","++"],l=["+","-"],h=["->","=>","{","[",","],j=["POST_IF","FOR","WHILE","UNTIL","WHEN","BY","LOOP","TERMINATOR"],p=["ELSE","->","=>","TRY","FINALLY","THEN"],o=["TERMINATOR","CATCH","FINALLY","ELSE","OUTDENT","LEADING_WHEN"],n=["TERMINATOR","INDENT","OUTDENT"]}),define("ace/mode/coffee/helpers",["require","exports","module"],function(a,b,c){var d,e;b.starts=function(a,b,c){return b===a.substr(c,b.length)},b.ends=function(a,b,c){var d;d=b.length;return b===a.substr(a.length-d-(c||0),d)},b.compact=function(a){var b,c,d,e;e=[];for(c=0,d=a.length;c<d;c++)b=a[c],b&&e.push(b);return e},b.count=function(a,b){var c,d;c=d=0;if(!b.length)return 1/0;while(d=1+a.indexOf(b,d))c++;return c},b.merge=function(a,b){return d(d({},a),b)},d=b.extend=function(a,b){var c,d;for(c in b)d=b[c],a[c]=d;return a},b.flatten=e=function(a){var b,c,d,f;c=[];for(d=0,f=a.length;d<f;d++)b=a[d],b instanceof Array?c=c.concat(e(b)):c.push(b);return c},b.del=function(a,b){var c;c=a[b],delete a[b];return c},b.last=function(a,b){return a[a.length-(b||0)-1]}}),define("ace/mode/coffee/parser",["require","exports","module"],function(a,b,c){var d={trace:function(){},yy:{},symbols_:{error:2,Root:3,Body:4,Block:5,TERMINATOR:6,Line:7,Expression:8,Statement:9,Return:10,Throw:11,Comment:12,STATEMENT:13,Value:14,Invocation:15,Code:16,Operation:17,Assign:18,If:19,Try:20,While:21,For:22,Switch:23,Class:24,INDENT:25,OUTDENT:26,Identifier:27,IDENTIFIER:28,AlphaNumeric:29,NUMBER:30,STRING:31,Literal:32,JS:33,REGEX:34,BOOL:35,Assignable:36,"=":37,AssignObj:38,ObjAssignable:39,":":40,ThisProperty:41,RETURN:42,HERECOMMENT:43,PARAM_START:44,ParamList:45,PARAM_END:46,FuncGlyph:47,"->":48,"=>":49,OptComma:50,",":51,Param:52,ParamVar:53,"...":54,Array:55,Object:56,Splat:57,SimpleAssignable:58,Accessor:59,Parenthetical:60,Range:61,This:62,".":63,"?.":64,"::":65,Index:66,INDEX_START:67,IndexValue:68,INDEX_END:69,INDEX_SOAK:70,INDEX_PROTO:71,Slice:72,"{":73,AssignList:74,"}":75,CLASS:76,EXTENDS:77,OptFuncExist:78,Arguments:79,SUPER:80,FUNC_EXIST:81,CALL_START:82,CALL_END:83,ArgList:84,THIS:85,"@":86,"[":87,"]":88,RangeDots:89,"..":90,Arg:91,SimpleArgs:92,TRY:93,Catch:94,FINALLY:95,CATCH:96,THROW:97,"(":98,")":99,WhileSource:100,WHILE:101,WHEN:102,UNTIL:103,Loop:104,LOOP:105,ForBody:106,FOR:107,ForStart:108,ForSource:109,ForVariables:110,OWN:111,ForValue:112,FORIN:113,FOROF:114,BY:115,SWITCH:116,Whens:117,ELSE:118,When:119,LEADING_WHEN:120,IfBlock:121,IF:122,POST_IF:123,UNARY:124,"-":125,"+":126,"--":127,"++":128,"?":129,MATH:130,SHIFT:131,COMPARE:132,LOGIC:133,RELATION:134,COMPOUND_ASSIGN:135,$accept:0,$end:1},terminals_:{2:"error",6:"TERMINATOR",13:"STATEMENT",25:"INDENT",26:"OUTDENT",28:"IDENTIFIER",30:"NUMBER",31:"STRING",33:"JS",34:"REGEX",35:"BOOL",37:"=",40:":",42:"RETURN",43:"HERECOMMENT",44:"PARAM_START",46:"PARAM_END",48:"->",49:"=>",51:",",54:"...",63:".",64:"?.",65:"::",67:"INDEX_START",69:"INDEX_END",70:"INDEX_SOAK",71:"INDEX_PROTO",73:"{",75:"}",76:"CLASS",77:"EXTENDS",80:"SUPER",81:"FUNC_EXIST",82:"CALL_START",83:"CALL_END",85:"THIS",86:"@",87:"[",88:"]",90:"..",93:"TRY",95:"FINALLY",96:"CATCH",97:"THROW",98:"(",99:")",101:"WHILE",102:"WHEN",103:"UNTIL",105:"LOOP",107:"FOR",111:"OWN",113:"FORIN",114:"FOROF",115:"BY",116:"SWITCH",118:"ELSE",120:"LEADING_WHEN",122:"IF",123:"POST_IF",124:"UNARY",125:"-",126:"+",127:"--",128:"++",129:"?",130:"MATH",131:"SHIFT",132:"COMPARE",133:"LOGIC",134:"RELATION",135:"COMPOUND_ASSIGN"},productions_:[0,[3,0],[3,1],[3,2],[4,1],[4,3],[4,2],[7,1],[7,1],[9,1],[9,1],[9,1],[9,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[5,2],[5,3],[27,1],[29,1],[29,1],[32,1],[32,1],[32,1],[32,1],[18,3],[18,5],[38,1],[38,3],[38,5],[38,1],[39,1],[39,1],[39,1],[10,2],[10,1],[12,1],[16,5],[16,2],[47,1],[47,1],[50,0],[50,1],[45,0],[45,1],[45,3],[52,1],[52,2],[52,3],[53,1],[53,1],[53,1],[53,1],[57,2],[58,1],[58,2],[58,2],[58,1],[36,1],[36,1],[36,1],[14,1],[14,1],[14,1],[14,1],[14,1],[59,2],[59,2],[59,2],[59,1],[59,1],[66,3],[66,2],[66,2],[68,1],[68,1],[56,4],[74,0],[74,1],[74,3],[74,4],[74,6],[24,1],[24,2],[24,3],[24,4],[24,2],[24,3],[24,4],[24,5],[15,3],[15,3],[15,1],[15,2],[78,0],[78,1],[79,2],[79,4],[62,1],[62,1],[41,2],[55,2],[55,4],[89,1],[89,1],[61,5],[72,3],[72,2],[72,2],[84,1],[84,3],[84,4],[84,4],[84,6],[91,1],[91,1],[92,1],[92,3],[20,2],[20,3],[20,4],[20,5],[94,3],[11,2],[60,3],[60,5],[100,2],[100,4],[100,2],[100,4],[21,2],[21,2],[21,2],[21,1],[104,2],[104,2],[22,2],[22,2],[22,2],[106,2],[106,2],[108,2],[108,3],[112,1],[112,1],[112,1],[110,1],[110,3],[109,2],[109,2],[109,4],[109,4],[109,4],[109,6],[109,6],[23,5],[23,7],[23,4],[23,6],[117,1],[117,2],[119,3],[119,4],[121,3],[121,5],[19,1],[19,3],[19,3],[19,3],[17,2],[17,2],[17,2],[17,2],[17,2],[17,2],[17,2],[17,2],[17,3],[17,3],[17,3],[17,3],[17,3],[17,3],[17,3],[17,3],[17,5],[17,3]],performAction:function f(a,b,c,d,e,f,g){var h=f.length-1;switch(e){case 1:return this.$=new d.Block;case 2:return this.$=f[h];case 3:return this.$=f[h-1];case 4:this.$=d.Block.wrap([f[h]]);break;case 5:this.$=f[h-2].push(f[h]);break;case 6:this.$=f[h-1];break;case 7:this.$=f[h];break;case 8:this.$=f[h];break;case 9:this.$=f[h];break;case 10:this.$=f[h];break;case 11:this.$=f[h];break;case 12:this.$=new d.Literal(f[h]);break;case 13:this.$=f[h];break;case 14:this.$=f[h];break;case 15:this.$=f[h];break;case 16:this.$=f[h];break;case 17:this.$=f[h];break;case 18:this.$=f[h];break;case 19:this.$=f[h];break;case 20:this.$=f[h];break;case 21:this.$=f[h];break;case 22:this.$=f[h];break;case 23:this.$=f[h];break;case 24:this.$=new d.Block;break;case 25:this.$=f[h-1];break;case 26:this.$=new d.Literal(f[h]);break;case 27:this.$=new d.Literal(f[h]);break;case 28:this.$=new d.Literal(f[h]);break;case 29:this.$=f[h];break;case 30:this.$=new d.Literal(f[h]);break;case 31:this.$=new d.Literal(f[h]);break;case 32:this.$=function(){var a;a=new d.Literal(f[h]),f[h]==="undefined"&&(a.isUndefined=!0);return a}();break;case 33:this.$=new d.Assign(f[h-2],f[h]);break;case 34:this.$=new d.Assign(f[h-4],f[h-1]);break;case 35:this.$=new d.Value(f[h]);break;case 36:this.$=new d.Assign(new d.Value(f[h-2]),f[h],"object");break;case 37:this.$=new d.Assign(new d.Value(f[h-4]),f[h-1],"object");break;case 38:this.$=f[h];break;case 39:this.$=f[h];break;case 40:this.$=f[h];break;case 41:this.$=f[h];break;case 42:this.$=new d.Return(f[h]);break;case 43:this.$=new d.Return;break;case 44:this.$=new d.Comment(f[h]);break;case 45:this.$=new d.Code(f[h-3],f[h],f[h-1]);break;case 46:this.$=new d.Code([],f[h],f[h-1]);break;case 47:this.$="func";break;case 48:this.$="boundfunc";break;case 49:this.$=f[h];break;case 50:this.$=f[h];break;case 51:this.$=[];break;case 52:this.$=[f[h]];break;case 53:this.$=f[h-2].concat(f[h]);break;case 54:this.$=new d.Param(f[h]);break;case 55:this.$=new d.Param(f[h-1],null,!0);break;case 56:this.$=new d.Param(f[h-2],f[h]);break;case 57:this.$=f[h];break;case 58:this.$=f[h];break;case 59:this.$=f[h];break;case 60:this.$=f[h];break;case 61:this.$=new d.Splat(f[h-1]);break;case 62:this.$=new d.Value(f[h]);break;case 63:this.$=f[h-1].push(f[h]);break;case 64:this.$=new d.Value(f[h-1],[f[h]]);break;case 65:this.$=f[h];break;case 66:this.$=f[h];break;case 67:this.$=new d.Value(f[h]);break;case 68:this.$=new d.Value(f[h]);break;case 69:this.$=f[h];break;case 70:this.$=new d.Value(f[h]);break;case 71:this.$=new d.Value(f[h]);break;case 72:this.$=new d.Value(f[h]);break;case 73:this.$=f[h];break;case 74:this.$=new d.Access(f[h]);break;case 75:this.$=new d.Access(f[h],"soak");break;case 76:this.$=new d.Access(f[h],"proto");break;case 77:this.$=new d.Access(new d.Literal("prototype"));break;case 78:this.$=f[h];break;case 79:this.$=f[h-1];break;case 80:this.$=d.extend(f[h],{soak:!0});break;case 81:this.$=d.extend(f[h],{proto:!0});break;case 82:this.$=new d.Index(f[h]);break;case 83:this.$=new d.Slice(f[h]);break;case 84:this.$=new d.Obj(f[h-2],f[h-3].generated);break;case 85:this.$=[];break;case 86:this.$=[f[h]];break;case 87:this.$=f[h-2].concat(f[h]);break;case 88:this.$=f[h-3].concat(f[h]);break;case 89:this.$=f[h-5].concat(f[h-2]);break;case 90:this.$=new d.Class;break;case 91:this.$=new d.Class(null,null,f[h]);break;case 92:this.$=new d.Class(null,f[h]);break;case 93:this.$=new d.Class(null,f[h-1],f[h]);break;case 94:this.$=new d.Class(f[h]);break;case 95:this.$=new d.Class(f[h-1],null,f[h]);break;case 96:this.$=new d.Class(f[h-2],f[h]);break;case 97:this.$=new d.Class(f[h-3],f[h-1],f[h]);break;case 98:this.$=new d.Call(f[h-2],f[h],f[h-1]);break;case 99:this.$=new d.Call(f[h-2],f[h],f[h-1]);break;case 100:this.$=new d.Call("super",[new d.Splat(new d.Literal("arguments"))]);break;case 101:this.$=new d.Call("super",f[h]);break;case 102:this.$=!1;break;case 103:this.$=!0;break;case 104:this.$=[];break;case 105:this.$=f[h-2];break;case 106:this.$=new d.Value(new d.Literal("this"));break;case 107:this.$=new d.Value(new d.Literal("this"));break;case 108:this.$=new d.Value(new d.Literal("this"),[new d.Access(f[h])],"this");break;case 109:this.$=new d.Arr([]);break;case 110:this.$=new d.Arr(f[h-2]);break;case 111:this.$="inclusive";break;case 112:this.$="exclusive";break;case 113:this.$=new d.Range(f[h-3],f[h-1],f[h-2]);break;case 114:this.$=new d.Range(f[h-2],f[h],f[h-1]);break;case 115:this.$=new d.Range(f[h-1],null,f[h]);break;case 116:this.$=new d.Range(null,f[h],f[h-1]);break;case 117:this.$=[f[h]];break;case 118:this.$=f[h-2].concat(f[h]);break;case 119:this.$=f[h-3].concat(f[h]);break;case 120:this.$=f[h-2];break;case 121:this.$=f[h-5].concat(f[h-2]);break;case 122:this.$=f[h];break;case 123:this.$=f[h];break;case 124:this.$=f[h];break;case 125:this.$=[].concat(f[h-2],f[h]);break;case 126:this.$=new d.Try(f[h]);break;case 127:this.$=new d.Try(f[h-1],f[h][0],f[h][1]);break;case 128:this.$=new d.Try(f[h-2],null,null,f[h]);break;case 129:this.$=new d.Try(f[h-3],f[h-2][0],f[h-2][1],f[h]);break;case 130:this.$=[f[h-1],f[h]];break;case 131:this.$=new d.Throw(f[h]);break;case 132:this.$=new d.Parens(f[h-1]);break;case 133:this.$=new d.Parens(f[h-2]);break;case 134:this.$=new d.While(f[h]);break;case 135:this.$=new d.While(f[h-2],{guard:f[h]});break;case 136:this.$=new d.While(f[h],{invert:!0});break;case 137:this.$=new d.While(f[h-2],{invert:!0,guard:f[h]});break;case 138:this.$=f[h-1].addBody(f[h]);break;case 139:this.$=f[h].addBody(d.Block.wrap([f[h-1]]));break;case 140:this.$=f[h].addBody(d.Block.wrap([f[h-1]]));break;case 141:this.$=f[h];break;case 142:this.$=(new d.While(new d.Literal("true"))).addBody(f[h]);break;case 143:this.$=(new d.While(new d.Literal("true"))).addBody(d.Block.wrap([f[h]]));break;case 144:this.$=new d.For(f[h-1],f[h]);break;case 145:this.$=new d.For(f[h-1],f[h]);break;case 146:this.$=new d.For(f[h],f[h-1]);break;case 147:this.$={source:new d.Value(f[h])};break;case 148:this.$=function(){f[h].own=f[h-1].own,f[h].name=f[h-1][0],f[h].index=f[h-1][1];return f[h]}();break;case 149:this.$=f[h];break;case 150:this.$=function(){f[h].own=!0;return f[h]}();break;case 151:this.$=f[h];break;case 152:this.$=new d.Value(f[h]);break;case 153:this.$=new d.Value(f[h]);break;case 154:this.$=[f[h]];break;case 155:this.$=[f[h-2],f[h]];break;case 156:this.$={source:f[h]};break;case 157:this.$={source:f[h],object:!0};break;case 158:this.$={source:f[h-2],guard:f[h]};break;case 159:this.$={source:f[h-2],guard:f[h],object:!0};break;case 160:this.$={source:f[h-2],step:f[h]};break;case 161:this.$={source:f[h-4],guard:f[h-2],step:f[h]};break;case 162:this.$={source:f[h-4],step:f[h-2],guard:f[h]};break;case 163:this.$=new d.Switch(f[h-3],f[h-1]);break;case 164:this.$=new d.Switch(f[h-5],f[h-3],f[h-1]);break;case 165:this.$=new d.Switch(null,f[h-1]);break;case 166:this.$=new d.Switch(null,f[h-3],f[h-1]);break;case 167:this.$=f[h];break;case 168:this.$=f[h-1].concat(f[h]);break;case 169:this.$=[[f[h-1],f[h]]];break;case 170:this.$=[[f[h-2],f[h-1]]];break;case 171:this.$=new d.If(f[h-1],f[h],{type:f[h-2]});break;case 172:this.$=f[h-4].addElse(new d.If(f[h-1],f[h],{type:f[h-2]}));break;case 173:this.$=f[h];break;case 174:this.$=f[h-2].addElse(f[h]);break;case 175:this.$=new d.If(f[h],d.Block.wrap([f[h-2]]),{type:f[h-1],statement:!0});break;case 176:this.$=new d.If(f[h],d.Block.wrap([f[h-2]]),{type:f[h-1],statement:!0});break;case 177:this.$=new d.Op(f[h-1],f[h]);break;case 178:this.$=new d.Op("-",f[h]);break;case 179:this.$=new d.Op("+",f[h]);break;case 180:this.$=new d.Op("--",f[h]);break;case 181:this.$=new d.Op("++",f[h]);break;case 182:this.$=new d.Op("--",f[h-1],null,!0);break;case 183:this.$=new d.Op("++",f[h-1],null,!0);break;case 184:this.$=new d.Existence(f[h-1]);break;case 185:this.$=new d.Op("+",f[h-2],f[h]);break;case 186:this.$=new d.Op("-",f[h-2],f[h]);break;case 187:this.$=new d.Op(f[h-1],f[h-2],f[h]);break;case 188:this.$=new d.Op(f[h-1],f[h-2],f[h]);break;case 189:this.$=new d.Op(f[h-1],f[h-2],f[h]);break;case 190:this.$=new d.Op(f[h-1],f[h-2],f[h]);break;case 191:this.$=function(){return f[h-1].charAt(0)==="!"?(new d.Op(f[h-1].slice(1),f[h-2],f[h])).invert():new d.Op(f[h-1],f[h-2],f[h])}();break;case 192:this.$=new d.Assign(f[h-2],f[h],f[h-1]);break;case 193:this.$=new d.Assign(f[h-4],f[h-1],f[h-3]);break;case 194:this.$=new d.Extends(f[h-2],f[h])}},table:[{1:[2,1],3:1,4:2,5:3,7:4,8:6,9:7,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,25:[1,5],27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[3]},{1:[2,2],6:[1,71]},{6:[1,72]},{1:[2,4],6:[2,4],26:[2,4],99:[2,4]},{4:74,7:4,8:6,9:7,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,26:[1,73],27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,7],6:[2,7],26:[2,7],99:[2,7],100:84,101:[1,62],103:[1,63],106:85,107:[1,65],108:66,123:[1,83],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{1:[2,8],6:[2,8],26:[2,8],99:[2,8],100:87,101:[1,62],103:[1,63],106:88,107:[1,65],108:66,123:[1,86]},{1:[2,13],6:[2,13],25:[2,13],26:[2,13],46:[2,13],51:[2,13],54:[2,13],59:90,63:[1,92],64:[1,93],65:[1,94],66:95,67:[1,96],69:[2,13],70:[1,97],71:[1,98],75:[2,13],78:89,81:[1,91],82:[2,102],83:[2,13],88:[2,13],90:[2,13],99:[2,13],101:[2,13],102:[2,13],103:[2,13],107:[2,13],115:[2,13],123:[2,13],125:[2,13],126:[2,13],129:[2,13],130:[2,13],131:[2,13],132:[2,13],133:[2,13],134:[2,13]},{1:[2,14],6:[2,14],25:[2,14],26:[2,14],46:[2,14],51:[2,14],54:[2,14],59:100,63:[1,92],64:[1,93],65:[1,94],66:95,67:[1,96],69:[2,14],70:[1,97],71:[1,98],75:[2,14],78:99,81:[1,91],82:[2,102],83:[2,14],88:[2,14],90:[2,14],99:[2,14],101:[2,14],102:[2,14],103:[2,14],107:[2,14],115:[2,14],123:[2,14],125:[2,14],126:[2,14],129:[2,14],130:[2,14],131:[2,14],132:[2,14],133:[2,14],134:[2,14]},{1:[2,15],6:[2,15],25:[2,15],26:[2,15],46:[2,15],51:[2,15],54:[2,15],69:[2,15],75:[2,15],83:[2,15],88:[2,15],90:[2,15],99:[2,15],101:[2,15],102:[2,15],103:[2,15],107:[2,15],115:[2,15],123:[2,15],125:[2,15],126:[2,15],129:[2,15],130:[2,15],131:[2,15],132:[2,15],133:[2,15],134:[2,15]},{1:[2,16],6:[2,16],25:[2,16],26:[2,16],46:[2,16],51:[2,16],54:[2,16],69:[2,16],75:[2,16],83:[2,16],88:[2,16],90:[2,16],99:[2,16],101:[2,16],102:[2,16],103:[2,16],107:[2,16],115:[2,16],123:[2,16],125:[2,16],126:[2,16],129:[2,16],130:[2,16],131:[2,16],132:[2,16],133:[2,16],134:[2,16]},{1:[2,17],6:[2,17],25:[2,17],26:[2,17],46:[2,17],51:[2,17],54:[2,17],69:[2,17],75:[2,17],83:[2,17],88:[2,17],90:[2,17],99:[2,17],101:[2,17],102:[2,17],103:[2,17],107:[2,17],115:[2,17],123:[2,17],125:[2,17],126:[2,17],129:[2,17],130:[2,17],131:[2,17],132:[2,17],133:[2,17],134:[2,17]},{1:[2,18],6:[2,18],25:[2,18],26:[2,18],46:[2,18],51:[2,18],54:[2,18],69:[2,18],75:[2,18],83:[2,18],88:[2,18],90:[2,18],99:[2,18],101:[2,18],102:[2,18],103:[2,18],107:[2,18],115:[2,18],123:[2,18],125:[2,18],126:[2,18],129:[2,18],130:[2,18],131:[2,18],132:[2,18],133:[2,18],134:[2,18]},{1:[2,19],6:[2,19],25:[2,19],26:[2,19],46:[2,19],51:[2,19],54:[2,19],69:[2,19],75:[2,19],83:[2,19],88:[2,19],90:[2,19],99:[2,19],101:[2,19],102:[2,19],103:[2,19],107:[2,19],115:[2,19],123:[2,19],125:[2,19],126:[2,19],129:[2,19],130:[2,19],131:[2,19],132:[2,19],133:[2,19],134:[2,19]},{1:[2,20],6:[2,20],25:[2,20],26:[2,20],46:[2,20],51:[2,20],54:[2,20],69:[2,20],75:[2,20],83:[2,20],88:[2,20],90:[2,20],99:[2,20],101:[2,20],102:[2,20],103:[2,20],107:[2,20],115:[2,20],123:[2,20],125:[2,20],126:[2,20],129:[2,20],130:[2,20],131:[2,20],132:[2,20],133:[2,20],134:[2,20]},{1:[2,21],6:[2,21],25:[2,21],26:[2,21],46:[2,21],51:[2,21],54:[2,21],69:[2,21],75:[2,21],83:[2,21],88:[2,21],90:[2,21],99:[2,21],101:[2,21],102:[2,21],103:[2,21],107:[2,21],115:[2,21],123:[2,21],125:[2,21],126:[2,21],129:[2,21],130:[2,21],131:[2,21],132:[2,21],133:[2,21],134:[2,21]},{1:[2,22],6:[2,22],25:[2,22],26:[2,22],46:[2,22],51:[2,22],54:[2,22],69:[2,22],75:[2,22],83:[2,22],88:[2,22],90:[2,22],99:[2,22],101:[2,22],102:[2,22],103:[2,22],107:[2,22],115:[2,22],123:[2,22],125:[2,22],126:[2,22],129:[2,22],130:[2,22],131:[2,22],132:[2,22],133:[2,22],134:[2,22]},{1:[2,23],6:[2,23],25:[2,23],26:[2,23],46:[2,23],51:[2,23],54:[2,23],69:[2,23],75:[2,23],83:[2,23],88:[2,23],90:[2,23],99:[2,23],101:[2,23],102:[2,23],103:[2,23],107:[2,23],115:[2,23],123:[2,23],125:[2,23],126:[2,23],129:[2,23],130:[2,23],131:[2,23],132:[2,23],133:[2,23],134:[2,23]},{1:[2,9],6:[2,9],26:[2,9],99:[2,9],101:[2,9],103:[2,9],107:[2,9],123:[2,9]},{1:[2,10],6:[2,10],26:[2,10],99:[2,10],101:[2,10],103:[2,10],107:[2,10],123:[2,10]},{1:[2,11],6:[2,11],26:[2,11],99:[2,11],101:[2,11],103:[2,11],107:[2,11],123:[2,11]},{1:[2,12],6:[2,12],26:[2,12],99:[2,12],101:[2,12],103:[2,12],107:[2,12],123:[2,12]},{1:[2,69],6:[2,69],25:[2,69],26:[2,69],37:[1,101],46:[2,69],51:[2,69],54:[2,69],63:[2,69],64:[2,69],65:[2,69],67:[2,69],69:[2,69],70:[2,69],71:[2,69],75:[2,69],81:[2,69],82:[2,69],83:[2,69],88:[2,69],90:[2,69],99:[2,69],101:[2,69],102:[2,69],103:[2,69],107:[2,69],115:[2,69],123:[2,69],125:[2,69],126:[2,69],129:[2,69],130:[2,69],131:[2,69],132:[2,69],133:[2,69],134:[2,69]},{1:[2,70],6:[2,70],25:[2,70],26:[2,70],46:[2,70],51:[2,70],54:[2,70],63:[2,70],64:[2,70],65:[2,70],67:[2,70],69:[2,70],70:[2,70],71:[2,70],75:[2,70],81:[2,70],82:[2,70],83:[2,70],88:[2,70],90:[2,70],99:[2,70],101:[2,70],102:[2,70],103:[2,70],107:[2,70],115:[2,70],123:[2,70],125:[2,70],126:[2,70],129:[2,70],130:[2,70],131:[2,70],132:[2,70],133:[2,70],134:[2,70]},{1:[2,71],6:[2,71],25:[2,71],26:[2,71],46:[2,71],51:[2,71],54:[2,71],63:[2,71],64:[2,71],65:[2,71],67:[2,71],69:[2,71],70:[2,71],71:[2,71],75:[2,71],81:[2,71],82:[2,71],83:[2,71],88:[2,71],90:[2,71],99:[2,71],101:[2,71],102:[2,71],103:[2,71],107:[2,71],115:[2,71],123:[2,71],125:[2,71],126:[2,71],129:[2,71],130:[2,71],131:[2,71],132:[2,71],133:[2,71],134:[2,71]},{1:[2,72],6:[2,72],25:[2,72],26:[2,72],46:[2,72],51:[2,72],54:[2,72],63:[2,72],64:[2,72],65:[2,72],67:[2,72],69:[2,72],70:[2,72],71:[2,72],75:[2,72],81:[2,72],82:[2,72],83:[2,72],88:[2,72],90:[2,72],99:[2,72],101:[2,72],102:[2,72],103:[2,72],107:[2,72],115:[2,72],123:[2,72],125:[2,72],126:[2,72],129:[2,72],130:[2,72],131:[2,72],132:[2,72],133:[2,72],134:[2,72]},{1:[2,73],6:[2,73],25:[2,73],26:[2,73],46:[2,73],51:[2,73],54:[2,73],63:[2,73],64:[2,73],65:[2,73],67:[2,73],69:[2,73],70:[2,73],71:[2,73],75:[2,73],81:[2,73],82:[2,73],83:[2,73],88:[2,73],90:[2,73],99:[2,73],101:[2,73],102:[2,73],103:[2,73],107:[2,73],115:[2,73],123:[2,73],125:[2,73],126:[2,73],129:[2,73],130:[2,73],131:[2,73],132:[2,73],133:[2,73],134:[2,73]},{1:[2,100],6:[2,100],25:[2,100],26:[2,100],46:[2,100],51:[2,100],54:[2,100],63:[2,100],64:[2,100],65:[2,100],67:[2,100],69:[2,100],70:[2,100],71:[2,100],75:[2,100],79:102,81:[2,100],82:[1,103],83:[2,100],88:[2,100],90:[2,100],99:[2,100],101:[2,100],102:[2,100],103:[2,100],107:[2,100],115:[2,100],123:[2,100],125:[2,100],126:[2,100],129:[2,100],130:[2,100],131:[2,100],132:[2,100],133:[2,100],134:[2,100]},{27:107,28:[1,70],41:108,45:104,46:[2,51],51:[2,51],52:105,53:106,55:109,56:110,73:[1,67],86:[1,111],87:[1,112]},{5:113,25:[1,5]},{8:114,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:116,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:117,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{14:119,15:120,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:121,41:60,55:47,56:48,58:118,60:25,61:26,62:27,73:[1,67],80:[1,28],85:[1,55],86:[1,56],87:[1,54],98:[1,53]},{14:119,15:120,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:121,41:60,55:47,56:48,58:122,60:25,61:26,62:27,73:[1,67],80:[1,28],85:[1,55],86:[1,56],87:[1,54],98:[1,53]},{1:[2,66],6:[2,66],25:[2,66],26:[2,66],37:[2,66],46:[2,66],51:[2,66],54:[2,66],63:[2,66],64:[2,66],65:[2,66],67:[2,66],69:[2,66],70:[2,66],71:[2,66],75:[2,66],77:[1,126],81:[2,66],82:[2,66],83:[2,66],88:[2,66],90:[2,66],99:[2,66],101:[2,66],102:[2,66],103:[2,66],107:[2,66],115:[2,66],123:[2,66],125:[2,66],126:[2,66],127:[1,123],128:[1,124],129:[2,66],130:[2,66],131:[2,66],132:[2,66],133:[2,66],134:[2,66],135:[1,125]},{1:[2,173],6:[2,173],25:[2,173],26:[2,173],46:[2,173],51:[2,173],54:[2,173],69:[2,173],75:[2,173],83:[2,173],88:[2,173],90:[2,173],99:[2,173],101:[2,173],102:[2,173],103:[2,173],107:[2,173],115:[2,173],118:[1,127],123:[2,173],125:[2,173],126:[2,173],129:[2,173],130:[2,173],131:[2,173],132:[2,173],133:[2,173],134:[2,173]},{5:128,25:[1,5]},{5:129,25:[1,5]},{1:[2,141],6:[2,141],25:[2,141],26:[2,141],46:[2,141],51:[2,141],54:[2,141],69:[2,141],75:[2,141],83:[2,141],88:[2,141],90:[2,141],99:[2,141],101:[2,141],102:[2,141],103:[2,141],107:[2,141],115:[2,141],123:[2,141],125:[2,141],126:[2,141],129:[2,141],130:[2,141],131:[2,141],132:[2,141],133:[2,141],134:[2,141]},{5:130,25:[1,5]},{8:131,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,25:[1,132],27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,90],5:133,6:[2,90],14:119,15:120,25:[1,5],26:[2,90],27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:121,41:60,46:[2,90],51:[2,90],54:[2,90],55:47,56:48,58:135,60:25,61:26,62:27,69:[2,90],73:[1,67],75:[2,90],77:[1,134],80:[1,28],83:[2,90],85:[1,55],86:[1,56],87:[1,54],88:[2,90],90:[2,90],98:[1,53],99:[2,90],101:[2,90],102:[2,90],103:[2,90],107:[2,90],115:[2,90],123:[2,90],125:[2,90],126:[2,90],129:[2,90],130:[2,90],131:[2,90],132:[2,90],133:[2,90],134:[2,90]},{1:[2,43],6:[2,43],8:136,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,26:[2,43],27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],99:[2,43],100:39,101:[2,43],103:[2,43],104:40,105:[1,64],106:41,107:[2,43],108:66,116:[1,42],121:37,122:[1,61],123:[2,43],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:137,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,44],6:[2,44],25:[2,44],26:[2,44],51:[2,44],75:[2,44],99:[2,44],101:[2,44],103:[2,44],107:[2,44],123:[2,44]},{1:[2,67],6:[2,67],25:[2,67],26:[2,67],37:[2,67],46:[2,67],51:[2,67],54:[2,67],63:[2,67],64:[2,67],65:[2,67],67:[2,67],69:[2,67],70:[2,67],71:[2,67],75:[2,67],81:[2,67],82:[2,67],83:[2,67],88:[2,67],90:[2,67],99:[2,67],101:[2,67],102:[2,67],103:[2,67],107:[2,67],115:[2,67],123:[2,67],125:[2,67],126:[2,67],129:[2,67],130:[2,67],131:[2,67],132:[2,67],133:[2,67],134:[2,67]},{1:[2,68],6:[2,68],25:[2,68],26:[2,68],37:[2,68],46:[2,68],51:[2,68],54:[2,68],63:[2,68],64:[2,68],65:[2,68],67:[2,68],69:[2,68],70:[2,68],71:[2,68],75:[2,68],81:[2,68],82:[2,68],83:[2,68],88:[2,68],90:[2,68],99:[2,68],101:[2,68],102:[2,68],103:[2,68],107:[2,68],115:[2,68],123:[2,68],125:[2,68],126:[2,68],129:[2,68],130:[2,68],131:[2,68],132:[2,68],133:[2,68],134:[2,68]},{1:[2,29],6:[2,29],25:[2,29],26:[2,29],46:[2,29],51:[2,29],54:[2,29],63:[2,29],64:[2,29],65:[2,29],67:[2,29],69:[2,29],70:[2,29],71:[2,29],75:[2,29],81:[2,29],82:[2,29],83:[2,29],88:[2,29],90:[2,29],99:[2,29],101:[2,29],102:[2,29],103:[2,29],107:[2,29],115:[2,29],123:[2,29],125:[2,29],126:[2,29],129:[2,29],130:[2,29],131:[2,29],132:[2,29],133:[2,29],134:[2,29]},{1:[2,30],6:[2,30],25:[2,30],26:[2,30],46:[2,30],51:[2,30],54:[2,30],63:[2,30],64:[2,30],65:[2,30],67:[2,30],69:[2,30],70:[2,30],71:[2,30],75:[2,30],81:[2,30],82:[2,30],83:[2,30],88:[2,30],90:[2,30],99:[2,30],101:[2,30],102:[2,30],103:[2,30],107:[2,30],115:[2,30],123:[2,30],125:[2,30],126:[2,30],129:[2,30],130:[2,30],131:[2,30],132:[2,30],133:[2,30],134:[2,30]},{1:[2,31],6:[2,31],25:[2,31],26:[2,31],46:[2,31],51:[2,31],54:[2,31],63:[2,31],64:[2,31],65:[2,31],67:[2,31],69:[2,31],70:[2,31],71:[2,31],75:[2,31],81:[2,31],82:[2,31],83:[2,31],88:[2,31],90:[2,31],99:[2,31],101:[2,31],102:[2,31],103:[2,31],107:[2,31],115:[2,31],123:[2,31],125:[2,31],126:[2,31],129:[2,31],130:[2,31],131:[2,31],132:[2,31],133:[2,31],134:[2,31]},{1:[2,32],6:[2,32],25:[2,32],26:[2,32],46:[2,32],51:[2,32],54:[2,32],63:[2,32],64:[2,32],65:[2,32],67:[2,32],69:[2,32],70:[2,32],71:[2,32],75:[2,32],81:[2,32],82:[2,32],83:[2,32],88:[2,32],90:[2,32],99:[2,32],101:[2,32],102:[2,32],103:[2,32],107:[2,32],115:[2,32],123:[2,32],125:[2,32],126:[2,32],129:[2,32],130:[2,32],131:[2,32],132:[2,32],133:[2,32],134:[2,32]},{4:138,7:4,8:6,9:7,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,25:[1,139],27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:140,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,25:[1,144],27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,57:145,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],84:142,85:[1,55],86:[1,56],87:[1,54],88:[1,141],91:143,93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,106],6:[2,106],25:[2,106],26:[2,106],46:[2,106],51:[2,106],54:[2,106],63:[2,106],64:[2,106],65:[2,106],67:[2,106],69:[2,106],70:[2,106],71:[2,106],75:[2,106],81:[2,106],82:[2,106],83:[2,106],88:[2,106],90:[2,106],99:[2,106],101:[2,106],102:[2,106],103:[2,106],107:[2,106],115:[2,106],123:[2,106],125:[2,106],126:[2,106],129:[2,106],130:[2,106],131:[2,106],132:[2,106],133:[2,106],134:[2,106]},{1:[2,107],6:[2,107],25:[2,107],26:[2,107],27:146,28:[1,70],46:[2,107],51:[2,107],54:[2,107],63:[2,107],64:[2,107],65:[2,107],67:[2,107],69:[2,107],70:[2,107],71:[2,107],75:[2,107],81:[2,107],82:[2,107],83:[2,107],88:[2,107],90:[2,107],99:[2,107],101:[2,107],102:[2,107],103:[2,107],107:[2,107],115:[2,107],123:[2,107],125:[2,107],126:[2,107],129:[2,107],130:[2,107],131:[2,107],132:[2,107],133:[2,107],134:[2,107]},{25:[2,47]},{25:[2,48]},{1:[2,62],6:[2,62],25:[2,62],26:[2,62],37:[2,62],46:[2,62],51:[2,62],54:[2,62],63:[2,62],64:[2,62],65:[2,62],67:[2,62],69:[2,62],70:[2,62],71:[2,62],75:[2,62],77:[2,62],81:[2,62],82:[2,62],83:[2,62],88:[2,62],90:[2,62],99:[2,62],101:[2,62],102:[2,62],103:[2,62],107:[2,62],115:[2,62],123:[2,62],125:[2,62],126:[2,62],127:[2,62],128:[2,62],129:[2,62],130:[2,62],131:[2,62],132:[2,62],133:[2,62],134:[2,62],135:[2,62]},{1:[2,65],6:[2,65],25:[2,65],26:[2,65],37:[2,65],46:[2,65],51:[2,65],54:[2,65],63:[2,65],64:[2,65],65:[2,65],67:[2,65],69:[2,65],70:[2,65],71:[2,65],75:[2,65],77:[2,65],81:[2,65],82:[2,65],83:[2,65],88:[2,65],90:[2,65],99:[2,65],101:[2,65],102:[2,65],103:[2,65],107:[2,65],115:[2,65],123:[2,65],125:[2,65],126:[2,65],127:[2,65],128:[2,65],129:[2,65],130:[2,65],131:[2,65],132:[2,65],133:[2,65],134:[2,65],135:[2,65]},{8:147,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:148,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:149,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{5:150,8:151,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,25:[1,5],27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{27:156,28:[1,70],55:157,56:158,61:152,73:[1,67],87:[1,54],110:153,111:[1,154],112:155},{109:159,113:[1,160],114:[1,161]},{6:[2,85],12:165,25:[2,85],27:166,28:[1,70],29:167,30:[1,68],31:[1,69],38:163,39:164,41:168,43:[1,46],51:[2,85],74:162,75:[2,85],86:[1,111]},{1:[2,27],6:[2,27],25:[2,27],26:[2,27],40:[2,27],46:[2,27],51:[2,27],54:[2,27],63:[2,27],64:[2,27],65:[2,27],67:[2,27],69:[2,27],70:[2,27],71:[2,27],75:[2,27],81:[2,27],82:[2,27],83:[2,27],88:[2,27],90:[2,27],99:[2,27],101:[2,27],102:[2,27],103:[2,27],107:[2,27],115:[2,27],123:[2,27],125:[2,27],126:[2,27],129:[2,27],130:[2,27],131:[2,27],132:[2,27],133:[2,27],134:[2,27]},{1:[2,28],6:[2,28],25:[2,28],26:[2,28],40:[2,28],46:[2,28],51:[2,28],54:[2,28],63:[2,28],64:[2,28],65:[2,28],67:[2,28],69:[2,28],70:[2,28],71:[2,28],75:[2,28],81:[2,28],82:[2,28],83:[2,28],88:[2,28],90:[2,28],99:[2,28],101:[2,28],102:[2,28],103:[2,28],107:[2,28],115:[2,28],123:[2,28],125:[2,28],126:[2,28],129:[2,28],130:[2,28],131:[2,28],132:[2,28],133:[2,28],134:[2,28]},{1:[2,26],6:[2,26],25:[2,26],26:[2,26],37:[2,26],40:[2,26],46:[2,26],51:[2,26],54:[2,26],63:[2,26],64:[2,26],65:[2,26],67:[2,26],69:[2,26],70:[2,26],71:[2,26],75:[2,26],77:[2,26],81:[2,26],82:[2,26],83:[2,26],88:[2,26],90:[2,26],99:[2,26],101:[2,26],102:[2,26],103:[2,26],107:[2,26],113:[2,26],114:[2,26],115:[2,26],123:[2,26],125:[2,26],126:[2,26],127:[2,26],128:[2,26],129:[2,26],130:[2,26],131:[2,26],132:[2,26],133:[2,26],134:[2,26],135:[2,26]},{1:[2,6],6:[2,6],7:169,8:6,9:7,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,26:[2,6],27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],99:[2,6],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,3]},{1:[2,24],6:[2,24],25:[2,24],26:[2,24],46:[2,24],51:[2,24],54:[2,24],69:[2,24],75:[2,24],83:[2,24],88:[2,24],90:[2,24],95:[2,24],96:[2,24],99:[2,24],101:[2,24],102:[2,24],103:[2,24],107:[2,24],115:[2,24],118:[2,24],120:[2,24],123:[2,24],125:[2,24],126:[2,24],129:[2,24],130:[2,24],131:[2,24],132:[2,24],133:[2,24],134:[2,24]},{6:[1,71],26:[1,170]},{1:[2,184],6:[2,184],25:[2,184],26:[2,184],46:[2,184],51:[2,184],54:[2,184],69:[2,184],75:[2,184],83:[2,184],88:[2,184],90:[2,184],99:[2,184],101:[2,184],102:[2,184],103:[2,184],107:[2,184],115:[2,184],123:[2,184],125:[2,184],126:[2,184],129:[2,184],130:[2,184],131:[2,184],132:[2,184],133:[2,184],134:[2,184]},{8:171,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:172,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:173,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:174,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:175,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:176,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:177,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:178,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,140],6:[2,140],25:[2,140],26:[2,140],46:[2,140],51:[2,140],54:[2,140],69:[2,140],75:[2,140],83:[2,140],88:[2,140],90:[2,140],99:[2,140],101:[2,140],102:[2,140],103:[2,140],107:[2,140],115:[2,140],123:[2,140],125:[2,140],126:[2,140],129:[2,140],130:[2,140],131:[2,140],132:[2,140],133:[2,140],134:[2,140]},{1:[2,145],6:[2,145],25:[2,145],26:[2,145],46:[2,145],51:[2,145],54:[2,145],69:[2,145],75:[2,145],83:[2,145],88:[2,145],90:[2,145],99:[2,145],101:[2,145],102:[2,145],103:[2,145],107:[2,145],115:[2,145],123:[2,145],125:[2,145],126:[2,145],129:[2,145],130:[2,145],131:[2,145],132:[2,145],133:[2,145],134:[2,145]},{8:179,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,139],6:[2,139],25:[2,139],26:[2,139],46:[2,139],51:[2,139],54:[2,139],69:[2,139],75:[2,139],83:[2,139],88:[2,139],90:[2,139],99:[2,139],101:[2,139],102:[2,139],103:[2,139],107:[2,139],115:[2,139],123:[2,139],125:[2,139],126:[2,139],129:[2,139],130:[2,139],131:[2,139],132:[2,139],133:[2,139],134:[2,139]},{1:[2,144],6:[2,144],25:[2,144],26:[2,144],46:[2,144],51:[2,144],54:[2,144],69:[2,144],75:[2,144],83:[2,144],88:[2,144],90:[2,144],99:[2,144],101:[2,144],102:[2,144],103:[2,144],107:[2,144],115:[2,144],123:[2,144],125:[2,144],126:[2,144],129:[2,144],130:[2,144],131:[2,144],132:[2,144],133:[2,144],134:[2,144]},{79:180,82:[1,103]},{1:[2,63],6:[2,63],25:[2,63],26:[2,63],37:[2,63],46:[2,63],51:[2,63],54:[2,63],63:[2,63],64:[2,63],65:[2,63],67:[2,63],69:[2,63],70:[2,63],71:[2,63],75:[2,63],77:[2,63],81:[2,63],82:[2,63],83:[2,63],88:[2,63],90:[2,63],99:[2,63],101:[2,63],102:[2,63],103:[2,63],107:[2,63],115:[2,63],123:[2,63],125:[2,63],126:[2,63],127:[2,63],128:[2,63],129:[2,63],130:[2,63],131:[2,63],132:[2,63],133:[2,63],134:[2,63],135:[2,63]},{82:[2,103]},{27:181,28:[1,70]},{27:182,28:[1,70]},{1:[2,77],6:[2,77],25:[2,77],26:[2,77],27:183,28:[1,70],37:[2,77],46:[2,77],51:[2,77],54:[2,77],63:[2,77],64:[2,77],65:[2,77],67:[2,77],69:[2,77],70:[2,77],71:[2,77],75:[2,77],77:[2,77],81:[2,77],82:[2,77],83:[2,77],88:[2,77],90:[2,77],99:[2,77],101:[2,77],102:[2,77],103:[2,77],107:[2,77],115:[2,77],123:[2,77],125:[2,77],126:[2,77],127:[2,77],128:[2,77],129:[2,77],130:[2,77],131:[2,77],132:[2,77],133:[2,77],134:[2,77],135:[2,77]},{1:[2,78],6:[2,78],25:[2,78],26:[2,78],37:[2,78],46:[2,78],51:[2,78],54:[2,78],63:[2,78],64:[2,78],65:[2,78],67:[2,78],69:[2,78],70:[2,78],71:[2,78],75:[2,78],77:[2,78],81:[2,78],82:[2,78],83:[2,78],88:[2,78],90:[2,78],99:[2,78],101:[2,78],102:[2,78],103:[2,78],107:[2,78],115:[2,78],123:[2,78],125:[2,78],126:[2,78],127:[2,78],128:[2,78],129:[2,78],130:[2,78],131:[2,78],132:[2,78],133:[2,78],134:[2,78],135:[2,78]},{8:185,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],54:[1,189],55:47,56:48,58:36,60:25,61:26,62:27,68:184,72:186,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],89:187,90:[1,188],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{66:190,67:[1,96],70:[1,97],71:[1,98]},{66:191,67:[1,96],70:[1,97],71:[1,98]},{79:192,82:[1,103]},{1:[2,64],6:[2,64],25:[2,64],26:[2,64],37:[2,64],46:[2,64],51:[2,64],54:[2,64],63:[2,64],64:[2,64],65:[2,64],67:[2,64],69:[2,64],70:[2,64],71:[2,64],75:[2,64],77:[2,64],81:[2,64],82:[2,64],83:[2,64],88:[2,64],90:[2,64],99:[2,64],101:[2,64],102:[2,64],103:[2,64],107:[2,64],115:[2,64],123:[2,64],125:[2,64],126:[2,64],127:[2,64],128:[2,64],129:[2,64],130:[2,64],131:[2,64],132:[2,64],133:[2,64],134:[2,64],135:[2,64]},{8:193,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,25:[1,194],27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,101],6:[2,101],25:[2,101],26:[2,101],46:[2,101],51:[2,101],54:[2,101],63:[2,101],64:[2,101],65:[2,101],67:[2,101],69:[2,101],70:[2,101],71:[2,101],75:[2,101],81:[2,101],82:[2,101],83:[2,101],88:[2,101],90:[2,101],99:[2,101],101:[2,101],102:[2,101],103:[2,101],107:[2,101],115:[2,101],123:[2,101],125:[2,101],126:[2,101],129:[2,101],130:[2,101],131:[2,101],132:[2,101],133:[2,101],134:[2,101]},{8:197,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,25:[1,144],27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,57:145,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],83:[1,195],84:196,85:[1,55],86:[1,56],87:[1,54],91:143,93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{46:[1,198],51:[1,199]},{46:[2,52],51:[2,52]},{37:[1,201],46:[2,54],51:[2,54],54:[1,200]},{37:[2,57],46:[2,57],51:[2,57],54:[2,57]},{37:[2,58],46:[2,58],51:[2,58],54:[2,58]},{37:[2,59],46:[2,59],51:[2,59],54:[2,59]},{37:[2,60],46:[2,60],51:[2,60],54:[2,60]},{27:146,28:[1,70]},{8:197,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,25:[1,144],27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,57:145,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],84:142,85:[1,55],86:[1,56],87:[1,54],88:[1,141],91:143,93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,46],6:[2,46],25:[2,46],26:[2,46],46:[2,46],51:[2,46],54:[2,46],69:[2,46],75:[2,46],83:[2,46],88:[2,46],90:[2,46],99:[2,46],101:[2,46],102:[2,46],103:[2,46],107:[2,46],115:[2,46],123:[2,46],125:[2,46],126:[2,46],129:[2,46],130:[2,46],131:[2,46],132:[2,46],133:[2,46],134:[2,46]},{1:[2,177],6:[2,177],25:[2,177],26:[2,177],46:[2,177],51:[2,177],54:[2,177],69:[2,177],75:[2,177],83:[2,177],88:[2,177],90:[2,177],99:[2,177],100:84,101:[2,177],102:[2,177],103:[2,177],106:85,107:[2,177],108:66,115:[2,177],123:[2,177],125:[2,177],126:[2,177],129:[1,75],130:[2,177],131:[2,177],132:[2,177],133:[2,177],134:[2,177]},{100:87,101:[1,62],103:[1,63],106:88,107:[1,65],108:66,123:[1,86]},{1:[2,178],6:[2,178],25:[2,178],26:[2,178],46:[2,178],51:[2,178],54:[2,178],69:[2,178],75:[2,178],83:[2,178],88:[2,178],90:[2,178],99:[2,178],100:84,101:[2,178],102:[2,178],103:[2,178],106:85,107:[2,178],108:66,115:[2,178],123:[2,178],125:[2,178],126:[2,178],129:[1,75],130:[2,178],131:[2,178],132:[2,178],133:[2,178],134:[2,178]},{1:[2,179],6:[2,179],25:[2,179],26:[2,179],46:[2,179],51:[2,179],54:[2,179],69:[2,179],75:[2,179],83:[2,179],88:[2,179],90:[2,179],99:[2,179],100:84,101:[2,179],102:[2,179],103:[2,179],106:85,107:[2,179],108:66,115:[2,179],123:[2,179],125:[2,179],126:[2,179],129:[1,75],130:[2,179],131:[2,179],132:[2,179],133:[2,179],134:[2,179]},{1:[2,180],6:[2,180],25:[2,180],26:[2,180],46:[2,180],51:[2,180],54:[2,180],63:[2,66],64:[2,66],65:[2,66],67:[2,66],69:[2,180],70:[2,66],71:[2,66],75:[2,180],81:[2,66],82:[2,66],83:[2,180],88:[2,180],90:[2,180],99:[2,180],101:[2,180],102:[2,180],103:[2,180],107:[2,180],115:[2,180],123:[2,180],125:[2,180],126:[2,180],129:[2,180],130:[2,180],131:[2,180],132:[2,180],133:[2,180],134:[2,180]},{59:90,63:[1,92],64:[1,93],65:[1,94],66:95,67:[1,96],70:[1,97],71:[1,98],78:89,81:[1,91],82:[2,102]},{59:100,63:[1,92],64:[1,93],65:[1,94],66:95,67:[1,96],70:[1,97],71:[1,98],78:99,81:[1,91],82:[2,102]},{1:[2,69],6:[2,69],25:[2,69],26:[2,69],46:[2,69],51:[2,69],54:[2,69],63:[2,69],64:[2,69],65:[2,69],67:[2,69],69:[2,69],70:[2,69],71:[2,69],75:[2,69],81:[2,69],82:[2,69],83:[2,69],88:[2,69],90:[2,69],99:[2,69],101:[2,69],102:[2,69],103:[2,69],107:[2,69],115:[2,69],123:[2,69],125:[2,69],126:[2,69],129:[2,69],130:[2,69],131:[2,69],132:[2,69],133:[2,69],134:[2,69]},{1:[2,181],6:[2,181],25:[2,181],26:[2,181],46:[2,181],51:[2,181],54:[2,181],63:[2,66],64:[2,66],65:[2,66],67:[2,66],69:[2,181],70:[2,66],71:[2,66],75:[2,181],81:[2,66],82:[2,66],83:[2,181],88:[2,181],90:[2,181],99:[2,181],101:[2,181],102:[2,181],103:[2,181],107:[2,181],115:[2,181],123:[2,181],125:[2,181],126:[2,181],129:[2,181],130:[2,181],131:[2,181],132:[2,181],133:[2,181],134:[2,181]},{1:[2,182],6:[2,182],25:[2,182],26:[2,182],46:[2,182],51:[2,182],54:[2,182],69:[2,182],75:[2,182],83:[2,182],88:[2,182],90:[2,182],99:[2,182],101:[2,182],102:[2,182],103:[2,182],107:[2,182],115:[2,182],123:[2,182],125:[2,182],126:[2,182],129:[2,182],130:[2,182],131:[2,182],132:[2,182],133:[2,182],134:[2,182]},{1:[2,183],6:[2,183],25:[2,183],26:[2,183],46:[2,183],51:[2,183],54:[2,183],69:[2,183],75:[2,183],83:[2,183],88:[2,183],90:[2,183],99:[2,183],101:[2,183],102:[2,183],103:[2,183],107:[2,183],115:[2,183],123:[2,183],125:[2,183],126:[2,183],129:[2,183],130:[2,183],131:[2,183],132:[2,183],133:[2,183],134:[2,183]},{8:202,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,25:[1,203],27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:204,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{5:205,25:[1,5],122:[1,206]},{1:[2,126],6:[2,126],25:[2,126],26:[2,126],46:[2,126],51:[2,126],54:[2,126],69:[2,126],75:[2,126],83:[2,126],88:[2,126],90:[2,126],94:207,95:[1,208],96:[1,209],99:[2,126],101:[2,126],102:[2,126],103:[2,126],107:[2,126],115:[2,126],123:[2,126],125:[2,126],126:[2,126],129:[2,126],130:[2,126],131:[2,126],132:[2,126],133:[2,126],134:[2,126]},{1:[2,138],6:[2,138],25:[2,138],26:[2,138],46:[2,138],51:[2,138],54:[2,138],69:[2,138],75:[2,138],83:[2,138],88:[2,138],90:[2,138],99:[2,138],101:[2,138],102:[2,138],103:[2,138],107:[2,138],115:[2,138],123:[2,138],125:[2,138],126:[2,138],129:[2,138],130:[2,138],131:[2,138],132:[2,138],133:[2,138],134:[2,138]},{1:[2,146],6:[2,146],25:[2,146],26:[2,146],46:[2,146],51:[2,146],54:[2,146],69:[2,146],75:[2,146],83:[2,146],88:[2,146],90:[2,146],99:[2,146],101:[2,146],102:[2,146],103:[2,146],107:[2,146],115:[2,146],123:[2,146],125:[2,146],126:[2,146],129:[2,146],130:[2,146],131:[2,146],132:[2,146],133:[2,146],134:[2,146]},{25:[1,210],100:84,101:[1,62],103:[1,63],106:85,107:[1,65],108:66,123:[1,83],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{117:211,119:212,120:[1,213]},{1:[2,91],6:[2,91],25:[2,91],26:[2,91],46:[2,91],51:[2,91],54:[2,91],69:[2,91],75:[2,91],83:[2,91],88:[2,91],90:[2,91],99:[2,91],101:[2,91],102:[2,91],103:[2,91],107:[2,91],115:[2,91],123:[2,91],125:[2,91],126:[2,91],129:[2,91],130:[2,91],131:[2,91],132:[2,91],133:[2,91],134:[2,91]},{14:214,15:120,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:121,41:60,55:47,56:48,58:215,60:25,61:26,62:27,73:[1,67],80:[1,28],85:[1,55],86:[1,56],87:[1,54],98:[1,53]},{1:[2,94],5:216,6:[2,94],25:[1,5],26:[2,94],46:[2,94],51:[2,94],54:[2,94],63:[2,66],64:[2,66],65:[2,66],67:[2,66],69:[2,94],70:[2,66],71:[2,66],75:[2,94],77:[1,217],81:[2,66],82:[2,66],83:[2,94],88:[2,94],90:[2,94],99:[2,94],101:[2,94],102:[2,94],103:[2,94],107:[2,94],115:[2,94],123:[2,94],125:[2,94],126:[2,94],129:[2,94],130:[2,94],131:[2,94],132:[2,94],133:[2,94],134:[2,94]},{1:[2,42],6:[2,42],26:[2,42],99:[2,42],100:84,101:[2,42],103:[2,42],106:85,107:[2,42],108:66,123:[2,42],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{1:[2,131],6:[2,131],26:[2,131],99:[2,131],100:84,101:[2,131],103:[2,131],106:85,107:[2,131],108:66,123:[2,131],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{6:[1,71],99:[1,218]},{4:219,7:4,8:6,9:7,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{6:[2,122],25:[2,122],51:[2,122],54:[1,221],88:[2,122],89:220,90:[1,188],100:84,101:[1,62],103:[1,63],106:85,107:[1,65],108:66,123:[1,83],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{1:[2,109],6:[2,109],25:[2,109],26:[2,109],37:[2,109],46:[2,109],51:[2,109],54:[2,109],63:[2,109],64:[2,109],65:[2,109],67:[2,109],69:[2,109],70:[2,109],71:[2,109],75:[2,109],81:[2,109],82:[2,109],83:[2,109],88:[2,109],90:[2,109],99:[2,109],101:[2,109],102:[2,109],103:[2,109],107:[2,109],113:[2,109],114:[2,109],115:[2,109],123:[2,109],125:[2,109],126:[2,109],129:[2,109],130:[2,109],131:[2,109],132:[2,109],133:[2,109],134:[2,109]},{6:[2,49],25:[2,49],50:222,51:[1,223],88:[2,49]},{6:[2,117],25:[2,117],26:[2,117],51:[2,117],83:[2,117],88:[2,117]},{8:197,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,25:[1,144],27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,57:145,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],84:224,85:[1,55],86:[1,56],87:[1,54],91:143,93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{6:[2,123],25:[2,123],26:[2,123],51:[2,123],83:[2,123],88:[2,123]},{1:[2,108],6:[2,108],25:[2,108],26:[2,108],37:[2,108],40:[2,108],46:[2,108],51:[2,108],54:[2,108],63:[2,108],64:[2,108],65:[2,108],67:[2,108],69:[2,108],70:[2,108],71:[2,108],75:[2,108],77:[2,108],81:[2,108],82:[2,108],83:[2,108],88:[2,108],90:[2,108],99:[2,108],101:[2,108],102:[2,108],103:[2,108],107:[2,108],115:[2,108],123:[2,108],125:[2,108],126:[2,108],127:[2,108],128:[2,108],129:[2,108],130:[2,108],131:[2,108],132:[2,108],133:[2,108],134:[2,108],135:[2,108]},{5:225,25:[1,5],100:84,101:[1,62],103:[1,63],106:85,107:[1,65],108:66,123:[1,83],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{1:[2,134],6:[2,134],25:[2,134],26:[2,134],46:[2,134],51:[2,134],54:[2,134],69:[2,134],75:[2,134],83:[2,134],88:[2,134],90:[2,134],99:[2,134],100:84,101:[1,62],102:[1,226],103:[1,63],106:85,107:[1,65],108:66,115:[2,134],123:[2,134],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{1:[2,136],6:[2,136],25:[2,136],26:[2,136],46:[2,136],51:[2,136],54:[2,136],69:[2,136],75:[2,136],83:[2,136],88:[2,136],90:[2,136],99:[2,136],100:84,101:[1,62],102:[1,227],103:[1,63],106:85,107:[1,65],108:66,115:[2,136],123:[2,136],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{1:[2,142],6:[2,142],25:[2,142],26:[2,142],46:[2,142],51:[2,142],54:[2,142],69:[2,142],75:[2,142],83:[2,142],88:[2,142],90:[2,142],99:[2,142],101:[2,142],102:[2,142],103:[2,142],107:[2,142],115:[2,142],123:[2,142],125:[2,142],126:[2,142],129:[2,142],130:[2,142],131:[2,142],132:[2,142],133:[2,142],134:[2,142]},{1:[2,143],6:[2,143],25:[2,143],26:[2,143],46:[2,143],51:[2,143],54:[2,143],69:[2,143],75:[2,143],83:[2,143],88:[2,143],90:[2,143],99:[2,143],100:84,101:[1,62],102:[2,143],103:[1,63],106:85,107:[1,65],108:66,115:[2,143],123:[2,143],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{1:[2,147],6:[2,147],25:[2,147],26:[2,147],46:[2,147],51:[2,147],54:[2,147],69:[2,147],75:[2,147],83:[2,147],88:[2,147],90:[2,147],99:[2,147],101:[2,147],102:[2,147],103:[2,147],107:[2,147],115:[2,147],123:[2,147],125:[2,147],126:[2,147],129:[2,147],130:[2,147],131:[2,147],132:[2,147],133:[2,147],134:[2,147]},{113:[2,149],114:[2,149]},{27:156,28:[1,70],55:157,56:158,73:[1,67],87:[1,112],110:228,112:155},{51:[1,229],113:[2,154],114:[2,154]},{51:[2,151],113:[2,151],114:[2,151]},{51:[2,152],113:[2,152],114:[2,152]},{51:[2,153],113:[2,153],114:[2,153]},{1:[2,148],6:[2,148],25:[2,148],26:[2,148],46:[2,148],51:[2,148],54:[2,148],69:[2,148],75:[2,148],83:[2,148],88:[2,148],90:[2,148],99:[2,148],101:[2,148],102:[2,148],103:[2,148],107:[2,148],115:[2,148],123:[2,148],125:[2,148],126:[2,148],129:[2,148],130:[2,148],131:[2,148],132:[2,148],133:[2,148],134:[2,148]},{8:230,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:231,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{6:[2,49],25:[2,49],50:232,51:[1,233],75:[2,49]},{6:[2,86],25:[2,86],26:[2,86],51:[2,86],75:[2,86]},{6:[2,35],25:[2,35],26:[2,35],40:[1,234],51:[2,35],75:[2,35]},{6:[2,38],25:[2,38],26:[2,38],51:[2,38],75:[2,38]},{6:[2,39],25:[2,39],26:[2,39],40:[2,39],51:[2,39],75:[2,39]},{6:[2,40],25:[2,40],26:[2,40],40:[2,40],51:[2,40],75:[2,40]},{6:[2,41],25:[2,41],26:[2,41],40:[2,41],51:[2,41],75:[2,41]},{1:[2,5],6:[2,5],26:[2,5],99:[2,5]},{1:[2,25],6:[2,25],25:[2,25],26:[2,25],46:[2,25],51:[2,25],54:[2,25],69:[2,25],75:[2,25],83:[2,25],88:[2,25],90:[2,25],95:[2,25],96:[2,25],99:[2,25],101:[2,25],102:[2,25],103:[2,25],107:[2,25],115:[2,25],118:[2,25],120:[2,25],123:[2,25],125:[2,25],126:[2,25],129:[2,25],130:[2,25],131:[2,25],132:[2,25],133:[2,25],134:[2,25]},{1:[2,185],6:[2,185],25:[2,185],26:[2,185],46:[2,185],51:[2,185],54:[2,185],69:[2,185],75:[2,185],83:[2,185],88:[2,185],90:[2,185],99:[2,185],100:84,101:[2,185],102:[2,185],103:[2,185],106:85,107:[2,185],108:66,115:[2,185],123:[2,185],125:[2,185],126:[2,185],129:[1,75],130:[1,78],131:[2,185],132:[2,185],133:[2,185],134:[2,185]},{1:[2,186],6:[2,186],25:[2,186],26:[2,186],46:[2,186],51:[2,186],54:[2,186],69:[2,186],75:[2,186],83:[2,186],88:[2,186],90:[2,186],99:[2,186],100:84,101:[2,186],102:[2,186],103:[2,186],106:85,107:[2,186],108:66,115:[2,186],123:[2,186],125:[2,186],126:[2,186],129:[1,75],130:[1,78],131:[2,186],132:[2,186],133:[2,186],134:[2,186]},{1:[2,187],6:[2,187],25:[2,187],26:[2,187],46:[2,187],51:[2,187],54:[2,187],69:[2,187],75:[2,187],83:[2,187],88:[2,187],90:[2,187],99:[2,187],100:84,101:[2,187],102:[2,187],103:[2,187],106:85,107:[2,187],108:66,115:[2,187],123:[2,187],125:[2,187],126:[2,187],129:[1,75],130:[2,187],131:[2,187],132:[2,187],133:[2,187],134:[2,187]},{1:[2,188],6:[2,188],25:[2,188],26:[2,188],46:[2,188],51:[2,188],54:[2,188],69:[2,188],75:[2,188],83:[2,188],88:[2,188],90:[2,188],99:[2,188],100:84,101:[2,188],102:[2,188],103:[2,188],106:85,107:[2,188],108:66,115:[2,188],123:[2,188],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[2,188],132:[2,188],133:[2,188],134:[2,188]},{1:[2,189],6:[2,189],25:[2,189],26:[2,189],46:[2,189],51:[2,189],54:[2,189],69:[2,189],75:[2,189],83:[2,189],88:[2,189],90:[2,189],99:[2,189],100:84,101:[2,189],102:[2,189],103:[2,189],106:85,107:[2,189],108:66,115:[2,189],123:[2,189],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[2,189],133:[2,189],134:[1,82]},{1:[2,190],6:[2,190],25:[2,190],26:[2,190],46:[2,190],51:[2,190],54:[2,190],69:[2,190],75:[2,190],83:[2,190],88:[2,190],90:[2,190],99:[2,190],100:84,101:[2,190],102:[2,190],103:[2,190],106:85,107:[2,190],108:66,115:[2,190],123:[2,190],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[2,190],134:[1,82]},{1:[2,191],6:[2,191],25:[2,191],26:[2,191],46:[2,191],51:[2,191],54:[2,191],69:[2,191],75:[2,191],83:[2,191],88:[2,191],90:[2,191],99:[2,191],100:84,101:[2,191],102:[2,191],103:[2,191],106:85,107:[2,191],108:66,115:[2,191],123:[2,191],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[2,191],133:[2,191],134:[2,191]},{1:[2,176],6:[2,176],25:[2,176],26:[2,176],46:[2,176],51:[2,176],54:[2,176],69:[2,176],75:[2,176],83:[2,176],88:[2,176],90:[2,176],99:[2,176],100:84,101:[1,62],102:[2,176],103:[1,63],106:85,107:[1,65],108:66,115:[2,176],123:[1,83],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{1:[2,175],6:[2,175],25:[2,175],26:[2,175],46:[2,175],51:[2,175],54:[2,175],69:[2,175],75:[2,175],83:[2,175],88:[2,175],90:[2,175],99:[2,175],100:84,101:[1,62],102:[2,175],103:[1,63],106:85,107:[1,65],108:66,115:[2,175],123:[1,83],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{1:[2,98],6:[2,98],25:[2,98],26:[2,98],46:[2,98],51:[2,98],54:[2,98],63:[2,98],64:[2,98],65:[2,98],67:[2,98],69:[2,98],70:[2,98],71:[2,98],75:[2,98],81:[2,98],82:[2,98],83:[2,98],88:[2,98],90:[2,98],99:[2,98],101:[2,98],102:[2,98],103:[2,98],107:[2,98],115:[2,98],123:[2,98],125:[2,98],126:[2,98],129:[2,98],130:[2,98],131:[2,98],132:[2,98],133:[2,98],134:[2,98]},{1:[2,74],6:[2,74],25:[2,74],26:[2,74],37:[2,74],46:[2,74],51:[2,74],54:[2,74],63:[2,74],64:[2,74],65:[2,74],67:[2,74],69:[2,74],70:[2,74],71:[2,74],75:[2,74],77:[2,74],81:[2,74],82:[2,74],83:[2,74],88:[2,74],90:[2,74],99:[2,74],101:[2,74],102:[2,74],103:[2,74],107:[2,74],115:[2,74],123:[2,74],125:[2,74],126:[2,74],127:[2,74],128:[2,74],129:[2,74],130:[2,74],131:[2,74],132:[2,74],133:[2,74],134:[2,74],135:[2,74]},{1:[2,75],6:[2,75],25:[2,75],26:[2,75],37:[2,75],46:[2,75],51:[2,75],54:[2,75],63:[2,75],64:[2,75],65:[2,75],67:[2,75],69:[2,75],70:[2,75],71:[2,75],75:[2,75],77:[2,75],81:[2,75],82:[2,75],83:[2,75],88:[2,75],90:[2,75],99:[2,75],101:[2,75],102:[2,75],103:[2,75],107:[2,75],115:[2,75],123:[2,75],125:[2,75],126:[2,75],127:[2,75],128:[2,75],129:[2,75],130:[2,75],131:[2,75],132:[2,75],133:[2,75],134:[2,75],135:[2,75]},{1:[2,76],6:[2,76],25:[2,76],26:[2,76],37:[2,76],46:[2,76],51:[2,76],54:[2,76],63:[2,76],64:[2,76],65:[2,76],67:[2,76],69:[2,76],70:[2,76],71:[2,76],75:[2,76],77:[2,76],81:[2,76],82:[2,76],83:[2,76],88:[2,76],90:[2,76],99:[2,76],101:[2,76],102:[2,76],103:[2,76],107:[2,76],115:[2,76],123:[2,76],125:[2,76],126:[2,76],127:[2,76],128:[2,76],129:[2,76],130:[2,76],131:[2,76],132:[2,76],133:[2,76],134:[2,76],135:[2,76]},{69:[1,235]},{54:[1,189],69:[2,82],89:236,90:[1,188],100:84,101:[1,62],103:[1,63],106:85,107:[1,65],108:66,123:[1,83],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{69:[2,83]},{8:237,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{13:[2,111],28:[2,111],30:[2,111],31:[2,111],33:[2,111],34:[2,111],35:[2,111],42:[2,111],43:[2,111],44:[2,111],48:[2,111],49:[2,111],69:[2,111],73:[2,111],76:[2,111],80:[2,111],85:[2,111],86:[2,111],87:[2,111],93:[2,111],97:[2,111],98:[2,111],101:[2,111],103:[2,111],105:[2,111],107:[2,111],116:[2,111],122:[2,111],124:[2,111],125:[2,111],126:[2,111],127:[2,111],128:[2,111]},{13:[2,112],28:[2,112],30:[2,112],31:[2,112],33:[2,112],34:[2,112],35:[2,112],42:[2,112],43:[2,112],44:[2,112],48:[2,112],49:[2,112],69:[2,112],73:[2,112],76:[2,112],80:[2,112],85:[2,112],86:[2,112],87:[2,112],93:[2,112],97:[2,112],98:[2,112],101:[2,112],103:[2,112],105:[2,112],107:[2,112],116:[2,112],122:[2,112],124:[2,112],125:[2,112],126:[2,112],127:[2,112],128:[2,112]},{1:[2,80],6:[2,80],25:[2,80],26:[2,80],37:[2,80],46:[2,80],51:[2,80],54:[2,80],63:[2,80],64:[2,80],65:[2,80],67:[2,80],69:[2,80],70:[2,80],71:[2,80],75:[2,80],77:[2,80],81:[2,80],82:[2,80],83:[2,80],88:[2,80],90:[2,80],99:[2,80],101:[2,80],102:[2,80],103:[2,80],107:[2,80],115:[2,80],123:[2,80],125:[2,80],126:[2,80],127:[2,80],128:[2,80],129:[2,80],130:[2,80],131:[2,80],132:[2,80],133:[2,80],134:[2,80],135:[2,80]},{1:[2,81],6:[2,81],25:[2,81],26:[2,81],37:[2,81],46:[2,81],51:[2,81],54:[2,81],63:[2,81],64:[2,81],65:[2,81],67:[2,81],69:[2,81],70:[2,81],71:[2,81],75:[2,81],77:[2,81],81:[2,81],82:[2,81],83:[2,81],88:[2,81],90:[2,81],99:[2,81],101:[2,81],102:[2,81],103:[2,81],107:[2,81],115:[2,81],123:[2,81],125:[2,81],126:[2,81],127:[2,81],128:[2,81],129:[2,81],130:[2,81],131:[2,81],132:[2,81],133:[2,81],134:[2,81],135:[2,81]},{1:[2,99],6:[2,99],25:[2,99],26:[2,99],46:[2,99],51:[2,99],54:[2,99],63:[2,99],64:[2,99],65:[2,99],67:[2,99],69:[2,99],70:[2,99],71:[2,99],75:[2,99],81:[2,99],82:[2,99],83:[2,99],88:[2,99],90:[2,99],99:[2,99],101:[2,99],102:[2,99],103:[2,99],107:[2,99],115:[2,99],123:[2,99],125:[2,99],126:[2,99],129:[2,99],130:[2,99],131:[2,99],132:[2,99],133:[2,99],134:[2,99]},{1:[2,33],6:[2,33],25:[2,33],26:[2,33],46:[2,33],51:[2,33],54:[2,33],69:[2,33],75:[2,33],83:[2,33],88:[2,33],90:[2,33],99:[2,33],100:84,101:[2,33],102:[2,33],103:[2,33],106:85,107:[2,33],108:66,115:[2,33],123:[2,33],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{8:238,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,104],6:[2,104],25:[2,104],26:[2,104],46:[2,104],51:[2,104],54:[2,104],63:[2,104],64:[2,104],65:[2,104],67:[2,104],69:[2,104],70:[2,104],71:[2,104],75:[2,104],81:[2,104],82:[2,104],83:[2,104],88:[2,104],90:[2,104],99:[2,104],101:[2,104],102:[2,104],103:[2,104],107:[2,104],115:[2,104],123:[2,104],125:[2,104],126:[2,104],129:[2,104],130:[2,104],131:[2,104],132:[2,104],133:[2,104],134:[2,104]},{6:[2,49],25:[2,49],50:239,51:[1,223],83:[2,49]},{6:[2,122],25:[2,122],26:[2,122],51:[2,122],54:[1,240],83:[2,122],88:[2,122],100:84,101:[1,62],103:[1,63],106:85,107:[1,65],108:66,123:[1,83],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{47:241,48:[1,57],49:[1,58]},{27:107,28:[1,70],41:108,52:242,53:106,55:109,56:110,73:[1,67],86:[1,111],87:[1,112]},{46:[2,55],51:[2,55]},{8:243,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,192],6:[2,192],25:[2,192],26:[2,192],46:[2,192],51:[2,192],54:[2,192],69:[2,192],75:[2,192],83:[2,192],88:[2,192],90:[2,192],99:[2,192],100:84,101:[2,192],102:[2,192],103:[2,192],106:85,107:[2,192],108:66,115:[2,192],123:[2,192],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{8:244,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,194],6:[2,194],25:[2,194],26:[2,194],46:[2,194],51:[2,194],54:[2,194],69:[2,194],75:[2,194],83:[2,194],88:[2,194],90:[2,194],99:[2,194],100:84,101:[2,194],102:[2,194],103:[2,194],106:85,107:[2,194],108:66,115:[2,194],123:[2,194],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{1:[2,174],6:[2,174],25:[2,174],26:[2,174],46:[2,174],51:[2,174],54:[2,174],69:[2,174],75:[2,174],83:[2,174],88:[2,174],90:[2,174],99:[2,174],101:[2,174],102:[2,174],103:[2,174],107:[2,174],115:[2,174],123:[2,174],125:[2,174],126:[2,174],129:[2,174],130:[2,174],131:[2,174],132:[2,174],133:[2,174],134:[2,174]},{8:245,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,127],6:[2,127],25:[2,127],26:[2,127],46:[2,127],51:[2,127],54:[2,127],69:[2,127],75:[2,127],83:[2,127],88:[2,127],90:[2,127],95:[1,246],99:[2,127],101:[2,127],102:[2,127],103:[2,127],107:[2,127],115:[2,127],123:[2,127],125:[2,127],126:[2,127],129:[2,127],130:[2,127],131:[2,127],132:[2,127],133:[2,127],134:[2,127]},{5:247,25:[1,5]},{27:248,28:[1,70]},{117:249,119:212,120:[1,213]},{26:[1,250],118:[1,251],119:252,120:[1,213]},{26:[2,167],118:[2,167],120:[2,167]},{8:254,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],92:253,93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,92],5:255,6:[2,92],25:[1,5],26:[2,92],46:[2,92],51:[2,92],54:[2,92],59:90,63:[1,92],64:[1,93],65:[1,94],66:95,67:[1,96],69:[2,92],70:[1,97],71:[1,98],75:[2,92],78:89,81:[1,91],82:[2,102],83:[2,92],88:[2,92],90:[2,92],99:[2,92],101:[2,92],102:[2,92],103:[2,92],107:[2,92],115:[2,92],123:[2,92],125:[2,92],126:[2,92],129:[2,92],130:[2,92],131:[2,92],132:[2,92],133:[2,92],134:[2,92]},{1:[2,66],6:[2,66],25:[2,66],26:[2,66],46:[2,66],51:[2,66],54:[2,66],63:[2,66],64:[2,66],65:[2,66],67:[2,66],69:[2,66],70:[2,66],71:[2,66],75:[2,66],81:[2,66],82:[2,66],83:[2,66],88:[2,66],90:[2,66],99:[2,66],101:[2,66],102:[2,66],103:[2,66],107:[2,66],115:[2,66],123:[2,66],125:[2,66],126:[2,66],129:[2,66],130:[2,66],131:[2,66],132:[2,66],133:[2,66],134:[2,66]},{1:[2,95],6:[2,95],25:[2,95],26:[2,95],46:[2,95],51:[2,95],54:[2,95],69:[2,95],75:[2,95],83:[2,95],88:[2,95],90:[2,95],99:[2,95],101:[2,95],102:[2,95],103:[2,95],107:[2,95],115:[2,95],123:[2,95],125:[2,95],126:[2,95],129:[2,95],130:[2,95],131:[2,95],132:[2,95],133:[2,95],134:[2,95]},{14:256,15:120,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:121,41:60,55:47,56:48,58:215,60:25,61:26,62:27,73:[1,67],80:[1,28],85:[1,55],86:[1,56],87:[1,54],98:[1,53]},{1:[2,132],6:[2,132],25:[2,132],26:[2,132],46:[2,132],51:[2,132],54:[2,132],63:[2,132],64:[2,132],65:[2,132],67:[2,132],69:[2,132],70:[2,132],71:[2,132],75:[2,132],81:[2,132],82:[2,132],83:[2,132],88:[2,132],90:[2,132],99:[2,132],101:[2,132],102:[2,132],103:[2,132],107:[2,132],115:[2,132],123:[2,132],125:[2,132],126:[2,132],129:[2,132],130:[2,132],131:[2,132],132:[2,132],133:[2,132],134:[2,132]},{6:[1,71],26:[1,257]},{8:258,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{6:[2,61],13:[2,112],25:[2,61],28:[2,112],30:[2,112],31:[2,112],33:[2,112],34:[2,112],35:[2,112],42:[2,112],43:[2,112],44:[2,112],48:[2,112],49:[2,112],51:[2,61],73:[2,112],76:[2,112],80:[2,112],85:[2,112],86:[2,112],87:[2,112],88:[2,61],93:[2,112],97:[2,112],98:[2,112],101:[2,112],103:[2,112],105:[2,112],107:[2,112],116:[2,112],122:[2,112],124:[2,112],125:[2,112],126:[2,112],127:[2,112],128:[2,112]},{6:[1,260],25:[1,261],88:[1,259]},{6:[2,50],8:197,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,25:[2,50],26:[2,50],27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,57:145,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],83:[2,50],85:[1,55],86:[1,56],87:[1,54],88:[2,50],91:262,93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{6:[2,49],25:[2,49],26:[2,49],50:263,51:[1,223]},{1:[2,171],6:[2,171],25:[2,171],26:[2,171],46:[2,171],51:[2,171],54:[2,171],69:[2,171],75:[2,171],83:[2,171],88:[2,171],90:[2,171],99:[2,171],101:[2,171],102:[2,171],103:[2,171],107:[2,171],115:[2,171],118:[2,171],123:[2,171],125:[2,171],126:[2,171],129:[2,171],130:[2,171],131:[2,171],132:[2,171],133:[2,171],134:[2,171]},{8:264,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:265,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{113:[2,150],114:[2,150]},{27:156,28:[1,70],55:157,56:158,73:[1,67],87:[1,112],112:266},{1:[2,156],6:[2,156],25:[2,156],26:[2,156],46:[2,156],51:[2,156],54:[2,156],69:[2,156],75:[2,156],83:[2,156],88:[2,156],90:[2,156],99:[2,156],100:84,101:[2,156],102:[1,267],103:[2,156],106:85,107:[2,156],108:66,115:[1,268],123:[2,156],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{1:[2,157],6:[2,157],25:[2,157],26:[2,157],46:[2,157],51:[2,157],54:[2,157],69:[2,157],75:[2,157],83:[2,157],88:[2,157],90:[2,157],99:[2,157],100:84,101:[2,157],102:[1,269],103:[2,157],106:85,107:[2,157],108:66,115:[2,157],123:[2,157],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{6:[1,271],25:[1,272],75:[1,270]},{6:[2,50],12:165,25:[2,50],26:[2,50],27:166,28:[1,70],29:167,30:[1,68],31:[1,69],38:273,39:164,41:168,43:[1,46],75:[2,50],86:[1,111]},{8:274,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,25:[1,275],27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,79],6:[2,79],25:[2,79],26:[2,79],37:[2,79],46:[2,79],51:[2,79],54:[2,79],63:[2,79],64:[2,79],65:[2,79],67:[2,79],69:[2,79],70:[2,79],71:[2,79],75:[2,79],77:[2,79],81:[2,79],82:[2,79],83:[2,79],88:[2,79],90:[2,79],99:[2,79],101:[2,79],102:[2,79],103:[2,79],107:[2,79],115:[2,79],123:[2,79],125:[2,79],126:[2,79],127:[2,79],128:[2,79],129:[2,79],130:[2,79],131:[2,79],132:[2,79],133:[2,79],134:[2,79],135:[2,79]},{8:276,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,69:[2,115],73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{69:[2,116],100:84,101:[1,62],103:[1,63],106:85,107:[1,65],108:66,123:[1,83],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{26:[1,277],100:84,101:[1,62],103:[1,63],106:85,107:[1,65],108:66,123:[1,83],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{6:[1,260],25:[1,261],83:[1,278]},{6:[2,61],25:[2,61],26:[2,61],51:[2,61],83:[2,61],88:[2,61]},{5:279,25:[1,5]},{46:[2,53],51:[2,53]},{46:[2,56],51:[2,56],100:84,101:[1,62],103:[1,63],106:85,107:[1,65],108:66,123:[1,83],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{26:[1,280],100:84,101:[1,62],103:[1,63],106:85,107:[1,65],108:66,123:[1,83],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{5:281,25:[1,5],100:84,101:[1,62],103:[1,63],106:85,107:[1,65],108:66,123:[1,83],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{5:282,25:[1,5]},{1:[2,128],6:[2,128],25:[2,128],26:[2,128],46:[2,128],51:[2,128],54:[2,128],69:[2,128],75:[2,128],83:[2,128],88:[2,128],90:[2,128],99:[2,128],101:[2,128],102:[2,128],103:[2,128],107:[2,128],115:[2,128],123:[2,128],125:[2,128],126:[2,128],129:[2,128],130:[2,128],131:[2,128],132:[2,128],133:[2,128],134:[2,128]},{5:283,25:[1,5]},{26:[1,284],118:[1,285],119:252,120:[1,213]},{1:[2,165],6:[2,165],25:[2,165],26:[2,165],46:[2,165],51:[2,165],54:[2,165],69:[2,165],75:[2,165],83:[2,165],88:[2,165],90:[2,165],99:[2,165],101:[2,165],102:[2,165],103:[2,165],107:[2,165],115:[2,165],123:[2,165],125:[2,165],126:[2,165],129:[2,165],130:[2,165],131:[2,165],132:[2,165],133:[2,165],134:[2,165]},{5:286,25:[1,5]},{26:[2,168],118:[2,168],120:[2,168]},{5:287,25:[1,5],51:[1,288]},{25:[2,124],51:[2,124],100:84,101:[1,62],103:[1,63],106:85,107:[1,65],108:66,123:[1,83],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{1:[2,93],6:[2,93],25:[2,93],26:[2,93],46:[2,93],51:[2,93],54:[2,93],69:[2,93],75:[2,93],83:[2,93],88:[2,93],90:[2,93],99:[2,93],101:[2,93],102:[2,93],103:[2,93],107:[2,93],115:[2,93],123:[2,93],125:[2,93],126:[2,93],129:[2,93],130:[2,93],131:[2,93],132:[2,93],133:[2,93],134:[2,93]},{1:[2,96],5:289,6:[2,96],25:[1,5],26:[2,96],46:[2,96],51:[2,96],54:[2,96],59:90,63:[1,92],64:[1,93],65:[1,94],66:95,67:[1,96],69:[2,96],70:[1,97],71:[1,98],75:[2,96],78:89,81:[1,91],82:[2,102],83:[2,96],88:[2,96],90:[2,96],99:[2,96],101:[2,96],102:[2,96],103:[2,96],107:[2,96],115:[2,96],123:[2,96],125:[2,96],126:[2,96],129:[2,96],130:[2,96],131:[2,96],132:[2,96],133:[2,96],134:[2,96]},{99:[1,290]},{88:[1,291],100:84,101:[1,62],103:[1,63],106:85,107:[1,65],108:66,123:[1,83],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{1:[2,110],6:[2,110],25:[2,110],26:[2,110],37:[2,110],46:[2,110],51:[2,110],54:[2,110],63:[2,110],64:[2,110],65:[2,110],67:[2,110],69:[2,110],70:[2,110],71:[2,110],75:[2,110],81:[2,110],82:[2,110],83:[2,110],88:[2,110],90:[2,110],99:[2,110],101:[2,110],102:[2,110],103:[2,110],107:[2,110],113:[2,110],114:[2,110],115:[2,110],123:[2,110],125:[2,110],126:[2,110],129:[2,110],130:[2,110],131:[2,110],132:[2,110],133:[2,110],134:[2,110]},{8:197,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,57:145,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],91:292,93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:197,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,25:[1,144],27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,57:145,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],84:293,85:[1,55],86:[1,56],87:[1,54],91:143,93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{6:[2,118],25:[2,118],26:[2,118],51:[2,118],83:[2,118],88:[2,118]},{6:[1,260],25:[1,261],26:[1,294]},{1:[2,135],6:[2,135],25:[2,135],26:[2,135],46:[2,135],51:[2,135],54:[2,135],69:[2,135],75:[2,135],83:[2,135],88:[2,135],90:[2,135],99:[2,135],100:84,101:[1,62],102:[2,135],103:[1,63],106:85,107:[1,65],108:66,115:[2,135],123:[2,135],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{1:[2,137],6:[2,137],25:[2,137],26:[2,137],46:[2,137],51:[2,137],54:[2,137],69:[2,137],75:[2,137],83:[2,137],88:[2,137],90:[2,137],99:[2,137],100:84,101:[1,62],102:[2,137],103:[1,63],106:85,107:[1,65],108:66,115:[2,137],123:[2,137],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{113:[2,155],114:[2,155]},{8:295,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:296,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:297,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,84],6:[2,84],25:[2,84],26:[2,84],37:[2,84],46:[2,84],51:[2,84],54:[2,84],63:[2,84],64:[2,84],65:[2,84],67:[2,84],69:[2,84],70:[2,84],71:[2,84],75:[2,84],81:[2,84],82:[2,84],83:[2,84],88:[2,84],90:[2,84],99:[2,84],101:[2,84],102:[2,84],103:[2,84],107:[2,84],113:[2,84],114:[2,84],115:[2,84],123:[2,84],125:[2,84],126:[2,84],129:[2,84],130:[2,84],131:[2,84],132:[2,84],133:[2,84],134:[2,84]},{12:165,27:166,28:[1,70],29:167,30:[1,68],31:[1,69],38:298,39:164,41:168,43:[1,46],86:[1,111]},{6:[2,85],12:165,25:[2,85],26:[2,85],27:166,28:[1,70],29:167,30:[1,68],31:[1,69],38:163,39:164,41:168,43:[1,46],51:[2,85],74:299,86:[1,111]},{6:[2,87],25:[2,87],26:[2,87],51:[2,87],75:[2,87]},{6:[2,36],25:[2,36],26:[2,36],51:[2,36],75:[2,36],100:84,101:[1,62],103:[1,63],106:85,107:[1,65],108:66,123:[1,83],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{8:300,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{69:[2,114],100:84,101:[1,62],103:[1,63],106:85,107:[1,65],108:66,123:[1,83],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{1:[2,34],6:[2,34],25:[2,34],26:[2,34],46:[2,34],51:[2,34],54:[2,34],69:[2,34],75:[2,34],83:[2,34],88:[2,34],90:[2,34],99:[2,34],101:[2,34],102:[2,34],103:[2,34],107:[2,34],115:[2,34],123:[2,34],125:[2,34],126:[2,34],129:[2,34],130:[2,34],131:[2,34],132:[2,34],133:[2,34],134:[2,34]},{1:[2,105],6:[2,105],25:[2,105],26:[2,105],46:[2,105],51:[2,105],54:[2,105],63:[2,105],64:[2,105],65:[2,105],67:[2,105],69:[2,105],70:[2,105],71:[2,105],75:[2,105],81:[2,105],82:[2,105],83:[2,105],88:[2,105],90:[2,105],99:[2,105],101:[2,105],102:[2,105],103:[2,105],107:[2,105],115:[2,105],123:[2,105],125:[2,105],126:[2,105],129:[2,105],130:[2,105],131:[2,105],132:[2,105],133:[2,105],134:[2,105]},{1:[2,45],6:[2,45],25:[2,45],26:[2,45],46:[2,45],51:[2,45],54:[2,45],69:[2,45],75:[2,45],83:[2,45],88:[2,45],90:[2,45],99:[2,45],101:[2,45],102:[2,45],103:[2,45],107:[2,45],115:[2,45],123:[2,45],125:[2,45],126:[2,45],129:[2,45],130:[2,45],131:[2,45],132:[2,45],133:[2,45],134:[2,45]},{1:[2,193],6:[2,193],25:[2,193],26:[2,193],46:[2,193],51:[2,193],54:[2,193],69:[2,193],75:[2,193],83:[2,193],88:[2,193],90:[2,193],99:[2,193],101:[2,193],102:[2,193],103:[2,193],107:[2,193],115:[2,193],123:[2,193],125:[2,193],126:[2,193],129:[2,193],130:[2,193],131:[2,193],132:[2,193],133:[2,193],134:[2,193]},{1:[2,172],6:[2,172],25:[2,172],26:[2,172],46:[2,172],51:[2,172],54:[2,172],69:[2,172],75:[2,172],83:[2,172],88:[2,172],90:[2,172],99:[2,172],101:[2,172],102:[2,172],103:[2,172],107:[2,172],115:[2,172],118:[2,172],123:[2,172],125:[2,172],126:[2,172],129:[2,172],130:[2,172],131:[2,172],132:[2,172],133:[2,172],134:[2,172]},{1:[2,129],6:[2,129],25:[2,129],26:[2,129],46:[2,129],51:[2,129],54:[2,129],69:[2,129],75:[2,129],83:[2,129],88:[2,129],90:[2,129],99:[2,129],101:[2,129],102:[2,129],103:[2,129],107:[2,129],115:[2,129],123:[2,129],125:[2,129],126:[2,129],129:[2,129],130:[2,129],131:[2,129],132:[2,129],133:[2,129],134:[2,129]},{1:[2,130],6:[2,130],25:[2,130],26:[2,130],46:[2,130],51:[2,130],54:[2,130],69:[2,130],75:[2,130],83:[2,130],88:[2,130],90:[2,130],95:[2,130],99:[2,130],101:[2,130],102:[2,130],103:[2,130],107:[2,130],115:[2,130],123:[2,130],125:[2,130],126:[2,130],129:[2,130],130:[2,130],131:[2,130],132:[2,130],133:[2,130],134:[2,130]},{1:[2,163],6:[2,163],25:[2,163],26:[2,163],46:[2,163],51:[2,163],54:[2,163],69:[2,163],75:[2,163],83:[2,163],88:[2,163],90:[2,163],99:[2,163],101:[2,163],102:[2,163],103:[2,163],107:[2,163],115:[2,163],123:[2,163],125:[2,163],126:[2,163],129:[2,163],130:[2,163],131:[2,163],132:[2,163],133:[2,163],134:[2,163]},{5:301,25:[1,5]},{26:[1,302]},{6:[1,303],26:[2,169],118:[2,169],120:[2,169]},{8:304,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,97],6:[2,97],25:[2,97],26:[2,97],46:[2,97],51:[2,97],54:[2,97],69:[2,97],75:[2,97],83:[2,97],88:[2,97],90:[2,97],99:[2,97],101:[2,97],102:[2,97],103:[2,97],107:[2,97],115:[2,97],123:[2,97],125:[2,97],126:[2,97],129:[2,97],130:[2,97],131:[2,97],132:[2,97],133:[2,97],134:[2,97]},{1:[2,133],6:[2,133],25:[2,133],26:[2,133],46:[2,133],51:[2,133],54:[2,133],63:[2,133],64:[2,133],65:[2,133],67:[2,133],69:[2,133],70:[2,133],71:[2,133],75:[2,133],81:[2,133],82:[2,133],83:[2,133],88:[2,133],90:[2,133],99:[2,133],101:[2,133],102:[2,133],103:[2,133],107:[2,133],115:[2,133],123:[2,133],125:[2,133],126:[2,133],129:[2,133],130:[2,133],131:[2,133],132:[2,133],133:[2,133],134:[2,133]},{1:[2,113],6:[2,113],25:[2,113],26:[2,113],46:[2,113],51:[2,113],54:[2,113],63:[2,113],64:[2,113],65:[2,113],67:[2,113],69:[2,113],70:[2,113],71:[2,113],75:[2,113],81:[2,113],82:[2,113],83:[2,113],88:[2,113],90:[2,113],99:[2,113],101:[2,113],102:[2,113],103:[2,113],107:[2,113],115:[2,113],123:[2,113],125:[2,113],126:[2,113],129:[2,113],130:[2,113],131:[2,113],132:[2,113],133:[2,113],134:[2,113]},{6:[2,119],25:[2,119],26:[2,119],51:[2,119],83:[2,119],88:[2,119]},{6:[2,49],25:[2,49],26:[2,49],50:305,51:[1,223]},{6:[2,120],25:[2,120],26:[2,120],51:[2,120],83:[2,120],88:[2,120]},{1:[2,158],6:[2,158],25:[2,158],26:[2,158],46:[2,158],51:[2,158],54:[2,158],69:[2,158],75:[2,158],83:[2,158],88:[2,158],90:[2,158],99:[2,158],100:84,101:[2,158],102:[2,158],103:[2,158],106:85,107:[2,158],108:66,115:[1,306],123:[2,158],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{1:[2,160],6:[2,160],25:[2,160],26:[2,160],46:[2,160],51:[2,160],54:[2,160],69:[2,160],75:[2,160],83:[2,160],88:[2,160],90:[2,160],99:[2,160],100:84,101:[2,160],102:[1,307],103:[2,160],106:85,107:[2,160],108:66,115:[2,160],123:[2,160],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{1:[2,159],6:[2,159],25:[2,159],26:[2,159],46:[2,159],51:[2,159],54:[2,159],69:[2,159],75:[2,159],83:[2,159],88:[2,159],90:[2,159],99:[2,159],100:84,101:[2,159],102:[2,159],103:[2,159],106:85,107:[2,159],108:66,115:[2,159],123:[2,159],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{6:[2,88],25:[2,88],26:[2,88],51:[2,88],75:[2,88]},{6:[2,49],25:[2,49],26:[2,49],50:308,51:[1,233]},{26:[1,309],100:84,101:[1,62],103:[1,63],106:85,107:[1,65],108:66,123:[1,83],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{26:[1,310]},{1:[2,166],6:[2,166],25:[2,166],26:[2,166],46:[2,166],51:[2,166],54:[2,166],69:[2,166],75:[2,166],83:[2,166],88:[2,166],90:[2,166],99:[2,166],101:[2,166],102:[2,166],103:[2,166],107:[2,166],115:[2,166],123:[2,166],125:[2,166],126:[2,166],129:[2,166],130:[2,166],131:[2,166],132:[2,166],133:[2,166],134:[2,166]},{26:[2,170],118:[2,170],120:[2,170]},{25:[2,125],51:[2,125],100:84,101:[1,62],103:[1,63],106:85,107:[1,65],108:66,123:[1,83],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{6:[1,260],25:[1,261],26:[1,311]},{8:312,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:313,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{6:[1,271],25:[1,272],26:[1,314]},{6:[2,37],25:[2,37],26:[2,37],51:[2,37],75:[2,37]},{1:[2,164],6:[2,164],25:[2,164],26:[2,164],46:[2,164],51:[2,164],54:[2,164],69:[2,164],75:[2,164],83:[2,164],88:[2,164],90:[2,164],99:[2,164],101:[2,164],102:[2,164],103:[2,164],107:[2,164],115:[2,164],123:[2,164],125:[2,164],126:[2,164],129:[2,164],130:[2,164],131:[2,164],132:[2,164],133:[2,164],134:[2,164]},{6:[2,121],25:[2,121],26:[2,121],51:[2,121],83:[2,121],88:[2,121]},{1:[2,161],6:[2,161],25:[2,161],26:[2,161],46:[2,161],51:[2,161],54:[2,161],69:[2,161],75:[2,161],83:[2,161],88:[2,161],90:[2,161],99:[2,161],100:84,101:[2,161],102:[2,161],103:[2,161],106:85,107:[2,161],108:66,115:[2,161],123:[2,161],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{1:[2,162],6:[2,162],25:[2,162],26:[2,162],46:[2,162],51:[2,162],54:[2,162],69:[2,162],75:[2,162],83:[2,162],88:[2,162],90:[2,162],99:[2,162],100:84,101:[2,162],102:[2,162],103:[2,162],106:85,107:[2,162],108:66,115:[2,162],123:[2,162],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{6:[2,89],25:[2,89],26:[2,89],51:[2,89],75:[2,89]}],defaultActions:{57:[2,47],58:[2,48],72:[2,3],91:[2,103],186:[2,83]},parseError:function(a,b){throw new Error(a)},parse:function h(a){function o(){var a;a=b.lexer.lex()||1,typeof a!="number"&&(a=b.symbols_[a]||a);return a}function n(a){c.length=c.length-2*a,d.length=d.length-a,e.length=e.length-a}var b=this,c=[0],d=[null],e=[],f=this.table,g="",h=0,i=0,j=0,k=2,l=1;this.lexer.setInput(a),this.lexer.yy=this.yy,this.yy.lexer=this.lexer,typeof this.lexer.yylloc=="undefined"&&(this.lexer.yylloc={});var m=this.lexer.yylloc;e.push(m),typeof this.yy.parseError=="function"&&(this.parseError=this.yy.parseError);var p,q,r,s,t,u,v={},w,x,y,z;for(;;){r=c[c.length-1],this.defaultActions[r]?s=this.defaultActions[r]:(p==null&&(p=o()),s=f[r]&&f[r][p]);if(typeof s=="undefined"||!s.length||!s[0]){if(!j){z=[];for(w in f[r])this.terminals_[w]&&w>2&&z.push("'"+this.terminals_[w]+"'");var A="";this.lexer.showPosition?A="Parse error on line "+(h+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+z.join(", "):A="Parse error on line "+(h+1)+": Unexpected "+(p==1?"end of input":"'"+(this.terminals_[p]||p)+"'"),this.parseError(A,{text:this.lexer.match,token:this.terminals_[p]||p,line:this.lexer.yylineno,loc:m,expected:z})}if(j==3){if(p==l)throw new Error(A||"Parsing halted.");i=this.lexer.yyleng,g=this.lexer.yytext,h=this.lexer.yylineno,m=this.lexer.yylloc,p=o()}for(;;){if(k.toString()in f[r])break;if(r==0)throw new Error(A||"Parsing halted.");n(1),r=c[c.length-1]}q=p,p=k,r=c[c.length-1],s=f[r]&&f[r][k],j=3}if(s[0]instanceof Array&&s.length>1)throw new Error("Parse Error: multiple actions possible at state: "+r+", token: "+p);switch(s[0]){case 1:c.push(p),d.push(this.lexer.yytext),e.push(this.lexer.yylloc),c.push(s[1]),p=null,q?(p=q,q=null):(i=this.lexer.yyleng,g=this.lexer.yytext,h=this.lexer.yylineno,m=this.lexer.yylloc,j>0&&j--);break;case 2:x=this.productions_[s[1]][1],v.$=d[d.length-x],v._$={first_line:e[e.length-(x||1)].first_line,last_line:e[e.length-1].last_line,first_column:e[e.length-(x||1)].first_column,last_column:e[e.length-1].last_column},u=this.performAction.call(v,g,i,h,this.yy,s[1],d,e);if(typeof u!="undefined")return u;x&&(c=c.slice(0,-1*x*2),d=d.slice(0,-1*x),e=e.slice(0,-1*x)),c.push(this.productions_[s[1]][0]),d.push(v.$),e.push(v._$),y=f[c[c.length-2]][c[c.length-1]],c.push(y);break;case 3:return!0}}return!0}};c.exports=d}),define("ace/mode/coffee/nodes",["require","exports","module","ace/mode/coffee/scope","ace/mode/coffee/helpers"],function(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,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,$,_,ba,bb,bc,bd,be,bf,bg,bh,bi,bj=Object.prototype.hasOwnProperty,bk=function(a,b){function d(){this.constructor=a}for(var c in b)bj.call(b,c)&&(a[c]=b[c]);d.prototype=b.prototype,a.prototype=new d,a.__super__=b.prototype;return a},bl=function(a,b){return function(){return a.apply(b,arguments)}},bm=Array.prototype.indexOf||function(a){for(var b=0,c=this.length;b<c;b++)if(this[b]===a)return b;return-1};N=a("ace/mode/coffee/scope").Scope,bi=a("ace/mode/coffee/helpers"),Z=bi.compact,bb=bi.flatten,ba=bi.extend,bd=bi.merge,$=bi.del,bf=bi.starts,_=bi.ends,bc=bi.last,b.extend=ba,Y=function(){return!0},E=function(){return!1},S=function(){return this},D=function(){this.negated=!this.negated;return this},b.Base=g=function(){function a(){}a.prototype.compile=function(a,b){var c;a=ba({},a),b&&(a.level=b),c=this.unfoldSoak(a)||this,c.tab=a.indent;return a.level===A||!c.isStatement(a)?c.compileNode(a):c.compileClosure(a)},a.prototype.compileClosure=function(a){if(this.jumps()||this instanceof T)throw SyntaxError("cannot use a pure statement in an expression.");a.sharedScope=!0;return k.wrap(this).compileNode(a)},a.prototype.cache=function(a,b,c){var d,e;if(!this.isComplex()){d=b?this.compile(a,b):this;return[d,d]}d=new B(c||a.scope.freeVariable("ref")),e=new f(d,this);return b?[e.compile(a,b),d.value]:[e,d]},a.prototype.compileLoopReference=function(a,b){var c,d;c=d=this.compile(a,x),-Infinity<+c&&+c<Infinity||q.test(c)&&a.scope.check(c,!0)||(c=""+(d=a.scope.freeVariable(b))+" = "+c);return[c,d]},a.prototype.makeReturn=function(){return new L(this)},a.prototype.contains=function(a){var b;b=!1,this.traverseChildren(!1,function(c){if(a(c)){b=!0;return!1}});return b},a.prototype.containsType=function(a){return this instanceof a||this.contains(function(b){return b instanceof a})},a.prototype.lastNonComment=function(a){var b;b=a.length;while(b--)if(!(a[b]instanceof m))return a[b];return null},a.prototype.toString=function(a,b){var c;a==null&&(a=""),b==null&&(b=this.constructor.name),c="\n"+a+b,this.soak&&(c+="?"),this.eachChild(function(b){return c+=b.toString(a+R)});return c},a.prototype.eachChild=function(a){var b,c,d,e,f,g,h,i;if(!this.children)return this;h=this.children;for(d=0,f=h.length;d<f;d++){b=h[d];if(this[b]){i=bb([this[b]]);for(e=0,g=i.length;e<g;e++){c=i[e];if(a(c)===!1)return this}}}return this},a.prototype.traverseChildren=function(a,b){return this.eachChild(function(c){return b(c)===!1?!1:c.traverseChildren(a,b)})},a.prototype.invert=function(){return new G("!",this)},a.prototype.unwrapAll=function(){var a;a=this;while(a!==(a=a.unwrap()))continue;return a},a.prototype.children=[],a.prototype.isStatement=E,a.prototype.jumps=E,a.prototype.isComplex=Y,a.prototype.isChainable=E,a.prototype.isAssignable=E,a.prototype.unwrap=S,a.prototype.unfoldSoak=E,a.prototype.assigns=E;return a}(),b.Block=h=function(){function a(a){this.expressions=Z(bb(a||[]))}bk(a,g),a.prototype.children=["expressions"],a.prototype.push=function(a){this.expressions.push(a);return this},a.prototype.pop=function(){return this.expressions.pop()},a.prototype.unshift=function(a){this.expressions.unshift(a);return this},a.prototype.unwrap=function(){return this.expressions.length===1?this.expressions[0]:this},a.prototype.isEmpty=function(){return!this.expressions.length},a.prototype.isStatement=function(a){var b,c,d,e;e=this.expressions;for(c=0,d=e.length;c<d;c++){b=e[c];if(b.isStatement(a))return!0}return!1},a.prototype.jumps=function(a){var b,c,d,e;e=this.expressions;for(c=0,d=e.length;c<d;c++){b=e[c];if(b.jumps(a))return b}},a.prototype.makeReturn=function(){var a,b;b=this.expressions.length;while(b--){a=this.expressions[b];if(!(a instanceof m)){this.expressions[b]=a.makeReturn(),a instanceof L&&!a.expression&&this.expressions.splice(b,1);break}}return this},a.prototype.compile=function(b,c){b==null&&(b={});return b.scope?a.__super__.compile.call(this,b,c):this.compileRoot(b)},a.prototype.compileNode=function(a){var b,c,d,e,f,g,h;this.tab=a.indent,e=a.level===A,c=[],h=this.expressions;for(f=0,g=h.length;f<g;f++)d=h[f],d=d.unwrapAll(),d=d.unfoldSoak(a)||d,e?(d.front=!0,b=d.compile(a),c.push(d.isStatement(a)?b:this.tab+b+";")):c.push(d.compile(a,x));if(e)return c.join("\n");b=c.join(", ")||"void 0";return c.length>1&&a.level>=x?"("+b+")":b},a.prototype.compileRoot=function(a){var b;a.indent=this.tab=a.bare?"":R,a.scope=new N(null,this,null),a.level=A,b=this.compileWithDeclarations(a);return a.bare?b:"(function() {\n"+b+"\n}).call(this);\n"},a.prototype.compileWithDeclarations=function(a){var b,c,d,e,f,g,h,i,j,k;c=g="",k=this.expressions;for(f=0,j=k.length;f<j;f++){e=k[f],e=e.unwrap();if(!(e instanceof m||e instanceof B))break}a=bd(a,{level:A}),f&&(h=this.expressions.splice(f,this.expressions.length),c=this.compileNode(a),this.expressions=h),g=this.compileNode(a),i=a.scope,i.expressions===this&&(d=a.scope.hasDeclarations(),b=i.hasAssignments,(d||b)&&f&&(c+="\n"),d&&(c+=""+this.tab+"var "+i.declaredVariables().join(", ")+";\n"),b&&(c+=""+this.tab+"var "+be(i.assignedVariables().join(", "),this.tab)+";\n"));return c+g},a.wrap=function(b){return b.length===1&&b[0]instanceof a?b[0]:new a(b)};return a}(),b.Literal=B=function(){function a(a){this.value=a}bk(a,g),a.prototype.makeReturn=function(){return this.isStatement()?this:new L(this)},a.prototype.isAssignable=function(){return q.test(this.value)},a.prototype.isStatement=function(){var a;return(a=this.value)==="break"||a==="continue"||a==="debugger"},a.prototype.isComplex=E,a.prototype.assigns=function(a){return a===this.value},a.prototype.jumps=function(a){return this.isStatement()?!a||!(a.loop||a.block&&this.value!=="continue")?this:!1:!1},a.prototype.compileNode=function(a){var b;b=this.isUndefined?a.level>=v?"(void 0)":"void 0":this.value.reserved?'"'+this.value+'"':this.value;return this.isStatement()?""+this.tab+b+";":b},a.prototype.toString=function(){return' "'+this.value+'"'};return a}(),b.Return=L=function(){function a(a){a&&!a.unwrap().isUndefined&&(this.expression=a)}bk(a,g),a.prototype.children=["expression"],a.prototype.isStatement=Y,a.prototype.makeReturn=S,a.prototype.jumps=S,a.prototype.compile=function(b,c){var d,e;d=(e=this.expression)!=null?e.makeReturn():void 0;return!d||d instanceof a?a.__super__.compile.call(this,b,c):d.compile(b,c)},a.prototype.compileNode=function(a){return this.tab+("return"+(this.expression?" "+this.expression.compile(a,z):"")+";")};return a}(),b.Value=W=function(){function a(b,c,d){if(!c&&b instanceof a)return b;this.base=b,this.properties=c||[],d&&(this[d]=!0);return this}bk(a,g),a.prototype.children=["base","properties"],a.prototype.push=function(a){this.properties.push(a);return this},a.prototype.hasProperties=function(){return!!this.properties.length},a.prototype.isArray=function(){return!this.properties.length&&this.base instanceof e},a.prototype.isComplex=function(){return this.hasProperties()||this.base.isComplex()},a.prototype.isAssignable=function(){return this.hasProperties()||this.base.isAssignable()},a.prototype.isSimpleNumber=function(){return this.base instanceof B&&M.test(this.base.value)},a.prototype.isAtomic=function(){var a,b,c,d;d=this.properties.concat(this.base);for(b=0,c=d.length;b<c;b++){a=d[b];if(a.soak||a instanceof i)return!1}return!0},a.prototype.isStatement=function(a){return!this.properties.length&&this.base.isStatement(a)},a.prototype.assigns=function(a){return!this.properties.length&&this.base.assigns(a)},a.prototype.jumps=function(a){return!this.properties.length&&this.base.jumps(a)},a.prototype.isObject=function(a){return this.properties.length?!1:this.base instanceof F&&(!a||this.base.generated)},a.prototype.isSplice=function(){return bc(this.properties)instanceof O},a.prototype.makeReturn=function(){return this.properties.length?a.__super__.makeReturn.call(this):this.base.makeReturn()},a.prototype.unwrap=function(){return this.properties.length?this:this.base},a.prototype.cacheReference=function(b){var c,d,e,g;e=bc(this.properties);if(this.properties.length<2&&!this.base.isComplex()&&(e!=null?!e.isComplex():!void 0))return[this,this];c=new a(this.base,this.properties.slice(0,-1)),c.isComplex()&&(d=new B(b.scope.freeVariable("base")),c=new a(new I(new f(d,c))));if(!e)return[c,d];e.isComplex()&&(g=new B(b.scope.freeVariable("name")),e=new u(new f(g,e.index)),g=new u(g));return[c.push(e),new a(d||c.base,[g||e])]},a.prototype.compileNode=function(a){var b,c,e,f,g;this.base.front=this.front,e=this.properties,b=this.base.compile(a,e.length?v:null),e[0]instanceof d&&this.isSimpleNumber()&&(b="("+b+")");for(f=0,g=e.length;f<g;f++)c=e[f],b+=c.compile(a);return b},a.prototype.unfoldSoak=function(b){var c;if(this.unfoldedSoak!=null)return this.unfoldedSoak;c=bl(function(){var c,d,e,g,h,i,j,k;if(e=this.base.unfoldSoak(b)){Array.prototype.push.apply(e.body.properties,this.properties);return e}k=this.properties;for(d=0,j=k.length;d<j;d++){g=k[d];if(g.soak){g.soak=!1,c=new a(this.base,this.properties.slice(0,d)),i=new a(this.base,this.properties.slice(d)),c.isComplex()&&(h=new B(b.scope.freeVariable("ref")),c=new I(new f(h,c)),i.base=h);return new s(new n(c),i,{soak:!0})}}return null},this)();return this.unfoldedSoak=c||!1};return a}(),b.Comment=m=function(){function a(a){this.comment=a}bk(a,g),a.prototype.isStatement=Y,a.prototype.makeReturn=S,a.prototype.compileNode=function(a,b){var c;c="/*"+be(this.comment,this.tab)+"*/",(b||a.level)===A&&(c=a.indent+c);return c};return a}(),b.Call=i=function(){function a(a,b,c){this.args=b!=null?b:[],this.soak=c,this.isNew=!1,this.isSuper=a==="super",this.variable=this.isSuper?null:a}bk(a,g),a.prototype.children=["variable","args"],a.prototype.newInstance=function(){var b;b=this.variable.base||this.variable,b instanceof a?b.newInstance():this.isNew=!0;return this},a.prototype.superReference=function(a){var b,c;b=a.scope.method;if(!b)throw SyntaxError("cannot call super outside of a function.");c=b.name;if(!c)throw SyntaxError("cannot call super on an anonymous function.");return b.klass?""+b.klass+".__super__."+c:""+c+".__super__.constructor"},a.prototype.unfoldSoak=function(b){var c,d,e,f,g,h,i,j,k;if(this.soak){if(this.variable){if(d=bg(b,this,"variable"))return d;j=(new W(this.variable)).cacheReference(b),e=j[0],g=j[1]}else e=new B(this.superReference(b)),g=new W(e);g=new a(g,this.args),g.isNew=this.isNew,e=new B("typeof "+e.compile(b)+' === "function"');return new s(e,new W(g),{soak:!0})}c=this,f=[];for(;;){if(c.variable instanceof a){f.push(c),c=c.variable;continue}if(!(c.variable instanceof W))break;f.push(c);if(!((c=c.variable.base)instanceof a))break}k=f.reverse();for(h=0,i=k.length;h<i;h++)c=k[h],d&&(c.variable instanceof a?c.variable=d:c.variable.base=d),d=bg(b,c,"variable");return d},a.prototype.filterImplicitObjects=function(a){var b,c,d,e,g,h,i,j,k,l;c=[];for(h=0,j=a.length;h<j;h++){b=a[h];if(!((typeof b.isObject=="function"?b.isObject():void 0)&&b.base.generated)){c.push(b);continue}d=null,l=b.base.properties;for(i=0,k=l.length;i<k;i++)e=l[i],e instanceof f?(d||c.push(d=new F(g=[],!0)),g.push(e)):(c.push(e),d=null)}return c},a.prototype.compileNode=function(a){var b,c,d,e;(e=this.variable)!=null&&(e.front=this.front);if(d=P.compileSplattedArray(a,this.args,!0))return this.compileSplat(a,d);c=this.filterImplicitObjects(this.args),c=function(){var d,e,f;f=[];for(d=0,e=c.length;d<e;d++)b=c[d],f.push(b.compile(a,x));return f}().join(", ");return this.isSuper?this.superReference(a)+(".call(this"+(c&&", "+c)+")"):(this.isNew?"new ":"")+this.variable.compile(a,v)+("("+c+")")},a.prototype.compileSuper=function(a,b){return""+this.superReference(b)+".call(this"+(a.length?", ":"")+a+")"},a.prototype.compileSplat=function(a,b){var c,d,e,f,g;if(this.isSuper)return""+this.superReference(a)+".apply(this, "+b+")";if(this.isNew){e=this.tab+R;return"(function(func, args, ctor) {\n"+e+"ctor.prototype = func.prototype;\n"+e+"var child = new ctor, result = func.apply(child, args);\n"+e+'return typeof result === "object" ? result : child;\n'+this.tab+"})("+this.variable.compile(a,x)+", "+b+", function() {})"}c=new W(this.variable),(f=c.properties.pop())&&c.isComplex()?(g=a.scope.freeVariable("ref"),d="("+g+" = "+c.compile(a,x)+")"+f.compile(a)):(d=c.compile(a,v),M.test(d)&&(d="("+d+")"),f?(g=d,d+=f.compile(a)):g="null");return""+d+".apply("+g+", "+b+")"};return a}(),b.Extends=o=function(){function a(a,b){this.child=a,this.parent=b}bk(a,g),a.prototype.children=["child","parent"],a.prototype.compile=function(a){bh("hasProp");return(new i(new W(new B(bh("extends"))),[this.child,this.parent])).compile(a)};return a}(),b.Access=d=function(){function a(a,b){this.name=a,this.name.asKey=!0,this.proto=b==="proto"?".prototype":"",this.soak=b==="soak"}bk(a,g),a.prototype.children=["name"],a.prototype.compile=function(a){var b;b=this.name.compile(a);return this.proto+(r.test(b)?"["+b+"]":"."+b)},a.prototype.isComplex=E;return a}(),b.Index=u=function(){function a(a){this.index=a}bk(a,g),a.prototype.children=["index"],a.prototype.compile=function(a){return(this.proto?".prototype":"")+("["+this.index.compile(a,z)+"]")},a.prototype.isComplex=function(){return this.index.isComplex()};return a}(),b.Range=K=function(){function a(a,b,c){this.from=a,this.to=b,this.exclusive=c==="exclusive",this.equals=this.exclusive?"":"="}bk(a,g),a.prototype.children=["from","to"],a.prototype.compileVariables=function(a){var b,c,d,e,f;a=bd(a,{top:!0}),c=this.from.cache(a,x),this.from=c[0],this.fromVar=c[1],d=this.to.cache(a,x),this.to=d[0],this.toVar=d[1];if(b=$(a,"step"))e=b.cache(a,x),this.step=e[0],this.stepVar=e[1];f=[this.fromVar.match(M),this.toVar.match(M)],this.fromNum=f[0],this.toNum=f[1];if(this.stepVar)return this.stepNum=this.stepVar.match(M)},a.prototype.compileNode=function(a){var b,c,d,e,f,g,h,i,j,k,l,m;this.fromVar||this.compileVariables(a);if(!a.index)return this.compileArray(a);g=this.fromNum&&this.toNum,f=$(a,"index"),k=""+f+" = "+this.from,this.to!==this.toVar&&(k+=", "+this.to),this.step!==this.stepVar&&(k+=", "+this.step),l=[""+f+" <"+this.equals,""+f+" >"+this.equals],h=l[0],e=l[1],c=this.stepNum?c=+this.stepNum>0?""+h+" "+this.toVar:""+e+" "+this.toVar:g?(m=[+this.fromNum,+this.toNum],d=m[0],j=m[1],m,c=d<=j?""+h+" "+j:""+e+" "+j):(b=""+this.fromVar+" <= "+this.toVar,c=""+b+" ? "+h+" "+this.toVar+" : "+e+" "+this.toVar),i=this.stepVar?""+f+" += "+this.stepVar:g?d<=j?""+f+"++":""+f+"--":""+b+" ? "+f+"++ : "+f+"--";return""+k+"; "+c+"; "+i},a.prototype.compileArray=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;if(this.fromNum&&this.toNum&&Math.abs(this.fromNum-this.toNum)<=20){h=function(){n=[];for(var a=l=+this.fromNum,b=+this.toNum;l<=b?a<=b:a>=b;l<=b?a++:a--)n.push(a);return n}.apply(this,arguments),this.exclusive&&h.pop();return"["+h.join(", ")+"]"}e=this.tab+R,d=a.scope.freeVariable("i"),i=a.scope.freeVariable("results"),g="\n"+e+i+" = [];",this.fromNum&&this.toNum?(a.index=d,b=this.compileNode(a)):(j=""+d+" = "+this.from+(this.to!==this.toVar?", "+this.to:""),c=""+this.fromVar+" <= "+this.toVar,b="var "+j+"; "+c+" ? "+d+" <"+this.equals+" "+this.toVar+" : "+d+" >"+this.equals+" "+this.toVar+"; "+c+" ? "+d+"++ : "+d+"--"),f="{ "+i+".push("+d+"); }\n"+e+"return "+i+";\n"+a.indent;return"(function() {"+g+"\n"+e+"for ("+b+")"+f+"}).apply(this, arguments)"};return a}(),b.Slice=O=function(){function a(b){this.range=b,a.__super__.constructor.call(this)}bk(a,g),a.prototype.children=["range"],a.prototype.compileNode=function(a){var b,c,d,e,f,g;g=this.range,e=g.to,c=g.from,d=c&&c.compile(a,z)||"0",b=e&&e.compile(a,z),e&&(!!this.range.exclusive||+b!==-1)&&(f=", "+(this.range.exclusive?b:M.test(b)?(+b+1).toString():"("+b+" + 1) || 9e9"));return".slice("+d+(f||"")+")"};return a}(),b.Obj=F=function(){function a(a,b){this.generated=b!=null?b:!1,this.objects=this.properties=a||[]}bk(a,g),a.prototype.children=["properties"],a.prototype.compileNode=function(a){var b,c,d,e,g,h,i,j,k,l,n;k=this.properties;if(!k.length)return this.front?"({})":"{}";if(this.generated)for(l=0,n=k.length;l<n;l++){h=k[l];if(h instanceof W)throw new Error("cannot have an implicit value in an implicit object")}c=a.indent+=R,g=this.lastNonComment(this.properties),k=function(){var h,i;i=[];for(b=0,h=k.length;b<h;b++)j=k[b],e=b===k.length-1?"":j===g||j instanceof m?"\n":",\n",d=j instanceof m?"":c,j instanceof W&&j["this"]&&(j=new f(j.properties[0].name,j,"object")),j instanceof m||(j instanceof f||(j=new f(j,j,"object")),(j.variable.base||j.variable).asKey=!0),i.push(d+j.compile(a,A)+e);return i}(),k=k.join(""),i="{"+(k&&"\n"+k+"\n"+this.tab)+"}";return this.front?"("+i+")":i},a.prototype.assigns=function(a){var b,c,d,e;e=this.properties;for(c=0,d=e.length;c<d;c++){b=e[c];if(b.assigns(a))return!0}return!1};return a}(),b.Arr=e=function(){function a(a){this.objects=a||[]}bk(a,g),a.prototype.children=["objects"],a.prototype.filterImplicitObjects=i.prototype.filterImplicitObjects,a.prototype.compileNode=function(a){var b,c,d;if(!this.objects.length)return"[]";a.indent+=R,d=this.filterImplicitObjects(this.objects);if(b=P.compileSplattedArray(a,d))return b;b=function(){var b,e,f;f=[];for(b=0,e=d.length;b<e;b++)c=d[b],f.push(c.compile(a,x));return f}().join(", ");return b.indexOf("\n")>=0?"[\n"+a.indent+b+"\n"+this.tab+"]":"["+b+"]"},a.prototype.assigns=function(a){var b,c,d,e;e=this.objects;for(c=0,d=e.length;c<d;c++){b=e[c];if(b.assigns(a))return!0}return!1};return a}(),b.Class=j=function(){function a(a,b,c){this.variable=a,this.parent=b,this.body=c!=null?c:new h,this.boundFuncs=[],this.body.classBody=!0}bk(a,g),a.prototype.children=["variable","parent","body"],a.prototype.determineName=function(){var a,b;if(!this.variable)return null;a=(b=bc(this.variable.properties))?b instanceof d&&b.name.value:this.variable.base.value;return a&&(a=q.test(a)&&a)},a.prototype.setContext=function(a){return this.body.traverseChildren(!1,function(b){if(b.classBody)return!1;if(b instanceof B&&b.value==="this")return b.value=a;if(b instanceof l){b.klass=a;if(b.bound)return b.context=a}})},a.prototype.addBoundFunctions=function(a){var b,c,d,e,f,g;if(this.boundFuncs.length){f=this.boundFuncs,g=[];for(d=0,e=f.length;d<e;d++)c=f[d],b=c.compile(a),g.push(this.ctor.body.unshift(new B("this."+b+" = "+bh("bind")+"(this."+b+", this)")));return g}},a.prototype.addProperties=function(a,b,c){var e,g,h,i,j;j=a.base.properties.slice(0),h=function(){var a;a=[];while(e=j.shift()){if(e instanceof f){g=e.variable.base,delete e.context,i=e.value;if(g.value==="constructor"){if(this.ctor)throw new Error("cannot define more than one constructor in a class");if(i.bound)throw new Error("cannot define a constructor as a bound function");i instanceof l?e=this.ctor=i:(this.externalCtor=c.scope.freeVariable("class"),e=new f(new B(this.externalCtor),i))}else e.variable["this"]||(e.variable=new W(new B(b),[new d(g,"proto")])),i instanceof l&&i.bound&&(this.boundFuncs.push(g),i.bound=!1)}a.push(e)}return a}.call(this);return Z(h)},a.prototype.walkBody=function(b,c){return this.traverseChildren(!1,bl(function(d){var e,f,g,i,j;if(d instanceof a)return!1;if(d instanceof h){j=e=d.expressions;for(f=0,i=j.length;f<i;f++)g=j[f],g instanceof W&&g.isObject(!0)&&(e[f]=this.addProperties(g,b,c));return d.expressions=e=bb(e)}},this))},a.prototype.ensureConstructor=function(a){this.ctor||(this.ctor=new l,this.parent&&this.ctor.body.push(new B(""+a+".__super__.constructor.apply(this, arguments)")),this.externalCtor&&this.ctor.body.push(new B(""+this.externalCtor+".apply(this, arguments)")),this.body.expressions.unshift(this.ctor)),this.ctor.ctor=this.ctor.name=a,this.ctor.klass=null;return this.ctor.noReturn=!0},a.prototype.compileNode=function(a){var b,c,d,e;b=this.determineName(),e=b||this.name||"_Class",d=new B(e),this.setContext(e),this.walkBody(e,a),this.ensureConstructor(e),this.parent&&this.body.expressions.unshift(new o(d,this.parent)),this.ctor instanceof l||this.body.expressions.unshift(this.ctor),this.body.expressions.push(d),this.addBoundFunctions(a),c=new I(k.wrap(this.body),!0),this.variable&&(c=new f(this.variable,c));return c.compile(a)};return a}(),b.Assign=f=function(){function a(a,b,c,d){this.variable=a,this.value=b,this.context=c,this.param=d&&d.param}bk(a,g),a.prototype.children=["variable","value"],a.prototype.assigns=function(a){return this[this.context==="object"?"value":"variable"].assigns(a)},a.prototype.unfoldSoak=function(a){return bg(a,this,"variable")},a.prototype.compileNode=function(a){var b,c,d,e,f;if(b=this.variable instanceof W){if(this.variable.isArray()||this.variable.isObject())return this.compilePatternMatch(a);if(this.variable.isSplice())return this.compileSplice(a);if((f=this.context)==="||="||f==="&&="||f==="?=")return this.compileConditional(a)}d=this.variable.compile(a,x);if(!this.context&&!this.variable.isAssignable())throw SyntaxError('"'+this.variable.compile(a)+'" cannot be assigned.');this.context||b&&(this.variable.namespaced||this.variable.hasProperties())||(this.param?a.scope.add(d,"var"):a.scope.find(d)),this.value instanceof l&&(c=C.exec(d))&&(this.value.name=c[2],c[1]&&(this.value.klass=c[1])),e=this.value.compile(a,x);if(this.context==="object")return""+d+": "+e;e=d+(" "+(this.context||"=")+" ")+e;return a.level<=x?e:"("+e+")"},a.prototype.compilePatternMatch=function(b){var c,e,f,g,h,i,j,k,l,m,n,o,p,r,s,t,v,w,z,C,D,E;r=b.level===A,t=this.value,l=this.variable.base.objects;if(!(m=l.length)){f=t.compile(b);return b.level>=y?"("+f+")":f}i=this.variable.isObject();if(!r||m!==1||(k=l[0])instanceof P){v=t.compile(b,x),e=[],p=!1;if(!q.test(v)||this.variable.assigns(v))e.push(""+(n=b.scope.freeVariable("ref"))+" = "+v),v=n;for(g=0,w=l.length;g<w;g++){k=l[g],h=g,i&&(k instanceof a?(D=k,h=D.variable.base,k=D.value):k.base instanceof I?(E=(new W(k.unwrapAll())).cacheReference(b),k=E[0],h=E[1]):h=k["this"]?k.properties[0].name:k);if(!p&&k instanceof P)s=""+m+" <= "+v+".length ? "+bh("slice")+".call("+v+", "+g,(o=m-g-1)?(j=b.scope.freeVariable("i"),s+=", "+j+" = "+v+".length - "+o+") : ("+j+" = "+g+", [])"):s+=") : []",s=new B(s),p=""+j+"++";else{if(k instanceof P){k=k.name.compile(b);throw SyntaxError("multiple splats are disallowed in an assignment: "+k+" ...")}typeof h=="number"?(h=new B(p||h),c=!1):c=i&&q.test(h.unwrap().value||0),s=new W(new B(v),[new(c?d:u)(h)])}e.push((new a(k,s,null,{param:this.param})).compile(b,A))}r||e.push(v),f=e.join(", ");return b.level<x?f:"("+f+")"}k instanceof a?(z=k,h=z.variable.base,k=z.value):k.base instanceof I?(C=(new W(k.unwrapAll())).cacheReference(b),k=C[0],h=C[1]):h=i?k["this"]?k.properties[0].name:k:new B(0),c=q.test(h.unwrap().value||0),t=new W(t),t.properties.push(new(c?d:u)(h));return(new a(k,t,null,{param:this.param})).compile(b,A)},a.prototype.compileConditional=function(b){var c,d,e;e=this.variable.cacheReference(b),c=e[0],d=e[1],bm.call(this.context,"?")>=0&&(b.isExistentialEquals=!0);return(new G(this.context.slice(0,-1),c,new a(d,this.value,"="))).compile(b)},a.prototype.compileSplice=function(a){var b,c,d,e,f,g,h,i,j,k,l,m;k=this.variable.properties.pop().range,d=k.from,h=k.to,c=k.exclusive,g=this.variable.compile(a),l=(d!=null?d.cache(a,y):void 0)||["0","0"],e=l[0],f=l[1],h?(d!=null?d.isSimpleNumber():void 0)&&h.isSimpleNumber()?(h=+h.compile(a)- +f,c||(h+=1)):(h=h.compile(a)+" - "+f,c||(h+=" + 1")):h="9e9",m=this.value.cache(a,x),i=m[0],j=m[1],b="[].splice.apply("+g+", ["+e+", "+h+"].concat("+i+")), "+j;return a.level>A?"("+b+")":b};return a}(),b.Code=l=function(){function a(a,b,c){this.params=a||[],this.body=b||new h,this.bound=c==="boundfunc",this.bound&&(this.context="this")}bk(a,g),a.prototype.children=["params","body"],a.prototype.isStatement=function(){return!!this.ctor},a.prototype.jumps=E,a.prototype.compileNode=function(a){var b,c,d,g,h,i,j,k,l,m,n,o,p,q,r,t,u,w,x,y,z,A,C,D;a.scope=new N(a.scope,this.body,this),a.scope.shared=$(a,"sharedScope"),a.indent+=R,delete a.bare,o=[],c=[],z=this.params;for(q=0,u=z.length;q<u;q++){j=z[q];if(j.splat){A=this.params;for(r=0,w=A.length;r<w;r++)i=A[r],i.name.value&&a.scope.add(i.name.value,"var",!0);l=new f(new W(new e(function(){var b,c,d,e;d=this.params,e=[];for(b=0,c=d.length;b<c;b++)i=d[b],e.push(i.asReference(a));return e}.call(this))),new W(new B("arguments")));break}}C=this.params;for(t=0,x=C.length;t<x;t++)j=C[t],j.isComplex()?(n=k=j.asReference(a),j.value&&(n=new G("?",k,j.value)),c.push(new f(new W(j.name),n,"=",{param:!0}))):(k=j,j.value&&(h=new B(k.name.value+" == null"),n=new f(new W(j.name),j.value,"="),c.push(new s(h,n)))),l||o.push(k);p=this.body.isEmpty(),l&&c.unshift(l),c.length&&(D=this.body.expressions).unshift.apply(D,c);if(!l)for(d=0,y=o.length;d<y;d++)m=o[d],a.scope.parameter(o[d]=m.compile(a));!p&&!this.noReturn&&this.body.makeReturn(),g=a.indent,b="function",this.ctor&&(b+=" "+this.name),b+="("+o.join(", ")+") {",this.body.isEmpty()||(b+="\n"+this.body.compileWithDeclarations(a)+"\n"+this.tab),b+="}";return this.ctor?this.tab+b:this.bound?bh("bind")+("("+b+", "+this.context+")"):this.front||a.level>=v?"("+b+")":b},a.prototype.traverseChildren=function(b,c){if(b)return a.__super__.traverseChildren.call(this,b,c)};return a}(),b.Param=H=function(){function a(a,b,c){this.name=a,this.value=b,this.splat=c}bk(a,g),a.prototype.children=["name","value"],a.prototype.compile=function(a){return this.name.compile(a,x)},a.prototype.asReference=function(a){var b;if(this.reference)return this.reference;b=this.name,b["this"]?(b=b.properties[0].name,b.value.reserved&&(b=new B("_"+b.value))):b.isComplex()&&(b=new B(a.scope.freeVariable("arg"))),b=new W(b),this.splat&&(b=new P(b));return this.reference=b},a.prototype.isComplex=function(){return this.name.isComplex()};return a}(),b.Splat=P=function(){function a(a){this.name=a.compile?a:new B(a)}bk(a,g),a.prototype.children=["name"],a.prototype.isAssignable=Y,a.prototype.assigns=function(a){return this.name.assigns(a)},a.prototype.compile=function(a){return this.index!=null?this.compileParam(a):this.name.compile(a)},a.compileSplattedArray=function(b,c,d){var e,f,g,h,i,j,k;i=-1;while((j=c[++i])&&!(j instanceof a))continue;if(i>=c.length)return"";if(c.length===1){g=c[0].compile(b,x);return d?g:""+bh("slice")+".call("+g+")"}e=c.slice(i);for(h=0,k=e.length;h<k;h++)j=e[h],g=j.compile(b,x),e[h]=j instanceof a?""+bh("slice")+".call("+g+")":"["+g+"]";if(i===0)return e[0]+(".concat("+e.slice(1).join(", ")+")");f=function(){var a,d,e,f;e=c.slice(0,i),f=[];for(a=0,d=e.length;a<d;a++)j=e[a],f.push(j.compile(b,x));return f}();return"["+f.join(", ")+"].concat("+e.join(", ")+")"};return a}(),b.While=X=function(){function a(a,b){this.condition=(b!=null?b.invert:void 0)?a.invert():a,this.guard=b!=null?b.guard:void 0}bk(a,g),a.prototype.children=["condition","guard","body"],a.prototype.isStatement=Y,a.prototype.makeReturn=function(){this.returns=!0;return this},a.prototype.addBody=function(a){this.body=a;return this},a.prototype.jumps=function(){var a,b,c,d;a=this.body.expressions;if(!a.length)return!1;for(c=0,d=a.length;c<d;c++){b=a[c];if(b.jumps({loop:!0}))return b}return!1},a.prototype.compileNode=function(a){var b,c,d,e;a.indent+=R,e="",b=this.body;if(b.isEmpty())b="";else{if(a.level>A||this.returns)d=a.scope.freeVariable("results"),e=""+this.tab+d+" = [];\n",b&&(b=J.wrap(d,b));this.guard&&(b=h.wrap([new s(this.guard,b)])),b="\n"+b.compile(a,A)+"\n"+this.tab}c=e+this.tab+("while ("+this.condition.compile(a,z)+") {"+b+"}"),this.returns&&(c+="\n"+this.tab+"return "+d+";");return c};return a}(),b.Op=G=function(){function c(b,c,d,e){var f;if(b==="in")return new t(c,d);if(b==="do"){f=new i(c,c.params||[]),f["do"]=!0;return f}if(b==="new"){if(c instanceof i&&!c["do"])return c.newInstance();if(c instanceof l&&c.bound||c["do"])c=new I(c)}this.operator=a[b]||b,this.first=c,this.second=d,this.flip=!!e;return this}var a,b;bk(c,g),a={"==":"===","!=":"!==",of:"in"},b={"!==":"===","===":"!=="},c.prototype.children=["first","second"],c.prototype.isSimpleNumber=E,c.prototype.isUnary=function(){return!this.second},c.prototype.isComplex=function(){var a;return!this.isUnary()||(a=this.operator)!=="+"&&a!=="-"||this.first.isComplex()},c.prototype.isChainable=function(){var a;return(a=this.operator)==="<"||a===">"||a===">="||a==="<="||a==="==="||a==="!=="},c.prototype.invert=function(){var a,d,e,f,g;if(this.isChainable()&&this.first.isChainable()){a=!0,d=this;while(d&&d.operator)a&&(a=d.operator in b),d=d.first;if(!a)return(new I(this)).invert();d=this;while(d&&d.operator)d.invert=!d.invert,d.operator=b[d.operator],d=d.first;return this}if(f=b[this.operator]){this.operator=f,this.first.unwrap()instanceof c&&this.first.invert();return this}return this.second?(new I(this)).invert():this.operator==="!"&&(e=this.first.unwrap())instanceof c&&((g=e.operator)==="!"||g==="in"||g==="instanceof")?e:new c("!",this)},c.prototype.unfoldSoak=function(a){var b;return((b=this.operator)==="++"||b==="--"||b==="delete")&&bg(a,this,"first")},c.prototype.compileNode=function(a){var b;if(this.isUnary())return this.compileUnary(a);if(this.isChainable()&&this.first.isChainable())return this.compileChain(a);if(this.operator==="?")return this.compileExistence(a);this.first.front=this.front,b=this.first.compile(a,y)+" "+this.operator+" "+this.second.compile(a,y);return a.level<=y?b:"("+b+")"},c.prototype.compileChain=function(a){var b,c,d,e;e=this.first.second.cache(a),this.first.second=e[0],d=e[1],c=this.first.compile(a,y),b=""+c+" "+(this.invert?"&&":"||")+" "+d.compile(a)+" "+this.operator+" "+this.second.compile(a,y);return"("+b+")"},c.prototype.compileExistence=function(a){var b,c;this.first.isComplex()?(c=new B(a.scope.freeVariable("ref")),b=new I(new f(c,this.first))):(b=this.first,c=b);return(new s(new n(b),c,{type:"if"})).addElse(this.second).compile(a)},c.prototype.compileUnary=function(a){var b,d;d=[b=this.operator],(b==="new"||b==="typeof"||b==="delete"||(b==="+"||b==="-")&&this.first instanceof c&&this.first.operator===b)&&d.push(" "),b==="new"&&this.first.isStatement(a)&&(this.first=new I(this.first)),d.push(this.first.compile(a,y)),this.flip&&d.reverse();return d.join("")},c.prototype.toString=function(a){return c.__super__.toString.call(this,a,this.constructor.name+" "+this.operator)};return c}(),b.In=t=function(){function a(a,b){this.object=a,this.array=b}bk(a,g),a.prototype.children=["object","array"],a.prototype.invert=D,a.prototype.compileNode=function(a){var b,c,d,e,f;if(this.array instanceof W&&this.array.isArray()){f=this.array.base.objects;for(d=0,e=f.length;d<e;d++){c=f[d];if(c instanceof P){b=!0;break}}if(!b)return this.compileOrTest(a)}return this.compileLoopTest(a)},a.prototype.compileOrTest=function(a){var b,c,d,e,f,g,h,i,j;i=this.object.cache(a,y),g=i[0],f=i[1],j=this.negated?[" !== "," && "]:[" === "," || "],b=j[0],c=j[1],h=function(){var c,h,i;h=this.array.base.objects,i=[];for(d=0,c=h.length;d<c;d++)e=h[d],i.push((d?f:g)+b+e.compile(a,y));return i}.call(this);if(h.length===0)return"false";h=h.join(c);return a.level<y?h:"("+h+")"},a.prototype.compileLoopTest=function(a){var b,c,d,e;e=this.object.cache(a,x),d=e[0],c=e[1],b=bh("indexOf")+(".call("+this.array.compile(a,x)+", "+c+") ")+(this.negated?"< 0":">= 0");if(d===c)return b;b=d+", "+b;return a.level<x?b:"("+b+")"},a.prototype.toString=function(b){return a.__super__.toString.call(this,b,this.constructor.name+(this.negated?"!":""))};return a}(),b.Try=U=function(){function a(a,b,c,d){this.attempt=a,this.error=b,this.recovery=c,this.ensure=d}bk(a,g),a.prototype.children=["attempt","recovery","ensure"],a.prototype.isStatement=Y,a.prototype.jumps=function(a){var b;return this.attempt.jumps(a)||((b=this.recovery)!=null?b.jumps(a):void 0)},a.prototype.makeReturn=function(){this.attempt&&(this.attempt=this.attempt.makeReturn()),this.recovery&&(this.recovery=this.recovery.makeReturn());return this},a.prototype.compileNode=function(a){var b,c;a.indent+=R,c=this.error?" ("+this.error.compile(a)+") ":" ",b=this.recovery?" catch"+c+"{\n"+this.recovery.compile(a,A)+"\n"+this.tab+"}":!this.ensure&&!this.recovery?" catch (_e) {}":void 0;return""+this.tab+"try {\n"+this.attempt.compile(a,A)+"\n"+this.tab+"}"+(b||"")+(this.ensure?" finally {\n"+this.ensure.compile(a,A)+"\n"+this.tab+"}":"")};return a}(),b.Throw=T=function(){function a(a){this.expression=a}bk(a,g),a.prototype.children=["expression"],a.prototype.isStatement=Y,a.prototype.jumps=E,a.prototype.makeReturn=S,a.prototype.compileNode=function(a){return this.tab+("throw "+this.expression.compile(a)+";")};return a}(),b.Existence=n=function(){function a(a){this.expression=a}bk(a,g),a.prototype.children=["expression"],a.prototype.invert=D,a.prototype.compileNode=function(a){var b,c,d,e;d=this.expression.compile(a,y),d=q.test(d)&&!a.scope.check(d)?(e=this.negated?["===","||"]:["!==","&&"],b=e[0],c=e[1],e,"typeof "+d+" "+b+' "undefined" '+c+" "+d+" "+b+" null"):""+d+" "+(this.negated?"==":"!=")+" null";return a.level<=w?d:"("+d+")"};return a}(),b.Parens=I=function(){function a(a){this.body=a}bk(a,g),a.prototype.children=["body"],a.prototype.unwrap=function(){return this.body},a.prototype.isComplex=function(){return this.body.isComplex()},a.prototype.makeReturn=function(){return this.body.makeReturn()},a.prototype.compileNode=function(a){var b,c,d;d=this.body.unwrap();if(d instanceof W&&d.isAtomic()){d.front=this.front;return d.compile(a)}c=d.compile(a,z),b=a.level<y&&(d instanceof G||d instanceof i||d instanceof p&&d.returns);return b?c:"("+c+")"};return a}(),b.For=p=function(){function a(a,b){var c;this.source=b.source,this.guard=b.guard,this.step=b.step,this.name=b.name,this.index=b.index,this.body=h.wrap([a]),this.own=!!b.own,this.object=!!b.object,this.object&&(c=[this.index,this.name],this.name=c[0],this.index=c[1]);if(this.index instanceof W)throw SyntaxError("index cannot be a pattern matching expression");this.range=this.source instanceof W&&this.source.base instanceof K&&!this.source.properties.length,this.pattern=this.name instanceof W;if(this.range&&this.index)throw SyntaxError("indexes do not apply to range loops");if(this.range&&this.pattern)throw SyntaxError("cannot pattern match over range loops");this.returns=!1}bk(a,g),a.prototype.children=["body","source","guard","step"],a.prototype.isStatement=Y,a.prototype.jumps=X.prototype.jumps,a.prototype.makeReturn=function(){this.returns=!0;return this},a.prototype.compileNode=function(a){var b,c,d,e,g,i,j,k,l,m,n,o,p,r,t,u,v,w,z,C,D,E,F;b=h.wrap([this.body]),l=(F=bc(b.expressions))!=null?F.jumps():void 0,l&&l instanceof L&&(this.returns=!1),w=this.range?this.source.base:this.source,v=a.scope,n=this.name&&this.name.compile(a,x),j=this.index&&this.index.compile(a,x),n&&!this.pattern&&v.find(n,{immediate:!0}),j&&v.find(j,{immediate:!0}),this.returns&&(u=v.freeVariable("results")),k=(this.range?n:j)||v.freeVariable("i"),this.step&&!this.range&&(C=v.freeVariable("step")),this.pattern&&(n=k),E="",g="",c="",i=this.tab+R,this.range?d=w.compile(bd(a,{index:k,step:this.step})):(D=this.source.compile(a,x),(n||this.own)&&!q.test(D)&&(c=""+this.tab+(p=v.freeVariable("ref"))+" = "+D+";\n",D=p),n&&!this.pattern&&(o=""+n+" = "+D+"["+k+"]"),this.object||(m=v.freeVariable("len"),e=""+k+" = 0, "+m+" = "+D+".length"+(this.step?", "+C+" = "+this.step.compile(a,y):""),z=this.step?""+k+" += "+C:""+k+"++",d=""+e+"; "+k+" < "+m+"; "+z)),this.returns&&(r=""+this.tab+u+" = [];\n",t="\n"+this.tab+"return "+u+";",b=J.wrap(u,b)),this.guard&&(b=h.wrap([new s(this.guard,b)])),this.pattern&&b.expressions.unshift(new f(this.name,new B(""+D+"["+k+"]"))),c+=this.pluckDirectCall(a,b),o&&(E="\n"+i+o+";"),this.object&&(d=""+k+" in "+D,this.own&&(g="\n"+i+"if (!"+bh("hasProp")+".call("+D+", "+k+")) continue;")),b=b.compile(bd(a,{indent:i}),A),b&&(b="\n"+b+"\n");return""+c+(r||"")+this.tab+"for ("+d+") {"+g+E+b+this.tab+"}"+(t||"")},a.prototype.pluckDirectCall=function(a,b){var c,d,e,g,h,j,k,m,n,o,p,q,r,s;d="",n=b.expressions;for(h=0,m=n.length;h<m;h++){e=n[h],e=e.unwrapAll();if(!(e instanceof i))continue;k=e.variable.unwrapAll();if(k instanceof l||k instanceof W&&((o=k.base)!=null?o.unwrapAll():void 0)instanceof l&&k.properties.length===1&&((p=(q=k.properties[0].name)!=null?q.value:void 0)==="call"||p==="apply"))g=((r=k.base)!=null?r.unwrapAll():void 0)||k,j=new B(a.scope.freeVariable("fn")),c=new W(j),k.base&&(s=[c,k],k.base=s[0],c=s[1],args.unshift(new B("this"))),b.expressions[h]=new i(c,e.args),d+=this.tab+(new f(j,g)).compile(a,A)+";\n";else continue}return d};return a}(),b.Switch=Q=function(){function a(a,b,c){this.subject=a,this.cases=b,this.otherwise=c}bk(a,g),a.prototype.children=["subject","cases","otherwise"],a.prototype.isStatement=Y,a.prototype.jumps=function(a){var b,c,d,e,f,g,h;a==null&&(a={block:!0}),f=this.cases;for(d=0,e=f.length;d<e;d++){g=f[d],c=g[0],b=g[1];if(b.jumps(a))return b}return(h=this.otherwise)!=null?h.jumps(a):void 0},a.prototype.makeReturn=function(){var a,b,c,d,e;d=this.cases;for(b=0,c=d.length;b<c;b++)a=d[b],a[1].makeReturn();(e=this.otherwise)!=null&&e.makeReturn();return this},a.prototype.compileNode=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;i=a.indent+R,j=a.indent=i+R,d=this.tab+("switch ("+(((n=this.subject)!=null?n.compile(a,z):void 0)||!1)+") {\n"),o=this.cases;for(h=0,l=o.length;h<l;h++){p=o[h],f=p[0],b=p[1],q=bb([f]);for(k=0,m=q.length;k<m;k++)e=q[k],this.subject||(e=e.invert()),d+=i+("case "+e.compile(a,z)+":\n");if(c=b.compile(a,A))d+=c+"\n";if(h===this.cases.length-1&&!this.otherwise)break;g=this.lastNonComment(b.expressions);if(g instanceof L||g instanceof B&&g.jumps()&&g.value!=="debugger")continue;d+=j+"break;\n"}this.otherwise&&this.otherwise.expressions.length&&(d+=i+("default:\n"+this.otherwise.compile(a,A)+"\n"));return d+this.tab+"}"};return a}(),b.If=s=function(){function a(a,b,c){this.body=b,c==null&&(c={}),this.condition=c.type==="unless"?a.invert():a,this.elseBody=null,this.isChain=!1,this.soak=c.soak}bk(a,g),a.prototype.children=["condition","body","elseBody"],a.prototype.bodyNode=function(){var a;return(a=this.body)!=null?a.unwrap():void 0},a.prototype.elseBodyNode=function(){var a;return(a=this.elseBody)!=null?a.unwrap():void 0},a.prototype.addElse=function(b){this.isChain?this.elseBodyNode().addElse(b):(this.isChain=b instanceof a,this.elseBody=this.ensureBlock(b));return this},a.prototype.isStatement=function(a){var b;return(a!=null?a.level:void 0)===A||this.bodyNode().isStatement(a)||((b=this.elseBodyNode())!=null?b.isStatement(a):void 0)},a.prototype.jumps=function(a){var b;return this.body.jumps(a)||((b=this.elseBody)!=null?b.jumps(a):void 0)},a.prototype.compileNode=function(a){return this.isStatement(a)?this.compileStatement(a):this.compileExpression(a)},a.prototype.makeReturn=function(){this.body&&(this.body=new h([this.body.makeReturn()])),this.elseBody&&(this.elseBody=new h([this.elseBody.makeReturn()]));return this},a.prototype.ensureBlock=function(a){return a instanceof h?a:new h([a])},a.prototype.compileStatement=function(b){var c,d,e,f,g;d=$(b,"chainChild"),f=$(b,"isExistentialEquals");if(f)return(new a(this.condition.invert(),this.elseBodyNode(),{type:"if"})).compile(b);e=this.condition.compile(b,z),b.indent+=R,c=this.ensureBlock(this.body).compile(b),c&&(c="\n"+c+"\n"+this.tab),g="if ("+e+") {"+c+"}",d||(g=this.tab+g);return this.elseBody?g+" else "+(this.isChain?(b.indent=this.tab,b.chainChild=!0,this.elseBody.unwrap().compile(b,A)):"{\n"+this.elseBody.compile(b,A)+"\n"+this.tab+"}"):g},a.prototype.compileExpression=function(a){var b,c,d,e;e=this.condition.compile(a,w),c=this.bodyNode().compile(a,x),b=this.elseBodyNode()?this.elseBodyNode().compile(a,x):"void 0",d=""+e+" ? "+c+" : "+b;return a.level>=w?"("+d+")":d},a.prototype.unfoldSoak=function(){return this.soak&&this};return a}(),J={wrap:function(a,b){return b.isEmpty()||bc(b.expressions).jumps()?b:b.push(new i(new W(new B(a),[new d(new B("push"))]),[b.pop()]))}},k={wrap:function(a,b,c){var e,f,g,j,k;if(a.jumps())return a;g=new l([],h.wrap([a])),e=[];if((j=a.contains(this.literalArgs))||a.contains(this.literalThis))k=new B(j?"apply":"call"),e=[new B("this")],j&&e.push(new B("arguments")),g=new W(g,[new d(k)]);g.noReturn=c,f=new i(g,e);return b?h.wrap([f]):f},literalArgs:function(a){return a instanceof B&&a.value==="arguments"&&!a.asKey},literalThis:function(a){return a instanceof B&&a.value==="this"&&!a.asKey||a instanceof l&&a.bound}},bg=function(a,b,c){var d;if(!!(d=b[c].unfoldSoak(a))){b[c]=d.body,d.body=new W(b);return d}},V={"extends":"function(child, parent) {\n for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; }\n function ctor() { this.constructor = child; }\n ctor.prototype = parent.prototype;\n child.prototype = new ctor;\n child.__super__ = parent.prototype;\n return child;\n}",bind:"function(fn, me){ return function(){ return fn.apply(me, arguments); }; }",indexOf:"Array.prototype.indexOf || function(item) {\n for (var i = 0, l = this.length; i < l; i++) {\n if (this[i] === item) return i;\n }\n return -1;\n}",hasProp:"Object.prototype.hasOwnProperty",slice:"Array.prototype.slice"},A=1,z=2,x=3,w=4,y=5,v=6,R=" ",q=/^[$A-Za-z_\x7f-\uffff][$\w\x7f-\uffff]*$/,M=/^[+-]?\d+$/,C=/^(?:([$A-Za-z_][$\w\x7f-\uffff]*)\.prototype\.)?([$A-Za-z_][$\w\x7f-\uffff]*)$/,r=/^['"]/,bh=function(a){var b;b="__"+a,N.root.assign(b,V[a]);return b},be=function(a,b){return a.replace(/\n/g,"$&"+b)}}),define("ace/mode/coffee/scope",["require","exports","module","ace/mode/coffee/helpers"],function(a,b,c){var d,e,f,g;g=a("ace/mode/coffee/helpers"),e=g.extend,f=g.last,b.Scope=d=function(){function a(b,c,d){this.parent=b,this.expressions=c,this.method=d,this.variables=[{name:"arguments",type:"arguments"}],this.positions={},this.parent||(a.root=this)}a.root=null,a.prototype.add=function(a,b,c){var d;return this.shared&&!c?this.parent.add(a,b,c):typeof (d=this.positions[a])=="number"?this.variables[d].type=b:this.positions[a]=this.variables.push({name:a,type:b})-1},a.prototype.find=function(a,b){if(this.check(a,b))return!0;this.add(a,"var");return!1},a.prototype.parameter=function(a){if(!this.shared||!this.parent.check(a,!0))return this.add(a,"param")},a.prototype.check=function(a,b){var c,d;c=!!this.type(a);return c||b?c:(d=this.parent)!=null?!!d.check(a):!!void 0},a.prototype.temporary=function(a,b){return a.length>1?"_"+a+(b>1?b:""):"_"+(b+parseInt(a,36)).toString(36).replace(/\d/g,"a")},a.prototype.type=function(a){var b,c,d,e;e=this.variables;for(c=0,d=e.length;c<d;c++){b=e[c];if(b.name===a)return b.type}return null},a.prototype.freeVariable=function(a){var b,c;b=0;while(this.check(c=this.temporary(a,b)))b++;this.add(c,"var",!0);return c},a.prototype.assign=function(a,b){this.add(a,{value:b,assigned:!0});return this.hasAssignments=!0},a.prototype.hasDeclarations=function(){return!!this.declaredVariables().length},a.prototype.declaredVariables=function(){var a,b,c,d,e,f;a=[],b=[],f=this.variables;for(d=0,e=f.length;d<e;d++)c=f[d],c.type==="var"&&(c.name.charAt(0)==="_"?b:a).push(c.name);return a.sort().concat(b.sort())},a.prototype.assignedVariables=function(){var a,b,c,d,e;d=this.variables,e=[];for(b=0,c=d.length;b<c;b++)a=d[b],a.type.assigned&&e.push(""+a.name+" = "+a.type.value);return e};return a}()}) \ No newline at end of file
+"no use strict";
+
+var console = {
+ log: function(msg) {
+ postMessage({type: "log", data: msg});
+ }
+};
+var window = {
+ console: console
+};
+
+var normalizeModule = function(parentId, moduleName) {
+ // normalize plugin requires
+ if (moduleName.indexOf("!") !== -1) {
+ var chunks = moduleName.split("!");
+ return normalizeModule(parentId, chunks[0]) + "!" + normalizeModule(parentId, chunks[1]);
+ }
+ // normalize relative requires
+ if (moduleName.charAt(0) == ".") {
+ var base = parentId.split("/").slice(0, -1).join("/");
+ var moduleName = base + "/" + moduleName;
+
+ while(moduleName.indexOf(".") !== -1 && previous != moduleName) {
+ var previous = moduleName;
+ var moduleName = moduleName.replace(/\/\.\//, "/").replace(/[^\/]+\/\.\.\//, "");
+ }
+ }
+
+ return moduleName;
+};
+
+var require = function(parentId, id) {
+ var id = normalizeModule(parentId, id);
+
+ var module = require.modules[id];
+ if (module) {
+ if (!module.initialized) {
+ module.exports = module.factory().exports;
+ module.initialized = true;
+ }
+ return module.exports;
+ }
+
+ var chunks = id.split("/");
+ chunks[0] = require.tlns[chunks[0]] || chunks[0];
+ var path = chunks.join("/") + ".js";
+
+ require.id = id;
+ importScripts(path);
+ return require(parentId, id);
+};
+
+require.modules = {};
+require.tlns = {};
+
+var define = function(id, deps, factory) {
+ if (arguments.length == 2) {
+ factory = deps;
+ } else if (arguments.length == 1) {
+ factory = id;
+ id = require.id;
+ }
+
+ if (id.indexOf("text!") === 0)
+ return;
+
+ var req = function(deps, factory) {
+ return require(id, deps, factory);
+ };
+
+ require.modules[id] = {
+ factory: function() {
+ var module = {
+ exports: {}
+ };
+ var returnExports = factory(req, module.exports, module);
+ if (returnExports)
+ module.exports = returnExports;
+ return module;
+ }
+ };
+};
+
+function initBaseUrls(topLevelNamespaces) {
+ require.tlns = topLevelNamespaces;
+}
+
+function initSender() {
+
+ var EventEmitter = require(null, "ace/lib/event_emitter").EventEmitter;
+ var oop = require(null, "ace/lib/oop");
+
+ var Sender = function() {};
+
+ (function() {
+
+ oop.implement(this, EventEmitter);
+
+ this.callback = function(data, callbackId) {
+ postMessage({
+ type: "call",
+ id: callbackId,
+ data: data
+ });
+ };
+
+ this.emit = function(name, data) {
+ postMessage({
+ type: "event",
+ name: name,
+ data: data
+ });
+ };
+
+ }).call(Sender.prototype);
+
+ return new Sender();
+}
+
+var main;
+var sender;
+
+onmessage = function(e) {
+ var msg = e.data;
+ if (msg.command) {
+ main[msg.command].apply(main, msg.args);
+ }
+ else if (msg.init) {
+ initBaseUrls(msg.tlns);
+ require(null, "ace/lib/fixoldbrowsers");
+ sender = initSender();
+ var clazz = require(null, msg.module)[msg.classname];
+ main = new clazz(sender);
+ }
+ else if (msg.event && sender) {
+ sender._emit(msg.event, msg.data);
+ }
+};
+// vim:set ts=4 sts=4 sw=4 st:
+// -- kriskowal Kris Kowal Copyright (C) 2009-2010 MIT License
+// -- tlrobinson Tom Robinson Copyright (C) 2009-2010 MIT License (Narwhal Project)
+// -- dantman Daniel Friesen Copyright(C) 2010 XXX No License Specified
+// -- fschaefer Florian Schäfer Copyright (C) 2010 MIT License
+// -- Irakli Gozalishvili Copyright (C) 2010 MIT License
+
+/*!
+ Copyright (c) 2009, 280 North Inc. http://280north.com/
+ MIT License. http://github.com/280north/narwhal/blob/master/README.md
+*/
+
+define('ace/lib/fixoldbrowsers', ['require', 'exports', 'module' , 'ace/lib/regexp', 'ace/lib/es5-shim'], function(require, exports, module) {
+"use strict";
+
+require("./regexp");
+require("./es5-shim");
+
+});/**
+ * Based on code from:
+ *
+ * XRegExp 1.5.0
+ * (c) 2007-2010 Steven Levithan
+ * MIT License
+ * <http://xregexp.com>
+ * Provides an augmented, extensible, cross-browser implementation of regular expressions,
+ * including support for additional syntax, flags, and methods
+ */
+
+define('ace/lib/regexp', ['require', 'exports', 'module' ], function(require, exports, module) {
+"use strict";
+
+ //---------------------------------
+ // Private variables
+ //---------------------------------
+
+ var real = {
+ exec: RegExp.prototype.exec,
+ test: RegExp.prototype.test,
+ match: String.prototype.match,
+ replace: String.prototype.replace,
+ split: String.prototype.split
+ },
+ compliantExecNpcg = real.exec.call(/()??/, "")[1] === undefined, // check `exec` handling of nonparticipating capturing groups
+ compliantLastIndexIncrement = function () {
+ var x = /^/g;
+ real.test.call(x, "");
+ return !x.lastIndex;
+ }();
+
+ //---------------------------------
+ // Overriden native methods
+ //---------------------------------
+
+ // Adds named capture support (with backreferences returned as `result.name`), and fixes two
+ // cross-browser issues per ES3:
+ // - Captured values for nonparticipating capturing groups should be returned as `undefined`,
+ // rather than the empty string.
+ // - `lastIndex` should not be incremented after zero-length matches.
+ RegExp.prototype.exec = function (str) {
+ var match = real.exec.apply(this, arguments),
+ name, r2;
+ if (match) {
+ // Fix browsers whose `exec` methods don't consistently return `undefined` for
+ // nonparticipating capturing groups
+ if (!compliantExecNpcg && match.length > 1 && indexOf(match, "") > -1) {
+ r2 = RegExp(this.source, real.replace.call(getNativeFlags(this), "g", ""));
+ // Using `str.slice(match.index)` rather than `match[0]` in case lookahead allowed
+ // matching due to characters outside the match
+ real.replace.call(str.slice(match.index), r2, function () {
+ for (var i = 1; i < arguments.length - 2; i++) {
+ if (arguments[i] === undefined)
+ match[i] = undefined;
+ }
+ });
+ }
+ // Attach named capture properties
+ if (this._xregexp && this._xregexp.captureNames) {
+ for (var i = 1; i < match.length; i++) {
+ name = this._xregexp.captureNames[i - 1];
+ if (name)
+ match[name] = match[i];
+ }
+ }
+ // Fix browsers that increment `lastIndex` after zero-length matches
+ if (!compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index))
+ this.lastIndex--;
+ }
+ return match;
+ };
+
+ // Don't override `test` if it won't change anything
+ if (!compliantLastIndexIncrement) {
+ // Fix browser bug in native method
+ RegExp.prototype.test = function (str) {
+ // Use the native `exec` to skip some processing overhead, even though the overriden
+ // `exec` would take care of the `lastIndex` fix
+ var match = real.exec.call(this, str);
+ // Fix browsers that increment `lastIndex` after zero-length matches
+ if (match && this.global && !match[0].length && (this.lastIndex > match.index))
+ this.lastIndex--;
+ return !!match;
+ };
+ }
+
+ //---------------------------------
+ // Private helper functions
+ //---------------------------------
+
+ function getNativeFlags (regex) {
+ return (regex.global ? "g" : "") +
+ (regex.ignoreCase ? "i" : "") +
+ (regex.multiline ? "m" : "") +
+ (regex.extended ? "x" : "") + // Proposed for ES4; included in AS3
+ (regex.sticky ? "y" : "");
+ };
+
+ function indexOf (array, item, from) {
+ if (Array.prototype.indexOf) // Use the native array method if available
+ return array.indexOf(item, from);
+ for (var i = from || 0; i < array.length; i++) {
+ if (array[i] === item)
+ return i;
+ }
+ return -1;
+ };
+
+});// vim: ts=4 sts=4 sw=4 expandtab
+// -- kriskowal Kris Kowal Copyright (C) 2009-2011 MIT License
+// -- tlrobinson Tom Robinson Copyright (C) 2009-2010 MIT License (Narwhal Project)
+// -- dantman Daniel Friesen Copyright (C) 2010 XXX TODO License or CLA
+// -- fschaefer Florian Schäfer Copyright (C) 2010 MIT License
+// -- Gozala Irakli Gozalishvili Copyright (C) 2010 MIT License
+// -- kitcambridge Kit Cambridge Copyright (C) 2011 MIT License
+// -- kossnocorp Sasha Koss XXX TODO License or CLA
+// -- bryanforbes Bryan Forbes XXX TODO License or CLA
+// -- killdream Quildreen Motta Copyright (C) 2011 MIT Licence
+// -- michaelficarra Michael Ficarra Copyright (C) 2011 3-clause BSD License
+// -- sharkbrainguy Gerard Paapu Copyright (C) 2011 MIT License
+// -- bbqsrc Brendan Molloy (C) 2011 Creative Commons Zero (public domain)
+// -- iwyg XXX TODO License or CLA
+// -- DomenicDenicola Domenic Denicola Copyright (C) 2011 MIT License
+// -- xavierm02 Montillet Xavier XXX TODO License or CLA
+// -- Raynos Raynos XXX TODO License or CLA
+// -- samsonjs Sami Samhuri Copyright (C) 2010 MIT License
+// -- rwldrn Rick Waldron Copyright (C) 2011 MIT License
+// -- lexer Alexey Zakharov XXX TODO License or CLA
+
+/*!
+ Copyright (c) 2009, 280 North Inc. http://280north.com/
+ MIT License. http://github.com/280north/narwhal/blob/master/README.md
+*/
+
+define('ace/lib/es5-shim', ['require', 'exports', 'module' ], function(require, exports, module) {
+
+/**
+ * Brings an environment as close to ECMAScript 5 compliance
+ * as is possible with the facilities of erstwhile engines.
+ *
+ * Annotated ES5: http://es5.github.com/ (specific links below)
+ * ES5 Spec: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
+ *
+ * @module
+ */
+
+/*whatsupdoc*/
+
+//
+// Function
+// ========
+//
+
+// ES-5 15.3.4.5
+// http://es5.github.com/#x15.3.4.5
+
+if (!Function.prototype.bind) {
+ Function.prototype.bind = function bind(that) { // .length is 1
+ // 1. Let Target be the this value.
+ var target = this;
+ // 2. If IsCallable(Target) is false, throw a TypeError exception.
+ if (typeof target != "function")
+ throw new TypeError(); // TODO message
+ // 3. Let A be a new (possibly empty) internal list of all of the
+ // argument values provided after thisArg (arg1, arg2 etc), in order.
+ // XXX slicedArgs will stand in for "A" if used
+ var args = slice.call(arguments, 1); // for normal call
+ // 4. Let F be a new native ECMAScript object.
+ // 11. Set the [[Prototype]] internal property of F to the standard
+ // built-in Function prototype object as specified in 15.3.3.1.
+ // 12. Set the [[Call]] internal property of F as described in
+ // 15.3.4.5.1.
+ // 13. Set the [[Construct]] internal property of F as described in
+ // 15.3.4.5.2.
+ // 14. Set the [[HasInstance]] internal property of F as described in
+ // 15.3.4.5.3.
+ var bound = function () {
+
+ if (this instanceof bound) {
+ // 15.3.4.5.2 [[Construct]]
+ // When the [[Construct]] internal method of a function object,
+ // F that was created using the bind function is called with a
+ // list of arguments ExtraArgs, the following steps are taken:
+ // 1. Let target be the value of F's [[TargetFunction]]
+ // internal property.
+ // 2. If target has no [[Construct]] internal method, a
+ // TypeError exception is thrown.
+ // 3. Let boundArgs be the value of F's [[BoundArgs]] internal
+ // property.
+ // 4. Let args be a new list containing the same values as the
+ // list boundArgs in the same order followed by the same
+ // values as the list ExtraArgs in the same order.
+ // 5. Return the result of calling the [[Construct]] internal
+ // method of target providing args as the arguments.
+
+ var F = function(){};
+ F.prototype = target.prototype;
+ var self = new F;
+
+ var result = target.apply(
+ self,
+ args.concat(slice.call(arguments))
+ );
+ if (result !== null && Object(result) === result)
+ return result;
+ return self;
+
+ } else {
+ // 15.3.4.5.1 [[Call]]
+ // When the [[Call]] internal method of a function object, F,
+ // which was created using the bind function is called with a
+ // this value and a list of arguments ExtraArgs, the following
+ // steps are taken:
+ // 1. Let boundArgs be the value of F's [[BoundArgs]] internal
+ // property.
+ // 2. Let boundThis be the value of F's [[BoundThis]] internal
+ // property.
+ // 3. Let target be the value of F's [[TargetFunction]] internal
+ // property.
+ // 4. Let args be a new list containing the same values as the
+ // list boundArgs in the same order followed by the same
+ // values as the list ExtraArgs in the same order.
+ // 5. Return the result of calling the [[Call]] internal method
+ // of target providing boundThis as the this value and
+ // providing args as the arguments.
+
+ // equiv: target.call(this, ...boundArgs, ...args)
+ return target.apply(
+ that,
+ args.concat(slice.call(arguments))
+ );
+
+ }
+
+ };
+ // XXX bound.length is never writable, so don't even try
+ //
+ // 15. If the [[Class]] internal property of Target is "Function", then
+ // a. Let L be the length property of Target minus the length of A.
+ // b. Set the length own property of F to either 0 or L, whichever is
+ // larger.
+ // 16. Else set the length own property of F to 0.
+ // 17. Set the attributes of the length own property of F to the values
+ // specified in 15.3.5.1.
+
+ // TODO
+ // 18. Set the [[Extensible]] internal property of F to true.
+
+ // TODO
+ // 19. Let thrower be the [[ThrowTypeError]] function Object (13.2.3).
+ // 20. Call the [[DefineOwnProperty]] internal method of F with
+ // arguments "caller", PropertyDescriptor {[[Get]]: thrower, [[Set]]:
+ // thrower, [[Enumerable]]: false, [[Configurable]]: false}, and
+ // false.
+ // 21. Call the [[DefineOwnProperty]] internal method of F with
+ // arguments "arguments", PropertyDescriptor {[[Get]]: thrower,
+ // [[Set]]: thrower, [[Enumerable]]: false, [[Configurable]]: false},
+ // and false.
+
+ // TODO
+ // NOTE Function objects created using Function.prototype.bind do not
+ // have a prototype property or the [[Code]], [[FormalParameters]], and
+ // [[Scope]] internal properties.
+ // XXX can't delete prototype in pure-js.
+
+ // 22. Return F.
+ return bound;
+ };
+}
+
+// Shortcut to an often accessed properties, in order to avoid multiple
+// dereference that costs universally.
+// _Please note: Shortcuts are defined after `Function.prototype.bind` as we
+// us it in defining shortcuts.
+var call = Function.prototype.call;
+var prototypeOfArray = Array.prototype;
+var prototypeOfObject = Object.prototype;
+var slice = prototypeOfArray.slice;
+var toString = call.bind(prototypeOfObject.toString);
+var owns = call.bind(prototypeOfObject.hasOwnProperty);
+
+// If JS engine supports accessors creating shortcuts.
+var defineGetter;
+var defineSetter;
+var lookupGetter;
+var lookupSetter;
+var supportsAccessors;
+if ((supportsAccessors = owns(prototypeOfObject, "__defineGetter__"))) {
+ defineGetter = call.bind(prototypeOfObject.__defineGetter__);
+ defineSetter = call.bind(prototypeOfObject.__defineSetter__);
+ lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);
+ lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);
+}
+
+//
+// Array
+// =====
+//
+
+// ES5 15.4.3.2
+// http://es5.github.com/#x15.4.3.2
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/isArray
+if (!Array.isArray) {
+ Array.isArray = function isArray(obj) {
+ return toString(obj) == "[object Array]";
+ };
+}
+
+// The IsCallable() check in the Array functions
+// has been replaced with a strict check on the
+// internal class of the object to trap cases where
+// the provided function was actually a regular
+// expression literal, which in V8 and
+// JavaScriptCore is a typeof "function". Only in
+// V8 are regular expression literals permitted as
+// reduce parameters, so it is desirable in the
+// general case for the shim to match the more
+// strict and common behavior of rejecting regular
+// expressions.
+
+// ES5 15.4.4.18
+// http://es5.github.com/#x15.4.4.18
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/array/forEach
+if (!Array.prototype.forEach) {
+ Array.prototype.forEach = function forEach(fun /*, thisp*/) {
+ var self = toObject(this),
+ thisp = arguments[1],
+ i = 0,
+ length = self.length >>> 0;
+
+ // If no callback function or if callback is not a callable function
+ if (toString(fun) != "[object Function]") {
+ throw new TypeError(); // TODO message
+ }
+
+ while (i < length) {
+ if (i in self) {
+ // Invoke the callback function with call, passing arguments:
+ // context, property value, property key, thisArg object context
+ fun.call(thisp, self[i], i, self);
+ }
+ i++;
+ }
+ };
+}
+
+// ES5 15.4.4.19
+// http://es5.github.com/#x15.4.4.19
+// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/map
+if (!Array.prototype.map) {
+ Array.prototype.map = function map(fun /*, thisp*/) {
+ var self = toObject(this),
+ length = self.length >>> 0,
+ result = Array(length),
+ thisp = arguments[1];
+
+ // If no callback function or if callback is not a callable function
+ if (toString(fun) != "[object Function]") {
+ throw new TypeError(); // TODO message
+ }
+
+ for (var i = 0; i < length; i++) {
+ if (i in self)
+ result[i] = fun.call(thisp, self[i], i, self);
+ }
+ return result;
+ };
+}
+
+// ES5 15.4.4.20
+// http://es5.github.com/#x15.4.4.20
+// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/filter
+if (!Array.prototype.filter) {
+ Array.prototype.filter = function filter(fun /*, thisp */) {
+ var self = toObject(this),
+ length = self.length >>> 0,
+ result = [],
+ thisp = arguments[1];
+
+ // If no callback function or if callback is not a callable function
+ if (toString(fun) != "[object Function]") {
+ throw new TypeError(); // TODO message
+ }
+
+ for (var i = 0; i < length; i++) {
+ if (i in self && fun.call(thisp, self[i], i, self))
+ result.push(self[i]);
+ }
+ return result;
+ };
+}
+
+// ES5 15.4.4.16
+// http://es5.github.com/#x15.4.4.16
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/every
+if (!Array.prototype.every) {
+ Array.prototype.every = function every(fun /*, thisp */) {
+ var self = toObject(this),
+ length = self.length >>> 0,
+ thisp = arguments[1];
+
+ // If no callback function or if callback is not a callable function
+ if (toString(fun) != "[object Function]") {
+ throw new TypeError(); // TODO message
+ }
+
+ for (var i = 0; i < length; i++) {
+ if (i in self && !fun.call(thisp, self[i], i, self))
+ return false;
+ }
+ return true;
+ };
+}
+
+// ES5 15.4.4.17
+// http://es5.github.com/#x15.4.4.17
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/some
+if (!Array.prototype.some) {
+ Array.prototype.some = function some(fun /*, thisp */) {
+ var self = toObject(this),
+ length = self.length >>> 0,
+ thisp = arguments[1];
+
+ // If no callback function or if callback is not a callable function
+ if (toString(fun) != "[object Function]") {
+ throw new TypeError(); // TODO message
+ }
+
+ for (var i = 0; i < length; i++) {
+ if (i in self && fun.call(thisp, self[i], i, self))
+ return true;
+ }
+ return false;
+ };
+}
+
+// ES5 15.4.4.21
+// http://es5.github.com/#x15.4.4.21
+// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/reduce
+if (!Array.prototype.reduce) {
+ Array.prototype.reduce = function reduce(fun /*, initial*/) {
+ var self = toObject(this),
+ length = self.length >>> 0;
+
+ // If no callback function or if callback is not a callable function
+ if (toString(fun) != "[object Function]") {
+ throw new TypeError(); // TODO message
+ }
+
+ // no value to return if no initial value and an empty array
+ if (!length && arguments.length == 1)
+ throw new TypeError(); // TODO message
+
+ var i = 0;
+ var result;
+ if (arguments.length >= 2) {
+ result = arguments[1];
+ } else {
+ do {
+ if (i in self) {
+ result = self[i++];
+ break;
+ }
+
+ // if array contains no values, no initial value to return
+ if (++i >= length)
+ throw new TypeError(); // TODO message
+ } while (true);
+ }
+
+ for (; i < length; i++) {
+ if (i in self)
+ result = fun.call(void 0, result, self[i], i, self);
+ }
+
+ return result;
+ };
+}
+
+// ES5 15.4.4.22
+// http://es5.github.com/#x15.4.4.22
+// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/reduceRight
+if (!Array.prototype.reduceRight) {
+ Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {
+ var self = toObject(this),
+ length = self.length >>> 0;
+
+ // If no callback function or if callback is not a callable function
+ if (toString(fun) != "[object Function]") {
+ throw new TypeError(); // TODO message
+ }
+
+ // no value to return if no initial value, empty array
+ if (!length && arguments.length == 1)
+ throw new TypeError(); // TODO message
+
+ var result, i = length - 1;
+ if (arguments.length >= 2) {
+ result = arguments[1];
+ } else {
+ do {
+ if (i in self) {
+ result = self[i--];
+ break;
+ }
+
+ // if array contains no values, no initial value to return
+ if (--i < 0)
+ throw new TypeError(); // TODO message
+ } while (true);
+ }
+
+ do {
+ if (i in this)
+ result = fun.call(void 0, result, self[i], i, self);
+ } while (i--);
+
+ return result;
+ };
+}
+
+// ES5 15.4.4.14
+// http://es5.github.com/#x15.4.4.14
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf
+if (!Array.prototype.indexOf) {
+ Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {
+ var self = toObject(this),
+ length = self.length >>> 0;
+
+ if (!length)
+ return -1;
+
+ var i = 0;
+ if (arguments.length > 1)
+ i = toInteger(arguments[1]);
+
+ // handle negative indices
+ i = i >= 0 ? i : Math.max(0, length + i);
+ for (; i < length; i++) {
+ if (i in self && self[i] === sought) {
+ return i;
+ }
+ }
+ return -1;
+ };
+}
+
+// ES5 15.4.4.15
+// http://es5.github.com/#x15.4.4.15
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/lastIndexOf
+if (!Array.prototype.lastIndexOf) {
+ Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {
+ var self = toObject(this),
+ length = self.length >>> 0;
+
+ if (!length)
+ return -1;
+ var i = length - 1;
+ if (arguments.length > 1)
+ i = Math.min(i, toInteger(arguments[1]));
+ // handle negative indices
+ i = i >= 0 ? i : length - Math.abs(i);
+ for (; i >= 0; i--) {
+ if (i in self && sought === self[i])
+ return i;
+ }
+ return -1;
+ };
+}
+
+//
+// Object
+// ======
+//
+
+// ES5 15.2.3.2
+// http://es5.github.com/#x15.2.3.2
+if (!Object.getPrototypeOf) {
+ // https://github.com/kriskowal/es5-shim/issues#issue/2
+ // http://ejohn.org/blog/objectgetprototypeof/
+ // recommended by fschaefer on github
+ Object.getPrototypeOf = function getPrototypeOf(object) {
+ return object.__proto__ || (
+ object.constructor ?
+ object.constructor.prototype :
+ prototypeOfObject
+ );
+ };
+}
+
+// ES5 15.2.3.3
+// http://es5.github.com/#x15.2.3.3
+if (!Object.getOwnPropertyDescriptor) {
+ var ERR_NON_OBJECT = "Object.getOwnPropertyDescriptor called on a " +
+ "non-object: ";
+ Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {
+ if ((typeof object != "object" && typeof object != "function") || object === null)
+ throw new TypeError(ERR_NON_OBJECT + object);
+ // If object does not owns property return undefined immediately.
+ if (!owns(object, property))
+ return;
+
+ var descriptor, getter, setter;
+
+ // If object has a property then it's for sure both `enumerable` and
+ // `configurable`.
+ descriptor = { enumerable: true, configurable: true };
+
+ // If JS engine supports accessor properties then property may be a
+ // getter or setter.
+ if (supportsAccessors) {
+ // Unfortunately `__lookupGetter__` will return a getter even
+ // if object has own non getter property along with a same named
+ // inherited getter. To avoid misbehavior we temporary remove
+ // `__proto__` so that `__lookupGetter__` will return getter only
+ // if it's owned by an object.
+ var prototype = object.__proto__;
+ object.__proto__ = prototypeOfObject;
+
+ var getter = lookupGetter(object, property);
+ var setter = lookupSetter(object, property);
+
+ // Once we have getter and setter we can put values back.
+ object.__proto__ = prototype;
+
+ if (getter || setter) {
+ if (getter) descriptor.get = getter;
+ if (setter) descriptor.set = setter;
+
+ // If it was accessor property we're done and return here
+ // in order to avoid adding `value` to the descriptor.
+ return descriptor;
+ }
+ }
+
+ // If we got this far we know that object has an own property that is
+ // not an accessor so we set it as a value and return descriptor.
+ descriptor.value = object[property];
+ return descriptor;
+ };
+}
+
+// ES5 15.2.3.4
+// http://es5.github.com/#x15.2.3.4
+if (!Object.getOwnPropertyNames) {
+ Object.getOwnPropertyNames = function getOwnPropertyNames(object) {
+ return Object.keys(object);
+ };
+}
+
+// ES5 15.2.3.5
+// http://es5.github.com/#x15.2.3.5
+if (!Object.create) {
+ Object.create = function create(prototype, properties) {
+ var object;
+ if (prototype === null) {
+ object = { "__proto__": null };
+ } else {
+ if (typeof prototype != "object")
+ throw new TypeError("typeof prototype["+(typeof prototype)+"] != 'object'");
+ var Type = function () {};
+ Type.prototype = prototype;
+ object = new Type();
+ // IE has no built-in implementation of `Object.getPrototypeOf`
+ // neither `__proto__`, but this manually setting `__proto__` will
+ // guarantee that `Object.getPrototypeOf` will work as expected with
+ // objects created using `Object.create`
+ object.__proto__ = prototype;
+ }
+ if (properties !== void 0)
+ Object.defineProperties(object, properties);
+ return object;
+ };
+}
+
+// ES5 15.2.3.6
+// http://es5.github.com/#x15.2.3.6
+
+// Patch for WebKit and IE8 standard mode
+// Designed by hax <hax.github.com>
+// related issue: https://github.com/kriskowal/es5-shim/issues#issue/5
+// IE8 Reference:
+// http://msdn.microsoft.com/en-us/library/dd282900.aspx
+// http://msdn.microsoft.com/en-us/library/dd229916.aspx
+// WebKit Bugs:
+// https://bugs.webkit.org/show_bug.cgi?id=36423
+
+function doesDefinePropertyWork(object) {
+ try {
+ Object.defineProperty(object, "sentinel", {});
+ return "sentinel" in object;
+ } catch (exception) {
+ // returns falsy
+ }
+}
+
+// check whether defineProperty works if it's given. Otherwise,
+// shim partially.
+if (Object.defineProperty) {
+ var definePropertyWorksOnObject = doesDefinePropertyWork({});
+ var definePropertyWorksOnDom = typeof document == "undefined" ||
+ doesDefinePropertyWork(document.createElement("div"));
+ if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {
+ var definePropertyFallback = Object.defineProperty;
+ }
+}
+
+if (!Object.defineProperty || definePropertyFallback) {
+ var ERR_NON_OBJECT_DESCRIPTOR = "Property description must be an object: ";
+ var ERR_NON_OBJECT_TARGET = "Object.defineProperty called on non-object: "
+ var ERR_ACCESSORS_NOT_SUPPORTED = "getters & setters can not be defined " +
+ "on this javascript engine";
+
+ Object.defineProperty = function defineProperty(object, property, descriptor) {
+ if ((typeof object != "object" && typeof object != "function") || object === null)
+ throw new TypeError(ERR_NON_OBJECT_TARGET + object);
+ if ((typeof descriptor != "object" && typeof descriptor != "function") || descriptor === null)
+ throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);
+
+ // make a valiant attempt to use the real defineProperty
+ // for I8's DOM elements.
+ if (definePropertyFallback) {
+ try {
+ return definePropertyFallback.call(Object, object, property, descriptor);
+ } catch (exception) {
+ // try the shim if the real one doesn't work
+ }
+ }
+
+ // If it's a data property.
+ if (owns(descriptor, "value")) {
+ // fail silently if "writable", "enumerable", or "configurable"
+ // are requested but not supported
+ /*
+ // alternate approach:
+ if ( // can't implement these features; allow false but not true
+ !(owns(descriptor, "writable") ? descriptor.writable : true) ||
+ !(owns(descriptor, "enumerable") ? descriptor.enumerable : true) ||
+ !(owns(descriptor, "configurable") ? descriptor.configurable : true)
+ )
+ throw new RangeError(
+ "This implementation of Object.defineProperty does not " +
+ "support configurable, enumerable, or writable."
+ );
+ */
+
+ if (supportsAccessors && (lookupGetter(object, property) ||
+ lookupSetter(object, property)))
+ {
+ // As accessors are supported only on engines implementing
+ // `__proto__` we can safely override `__proto__` while defining
+ // a property to make sure that we don't hit an inherited
+ // accessor.
+ var prototype = object.__proto__;
+ object.__proto__ = prototypeOfObject;
+ // Deleting a property anyway since getter / setter may be
+ // defined on object itself.
+ delete object[property];
+ object[property] = descriptor.value;
+ // Setting original `__proto__` back now.
+ object.__proto__ = prototype;
+ } else {
+ object[property] = descriptor.value;
+ }
+ } else {
+ if (!supportsAccessors)
+ throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);
+ // If we got that far then getters and setters can be defined !!
+ if (owns(descriptor, "get"))
+ defineGetter(object, property, descriptor.get);
+ if (owns(descriptor, "set"))
+ defineSetter(object, property, descriptor.set);
+ }
+
+ return object;
+ };
+}
+
+// ES5 15.2.3.7
+// http://es5.github.com/#x15.2.3.7
+if (!Object.defineProperties) {
+ Object.defineProperties = function defineProperties(object, properties) {
+ for (var property in properties) {
+ if (owns(properties, property))
+ Object.defineProperty(object, property, properties[property]);
+ }
+ return object;
+ };
+}
+
+// ES5 15.2.3.8
+// http://es5.github.com/#x15.2.3.8
+if (!Object.seal) {
+ Object.seal = function seal(object) {
+ // this is misleading and breaks feature-detection, but
+ // allows "securable" code to "gracefully" degrade to working
+ // but insecure code.
+ return object;
+ };
+}
+
+// ES5 15.2.3.9
+// http://es5.github.com/#x15.2.3.9
+if (!Object.freeze) {
+ Object.freeze = function freeze(object) {
+ // this is misleading and breaks feature-detection, but
+ // allows "securable" code to "gracefully" degrade to working
+ // but insecure code.
+ return object;
+ };
+}
+
+// detect a Rhino bug and patch it
+try {
+ Object.freeze(function () {});
+} catch (exception) {
+ Object.freeze = (function freeze(freezeObject) {
+ return function freeze(object) {
+ if (typeof object == "function") {
+ return object;
+ } else {
+ return freezeObject(object);
+ }
+ };
+ })(Object.freeze);
+}
+
+// ES5 15.2.3.10
+// http://es5.github.com/#x15.2.3.10
+if (!Object.preventExtensions) {
+ Object.preventExtensions = function preventExtensions(object) {
+ // this is misleading and breaks feature-detection, but
+ // allows "securable" code to "gracefully" degrade to working
+ // but insecure code.
+ return object;
+ };
+}
+
+// ES5 15.2.3.11
+// http://es5.github.com/#x15.2.3.11
+if (!Object.isSealed) {
+ Object.isSealed = function isSealed(object) {
+ return false;
+ };
+}
+
+// ES5 15.2.3.12
+// http://es5.github.com/#x15.2.3.12
+if (!Object.isFrozen) {
+ Object.isFrozen = function isFrozen(object) {
+ return false;
+ };
+}
+
+// ES5 15.2.3.13
+// http://es5.github.com/#x15.2.3.13
+if (!Object.isExtensible) {
+ Object.isExtensible = function isExtensible(object) {
+ // 1. If Type(O) is not Object throw a TypeError exception.
+ if (Object(object) === object) {
+ throw new TypeError(); // TODO message
+ }
+ // 2. Return the Boolean value of the [[Extensible]] internal property of O.
+ var name = '';
+ while (owns(object, name)) {
+ name += '?';
+ }
+ object[name] = true;
+ var returnValue = owns(object, name);
+ delete object[name];
+ return returnValue;
+ };
+}
+
+// ES5 15.2.3.14
+// http://es5.github.com/#x15.2.3.14
+if (!Object.keys) {
+ // http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation
+ var hasDontEnumBug = true,
+ dontEnums = [
+ "toString",
+ "toLocaleString",
+ "valueOf",
+ "hasOwnProperty",
+ "isPrototypeOf",
+ "propertyIsEnumerable",
+ "constructor"
+ ],
+ dontEnumsLength = dontEnums.length;
+
+ for (var key in {"toString": null})
+ hasDontEnumBug = false;
+
+ Object.keys = function keys(object) {
+
+ if ((typeof object != "object" && typeof object != "function") || object === null)
+ throw new TypeError("Object.keys called on a non-object");
+
+ var keys = [];
+ for (var name in object) {
+ if (owns(object, name)) {
+ keys.push(name);
+ }
+ }
+
+ if (hasDontEnumBug) {
+ for (var i = 0, ii = dontEnumsLength; i < ii; i++) {
+ var dontEnum = dontEnums[i];
+ if (owns(object, dontEnum)) {
+ keys.push(dontEnum);
+ }
+ }
+ }
+
+ return keys;
+ };
+
+}
+
+//
+// Date
+// ====
+//
+
+// ES5 15.9.5.43
+// http://es5.github.com/#x15.9.5.43
+// This function returns a String value represent the instance in time
+// represented by this Date object. The format of the String is the Date Time
+// string format defined in 15.9.1.15. All fields are present in the String.
+// The time zone is always UTC, denoted by the suffix Z. If the time value of
+// this object is not a finite Number a RangeError exception is thrown.
+if (!Date.prototype.toISOString || (new Date(-62198755200000).toISOString().indexOf('-000001') === -1)) {
+ Date.prototype.toISOString = function toISOString() {
+ var result, length, value, year;
+ if (!isFinite(this))
+ throw new RangeError;
+
+ // the date time string format is specified in 15.9.1.15.
+ result = [this.getUTCMonth() + 1, this.getUTCDate(),
+ this.getUTCHours(), this.getUTCMinutes(), this.getUTCSeconds()];
+ year = this.getUTCFullYear();
+ year = (year < 0 ? '-' : (year > 9999 ? '+' : '')) + ('00000' + Math.abs(year)).slice(0 <= year && year <= 9999 ? -4 : -6);
+
+ length = result.length;
+ while (length--) {
+ value = result[length];
+ // pad months, days, hours, minutes, and seconds to have two digits.
+ if (value < 10)
+ result[length] = "0" + value;
+ }
+ // pad milliseconds to have three digits.
+ return year + "-" + result.slice(0, 2).join("-") + "T" + result.slice(2).join(":") + "." +
+ ("000" + this.getUTCMilliseconds()).slice(-3) + "Z";
+ }
+}
+
+// ES5 15.9.4.4
+// http://es5.github.com/#x15.9.4.4
+if (!Date.now) {
+ Date.now = function now() {
+ return new Date().getTime();
+ };
+}
+
+// ES5 15.9.5.44
+// http://es5.github.com/#x15.9.5.44
+// This function provides a String representation of a Date object for use by
+// JSON.stringify (15.12.3).
+if (!Date.prototype.toJSON) {
+ Date.prototype.toJSON = function toJSON(key) {
+ // When the toJSON method is called with argument key, the following
+ // steps are taken:
+
+ // 1. Let O be the result of calling ToObject, giving it the this
+ // value as its argument.
+ // 2. Let tv be ToPrimitive(O, hint Number).
+ // 3. If tv is a Number and is not finite, return null.
+ // XXX
+ // 4. Let toISO be the result of calling the [[Get]] internal method of
+ // O with argument "toISOString".
+ // 5. If IsCallable(toISO) is false, throw a TypeError exception.
+ if (typeof this.toISOString != "function")
+ throw new TypeError(); // TODO message
+ // 6. Return the result of calling the [[Call]] internal method of
+ // toISO with O as the this value and an empty argument list.
+ return this.toISOString();
+
+ // NOTE 1 The argument is ignored.
+
+ // NOTE 2 The toJSON function is intentionally generic; it does not
+ // require that its this value be a Date object. Therefore, it can be
+ // transferred to other kinds of objects for use as a method. However,
+ // it does require that any such object have a toISOString method. An
+ // object is free to use the argument key to filter its
+ // stringification.
+ };
+}
+
+// ES5 15.9.4.2
+// http://es5.github.com/#x15.9.4.2
+// based on work shared by Daniel Friesen (dantman)
+// http://gist.github.com/303249
+if (Date.parse("+275760-09-13T00:00:00.000Z") !== 8.64e15) {
+ // XXX global assignment won't work in embeddings that use
+ // an alternate object for the context.
+ Date = (function(NativeDate) {
+
+ // Date.length === 7
+ var Date = function Date(Y, M, D, h, m, s, ms) {
+ var length = arguments.length;
+ if (this instanceof NativeDate) {
+ var date = length == 1 && String(Y) === Y ? // isString(Y)
+ // We explicitly pass it through parse:
+ new NativeDate(Date.parse(Y)) :
+ // We have to manually make calls depending on argument
+ // length here
+ length >= 7 ? new NativeDate(Y, M, D, h, m, s, ms) :
+ length >= 6 ? new NativeDate(Y, M, D, h, m, s) :
+ length >= 5 ? new NativeDate(Y, M, D, h, m) :
+ length >= 4 ? new NativeDate(Y, M, D, h) :
+ length >= 3 ? new NativeDate(Y, M, D) :
+ length >= 2 ? new NativeDate(Y, M) :
+ length >= 1 ? new NativeDate(Y) :
+ new NativeDate();
+ // Prevent mixups with unfixed Date object
+ date.constructor = Date;
+ return date;
+ }
+ return NativeDate.apply(this, arguments);
+ };
+
+ // 15.9.1.15 Date Time String Format.
+ var isoDateExpression = new RegExp("^" +
+ "(\\d{4}|[\+\-]\\d{6})" + // four-digit year capture or sign + 6-digit extended year
+ "(?:-(\\d{2})" + // optional month capture
+ "(?:-(\\d{2})" + // optional day capture
+ "(?:" + // capture hours:minutes:seconds.milliseconds
+ "T(\\d{2})" + // hours capture
+ ":(\\d{2})" + // minutes capture
+ "(?:" + // optional :seconds.milliseconds
+ ":(\\d{2})" + // seconds capture
+ "(?:\\.(\\d{3}))?" + // milliseconds capture
+ ")?" +
+ "(?:" + // capture UTC offset component
+ "Z|" + // UTC capture
+ "(?:" + // offset specifier +/-hours:minutes
+ "([-+])" + // sign capture
+ "(\\d{2})" + // hours offset capture
+ ":(\\d{2})" + // minutes offset capture
+ ")" +
+ ")?)?)?)?" +
+ "$");
+
+ // Copy any custom methods a 3rd party library may have added
+ for (var key in NativeDate)
+ Date[key] = NativeDate[key];
+
+ // Copy "native" methods explicitly; they may be non-enumerable
+ Date.now = NativeDate.now;
+ Date.UTC = NativeDate.UTC;
+ Date.prototype = NativeDate.prototype;
+ Date.prototype.constructor = Date;
+
+ // Upgrade Date.parse to handle simplified ISO 8601 strings
+ Date.parse = function parse(string) {
+ var match = isoDateExpression.exec(string);
+ if (match) {
+ match.shift(); // kill match[0], the full match
+ // parse months, days, hours, minutes, seconds, and milliseconds
+ for (var i = 1; i < 7; i++) {
+ // provide default values if necessary
+ match[i] = +(match[i] || (i < 3 ? 1 : 0));
+ // match[1] is the month. Months are 0-11 in JavaScript
+ // `Date` objects, but 1-12 in ISO notation, so we
+ // decrement.
+ if (i == 1)
+ match[i]--;
+ }
+
+ // parse the UTC offset component
+ var minuteOffset = +match.pop(), hourOffset = +match.pop(), sign = match.pop();
+
+ // compute the explicit time zone offset if specified
+ var offset = 0;
+ if (sign) {
+ // detect invalid offsets and return early
+ if (hourOffset > 23 || minuteOffset > 59)
+ return NaN;
+
+ // express the provided time zone offset in minutes. The offset is
+ // negative for time zones west of UTC; positive otherwise.
+ offset = (hourOffset * 60 + minuteOffset) * 6e4 * (sign == "+" ? -1 : 1);
+ }
+
+ // Date.UTC for years between 0 and 99 converts year to 1900 + year
+ // The Gregorian calendar has a 400-year cycle, so
+ // to Date.UTC(year + 400, .... ) - 12622780800000 == Date.UTC(year, ...),
+ // where 12622780800000 - number of milliseconds in Gregorian calendar 400 years
+ var year = +match[0];
+ if (0 <= year && year <= 99) {
+ match[0] = year + 400;
+ return NativeDate.UTC.apply(this, match) + offset - 12622780800000;
+ }
+
+ // compute a new UTC date value, accounting for the optional offset
+ return NativeDate.UTC.apply(this, match) + offset;
+ }
+ return NativeDate.parse.apply(this, arguments);
+ };
+
+ return Date;
+ })(Date);
+}
+
+//
+// String
+// ======
+//
+
+// ES5 15.5.4.20
+// http://es5.github.com/#x15.5.4.20
+var ws = "\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003" +
+ "\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028" +
+ "\u2029\uFEFF";
+if (!String.prototype.trim || ws.trim()) {
+ // http://blog.stevenlevithan.com/archives/faster-trim-javascript
+ // http://perfectionkills.com/whitespace-deviations/
+ ws = "[" + ws + "]";
+ var trimBeginRegexp = new RegExp("^" + ws + ws + "*"),
+ trimEndRegexp = new RegExp(ws + ws + "*$");
+ String.prototype.trim = function trim() {
+ return String(this).replace(trimBeginRegexp, "").replace(trimEndRegexp, "");
+ };
+}
+
+//
+// Util
+// ======
+//
+
+// ES5 9.4
+// http://es5.github.com/#x9.4
+// http://jsperf.com/to-integer
+var toInteger = function (n) {
+ n = +n;
+ if (n !== n) // isNaN
+ n = 0;
+ else if (n !== 0 && n !== (1/0) && n !== -(1/0))
+ n = (n > 0 || -1) * Math.floor(Math.abs(n));
+ return n;
+};
+
+var prepareString = "a"[0] != "a",
+ // ES5 9.9
+ // http://es5.github.com/#x9.9
+ toObject = function (o) {
+ if (o == null) { // this matches both null and undefined
+ throw new TypeError(); // TODO message
+ }
+ // If the implementation doesn't support by-index access of
+ // string characters (ex. IE < 7), split the string
+ if (prepareString && typeof o == "string" && o) {
+ return o.split("");
+ }
+ return Object(o);
+ };
+});/* vim:ts=4:sts=4:sw=4:
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ * Irakli Gozalishvili <rfobic@gmail.com> (http://jeditoolkit.com)
+ * Mike de Boer <mike AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/lib/event_emitter', ['require', 'exports', 'module' ], function(require, exports, module) {
+"use strict";
+
+var EventEmitter = {};
+
+EventEmitter._emit =
+EventEmitter._dispatchEvent = function(eventName, e) {
+ this._eventRegistry = this._eventRegistry || {};
+ this._defaultHandlers = this._defaultHandlers || {};
+
+ var listeners = this._eventRegistry[eventName] || [];
+ var defaultHandler = this._defaultHandlers[eventName];
+ if (!listeners.length && !defaultHandler)
+ return;
+
+ e = e || {};
+ e.type = eventName;
+
+ if (!e.stopPropagation) {
+ e.stopPropagation = function() {
+ this.propagationStopped = true;
+ };
+ }
+
+ if (!e.preventDefault) {
+ e.preventDefault = function() {
+ this.defaultPrevented = true;
+ };
+ }
+
+ for (var i=0; i<listeners.length; i++) {
+ listeners[i](e);
+ if (e.propagationStopped)
+ break;
+ }
+
+ if (defaultHandler && !e.defaultPrevented)
+ defaultHandler(e);
+};
+
+EventEmitter.setDefaultHandler = function(eventName, callback) {
+ this._defaultHandlers = this._defaultHandlers || {};
+
+ if (this._defaultHandlers[eventName])
+ throw new Error("The default handler for '" + eventName + "' is already set");
+
+ this._defaultHandlers[eventName] = callback;
+};
+
+EventEmitter.on =
+EventEmitter.addEventListener = function(eventName, callback) {
+ this._eventRegistry = this._eventRegistry || {};
+
+ var listeners = this._eventRegistry[eventName];
+ if (!listeners)
+ var listeners = this._eventRegistry[eventName] = [];
+
+ if (listeners.indexOf(callback) == -1)
+ listeners.push(callback);
+};
+
+EventEmitter.removeListener =
+EventEmitter.removeEventListener = function(eventName, callback) {
+ this._eventRegistry = this._eventRegistry || {};
+
+ var listeners = this._eventRegistry[eventName];
+ if (!listeners)
+ return;
+
+ var index = listeners.indexOf(callback);
+ if (index !== -1)
+ listeners.splice(index, 1);
+};
+
+EventEmitter.removeAllListeners = function(eventName) {
+ if (this._eventRegistry) this._eventRegistry[eventName] = [];
+};
+
+exports.EventEmitter = EventEmitter;
+
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/lib/oop', ['require', 'exports', 'module' ], function(require, exports, module) {
+"use strict";
+
+exports.inherits = (function() {
+ var tempCtor = function() {};
+ return function(ctor, superCtor) {
+ tempCtor.prototype = superCtor.prototype;
+ ctor.super_ = superCtor.prototype;
+ ctor.prototype = new tempCtor();
+ ctor.prototype.constructor = ctor;
+ };
+}());
+
+exports.mixin = function(obj, mixin) {
+ for (var key in mixin) {
+ obj[key] = mixin[key];
+ }
+};
+
+exports.implement = function(proto, mixin) {
+ exports.mixin(proto, mixin);
+};
+
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/coffee_worker', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/worker/mirror', 'ace/mode/coffee/coffee-script'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var Mirror = require("../worker/mirror").Mirror;
+var coffee = require("../mode/coffee/coffee-script");
+
+window.addEventListener = function() {};
+
+
+var Worker = exports.Worker = function(sender) {
+ Mirror.call(this, sender);
+ this.setTimeout(200);
+};
+
+oop.inherits(Worker, Mirror);
+
+(function() {
+
+ this.onUpdate = function() {
+ var value = this.doc.getValue();
+
+ try {
+ coffee.parse(value);
+ } catch(e) {
+ var m = e.message.match(/Parse error on line (\d+): (.*)/);
+ if (m) {
+ this.sender.emit("error", {
+ row: parseInt(m[1]) - 1,
+ column: null,
+ text: m[2],
+ type: "error"
+ });
+ return;
+ }
+
+ if (e instanceof SyntaxError) {
+ var m = e.message.match(/ on line (\d+)/);
+ if (m) {
+ this.sender.emit("error", {
+ row: parseInt(m[1]) - 1,
+ column: null,
+ text: e.message.replace(m[0], ""),
+ type: "error"
+ });
+ }
+ }
+ return;
+ }
+ this.sender.emit("ok");
+ };
+
+}).call(Worker.prototype);
+
+});define('ace/worker/mirror', ['require', 'exports', 'module' , 'ace/document', 'ace/lib/lang'], function(require, exports, module) {
+"use strict";
+
+var Document = require("../document").Document;
+var lang = require("../lib/lang");
+
+var Mirror = exports.Mirror = function(sender) {
+ this.sender = sender;
+ var doc = this.doc = new Document("");
+
+ var deferredUpdate = this.deferredUpdate = lang.deferredCall(this.onUpdate.bind(this));
+
+ var _self = this;
+ sender.on("change", function(e) {
+ doc.applyDeltas([e.data]);
+ deferredUpdate.schedule(_self.$timeout);
+ });
+};
+
+(function() {
+
+ this.$timeout = 500;
+
+ this.setTimeout = function(timeout) {
+ this.$timeout = timeout;
+ };
+
+ this.setValue = function(value) {
+ this.doc.setValue(value);
+ this.deferredUpdate.schedule(this.$timeout);
+ };
+
+ this.getValue = function(callbackId) {
+ this.sender.callback(this.doc.getValue(), callbackId);
+ };
+
+ this.onUpdate = function() {
+ // abstract method
+ };
+
+}).call(Mirror.prototype);
+
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/document', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event_emitter', 'ace/range', 'ace/anchor'], function(require, exports, module) {
+"use strict";
+
+var oop = require("./lib/oop");
+var EventEmitter = require("./lib/event_emitter").EventEmitter;
+var Range = require("./range").Range;
+var Anchor = require("./anchor").Anchor;
+
+var Document = function(text) {
+ this.$lines = [];
+
+ if (Array.isArray(text)) {
+ this.insertLines(0, text);
+ }
+ // There has to be one line at least in the document. If you pass an empty
+ // string to the insert function, nothing will happen. Workaround.
+ else if (text.length == 0) {
+ this.$lines = [""];
+ } else {
+ this.insert({row: 0, column:0}, text);
+ }
+};
+
+(function() {
+
+ oop.implement(this, EventEmitter);
+
+ this.setValue = function(text) {
+ var len = this.getLength();
+ this.remove(new Range(0, 0, len, this.getLine(len-1).length));
+ this.insert({row: 0, column:0}, text);
+ };
+
+ this.getValue = function() {
+ return this.getAllLines().join(this.getNewLineCharacter());
+ };
+
+ this.createAnchor = function(row, column) {
+ return new Anchor(this, row, column);
+ };
+
+ // check for IE split bug
+ if ("aaa".split(/a/).length == 0)
+ this.$split = function(text) {
+ return text.replace(/\r\n|\r/g, "\n").split("\n");
+ }
+ else
+ this.$split = function(text) {
+ return text.split(/\r\n|\r|\n/);
+ };
+
+
+ this.$detectNewLine = function(text) {
+ var match = text.match(/^.*?(\r\n|\r|\n)/m);
+ if (match) {
+ this.$autoNewLine = match[1];
+ } else {
+ this.$autoNewLine = "\n";
+ }
+ };
+
+ this.getNewLineCharacter = function() {
+ switch (this.$newLineMode) {
+ case "windows":
+ return "\r\n";
+
+ case "unix":
+ return "\n";
+
+ case "auto":
+ return this.$autoNewLine;
+ }
+ };
+
+ this.$autoNewLine = "\n";
+ this.$newLineMode = "auto";
+ this.setNewLineMode = function(newLineMode) {
+ if (this.$newLineMode === newLineMode)
+ return;
+
+ this.$newLineMode = newLineMode;
+ };
+
+ this.getNewLineMode = function() {
+ return this.$newLineMode;
+ };
+
+ this.isNewLine = function(text) {
+ return (text == "\r\n" || text == "\r" || text == "\n");
+ };
+
+ /**
+ * Get a verbatim copy of the given line as it is in the document
+ */
+ this.getLine = function(row) {
+ return this.$lines[row] || "";
+ };
+
+ this.getLines = function(firstRow, lastRow) {
+ return this.$lines.slice(firstRow, lastRow + 1);
+ };
+
+ /**
+ * Returns all lines in the document as string array. Warning: The caller
+ * should not modify this array!
+ */
+ this.getAllLines = function() {
+ return this.getLines(0, this.getLength());
+ };
+
+ this.getLength = function() {
+ return this.$lines.length;
+ };
+
+ this.getTextRange = function(range) {
+ if (range.start.row == range.end.row) {
+ return this.$lines[range.start.row].substring(range.start.column,
+ range.end.column);
+ }
+ else {
+ var lines = [];
+ lines.push(this.$lines[range.start.row].substring(range.start.column));
+ lines.push.apply(lines, this.getLines(range.start.row+1, range.end.row-1));
+ lines.push(this.$lines[range.end.row].substring(0, range.end.column));
+ return lines.join(this.getNewLineCharacter());
+ }
+ };
+
+ this.$clipPosition = function(position) {
+ var length = this.getLength();
+ if (position.row >= length) {
+ position.row = Math.max(0, length - 1);
+ position.column = this.getLine(length-1).length;
+ }
+ return position;
+ };
+
+ this.insert = function(position, text) {
+ if (text.length == 0)
+ return position;
+
+ position = this.$clipPosition(position);
+
+ if (this.getLength() <= 1)
+ this.$detectNewLine(text);
+
+ var lines = this.$split(text);
+ var firstLine = lines.splice(0, 1)[0];
+ var lastLine = lines.length == 0 ? null : lines.splice(lines.length - 1, 1)[0];
+
+ position = this.insertInLine(position, firstLine);
+ if (lastLine !== null) {
+ position = this.insertNewLine(position); // terminate first line
+ position = this.insertLines(position.row, lines);
+ position = this.insertInLine(position, lastLine || "");
+ }
+ return position;
+ };
+
+ this.insertLines = function(row, lines) {
+ if (lines.length == 0)
+ return {row: row, column: 0};
+
+ var args = [row, 0];
+ args.push.apply(args, lines);
+ this.$lines.splice.apply(this.$lines, args);
+
+ var range = new Range(row, 0, row + lines.length, 0);
+ var delta = {
+ action: "insertLines",
+ range: range,
+ lines: lines
+ };
+ this._emit("change", { data: delta });
+ return range.end;
+ };
+
+ this.insertNewLine = function(position) {
+ position = this.$clipPosition(position);
+ var line = this.$lines[position.row] || "";
+
+ this.$lines[position.row] = line.substring(0, position.column);
+ this.$lines.splice(position.row + 1, 0, line.substring(position.column, line.length));
+
+ var end = {
+ row : position.row + 1,
+ column : 0
+ };
+
+ var delta = {
+ action: "insertText",
+ range: Range.fromPoints(position, end),
+ text: this.getNewLineCharacter()
+ };
+ this._emit("change", { data: delta });
+
+ return end;
+ };
+
+ this.insertInLine = function(position, text) {
+ if (text.length == 0)
+ return position;
+
+ var line = this.$lines[position.row] || "";
+
+ this.$lines[position.row] = line.substring(0, position.column) + text
+ + line.substring(position.column);
+
+ var end = {
+ row : position.row,
+ column : position.column + text.length
+ };
+
+ var delta = {
+ action: "insertText",
+ range: Range.fromPoints(position, end),
+ text: text
+ };
+ this._emit("change", { data: delta });
+
+ return end;
+ };
+
+ this.remove = function(range) {
+ // clip to document
+ range.start = this.$clipPosition(range.start);
+ range.end = this.$clipPosition(range.end);
+
+ if (range.isEmpty())
+ return range.start;
+
+ var firstRow = range.start.row;
+ var lastRow = range.end.row;
+
+ if (range.isMultiLine()) {
+ var firstFullRow = range.start.column == 0 ? firstRow : firstRow + 1;
+ var lastFullRow = lastRow - 1;
+
+ if (range.end.column > 0)
+ this.removeInLine(lastRow, 0, range.end.column);
+
+ if (lastFullRow >= firstFullRow)
+ this.removeLines(firstFullRow, lastFullRow);
+
+ if (firstFullRow != firstRow) {
+ this.removeInLine(firstRow, range.start.column, this.getLine(firstRow).length);
+ this.removeNewLine(range.start.row);
+ }
+ }
+ else {
+ this.removeInLine(firstRow, range.start.column, range.end.column);
+ }
+ return range.start;
+ };
+
+ this.removeInLine = function(row, startColumn, endColumn) {
+ if (startColumn == endColumn)
+ return;
+
+ var range = new Range(row, startColumn, row, endColumn);
+ var line = this.getLine(row);
+ var removed = line.substring(startColumn, endColumn);
+ var newLine = line.substring(0, startColumn) + line.substring(endColumn, line.length);
+ this.$lines.splice(row, 1, newLine);
+
+ var delta = {
+ action: "removeText",
+ range: range,
+ text: removed
+ };
+ this._emit("change", { data: delta });
+ return range.start;
+ };
+
+ /**
+ * Removes a range of full lines
+ *
+ * @param firstRow {Integer} The first row to be removed
+ * @param lastRow {Integer} The last row to be removed
+ * @return {String[]} The removed lines
+ */
+ this.removeLines = function(firstRow, lastRow) {
+ var range = new Range(firstRow, 0, lastRow + 1, 0);
+ var removed = this.$lines.splice(firstRow, lastRow - firstRow + 1);
+
+ var delta = {
+ action: "removeLines",
+ range: range,
+ nl: this.getNewLineCharacter(),
+ lines: removed
+ };
+ this._emit("change", { data: delta });
+ return removed;
+ };
+
+ this.removeNewLine = function(row) {
+ var firstLine = this.getLine(row);
+ var secondLine = this.getLine(row+1);
+
+ var range = new Range(row, firstLine.length, row+1, 0);
+ var line = firstLine + secondLine;
+
+ this.$lines.splice(row, 2, line);
+
+ var delta = {
+ action: "removeText",
+ range: range,
+ text: this.getNewLineCharacter()
+ };
+ this._emit("change", { data: delta });
+ };
+
+ this.replace = function(range, text) {
+ if (text.length == 0 && range.isEmpty())
+ return range.start;
+
+ // Shortcut: If the text we want to insert is the same as it is already
+ // in the document, we don't have to replace anything.
+ if (text == this.getTextRange(range))
+ return range.end;
+
+ this.remove(range);
+ if (text) {
+ var end = this.insert(range.start, text);
+ }
+ else {
+ end = range.start;
+ }
+
+ return end;
+ };
+
+ this.applyDeltas = function(deltas) {
+ for (var i=0; i<deltas.length; i++) {
+ var delta = deltas[i];
+ var range = Range.fromPoints(delta.range.start, delta.range.end);
+
+ if (delta.action == "insertLines")
+ this.insertLines(range.start.row, delta.lines);
+ else if (delta.action == "insertText")
+ this.insert(range.start, delta.text);
+ else if (delta.action == "removeLines")
+ this.removeLines(range.start.row, range.end.row - 1);
+ else if (delta.action == "removeText")
+ this.remove(range);
+ }
+ };
+
+ this.revertDeltas = function(deltas) {
+ for (var i=deltas.length-1; i>=0; i--) {
+ var delta = deltas[i];
+
+ var range = Range.fromPoints(delta.range.start, delta.range.end);
+
+ if (delta.action == "insertLines")
+ this.removeLines(range.start.row, range.end.row - 1);
+ else if (delta.action == "insertText")
+ this.remove(range);
+ else if (delta.action == "removeLines")
+ this.insertLines(range.start.row, delta.lines);
+ else if (delta.action == "removeText")
+ this.insert(range.start, delta.text);
+ }
+ };
+
+}).call(Document.prototype);
+
+exports.Document = Document;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/range', ['require', 'exports', 'module' ], function(require, exports, module) {
+"use strict";
+
+var Range = function(startRow, startColumn, endRow, endColumn) {
+ this.start = {
+ row: startRow,
+ column: startColumn
+ };
+
+ this.end = {
+ row: endRow,
+ column: endColumn
+ };
+};
+
+(function() {
+ this.isEequal = function(range) {
+ return this.start.row == range.start.row &&
+ this.end.row == range.end.row &&
+ this.start.column == range.start.column &&
+ this.end.column == range.end.column
+ };
+
+ this.toString = function() {
+ return ("Range: [" + this.start.row + "/" + this.start.column +
+ "] -> [" + this.end.row + "/" + this.end.column + "]");
+ };
+
+ this.contains = function(row, column) {
+ return this.compare(row, column) == 0;
+ };
+
+ /**
+ * Compares this range (A) with another range (B), where B is the passed in
+ * range.
+ *
+ * Return values:
+ * -2: (B) is infront of (A) and doesn't intersect with (A)
+ * -1: (B) begins before (A) but ends inside of (A)
+ * 0: (B) is completly inside of (A) OR (A) is complety inside of (B)
+ * +1: (B) begins inside of (A) but ends outside of (A)
+ * +2: (B) is after (A) and doesn't intersect with (A)
+ *
+ * 42: FTW state: (B) ends in (A) but starts outside of (A)
+ */
+ this.compareRange = function(range) {
+ var cmp,
+ end = range.end,
+ start = range.start;
+
+ cmp = this.compare(end.row, end.column);
+ if (cmp == 1) {
+ cmp = this.compare(start.row, start.column);
+ if (cmp == 1) {
+ return 2;
+ } else if (cmp == 0) {
+ return 1;
+ } else {
+ return 0;
+ }
+ } else if (cmp == -1) {
+ return -2;
+ } else {
+ cmp = this.compare(start.row, start.column);
+ if (cmp == -1) {
+ return -1;
+ } else if (cmp == 1) {
+ return 42;
+ } else {
+ return 0;
+ }
+ }
+ }
+
+ this.comparePoint = function(p) {
+ return this.compare(p.row, p.column);
+ }
+
+ this.containsRange = function(range) {
+ return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;
+ }
+
+ this.isEnd = function(row, column) {
+ return this.end.row == row && this.end.column == column;
+ }
+
+ this.isStart = function(row, column) {
+ return this.start.row == row && this.start.column == column;
+ }
+
+ this.setStart = function(row, column) {
+ if (typeof row == "object") {
+ this.start.column = row.column;
+ this.start.row = row.row;
+ } else {
+ this.start.row = row;
+ this.start.column = column;
+ }
+ }
+
+ this.setEnd = function(row, column) {
+ if (typeof row == "object") {
+ this.end.column = row.column;
+ this.end.row = row.row;
+ } else {
+ this.end.row = row;
+ this.end.column = column;
+ }
+ }
+
+ this.inside = function(row, column) {
+ if (this.compare(row, column) == 0) {
+ if (this.isEnd(row, column) || this.isStart(row, column)) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ this.insideStart = function(row, column) {
+ if (this.compare(row, column) == 0) {
+ if (this.isEnd(row, column)) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ this.insideEnd = function(row, column) {
+ if (this.compare(row, column) == 0) {
+ if (this.isStart(row, column)) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ this.compare = function(row, column) {
+ if (!this.isMultiLine()) {
+ if (row === this.start.row) {
+ return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);
+ };
+ }
+
+ if (row < this.start.row)
+ return -1;
+
+ if (row > this.end.row)
+ return 1;
+
+ if (this.start.row === row)
+ return column >= this.start.column ? 0 : -1;
+
+ if (this.end.row === row)
+ return column <= this.end.column ? 0 : 1;
+
+ return 0;
+ };
+
+ /**
+ * Like .compare(), but if isStart is true, return -1;
+ */
+ this.compareStart = function(row, column) {
+ if (this.start.row == row && this.start.column == column) {
+ return -1;
+ } else {
+ return this.compare(row, column);
+ }
+ }
+
+ /**
+ * Like .compare(), but if isEnd is true, return 1;
+ */
+ this.compareEnd = function(row, column) {
+ if (this.end.row == row && this.end.column == column) {
+ return 1;
+ } else {
+ return this.compare(row, column);
+ }
+ }
+
+ this.compareInside = function(row, column) {
+ if (this.end.row == row && this.end.column == column) {
+ return 1;
+ } else if (this.start.row == row && this.start.column == column) {
+ return -1;
+ } else {
+ return this.compare(row, column);
+ }
+ }
+
+ this.clipRows = function(firstRow, lastRow) {
+ if (this.end.row > lastRow) {
+ var end = {
+ row: lastRow+1,
+ column: 0
+ };
+ }
+
+ if (this.start.row > lastRow) {
+ var start = {
+ row: lastRow+1,
+ column: 0
+ };
+ }
+
+ if (this.start.row < firstRow) {
+ var start = {
+ row: firstRow,
+ column: 0
+ };
+ }
+
+ if (this.end.row < firstRow) {
+ var end = {
+ row: firstRow,
+ column: 0
+ };
+ }
+ return Range.fromPoints(start || this.start, end || this.end);
+ };
+
+ this.extend = function(row, column) {
+ var cmp = this.compare(row, column);
+
+ if (cmp == 0)
+ return this;
+ else if (cmp == -1)
+ var start = {row: row, column: column};
+ else
+ var end = {row: row, column: column};
+
+ return Range.fromPoints(start || this.start, end || this.end);
+ };
+
+ this.isEmpty = function() {
+ return (this.start.row == this.end.row && this.start.column == this.end.column);
+ };
+
+ this.isMultiLine = function() {
+ return (this.start.row !== this.end.row);
+ };
+
+ this.clone = function() {
+ return Range.fromPoints(this.start, this.end);
+ };
+
+ this.collapseRows = function() {
+ if (this.end.column == 0)
+ return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0)
+ else
+ return new Range(this.start.row, 0, this.end.row, 0)
+ };
+
+ this.toScreenRange = function(session) {
+ var screenPosStart =
+ session.documentToScreenPosition(this.start);
+ var screenPosEnd =
+ session.documentToScreenPosition(this.end);
+
+ return new Range(
+ screenPosStart.row, screenPosStart.column,
+ screenPosEnd.row, screenPosEnd.column
+ );
+ };
+
+}).call(Range.prototype);
+
+
+Range.fromPoints = function(start, end) {
+ return new Range(start.row, start.column, end.row, end.column);
+};
+
+exports.Range = Range;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/anchor', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event_emitter'], function(require, exports, module) {
+"use strict";
+
+var oop = require("./lib/oop");
+var EventEmitter = require("./lib/event_emitter").EventEmitter;
+
+/**
+ * An Anchor is a floating pointer in the document. Whenever text is inserted or
+ * deleted before the cursor, the position of the cursor is updated
+ */
+var Anchor = exports.Anchor = function(doc, row, column) {
+ this.document = doc;
+
+ if (typeof column == "undefined")
+ this.setPosition(row.row, row.column);
+ else
+ this.setPosition(row, column);
+
+ this.$onChange = this.onChange.bind(this);
+ doc.on("change", this.$onChange);
+};
+
+(function() {
+
+ oop.implement(this, EventEmitter);
+
+ this.getPosition = function() {
+ return this.$clipPositionToDocument(this.row, this.column);
+ };
+
+ this.getDocument = function() {
+ return this.document;
+ };
+
+ this.onChange = function(e) {
+ var delta = e.data;
+ var range = delta.range;
+
+ if (range.start.row == range.end.row && range.start.row != this.row)
+ return;
+
+ if (range.start.row > this.row)
+ return;
+
+ if (range.start.row == this.row && range.start.column > this.column)
+ return;
+
+ var row = this.row;
+ var column = this.column;
+
+ if (delta.action === "insertText") {
+ if (range.start.row === row && range.start.column <= column) {
+ if (range.start.row === range.end.row) {
+ column += range.end.column - range.start.column;
+ }
+ else {
+ column -= range.start.column;
+ row += range.end.row - range.start.row;
+ }
+ }
+ else if (range.start.row !== range.end.row && range.start.row < row) {
+ row += range.end.row - range.start.row;
+ }
+ } else if (delta.action === "insertLines") {
+ if (range.start.row <= row) {
+ row += range.end.row - range.start.row;
+ }
+ }
+ else if (delta.action == "removeText") {
+ if (range.start.row == row && range.start.column < column) {
+ if (range.end.column >= column)
+ column = range.start.column;
+ else
+ column = Math.max(0, column - (range.end.column - range.start.column));
+
+ } else if (range.start.row !== range.end.row && range.start.row < row) {
+ if (range.end.row == row) {
+ column = Math.max(0, column - range.end.column) + range.start.column;
+ }
+ row -= (range.end.row - range.start.row);
+ }
+ else if (range.end.row == row) {
+ row -= range.end.row - range.start.row;
+ column = Math.max(0, column - range.end.column) + range.start.column;
+ }
+ } else if (delta.action == "removeLines") {
+ if (range.start.row <= row) {
+ if (range.end.row <= row)
+ row -= range.end.row - range.start.row;
+ else {
+ row = range.start.row;
+ column = 0;
+ }
+ }
+ }
+
+ this.setPosition(row, column, true);
+ };
+
+ this.setPosition = function(row, column, noClip) {
+ var pos;
+ if (noClip) {
+ pos = {
+ row: row,
+ column: column
+ };
+ }
+ else {
+ pos = this.$clipPositionToDocument(row, column);
+ }
+
+ if (this.row == pos.row && this.column == pos.column)
+ return;
+
+ var old = {
+ row: this.row,
+ column: this.column
+ };
+
+ this.row = pos.row;
+ this.column = pos.column;
+ this._emit("change", {
+ old: old,
+ value: pos
+ });
+ };
+
+ this.detach = function() {
+ this.document.removeEventListener("change", this.$onChange);
+ };
+
+ this.$clipPositionToDocument = function(row, column) {
+ var pos = {};
+
+ if (row >= this.document.getLength()) {
+ pos.row = Math.max(0, this.document.getLength() - 1);
+ pos.column = this.document.getLine(pos.row).length;
+ }
+ else if (row < 0) {
+ pos.row = 0;
+ pos.column = 0;
+ }
+ else {
+ pos.row = row;
+ pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));
+ }
+
+ if (column < 0)
+ pos.column = 0;
+
+ return pos;
+ };
+
+}).call(Anchor.prototype);
+
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/lib/lang', ['require', 'exports', 'module' ], function(require, exports, module) {
+"use strict";
+
+exports.stringReverse = function(string) {
+ return string.split("").reverse().join("");
+};
+
+exports.stringRepeat = function (string, count) {
+ return new Array(count + 1).join(string);
+};
+
+var trimBeginRegexp = /^\s\s*/;
+var trimEndRegexp = /\s\s*$/;
+
+exports.stringTrimLeft = function (string) {
+ return string.replace(trimBeginRegexp, '');
+};
+
+exports.stringTrimRight = function (string) {
+ return string.replace(trimEndRegexp, '');
+};
+
+exports.copyObject = function(obj) {
+ var copy = {};
+ for (var key in obj) {
+ copy[key] = obj[key];
+ }
+ return copy;
+};
+
+exports.copyArray = function(array){
+ var copy = [];
+ for (var i=0, l=array.length; i<l; i++) {
+ if (array[i] && typeof array[i] == "object")
+ copy[i] = this.copyObject( array[i] );
+ else
+ copy[i] = array[i];
+ }
+ return copy;
+};
+
+exports.deepCopy = function (obj) {
+ if (typeof obj != "object") {
+ return obj;
+ }
+
+ var copy = obj.constructor();
+ for (var key in obj) {
+ if (typeof obj[key] == "object") {
+ copy[key] = this.deepCopy(obj[key]);
+ } else {
+ copy[key] = obj[key];
+ }
+ }
+ return copy;
+};
+
+exports.arrayToMap = function(arr) {
+ var map = {};
+ for (var i=0; i<arr.length; i++) {
+ map[arr[i]] = 1;
+ }
+ return map;
+
+};
+
+/**
+ * splice out of 'array' anything that === 'value'
+ */
+exports.arrayRemove = function(array, value) {
+ for (var i = 0; i <= array.length; i++) {
+ if (value === array[i]) {
+ array.splice(i, 1);
+ }
+ }
+};
+
+exports.escapeRegExp = function(str) {
+ return str.replace(/([.*+?^${}()|[\]\/\\])/g, '\\$1');
+};
+
+exports.deferredCall = function(fcn) {
+
+ var timer = null;
+ var callback = function() {
+ timer = null;
+ fcn();
+ };
+
+ var deferred = function(timeout) {
+ deferred.cancel();
+ timer = setTimeout(callback, timeout || 0);
+ return deferred;
+ };
+
+ deferred.schedule = deferred;
+
+ deferred.call = function() {
+ this.cancel();
+ fcn();
+ return deferred;
+ };
+
+ deferred.cancel = function() {
+ clearTimeout(timer);
+ timer = null;
+ return deferred;
+ };
+
+ return deferred;
+};
+
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/coffee/coffee-script', ['require', 'exports', 'module' , 'ace/mode/coffee/lexer', 'ace/mode/coffee/parser', 'ace/mode/coffee/nodes'], function(require, exports, module) {
+
+ var Lexer = require("./lexer").Lexer;
+ var parser = require("./parser");
+
+ var lexer = new Lexer();
+ parser.lexer = {
+ lex: function() {
+ var tag, _ref2;
+ _ref2 = this.tokens[this.pos++] || [''], tag = _ref2[0], this.yytext = _ref2[1], this.yylineno = _ref2[2];
+ return tag;
+ },
+ setInput: function(tokens) {
+ this.tokens = tokens;
+ return this.pos = 0;
+ },
+ upcomingInput: function() {
+ return "";
+ }
+ };
+ parser.yy = require('./nodes');
+
+ exports.parse = function(code) {
+ return parser.parse(lexer.tokenize(code));
+ };
+});/**
+ * Copyright (c) 2011 Jeremy Ashkenas
+ *
+ * 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.
+ */
+
+define('ace/mode/coffee/lexer', ['require', 'exports', 'module' , 'ace/mode/coffee/rewriter', 'ace/mode/coffee/helpers'], function(require, exports, module) {
+
+ var ASSIGNED, BOOL, CALLABLE, CODE, COFFEE_ALIASES, COFFEE_ALIAS_MAP, COFFEE_KEYWORDS, COMMENT, COMPARE, COMPOUND_ASSIGN, HEREDOC, HEREDOC_ILLEGAL, HEREDOC_INDENT, HEREGEX, HEREGEX_OMIT, IDENTIFIER, INDEXABLE, JSTOKEN, JS_FORBIDDEN, JS_KEYWORDS, LINE_BREAK, LINE_CONTINUER, LOGIC, Lexer, MATH, MULTILINER, MULTI_DENT, NOT_REGEX, NOT_SPACED_REGEX, NO_NEWLINE, NUMBER, OPERATOR, REGEX, RELATION, RESERVED, Rewriter, SHIFT, SIMPLESTR, TRAILING_SPACES, UNARY, WHITESPACE, compact, count, key, last, starts, _ref;
+ var __indexOf = Array.prototype.indexOf || function(item) {
+ for (var i = 0, l = this.length; i < l; i++) {
+ if (this[i] === item) return i;
+ }
+ return -1;
+ };
+ Rewriter = require('./rewriter').Rewriter;
+ _ref = require('./helpers'), count = _ref.count, starts = _ref.starts, compact = _ref.compact, last = _ref.last;
+ exports.Lexer = Lexer = (function() {
+ function Lexer() {}
+ Lexer.prototype.tokenize = function(code, opts) {
+ var i;
+ if (opts == null) {
+ opts = {};
+ }
+ if (WHITESPACE.test(code)) {
+ code = "\n" + code;
+ }
+ code = code.replace(/\r/g, '').replace(TRAILING_SPACES, '');
+ this.code = code;
+ this.line = opts.line || 0;
+ this.indent = 0;
+ this.indebt = 0;
+ this.outdebt = 0;
+ this.indents = [];
+ this.tokens = [];
+ i = 0;
+ while (this.chunk = code.slice(i)) {
+ i += this.identifierToken() || this.commentToken() || this.whitespaceToken() || this.lineToken() || this.heredocToken() || this.stringToken() || this.numberToken() || this.regexToken() || this.jsToken() || this.literalToken();
+ }
+ this.closeIndentation();
+ if (opts.rewrite === false) {
+ return this.tokens;
+ }
+ return (new Rewriter).rewrite(this.tokens);
+ };
+ Lexer.prototype.identifierToken = function() {
+ var colon, forcedIdentifier, id, input, match, prev, tag, _ref2, _ref3;
+ if (!(match = IDENTIFIER.exec(this.chunk))) {
+ return 0;
+ }
+ input = match[0], id = match[1], colon = match[2];
+ if (id === 'own' && this.tag() === 'FOR') {
+ this.token('OWN', id);
+ return id.length;
+ }
+ forcedIdentifier = colon || (prev = last(this.tokens)) && (((_ref2 = prev[0]) === '.' || _ref2 === '?.' || _ref2 === '::') || !prev.spaced && prev[0] === '@');
+ tag = 'IDENTIFIER';
+ if (__indexOf.call(JS_KEYWORDS, id) >= 0 || !forcedIdentifier && __indexOf.call(COFFEE_KEYWORDS, id) >= 0) {
+ tag = id.toUpperCase();
+ if (tag === 'WHEN' && (_ref3 = this.tag(), __indexOf.call(LINE_BREAK, _ref3) >= 0)) {
+ tag = 'LEADING_WHEN';
+ } else if (tag === 'FOR') {
+ this.seenFor = true;
+ } else if (tag === 'UNLESS') {
+ tag = 'IF';
+ } else if (__indexOf.call(UNARY, tag) >= 0) {
+ tag = 'UNARY';
+ } else if (__indexOf.call(RELATION, tag) >= 0) {
+ if (tag !== 'INSTANCEOF' && this.seenFor) {
+ tag = 'FOR' + tag;
+ this.seenFor = false;
+ } else {
+ tag = 'RELATION';
+ if (this.value() === '!') {
+ this.tokens.pop();
+ id = '!' + id;
+ }
+ }
+ }
+ }
+ if (__indexOf.call(JS_FORBIDDEN, id) >= 0) {
+ if (forcedIdentifier) {
+ tag = 'IDENTIFIER';
+ id = new String(id);
+ id.reserved = true;
+ } else if (__indexOf.call(RESERVED, id) >= 0) {
+ this.identifierError(id);
+ }
+ }
+ if (!forcedIdentifier) {
+ if (__indexOf.call(COFFEE_ALIASES, id) >= 0) {
+ id = COFFEE_ALIAS_MAP[id];
+ }
+ tag = (function() {
+ switch (id) {
+ case '!':
+ return 'UNARY';
+ case '==':
+ case '!=':
+ return 'COMPARE';
+ case '&&':
+ case '||':
+ return 'LOGIC';
+ case 'true':
+ case 'false':
+ case 'null':
+ case 'undefined':
+ return 'BOOL';
+ case 'break':
+ case 'continue':
+ case 'debugger':
+ return 'STATEMENT';
+ default:
+ return tag;
+ }
+ })();
+ }
+ this.token(tag, id);
+ if (colon) {
+ this.token(':', ':');
+ }
+ return input.length;
+ };
+ Lexer.prototype.numberToken = function() {
+ var match, number;
+ if (!(match = NUMBER.exec(this.chunk))) {
+ return 0;
+ }
+ number = match[0];
+ this.token('NUMBER', number);
+ return number.length;
+ };
+ Lexer.prototype.stringToken = function() {
+ var match, string;
+ switch (this.chunk.charAt(0)) {
+ case "'":
+ if (!(match = SIMPLESTR.exec(this.chunk))) {
+ return 0;
+ }
+ this.token('STRING', (string = match[0]).replace(MULTILINER, '\\\n'));
+ break;
+ case '"':
+ if (!(string = this.balancedString(this.chunk, '"'))) {
+ return 0;
+ }
+ if (0 < string.indexOf('#{', 1)) {
+ this.interpolateString(string.slice(1, -1));
+ } else {
+ this.token('STRING', this.escapeLines(string));
+ }
+ break;
+ default:
+ return 0;
+ }
+ this.line += count(string, '\n');
+ return string.length;
+ };
+ Lexer.prototype.heredocToken = function() {
+ var doc, heredoc, match, quote;
+ if (!(match = HEREDOC.exec(this.chunk))) {
+ return 0;
+ }
+ heredoc = match[0];
+ quote = heredoc.charAt(0);
+ doc = this.sanitizeHeredoc(match[2], {
+ quote: quote,
+ indent: null
+ });
+ if (quote === '"' && 0 <= doc.indexOf('#{')) {
+ this.interpolateString(doc, {
+ heredoc: true
+ });
+ } else {
+ this.token('STRING', this.makeString(doc, quote, true));
+ }
+ this.line += count(heredoc, '\n');
+ return heredoc.length;
+ };
+ Lexer.prototype.commentToken = function() {
+ var comment, here, match;
+ if (!(match = this.chunk.match(COMMENT))) {
+ return 0;
+ }
+ comment = match[0], here = match[1];
+ if (here) {
+ this.token('HERECOMMENT', this.sanitizeHeredoc(here, {
+ herecomment: true,
+ indent: Array(this.indent + 1).join(' ')
+ }));
+ this.token('TERMINATOR', '\n');
+ }
+ this.line += count(comment, '\n');
+ return comment.length;
+ };
+ Lexer.prototype.jsToken = function() {
+ var match, script;
+ if (!(this.chunk.charAt(0) === '`' && (match = JSTOKEN.exec(this.chunk)))) {
+ return 0;
+ }
+ this.token('JS', (script = match[0]).slice(1, -1));
+ return script.length;
+ };
+ Lexer.prototype.regexToken = function() {
+ var match, prev, regex, _ref2;
+ if (this.chunk.charAt(0) !== '/') {
+ return 0;
+ }
+ if (match = HEREGEX.exec(this.chunk)) {
+ this.line += count(match[0], '\n');
+ return this.heregexToken(match);
+ }
+ prev = last(this.tokens);
+ if (prev && (_ref2 = prev[0], __indexOf.call((prev.spaced ? NOT_REGEX : NOT_SPACED_REGEX), _ref2) >= 0)) {
+ return 0;
+ }
+ if (!(match = REGEX.exec(this.chunk))) {
+ return 0;
+ }
+ regex = match[0];
+ this.token('REGEX', regex === '//' ? '/(?:)/' : regex);
+ return regex.length;
+ };
+ Lexer.prototype.heregexToken = function(match) {
+ var body, flags, heregex, re, tag, tokens, value, _i, _len, _ref2, _ref3, _ref4, _ref5;
+ heregex = match[0], body = match[1], flags = match[2];
+ if (0 > body.indexOf('#{')) {
+ re = body.replace(HEREGEX_OMIT, '').replace(/\//g, '\\/');
+ this.token('REGEX', "/" + (re || '(?:)') + "/" + flags);
+ return heregex.length;
+ }
+ this.token('IDENTIFIER', 'RegExp');
+ this.tokens.push(['CALL_START', '(']);
+ tokens = [];
+ _ref2 = this.interpolateString(body, {
+ regex: true
+ });
+ for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
+ _ref3 = _ref2[_i], tag = _ref3[0], value = _ref3[1];
+ if (tag === 'TOKENS') {
+ tokens.push.apply(tokens, value);
+ } else {
+ if (!(value = value.replace(HEREGEX_OMIT, ''))) {
+ continue;
+ }
+ value = value.replace(/\\/g, '\\\\');
+ tokens.push(['STRING', this.makeString(value, '"', true)]);
+ }
+ tokens.push(['+', '+']);
+ }
+ tokens.pop();
+ if (((_ref4 = tokens[0]) != null ? _ref4[0] : void 0) !== 'STRING') {
+ this.tokens.push(['STRING', '""'], ['+', '+']);
+ }
+ (_ref5 = this.tokens).push.apply(_ref5, tokens);
+ if (flags) {
+ this.tokens.push([',', ','], ['STRING', '"' + flags + '"']);
+ }
+ this.token(')', ')');
+ return heregex.length;
+ };
+ Lexer.prototype.lineToken = function() {
+ var diff, indent, match, noNewlines, prev, size;
+ if (!(match = MULTI_DENT.exec(this.chunk))) {
+ return 0;
+ }
+ indent = match[0];
+ this.line += count(indent, '\n');
+ prev = last(this.tokens, 1);
+ size = indent.length - 1 - indent.lastIndexOf('\n');
+ noNewlines = this.unfinished();
+ if (size - this.indebt === this.indent) {
+ if (noNewlines) {
+ this.suppressNewlines();
+ } else {
+ this.newlineToken();
+ }
+ return indent.length;
+ }
+ if (size > this.indent) {
+ if (noNewlines) {
+ this.indebt = size - this.indent;
+ this.suppressNewlines();
+ return indent.length;
+ }
+ diff = size - this.indent + this.outdebt;
+ this.token('INDENT', diff);
+ this.indents.push(diff);
+ this.outdebt = this.indebt = 0;
+ } else {
+ this.indebt = 0;
+ this.outdentToken(this.indent - size, noNewlines);
+ }
+ this.indent = size;
+ return indent.length;
+ };
+ Lexer.prototype.outdentToken = function(moveOut, noNewlines, close) {
+ var dent, len;
+ while (moveOut > 0) {
+ len = this.indents.length - 1;
+ if (this.indents[len] === void 0) {
+ moveOut = 0;
+ } else if (this.indents[len] === this.outdebt) {
+ moveOut -= this.outdebt;
+ this.outdebt = 0;
+ } else if (this.indents[len] < this.outdebt) {
+ this.outdebt -= this.indents[len];
+ moveOut -= this.indents[len];
+ } else {
+ dent = this.indents.pop() - this.outdebt;
+ moveOut -= dent;
+ this.outdebt = 0;
+ this.token('OUTDENT', dent);
+ }
+ }
+ if (dent) {
+ this.outdebt -= moveOut;
+ }
+ if (!(this.tag() === 'TERMINATOR' || noNewlines)) {
+ this.token('TERMINATOR', '\n');
+ }
+ return this;
+ };
+ Lexer.prototype.whitespaceToken = function() {
+ var match, nline, prev;
+ if (!((match = WHITESPACE.exec(this.chunk)) || (nline = this.chunk.charAt(0) === '\n'))) {
+ return 0;
+ }
+ prev = last(this.tokens);
+ if (prev) {
+ prev[match ? 'spaced' : 'newLine'] = true;
+ }
+ if (match) {
+ return match[0].length;
+ } else {
+ return 0;
+ }
+ };
+ Lexer.prototype.newlineToken = function() {
+ if (this.tag() !== 'TERMINATOR') {
+ this.token('TERMINATOR', '\n');
+ }
+ return this;
+ };
+ Lexer.prototype.suppressNewlines = function() {
+ if (this.value() === '\\') {
+ this.tokens.pop();
+ }
+ return this;
+ };
+ Lexer.prototype.literalToken = function() {
+ var match, prev, tag, value, _ref2, _ref3, _ref4, _ref5;
+ if (match = OPERATOR.exec(this.chunk)) {
+ value = match[0];
+ if (CODE.test(value)) {
+ this.tagParameters();
+ }
+ } else {
+ value = this.chunk.charAt(0);
+ }
+ tag = value;
+ prev = last(this.tokens);
+ if (value === '=' && prev) {
+ if (!prev[1].reserved && (_ref2 = prev[1], __indexOf.call(JS_FORBIDDEN, _ref2) >= 0)) {
+ this.assignmentError();
+ }
+ if ((_ref3 = prev[1]) === '||' || _ref3 === '&&') {
+ prev[0] = 'COMPOUND_ASSIGN';
+ prev[1] += '=';
+ return value.length;
+ }
+ }
+ if (value === ';') {
+ tag = 'TERMINATOR';
+ } else if (__indexOf.call(MATH, value) >= 0) {
+ tag = 'MATH';
+ } else if (__indexOf.call(COMPARE, value) >= 0) {
+ tag = 'COMPARE';
+ } else if (__indexOf.call(COMPOUND_ASSIGN, value) >= 0) {
+ tag = 'COMPOUND_ASSIGN';
+ } else if (__indexOf.call(UNARY, value) >= 0) {
+ tag = 'UNARY';
+ } else if (__indexOf.call(SHIFT, value) >= 0) {
+ tag = 'SHIFT';
+ } else if (__indexOf.call(LOGIC, value) >= 0 || value === '?' && (prev != null ? prev.spaced : void 0)) {
+ tag = 'LOGIC';
+ } else if (prev && !prev.spaced) {
+ if (value === '(' && (_ref4 = prev[0], __indexOf.call(CALLABLE, _ref4) >= 0)) {
+ if (prev[0] === '?') {
+ prev[0] = 'FUNC_EXIST';
+ }
+ tag = 'CALL_START';
+ } else if (value === '[' && (_ref5 = prev[0], __indexOf.call(INDEXABLE, _ref5) >= 0)) {
+ tag = 'INDEX_START';
+ switch (prev[0]) {
+ case '?':
+ prev[0] = 'INDEX_SOAK';
+ break;
+ case '::':
+ prev[0] = 'INDEX_PROTO';
+ }
+ }
+ }
+ this.token(tag, value);
+ return value.length;
+ };
+ Lexer.prototype.sanitizeHeredoc = function(doc, options) {
+ var attempt, herecomment, indent, match, _ref2;
+ indent = options.indent, herecomment = options.herecomment;
+ if (herecomment) {
+ if (HEREDOC_ILLEGAL.test(doc)) {
+ throw new Error("block comment cannot contain \"*/\", starting on line " + (this.line + 1));
+ }
+ if (doc.indexOf('\n') <= 0) {
+ return doc;
+ }
+ } else {
+ while (match = HEREDOC_INDENT.exec(doc)) {
+ attempt = match[1];
+ if (indent === null || (0 < (_ref2 = attempt.length) && _ref2 < indent.length)) {
+ indent = attempt;
+ }
+ }
+ }
+ if (indent) {
+ doc = doc.replace(RegExp("\\n" + indent, "g"), '\n');
+ }
+ if (!herecomment) {
+ doc = doc.replace(/^\n/, '');
+ }
+ return doc;
+ };
+ Lexer.prototype.tagParameters = function() {
+ var i, stack, tok, tokens;
+ if (this.tag() !== ')') {
+ return this;
+ }
+ stack = [];
+ tokens = this.tokens;
+ i = tokens.length;
+ tokens[--i][0] = 'PARAM_END';
+ while (tok = tokens[--i]) {
+ switch (tok[0]) {
+ case ')':
+ stack.push(tok);
+ break;
+ case '(':
+ case 'CALL_START':
+ if (stack.length) {
+ stack.pop();
+ } else if (tok[0] === '(') {
+ tok[0] = 'PARAM_START';
+ return this;
+ }
+ }
+ }
+ return this;
+ };
+ Lexer.prototype.closeIndentation = function() {
+ return this.outdentToken(this.indent);
+ };
+ Lexer.prototype.identifierError = function(word) {
+ throw SyntaxError("Reserved word \"" + word + "\" on line " + (this.line + 1));
+ };
+ Lexer.prototype.assignmentError = function() {
+ throw SyntaxError("Reserved word \"" + (this.value()) + "\" on line " + (this.line + 1) + " can't be assigned");
+ };
+ Lexer.prototype.balancedString = function(str, end) {
+ var i, letter, prev, stack, _ref2;
+ stack = [end];
+ for (i = 1, _ref2 = str.length; 1 <= _ref2 ? i < _ref2 : i > _ref2; 1 <= _ref2 ? i++ : i--) {
+ switch (letter = str.charAt(i)) {
+ case '\\':
+ i++;
+ continue;
+ case end:
+ stack.pop();
+ if (!stack.length) {
+ return str.slice(0, i + 1);
+ }
+ end = stack[stack.length - 1];
+ continue;
+ }
+ if (end === '}' && (letter === '"' || letter === "'")) {
+ stack.push(end = letter);
+ } else if (end === '}' && letter === '{') {
+ stack.push(end = '}');
+ } else if (end === '"' && prev === '#' && letter === '{') {
+ stack.push(end = '}');
+ }
+ prev = letter;
+ }
+ throw new Error("missing " + (stack.pop()) + ", starting on line " + (this.line + 1));
+ };
+ Lexer.prototype.interpolateString = function(str, options) {
+ var expr, heredoc, i, inner, interpolated, len, letter, nested, pi, regex, tag, tokens, value, _len, _ref2, _ref3, _ref4;
+ if (options == null) {
+ options = {};
+ }
+ heredoc = options.heredoc, regex = options.regex;
+ tokens = [];
+ pi = 0;
+ i = -1;
+ while (letter = str.charAt(i += 1)) {
+ if (letter === '\\') {
+ i += 1;
+ continue;
+ }
+ if (!(letter === '#' && str.charAt(i + 1) === '{' && (expr = this.balancedString(str.slice(i + 1), '}')))) {
+ continue;
+ }
+ if (pi < i) {
+ tokens.push(['NEOSTRING', str.slice(pi, i)]);
+ }
+ inner = expr.slice(1, -1);
+ if (inner.length) {
+ nested = new Lexer().tokenize(inner, {
+ line: this.line,
+ rewrite: false
+ });
+ nested.pop();
+ if (((_ref2 = nested[0]) != null ? _ref2[0] : void 0) === 'TERMINATOR') {
+ nested.shift();
+ }
+ if (len = nested.length) {
+ if (len > 1) {
+ nested.unshift(['(', '(']);
+ nested.push([')', ')']);
+ }
+ tokens.push(['TOKENS', nested]);
+ }
+ }
+ i += expr.length;
+ pi = i + 1;
+ }
+ if ((i > pi && pi < str.length)) {
+ tokens.push(['NEOSTRING', str.slice(pi)]);
+ }
+ if (regex) {
+ return tokens;
+ }
+ if (!tokens.length) {
+ return this.token('STRING', '""');
+ }
+ if (tokens[0][0] !== 'NEOSTRING') {
+ tokens.unshift(['', '']);
+ }
+ if (interpolated = tokens.length > 1) {
+ this.token('(', '(');
+ }
+ for (i = 0, _len = tokens.length; i < _len; i++) {
+ _ref3 = tokens[i], tag = _ref3[0], value = _ref3[1];
+ if (i) {
+ this.token('+', '+');
+ }
+ if (tag === 'TOKENS') {
+ (_ref4 = this.tokens).push.apply(_ref4, value);
+ } else {
+ this.token('STRING', this.makeString(value, '"', heredoc));
+ }
+ }
+ if (interpolated) {
+ this.token(')', ')');
+ }
+ return tokens;
+ };
+ Lexer.prototype.token = function(tag, value) {
+ return this.tokens.push([tag, value, this.line]);
+ };
+ Lexer.prototype.tag = function(index, tag) {
+ var tok;
+ return (tok = last(this.tokens, index)) && (tag ? tok[0] = tag : tok[0]);
+ };
+ Lexer.prototype.value = function(index, val) {
+ var tok;
+ return (tok = last(this.tokens, index)) && (val ? tok[1] = val : tok[1]);
+ };
+ Lexer.prototype.unfinished = function() {
+ var prev, value;
+ return LINE_CONTINUER.test(this.chunk) || (prev = last(this.tokens, 1)) && prev[0] !== '.' && (value = this.value()) && !value.reserved && NO_NEWLINE.test(value) && !CODE.test(value) && !ASSIGNED.test(this.chunk);
+ };
+ Lexer.prototype.escapeLines = function(str, heredoc) {
+ return str.replace(MULTILINER, heredoc ? '\\n' : '');
+ };
+ Lexer.prototype.makeString = function(body, quote, heredoc) {
+ if (!body) {
+ return quote + quote;
+ }
+ body = body.replace(/\\([\s\S])/g, function(match, contents) {
+ if (contents === '\n' || contents === quote) {
+ return contents;
+ } else {
+ return match;
+ }
+ });
+ body = body.replace(RegExp("" + quote, "g"), '\\$&');
+ return quote + this.escapeLines(body, heredoc) + quote;
+ };
+ return Lexer;
+ })();
+ JS_KEYWORDS = ['true', 'false', 'null', 'this', 'new', 'delete', 'typeof', 'in', 'instanceof', 'return', 'throw', 'break', 'continue', 'debugger', 'if', 'else', 'switch', 'for', 'while', 'do', 'try', 'catch', 'finally', 'class', 'extends', 'super'];
+ COFFEE_KEYWORDS = ['undefined', 'then', 'unless', 'until', 'loop', 'of', 'by', 'when'];
+ COFFEE_ALIAS_MAP = {
+ and: '&&',
+ or: '||',
+ is: '==',
+ isnt: '!=',
+ not: '!',
+ yes: 'true',
+ no: 'false',
+ on: 'true',
+ off: 'false'
+ };
+ COFFEE_ALIASES = (function() {
+ var _results;
+ _results = [];
+ for (key in COFFEE_ALIAS_MAP) {
+ _results.push(key);
+ }
+ return _results;
+ })();
+ COFFEE_KEYWORDS = COFFEE_KEYWORDS.concat(COFFEE_ALIASES);
+ RESERVED = ['case', 'default', 'function', 'var', 'void', 'with', 'const', 'let', 'enum', 'export', 'import', 'native', '__hasProp', '__extends', '__slice', '__bind', '__indexOf'];
+ JS_FORBIDDEN = JS_KEYWORDS.concat(RESERVED);
+ exports.RESERVED = RESERVED.concat(JS_KEYWORDS).concat(COFFEE_KEYWORDS);
+ IDENTIFIER = /^([$A-Za-z_\x7f-\uffff][$\w\x7f-\uffff]*)([^\n\S]*:(?!:))?/;
+ NUMBER = /^0x[\da-f]+|^(?:\d+(\.\d+)?|\.\d+)(?:e[+-]?\d+)?/i;
+ HEREDOC = /^("""|''')([\s\S]*?)(?:\n[^\n\S]*)?\1/;
+ OPERATOR = /^(?:[-=]>|[-+*\/%<>&|^!?=]=|>>>=?|([-+:])\1|([&|<>])\2=?|\?\.|\.{2,3})/;
+ WHITESPACE = /^[^\n\S]+/;
+ COMMENT = /^###([^#][\s\S]*?)(?:###[^\n\S]*|(?:###)?$)|^(?:\s*#(?!##[^#]).*)+/;
+ CODE = /^[-=]>/;
+ MULTI_DENT = /^(?:\n[^\n\S]*)+/;
+ SIMPLESTR = /^'[^\\']*(?:\\.[^\\']*)*'/;
+ JSTOKEN = /^`[^\\`]*(?:\\.[^\\`]*)*`/;
+ REGEX = /^\/(?![\s=])[^[\/\n\\]*(?:(?:\\[\s\S]|\[[^\]\n\\]*(?:\\[\s\S][^\]\n\\]*)*])[^[\/\n\\]*)*\/[imgy]{0,4}(?!\w)/;
+ HEREGEX = /^\/{3}([\s\S]+?)\/{3}([imgy]{0,4})(?!\w)/;
+ HEREGEX_OMIT = /\s+(?:#.*)?/g;
+ MULTILINER = /\n/g;
+ HEREDOC_INDENT = /\n+([^\n\S]*)/g;
+ HEREDOC_ILLEGAL = /\*\//;
+ ASSIGNED = /^\s*@?([$A-Za-z_][$\w\x7f-\uffff]*|['"].*['"])[^\n\S]*?[:=][^:=>]/;
+ LINE_CONTINUER = /^\s*(?:,|\??\.(?![.\d])|::)/;
+ TRAILING_SPACES = /\s+$/;
+ NO_NEWLINE = /^(?:[-+*&|\/%=<>!.\\][<>=&|]*|and|or|is(?:nt)?|n(?:ot|ew)|delete|typeof|instanceof)$/;
+ COMPOUND_ASSIGN = ['-=', '+=', '/=', '*=', '%=', '||=', '&&=', '?=', '<<=', '>>=', '>>>=', '&=', '^=', '|='];
+ UNARY = ['!', '~', 'NEW', 'TYPEOF', 'DELETE', 'DO'];
+ LOGIC = ['&&', '||', '&', '|', '^'];
+ SHIFT = ['<<', '>>', '>>>'];
+ COMPARE = ['==', '!=', '<', '>', '<=', '>='];
+ MATH = ['*', '/', '%'];
+ RELATION = ['IN', 'OF', 'INSTANCEOF'];
+ BOOL = ['TRUE', 'FALSE', 'NULL', 'UNDEFINED'];
+ NOT_REGEX = ['NUMBER', 'REGEX', 'BOOL', '++', '--', ']'];
+ NOT_SPACED_REGEX = NOT_REGEX.concat(')', '}', 'THIS', 'IDENTIFIER', 'STRING');
+ CALLABLE = ['IDENTIFIER', 'STRING', 'REGEX', ')', ']', '}', '?', '::', '@', 'THIS', 'SUPER'];
+ INDEXABLE = CALLABLE.concat('NUMBER', 'BOOL');
+ LINE_BREAK = ['INDENT', 'OUTDENT', 'TERMINATOR'];
+});
+/**
+ * Copyright (c) 2011 Jeremy Ashkenas
+ *
+ * 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.
+ */
+
+define('ace/mode/coffee/rewriter', ['require', 'exports', 'module' ], function(require, exports, module) {
+
+ var BALANCED_PAIRS, EXPRESSION_CLOSE, EXPRESSION_END, EXPRESSION_START, IMPLICIT_BLOCK, IMPLICIT_CALL, IMPLICIT_END, IMPLICIT_FUNC, IMPLICIT_UNSPACED_CALL, INVERSES, LINEBREAKS, SINGLE_CLOSERS, SINGLE_LINERS, left, rite, _i, _len, _ref;
+ var __indexOf = Array.prototype.indexOf || function(item) {
+ for (var i = 0, l = this.length; i < l; i++) {
+ if (this[i] === item) return i;
+ }
+ return -1;
+ }, __slice = Array.prototype.slice;
+ exports.Rewriter = (function() {
+ function Rewriter() {}
+ Rewriter.prototype.rewrite = function(tokens) {
+ this.tokens = tokens;
+ this.removeLeadingNewlines();
+ this.removeMidExpressionNewlines();
+ this.closeOpenCalls();
+ this.closeOpenIndexes();
+ this.addImplicitIndentation();
+ this.tagPostfixConditionals();
+ this.addImplicitBraces();
+ this.addImplicitParentheses();
+ this.ensureBalance(BALANCED_PAIRS);
+ this.rewriteClosingParens();
+ return this.tokens;
+ };
+ Rewriter.prototype.scanTokens = function(block) {
+ var i, token, tokens;
+ tokens = this.tokens;
+ i = 0;
+ while (token = tokens[i]) {
+ i += block.call(this, token, i, tokens);
+ }
+ return true;
+ };
+ Rewriter.prototype.detectEnd = function(i, condition, action) {
+ var levels, token, tokens, _ref, _ref2;
+ tokens = this.tokens;
+ levels = 0;
+ while (token = tokens[i]) {
+ if (levels === 0 && condition.call(this, token, i)) {
+ return action.call(this, token, i);
+ }
+ if (!token || levels < 0) {
+ return action.call(this, token, i - 1);
+ }
+ if (_ref = token[0], __indexOf.call(EXPRESSION_START, _ref) >= 0) {
+ levels += 1;
+ } else if (_ref2 = token[0], __indexOf.call(EXPRESSION_END, _ref2) >= 0) {
+ levels -= 1;
+ }
+ i += 1;
+ }
+ return i - 1;
+ };
+ Rewriter.prototype.removeLeadingNewlines = function() {
+ var i, tag, _len, _ref;
+ _ref = this.tokens;
+ for (i = 0, _len = _ref.length; i < _len; i++) {
+ tag = _ref[i][0];
+ if (tag !== 'TERMINATOR') {
+ break;
+ }
+ }
+ if (i) {
+ return this.tokens.splice(0, i);
+ }
+ };
+ Rewriter.prototype.removeMidExpressionNewlines = function() {
+ return this.scanTokens(function(token, i, tokens) {
+ var _ref;
+ if (!(token[0] === 'TERMINATOR' && (_ref = this.tag(i + 1), __indexOf.call(EXPRESSION_CLOSE, _ref) >= 0))) {
+ return 1;
+ }
+ tokens.splice(i, 1);
+ return 0;
+ });
+ };
+ Rewriter.prototype.closeOpenCalls = function() {
+ var action, condition;
+ condition = function(token, i) {
+ var _ref;
+ return ((_ref = token[0]) === ')' || _ref === 'CALL_END') || token[0] === 'OUTDENT' && this.tag(i - 1) === ')';
+ };
+ action = function(token, i) {
+ return this.tokens[token[0] === 'OUTDENT' ? i - 1 : i][0] = 'CALL_END';
+ };
+ return this.scanTokens(function(token, i) {
+ if (token[0] === 'CALL_START') {
+ this.detectEnd(i + 1, condition, action);
+ }
+ return 1;
+ });
+ };
+ Rewriter.prototype.closeOpenIndexes = function() {
+ var action, condition;
+ condition = function(token, i) {
+ var _ref;
+ return (_ref = token[0]) === ']' || _ref === 'INDEX_END';
+ };
+ action = function(token, i) {
+ return token[0] = 'INDEX_END';
+ };
+ return this.scanTokens(function(token, i) {
+ if (token[0] === 'INDEX_START') {
+ this.detectEnd(i + 1, condition, action);
+ }
+ return 1;
+ });
+ };
+ Rewriter.prototype.addImplicitBraces = function() {
+ var action, condition, stack, start, startIndent;
+ stack = [];
+ start = null;
+ startIndent = 0;
+ condition = function(token, i) {
+ var one, tag, three, two, _ref, _ref2;
+ _ref = this.tokens.slice(i + 1, (i + 3 + 1) || 9e9), one = _ref[0], two = _ref[1], three = _ref[2];
+ if ('HERECOMMENT' === (one != null ? one[0] : void 0)) {
+ return false;
+ }
+ tag = token[0];
+ return ((tag === 'TERMINATOR' || tag === 'OUTDENT') && !((two != null ? two[0] : void 0) === ':' || (one != null ? one[0] : void 0) === '@' && (three != null ? three[0] : void 0) === ':')) || (tag === ',' && one && ((_ref2 = one[0]) !== 'IDENTIFIER' && _ref2 !== 'NUMBER' && _ref2 !== 'STRING' && _ref2 !== '@' && _ref2 !== 'TERMINATOR' && _ref2 !== 'OUTDENT'));
+ };
+ action = function(token, i) {
+ var tok;
+ tok = ['}', '}', token[2]];
+ tok.generated = true;
+ return this.tokens.splice(i, 0, tok);
+ };
+ return this.scanTokens(function(token, i, tokens) {
+ var ago, idx, tag, tok, value, _ref, _ref2;
+ if (_ref = (tag = token[0]), __indexOf.call(EXPRESSION_START, _ref) >= 0) {
+ stack.push([(tag === 'INDENT' && this.tag(i - 1) === '{' ? '{' : tag), i]);
+ return 1;
+ }
+ if (__indexOf.call(EXPRESSION_END, tag) >= 0) {
+ start = stack.pop();
+ return 1;
+ }
+ if (!(tag === ':' && ((ago = this.tag(i - 2)) === ':' || ((_ref2 = stack[stack.length - 1]) != null ? _ref2[0] : void 0) !== '{'))) {
+ return 1;
+ }
+ stack.push(['{']);
+ idx = ago === '@' ? i - 2 : i - 1;
+ while (this.tag(idx - 2) === 'HERECOMMENT') {
+ idx -= 2;
+ }
+ value = new String('{');
+ value.generated = true;
+ tok = ['{', value, token[2]];
+ tok.generated = true;
+ tokens.splice(idx, 0, tok);
+ this.detectEnd(i + 2, condition, action);
+ return 2;
+ });
+ };
+ Rewriter.prototype.addImplicitParentheses = function() {
+ var action, noCall;
+ noCall = false;
+ action = function(token, i) {
+ var idx;
+ idx = token[0] === 'OUTDENT' ? i + 1 : i;
+ return this.tokens.splice(idx, 0, ['CALL_END', ')', token[2]]);
+ };
+ return this.scanTokens(function(token, i, tokens) {
+ var callObject, current, next, prev, seenControl, seenSingle, tag, _ref, _ref2, _ref3;
+ tag = token[0];
+ if (tag === 'CLASS' || tag === 'IF') {
+ noCall = true;
+ }
+ _ref = tokens.slice(i - 1, (i + 1 + 1) || 9e9), prev = _ref[0], current = _ref[1], next = _ref[2];
+ callObject = !noCall && tag === 'INDENT' && next && next.generated && next[0] === '{' && prev && (_ref2 = prev[0], __indexOf.call(IMPLICIT_FUNC, _ref2) >= 0);
+ seenSingle = false;
+ seenControl = false;
+ if (__indexOf.call(LINEBREAKS, tag) >= 0) {
+ noCall = false;
+ }
+ if (prev && !prev.spaced && tag === '?') {
+ token.call = true;
+ }
+ if (token.fromThen) {
+ return 1;
+ }
+ if (!(callObject || (prev != null ? prev.spaced : void 0) && (prev.call || (_ref3 = prev[0], __indexOf.call(IMPLICIT_FUNC, _ref3) >= 0)) && (__indexOf.call(IMPLICIT_CALL, tag) >= 0 || !(token.spaced || token.newLine) && __indexOf.call(IMPLICIT_UNSPACED_CALL, tag) >= 0))) {
+ return 1;
+ }
+ tokens.splice(i, 0, ['CALL_START', '(', token[2]]);
+ this.detectEnd(i + 1, function(token, i) {
+ var post, _ref4;
+ tag = token[0];
+ if (!seenSingle && token.fromThen) {
+ return true;
+ }
+ if (tag === 'IF' || tag === 'ELSE' || tag === 'CATCH' || tag === '->' || tag === '=>') {
+ seenSingle = true;
+ }
+ if (tag === 'IF' || tag === 'ELSE' || tag === 'SWITCH' || tag === 'TRY') {
+ seenControl = true;
+ }
+ if ((tag === '.' || tag === '?.' || tag === '::') && this.tag(i - 1) === 'OUTDENT') {
+ return true;
+ }
+ return !token.generated && this.tag(i - 1) !== ',' && (__indexOf.call(IMPLICIT_END, tag) >= 0 || (tag === 'INDENT' && !seenControl)) && (tag !== 'INDENT' || (this.tag(i - 2) !== 'CLASS' && (_ref4 = this.tag(i - 1), __indexOf.call(IMPLICIT_BLOCK, _ref4) < 0) && !((post = this.tokens[i + 1]) && post.generated && post[0] === '{')));
+ }, action);
+ if (prev[0] === '?') {
+ prev[0] = 'FUNC_EXIST';
+ }
+ return 2;
+ });
+ };
+ Rewriter.prototype.addImplicitIndentation = function() {
+ return this.scanTokens(function(token, i, tokens) {
+ var action, condition, indent, outdent, starter, tag, _ref, _ref2;
+ tag = token[0];
+ if (tag === 'TERMINATOR' && this.tag(i + 1) === 'THEN') {
+ tokens.splice(i, 1);
+ return 0;
+ }
+ if (tag === 'ELSE' && this.tag(i - 1) !== 'OUTDENT') {
+ tokens.splice.apply(tokens, [i, 0].concat(__slice.call(this.indentation(token))));
+ return 2;
+ }
+ if (tag === 'CATCH' && ((_ref = this.tag(i + 2)) === 'OUTDENT' || _ref === 'TERMINATOR' || _ref === 'FINALLY')) {
+ tokens.splice.apply(tokens, [i + 2, 0].concat(__slice.call(this.indentation(token))));
+ return 4;
+ }
+ if (__indexOf.call(SINGLE_LINERS, tag) >= 0 && this.tag(i + 1) !== 'INDENT' && !(tag === 'ELSE' && this.tag(i + 1) === 'IF')) {
+ starter = tag;
+ _ref2 = this.indentation(token), indent = _ref2[0], outdent = _ref2[1];
+ if (starter === 'THEN') {
+ indent.fromThen = true;
+ }
+ indent.generated = outdent.generated = true;
+ tokens.splice(i + 1, 0, indent);
+ condition = function(token, i) {
+ var _ref3;
+ return token[1] !== ';' && (_ref3 = token[0], __indexOf.call(SINGLE_CLOSERS, _ref3) >= 0) && !(token[0] === 'ELSE' && (starter !== 'IF' && starter !== 'THEN'));
+ };
+ action = function(token, i) {
+ return this.tokens.splice((this.tag(i - 1) === ',' ? i - 1 : i), 0, outdent);
+ };
+ this.detectEnd(i + 2, condition, action);
+ if (tag === 'THEN') {
+ tokens.splice(i, 1);
+ }
+ return 1;
+ }
+ return 1;
+ });
+ };
+ Rewriter.prototype.tagPostfixConditionals = function() {
+ var condition;
+ condition = function(token, i) {
+ var _ref;
+ return (_ref = token[0]) === 'TERMINATOR' || _ref === 'INDENT';
+ };
+ return this.scanTokens(function(token, i) {
+ var original;
+ if (token[0] !== 'IF') {
+ return 1;
+ }
+ original = token;
+ this.detectEnd(i + 1, condition, function(token, i) {
+ if (token[0] !== 'INDENT') {
+ return original[0] = 'POST_' + original[0];
+ }
+ });
+ return 1;
+ });
+ };
+ Rewriter.prototype.ensureBalance = function(pairs) {
+ var close, level, levels, open, openLine, tag, token, _i, _j, _len, _len2, _ref, _ref2;
+ levels = {};
+ openLine = {};
+ _ref = this.tokens;
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ token = _ref[_i];
+ tag = token[0];
+ for (_j = 0, _len2 = pairs.length; _j < _len2; _j++) {
+ _ref2 = pairs[_j], open = _ref2[0], close = _ref2[1];
+ levels[open] |= 0;
+ if (tag === open) {
+ if (levels[open]++ === 0) {
+ openLine[open] = token[2];
+ }
+ } else if (tag === close && --levels[open] < 0) {
+ throw Error("too many " + token[1] + " on line " + (token[2] + 1));
+ }
+ }
+ }
+ for (open in levels) {
+ level = levels[open];
+ if (level > 0) {
+ throw Error("unclosed " + open + " on line " + (openLine[open] + 1));
+ }
+ }
+ return this;
+ };
+ Rewriter.prototype.rewriteClosingParens = function() {
+ var debt, key, stack;
+ stack = [];
+ debt = {};
+ for (key in INVERSES) {
+ debt[key] = 0;
+ }
+ return this.scanTokens(function(token, i, tokens) {
+ var inv, match, mtag, oppos, tag, val, _ref;
+ if (_ref = (tag = token[0]), __indexOf.call(EXPRESSION_START, _ref) >= 0) {
+ stack.push(token);
+ return 1;
+ }
+ if (__indexOf.call(EXPRESSION_END, tag) < 0) {
+ return 1;
+ }
+ if (debt[inv = INVERSES[tag]] > 0) {
+ debt[inv] -= 1;
+ tokens.splice(i, 1);
+ return 0;
+ }
+ match = stack.pop();
+ mtag = match[0];
+ oppos = INVERSES[mtag];
+ if (tag === oppos) {
+ return 1;
+ }
+ debt[mtag] += 1;
+ val = [oppos, mtag === 'INDENT' ? match[1] : oppos];
+ if (this.tag(i + 2) === mtag) {
+ tokens.splice(i + 3, 0, val);
+ stack.push(match);
+ } else {
+ tokens.splice(i, 0, val);
+ }
+ return 1;
+ });
+ };
+ Rewriter.prototype.indentation = function(token) {
+ return [['INDENT', 2, token[2]], ['OUTDENT', 2, token[2]]];
+ };
+ Rewriter.prototype.tag = function(i) {
+ var _ref;
+ return (_ref = this.tokens[i]) != null ? _ref[0] : void 0;
+ };
+ return Rewriter;
+ })();
+ BALANCED_PAIRS = [['(', ')'], ['[', ']'], ['{', '}'], ['INDENT', 'OUTDENT'], ['CALL_START', 'CALL_END'], ['PARAM_START', 'PARAM_END'], ['INDEX_START', 'INDEX_END']];
+ INVERSES = {};
+ EXPRESSION_START = [];
+ EXPRESSION_END = [];
+ for (_i = 0, _len = BALANCED_PAIRS.length; _i < _len; _i++) {
+ _ref = BALANCED_PAIRS[_i], left = _ref[0], rite = _ref[1];
+ EXPRESSION_START.push(INVERSES[rite] = left);
+ EXPRESSION_END.push(INVERSES[left] = rite);
+ }
+ EXPRESSION_CLOSE = ['CATCH', 'WHEN', 'ELSE', 'FINALLY'].concat(EXPRESSION_END);
+ IMPLICIT_FUNC = ['IDENTIFIER', 'SUPER', ')', 'CALL_END', ']', 'INDEX_END', '@', 'THIS'];
+ IMPLICIT_CALL = ['IDENTIFIER', 'NUMBER', 'STRING', 'JS', 'REGEX', 'NEW', 'PARAM_START', 'CLASS', 'IF', 'TRY', 'SWITCH', 'THIS', 'BOOL', 'UNARY', 'SUPER', '@', '->', '=>', '[', '(', '{', '--', '++'];
+ IMPLICIT_UNSPACED_CALL = ['+', '-'];
+ IMPLICIT_BLOCK = ['->', '=>', '{', '[', ','];
+ IMPLICIT_END = ['POST_IF', 'FOR', 'WHILE', 'UNTIL', 'WHEN', 'BY', 'LOOP', 'TERMINATOR'];
+ SINGLE_LINERS = ['ELSE', '->', '=>', 'TRY', 'FINALLY', 'THEN'];
+ SINGLE_CLOSERS = ['TERMINATOR', 'CATCH', 'FINALLY', 'ELSE', 'OUTDENT', 'LEADING_WHEN'];
+ LINEBREAKS = ['TERMINATOR', 'INDENT', 'OUTDENT'];
+});
+/**
+ * Copyright (c) 2011 Jeremy Ashkenas
+ *
+ * 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.
+ */
+
+define('ace/mode/coffee/helpers', ['require', 'exports', 'module' ], function(require, exports, module) {
+
+ var extend, flatten;
+ exports.starts = function(string, literal, start) {
+ return literal === string.substr(start, literal.length);
+ };
+ exports.ends = function(string, literal, back) {
+ var len;
+ len = literal.length;
+ return literal === string.substr(string.length - len - (back || 0), len);
+ };
+ exports.compact = function(array) {
+ var item, _i, _len, _results;
+ _results = [];
+ for (_i = 0, _len = array.length; _i < _len; _i++) {
+ item = array[_i];
+ if (item) {
+ _results.push(item);
+ }
+ }
+ return _results;
+ };
+ exports.count = function(string, substr) {
+ var num, pos;
+ num = pos = 0;
+ if (!substr.length) {
+ return 1 / 0;
+ }
+ while (pos = 1 + string.indexOf(substr, pos)) {
+ num++;
+ }
+ return num;
+ };
+ exports.merge = function(options, overrides) {
+ return extend(extend({}, options), overrides);
+ };
+ extend = exports.extend = function(object, properties) {
+ var key, val;
+ for (key in properties) {
+ val = properties[key];
+ object[key] = val;
+ }
+ return object;
+ };
+ exports.flatten = flatten = function(array) {
+ var element, flattened, _i, _len;
+ flattened = [];
+ for (_i = 0, _len = array.length; _i < _len; _i++) {
+ element = array[_i];
+ if (element instanceof Array) {
+ flattened = flattened.concat(flatten(element));
+ } else {
+ flattened.push(element);
+ }
+ }
+ return flattened;
+ };
+ exports.del = function(obj, key) {
+ var val;
+ val = obj[key];
+ delete obj[key];
+ return val;
+ };
+ exports.last = function(array, back) {
+ return array[array.length - (back || 0) - 1];
+ };
+});
+/**
+ * Copyright (c) 2011 Jeremy Ashkenas
+ *
+ * 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.
+ */
+
+define('ace/mode/coffee/parser', ['require', 'exports', 'module' ], function(require, exports, module) {
+
+/* Jison generated parser */
+var parser = {trace: function trace() { },
+yy: {},
+symbols_: {"error":2,"Root":3,"Body":4,"Block":5,"TERMINATOR":6,"Line":7,"Expression":8,"Statement":9,"Return":10,"Throw":11,"Comment":12,"STATEMENT":13,"Value":14,"Invocation":15,"Code":16,"Operation":17,"Assign":18,"If":19,"Try":20,"While":21,"For":22,"Switch":23,"Class":24,"INDENT":25,"OUTDENT":26,"Identifier":27,"IDENTIFIER":28,"AlphaNumeric":29,"NUMBER":30,"STRING":31,"Literal":32,"JS":33,"REGEX":34,"BOOL":35,"Assignable":36,"=":37,"AssignObj":38,"ObjAssignable":39,":":40,"ThisProperty":41,"RETURN":42,"HERECOMMENT":43,"PARAM_START":44,"ParamList":45,"PARAM_END":46,"FuncGlyph":47,"->":48,"=>":49,"OptComma":50,",":51,"Param":52,"ParamVar":53,"...":54,"Array":55,"Object":56,"Splat":57,"SimpleAssignable":58,"Accessor":59,"Parenthetical":60,"Range":61,"This":62,".":63,"?.":64,"::":65,"Index":66,"INDEX_START":67,"IndexValue":68,"INDEX_END":69,"INDEX_SOAK":70,"INDEX_PROTO":71,"Slice":72,"{":73,"AssignList":74,"}":75,"CLASS":76,"EXTENDS":77,"OptFuncExist":78,"Arguments":79,"SUPER":80,"FUNC_EXIST":81,"CALL_START":82,"CALL_END":83,"ArgList":84,"THIS":85,"@":86,"[":87,"]":88,"RangeDots":89,"..":90,"Arg":91,"SimpleArgs":92,"TRY":93,"Catch":94,"FINALLY":95,"CATCH":96,"THROW":97,"(":98,")":99,"WhileSource":100,"WHILE":101,"WHEN":102,"UNTIL":103,"Loop":104,"LOOP":105,"ForBody":106,"FOR":107,"ForStart":108,"ForSource":109,"ForVariables":110,"OWN":111,"ForValue":112,"FORIN":113,"FOROF":114,"BY":115,"SWITCH":116,"Whens":117,"ELSE":118,"When":119,"LEADING_WHEN":120,"IfBlock":121,"IF":122,"POST_IF":123,"UNARY":124,"-":125,"+":126,"--":127,"++":128,"?":129,"MATH":130,"SHIFT":131,"COMPARE":132,"LOGIC":133,"RELATION":134,"COMPOUND_ASSIGN":135,"$accept":0,"$end":1},
+terminals_: {2:"error",6:"TERMINATOR",13:"STATEMENT",25:"INDENT",26:"OUTDENT",28:"IDENTIFIER",30:"NUMBER",31:"STRING",33:"JS",34:"REGEX",35:"BOOL",37:"=",40:":",42:"RETURN",43:"HERECOMMENT",44:"PARAM_START",46:"PARAM_END",48:"->",49:"=>",51:",",54:"...",63:".",64:"?.",65:"::",67:"INDEX_START",69:"INDEX_END",70:"INDEX_SOAK",71:"INDEX_PROTO",73:"{",75:"}",76:"CLASS",77:"EXTENDS",80:"SUPER",81:"FUNC_EXIST",82:"CALL_START",83:"CALL_END",85:"THIS",86:"@",87:"[",88:"]",90:"..",93:"TRY",95:"FINALLY",96:"CATCH",97:"THROW",98:"(",99:")",101:"WHILE",102:"WHEN",103:"UNTIL",105:"LOOP",107:"FOR",111:"OWN",113:"FORIN",114:"FOROF",115:"BY",116:"SWITCH",118:"ELSE",120:"LEADING_WHEN",122:"IF",123:"POST_IF",124:"UNARY",125:"-",126:"+",127:"--",128:"++",129:"?",130:"MATH",131:"SHIFT",132:"COMPARE",133:"LOGIC",134:"RELATION",135:"COMPOUND_ASSIGN"},
+productions_: [0,[3,0],[3,1],[3,2],[4,1],[4,3],[4,2],[7,1],[7,1],[9,1],[9,1],[9,1],[9,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[5,2],[5,3],[27,1],[29,1],[29,1],[32,1],[32,1],[32,1],[32,1],[18,3],[18,5],[38,1],[38,3],[38,5],[38,1],[39,1],[39,1],[39,1],[10,2],[10,1],[12,1],[16,5],[16,2],[47,1],[47,1],[50,0],[50,1],[45,0],[45,1],[45,3],[52,1],[52,2],[52,3],[53,1],[53,1],[53,1],[53,1],[57,2],[58,1],[58,2],[58,2],[58,1],[36,1],[36,1],[36,1],[14,1],[14,1],[14,1],[14,1],[14,1],[59,2],[59,2],[59,2],[59,1],[59,1],[66,3],[66,2],[66,2],[68,1],[68,1],[56,4],[74,0],[74,1],[74,3],[74,4],[74,6],[24,1],[24,2],[24,3],[24,4],[24,2],[24,3],[24,4],[24,5],[15,3],[15,3],[15,1],[15,2],[78,0],[78,1],[79,2],[79,4],[62,1],[62,1],[41,2],[55,2],[55,4],[89,1],[89,1],[61,5],[72,3],[72,2],[72,2],[84,1],[84,3],[84,4],[84,4],[84,6],[91,1],[91,1],[92,1],[92,3],[20,2],[20,3],[20,4],[20,5],[94,3],[11,2],[60,3],[60,5],[100,2],[100,4],[100,2],[100,4],[21,2],[21,2],[21,2],[21,1],[104,2],[104,2],[22,2],[22,2],[22,2],[106,2],[106,2],[108,2],[108,3],[112,1],[112,1],[112,1],[110,1],[110,3],[109,2],[109,2],[109,4],[109,4],[109,4],[109,6],[109,6],[23,5],[23,7],[23,4],[23,6],[117,1],[117,2],[119,3],[119,4],[121,3],[121,5],[19,1],[19,3],[19,3],[19,3],[17,2],[17,2],[17,2],[17,2],[17,2],[17,2],[17,2],[17,2],[17,3],[17,3],[17,3],[17,3],[17,3],[17,3],[17,3],[17,3],[17,5],[17,3]],
+performAction: function anonymous(yytext,yyleng,yylineno,yy,yystate,$$,_$) {
+
+var $0 = $$.length - 1;
+switch (yystate) {
+case 1:return this.$ = new yy.Block;
+break;
+case 2:return this.$ = $$[$0];
+break;
+case 3:return this.$ = $$[$0-1];
+break;
+case 4:this.$ = yy.Block.wrap([$$[$0]]);
+break;
+case 5:this.$ = $$[$0-2].push($$[$0]);
+break;
+case 6:this.$ = $$[$0-1];
+break;
+case 7:this.$ = $$[$0];
+break;
+case 8:this.$ = $$[$0];
+break;
+case 9:this.$ = $$[$0];
+break;
+case 10:this.$ = $$[$0];
+break;
+case 11:this.$ = $$[$0];
+break;
+case 12:this.$ = new yy.Literal($$[$0]);
+break;
+case 13:this.$ = $$[$0];
+break;
+case 14:this.$ = $$[$0];
+break;
+case 15:this.$ = $$[$0];
+break;
+case 16:this.$ = $$[$0];
+break;
+case 17:this.$ = $$[$0];
+break;
+case 18:this.$ = $$[$0];
+break;
+case 19:this.$ = $$[$0];
+break;
+case 20:this.$ = $$[$0];
+break;
+case 21:this.$ = $$[$0];
+break;
+case 22:this.$ = $$[$0];
+break;
+case 23:this.$ = $$[$0];
+break;
+case 24:this.$ = new yy.Block;
+break;
+case 25:this.$ = $$[$0-1];
+break;
+case 26:this.$ = new yy.Literal($$[$0]);
+break;
+case 27:this.$ = new yy.Literal($$[$0]);
+break;
+case 28:this.$ = new yy.Literal($$[$0]);
+break;
+case 29:this.$ = $$[$0];
+break;
+case 30:this.$ = new yy.Literal($$[$0]);
+break;
+case 31:this.$ = new yy.Literal($$[$0]);
+break;
+case 32:this.$ = (function () {
+ var val;
+ val = new yy.Literal($$[$0]);
+ if ($$[$0] === 'undefined') {
+ val.isUndefined = true;
+ }
+ return val;
+ }());
+break;
+case 33:this.$ = new yy.Assign($$[$0-2], $$[$0]);
+break;
+case 34:this.$ = new yy.Assign($$[$0-4], $$[$0-1]);
+break;
+case 35:this.$ = new yy.Value($$[$0]);
+break;
+case 36:this.$ = new yy.Assign(new yy.Value($$[$0-2]), $$[$0], 'object');
+break;
+case 37:this.$ = new yy.Assign(new yy.Value($$[$0-4]), $$[$0-1], 'object');
+break;
+case 38:this.$ = $$[$0];
+break;
+case 39:this.$ = $$[$0];
+break;
+case 40:this.$ = $$[$0];
+break;
+case 41:this.$ = $$[$0];
+break;
+case 42:this.$ = new yy.Return($$[$0]);
+break;
+case 43:this.$ = new yy.Return;
+break;
+case 44:this.$ = new yy.Comment($$[$0]);
+break;
+case 45:this.$ = new yy.Code($$[$0-3], $$[$0], $$[$0-1]);
+break;
+case 46:this.$ = new yy.Code([], $$[$0], $$[$0-1]);
+break;
+case 47:this.$ = 'func';
+break;
+case 48:this.$ = 'boundfunc';
+break;
+case 49:this.$ = $$[$0];
+break;
+case 50:this.$ = $$[$0];
+break;
+case 51:this.$ = [];
+break;
+case 52:this.$ = [$$[$0]];
+break;
+case 53:this.$ = $$[$0-2].concat($$[$0]);
+break;
+case 54:this.$ = new yy.Param($$[$0]);
+break;
+case 55:this.$ = new yy.Param($$[$0-1], null, true);
+break;
+case 56:this.$ = new yy.Param($$[$0-2], $$[$0]);
+break;
+case 57:this.$ = $$[$0];
+break;
+case 58:this.$ = $$[$0];
+break;
+case 59:this.$ = $$[$0];
+break;
+case 60:this.$ = $$[$0];
+break;
+case 61:this.$ = new yy.Splat($$[$0-1]);
+break;
+case 62:this.$ = new yy.Value($$[$0]);
+break;
+case 63:this.$ = $$[$0-1].push($$[$0]);
+break;
+case 64:this.$ = new yy.Value($$[$0-1], [$$[$0]]);
+break;
+case 65:this.$ = $$[$0];
+break;
+case 66:this.$ = $$[$0];
+break;
+case 67:this.$ = new yy.Value($$[$0]);
+break;
+case 68:this.$ = new yy.Value($$[$0]);
+break;
+case 69:this.$ = $$[$0];
+break;
+case 70:this.$ = new yy.Value($$[$0]);
+break;
+case 71:this.$ = new yy.Value($$[$0]);
+break;
+case 72:this.$ = new yy.Value($$[$0]);
+break;
+case 73:this.$ = $$[$0];
+break;
+case 74:this.$ = new yy.Access($$[$0]);
+break;
+case 75:this.$ = new yy.Access($$[$0], 'soak');
+break;
+case 76:this.$ = new yy.Access($$[$0], 'proto');
+break;
+case 77:this.$ = new yy.Access(new yy.Literal('prototype'));
+break;
+case 78:this.$ = $$[$0];
+break;
+case 79:this.$ = $$[$0-1];
+break;
+case 80:this.$ = yy.extend($$[$0], {
+ soak: true
+ });
+break;
+case 81:this.$ = yy.extend($$[$0], {
+ proto: true
+ });
+break;
+case 82:this.$ = new yy.Index($$[$0]);
+break;
+case 83:this.$ = new yy.Slice($$[$0]);
+break;
+case 84:this.$ = new yy.Obj($$[$0-2], $$[$0-3].generated);
+break;
+case 85:this.$ = [];
+break;
+case 86:this.$ = [$$[$0]];
+break;
+case 87:this.$ = $$[$0-2].concat($$[$0]);
+break;
+case 88:this.$ = $$[$0-3].concat($$[$0]);
+break;
+case 89:this.$ = $$[$0-5].concat($$[$0-2]);
+break;
+case 90:this.$ = new yy.Class;
+break;
+case 91:this.$ = new yy.Class(null, null, $$[$0]);
+break;
+case 92:this.$ = new yy.Class(null, $$[$0]);
+break;
+case 93:this.$ = new yy.Class(null, $$[$0-1], $$[$0]);
+break;
+case 94:this.$ = new yy.Class($$[$0]);
+break;
+case 95:this.$ = new yy.Class($$[$0-1], null, $$[$0]);
+break;
+case 96:this.$ = new yy.Class($$[$0-2], $$[$0]);
+break;
+case 97:this.$ = new yy.Class($$[$0-3], $$[$0-1], $$[$0]);
+break;
+case 98:this.$ = new yy.Call($$[$0-2], $$[$0], $$[$0-1]);
+break;
+case 99:this.$ = new yy.Call($$[$0-2], $$[$0], $$[$0-1]);
+break;
+case 100:this.$ = new yy.Call('super', [new yy.Splat(new yy.Literal('arguments'))]);
+break;
+case 101:this.$ = new yy.Call('super', $$[$0]);
+break;
+case 102:this.$ = false;
+break;
+case 103:this.$ = true;
+break;
+case 104:this.$ = [];
+break;
+case 105:this.$ = $$[$0-2];
+break;
+case 106:this.$ = new yy.Value(new yy.Literal('this'));
+break;
+case 107:this.$ = new yy.Value(new yy.Literal('this'));
+break;
+case 108:this.$ = new yy.Value(new yy.Literal('this'), [new yy.Access($$[$0])], 'this');
+break;
+case 109:this.$ = new yy.Arr([]);
+break;
+case 110:this.$ = new yy.Arr($$[$0-2]);
+break;
+case 111:this.$ = 'inclusive';
+break;
+case 112:this.$ = 'exclusive';
+break;
+case 113:this.$ = new yy.Range($$[$0-3], $$[$0-1], $$[$0-2]);
+break;
+case 114:this.$ = new yy.Range($$[$0-2], $$[$0], $$[$0-1]);
+break;
+case 115:this.$ = new yy.Range($$[$0-1], null, $$[$0]);
+break;
+case 116:this.$ = new yy.Range(null, $$[$0], $$[$0-1]);
+break;
+case 117:this.$ = [$$[$0]];
+break;
+case 118:this.$ = $$[$0-2].concat($$[$0]);
+break;
+case 119:this.$ = $$[$0-3].concat($$[$0]);
+break;
+case 120:this.$ = $$[$0-2];
+break;
+case 121:this.$ = $$[$0-5].concat($$[$0-2]);
+break;
+case 122:this.$ = $$[$0];
+break;
+case 123:this.$ = $$[$0];
+break;
+case 124:this.$ = $$[$0];
+break;
+case 125:this.$ = [].concat($$[$0-2], $$[$0]);
+break;
+case 126:this.$ = new yy.Try($$[$0]);
+break;
+case 127:this.$ = new yy.Try($$[$0-1], $$[$0][0], $$[$0][1]);
+break;
+case 128:this.$ = new yy.Try($$[$0-2], null, null, $$[$0]);
+break;
+case 129:this.$ = new yy.Try($$[$0-3], $$[$0-2][0], $$[$0-2][1], $$[$0]);
+break;
+case 130:this.$ = [$$[$0-1], $$[$0]];
+break;
+case 131:this.$ = new yy.Throw($$[$0]);
+break;
+case 132:this.$ = new yy.Parens($$[$0-1]);
+break;
+case 133:this.$ = new yy.Parens($$[$0-2]);
+break;
+case 134:this.$ = new yy.While($$[$0]);
+break;
+case 135:this.$ = new yy.While($$[$0-2], {
+ guard: $$[$0]
+ });
+break;
+case 136:this.$ = new yy.While($$[$0], {
+ invert: true
+ });
+break;
+case 137:this.$ = new yy.While($$[$0-2], {
+ invert: true,
+ guard: $$[$0]
+ });
+break;
+case 138:this.$ = $$[$0-1].addBody($$[$0]);
+break;
+case 139:this.$ = $$[$0].addBody(yy.Block.wrap([$$[$0-1]]));
+break;
+case 140:this.$ = $$[$0].addBody(yy.Block.wrap([$$[$0-1]]));
+break;
+case 141:this.$ = $$[$0];
+break;
+case 142:this.$ = new yy.While(new yy.Literal('true')).addBody($$[$0]);
+break;
+case 143:this.$ = new yy.While(new yy.Literal('true')).addBody(yy.Block.wrap([$$[$0]]));
+break;
+case 144:this.$ = new yy.For($$[$0-1], $$[$0]);
+break;
+case 145:this.$ = new yy.For($$[$0-1], $$[$0]);
+break;
+case 146:this.$ = new yy.For($$[$0], $$[$0-1]);
+break;
+case 147:this.$ = {
+ source: new yy.Value($$[$0])
+ };
+break;
+case 148:this.$ = (function () {
+ $$[$0].own = $$[$0-1].own;
+ $$[$0].name = $$[$0-1][0];
+ $$[$0].index = $$[$0-1][1];
+ return $$[$0];
+ }());
+break;
+case 149:this.$ = $$[$0];
+break;
+case 150:this.$ = (function () {
+ $$[$0].own = true;
+ return $$[$0];
+ }());
+break;
+case 151:this.$ = $$[$0];
+break;
+case 152:this.$ = new yy.Value($$[$0]);
+break;
+case 153:this.$ = new yy.Value($$[$0]);
+break;
+case 154:this.$ = [$$[$0]];
+break;
+case 155:this.$ = [$$[$0-2], $$[$0]];
+break;
+case 156:this.$ = {
+ source: $$[$0]
+ };
+break;
+case 157:this.$ = {
+ source: $$[$0],
+ object: true
+ };
+break;
+case 158:this.$ = {
+ source: $$[$0-2],
+ guard: $$[$0]
+ };
+break;
+case 159:this.$ = {
+ source: $$[$0-2],
+ guard: $$[$0],
+ object: true
+ };
+break;
+case 160:this.$ = {
+ source: $$[$0-2],
+ step: $$[$0]
+ };
+break;
+case 161:this.$ = {
+ source: $$[$0-4],
+ guard: $$[$0-2],
+ step: $$[$0]
+ };
+break;
+case 162:this.$ = {
+ source: $$[$0-4],
+ step: $$[$0-2],
+ guard: $$[$0]
+ };
+break;
+case 163:this.$ = new yy.Switch($$[$0-3], $$[$0-1]);
+break;
+case 164:this.$ = new yy.Switch($$[$0-5], $$[$0-3], $$[$0-1]);
+break;
+case 165:this.$ = new yy.Switch(null, $$[$0-1]);
+break;
+case 166:this.$ = new yy.Switch(null, $$[$0-3], $$[$0-1]);
+break;
+case 167:this.$ = $$[$0];
+break;
+case 168:this.$ = $$[$0-1].concat($$[$0]);
+break;
+case 169:this.$ = [[$$[$0-1], $$[$0]]];
+break;
+case 170:this.$ = [[$$[$0-2], $$[$0-1]]];
+break;
+case 171:this.$ = new yy.If($$[$0-1], $$[$0], {
+ type: $$[$0-2]
+ });
+break;
+case 172:this.$ = $$[$0-4].addElse(new yy.If($$[$0-1], $$[$0], {
+ type: $$[$0-2]
+ }));
+break;
+case 173:this.$ = $$[$0];
+break;
+case 174:this.$ = $$[$0-2].addElse($$[$0]);
+break;
+case 175:this.$ = new yy.If($$[$0], yy.Block.wrap([$$[$0-2]]), {
+ type: $$[$0-1],
+ statement: true
+ });
+break;
+case 176:this.$ = new yy.If($$[$0], yy.Block.wrap([$$[$0-2]]), {
+ type: $$[$0-1],
+ statement: true
+ });
+break;
+case 177:this.$ = new yy.Op($$[$0-1], $$[$0]);
+break;
+case 178:this.$ = new yy.Op('-', $$[$0]);
+break;
+case 179:this.$ = new yy.Op('+', $$[$0]);
+break;
+case 180:this.$ = new yy.Op('--', $$[$0]);
+break;
+case 181:this.$ = new yy.Op('++', $$[$0]);
+break;
+case 182:this.$ = new yy.Op('--', $$[$0-1], null, true);
+break;
+case 183:this.$ = new yy.Op('++', $$[$0-1], null, true);
+break;
+case 184:this.$ = new yy.Existence($$[$0-1]);
+break;
+case 185:this.$ = new yy.Op('+', $$[$0-2], $$[$0]);
+break;
+case 186:this.$ = new yy.Op('-', $$[$0-2], $$[$0]);
+break;
+case 187:this.$ = new yy.Op($$[$0-1], $$[$0-2], $$[$0]);
+break;
+case 188:this.$ = new yy.Op($$[$0-1], $$[$0-2], $$[$0]);
+break;
+case 189:this.$ = new yy.Op($$[$0-1], $$[$0-2], $$[$0]);
+break;
+case 190:this.$ = new yy.Op($$[$0-1], $$[$0-2], $$[$0]);
+break;
+case 191:this.$ = (function () {
+ if ($$[$0-1].charAt(0) === '!') {
+ return new yy.Op($$[$0-1].slice(1), $$[$0-2], $$[$0]).invert();
+ } else {
+ return new yy.Op($$[$0-1], $$[$0-2], $$[$0]);
+ }
+ }());
+break;
+case 192:this.$ = new yy.Assign($$[$0-2], $$[$0], $$[$0-1]);
+break;
+case 193:this.$ = new yy.Assign($$[$0-4], $$[$0-1], $$[$0-3]);
+break;
+case 194:this.$ = new yy.Extends($$[$0-2], $$[$0]);
+break;
+}
+},
+table: [{1:[2,1],3:1,4:2,5:3,7:4,8:6,9:7,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,25:[1,5],27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[3]},{1:[2,2],6:[1,71]},{6:[1,72]},{1:[2,4],6:[2,4],26:[2,4],99:[2,4]},{4:74,7:4,8:6,9:7,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,26:[1,73],27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,7],6:[2,7],26:[2,7],99:[2,7],100:84,101:[1,62],103:[1,63],106:85,107:[1,65],108:66,123:[1,83],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{1:[2,8],6:[2,8],26:[2,8],99:[2,8],100:87,101:[1,62],103:[1,63],106:88,107:[1,65],108:66,123:[1,86]},{1:[2,13],6:[2,13],25:[2,13],26:[2,13],46:[2,13],51:[2,13],54:[2,13],59:90,63:[1,92],64:[1,93],65:[1,94],66:95,67:[1,96],69:[2,13],70:[1,97],71:[1,98],75:[2,13],78:89,81:[1,91],82:[2,102],83:[2,13],88:[2,13],90:[2,13],99:[2,13],101:[2,13],102:[2,13],103:[2,13],107:[2,13],115:[2,13],123:[2,13],125:[2,13],126:[2,13],129:[2,13],130:[2,13],131:[2,13],132:[2,13],133:[2,13],134:[2,13]},{1:[2,14],6:[2,14],25:[2,14],26:[2,14],46:[2,14],51:[2,14],54:[2,14],59:100,63:[1,92],64:[1,93],65:[1,94],66:95,67:[1,96],69:[2,14],70:[1,97],71:[1,98],75:[2,14],78:99,81:[1,91],82:[2,102],83:[2,14],88:[2,14],90:[2,14],99:[2,14],101:[2,14],102:[2,14],103:[2,14],107:[2,14],115:[2,14],123:[2,14],125:[2,14],126:[2,14],129:[2,14],130:[2,14],131:[2,14],132:[2,14],133:[2,14],134:[2,14]},{1:[2,15],6:[2,15],25:[2,15],26:[2,15],46:[2,15],51:[2,15],54:[2,15],69:[2,15],75:[2,15],83:[2,15],88:[2,15],90:[2,15],99:[2,15],101:[2,15],102:[2,15],103:[2,15],107:[2,15],115:[2,15],123:[2,15],125:[2,15],126:[2,15],129:[2,15],130:[2,15],131:[2,15],132:[2,15],133:[2,15],134:[2,15]},{1:[2,16],6:[2,16],25:[2,16],26:[2,16],46:[2,16],51:[2,16],54:[2,16],69:[2,16],75:[2,16],83:[2,16],88:[2,16],90:[2,16],99:[2,16],101:[2,16],102:[2,16],103:[2,16],107:[2,16],115:[2,16],123:[2,16],125:[2,16],126:[2,16],129:[2,16],130:[2,16],131:[2,16],132:[2,16],133:[2,16],134:[2,16]},{1:[2,17],6:[2,17],25:[2,17],26:[2,17],46:[2,17],51:[2,17],54:[2,17],69:[2,17],75:[2,17],83:[2,17],88:[2,17],90:[2,17],99:[2,17],101:[2,17],102:[2,17],103:[2,17],107:[2,17],115:[2,17],123:[2,17],125:[2,17],126:[2,17],129:[2,17],130:[2,17],131:[2,17],132:[2,17],133:[2,17],134:[2,17]},{1:[2,18],6:[2,18],25:[2,18],26:[2,18],46:[2,18],51:[2,18],54:[2,18],69:[2,18],75:[2,18],83:[2,18],88:[2,18],90:[2,18],99:[2,18],101:[2,18],102:[2,18],103:[2,18],107:[2,18],115:[2,18],123:[2,18],125:[2,18],126:[2,18],129:[2,18],130:[2,18],131:[2,18],132:[2,18],133:[2,18],134:[2,18]},{1:[2,19],6:[2,19],25:[2,19],26:[2,19],46:[2,19],51:[2,19],54:[2,19],69:[2,19],75:[2,19],83:[2,19],88:[2,19],90:[2,19],99:[2,19],101:[2,19],102:[2,19],103:[2,19],107:[2,19],115:[2,19],123:[2,19],125:[2,19],126:[2,19],129:[2,19],130:[2,19],131:[2,19],132:[2,19],133:[2,19],134:[2,19]},{1:[2,20],6:[2,20],25:[2,20],26:[2,20],46:[2,20],51:[2,20],54:[2,20],69:[2,20],75:[2,20],83:[2,20],88:[2,20],90:[2,20],99:[2,20],101:[2,20],102:[2,20],103:[2,20],107:[2,20],115:[2,20],123:[2,20],125:[2,20],126:[2,20],129:[2,20],130:[2,20],131:[2,20],132:[2,20],133:[2,20],134:[2,20]},{1:[2,21],6:[2,21],25:[2,21],26:[2,21],46:[2,21],51:[2,21],54:[2,21],69:[2,21],75:[2,21],83:[2,21],88:[2,21],90:[2,21],99:[2,21],101:[2,21],102:[2,21],103:[2,21],107:[2,21],115:[2,21],123:[2,21],125:[2,21],126:[2,21],129:[2,21],130:[2,21],131:[2,21],132:[2,21],133:[2,21],134:[2,21]},{1:[2,22],6:[2,22],25:[2,22],26:[2,22],46:[2,22],51:[2,22],54:[2,22],69:[2,22],75:[2,22],83:[2,22],88:[2,22],90:[2,22],99:[2,22],101:[2,22],102:[2,22],103:[2,22],107:[2,22],115:[2,22],123:[2,22],125:[2,22],126:[2,22],129:[2,22],130:[2,22],131:[2,22],132:[2,22],133:[2,22],134:[2,22]},{1:[2,23],6:[2,23],25:[2,23],26:[2,23],46:[2,23],51:[2,23],54:[2,23],69:[2,23],75:[2,23],83:[2,23],88:[2,23],90:[2,23],99:[2,23],101:[2,23],102:[2,23],103:[2,23],107:[2,23],115:[2,23],123:[2,23],125:[2,23],126:[2,23],129:[2,23],130:[2,23],131:[2,23],132:[2,23],133:[2,23],134:[2,23]},{1:[2,9],6:[2,9],26:[2,9],99:[2,9],101:[2,9],103:[2,9],107:[2,9],123:[2,9]},{1:[2,10],6:[2,10],26:[2,10],99:[2,10],101:[2,10],103:[2,10],107:[2,10],123:[2,10]},{1:[2,11],6:[2,11],26:[2,11],99:[2,11],101:[2,11],103:[2,11],107:[2,11],123:[2,11]},{1:[2,12],6:[2,12],26:[2,12],99:[2,12],101:[2,12],103:[2,12],107:[2,12],123:[2,12]},{1:[2,69],6:[2,69],25:[2,69],26:[2,69],37:[1,101],46:[2,69],51:[2,69],54:[2,69],63:[2,69],64:[2,69],65:[2,69],67:[2,69],69:[2,69],70:[2,69],71:[2,69],75:[2,69],81:[2,69],82:[2,69],83:[2,69],88:[2,69],90:[2,69],99:[2,69],101:[2,69],102:[2,69],103:[2,69],107:[2,69],115:[2,69],123:[2,69],125:[2,69],126:[2,69],129:[2,69],130:[2,69],131:[2,69],132:[2,69],133:[2,69],134:[2,69]},{1:[2,70],6:[2,70],25:[2,70],26:[2,70],46:[2,70],51:[2,70],54:[2,70],63:[2,70],64:[2,70],65:[2,70],67:[2,70],69:[2,70],70:[2,70],71:[2,70],75:[2,70],81:[2,70],82:[2,70],83:[2,70],88:[2,70],90:[2,70],99:[2,70],101:[2,70],102:[2,70],103:[2,70],107:[2,70],115:[2,70],123:[2,70],125:[2,70],126:[2,70],129:[2,70],130:[2,70],131:[2,70],132:[2,70],133:[2,70],134:[2,70]},{1:[2,71],6:[2,71],25:[2,71],26:[2,71],46:[2,71],51:[2,71],54:[2,71],63:[2,71],64:[2,71],65:[2,71],67:[2,71],69:[2,71],70:[2,71],71:[2,71],75:[2,71],81:[2,71],82:[2,71],83:[2,71],88:[2,71],90:[2,71],99:[2,71],101:[2,71],102:[2,71],103:[2,71],107:[2,71],115:[2,71],123:[2,71],125:[2,71],126:[2,71],129:[2,71],130:[2,71],131:[2,71],132:[2,71],133:[2,71],134:[2,71]},{1:[2,72],6:[2,72],25:[2,72],26:[2,72],46:[2,72],51:[2,72],54:[2,72],63:[2,72],64:[2,72],65:[2,72],67:[2,72],69:[2,72],70:[2,72],71:[2,72],75:[2,72],81:[2,72],82:[2,72],83:[2,72],88:[2,72],90:[2,72],99:[2,72],101:[2,72],102:[2,72],103:[2,72],107:[2,72],115:[2,72],123:[2,72],125:[2,72],126:[2,72],129:[2,72],130:[2,72],131:[2,72],132:[2,72],133:[2,72],134:[2,72]},{1:[2,73],6:[2,73],25:[2,73],26:[2,73],46:[2,73],51:[2,73],54:[2,73],63:[2,73],64:[2,73],65:[2,73],67:[2,73],69:[2,73],70:[2,73],71:[2,73],75:[2,73],81:[2,73],82:[2,73],83:[2,73],88:[2,73],90:[2,73],99:[2,73],101:[2,73],102:[2,73],103:[2,73],107:[2,73],115:[2,73],123:[2,73],125:[2,73],126:[2,73],129:[2,73],130:[2,73],131:[2,73],132:[2,73],133:[2,73],134:[2,73]},{1:[2,100],6:[2,100],25:[2,100],26:[2,100],46:[2,100],51:[2,100],54:[2,100],63:[2,100],64:[2,100],65:[2,100],67:[2,100],69:[2,100],70:[2,100],71:[2,100],75:[2,100],79:102,81:[2,100],82:[1,103],83:[2,100],88:[2,100],90:[2,100],99:[2,100],101:[2,100],102:[2,100],103:[2,100],107:[2,100],115:[2,100],123:[2,100],125:[2,100],126:[2,100],129:[2,100],130:[2,100],131:[2,100],132:[2,100],133:[2,100],134:[2,100]},{27:107,28:[1,70],41:108,45:104,46:[2,51],51:[2,51],52:105,53:106,55:109,56:110,73:[1,67],86:[1,111],87:[1,112]},{5:113,25:[1,5]},{8:114,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:116,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:117,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{14:119,15:120,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:121,41:60,55:47,56:48,58:118,60:25,61:26,62:27,73:[1,67],80:[1,28],85:[1,55],86:[1,56],87:[1,54],98:[1,53]},{14:119,15:120,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:121,41:60,55:47,56:48,58:122,60:25,61:26,62:27,73:[1,67],80:[1,28],85:[1,55],86:[1,56],87:[1,54],98:[1,53]},{1:[2,66],6:[2,66],25:[2,66],26:[2,66],37:[2,66],46:[2,66],51:[2,66],54:[2,66],63:[2,66],64:[2,66],65:[2,66],67:[2,66],69:[2,66],70:[2,66],71:[2,66],75:[2,66],77:[1,126],81:[2,66],82:[2,66],83:[2,66],88:[2,66],90:[2,66],99:[2,66],101:[2,66],102:[2,66],103:[2,66],107:[2,66],115:[2,66],123:[2,66],125:[2,66],126:[2,66],127:[1,123],128:[1,124],129:[2,66],130:[2,66],131:[2,66],132:[2,66],133:[2,66],134:[2,66],135:[1,125]},{1:[2,173],6:[2,173],25:[2,173],26:[2,173],46:[2,173],51:[2,173],54:[2,173],69:[2,173],75:[2,173],83:[2,173],88:[2,173],90:[2,173],99:[2,173],101:[2,173],102:[2,173],103:[2,173],107:[2,173],115:[2,173],118:[1,127],123:[2,173],125:[2,173],126:[2,173],129:[2,173],130:[2,173],131:[2,173],132:[2,173],133:[2,173],134:[2,173]},{5:128,25:[1,5]},{5:129,25:[1,5]},{1:[2,141],6:[2,141],25:[2,141],26:[2,141],46:[2,141],51:[2,141],54:[2,141],69:[2,141],75:[2,141],83:[2,141],88:[2,141],90:[2,141],99:[2,141],101:[2,141],102:[2,141],103:[2,141],107:[2,141],115:[2,141],123:[2,141],125:[2,141],126:[2,141],129:[2,141],130:[2,141],131:[2,141],132:[2,141],133:[2,141],134:[2,141]},{5:130,25:[1,5]},{8:131,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,25:[1,132],27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,90],5:133,6:[2,90],14:119,15:120,25:[1,5],26:[2,90],27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:121,41:60,46:[2,90],51:[2,90],54:[2,90],55:47,56:48,58:135,60:25,61:26,62:27,69:[2,90],73:[1,67],75:[2,90],77:[1,134],80:[1,28],83:[2,90],85:[1,55],86:[1,56],87:[1,54],88:[2,90],90:[2,90],98:[1,53],99:[2,90],101:[2,90],102:[2,90],103:[2,90],107:[2,90],115:[2,90],123:[2,90],125:[2,90],126:[2,90],129:[2,90],130:[2,90],131:[2,90],132:[2,90],133:[2,90],134:[2,90]},{1:[2,43],6:[2,43],8:136,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,26:[2,43],27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],99:[2,43],100:39,101:[2,43],103:[2,43],104:40,105:[1,64],106:41,107:[2,43],108:66,116:[1,42],121:37,122:[1,61],123:[2,43],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:137,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,44],6:[2,44],25:[2,44],26:[2,44],51:[2,44],75:[2,44],99:[2,44],101:[2,44],103:[2,44],107:[2,44],123:[2,44]},{1:[2,67],6:[2,67],25:[2,67],26:[2,67],37:[2,67],46:[2,67],51:[2,67],54:[2,67],63:[2,67],64:[2,67],65:[2,67],67:[2,67],69:[2,67],70:[2,67],71:[2,67],75:[2,67],81:[2,67],82:[2,67],83:[2,67],88:[2,67],90:[2,67],99:[2,67],101:[2,67],102:[2,67],103:[2,67],107:[2,67],115:[2,67],123:[2,67],125:[2,67],126:[2,67],129:[2,67],130:[2,67],131:[2,67],132:[2,67],133:[2,67],134:[2,67]},{1:[2,68],6:[2,68],25:[2,68],26:[2,68],37:[2,68],46:[2,68],51:[2,68],54:[2,68],63:[2,68],64:[2,68],65:[2,68],67:[2,68],69:[2,68],70:[2,68],71:[2,68],75:[2,68],81:[2,68],82:[2,68],83:[2,68],88:[2,68],90:[2,68],99:[2,68],101:[2,68],102:[2,68],103:[2,68],107:[2,68],115:[2,68],123:[2,68],125:[2,68],126:[2,68],129:[2,68],130:[2,68],131:[2,68],132:[2,68],133:[2,68],134:[2,68]},{1:[2,29],6:[2,29],25:[2,29],26:[2,29],46:[2,29],51:[2,29],54:[2,29],63:[2,29],64:[2,29],65:[2,29],67:[2,29],69:[2,29],70:[2,29],71:[2,29],75:[2,29],81:[2,29],82:[2,29],83:[2,29],88:[2,29],90:[2,29],99:[2,29],101:[2,29],102:[2,29],103:[2,29],107:[2,29],115:[2,29],123:[2,29],125:[2,29],126:[2,29],129:[2,29],130:[2,29],131:[2,29],132:[2,29],133:[2,29],134:[2,29]},{1:[2,30],6:[2,30],25:[2,30],26:[2,30],46:[2,30],51:[2,30],54:[2,30],63:[2,30],64:[2,30],65:[2,30],67:[2,30],69:[2,30],70:[2,30],71:[2,30],75:[2,30],81:[2,30],82:[2,30],83:[2,30],88:[2,30],90:[2,30],99:[2,30],101:[2,30],102:[2,30],103:[2,30],107:[2,30],115:[2,30],123:[2,30],125:[2,30],126:[2,30],129:[2,30],130:[2,30],131:[2,30],132:[2,30],133:[2,30],134:[2,30]},{1:[2,31],6:[2,31],25:[2,31],26:[2,31],46:[2,31],51:[2,31],54:[2,31],63:[2,31],64:[2,31],65:[2,31],67:[2,31],69:[2,31],70:[2,31],71:[2,31],75:[2,31],81:[2,31],82:[2,31],83:[2,31],88:[2,31],90:[2,31],99:[2,31],101:[2,31],102:[2,31],103:[2,31],107:[2,31],115:[2,31],123:[2,31],125:[2,31],126:[2,31],129:[2,31],130:[2,31],131:[2,31],132:[2,31],133:[2,31],134:[2,31]},{1:[2,32],6:[2,32],25:[2,32],26:[2,32],46:[2,32],51:[2,32],54:[2,32],63:[2,32],64:[2,32],65:[2,32],67:[2,32],69:[2,32],70:[2,32],71:[2,32],75:[2,32],81:[2,32],82:[2,32],83:[2,32],88:[2,32],90:[2,32],99:[2,32],101:[2,32],102:[2,32],103:[2,32],107:[2,32],115:[2,32],123:[2,32],125:[2,32],126:[2,32],129:[2,32],130:[2,32],131:[2,32],132:[2,32],133:[2,32],134:[2,32]},{4:138,7:4,8:6,9:7,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,25:[1,139],27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:140,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,25:[1,144],27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,57:145,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],84:142,85:[1,55],86:[1,56],87:[1,54],88:[1,141],91:143,93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,106],6:[2,106],25:[2,106],26:[2,106],46:[2,106],51:[2,106],54:[2,106],63:[2,106],64:[2,106],65:[2,106],67:[2,106],69:[2,106],70:[2,106],71:[2,106],75:[2,106],81:[2,106],82:[2,106],83:[2,106],88:[2,106],90:[2,106],99:[2,106],101:[2,106],102:[2,106],103:[2,106],107:[2,106],115:[2,106],123:[2,106],125:[2,106],126:[2,106],129:[2,106],130:[2,106],131:[2,106],132:[2,106],133:[2,106],134:[2,106]},{1:[2,107],6:[2,107],25:[2,107],26:[2,107],27:146,28:[1,70],46:[2,107],51:[2,107],54:[2,107],63:[2,107],64:[2,107],65:[2,107],67:[2,107],69:[2,107],70:[2,107],71:[2,107],75:[2,107],81:[2,107],82:[2,107],83:[2,107],88:[2,107],90:[2,107],99:[2,107],101:[2,107],102:[2,107],103:[2,107],107:[2,107],115:[2,107],123:[2,107],125:[2,107],126:[2,107],129:[2,107],130:[2,107],131:[2,107],132:[2,107],133:[2,107],134:[2,107]},{25:[2,47]},{25:[2,48]},{1:[2,62],6:[2,62],25:[2,62],26:[2,62],37:[2,62],46:[2,62],51:[2,62],54:[2,62],63:[2,62],64:[2,62],65:[2,62],67:[2,62],69:[2,62],70:[2,62],71:[2,62],75:[2,62],77:[2,62],81:[2,62],82:[2,62],83:[2,62],88:[2,62],90:[2,62],99:[2,62],101:[2,62],102:[2,62],103:[2,62],107:[2,62],115:[2,62],123:[2,62],125:[2,62],126:[2,62],127:[2,62],128:[2,62],129:[2,62],130:[2,62],131:[2,62],132:[2,62],133:[2,62],134:[2,62],135:[2,62]},{1:[2,65],6:[2,65],25:[2,65],26:[2,65],37:[2,65],46:[2,65],51:[2,65],54:[2,65],63:[2,65],64:[2,65],65:[2,65],67:[2,65],69:[2,65],70:[2,65],71:[2,65],75:[2,65],77:[2,65],81:[2,65],82:[2,65],83:[2,65],88:[2,65],90:[2,65],99:[2,65],101:[2,65],102:[2,65],103:[2,65],107:[2,65],115:[2,65],123:[2,65],125:[2,65],126:[2,65],127:[2,65],128:[2,65],129:[2,65],130:[2,65],131:[2,65],132:[2,65],133:[2,65],134:[2,65],135:[2,65]},{8:147,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:148,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:149,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{5:150,8:151,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,25:[1,5],27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{27:156,28:[1,70],55:157,56:158,61:152,73:[1,67],87:[1,54],110:153,111:[1,154],112:155},{109:159,113:[1,160],114:[1,161]},{6:[2,85],12:165,25:[2,85],27:166,28:[1,70],29:167,30:[1,68],31:[1,69],38:163,39:164,41:168,43:[1,46],51:[2,85],74:162,75:[2,85],86:[1,111]},{1:[2,27],6:[2,27],25:[2,27],26:[2,27],40:[2,27],46:[2,27],51:[2,27],54:[2,27],63:[2,27],64:[2,27],65:[2,27],67:[2,27],69:[2,27],70:[2,27],71:[2,27],75:[2,27],81:[2,27],82:[2,27],83:[2,27],88:[2,27],90:[2,27],99:[2,27],101:[2,27],102:[2,27],103:[2,27],107:[2,27],115:[2,27],123:[2,27],125:[2,27],126:[2,27],129:[2,27],130:[2,27],131:[2,27],132:[2,27],133:[2,27],134:[2,27]},{1:[2,28],6:[2,28],25:[2,28],26:[2,28],40:[2,28],46:[2,28],51:[2,28],54:[2,28],63:[2,28],64:[2,28],65:[2,28],67:[2,28],69:[2,28],70:[2,28],71:[2,28],75:[2,28],81:[2,28],82:[2,28],83:[2,28],88:[2,28],90:[2,28],99:[2,28],101:[2,28],102:[2,28],103:[2,28],107:[2,28],115:[2,28],123:[2,28],125:[2,28],126:[2,28],129:[2,28],130:[2,28],131:[2,28],132:[2,28],133:[2,28],134:[2,28]},{1:[2,26],6:[2,26],25:[2,26],26:[2,26],37:[2,26],40:[2,26],46:[2,26],51:[2,26],54:[2,26],63:[2,26],64:[2,26],65:[2,26],67:[2,26],69:[2,26],70:[2,26],71:[2,26],75:[2,26],77:[2,26],81:[2,26],82:[2,26],83:[2,26],88:[2,26],90:[2,26],99:[2,26],101:[2,26],102:[2,26],103:[2,26],107:[2,26],113:[2,26],114:[2,26],115:[2,26],123:[2,26],125:[2,26],126:[2,26],127:[2,26],128:[2,26],129:[2,26],130:[2,26],131:[2,26],132:[2,26],133:[2,26],134:[2,26],135:[2,26]},{1:[2,6],6:[2,6],7:169,8:6,9:7,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,26:[2,6],27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],99:[2,6],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,3]},{1:[2,24],6:[2,24],25:[2,24],26:[2,24],46:[2,24],51:[2,24],54:[2,24],69:[2,24],75:[2,24],83:[2,24],88:[2,24],90:[2,24],95:[2,24],96:[2,24],99:[2,24],101:[2,24],102:[2,24],103:[2,24],107:[2,24],115:[2,24],118:[2,24],120:[2,24],123:[2,24],125:[2,24],126:[2,24],129:[2,24],130:[2,24],131:[2,24],132:[2,24],133:[2,24],134:[2,24]},{6:[1,71],26:[1,170]},{1:[2,184],6:[2,184],25:[2,184],26:[2,184],46:[2,184],51:[2,184],54:[2,184],69:[2,184],75:[2,184],83:[2,184],88:[2,184],90:[2,184],99:[2,184],101:[2,184],102:[2,184],103:[2,184],107:[2,184],115:[2,184],123:[2,184],125:[2,184],126:[2,184],129:[2,184],130:[2,184],131:[2,184],132:[2,184],133:[2,184],134:[2,184]},{8:171,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:172,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:173,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:174,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:175,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:176,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:177,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:178,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,140],6:[2,140],25:[2,140],26:[2,140],46:[2,140],51:[2,140],54:[2,140],69:[2,140],75:[2,140],83:[2,140],88:[2,140],90:[2,140],99:[2,140],101:[2,140],102:[2,140],103:[2,140],107:[2,140],115:[2,140],123:[2,140],125:[2,140],126:[2,140],129:[2,140],130:[2,140],131:[2,140],132:[2,140],133:[2,140],134:[2,140]},{1:[2,145],6:[2,145],25:[2,145],26:[2,145],46:[2,145],51:[2,145],54:[2,145],69:[2,145],75:[2,145],83:[2,145],88:[2,145],90:[2,145],99:[2,145],101:[2,145],102:[2,145],103:[2,145],107:[2,145],115:[2,145],123:[2,145],125:[2,145],126:[2,145],129:[2,145],130:[2,145],131:[2,145],132:[2,145],133:[2,145],134:[2,145]},{8:179,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,139],6:[2,139],25:[2,139],26:[2,139],46:[2,139],51:[2,139],54:[2,139],69:[2,139],75:[2,139],83:[2,139],88:[2,139],90:[2,139],99:[2,139],101:[2,139],102:[2,139],103:[2,139],107:[2,139],115:[2,139],123:[2,139],125:[2,139],126:[2,139],129:[2,139],130:[2,139],131:[2,139],132:[2,139],133:[2,139],134:[2,139]},{1:[2,144],6:[2,144],25:[2,144],26:[2,144],46:[2,144],51:[2,144],54:[2,144],69:[2,144],75:[2,144],83:[2,144],88:[2,144],90:[2,144],99:[2,144],101:[2,144],102:[2,144],103:[2,144],107:[2,144],115:[2,144],123:[2,144],125:[2,144],126:[2,144],129:[2,144],130:[2,144],131:[2,144],132:[2,144],133:[2,144],134:[2,144]},{79:180,82:[1,103]},{1:[2,63],6:[2,63],25:[2,63],26:[2,63],37:[2,63],46:[2,63],51:[2,63],54:[2,63],63:[2,63],64:[2,63],65:[2,63],67:[2,63],69:[2,63],70:[2,63],71:[2,63],75:[2,63],77:[2,63],81:[2,63],82:[2,63],83:[2,63],88:[2,63],90:[2,63],99:[2,63],101:[2,63],102:[2,63],103:[2,63],107:[2,63],115:[2,63],123:[2,63],125:[2,63],126:[2,63],127:[2,63],128:[2,63],129:[2,63],130:[2,63],131:[2,63],132:[2,63],133:[2,63],134:[2,63],135:[2,63]},{82:[2,103]},{27:181,28:[1,70]},{27:182,28:[1,70]},{1:[2,77],6:[2,77],25:[2,77],26:[2,77],27:183,28:[1,70],37:[2,77],46:[2,77],51:[2,77],54:[2,77],63:[2,77],64:[2,77],65:[2,77],67:[2,77],69:[2,77],70:[2,77],71:[2,77],75:[2,77],77:[2,77],81:[2,77],82:[2,77],83:[2,77],88:[2,77],90:[2,77],99:[2,77],101:[2,77],102:[2,77],103:[2,77],107:[2,77],115:[2,77],123:[2,77],125:[2,77],126:[2,77],127:[2,77],128:[2,77],129:[2,77],130:[2,77],131:[2,77],132:[2,77],133:[2,77],134:[2,77],135:[2,77]},{1:[2,78],6:[2,78],25:[2,78],26:[2,78],37:[2,78],46:[2,78],51:[2,78],54:[2,78],63:[2,78],64:[2,78],65:[2,78],67:[2,78],69:[2,78],70:[2,78],71:[2,78],75:[2,78],77:[2,78],81:[2,78],82:[2,78],83:[2,78],88:[2,78],90:[2,78],99:[2,78],101:[2,78],102:[2,78],103:[2,78],107:[2,78],115:[2,78],123:[2,78],125:[2,78],126:[2,78],127:[2,78],128:[2,78],129:[2,78],130:[2,78],131:[2,78],132:[2,78],133:[2,78],134:[2,78],135:[2,78]},{8:185,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],54:[1,189],55:47,56:48,58:36,60:25,61:26,62:27,68:184,72:186,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],89:187,90:[1,188],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{66:190,67:[1,96],70:[1,97],71:[1,98]},{66:191,67:[1,96],70:[1,97],71:[1,98]},{79:192,82:[1,103]},{1:[2,64],6:[2,64],25:[2,64],26:[2,64],37:[2,64],46:[2,64],51:[2,64],54:[2,64],63:[2,64],64:[2,64],65:[2,64],67:[2,64],69:[2,64],70:[2,64],71:[2,64],75:[2,64],77:[2,64],81:[2,64],82:[2,64],83:[2,64],88:[2,64],90:[2,64],99:[2,64],101:[2,64],102:[2,64],103:[2,64],107:[2,64],115:[2,64],123:[2,64],125:[2,64],126:[2,64],127:[2,64],128:[2,64],129:[2,64],130:[2,64],131:[2,64],132:[2,64],133:[2,64],134:[2,64],135:[2,64]},{8:193,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,25:[1,194],27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,101],6:[2,101],25:[2,101],26:[2,101],46:[2,101],51:[2,101],54:[2,101],63:[2,101],64:[2,101],65:[2,101],67:[2,101],69:[2,101],70:[2,101],71:[2,101],75:[2,101],81:[2,101],82:[2,101],83:[2,101],88:[2,101],90:[2,101],99:[2,101],101:[2,101],102:[2,101],103:[2,101],107:[2,101],115:[2,101],123:[2,101],125:[2,101],126:[2,101],129:[2,101],130:[2,101],131:[2,101],132:[2,101],133:[2,101],134:[2,101]},{8:197,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,25:[1,144],27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,57:145,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],83:[1,195],84:196,85:[1,55],86:[1,56],87:[1,54],91:143,93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{46:[1,198],51:[1,199]},{46:[2,52],51:[2,52]},{37:[1,201],46:[2,54],51:[2,54],54:[1,200]},{37:[2,57],46:[2,57],51:[2,57],54:[2,57]},{37:[2,58],46:[2,58],51:[2,58],54:[2,58]},{37:[2,59],46:[2,59],51:[2,59],54:[2,59]},{37:[2,60],46:[2,60],51:[2,60],54:[2,60]},{27:146,28:[1,70]},{8:197,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,25:[1,144],27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,57:145,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],84:142,85:[1,55],86:[1,56],87:[1,54],88:[1,141],91:143,93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,46],6:[2,46],25:[2,46],26:[2,46],46:[2,46],51:[2,46],54:[2,46],69:[2,46],75:[2,46],83:[2,46],88:[2,46],90:[2,46],99:[2,46],101:[2,46],102:[2,46],103:[2,46],107:[2,46],115:[2,46],123:[2,46],125:[2,46],126:[2,46],129:[2,46],130:[2,46],131:[2,46],132:[2,46],133:[2,46],134:[2,46]},{1:[2,177],6:[2,177],25:[2,177],26:[2,177],46:[2,177],51:[2,177],54:[2,177],69:[2,177],75:[2,177],83:[2,177],88:[2,177],90:[2,177],99:[2,177],100:84,101:[2,177],102:[2,177],103:[2,177],106:85,107:[2,177],108:66,115:[2,177],123:[2,177],125:[2,177],126:[2,177],129:[1,75],130:[2,177],131:[2,177],132:[2,177],133:[2,177],134:[2,177]},{100:87,101:[1,62],103:[1,63],106:88,107:[1,65],108:66,123:[1,86]},{1:[2,178],6:[2,178],25:[2,178],26:[2,178],46:[2,178],51:[2,178],54:[2,178],69:[2,178],75:[2,178],83:[2,178],88:[2,178],90:[2,178],99:[2,178],100:84,101:[2,178],102:[2,178],103:[2,178],106:85,107:[2,178],108:66,115:[2,178],123:[2,178],125:[2,178],126:[2,178],129:[1,75],130:[2,178],131:[2,178],132:[2,178],133:[2,178],134:[2,178]},{1:[2,179],6:[2,179],25:[2,179],26:[2,179],46:[2,179],51:[2,179],54:[2,179],69:[2,179],75:[2,179],83:[2,179],88:[2,179],90:[2,179],99:[2,179],100:84,101:[2,179],102:[2,179],103:[2,179],106:85,107:[2,179],108:66,115:[2,179],123:[2,179],125:[2,179],126:[2,179],129:[1,75],130:[2,179],131:[2,179],132:[2,179],133:[2,179],134:[2,179]},{1:[2,180],6:[2,180],25:[2,180],26:[2,180],46:[2,180],51:[2,180],54:[2,180],63:[2,66],64:[2,66],65:[2,66],67:[2,66],69:[2,180],70:[2,66],71:[2,66],75:[2,180],81:[2,66],82:[2,66],83:[2,180],88:[2,180],90:[2,180],99:[2,180],101:[2,180],102:[2,180],103:[2,180],107:[2,180],115:[2,180],123:[2,180],125:[2,180],126:[2,180],129:[2,180],130:[2,180],131:[2,180],132:[2,180],133:[2,180],134:[2,180]},{59:90,63:[1,92],64:[1,93],65:[1,94],66:95,67:[1,96],70:[1,97],71:[1,98],78:89,81:[1,91],82:[2,102]},{59:100,63:[1,92],64:[1,93],65:[1,94],66:95,67:[1,96],70:[1,97],71:[1,98],78:99,81:[1,91],82:[2,102]},{1:[2,69],6:[2,69],25:[2,69],26:[2,69],46:[2,69],51:[2,69],54:[2,69],63:[2,69],64:[2,69],65:[2,69],67:[2,69],69:[2,69],70:[2,69],71:[2,69],75:[2,69],81:[2,69],82:[2,69],83:[2,69],88:[2,69],90:[2,69],99:[2,69],101:[2,69],102:[2,69],103:[2,69],107:[2,69],115:[2,69],123:[2,69],125:[2,69],126:[2,69],129:[2,69],130:[2,69],131:[2,69],132:[2,69],133:[2,69],134:[2,69]},{1:[2,181],6:[2,181],25:[2,181],26:[2,181],46:[2,181],51:[2,181],54:[2,181],63:[2,66],64:[2,66],65:[2,66],67:[2,66],69:[2,181],70:[2,66],71:[2,66],75:[2,181],81:[2,66],82:[2,66],83:[2,181],88:[2,181],90:[2,181],99:[2,181],101:[2,181],102:[2,181],103:[2,181],107:[2,181],115:[2,181],123:[2,181],125:[2,181],126:[2,181],129:[2,181],130:[2,181],131:[2,181],132:[2,181],133:[2,181],134:[2,181]},{1:[2,182],6:[2,182],25:[2,182],26:[2,182],46:[2,182],51:[2,182],54:[2,182],69:[2,182],75:[2,182],83:[2,182],88:[2,182],90:[2,182],99:[2,182],101:[2,182],102:[2,182],103:[2,182],107:[2,182],115:[2,182],123:[2,182],125:[2,182],126:[2,182],129:[2,182],130:[2,182],131:[2,182],132:[2,182],133:[2,182],134:[2,182]},{1:[2,183],6:[2,183],25:[2,183],26:[2,183],46:[2,183],51:[2,183],54:[2,183],69:[2,183],75:[2,183],83:[2,183],88:[2,183],90:[2,183],99:[2,183],101:[2,183],102:[2,183],103:[2,183],107:[2,183],115:[2,183],123:[2,183],125:[2,183],126:[2,183],129:[2,183],130:[2,183],131:[2,183],132:[2,183],133:[2,183],134:[2,183]},{8:202,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,25:[1,203],27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:204,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{5:205,25:[1,5],122:[1,206]},{1:[2,126],6:[2,126],25:[2,126],26:[2,126],46:[2,126],51:[2,126],54:[2,126],69:[2,126],75:[2,126],83:[2,126],88:[2,126],90:[2,126],94:207,95:[1,208],96:[1,209],99:[2,126],101:[2,126],102:[2,126],103:[2,126],107:[2,126],115:[2,126],123:[2,126],125:[2,126],126:[2,126],129:[2,126],130:[2,126],131:[2,126],132:[2,126],133:[2,126],134:[2,126]},{1:[2,138],6:[2,138],25:[2,138],26:[2,138],46:[2,138],51:[2,138],54:[2,138],69:[2,138],75:[2,138],83:[2,138],88:[2,138],90:[2,138],99:[2,138],101:[2,138],102:[2,138],103:[2,138],107:[2,138],115:[2,138],123:[2,138],125:[2,138],126:[2,138],129:[2,138],130:[2,138],131:[2,138],132:[2,138],133:[2,138],134:[2,138]},{1:[2,146],6:[2,146],25:[2,146],26:[2,146],46:[2,146],51:[2,146],54:[2,146],69:[2,146],75:[2,146],83:[2,146],88:[2,146],90:[2,146],99:[2,146],101:[2,146],102:[2,146],103:[2,146],107:[2,146],115:[2,146],123:[2,146],125:[2,146],126:[2,146],129:[2,146],130:[2,146],131:[2,146],132:[2,146],133:[2,146],134:[2,146]},{25:[1,210],100:84,101:[1,62],103:[1,63],106:85,107:[1,65],108:66,123:[1,83],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{117:211,119:212,120:[1,213]},{1:[2,91],6:[2,91],25:[2,91],26:[2,91],46:[2,91],51:[2,91],54:[2,91],69:[2,91],75:[2,91],83:[2,91],88:[2,91],90:[2,91],99:[2,91],101:[2,91],102:[2,91],103:[2,91],107:[2,91],115:[2,91],123:[2,91],125:[2,91],126:[2,91],129:[2,91],130:[2,91],131:[2,91],132:[2,91],133:[2,91],134:[2,91]},{14:214,15:120,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:121,41:60,55:47,56:48,58:215,60:25,61:26,62:27,73:[1,67],80:[1,28],85:[1,55],86:[1,56],87:[1,54],98:[1,53]},{1:[2,94],5:216,6:[2,94],25:[1,5],26:[2,94],46:[2,94],51:[2,94],54:[2,94],63:[2,66],64:[2,66],65:[2,66],67:[2,66],69:[2,94],70:[2,66],71:[2,66],75:[2,94],77:[1,217],81:[2,66],82:[2,66],83:[2,94],88:[2,94],90:[2,94],99:[2,94],101:[2,94],102:[2,94],103:[2,94],107:[2,94],115:[2,94],123:[2,94],125:[2,94],126:[2,94],129:[2,94],130:[2,94],131:[2,94],132:[2,94],133:[2,94],134:[2,94]},{1:[2,42],6:[2,42],26:[2,42],99:[2,42],100:84,101:[2,42],103:[2,42],106:85,107:[2,42],108:66,123:[2,42],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{1:[2,131],6:[2,131],26:[2,131],99:[2,131],100:84,101:[2,131],103:[2,131],106:85,107:[2,131],108:66,123:[2,131],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{6:[1,71],99:[1,218]},{4:219,7:4,8:6,9:7,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{6:[2,122],25:[2,122],51:[2,122],54:[1,221],88:[2,122],89:220,90:[1,188],100:84,101:[1,62],103:[1,63],106:85,107:[1,65],108:66,123:[1,83],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{1:[2,109],6:[2,109],25:[2,109],26:[2,109],37:[2,109],46:[2,109],51:[2,109],54:[2,109],63:[2,109],64:[2,109],65:[2,109],67:[2,109],69:[2,109],70:[2,109],71:[2,109],75:[2,109],81:[2,109],82:[2,109],83:[2,109],88:[2,109],90:[2,109],99:[2,109],101:[2,109],102:[2,109],103:[2,109],107:[2,109],113:[2,109],114:[2,109],115:[2,109],123:[2,109],125:[2,109],126:[2,109],129:[2,109],130:[2,109],131:[2,109],132:[2,109],133:[2,109],134:[2,109]},{6:[2,49],25:[2,49],50:222,51:[1,223],88:[2,49]},{6:[2,117],25:[2,117],26:[2,117],51:[2,117],83:[2,117],88:[2,117]},{8:197,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,25:[1,144],27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,57:145,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],84:224,85:[1,55],86:[1,56],87:[1,54],91:143,93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{6:[2,123],25:[2,123],26:[2,123],51:[2,123],83:[2,123],88:[2,123]},{1:[2,108],6:[2,108],25:[2,108],26:[2,108],37:[2,108],40:[2,108],46:[2,108],51:[2,108],54:[2,108],63:[2,108],64:[2,108],65:[2,108],67:[2,108],69:[2,108],70:[2,108],71:[2,108],75:[2,108],77:[2,108],81:[2,108],82:[2,108],83:[2,108],88:[2,108],90:[2,108],99:[2,108],101:[2,108],102:[2,108],103:[2,108],107:[2,108],115:[2,108],123:[2,108],125:[2,108],126:[2,108],127:[2,108],128:[2,108],129:[2,108],130:[2,108],131:[2,108],132:[2,108],133:[2,108],134:[2,108],135:[2,108]},{5:225,25:[1,5],100:84,101:[1,62],103:[1,63],106:85,107:[1,65],108:66,123:[1,83],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{1:[2,134],6:[2,134],25:[2,134],26:[2,134],46:[2,134],51:[2,134],54:[2,134],69:[2,134],75:[2,134],83:[2,134],88:[2,134],90:[2,134],99:[2,134],100:84,101:[1,62],102:[1,226],103:[1,63],106:85,107:[1,65],108:66,115:[2,134],123:[2,134],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{1:[2,136],6:[2,136],25:[2,136],26:[2,136],46:[2,136],51:[2,136],54:[2,136],69:[2,136],75:[2,136],83:[2,136],88:[2,136],90:[2,136],99:[2,136],100:84,101:[1,62],102:[1,227],103:[1,63],106:85,107:[1,65],108:66,115:[2,136],123:[2,136],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{1:[2,142],6:[2,142],25:[2,142],26:[2,142],46:[2,142],51:[2,142],54:[2,142],69:[2,142],75:[2,142],83:[2,142],88:[2,142],90:[2,142],99:[2,142],101:[2,142],102:[2,142],103:[2,142],107:[2,142],115:[2,142],123:[2,142],125:[2,142],126:[2,142],129:[2,142],130:[2,142],131:[2,142],132:[2,142],133:[2,142],134:[2,142]},{1:[2,143],6:[2,143],25:[2,143],26:[2,143],46:[2,143],51:[2,143],54:[2,143],69:[2,143],75:[2,143],83:[2,143],88:[2,143],90:[2,143],99:[2,143],100:84,101:[1,62],102:[2,143],103:[1,63],106:85,107:[1,65],108:66,115:[2,143],123:[2,143],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{1:[2,147],6:[2,147],25:[2,147],26:[2,147],46:[2,147],51:[2,147],54:[2,147],69:[2,147],75:[2,147],83:[2,147],88:[2,147],90:[2,147],99:[2,147],101:[2,147],102:[2,147],103:[2,147],107:[2,147],115:[2,147],123:[2,147],125:[2,147],126:[2,147],129:[2,147],130:[2,147],131:[2,147],132:[2,147],133:[2,147],134:[2,147]},{113:[2,149],114:[2,149]},{27:156,28:[1,70],55:157,56:158,73:[1,67],87:[1,112],110:228,112:155},{51:[1,229],113:[2,154],114:[2,154]},{51:[2,151],113:[2,151],114:[2,151]},{51:[2,152],113:[2,152],114:[2,152]},{51:[2,153],113:[2,153],114:[2,153]},{1:[2,148],6:[2,148],25:[2,148],26:[2,148],46:[2,148],51:[2,148],54:[2,148],69:[2,148],75:[2,148],83:[2,148],88:[2,148],90:[2,148],99:[2,148],101:[2,148],102:[2,148],103:[2,148],107:[2,148],115:[2,148],123:[2,148],125:[2,148],126:[2,148],129:[2,148],130:[2,148],131:[2,148],132:[2,148],133:[2,148],134:[2,148]},{8:230,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:231,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{6:[2,49],25:[2,49],50:232,51:[1,233],75:[2,49]},{6:[2,86],25:[2,86],26:[2,86],51:[2,86],75:[2,86]},{6:[2,35],25:[2,35],26:[2,35],40:[1,234],51:[2,35],75:[2,35]},{6:[2,38],25:[2,38],26:[2,38],51:[2,38],75:[2,38]},{6:[2,39],25:[2,39],26:[2,39],40:[2,39],51:[2,39],75:[2,39]},{6:[2,40],25:[2,40],26:[2,40],40:[2,40],51:[2,40],75:[2,40]},{6:[2,41],25:[2,41],26:[2,41],40:[2,41],51:[2,41],75:[2,41]},{1:[2,5],6:[2,5],26:[2,5],99:[2,5]},{1:[2,25],6:[2,25],25:[2,25],26:[2,25],46:[2,25],51:[2,25],54:[2,25],69:[2,25],75:[2,25],83:[2,25],88:[2,25],90:[2,25],95:[2,25],96:[2,25],99:[2,25],101:[2,25],102:[2,25],103:[2,25],107:[2,25],115:[2,25],118:[2,25],120:[2,25],123:[2,25],125:[2,25],126:[2,25],129:[2,25],130:[2,25],131:[2,25],132:[2,25],133:[2,25],134:[2,25]},{1:[2,185],6:[2,185],25:[2,185],26:[2,185],46:[2,185],51:[2,185],54:[2,185],69:[2,185],75:[2,185],83:[2,185],88:[2,185],90:[2,185],99:[2,185],100:84,101:[2,185],102:[2,185],103:[2,185],106:85,107:[2,185],108:66,115:[2,185],123:[2,185],125:[2,185],126:[2,185],129:[1,75],130:[1,78],131:[2,185],132:[2,185],133:[2,185],134:[2,185]},{1:[2,186],6:[2,186],25:[2,186],26:[2,186],46:[2,186],51:[2,186],54:[2,186],69:[2,186],75:[2,186],83:[2,186],88:[2,186],90:[2,186],99:[2,186],100:84,101:[2,186],102:[2,186],103:[2,186],106:85,107:[2,186],108:66,115:[2,186],123:[2,186],125:[2,186],126:[2,186],129:[1,75],130:[1,78],131:[2,186],132:[2,186],133:[2,186],134:[2,186]},{1:[2,187],6:[2,187],25:[2,187],26:[2,187],46:[2,187],51:[2,187],54:[2,187],69:[2,187],75:[2,187],83:[2,187],88:[2,187],90:[2,187],99:[2,187],100:84,101:[2,187],102:[2,187],103:[2,187],106:85,107:[2,187],108:66,115:[2,187],123:[2,187],125:[2,187],126:[2,187],129:[1,75],130:[2,187],131:[2,187],132:[2,187],133:[2,187],134:[2,187]},{1:[2,188],6:[2,188],25:[2,188],26:[2,188],46:[2,188],51:[2,188],54:[2,188],69:[2,188],75:[2,188],83:[2,188],88:[2,188],90:[2,188],99:[2,188],100:84,101:[2,188],102:[2,188],103:[2,188],106:85,107:[2,188],108:66,115:[2,188],123:[2,188],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[2,188],132:[2,188],133:[2,188],134:[2,188]},{1:[2,189],6:[2,189],25:[2,189],26:[2,189],46:[2,189],51:[2,189],54:[2,189],69:[2,189],75:[2,189],83:[2,189],88:[2,189],90:[2,189],99:[2,189],100:84,101:[2,189],102:[2,189],103:[2,189],106:85,107:[2,189],108:66,115:[2,189],123:[2,189],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[2,189],133:[2,189],134:[1,82]},{1:[2,190],6:[2,190],25:[2,190],26:[2,190],46:[2,190],51:[2,190],54:[2,190],69:[2,190],75:[2,190],83:[2,190],88:[2,190],90:[2,190],99:[2,190],100:84,101:[2,190],102:[2,190],103:[2,190],106:85,107:[2,190],108:66,115:[2,190],123:[2,190],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[2,190],134:[1,82]},{1:[2,191],6:[2,191],25:[2,191],26:[2,191],46:[2,191],51:[2,191],54:[2,191],69:[2,191],75:[2,191],83:[2,191],88:[2,191],90:[2,191],99:[2,191],100:84,101:[2,191],102:[2,191],103:[2,191],106:85,107:[2,191],108:66,115:[2,191],123:[2,191],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[2,191],133:[2,191],134:[2,191]},{1:[2,176],6:[2,176],25:[2,176],26:[2,176],46:[2,176],51:[2,176],54:[2,176],69:[2,176],75:[2,176],83:[2,176],88:[2,176],90:[2,176],99:[2,176],100:84,101:[1,62],102:[2,176],103:[1,63],106:85,107:[1,65],108:66,115:[2,176],123:[1,83],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{1:[2,175],6:[2,175],25:[2,175],26:[2,175],46:[2,175],51:[2,175],54:[2,175],69:[2,175],75:[2,175],83:[2,175],88:[2,175],90:[2,175],99:[2,175],100:84,101:[1,62],102:[2,175],103:[1,63],106:85,107:[1,65],108:66,115:[2,175],123:[1,83],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{1:[2,98],6:[2,98],25:[2,98],26:[2,98],46:[2,98],51:[2,98],54:[2,98],63:[2,98],64:[2,98],65:[2,98],67:[2,98],69:[2,98],70:[2,98],71:[2,98],75:[2,98],81:[2,98],82:[2,98],83:[2,98],88:[2,98],90:[2,98],99:[2,98],101:[2,98],102:[2,98],103:[2,98],107:[2,98],115:[2,98],123:[2,98],125:[2,98],126:[2,98],129:[2,98],130:[2,98],131:[2,98],132:[2,98],133:[2,98],134:[2,98]},{1:[2,74],6:[2,74],25:[2,74],26:[2,74],37:[2,74],46:[2,74],51:[2,74],54:[2,74],63:[2,74],64:[2,74],65:[2,74],67:[2,74],69:[2,74],70:[2,74],71:[2,74],75:[2,74],77:[2,74],81:[2,74],82:[2,74],83:[2,74],88:[2,74],90:[2,74],99:[2,74],101:[2,74],102:[2,74],103:[2,74],107:[2,74],115:[2,74],123:[2,74],125:[2,74],126:[2,74],127:[2,74],128:[2,74],129:[2,74],130:[2,74],131:[2,74],132:[2,74],133:[2,74],134:[2,74],135:[2,74]},{1:[2,75],6:[2,75],25:[2,75],26:[2,75],37:[2,75],46:[2,75],51:[2,75],54:[2,75],63:[2,75],64:[2,75],65:[2,75],67:[2,75],69:[2,75],70:[2,75],71:[2,75],75:[2,75],77:[2,75],81:[2,75],82:[2,75],83:[2,75],88:[2,75],90:[2,75],99:[2,75],101:[2,75],102:[2,75],103:[2,75],107:[2,75],115:[2,75],123:[2,75],125:[2,75],126:[2,75],127:[2,75],128:[2,75],129:[2,75],130:[2,75],131:[2,75],132:[2,75],133:[2,75],134:[2,75],135:[2,75]},{1:[2,76],6:[2,76],25:[2,76],26:[2,76],37:[2,76],46:[2,76],51:[2,76],54:[2,76],63:[2,76],64:[2,76],65:[2,76],67:[2,76],69:[2,76],70:[2,76],71:[2,76],75:[2,76],77:[2,76],81:[2,76],82:[2,76],83:[2,76],88:[2,76],90:[2,76],99:[2,76],101:[2,76],102:[2,76],103:[2,76],107:[2,76],115:[2,76],123:[2,76],125:[2,76],126:[2,76],127:[2,76],128:[2,76],129:[2,76],130:[2,76],131:[2,76],132:[2,76],133:[2,76],134:[2,76],135:[2,76]},{69:[1,235]},{54:[1,189],69:[2,82],89:236,90:[1,188],100:84,101:[1,62],103:[1,63],106:85,107:[1,65],108:66,123:[1,83],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{69:[2,83]},{8:237,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{13:[2,111],28:[2,111],30:[2,111],31:[2,111],33:[2,111],34:[2,111],35:[2,111],42:[2,111],43:[2,111],44:[2,111],48:[2,111],49:[2,111],69:[2,111],73:[2,111],76:[2,111],80:[2,111],85:[2,111],86:[2,111],87:[2,111],93:[2,111],97:[2,111],98:[2,111],101:[2,111],103:[2,111],105:[2,111],107:[2,111],116:[2,111],122:[2,111],124:[2,111],125:[2,111],126:[2,111],127:[2,111],128:[2,111]},{13:[2,112],28:[2,112],30:[2,112],31:[2,112],33:[2,112],34:[2,112],35:[2,112],42:[2,112],43:[2,112],44:[2,112],48:[2,112],49:[2,112],69:[2,112],73:[2,112],76:[2,112],80:[2,112],85:[2,112],86:[2,112],87:[2,112],93:[2,112],97:[2,112],98:[2,112],101:[2,112],103:[2,112],105:[2,112],107:[2,112],116:[2,112],122:[2,112],124:[2,112],125:[2,112],126:[2,112],127:[2,112],128:[2,112]},{1:[2,80],6:[2,80],25:[2,80],26:[2,80],37:[2,80],46:[2,80],51:[2,80],54:[2,80],63:[2,80],64:[2,80],65:[2,80],67:[2,80],69:[2,80],70:[2,80],71:[2,80],75:[2,80],77:[2,80],81:[2,80],82:[2,80],83:[2,80],88:[2,80],90:[2,80],99:[2,80],101:[2,80],102:[2,80],103:[2,80],107:[2,80],115:[2,80],123:[2,80],125:[2,80],126:[2,80],127:[2,80],128:[2,80],129:[2,80],130:[2,80],131:[2,80],132:[2,80],133:[2,80],134:[2,80],135:[2,80]},{1:[2,81],6:[2,81],25:[2,81],26:[2,81],37:[2,81],46:[2,81],51:[2,81],54:[2,81],63:[2,81],64:[2,81],65:[2,81],67:[2,81],69:[2,81],70:[2,81],71:[2,81],75:[2,81],77:[2,81],81:[2,81],82:[2,81],83:[2,81],88:[2,81],90:[2,81],99:[2,81],101:[2,81],102:[2,81],103:[2,81],107:[2,81],115:[2,81],123:[2,81],125:[2,81],126:[2,81],127:[2,81],128:[2,81],129:[2,81],130:[2,81],131:[2,81],132:[2,81],133:[2,81],134:[2,81],135:[2,81]},{1:[2,99],6:[2,99],25:[2,99],26:[2,99],46:[2,99],51:[2,99],54:[2,99],63:[2,99],64:[2,99],65:[2,99],67:[2,99],69:[2,99],70:[2,99],71:[2,99],75:[2,99],81:[2,99],82:[2,99],83:[2,99],88:[2,99],90:[2,99],99:[2,99],101:[2,99],102:[2,99],103:[2,99],107:[2,99],115:[2,99],123:[2,99],125:[2,99],126:[2,99],129:[2,99],130:[2,99],131:[2,99],132:[2,99],133:[2,99],134:[2,99]},{1:[2,33],6:[2,33],25:[2,33],26:[2,33],46:[2,33],51:[2,33],54:[2,33],69:[2,33],75:[2,33],83:[2,33],88:[2,33],90:[2,33],99:[2,33],100:84,101:[2,33],102:[2,33],103:[2,33],106:85,107:[2,33],108:66,115:[2,33],123:[2,33],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{8:238,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,104],6:[2,104],25:[2,104],26:[2,104],46:[2,104],51:[2,104],54:[2,104],63:[2,104],64:[2,104],65:[2,104],67:[2,104],69:[2,104],70:[2,104],71:[2,104],75:[2,104],81:[2,104],82:[2,104],83:[2,104],88:[2,104],90:[2,104],99:[2,104],101:[2,104],102:[2,104],103:[2,104],107:[2,104],115:[2,104],123:[2,104],125:[2,104],126:[2,104],129:[2,104],130:[2,104],131:[2,104],132:[2,104],133:[2,104],134:[2,104]},{6:[2,49],25:[2,49],50:239,51:[1,223],83:[2,49]},{6:[2,122],25:[2,122],26:[2,122],51:[2,122],54:[1,240],83:[2,122],88:[2,122],100:84,101:[1,62],103:[1,63],106:85,107:[1,65],108:66,123:[1,83],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{47:241,48:[1,57],49:[1,58]},{27:107,28:[1,70],41:108,52:242,53:106,55:109,56:110,73:[1,67],86:[1,111],87:[1,112]},{46:[2,55],51:[2,55]},{8:243,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,192],6:[2,192],25:[2,192],26:[2,192],46:[2,192],51:[2,192],54:[2,192],69:[2,192],75:[2,192],83:[2,192],88:[2,192],90:[2,192],99:[2,192],100:84,101:[2,192],102:[2,192],103:[2,192],106:85,107:[2,192],108:66,115:[2,192],123:[2,192],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{8:244,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,194],6:[2,194],25:[2,194],26:[2,194],46:[2,194],51:[2,194],54:[2,194],69:[2,194],75:[2,194],83:[2,194],88:[2,194],90:[2,194],99:[2,194],100:84,101:[2,194],102:[2,194],103:[2,194],106:85,107:[2,194],108:66,115:[2,194],123:[2,194],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{1:[2,174],6:[2,174],25:[2,174],26:[2,174],46:[2,174],51:[2,174],54:[2,174],69:[2,174],75:[2,174],83:[2,174],88:[2,174],90:[2,174],99:[2,174],101:[2,174],102:[2,174],103:[2,174],107:[2,174],115:[2,174],123:[2,174],125:[2,174],126:[2,174],129:[2,174],130:[2,174],131:[2,174],132:[2,174],133:[2,174],134:[2,174]},{8:245,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,127],6:[2,127],25:[2,127],26:[2,127],46:[2,127],51:[2,127],54:[2,127],69:[2,127],75:[2,127],83:[2,127],88:[2,127],90:[2,127],95:[1,246],99:[2,127],101:[2,127],102:[2,127],103:[2,127],107:[2,127],115:[2,127],123:[2,127],125:[2,127],126:[2,127],129:[2,127],130:[2,127],131:[2,127],132:[2,127],133:[2,127],134:[2,127]},{5:247,25:[1,5]},{27:248,28:[1,70]},{117:249,119:212,120:[1,213]},{26:[1,250],118:[1,251],119:252,120:[1,213]},{26:[2,167],118:[2,167],120:[2,167]},{8:254,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],92:253,93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,92],5:255,6:[2,92],25:[1,5],26:[2,92],46:[2,92],51:[2,92],54:[2,92],59:90,63:[1,92],64:[1,93],65:[1,94],66:95,67:[1,96],69:[2,92],70:[1,97],71:[1,98],75:[2,92],78:89,81:[1,91],82:[2,102],83:[2,92],88:[2,92],90:[2,92],99:[2,92],101:[2,92],102:[2,92],103:[2,92],107:[2,92],115:[2,92],123:[2,92],125:[2,92],126:[2,92],129:[2,92],130:[2,92],131:[2,92],132:[2,92],133:[2,92],134:[2,92]},{1:[2,66],6:[2,66],25:[2,66],26:[2,66],46:[2,66],51:[2,66],54:[2,66],63:[2,66],64:[2,66],65:[2,66],67:[2,66],69:[2,66],70:[2,66],71:[2,66],75:[2,66],81:[2,66],82:[2,66],83:[2,66],88:[2,66],90:[2,66],99:[2,66],101:[2,66],102:[2,66],103:[2,66],107:[2,66],115:[2,66],123:[2,66],125:[2,66],126:[2,66],129:[2,66],130:[2,66],131:[2,66],132:[2,66],133:[2,66],134:[2,66]},{1:[2,95],6:[2,95],25:[2,95],26:[2,95],46:[2,95],51:[2,95],54:[2,95],69:[2,95],75:[2,95],83:[2,95],88:[2,95],90:[2,95],99:[2,95],101:[2,95],102:[2,95],103:[2,95],107:[2,95],115:[2,95],123:[2,95],125:[2,95],126:[2,95],129:[2,95],130:[2,95],131:[2,95],132:[2,95],133:[2,95],134:[2,95]},{14:256,15:120,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:121,41:60,55:47,56:48,58:215,60:25,61:26,62:27,73:[1,67],80:[1,28],85:[1,55],86:[1,56],87:[1,54],98:[1,53]},{1:[2,132],6:[2,132],25:[2,132],26:[2,132],46:[2,132],51:[2,132],54:[2,132],63:[2,132],64:[2,132],65:[2,132],67:[2,132],69:[2,132],70:[2,132],71:[2,132],75:[2,132],81:[2,132],82:[2,132],83:[2,132],88:[2,132],90:[2,132],99:[2,132],101:[2,132],102:[2,132],103:[2,132],107:[2,132],115:[2,132],123:[2,132],125:[2,132],126:[2,132],129:[2,132],130:[2,132],131:[2,132],132:[2,132],133:[2,132],134:[2,132]},{6:[1,71],26:[1,257]},{8:258,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{6:[2,61],13:[2,112],25:[2,61],28:[2,112],30:[2,112],31:[2,112],33:[2,112],34:[2,112],35:[2,112],42:[2,112],43:[2,112],44:[2,112],48:[2,112],49:[2,112],51:[2,61],73:[2,112],76:[2,112],80:[2,112],85:[2,112],86:[2,112],87:[2,112],88:[2,61],93:[2,112],97:[2,112],98:[2,112],101:[2,112],103:[2,112],105:[2,112],107:[2,112],116:[2,112],122:[2,112],124:[2,112],125:[2,112],126:[2,112],127:[2,112],128:[2,112]},{6:[1,260],25:[1,261],88:[1,259]},{6:[2,50],8:197,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,25:[2,50],26:[2,50],27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,57:145,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],83:[2,50],85:[1,55],86:[1,56],87:[1,54],88:[2,50],91:262,93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{6:[2,49],25:[2,49],26:[2,49],50:263,51:[1,223]},{1:[2,171],6:[2,171],25:[2,171],26:[2,171],46:[2,171],51:[2,171],54:[2,171],69:[2,171],75:[2,171],83:[2,171],88:[2,171],90:[2,171],99:[2,171],101:[2,171],102:[2,171],103:[2,171],107:[2,171],115:[2,171],118:[2,171],123:[2,171],125:[2,171],126:[2,171],129:[2,171],130:[2,171],131:[2,171],132:[2,171],133:[2,171],134:[2,171]},{8:264,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:265,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{113:[2,150],114:[2,150]},{27:156,28:[1,70],55:157,56:158,73:[1,67],87:[1,112],112:266},{1:[2,156],6:[2,156],25:[2,156],26:[2,156],46:[2,156],51:[2,156],54:[2,156],69:[2,156],75:[2,156],83:[2,156],88:[2,156],90:[2,156],99:[2,156],100:84,101:[2,156],102:[1,267],103:[2,156],106:85,107:[2,156],108:66,115:[1,268],123:[2,156],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{1:[2,157],6:[2,157],25:[2,157],26:[2,157],46:[2,157],51:[2,157],54:[2,157],69:[2,157],75:[2,157],83:[2,157],88:[2,157],90:[2,157],99:[2,157],100:84,101:[2,157],102:[1,269],103:[2,157],106:85,107:[2,157],108:66,115:[2,157],123:[2,157],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{6:[1,271],25:[1,272],75:[1,270]},{6:[2,50],12:165,25:[2,50],26:[2,50],27:166,28:[1,70],29:167,30:[1,68],31:[1,69],38:273,39:164,41:168,43:[1,46],75:[2,50],86:[1,111]},{8:274,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,25:[1,275],27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,79],6:[2,79],25:[2,79],26:[2,79],37:[2,79],46:[2,79],51:[2,79],54:[2,79],63:[2,79],64:[2,79],65:[2,79],67:[2,79],69:[2,79],70:[2,79],71:[2,79],75:[2,79],77:[2,79],81:[2,79],82:[2,79],83:[2,79],88:[2,79],90:[2,79],99:[2,79],101:[2,79],102:[2,79],103:[2,79],107:[2,79],115:[2,79],123:[2,79],125:[2,79],126:[2,79],127:[2,79],128:[2,79],129:[2,79],130:[2,79],131:[2,79],132:[2,79],133:[2,79],134:[2,79],135:[2,79]},{8:276,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,69:[2,115],73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{69:[2,116],100:84,101:[1,62],103:[1,63],106:85,107:[1,65],108:66,123:[1,83],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{26:[1,277],100:84,101:[1,62],103:[1,63],106:85,107:[1,65],108:66,123:[1,83],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{6:[1,260],25:[1,261],83:[1,278]},{6:[2,61],25:[2,61],26:[2,61],51:[2,61],83:[2,61],88:[2,61]},{5:279,25:[1,5]},{46:[2,53],51:[2,53]},{46:[2,56],51:[2,56],100:84,101:[1,62],103:[1,63],106:85,107:[1,65],108:66,123:[1,83],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{26:[1,280],100:84,101:[1,62],103:[1,63],106:85,107:[1,65],108:66,123:[1,83],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{5:281,25:[1,5],100:84,101:[1,62],103:[1,63],106:85,107:[1,65],108:66,123:[1,83],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{5:282,25:[1,5]},{1:[2,128],6:[2,128],25:[2,128],26:[2,128],46:[2,128],51:[2,128],54:[2,128],69:[2,128],75:[2,128],83:[2,128],88:[2,128],90:[2,128],99:[2,128],101:[2,128],102:[2,128],103:[2,128],107:[2,128],115:[2,128],123:[2,128],125:[2,128],126:[2,128],129:[2,128],130:[2,128],131:[2,128],132:[2,128],133:[2,128],134:[2,128]},{5:283,25:[1,5]},{26:[1,284],118:[1,285],119:252,120:[1,213]},{1:[2,165],6:[2,165],25:[2,165],26:[2,165],46:[2,165],51:[2,165],54:[2,165],69:[2,165],75:[2,165],83:[2,165],88:[2,165],90:[2,165],99:[2,165],101:[2,165],102:[2,165],103:[2,165],107:[2,165],115:[2,165],123:[2,165],125:[2,165],126:[2,165],129:[2,165],130:[2,165],131:[2,165],132:[2,165],133:[2,165],134:[2,165]},{5:286,25:[1,5]},{26:[2,168],118:[2,168],120:[2,168]},{5:287,25:[1,5],51:[1,288]},{25:[2,124],51:[2,124],100:84,101:[1,62],103:[1,63],106:85,107:[1,65],108:66,123:[1,83],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{1:[2,93],6:[2,93],25:[2,93],26:[2,93],46:[2,93],51:[2,93],54:[2,93],69:[2,93],75:[2,93],83:[2,93],88:[2,93],90:[2,93],99:[2,93],101:[2,93],102:[2,93],103:[2,93],107:[2,93],115:[2,93],123:[2,93],125:[2,93],126:[2,93],129:[2,93],130:[2,93],131:[2,93],132:[2,93],133:[2,93],134:[2,93]},{1:[2,96],5:289,6:[2,96],25:[1,5],26:[2,96],46:[2,96],51:[2,96],54:[2,96],59:90,63:[1,92],64:[1,93],65:[1,94],66:95,67:[1,96],69:[2,96],70:[1,97],71:[1,98],75:[2,96],78:89,81:[1,91],82:[2,102],83:[2,96],88:[2,96],90:[2,96],99:[2,96],101:[2,96],102:[2,96],103:[2,96],107:[2,96],115:[2,96],123:[2,96],125:[2,96],126:[2,96],129:[2,96],130:[2,96],131:[2,96],132:[2,96],133:[2,96],134:[2,96]},{99:[1,290]},{88:[1,291],100:84,101:[1,62],103:[1,63],106:85,107:[1,65],108:66,123:[1,83],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{1:[2,110],6:[2,110],25:[2,110],26:[2,110],37:[2,110],46:[2,110],51:[2,110],54:[2,110],63:[2,110],64:[2,110],65:[2,110],67:[2,110],69:[2,110],70:[2,110],71:[2,110],75:[2,110],81:[2,110],82:[2,110],83:[2,110],88:[2,110],90:[2,110],99:[2,110],101:[2,110],102:[2,110],103:[2,110],107:[2,110],113:[2,110],114:[2,110],115:[2,110],123:[2,110],125:[2,110],126:[2,110],129:[2,110],130:[2,110],131:[2,110],132:[2,110],133:[2,110],134:[2,110]},{8:197,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,57:145,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],91:292,93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:197,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,25:[1,144],27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,57:145,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],84:293,85:[1,55],86:[1,56],87:[1,54],91:143,93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{6:[2,118],25:[2,118],26:[2,118],51:[2,118],83:[2,118],88:[2,118]},{6:[1,260],25:[1,261],26:[1,294]},{1:[2,135],6:[2,135],25:[2,135],26:[2,135],46:[2,135],51:[2,135],54:[2,135],69:[2,135],75:[2,135],83:[2,135],88:[2,135],90:[2,135],99:[2,135],100:84,101:[1,62],102:[2,135],103:[1,63],106:85,107:[1,65],108:66,115:[2,135],123:[2,135],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{1:[2,137],6:[2,137],25:[2,137],26:[2,137],46:[2,137],51:[2,137],54:[2,137],69:[2,137],75:[2,137],83:[2,137],88:[2,137],90:[2,137],99:[2,137],100:84,101:[1,62],102:[2,137],103:[1,63],106:85,107:[1,65],108:66,115:[2,137],123:[2,137],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{113:[2,155],114:[2,155]},{8:295,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:296,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:297,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,84],6:[2,84],25:[2,84],26:[2,84],37:[2,84],46:[2,84],51:[2,84],54:[2,84],63:[2,84],64:[2,84],65:[2,84],67:[2,84],69:[2,84],70:[2,84],71:[2,84],75:[2,84],81:[2,84],82:[2,84],83:[2,84],88:[2,84],90:[2,84],99:[2,84],101:[2,84],102:[2,84],103:[2,84],107:[2,84],113:[2,84],114:[2,84],115:[2,84],123:[2,84],125:[2,84],126:[2,84],129:[2,84],130:[2,84],131:[2,84],132:[2,84],133:[2,84],134:[2,84]},{12:165,27:166,28:[1,70],29:167,30:[1,68],31:[1,69],38:298,39:164,41:168,43:[1,46],86:[1,111]},{6:[2,85],12:165,25:[2,85],26:[2,85],27:166,28:[1,70],29:167,30:[1,68],31:[1,69],38:163,39:164,41:168,43:[1,46],51:[2,85],74:299,86:[1,111]},{6:[2,87],25:[2,87],26:[2,87],51:[2,87],75:[2,87]},{6:[2,36],25:[2,36],26:[2,36],51:[2,36],75:[2,36],100:84,101:[1,62],103:[1,63],106:85,107:[1,65],108:66,123:[1,83],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{8:300,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{69:[2,114],100:84,101:[1,62],103:[1,63],106:85,107:[1,65],108:66,123:[1,83],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{1:[2,34],6:[2,34],25:[2,34],26:[2,34],46:[2,34],51:[2,34],54:[2,34],69:[2,34],75:[2,34],83:[2,34],88:[2,34],90:[2,34],99:[2,34],101:[2,34],102:[2,34],103:[2,34],107:[2,34],115:[2,34],123:[2,34],125:[2,34],126:[2,34],129:[2,34],130:[2,34],131:[2,34],132:[2,34],133:[2,34],134:[2,34]},{1:[2,105],6:[2,105],25:[2,105],26:[2,105],46:[2,105],51:[2,105],54:[2,105],63:[2,105],64:[2,105],65:[2,105],67:[2,105],69:[2,105],70:[2,105],71:[2,105],75:[2,105],81:[2,105],82:[2,105],83:[2,105],88:[2,105],90:[2,105],99:[2,105],101:[2,105],102:[2,105],103:[2,105],107:[2,105],115:[2,105],123:[2,105],125:[2,105],126:[2,105],129:[2,105],130:[2,105],131:[2,105],132:[2,105],133:[2,105],134:[2,105]},{1:[2,45],6:[2,45],25:[2,45],26:[2,45],46:[2,45],51:[2,45],54:[2,45],69:[2,45],75:[2,45],83:[2,45],88:[2,45],90:[2,45],99:[2,45],101:[2,45],102:[2,45],103:[2,45],107:[2,45],115:[2,45],123:[2,45],125:[2,45],126:[2,45],129:[2,45],130:[2,45],131:[2,45],132:[2,45],133:[2,45],134:[2,45]},{1:[2,193],6:[2,193],25:[2,193],26:[2,193],46:[2,193],51:[2,193],54:[2,193],69:[2,193],75:[2,193],83:[2,193],88:[2,193],90:[2,193],99:[2,193],101:[2,193],102:[2,193],103:[2,193],107:[2,193],115:[2,193],123:[2,193],125:[2,193],126:[2,193],129:[2,193],130:[2,193],131:[2,193],132:[2,193],133:[2,193],134:[2,193]},{1:[2,172],6:[2,172],25:[2,172],26:[2,172],46:[2,172],51:[2,172],54:[2,172],69:[2,172],75:[2,172],83:[2,172],88:[2,172],90:[2,172],99:[2,172],101:[2,172],102:[2,172],103:[2,172],107:[2,172],115:[2,172],118:[2,172],123:[2,172],125:[2,172],126:[2,172],129:[2,172],130:[2,172],131:[2,172],132:[2,172],133:[2,172],134:[2,172]},{1:[2,129],6:[2,129],25:[2,129],26:[2,129],46:[2,129],51:[2,129],54:[2,129],69:[2,129],75:[2,129],83:[2,129],88:[2,129],90:[2,129],99:[2,129],101:[2,129],102:[2,129],103:[2,129],107:[2,129],115:[2,129],123:[2,129],125:[2,129],126:[2,129],129:[2,129],130:[2,129],131:[2,129],132:[2,129],133:[2,129],134:[2,129]},{1:[2,130],6:[2,130],25:[2,130],26:[2,130],46:[2,130],51:[2,130],54:[2,130],69:[2,130],75:[2,130],83:[2,130],88:[2,130],90:[2,130],95:[2,130],99:[2,130],101:[2,130],102:[2,130],103:[2,130],107:[2,130],115:[2,130],123:[2,130],125:[2,130],126:[2,130],129:[2,130],130:[2,130],131:[2,130],132:[2,130],133:[2,130],134:[2,130]},{1:[2,163],6:[2,163],25:[2,163],26:[2,163],46:[2,163],51:[2,163],54:[2,163],69:[2,163],75:[2,163],83:[2,163],88:[2,163],90:[2,163],99:[2,163],101:[2,163],102:[2,163],103:[2,163],107:[2,163],115:[2,163],123:[2,163],125:[2,163],126:[2,163],129:[2,163],130:[2,163],131:[2,163],132:[2,163],133:[2,163],134:[2,163]},{5:301,25:[1,5]},{26:[1,302]},{6:[1,303],26:[2,169],118:[2,169],120:[2,169]},{8:304,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,97],6:[2,97],25:[2,97],26:[2,97],46:[2,97],51:[2,97],54:[2,97],69:[2,97],75:[2,97],83:[2,97],88:[2,97],90:[2,97],99:[2,97],101:[2,97],102:[2,97],103:[2,97],107:[2,97],115:[2,97],123:[2,97],125:[2,97],126:[2,97],129:[2,97],130:[2,97],131:[2,97],132:[2,97],133:[2,97],134:[2,97]},{1:[2,133],6:[2,133],25:[2,133],26:[2,133],46:[2,133],51:[2,133],54:[2,133],63:[2,133],64:[2,133],65:[2,133],67:[2,133],69:[2,133],70:[2,133],71:[2,133],75:[2,133],81:[2,133],82:[2,133],83:[2,133],88:[2,133],90:[2,133],99:[2,133],101:[2,133],102:[2,133],103:[2,133],107:[2,133],115:[2,133],123:[2,133],125:[2,133],126:[2,133],129:[2,133],130:[2,133],131:[2,133],132:[2,133],133:[2,133],134:[2,133]},{1:[2,113],6:[2,113],25:[2,113],26:[2,113],46:[2,113],51:[2,113],54:[2,113],63:[2,113],64:[2,113],65:[2,113],67:[2,113],69:[2,113],70:[2,113],71:[2,113],75:[2,113],81:[2,113],82:[2,113],83:[2,113],88:[2,113],90:[2,113],99:[2,113],101:[2,113],102:[2,113],103:[2,113],107:[2,113],115:[2,113],123:[2,113],125:[2,113],126:[2,113],129:[2,113],130:[2,113],131:[2,113],132:[2,113],133:[2,113],134:[2,113]},{6:[2,119],25:[2,119],26:[2,119],51:[2,119],83:[2,119],88:[2,119]},{6:[2,49],25:[2,49],26:[2,49],50:305,51:[1,223]},{6:[2,120],25:[2,120],26:[2,120],51:[2,120],83:[2,120],88:[2,120]},{1:[2,158],6:[2,158],25:[2,158],26:[2,158],46:[2,158],51:[2,158],54:[2,158],69:[2,158],75:[2,158],83:[2,158],88:[2,158],90:[2,158],99:[2,158],100:84,101:[2,158],102:[2,158],103:[2,158],106:85,107:[2,158],108:66,115:[1,306],123:[2,158],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{1:[2,160],6:[2,160],25:[2,160],26:[2,160],46:[2,160],51:[2,160],54:[2,160],69:[2,160],75:[2,160],83:[2,160],88:[2,160],90:[2,160],99:[2,160],100:84,101:[2,160],102:[1,307],103:[2,160],106:85,107:[2,160],108:66,115:[2,160],123:[2,160],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{1:[2,159],6:[2,159],25:[2,159],26:[2,159],46:[2,159],51:[2,159],54:[2,159],69:[2,159],75:[2,159],83:[2,159],88:[2,159],90:[2,159],99:[2,159],100:84,101:[2,159],102:[2,159],103:[2,159],106:85,107:[2,159],108:66,115:[2,159],123:[2,159],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{6:[2,88],25:[2,88],26:[2,88],51:[2,88],75:[2,88]},{6:[2,49],25:[2,49],26:[2,49],50:308,51:[1,233]},{26:[1,309],100:84,101:[1,62],103:[1,63],106:85,107:[1,65],108:66,123:[1,83],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{26:[1,310]},{1:[2,166],6:[2,166],25:[2,166],26:[2,166],46:[2,166],51:[2,166],54:[2,166],69:[2,166],75:[2,166],83:[2,166],88:[2,166],90:[2,166],99:[2,166],101:[2,166],102:[2,166],103:[2,166],107:[2,166],115:[2,166],123:[2,166],125:[2,166],126:[2,166],129:[2,166],130:[2,166],131:[2,166],132:[2,166],133:[2,166],134:[2,166]},{26:[2,170],118:[2,170],120:[2,170]},{25:[2,125],51:[2,125],100:84,101:[1,62],103:[1,63],106:85,107:[1,65],108:66,123:[1,83],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{6:[1,260],25:[1,261],26:[1,311]},{8:312,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:313,9:115,10:19,11:20,12:21,13:[1,22],14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:18,27:59,28:[1,70],29:49,30:[1,68],31:[1,69],32:24,33:[1,50],34:[1,51],35:[1,52],36:23,41:60,42:[1,44],43:[1,46],44:[1,29],47:30,48:[1,57],49:[1,58],55:47,56:48,58:36,60:25,61:26,62:27,73:[1,67],76:[1,43],80:[1,28],85:[1,55],86:[1,56],87:[1,54],93:[1,38],97:[1,45],98:[1,53],100:39,101:[1,62],103:[1,63],104:40,105:[1,64],106:41,107:[1,65],108:66,116:[1,42],121:37,122:[1,61],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{6:[1,271],25:[1,272],26:[1,314]},{6:[2,37],25:[2,37],26:[2,37],51:[2,37],75:[2,37]},{1:[2,164],6:[2,164],25:[2,164],26:[2,164],46:[2,164],51:[2,164],54:[2,164],69:[2,164],75:[2,164],83:[2,164],88:[2,164],90:[2,164],99:[2,164],101:[2,164],102:[2,164],103:[2,164],107:[2,164],115:[2,164],123:[2,164],125:[2,164],126:[2,164],129:[2,164],130:[2,164],131:[2,164],132:[2,164],133:[2,164],134:[2,164]},{6:[2,121],25:[2,121],26:[2,121],51:[2,121],83:[2,121],88:[2,121]},{1:[2,161],6:[2,161],25:[2,161],26:[2,161],46:[2,161],51:[2,161],54:[2,161],69:[2,161],75:[2,161],83:[2,161],88:[2,161],90:[2,161],99:[2,161],100:84,101:[2,161],102:[2,161],103:[2,161],106:85,107:[2,161],108:66,115:[2,161],123:[2,161],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{1:[2,162],6:[2,162],25:[2,162],26:[2,162],46:[2,162],51:[2,162],54:[2,162],69:[2,162],75:[2,162],83:[2,162],88:[2,162],90:[2,162],99:[2,162],100:84,101:[2,162],102:[2,162],103:[2,162],106:85,107:[2,162],108:66,115:[2,162],123:[2,162],125:[1,77],126:[1,76],129:[1,75],130:[1,78],131:[1,79],132:[1,80],133:[1,81],134:[1,82]},{6:[2,89],25:[2,89],26:[2,89],51:[2,89],75:[2,89]}],
+defaultActions: {57:[2,47],58:[2,48],72:[2,3],91:[2,103],186:[2,83]},
+parseError: function parseError(str, hash) {
+ throw new Error(str);
+},
+parse: function parse(input) {
+ var self = this,
+ stack = [0],
+ vstack = [null], // semantic value stack
+ lstack = [], // location stack
+ table = this.table,
+ yytext = '',
+ yylineno = 0,
+ yyleng = 0,
+ recovering = 0,
+ TERROR = 2,
+ EOF = 1;
+
+ //this.reductionCount = this.shiftCount = 0;
+
+ this.lexer.setInput(input);
+ this.lexer.yy = this.yy;
+ this.yy.lexer = this.lexer;
+ if (typeof this.lexer.yylloc == 'undefined')
+ this.lexer.yylloc = {};
+ var yyloc = this.lexer.yylloc;
+ lstack.push(yyloc);
+
+ if (typeof this.yy.parseError === 'function')
+ this.parseError = this.yy.parseError;
+
+ function popStack (n) {
+ stack.length = stack.length - 2*n;
+ vstack.length = vstack.length - n;
+ lstack.length = lstack.length - n;
+ }
+
+ function lex() {
+ var token;
+ token = self.lexer.lex() || 1; // $end = 1
+ // if token isn't its numeric value, convert
+ if (typeof token !== 'number') {
+ token = self.symbols_[token] || token;
+ }
+ return token;
+ };
+
+ var symbol, preErrorSymbol, state, action, a, r, yyval={},p,len,newState, expected;
+ while (true) {
+ // retreive state number from top of stack
+ state = stack[stack.length-1];
+
+ // use default actions if available
+ if (this.defaultActions[state]) {
+ action = this.defaultActions[state];
+ } else {
+ if (symbol == null)
+ symbol = lex();
+ // read action for current state and first input
+ action = table[state] && table[state][symbol];
+ }
+
+ // handle parse error
+ if (typeof action === 'undefined' || !action.length || !action[0]) {
+
+ if (!recovering) {
+ // Report error
+ expected = [];
+ for (p in table[state]) if (this.terminals_[p] && p > 2) {
+ expected.push("'"+this.terminals_[p]+"'");
+ }
+ var errStr = '';
+ if (this.lexer.showPosition) {
+ errStr = 'Parse error on line '+(yylineno+1)+":\n"+this.lexer.showPosition()+'\nExpecting '+expected.join(', ');
+ } else {
+ errStr = 'Parse error on line '+(yylineno+1)+": Unexpected " +
+ (symbol == 1 /*EOF*/ ? "end of input" :
+ ("'"+(this.terminals_[symbol] || symbol)+"'"));
+ }
+ this.parseError(errStr,
+ {text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected});
+ }
+
+ // just recovered from another error
+ if (recovering == 3) {
+ if (symbol == EOF) {
+ throw new Error(errStr || 'Parsing halted.');
+ }
+
+ // discard current lookahead and grab another
+ yyleng = this.lexer.yyleng;
+ yytext = this.lexer.yytext;
+ yylineno = this.lexer.yylineno;
+ yyloc = this.lexer.yylloc;
+ symbol = lex();
+ }
+
+ // try to recover from error
+ while (1) {
+ // check for error recovery rule in this state
+ if ((TERROR.toString()) in table[state]) {
+ break;
+ }
+ if (state == 0) {
+ throw new Error(errStr || 'Parsing halted.');
+ }
+ popStack(1);
+ state = stack[stack.length-1];
+ }
+
+ preErrorSymbol = symbol; // save the lookahead token
+ symbol = TERROR; // insert generic error symbol as new lookahead
+ state = stack[stack.length-1];
+ action = table[state] && table[state][TERROR];
+ recovering = 3; // allow 3 real symbols to be shifted before reporting a new error
+ }
+
+ // this shouldn't happen, unless resolve defaults are off
+ if (action[0] instanceof Array && action.length > 1) {
+ throw new Error('Parse Error: multiple actions possible at state: '+state+', token: '+symbol);
+ }
+
+ switch (action[0]) {
+
+ case 1: // shift
+ //this.shiftCount++;
+
+ stack.push(symbol);
+ vstack.push(this.lexer.yytext);
+ lstack.push(this.lexer.yylloc);
+ stack.push(action[1]); // push state
+ symbol = null;
+ if (!preErrorSymbol) { // normal execution/no error
+ yyleng = this.lexer.yyleng;
+ yytext = this.lexer.yytext;
+ yylineno = this.lexer.yylineno;
+ yyloc = this.lexer.yylloc;
+ if (recovering > 0)
+ recovering--;
+ } else { // error just occurred, resume old lookahead f/ before error
+ symbol = preErrorSymbol;
+ preErrorSymbol = null;
+ }
+ break;
+
+ case 2: // reduce
+ //this.reductionCount++;
+
+ len = this.productions_[action[1]][1];
+
+ // perform semantic action
+ yyval.$ = vstack[vstack.length-len]; // default to $$ = $1
+ // default location, uses first token for firsts, last for lasts
+ yyval._$ = {
+ first_line: lstack[lstack.length-(len||1)].first_line,
+ last_line: lstack[lstack.length-1].last_line,
+ first_column: lstack[lstack.length-(len||1)].first_column,
+ last_column: lstack[lstack.length-1].last_column
+ };
+ r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);
+
+ if (typeof r !== 'undefined') {
+ return r;
+ }
+
+ // pop off stack
+ if (len) {
+ stack = stack.slice(0,-1*len*2);
+ vstack = vstack.slice(0, -1*len);
+ lstack = lstack.slice(0, -1*len);
+ }
+
+ stack.push(this.productions_[action[1]][0]); // push nonterminal (reduce)
+ vstack.push(yyval.$);
+ lstack.push(yyval._$);
+ // goto new state = table[STATE][NONTERMINAL]
+ newState = table[stack[stack.length-2]][stack[stack.length-1]];
+ stack.push(newState);
+ break;
+
+ case 3: // accept
+ return true;
+ }
+
+ }
+
+ return true;
+}};
+
+module.exports = parser;
+});/**
+ * Copyright (c) 2011 Jeremy Ashkenas
+ *
+ * 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.
+ */
+
+define('ace/mode/coffee/nodes', ['require', 'exports', 'module' , 'ace/mode/coffee/scope', 'ace/mode/coffee/helpers'], function(require, exports, module) {
+ var Access, Arr, Assign, Base, Block, Call, Class, Closure, Code, Comment, Existence, Extends, For, IDENTIFIER, IS_STRING, If, In, Index, LEVEL_ACCESS, LEVEL_COND, LEVEL_LIST, LEVEL_OP, LEVEL_PAREN, LEVEL_TOP, Literal, METHOD_DEF, NEGATE, NO, Obj, Op, Param, Parens, Push, Range, Return, SIMPLENUM, Scope, Slice, Splat, Switch, TAB, THIS, Throw, Try, UTILITIES, Value, While, YES, compact, del, ends, extend, flatten, last, merge, multident, starts, unfoldSoak, utility, _ref;
+ var __hasProp = Object.prototype.hasOwnProperty, __extends = function(child, parent) {
+ for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; }
+ function ctor() { this.constructor = child; }
+ ctor.prototype = parent.prototype;
+ child.prototype = new ctor;
+ child.__super__ = parent.prototype;
+ return child;
+ }, __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, __indexOf = Array.prototype.indexOf || function(item) {
+ for (var i = 0, l = this.length; i < l; i++) {
+ if (this[i] === item) return i;
+ }
+ return -1;
+ };
+ Scope = require('./scope').Scope;
+ _ref = require('./helpers'), compact = _ref.compact, flatten = _ref.flatten, extend = _ref.extend, merge = _ref.merge, del = _ref.del, starts = _ref.starts, ends = _ref.ends, last = _ref.last;
+ exports.extend = extend;
+ YES = function() {
+ return true;
+ };
+ NO = function() {
+ return false;
+ };
+ THIS = function() {
+ return this;
+ };
+ NEGATE = function() {
+ this.negated = !this.negated;
+ return this;
+ };
+ exports.Base = Base = (function() {
+ function Base() {}
+ Base.prototype.compile = function(o, lvl) {
+ var node;
+ o = extend({}, o);
+ if (lvl) {
+ o.level = lvl;
+ }
+ node = this.unfoldSoak(o) || this;
+ node.tab = o.indent;
+ if (o.level === LEVEL_TOP || !node.isStatement(o)) {
+ return node.compileNode(o);
+ } else {
+ return node.compileClosure(o);
+ }
+ };
+ Base.prototype.compileClosure = function(o) {
+ if (this.jumps() || this instanceof Throw) {
+ throw SyntaxError('cannot use a pure statement in an expression.');
+ }
+ o.sharedScope = true;
+ return Closure.wrap(this).compileNode(o);
+ };
+ Base.prototype.cache = function(o, level, reused) {
+ var ref, sub;
+ if (!this.isComplex()) {
+ ref = level ? this.compile(o, level) : this;
+ return [ref, ref];
+ } else {
+ ref = new Literal(reused || o.scope.freeVariable('ref'));
+ sub = new Assign(ref, this);
+ if (level) {
+ return [sub.compile(o, level), ref.value];
+ } else {
+ return [sub, ref];
+ }
+ }
+ };
+ Base.prototype.compileLoopReference = function(o, name) {
+ var src, tmp;
+ src = tmp = this.compile(o, LEVEL_LIST);
+ if (!((-Infinity < +src && +src < Infinity) || IDENTIFIER.test(src) && o.scope.check(src, true))) {
+ src = "" + (tmp = o.scope.freeVariable(name)) + " = " + src;
+ }
+ return [src, tmp];
+ };
+ Base.prototype.makeReturn = function() {
+ return new Return(this);
+ };
+ Base.prototype.contains = function(pred) {
+ var contains;
+ contains = false;
+ this.traverseChildren(false, function(node) {
+ if (pred(node)) {
+ contains = true;
+ return false;
+ }
+ });
+ return contains;
+ };
+ Base.prototype.containsType = function(type) {
+ return this instanceof type || this.contains(function(node) {
+ return node instanceof type;
+ });
+ };
+ Base.prototype.lastNonComment = function(list) {
+ var i;
+ i = list.length;
+ while (i--) {
+ if (!(list[i] instanceof Comment)) {
+ return list[i];
+ }
+ }
+ return null;
+ };
+ Base.prototype.toString = function(idt, name) {
+ var tree;
+ if (idt == null) {
+ idt = '';
+ }
+ if (name == null) {
+ name = this.constructor.name;
+ }
+ tree = '\n' + idt + name;
+ if (this.soak) {
+ tree += '?';
+ }
+ this.eachChild(function(node) {
+ return tree += node.toString(idt + TAB);
+ });
+ return tree;
+ };
+ Base.prototype.eachChild = function(func) {
+ var attr, child, _i, _j, _len, _len2, _ref2, _ref3;
+ if (!this.children) {
+ return this;
+ }
+ _ref2 = this.children;
+ for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
+ attr = _ref2[_i];
+ if (this[attr]) {
+ _ref3 = flatten([this[attr]]);
+ for (_j = 0, _len2 = _ref3.length; _j < _len2; _j++) {
+ child = _ref3[_j];
+ if (func(child) === false) {
+ return this;
+ }
+ }
+ }
+ }
+ return this;
+ };
+ Base.prototype.traverseChildren = function(crossScope, func) {
+ return this.eachChild(function(child) {
+ if (func(child) === false) {
+ return false;
+ }
+ return child.traverseChildren(crossScope, func);
+ });
+ };
+ Base.prototype.invert = function() {
+ return new Op('!', this);
+ };
+ Base.prototype.unwrapAll = function() {
+ var node;
+ node = this;
+ while (node !== (node = node.unwrap())) {
+ continue;
+ }
+ return node;
+ };
+ Base.prototype.children = [];
+ Base.prototype.isStatement = NO;
+ Base.prototype.jumps = NO;
+ Base.prototype.isComplex = YES;
+ Base.prototype.isChainable = NO;
+ Base.prototype.isAssignable = NO;
+ Base.prototype.unwrap = THIS;
+ Base.prototype.unfoldSoak = NO;
+ Base.prototype.assigns = NO;
+ return Base;
+ })();
+ exports.Block = Block = (function() {
+ __extends(Block, Base);
+ function Block(nodes) {
+ this.expressions = compact(flatten(nodes || []));
+ }
+ Block.prototype.children = ['expressions'];
+ Block.prototype.push = function(node) {
+ this.expressions.push(node);
+ return this;
+ };
+ Block.prototype.pop = function() {
+ return this.expressions.pop();
+ };
+ Block.prototype.unshift = function(node) {
+ this.expressions.unshift(node);
+ return this;
+ };
+ Block.prototype.unwrap = function() {
+ if (this.expressions.length === 1) {
+ return this.expressions[0];
+ } else {
+ return this;
+ }
+ };
+ Block.prototype.isEmpty = function() {
+ return !this.expressions.length;
+ };
+ Block.prototype.isStatement = function(o) {
+ var exp, _i, _len, _ref2;
+ _ref2 = this.expressions;
+ for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
+ exp = _ref2[_i];
+ if (exp.isStatement(o)) {
+ return true;
+ }
+ }
+ return false;
+ };
+ Block.prototype.jumps = function(o) {
+ var exp, _i, _len, _ref2;
+ _ref2 = this.expressions;
+ for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
+ exp = _ref2[_i];
+ if (exp.jumps(o)) {
+ return exp;
+ }
+ }
+ };
+ Block.prototype.makeReturn = function() {
+ var expr, len;
+ len = this.expressions.length;
+ while (len--) {
+ expr = this.expressions[len];
+ if (!(expr instanceof Comment)) {
+ this.expressions[len] = expr.makeReturn();
+ if (expr instanceof Return && !expr.expression) {
+ this.expressions.splice(len, 1);
+ }
+ break;
+ }
+ }
+ return this;
+ };
+ Block.prototype.compile = function(o, level) {
+ if (o == null) {
+ o = {};
+ }
+ if (o.scope) {
+ return Block.__super__.compile.call(this, o, level);
+ } else {
+ return this.compileRoot(o);
+ }
+ };
+ Block.prototype.compileNode = function(o) {
+ var code, codes, node, top, _i, _len, _ref2;
+ this.tab = o.indent;
+ top = o.level === LEVEL_TOP;
+ codes = [];
+ _ref2 = this.expressions;
+ for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
+ node = _ref2[_i];
+ node = node.unwrapAll();
+ node = node.unfoldSoak(o) || node;
+ if (top) {
+ node.front = true;
+ code = node.compile(o);
+ codes.push(node.isStatement(o) ? code : this.tab + code + ';');
+ } else {
+ codes.push(node.compile(o, LEVEL_LIST));
+ }
+ }
+ if (top) {
+ return codes.join('\n');
+ }
+ code = codes.join(', ') || 'void 0';
+ if (codes.length > 1 && o.level >= LEVEL_LIST) {
+ return "(" + code + ")";
+ } else {
+ return code;
+ }
+ };
+ Block.prototype.compileRoot = function(o) {
+ var code;
+ o.indent = this.tab = o.bare ? '' : TAB;
+ o.scope = new Scope(null, this, null);
+ o.level = LEVEL_TOP;
+ code = this.compileWithDeclarations(o);
+ if (o.bare) {
+ return code;
+ } else {
+ return "(function() {\n" + code + "\n}).call(this);\n";
+ }
+ };
+ Block.prototype.compileWithDeclarations = function(o) {
+ var assigns, code, declars, exp, i, post, rest, scope, _len, _ref2;
+ code = post = '';
+ _ref2 = this.expressions;
+ for (i = 0, _len = _ref2.length; i < _len; i++) {
+ exp = _ref2[i];
+ exp = exp.unwrap();
+ if (!(exp instanceof Comment || exp instanceof Literal)) {
+ break;
+ }
+ }
+ o = merge(o, {
+ level: LEVEL_TOP
+ });
+ if (i) {
+ rest = this.expressions.splice(i, this.expressions.length);
+ code = this.compileNode(o);
+ this.expressions = rest;
+ }
+ post = this.compileNode(o);
+ scope = o.scope;
+ if (scope.expressions === this) {
+ declars = o.scope.hasDeclarations();
+ assigns = scope.hasAssignments;
+ if ((declars || assigns) && i) {
+ code += '\n';
+ }
+ if (declars) {
+ code += "" + this.tab + "var " + (scope.declaredVariables().join(', ')) + ";\n";
+ }
+ if (assigns) {
+ code += "" + this.tab + "var " + (multident(scope.assignedVariables().join(', '), this.tab)) + ";\n";
+ }
+ }
+ return code + post;
+ };
+ Block.wrap = function(nodes) {
+ if (nodes.length === 1 && nodes[0] instanceof Block) {
+ return nodes[0];
+ }
+ return new Block(nodes);
+ };
+ return Block;
+ })();
+ exports.Literal = Literal = (function() {
+ __extends(Literal, Base);
+ function Literal(value) {
+ this.value = value;
+ }
+ Literal.prototype.makeReturn = function() {
+ if (this.isStatement()) {
+ return this;
+ } else {
+ return new Return(this);
+ }
+ };
+ Literal.prototype.isAssignable = function() {
+ return IDENTIFIER.test(this.value);
+ };
+ Literal.prototype.isStatement = function() {
+ var _ref2;
+ return (_ref2 = this.value) === 'break' || _ref2 === 'continue' || _ref2 === 'debugger';
+ };
+ Literal.prototype.isComplex = NO;
+ Literal.prototype.assigns = function(name) {
+ return name === this.value;
+ };
+ Literal.prototype.jumps = function(o) {
+ if (!this.isStatement()) {
+ return false;
+ }
+ if (!(o && (o.loop || o.block && (this.value !== 'continue')))) {
+ return this;
+ } else {
+ return false;
+ }
+ };
+ Literal.prototype.compileNode = function(o) {
+ var code;
+ code = this.isUndefined ? o.level >= LEVEL_ACCESS ? '(void 0)' : 'void 0' : this.value.reserved ? "\"" + this.value + "\"" : this.value;
+ if (this.isStatement()) {
+ return "" + this.tab + code + ";";
+ } else {
+ return code;
+ }
+ };
+ Literal.prototype.toString = function() {
+ return ' "' + this.value + '"';
+ };
+ return Literal;
+ })();
+ exports.Return = Return = (function() {
+ __extends(Return, Base);
+ function Return(expr) {
+ if (expr && !expr.unwrap().isUndefined) {
+ this.expression = expr;
+ }
+ }
+ Return.prototype.children = ['expression'];
+ Return.prototype.isStatement = YES;
+ Return.prototype.makeReturn = THIS;
+ Return.prototype.jumps = THIS;
+ Return.prototype.compile = function(o, level) {
+ var expr, _ref2;
+ expr = (_ref2 = this.expression) != null ? _ref2.makeReturn() : void 0;
+ if (expr && !(expr instanceof Return)) {
+ return expr.compile(o, level);
+ } else {
+ return Return.__super__.compile.call(this, o, level);
+ }
+ };
+ Return.prototype.compileNode = function(o) {
+ return this.tab + ("return" + (this.expression ? ' ' + this.expression.compile(o, LEVEL_PAREN) : '') + ";");
+ };
+ return Return;
+ })();
+ exports.Value = Value = (function() {
+ __extends(Value, Base);
+ function Value(base, props, tag) {
+ if (!props && base instanceof Value) {
+ return base;
+ }
+ this.base = base;
+ this.properties = props || [];
+ if (tag) {
+ this[tag] = true;
+ }
+ return this;
+ }
+ Value.prototype.children = ['base', 'properties'];
+ Value.prototype.push = function(prop) {
+ this.properties.push(prop);
+ return this;
+ };
+ Value.prototype.hasProperties = function() {
+ return !!this.properties.length;
+ };
+ Value.prototype.isArray = function() {
+ return !this.properties.length && this.base instanceof Arr;
+ };
+ Value.prototype.isComplex = function() {
+ return this.hasProperties() || this.base.isComplex();
+ };
+ Value.prototype.isAssignable = function() {
+ return this.hasProperties() || this.base.isAssignable();
+ };
+ Value.prototype.isSimpleNumber = function() {
+ return this.base instanceof Literal && SIMPLENUM.test(this.base.value);
+ };
+ Value.prototype.isAtomic = function() {
+ var node, _i, _len, _ref2;
+ _ref2 = this.properties.concat(this.base);
+ for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
+ node = _ref2[_i];
+ if (node.soak || node instanceof Call) {
+ return false;
+ }
+ }
+ return true;
+ };
+ Value.prototype.isStatement = function(o) {
+ return !this.properties.length && this.base.isStatement(o);
+ };
+ Value.prototype.assigns = function(name) {
+ return !this.properties.length && this.base.assigns(name);
+ };
+ Value.prototype.jumps = function(o) {
+ return !this.properties.length && this.base.jumps(o);
+ };
+ Value.prototype.isObject = function(onlyGenerated) {
+ if (this.properties.length) {
+ return false;
+ }
+ return (this.base instanceof Obj) && (!onlyGenerated || this.base.generated);
+ };
+ Value.prototype.isSplice = function() {
+ return last(this.properties) instanceof Slice;
+ };
+ Value.prototype.makeReturn = function() {
+ if (this.properties.length) {
+ return Value.__super__.makeReturn.call(this);
+ } else {
+ return this.base.makeReturn();
+ }
+ };
+ Value.prototype.unwrap = function() {
+ if (this.properties.length) {
+ return this;
+ } else {
+ return this.base;
+ }
+ };
+ Value.prototype.cacheReference = function(o) {
+ var base, bref, name, nref;
+ name = last(this.properties);
+ if (this.properties.length < 2 && !this.base.isComplex() && !(name != null ? name.isComplex() : void 0)) {
+ return [this, this];
+ }
+ base = new Value(this.base, this.properties.slice(0, -1));
+ if (base.isComplex()) {
+ bref = new Literal(o.scope.freeVariable('base'));
+ base = new Value(new Parens(new Assign(bref, base)));
+ }
+ if (!name) {
+ return [base, bref];
+ }
+ if (name.isComplex()) {
+ nref = new Literal(o.scope.freeVariable('name'));
+ name = new Index(new Assign(nref, name.index));
+ nref = new Index(nref);
+ }
+ return [base.push(name), new Value(bref || base.base, [nref || name])];
+ };
+ Value.prototype.compileNode = function(o) {
+ var code, prop, props, _i, _len;
+ this.base.front = this.front;
+ props = this.properties;
+ code = this.base.compile(o, props.length ? LEVEL_ACCESS : null);
+ if (props[0] instanceof Access && this.isSimpleNumber()) {
+ code = "(" + code + ")";
+ }
+ for (_i = 0, _len = props.length; _i < _len; _i++) {
+ prop = props[_i];
+ code += prop.compile(o);
+ }
+ return code;
+ };
+ Value.prototype.unfoldSoak = function(o) {
+ var result;
+ if (this.unfoldedSoak != null) {
+ return this.unfoldedSoak;
+ }
+ result = __bind(function() {
+ var fst, i, ifn, prop, ref, snd, _len, _ref2;
+ if (ifn = this.base.unfoldSoak(o)) {
+ Array.prototype.push.apply(ifn.body.properties, this.properties);
+ return ifn;
+ }
+ _ref2 = this.properties;
+ for (i = 0, _len = _ref2.length; i < _len; i++) {
+ prop = _ref2[i];
+ if (prop.soak) {
+ prop.soak = false;
+ fst = new Value(this.base, this.properties.slice(0, i));
+ snd = new Value(this.base, this.properties.slice(i));
+ if (fst.isComplex()) {
+ ref = new Literal(o.scope.freeVariable('ref'));
+ fst = new Parens(new Assign(ref, fst));
+ snd.base = ref;
+ }
+ return new If(new Existence(fst), snd, {
+ soak: true
+ });
+ }
+ }
+ return null;
+ }, this)();
+ return this.unfoldedSoak = result || false;
+ };
+ return Value;
+ })();
+ exports.Comment = Comment = (function() {
+ __extends(Comment, Base);
+ function Comment(comment) {
+ this.comment = comment;
+ }
+ Comment.prototype.isStatement = YES;
+ Comment.prototype.makeReturn = THIS;
+ Comment.prototype.compileNode = function(o, level) {
+ var code;
+ code = '/*' + multident(this.comment, this.tab) + '*/';
+ if ((level || o.level) === LEVEL_TOP) {
+ code = o.indent + code;
+ }
+ return code;
+ };
+ return Comment;
+ })();
+ exports.Call = Call = (function() {
+ __extends(Call, Base);
+ function Call(variable, args, soak) {
+ this.args = args != null ? args : [];
+ this.soak = soak;
+ this.isNew = false;
+ this.isSuper = variable === 'super';
+ this.variable = this.isSuper ? null : variable;
+ }
+ Call.prototype.children = ['variable', 'args'];
+ Call.prototype.newInstance = function() {
+ var base;
+ base = this.variable.base || this.variable;
+ if (base instanceof Call) {
+ base.newInstance();
+ } else {
+ this.isNew = true;
+ }
+ return this;
+ };
+ Call.prototype.superReference = function(o) {
+ var method, name;
+ method = o.scope.method;
+ if (!method) {
+ throw SyntaxError('cannot call super outside of a function.');
+ }
+ name = method.name;
+ if (!name) {
+ throw SyntaxError('cannot call super on an anonymous function.');
+ }
+ if (method.klass) {
+ return "" + method.klass + ".__super__." + name;
+ } else {
+ return "" + name + ".__super__.constructor";
+ }
+ };
+ Call.prototype.unfoldSoak = function(o) {
+ var call, ifn, left, list, rite, _i, _len, _ref2, _ref3;
+ if (this.soak) {
+ if (this.variable) {
+ if (ifn = unfoldSoak(o, this, 'variable')) {
+ return ifn;
+ }
+ _ref2 = new Value(this.variable).cacheReference(o), left = _ref2[0], rite = _ref2[1];
+ } else {
+ left = new Literal(this.superReference(o));
+ rite = new Value(left);
+ }
+ rite = new Call(rite, this.args);
+ rite.isNew = this.isNew;
+ left = new Literal("typeof " + (left.compile(o)) + " === \"function\"");
+ return new If(left, new Value(rite), {
+ soak: true
+ });
+ }
+ call = this;
+ list = [];
+ while (true) {
+ if (call.variable instanceof Call) {
+ list.push(call);
+ call = call.variable;
+ continue;
+ }
+ if (!(call.variable instanceof Value)) {
+ break;
+ }
+ list.push(call);
+ if (!((call = call.variable.base) instanceof Call)) {
+ break;
+ }
+ }
+ _ref3 = list.reverse();
+ for (_i = 0, _len = _ref3.length; _i < _len; _i++) {
+ call = _ref3[_i];
+ if (ifn) {
+ if (call.variable instanceof Call) {
+ call.variable = ifn;
+ } else {
+ call.variable.base = ifn;
+ }
+ }
+ ifn = unfoldSoak(o, call, 'variable');
+ }
+ return ifn;
+ };
+ Call.prototype.filterImplicitObjects = function(list) {
+ var node, nodes, obj, prop, properties, _i, _j, _len, _len2, _ref2;
+ nodes = [];
+ for (_i = 0, _len = list.length; _i < _len; _i++) {
+ node = list[_i];
+ if (!((typeof node.isObject === "function" ? node.isObject() : void 0) && node.base.generated)) {
+ nodes.push(node);
+ continue;
+ }
+ obj = null;
+ _ref2 = node.base.properties;
+ for (_j = 0, _len2 = _ref2.length; _j < _len2; _j++) {
+ prop = _ref2[_j];
+ if (prop instanceof Assign) {
+ if (!obj) {
+ nodes.push(obj = new Obj(properties = [], true));
+ }
+ properties.push(prop);
+ } else {
+ nodes.push(prop);
+ obj = null;
+ }
+ }
+ }
+ return nodes;
+ };
+ Call.prototype.compileNode = function(o) {
+ var arg, args, code, _ref2;
+ if ((_ref2 = this.variable) != null) {
+ _ref2.front = this.front;
+ }
+ if (code = Splat.compileSplattedArray(o, this.args, true)) {
+ return this.compileSplat(o, code);
+ }
+ args = this.filterImplicitObjects(this.args);
+ args = ((function() {
+ var _i, _len, _results;
+ _results = [];
+ for (_i = 0, _len = args.length; _i < _len; _i++) {
+ arg = args[_i];
+ _results.push(arg.compile(o, LEVEL_LIST));
+ }
+ return _results;
+ })()).join(', ');
+ if (this.isSuper) {
+ return this.superReference(o) + (".call(this" + (args && ', ' + args) + ")");
+ } else {
+ return (this.isNew ? 'new ' : '') + this.variable.compile(o, LEVEL_ACCESS) + ("(" + args + ")");
+ }
+ };
+ Call.prototype.compileSuper = function(args, o) {
+ return "" + (this.superReference(o)) + ".call(this" + (args.length ? ', ' : '') + args + ")";
+ };
+ Call.prototype.compileSplat = function(o, splatArgs) {
+ var base, fun, idt, name, ref;
+ if (this.isSuper) {
+ return "" + (this.superReference(o)) + ".apply(this, " + splatArgs + ")";
+ }
+ if (this.isNew) {
+ idt = this.tab + TAB;
+ return "(function(func, args, ctor) {\n" + idt + "ctor.prototype = func.prototype;\n" + idt + "var child = new ctor, result = func.apply(child, args);\n" + idt + "return typeof result === \"object\" ? result : child;\n" + this.tab + "})(" + (this.variable.compile(o, LEVEL_LIST)) + ", " + splatArgs + ", function() {})";
+ }
+ base = new Value(this.variable);
+ if ((name = base.properties.pop()) && base.isComplex()) {
+ ref = o.scope.freeVariable('ref');
+ fun = "(" + ref + " = " + (base.compile(o, LEVEL_LIST)) + ")" + (name.compile(o));
+ } else {
+ fun = base.compile(o, LEVEL_ACCESS);
+ if (SIMPLENUM.test(fun)) {
+ fun = "(" + fun + ")";
+ }
+ if (name) {
+ ref = fun;
+ fun += name.compile(o);
+ } else {
+ ref = 'null';
+ }
+ }
+ return "" + fun + ".apply(" + ref + ", " + splatArgs + ")";
+ };
+ return Call;
+ })();
+ exports.Extends = Extends = (function() {
+ __extends(Extends, Base);
+ function Extends(child, parent) {
+ this.child = child;
+ this.parent = parent;
+ }
+ Extends.prototype.children = ['child', 'parent'];
+ Extends.prototype.compile = function(o) {
+ utility('hasProp');
+ return new Call(new Value(new Literal(utility('extends'))), [this.child, this.parent]).compile(o);
+ };
+ return Extends;
+ })();
+ exports.Access = Access = (function() {
+ __extends(Access, Base);
+ function Access(name, tag) {
+ this.name = name;
+ this.name.asKey = true;
+ this.proto = tag === 'proto' ? '.prototype' : '';
+ this.soak = tag === 'soak';
+ }
+ Access.prototype.children = ['name'];
+ Access.prototype.compile = function(o) {
+ var name;
+ name = this.name.compile(o);
+ return this.proto + (IS_STRING.test(name) ? "[" + name + "]" : "." + name);
+ };
+ Access.prototype.isComplex = NO;
+ return Access;
+ })();
+ exports.Index = Index = (function() {
+ __extends(Index, Base);
+ function Index(index) {
+ this.index = index;
+ }
+ Index.prototype.children = ['index'];
+ Index.prototype.compile = function(o) {
+ return (this.proto ? '.prototype' : '') + ("[" + (this.index.compile(o, LEVEL_PAREN)) + "]");
+ };
+ Index.prototype.isComplex = function() {
+ return this.index.isComplex();
+ };
+ return Index;
+ })();
+ exports.Range = Range = (function() {
+ __extends(Range, Base);
+ Range.prototype.children = ['from', 'to'];
+ function Range(from, to, tag) {
+ this.from = from;
+ this.to = to;
+ this.exclusive = tag === 'exclusive';
+ this.equals = this.exclusive ? '' : '=';
+ }
+ Range.prototype.compileVariables = function(o) {
+ var step, _ref2, _ref3, _ref4, _ref5;
+ o = merge(o, {
+ top: true
+ });
+ _ref2 = this.from.cache(o, LEVEL_LIST), this.from = _ref2[0], this.fromVar = _ref2[1];
+ _ref3 = this.to.cache(o, LEVEL_LIST), this.to = _ref3[0], this.toVar = _ref3[1];
+ if (step = del(o, 'step')) {
+ _ref4 = step.cache(o, LEVEL_LIST), this.step = _ref4[0], this.stepVar = _ref4[1];
+ }
+ _ref5 = [this.fromVar.match(SIMPLENUM), this.toVar.match(SIMPLENUM)], this.fromNum = _ref5[0], this.toNum = _ref5[1];
+ if (this.stepVar) {
+ return this.stepNum = this.stepVar.match(SIMPLENUM);
+ }
+ };
+ Range.prototype.compileNode = function(o) {
+ var cond, condPart, from, gt, idx, known, lt, stepPart, to, varPart, _ref2, _ref3;
+ if (!this.fromVar) {
+ this.compileVariables(o);
+ }
+ if (!o.index) {
+ return this.compileArray(o);
+ }
+ known = this.fromNum && this.toNum;
+ idx = del(o, 'index');
+ varPart = "" + idx + " = " + this.from;
+ if (this.to !== this.toVar) {
+ varPart += ", " + this.to;
+ }
+ if (this.step !== this.stepVar) {
+ varPart += ", " + this.step;
+ }
+ _ref2 = ["" + idx + " <" + this.equals, "" + idx + " >" + this.equals], lt = _ref2[0], gt = _ref2[1];
+ condPart = this.stepNum ? condPart = +this.stepNum > 0 ? "" + lt + " " + this.toVar : "" + gt + " " + this.toVar : known ? ((_ref3 = [+this.fromNum, +this.toNum], from = _ref3[0], to = _ref3[1], _ref3), condPart = from <= to ? "" + lt + " " + to : "" + gt + " " + to) : (cond = "" + this.fromVar + " <= " + this.toVar, condPart = "" + cond + " ? " + lt + " " + this.toVar + " : " + gt + " " + this.toVar);
+ stepPart = this.stepVar ? "" + idx + " += " + this.stepVar : known ? from <= to ? "" + idx + "++" : "" + idx + "--" : "" + cond + " ? " + idx + "++ : " + idx + "--";
+ return "" + varPart + "; " + condPart + "; " + stepPart;
+ };
+ Range.prototype.compileArray = function(o) {
+ var body, cond, i, idt, post, pre, range, result, vars, _i, _ref2, _ref3, _results;
+ if (this.fromNum && this.toNum && Math.abs(this.fromNum - this.toNum) <= 20) {
+ range = (function() {
+ _results = [];
+ for (var _i = _ref2 = +this.fromNum, _ref3 = +this.toNum; _ref2 <= _ref3 ? _i <= _ref3 : _i >= _ref3; _ref2 <= _ref3 ? _i++ : _i--){ _results.push(_i); }
+ return _results;
+ }).apply(this, arguments);
+ if (this.exclusive) {
+ range.pop();
+ }
+ return "[" + (range.join(', ')) + "]";
+ }
+ idt = this.tab + TAB;
+ i = o.scope.freeVariable('i');
+ result = o.scope.freeVariable('results');
+ pre = "\n" + idt + result + " = [];";
+ if (this.fromNum && this.toNum) {
+ o.index = i;
+ body = this.compileNode(o);
+ } else {
+ vars = ("" + i + " = " + this.from) + (this.to !== this.toVar ? ", " + this.to : '');
+ cond = "" + this.fromVar + " <= " + this.toVar;
+ body = "var " + vars + "; " + cond + " ? " + i + " <" + this.equals + " " + this.toVar + " : " + i + " >" + this.equals + " " + this.toVar + "; " + cond + " ? " + i + "++ : " + i + "--";
+ }
+ post = "{ " + result + ".push(" + i + "); }\n" + idt + "return " + result + ";\n" + o.indent;
+ return "(function() {" + pre + "\n" + idt + "for (" + body + ")" + post + "}).apply(this, arguments)";
+ };
+ return Range;
+ })();
+ exports.Slice = Slice = (function() {
+ __extends(Slice, Base);
+ Slice.prototype.children = ['range'];
+ function Slice(range) {
+ this.range = range;
+ Slice.__super__.constructor.call(this);
+ }
+ Slice.prototype.compileNode = function(o) {
+ var compiled, from, fromStr, to, toStr, _ref2;
+ _ref2 = this.range, to = _ref2.to, from = _ref2.from;
+ fromStr = from && from.compile(o, LEVEL_PAREN) || '0';
+ compiled = to && to.compile(o, LEVEL_PAREN);
+ if (to && !(!this.range.exclusive && +compiled === -1)) {
+ toStr = ', ' + (this.range.exclusive ? compiled : SIMPLENUM.test(compiled) ? (+compiled + 1).toString() : "(" + compiled + " + 1) || 9e9");
+ }
+ return ".slice(" + fromStr + (toStr || '') + ")";
+ };
+ return Slice;
+ })();
+ exports.Obj = Obj = (function() {
+ __extends(Obj, Base);
+ function Obj(props, generated) {
+ this.generated = generated != null ? generated : false;
+ this.objects = this.properties = props || [];
+ }
+ Obj.prototype.children = ['properties'];
+ Obj.prototype.compileNode = function(o) {
+ var i, idt, indent, join, lastNoncom, node, obj, prop, props, _i, _len;
+ props = this.properties;
+ if (!props.length) {
+ if (this.front) {
+ return '({})';
+ } else {
+ return '{}';
+ }
+ }
+ if (this.generated) {
+ for (_i = 0, _len = props.length; _i < _len; _i++) {
+ node = props[_i];
+ if (node instanceof Value) {
+ throw new Error('cannot have an implicit value in an implicit object');
+ }
+ }
+ }
+ idt = o.indent += TAB;
+ lastNoncom = this.lastNonComment(this.properties);
+ props = (function() {
+ var _len2, _results;
+ _results = [];
+ for (i = 0, _len2 = props.length; i < _len2; i++) {
+ prop = props[i];
+ join = i === props.length - 1 ? '' : prop === lastNoncom || prop instanceof Comment ? '\n' : ',\n';
+ indent = prop instanceof Comment ? '' : idt;
+ if (prop instanceof Value && prop["this"]) {
+ prop = new Assign(prop.properties[0].name, prop, 'object');
+ }
+ if (!(prop instanceof Comment)) {
+ if (!(prop instanceof Assign)) {
+ prop = new Assign(prop, prop, 'object');
+ }
+ (prop.variable.base || prop.variable).asKey = true;
+ }
+ _results.push(indent + prop.compile(o, LEVEL_TOP) + join);
+ }
+ return _results;
+ })();
+ props = props.join('');
+ obj = "{" + (props && '\n' + props + '\n' + this.tab) + "}";
+ if (this.front) {
+ return "(" + obj + ")";
+ } else {
+ return obj;
+ }
+ };
+ Obj.prototype.assigns = function(name) {
+ var prop, _i, _len, _ref2;
+ _ref2 = this.properties;
+ for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
+ prop = _ref2[_i];
+ if (prop.assigns(name)) {
+ return true;
+ }
+ }
+ return false;
+ };
+ return Obj;
+ })();
+ exports.Arr = Arr = (function() {
+ __extends(Arr, Base);
+ function Arr(objs) {
+ this.objects = objs || [];
+ }
+ Arr.prototype.children = ['objects'];
+ Arr.prototype.filterImplicitObjects = Call.prototype.filterImplicitObjects;
+ Arr.prototype.compileNode = function(o) {
+ var code, obj, objs;
+ if (!this.objects.length) {
+ return '[]';
+ }
+ o.indent += TAB;
+ objs = this.filterImplicitObjects(this.objects);
+ if (code = Splat.compileSplattedArray(o, objs)) {
+ return code;
+ }
+ code = ((function() {
+ var _i, _len, _results;
+ _results = [];
+ for (_i = 0, _len = objs.length; _i < _len; _i++) {
+ obj = objs[_i];
+ _results.push(obj.compile(o, LEVEL_LIST));
+ }
+ return _results;
+ })()).join(', ');
+ if (code.indexOf('\n') >= 0) {
+ return "[\n" + o.indent + code + "\n" + this.tab + "]";
+ } else {
+ return "[" + code + "]";
+ }
+ };
+ Arr.prototype.assigns = function(name) {
+ var obj, _i, _len, _ref2;
+ _ref2 = this.objects;
+ for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
+ obj = _ref2[_i];
+ if (obj.assigns(name)) {
+ return true;
+ }
+ }
+ return false;
+ };
+ return Arr;
+ })();
+ exports.Class = Class = (function() {
+ __extends(Class, Base);
+ function Class(variable, parent, body) {
+ this.variable = variable;
+ this.parent = parent;
+ this.body = body != null ? body : new Block;
+ this.boundFuncs = [];
+ this.body.classBody = true;
+ }
+ Class.prototype.children = ['variable', 'parent', 'body'];
+ Class.prototype.determineName = function() {
+ var decl, tail;
+ if (!this.variable) {
+ return null;
+ }
+ decl = (tail = last(this.variable.properties)) ? tail instanceof Access && tail.name.value : this.variable.base.value;
+ return decl && (decl = IDENTIFIER.test(decl) && decl);
+ };
+ Class.prototype.setContext = function(name) {
+ return this.body.traverseChildren(false, function(node) {
+ if (node.classBody) {
+ return false;
+ }
+ if (node instanceof Literal && node.value === 'this') {
+ return node.value = name;
+ } else if (node instanceof Code) {
+ node.klass = name;
+ if (node.bound) {
+ return node.context = name;
+ }
+ }
+ });
+ };
+ Class.prototype.addBoundFunctions = function(o) {
+ var bname, bvar, _i, _len, _ref2, _results;
+ if (this.boundFuncs.length) {
+ _ref2 = this.boundFuncs;
+ _results = [];
+ for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
+ bvar = _ref2[_i];
+ bname = bvar.compile(o);
+ _results.push(this.ctor.body.unshift(new Literal("this." + bname + " = " + (utility('bind')) + "(this." + bname + ", this)")));
+ }
+ return _results;
+ }
+ };
+ Class.prototype.addProperties = function(node, name, o) {
+ var assign, base, exprs, func, props;
+ props = node.base.properties.slice(0);
+ exprs = (function() {
+ var _results;
+ _results = [];
+ while (assign = props.shift()) {
+ if (assign instanceof Assign) {
+ base = assign.variable.base;
+ delete assign.context;
+ func = assign.value;
+ if (base.value === 'constructor') {
+ if (this.ctor) {
+ throw new Error('cannot define more than one constructor in a class');
+ }
+ if (func.bound) {
+ throw new Error('cannot define a constructor as a bound function');
+ }
+ if (func instanceof Code) {
+ assign = this.ctor = func;
+ } else {
+ this.externalCtor = o.scope.freeVariable('class');
+ assign = new Assign(new Literal(this.externalCtor), func);
+ }
+ } else {
+ if (!assign.variable["this"]) {
+ assign.variable = new Value(new Literal(name), [new Access(base, 'proto')]);
+ }
+ if (func instanceof Code && func.bound) {
+ this.boundFuncs.push(base);
+ func.bound = false;
+ }
+ }
+ }
+ _results.push(assign);
+ }
+ return _results;
+ }).call(this);
+ return compact(exprs);
+ };
+ Class.prototype.walkBody = function(name, o) {
+ return this.traverseChildren(false, __bind(function(child) {
+ var exps, i, node, _len, _ref2;
+ if (child instanceof Class) {
+ return false;
+ }
+ if (child instanceof Block) {
+ _ref2 = exps = child.expressions;
+ for (i = 0, _len = _ref2.length; i < _len; i++) {
+ node = _ref2[i];
+ if (node instanceof Value && node.isObject(true)) {
+ exps[i] = this.addProperties(node, name, o);
+ }
+ }
+ return child.expressions = exps = flatten(exps);
+ }
+ }, this));
+ };
+ Class.prototype.ensureConstructor = function(name) {
+ if (!this.ctor) {
+ this.ctor = new Code;
+ if (this.parent) {
+ this.ctor.body.push(new Literal("" + name + ".__super__.constructor.apply(this, arguments)"));
+ }
+ if (this.externalCtor) {
+ this.ctor.body.push(new Literal("" + this.externalCtor + ".apply(this, arguments)"));
+ }
+ this.body.expressions.unshift(this.ctor);
+ }
+ this.ctor.ctor = this.ctor.name = name;
+ this.ctor.klass = null;
+ return this.ctor.noReturn = true;
+ };
+ Class.prototype.compileNode = function(o) {
+ var decl, klass, lname, name;
+ decl = this.determineName();
+ name = decl || this.name || '_Class';
+ lname = new Literal(name);
+ this.setContext(name);
+ this.walkBody(name, o);
+ this.ensureConstructor(name);
+ if (this.parent) {
+ this.body.expressions.unshift(new Extends(lname, this.parent));
+ }
+ if (!(this.ctor instanceof Code)) {
+ this.body.expressions.unshift(this.ctor);
+ }
+ this.body.expressions.push(lname);
+ this.addBoundFunctions(o);
+ klass = new Parens(Closure.wrap(this.body), true);
+ if (this.variable) {
+ klass = new Assign(this.variable, klass);
+ }
+ return klass.compile(o);
+ };
+ return Class;
+ })();
+ exports.Assign = Assign = (function() {
+ __extends(Assign, Base);
+ function Assign(variable, value, context, options) {
+ this.variable = variable;
+ this.value = value;
+ this.context = context;
+ this.param = options && options.param;
+ }
+ Assign.prototype.children = ['variable', 'value'];
+ Assign.prototype.assigns = function(name) {
+ return this[this.context === 'object' ? 'value' : 'variable'].assigns(name);
+ };
+ Assign.prototype.unfoldSoak = function(o) {
+ return unfoldSoak(o, this, 'variable');
+ };
+ Assign.prototype.compileNode = function(o) {
+ var isValue, match, name, val, _ref2;
+ if (isValue = this.variable instanceof Value) {
+ if (this.variable.isArray() || this.variable.isObject()) {
+ return this.compilePatternMatch(o);
+ }
+ if (this.variable.isSplice()) {
+ return this.compileSplice(o);
+ }
+ if ((_ref2 = this.context) === '||=' || _ref2 === '&&=' || _ref2 === '?=') {
+ return this.compileConditional(o);
+ }
+ }
+ name = this.variable.compile(o, LEVEL_LIST);
+ if (!(this.context || this.variable.isAssignable())) {
+ throw SyntaxError("\"" + (this.variable.compile(o)) + "\" cannot be assigned.");
+ }
+ if (!(this.context || isValue && (this.variable.namespaced || this.variable.hasProperties()))) {
+ if (this.param) {
+ o.scope.add(name, 'var');
+ } else {
+ o.scope.find(name);
+ }
+ }
+ if (this.value instanceof Code && (match = METHOD_DEF.exec(name))) {
+ this.value.name = match[2];
+ if (match[1]) {
+ this.value.klass = match[1];
+ }
+ }
+ val = this.value.compile(o, LEVEL_LIST);
+ if (this.context === 'object') {
+ return "" + name + ": " + val;
+ }
+ val = name + (" " + (this.context || '=') + " ") + val;
+ if (o.level <= LEVEL_LIST) {
+ return val;
+ } else {
+ return "(" + val + ")";
+ }
+ };
+ Assign.prototype.compilePatternMatch = function(o) {
+ var acc, assigns, code, i, idx, isObject, ivar, obj, objects, olen, ref, rest, splat, top, val, value, vvar, _len, _ref2, _ref3, _ref4, _ref5;
+ top = o.level === LEVEL_TOP;
+ value = this.value;
+ objects = this.variable.base.objects;
+ if (!(olen = objects.length)) {
+ code = value.compile(o);
+ if (o.level >= LEVEL_OP) {
+ return "(" + code + ")";
+ } else {
+ return code;
+ }
+ }
+ isObject = this.variable.isObject();
+ if (top && olen === 1 && !((obj = objects[0]) instanceof Splat)) {
+ if (obj instanceof Assign) {
+ _ref2 = obj, idx = _ref2.variable.base, obj = _ref2.value;
+ } else {
+ if (obj.base instanceof Parens) {
+ _ref3 = new Value(obj.unwrapAll()).cacheReference(o), obj = _ref3[0], idx = _ref3[1];
+ } else {
+ idx = isObject ? obj["this"] ? obj.properties[0].name : obj : new Literal(0);
+ }
+ }
+ acc = IDENTIFIER.test(idx.unwrap().value || 0);
+ value = new Value(value);
+ value.properties.push(new (acc ? Access : Index)(idx));
+ return new Assign(obj, value, null, {
+ param: this.param
+ }).compile(o, LEVEL_TOP);
+ }
+ vvar = value.compile(o, LEVEL_LIST);
+ assigns = [];
+ splat = false;
+ if (!IDENTIFIER.test(vvar) || this.variable.assigns(vvar)) {
+ assigns.push("" + (ref = o.scope.freeVariable('ref')) + " = " + vvar);
+ vvar = ref;
+ }
+ for (i = 0, _len = objects.length; i < _len; i++) {
+ obj = objects[i];
+ idx = i;
+ if (isObject) {
+ if (obj instanceof Assign) {
+ _ref4 = obj, idx = _ref4.variable.base, obj = _ref4.value;
+ } else {
+ if (obj.base instanceof Parens) {
+ _ref5 = new Value(obj.unwrapAll()).cacheReference(o), obj = _ref5[0], idx = _ref5[1];
+ } else {
+ idx = obj["this"] ? obj.properties[0].name : obj;
+ }
+ }
+ }
+ if (!splat && obj instanceof Splat) {
+ val = "" + olen + " <= " + vvar + ".length ? " + (utility('slice')) + ".call(" + vvar + ", " + i;
+ if (rest = olen - i - 1) {
+ ivar = o.scope.freeVariable('i');
+ val += ", " + ivar + " = " + vvar + ".length - " + rest + ") : (" + ivar + " = " + i + ", [])";
+ } else {
+ val += ") : []";
+ }
+ val = new Literal(val);
+ splat = "" + ivar + "++";
+ } else {
+ if (obj instanceof Splat) {
+ obj = obj.name.compile(o);
+ throw SyntaxError("multiple splats are disallowed in an assignment: " + obj + " ...");
+ }
+ if (typeof idx === 'number') {
+ idx = new Literal(splat || idx);
+ acc = false;
+ } else {
+ acc = isObject && IDENTIFIER.test(idx.unwrap().value || 0);
+ }
+ val = new Value(new Literal(vvar), [new (acc ? Access : Index)(idx)]);
+ }
+ assigns.push(new Assign(obj, val, null, {
+ param: this.param
+ }).compile(o, LEVEL_TOP));
+ }
+ if (!top) {
+ assigns.push(vvar);
+ }
+ code = assigns.join(', ');
+ if (o.level < LEVEL_LIST) {
+ return code;
+ } else {
+ return "(" + code + ")";
+ }
+ };
+ Assign.prototype.compileConditional = function(o) {
+ var left, rite, _ref2;
+ _ref2 = this.variable.cacheReference(o), left = _ref2[0], rite = _ref2[1];
+ if (__indexOf.call(this.context, "?") >= 0) {
+ o.isExistentialEquals = true;
+ }
+ return new Op(this.context.slice(0, -1), left, new Assign(rite, this.value, '=')).compile(o);
+ };
+ Assign.prototype.compileSplice = function(o) {
+ var code, exclusive, from, fromDecl, fromRef, name, to, valDef, valRef, _ref2, _ref3, _ref4;
+ _ref2 = this.variable.properties.pop().range, from = _ref2.from, to = _ref2.to, exclusive = _ref2.exclusive;
+ name = this.variable.compile(o);
+ _ref3 = (from != null ? from.cache(o, LEVEL_OP) : void 0) || ['0', '0'], fromDecl = _ref3[0], fromRef = _ref3[1];
+ if (to) {
+ if ((from != null ? from.isSimpleNumber() : void 0) && to.isSimpleNumber()) {
+ to = +to.compile(o) - +fromRef;
+ if (!exclusive) {
+ to += 1;
+ }
+ } else {
+ to = to.compile(o) + ' - ' + fromRef;
+ if (!exclusive) {
+ to += ' + 1';
+ }
+ }
+ } else {
+ to = "9e9";
+ }
+ _ref4 = this.value.cache(o, LEVEL_LIST), valDef = _ref4[0], valRef = _ref4[1];
+ code = "[].splice.apply(" + name + ", [" + fromDecl + ", " + to + "].concat(" + valDef + ")), " + valRef;
+ if (o.level > LEVEL_TOP) {
+ return "(" + code + ")";
+ } else {
+ return code;
+ }
+ };
+ return Assign;
+ })();
+ exports.Code = Code = (function() {
+ __extends(Code, Base);
+ function Code(params, body, tag) {
+ this.params = params || [];
+ this.body = body || new Block;
+ this.bound = tag === 'boundfunc';
+ if (this.bound) {
+ this.context = 'this';
+ }
+ }
+ Code.prototype.children = ['params', 'body'];
+ Code.prototype.isStatement = function() {
+ return !!this.ctor;
+ };
+ Code.prototype.jumps = NO;
+ Code.prototype.compileNode = function(o) {
+ var code, exprs, i, idt, lit, p, param, ref, splats, v, val, vars, wasEmpty, _i, _j, _k, _len, _len2, _len3, _len4, _ref2, _ref3, _ref4, _ref5;
+ o.scope = new Scope(o.scope, this.body, this);
+ o.scope.shared = del(o, 'sharedScope');
+ o.indent += TAB;
+ delete o.bare;
+ vars = [];
+ exprs = [];
+ _ref2 = this.params;
+ for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
+ param = _ref2[_i];
+ if (param.splat) {
+ _ref3 = this.params;
+ for (_j = 0, _len2 = _ref3.length; _j < _len2; _j++) {
+ p = _ref3[_j];
+ if (p.name.value) {
+ o.scope.add(p.name.value, 'var', true);
+ }
+ }
+ splats = new Assign(new Value(new Arr((function() {
+ var _k, _len3, _ref4, _results;
+ _ref4 = this.params;
+ _results = [];
+ for (_k = 0, _len3 = _ref4.length; _k < _len3; _k++) {
+ p = _ref4[_k];
+ _results.push(p.asReference(o));
+ }
+ return _results;
+ }).call(this))), new Value(new Literal('arguments')));
+ break;
+ }
+ }
+ _ref4 = this.params;
+ for (_k = 0, _len3 = _ref4.length; _k < _len3; _k++) {
+ param = _ref4[_k];
+ if (param.isComplex()) {
+ val = ref = param.asReference(o);
+ if (param.value) {
+ val = new Op('?', ref, param.value);
+ }
+ exprs.push(new Assign(new Value(param.name), val, '=', {
+ param: true
+ }));
+ } else {
+ ref = param;
+ if (param.value) {
+ lit = new Literal(ref.name.value + ' == null');
+ val = new Assign(new Value(param.name), param.value, '=');
+ exprs.push(new If(lit, val));
+ }
+ }
+ if (!splats) {
+ vars.push(ref);
+ }
+ }
+ wasEmpty = this.body.isEmpty();
+ if (splats) {
+ exprs.unshift(splats);
+ }
+ if (exprs.length) {
+ (_ref5 = this.body.expressions).unshift.apply(_ref5, exprs);
+ }
+ if (!splats) {
+ for (i = 0, _len4 = vars.length; i < _len4; i++) {
+ v = vars[i];
+ o.scope.parameter(vars[i] = v.compile(o));
+ }
+ }
+ if (!(wasEmpty || this.noReturn)) {
+ this.body.makeReturn();
+ }
+ idt = o.indent;
+ code = 'function';
+ if (this.ctor) {
+ code += ' ' + this.name;
+ }
+ code += '(' + vars.join(', ') + ') {';
+ if (!this.body.isEmpty()) {
+ code += "\n" + (this.body.compileWithDeclarations(o)) + "\n" + this.tab;
+ }
+ code += '}';
+ if (this.ctor) {
+ return this.tab + code;
+ }
+ if (this.bound) {
+ return utility('bind') + ("(" + code + ", " + this.context + ")");
+ }
+ if (this.front || (o.level >= LEVEL_ACCESS)) {
+ return "(" + code + ")";
+ } else {
+ return code;
+ }
+ };
+ Code.prototype.traverseChildren = function(crossScope, func) {
+ if (crossScope) {
+ return Code.__super__.traverseChildren.call(this, crossScope, func);
+ }
+ };
+ return Code;
+ })();
+ exports.Param = Param = (function() {
+ __extends(Param, Base);
+ function Param(name, value, splat) {
+ this.name = name;
+ this.value = value;
+ this.splat = splat;
+ }
+ Param.prototype.children = ['name', 'value'];
+ Param.prototype.compile = function(o) {
+ return this.name.compile(o, LEVEL_LIST);
+ };
+ Param.prototype.asReference = function(o) {
+ var node;
+ if (this.reference) {
+ return this.reference;
+ }
+ node = this.name;
+ if (node["this"]) {
+ node = node.properties[0].name;
+ if (node.value.reserved) {
+ node = new Literal('_' + node.value);
+ }
+ } else if (node.isComplex()) {
+ node = new Literal(o.scope.freeVariable('arg'));
+ }
+ node = new Value(node);
+ if (this.splat) {
+ node = new Splat(node);
+ }
+ return this.reference = node;
+ };
+ Param.prototype.isComplex = function() {
+ return this.name.isComplex();
+ };
+ return Param;
+ })();
+ exports.Splat = Splat = (function() {
+ __extends(Splat, Base);
+ Splat.prototype.children = ['name'];
+ Splat.prototype.isAssignable = YES;
+ function Splat(name) {
+ this.name = name.compile ? name : new Literal(name);
+ }
+ Splat.prototype.assigns = function(name) {
+ return this.name.assigns(name);
+ };
+ Splat.prototype.compile = function(o) {
+ if (this.index != null) {
+ return this.compileParam(o);
+ } else {
+ return this.name.compile(o);
+ }
+ };
+ Splat.compileSplattedArray = function(o, list, apply) {
+ var args, base, code, i, index, node, _len;
+ index = -1;
+ while ((node = list[++index]) && !(node instanceof Splat)) {
+ continue;
+ }
+ if (index >= list.length) {
+ return '';
+ }
+ if (list.length === 1) {
+ code = list[0].compile(o, LEVEL_LIST);
+ if (apply) {
+ return code;
+ }
+ return "" + (utility('slice')) + ".call(" + code + ")";
+ }
+ args = list.slice(index);
+ for (i = 0, _len = args.length; i < _len; i++) {
+ node = args[i];
+ code = node.compile(o, LEVEL_LIST);
+ args[i] = node instanceof Splat ? "" + (utility('slice')) + ".call(" + code + ")" : "[" + code + "]";
+ }
+ if (index === 0) {
+ return args[0] + (".concat(" + (args.slice(1).join(', ')) + ")");
+ }
+ base = (function() {
+ var _i, _len2, _ref2, _results;
+ _ref2 = list.slice(0, index);
+ _results = [];
+ for (_i = 0, _len2 = _ref2.length; _i < _len2; _i++) {
+ node = _ref2[_i];
+ _results.push(node.compile(o, LEVEL_LIST));
+ }
+ return _results;
+ })();
+ return "[" + (base.join(', ')) + "].concat(" + (args.join(', ')) + ")";
+ };
+ return Splat;
+ })();
+ exports.While = While = (function() {
+ __extends(While, Base);
+ function While(condition, options) {
+ this.condition = (options != null ? options.invert : void 0) ? condition.invert() : condition;
+ this.guard = options != null ? options.guard : void 0;
+ }
+ While.prototype.children = ['condition', 'guard', 'body'];
+ While.prototype.isStatement = YES;
+ While.prototype.makeReturn = function() {
+ this.returns = true;
+ return this;
+ };
+ While.prototype.addBody = function(body) {
+ this.body = body;
+ return this;
+ };
+ While.prototype.jumps = function() {
+ var expressions, node, _i, _len;
+ expressions = this.body.expressions;
+ if (!expressions.length) {
+ return false;
+ }
+ for (_i = 0, _len = expressions.length; _i < _len; _i++) {
+ node = expressions[_i];
+ if (node.jumps({
+ loop: true
+ })) {
+ return node;
+ }
+ }
+ return false;
+ };
+ While.prototype.compileNode = function(o) {
+ var body, code, rvar, set;
+ o.indent += TAB;
+ set = '';
+ body = this.body;
+ if (body.isEmpty()) {
+ body = '';
+ } else {
+ if (o.level > LEVEL_TOP || this.returns) {
+ rvar = o.scope.freeVariable('results');
+ set = "" + this.tab + rvar + " = [];\n";
+ if (body) {
+ body = Push.wrap(rvar, body);
+ }
+ }
+ if (this.guard) {
+ body = Block.wrap([new If(this.guard, body)]);
+ }
+ body = "\n" + (body.compile(o, LEVEL_TOP)) + "\n" + this.tab;
+ }
+ code = set + this.tab + ("while (" + (this.condition.compile(o, LEVEL_PAREN)) + ") {" + body + "}");
+ if (this.returns) {
+ code += "\n" + this.tab + "return " + rvar + ";";
+ }
+ return code;
+ };
+ return While;
+ })();
+ exports.Op = Op = (function() {
+ var CONVERSIONS, INVERSIONS;
+ __extends(Op, Base);
+ function Op(op, first, second, flip) {
+ var call;
+ if (op === 'in') {
+ return new In(first, second);
+ }
+ if (op === 'do') {
+ call = new Call(first, first.params || []);
+ call["do"] = true;
+ return call;
+ }
+ if (op === 'new') {
+ if (first instanceof Call && !first["do"]) {
+ return first.newInstance();
+ }
+ if (first instanceof Code && first.bound || first["do"]) {
+ first = new Parens(first);
+ }
+ }
+ this.operator = CONVERSIONS[op] || op;
+ this.first = first;
+ this.second = second;
+ this.flip = !!flip;
+ return this;
+ }
+ CONVERSIONS = {
+ '==': '===',
+ '!=': '!==',
+ 'of': 'in'
+ };
+ INVERSIONS = {
+ '!==': '===',
+ '===': '!=='
+ };
+ Op.prototype.children = ['first', 'second'];
+ Op.prototype.isSimpleNumber = NO;
+ Op.prototype.isUnary = function() {
+ return !this.second;
+ };
+ Op.prototype.isComplex = function() {
+ var _ref2;
+ return !(this.isUnary() && ((_ref2 = this.operator) === '+' || _ref2 === '-')) || this.first.isComplex();
+ };
+ Op.prototype.isChainable = function() {
+ var _ref2;
+ return (_ref2 = this.operator) === '<' || _ref2 === '>' || _ref2 === '>=' || _ref2 === '<=' || _ref2 === '===' || _ref2 === '!==';
+ };
+ Op.prototype.invert = function() {
+ var allInvertable, curr, fst, op, _ref2;
+ if (this.isChainable() && this.first.isChainable()) {
+ allInvertable = true;
+ curr = this;
+ while (curr && curr.operator) {
+ allInvertable && (allInvertable = curr.operator in INVERSIONS);
+ curr = curr.first;
+ }
+ if (!allInvertable) {
+ return new Parens(this).invert();
+ }
+ curr = this;
+ while (curr && curr.operator) {
+ curr.invert = !curr.invert;
+ curr.operator = INVERSIONS[curr.operator];
+ curr = curr.first;
+ }
+ return this;
+ } else if (op = INVERSIONS[this.operator]) {
+ this.operator = op;
+ if (this.first.unwrap() instanceof Op) {
+ this.first.invert();
+ }
+ return this;
+ } else if (this.second) {
+ return new Parens(this).invert();
+ } else if (this.operator === '!' && (fst = this.first.unwrap()) instanceof Op && ((_ref2 = fst.operator) === '!' || _ref2 === 'in' || _ref2 === 'instanceof')) {
+ return fst;
+ } else {
+ return new Op('!', this);
+ }
+ };
+ Op.prototype.unfoldSoak = function(o) {
+ var _ref2;
+ return ((_ref2 = this.operator) === '++' || _ref2 === '--' || _ref2 === 'delete') && unfoldSoak(o, this, 'first');
+ };
+ Op.prototype.compileNode = function(o) {
+ var code;
+ if (this.isUnary()) {
+ return this.compileUnary(o);
+ }
+ if (this.isChainable() && this.first.isChainable()) {
+ return this.compileChain(o);
+ }
+ if (this.operator === '?') {
+ return this.compileExistence(o);
+ }
+ this.first.front = this.front;
+ code = this.first.compile(o, LEVEL_OP) + ' ' + this.operator + ' ' + this.second.compile(o, LEVEL_OP);
+ if (o.level <= LEVEL_OP) {
+ return code;
+ } else {
+ return "(" + code + ")";
+ }
+ };
+ Op.prototype.compileChain = function(o) {
+ var code, fst, shared, _ref2;
+ _ref2 = this.first.second.cache(o), this.first.second = _ref2[0], shared = _ref2[1];
+ fst = this.first.compile(o, LEVEL_OP);
+ code = "" + fst + " " + (this.invert ? '&&' : '||') + " " + (shared.compile(o)) + " " + this.operator + " " + (this.second.compile(o, LEVEL_OP));
+ return "(" + code + ")";
+ };
+ Op.prototype.compileExistence = function(o) {
+ var fst, ref;
+ if (this.first.isComplex()) {
+ ref = new Literal(o.scope.freeVariable('ref'));
+ fst = new Parens(new Assign(ref, this.first));
+ } else {
+ fst = this.first;
+ ref = fst;
+ }
+ return new If(new Existence(fst), ref, {
+ type: 'if'
+ }).addElse(this.second).compile(o);
+ };
+ Op.prototype.compileUnary = function(o) {
+ var op, parts;
+ parts = [op = this.operator];
+ if ((op === 'new' || op === 'typeof' || op === 'delete') || (op === '+' || op === '-') && this.first instanceof Op && this.first.operator === op) {
+ parts.push(' ');
+ }
+ if (op === 'new' && this.first.isStatement(o)) {
+ this.first = new Parens(this.first);
+ }
+ parts.push(this.first.compile(o, LEVEL_OP));
+ if (this.flip) {
+ parts.reverse();
+ }
+ return parts.join('');
+ };
+ Op.prototype.toString = function(idt) {
+ return Op.__super__.toString.call(this, idt, this.constructor.name + ' ' + this.operator);
+ };
+ return Op;
+ })();
+ exports.In = In = (function() {
+ __extends(In, Base);
+ function In(object, array) {
+ this.object = object;
+ this.array = array;
+ }
+ In.prototype.children = ['object', 'array'];
+ In.prototype.invert = NEGATE;
+ In.prototype.compileNode = function(o) {
+ var hasSplat, obj, _i, _len, _ref2;
+ if (this.array instanceof Value && this.array.isArray()) {
+ _ref2 = this.array.base.objects;
+ for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
+ obj = _ref2[_i];
+ if (obj instanceof Splat) {
+ hasSplat = true;
+ break;
+ }
+ }
+ if (!hasSplat) {
+ return this.compileOrTest(o);
+ }
+ }
+ return this.compileLoopTest(o);
+ };
+ In.prototype.compileOrTest = function(o) {
+ var cmp, cnj, i, item, ref, sub, tests, _ref2, _ref3;
+ _ref2 = this.object.cache(o, LEVEL_OP), sub = _ref2[0], ref = _ref2[1];
+ _ref3 = this.negated ? [' !== ', ' && '] : [' === ', ' || '], cmp = _ref3[0], cnj = _ref3[1];
+ tests = (function() {
+ var _len, _ref4, _results;
+ _ref4 = this.array.base.objects;
+ _results = [];
+ for (i = 0, _len = _ref4.length; i < _len; i++) {
+ item = _ref4[i];
+ _results.push((i ? ref : sub) + cmp + item.compile(o, LEVEL_OP));
+ }
+ return _results;
+ }).call(this);
+ if (tests.length === 0) {
+ return 'false';
+ }
+ tests = tests.join(cnj);
+ if (o.level < LEVEL_OP) {
+ return tests;
+ } else {
+ return "(" + tests + ")";
+ }
+ };
+ In.prototype.compileLoopTest = function(o) {
+ var code, ref, sub, _ref2;
+ _ref2 = this.object.cache(o, LEVEL_LIST), sub = _ref2[0], ref = _ref2[1];
+ code = utility('indexOf') + (".call(" + (this.array.compile(o, LEVEL_LIST)) + ", " + ref + ") ") + (this.negated ? '< 0' : '>= 0');
+ if (sub === ref) {
+ return code;
+ }
+ code = sub + ', ' + code;
+ if (o.level < LEVEL_LIST) {
+ return code;
+ } else {
+ return "(" + code + ")";
+ }
+ };
+ In.prototype.toString = function(idt) {
+ return In.__super__.toString.call(this, idt, this.constructor.name + (this.negated ? '!' : ''));
+ };
+ return In;
+ })();
+ exports.Try = Try = (function() {
+ __extends(Try, Base);
+ function Try(attempt, error, recovery, ensure) {
+ this.attempt = attempt;
+ this.error = error;
+ this.recovery = recovery;
+ this.ensure = ensure;
+ }
+ Try.prototype.children = ['attempt', 'recovery', 'ensure'];
+ Try.prototype.isStatement = YES;
+ Try.prototype.jumps = function(o) {
+ var _ref2;
+ return this.attempt.jumps(o) || ((_ref2 = this.recovery) != null ? _ref2.jumps(o) : void 0);
+ };
+ Try.prototype.makeReturn = function() {
+ if (this.attempt) {
+ this.attempt = this.attempt.makeReturn();
+ }
+ if (this.recovery) {
+ this.recovery = this.recovery.makeReturn();
+ }
+ return this;
+ };
+ Try.prototype.compileNode = function(o) {
+ var catchPart, errorPart;
+ o.indent += TAB;
+ errorPart = this.error ? " (" + (this.error.compile(o)) + ") " : ' ';
+ catchPart = this.recovery ? " catch" + errorPart + "{\n" + (this.recovery.compile(o, LEVEL_TOP)) + "\n" + this.tab + "}" : !(this.ensure || this.recovery) ? ' catch (_e) {}' : void 0;
+ return ("" + this.tab + "try {\n" + (this.attempt.compile(o, LEVEL_TOP)) + "\n" + this.tab + "}" + (catchPart || '')) + (this.ensure ? " finally {\n" + (this.ensure.compile(o, LEVEL_TOP)) + "\n" + this.tab + "}" : '');
+ };
+ return Try;
+ })();
+ exports.Throw = Throw = (function() {
+ __extends(Throw, Base);
+ function Throw(expression) {
+ this.expression = expression;
+ }
+ Throw.prototype.children = ['expression'];
+ Throw.prototype.isStatement = YES;
+ Throw.prototype.jumps = NO;
+ Throw.prototype.makeReturn = THIS;
+ Throw.prototype.compileNode = function(o) {
+ return this.tab + ("throw " + (this.expression.compile(o)) + ";");
+ };
+ return Throw;
+ })();
+ exports.Existence = Existence = (function() {
+ __extends(Existence, Base);
+ function Existence(expression) {
+ this.expression = expression;
+ }
+ Existence.prototype.children = ['expression'];
+ Existence.prototype.invert = NEGATE;
+ Existence.prototype.compileNode = function(o) {
+ var cmp, cnj, code, _ref2;
+ code = this.expression.compile(o, LEVEL_OP);
+ code = IDENTIFIER.test(code) && !o.scope.check(code) ? ((_ref2 = this.negated ? ['===', '||'] : ['!==', '&&'], cmp = _ref2[0], cnj = _ref2[1], _ref2), "typeof " + code + " " + cmp + " \"undefined\" " + cnj + " " + code + " " + cmp + " null") : "" + code + " " + (this.negated ? '==' : '!=') + " null";
+ if (o.level <= LEVEL_COND) {
+ return code;
+ } else {
+ return "(" + code + ")";
+ }
+ };
+ return Existence;
+ })();
+ exports.Parens = Parens = (function() {
+ __extends(Parens, Base);
+ function Parens(body) {
+ this.body = body;
+ }
+ Parens.prototype.children = ['body'];
+ Parens.prototype.unwrap = function() {
+ return this.body;
+ };
+ Parens.prototype.isComplex = function() {
+ return this.body.isComplex();
+ };
+ Parens.prototype.makeReturn = function() {
+ return this.body.makeReturn();
+ };
+ Parens.prototype.compileNode = function(o) {
+ var bare, code, expr;
+ expr = this.body.unwrap();
+ if (expr instanceof Value && expr.isAtomic()) {
+ expr.front = this.front;
+ return expr.compile(o);
+ }
+ code = expr.compile(o, LEVEL_PAREN);
+ bare = o.level < LEVEL_OP && (expr instanceof Op || expr instanceof Call || (expr instanceof For && expr.returns));
+ if (bare) {
+ return code;
+ } else {
+ return "(" + code + ")";
+ }
+ };
+ return Parens;
+ })();
+ exports.For = For = (function() {
+ __extends(For, Base);
+ function For(body, source) {
+ var _ref2;
+ this.source = source.source, this.guard = source.guard, this.step = source.step, this.name = source.name, this.index = source.index;
+ this.body = Block.wrap([body]);
+ this.own = !!source.own;
+ this.object = !!source.object;
+ if (this.object) {
+ _ref2 = [this.index, this.name], this.name = _ref2[0], this.index = _ref2[1];
+ }
+ if (this.index instanceof Value) {
+ throw SyntaxError('index cannot be a pattern matching expression');
+ }
+ this.range = this.source instanceof Value && this.source.base instanceof Range && !this.source.properties.length;
+ this.pattern = this.name instanceof Value;
+ if (this.range && this.index) {
+ throw SyntaxError('indexes do not apply to range loops');
+ }
+ if (this.range && this.pattern) {
+ throw SyntaxError('cannot pattern match over range loops');
+ }
+ this.returns = false;
+ }
+ For.prototype.children = ['body', 'source', 'guard', 'step'];
+ For.prototype.isStatement = YES;
+ For.prototype.jumps = While.prototype.jumps;
+ For.prototype.makeReturn = function() {
+ this.returns = true;
+ return this;
+ };
+ For.prototype.compileNode = function(o) {
+ var body, defPart, forPart, forVarPart, guardPart, idt1, index, ivar, lastJumps, lvar, name, namePart, ref, resultPart, returnResult, rvar, scope, source, stepPart, stepvar, svar, varPart, _ref2;
+ body = Block.wrap([this.body]);
+ lastJumps = (_ref2 = last(body.expressions)) != null ? _ref2.jumps() : void 0;
+ if (lastJumps && lastJumps instanceof Return) {
+ this.returns = false;
+ }
+ source = this.range ? this.source.base : this.source;
+ scope = o.scope;
+ name = this.name && this.name.compile(o, LEVEL_LIST);
+ index = this.index && this.index.compile(o, LEVEL_LIST);
+ if (name && !this.pattern) {
+ scope.find(name, {
+ immediate: true
+ });
+ }
+ if (index) {
+ scope.find(index, {
+ immediate: true
+ });
+ }
+ if (this.returns) {
+ rvar = scope.freeVariable('results');
+ }
+ ivar = (this.range ? name : index) || scope.freeVariable('i');
+ if (this.step && !this.range) {
+ stepvar = scope.freeVariable("step");
+ }
+ if (this.pattern) {
+ name = ivar;
+ }
+ varPart = '';
+ guardPart = '';
+ defPart = '';
+ idt1 = this.tab + TAB;
+ if (this.range) {
+ forPart = source.compile(merge(o, {
+ index: ivar,
+ step: this.step
+ }));
+ } else {
+ svar = this.source.compile(o, LEVEL_LIST);
+ if ((name || this.own) && !IDENTIFIER.test(svar)) {
+ defPart = "" + this.tab + (ref = scope.freeVariable('ref')) + " = " + svar + ";\n";
+ svar = ref;
+ }
+ if (name && !this.pattern) {
+ namePart = "" + name + " = " + svar + "[" + ivar + "]";
+ }
+ if (!this.object) {
+ lvar = scope.freeVariable('len');
+ forVarPart = ("" + ivar + " = 0, " + lvar + " = " + svar + ".length") + (this.step ? ", " + stepvar + " = " + (this.step.compile(o, LEVEL_OP)) : '');
+ stepPart = this.step ? "" + ivar + " += " + stepvar : "" + ivar + "++";
+ forPart = "" + forVarPart + "; " + ivar + " < " + lvar + "; " + stepPart;
+ }
+ }
+ if (this.returns) {
+ resultPart = "" + this.tab + rvar + " = [];\n";
+ returnResult = "\n" + this.tab + "return " + rvar + ";";
+ body = Push.wrap(rvar, body);
+ }
+ if (this.guard) {
+ body = Block.wrap([new If(this.guard, body)]);
+ }
+ if (this.pattern) {
+ body.expressions.unshift(new Assign(this.name, new Literal("" + svar + "[" + ivar + "]")));
+ }
+ defPart += this.pluckDirectCall(o, body);
+ if (namePart) {
+ varPart = "\n" + idt1 + namePart + ";";
+ }
+ if (this.object) {
+ forPart = "" + ivar + " in " + svar;
+ if (this.own) {
+ guardPart = "\n" + idt1 + "if (!" + (utility('hasProp')) + ".call(" + svar + ", " + ivar + ")) continue;";
+ }
+ }
+ body = body.compile(merge(o, {
+ indent: idt1
+ }), LEVEL_TOP);
+ if (body) {
+ body = '\n' + body + '\n';
+ }
+ return "" + defPart + (resultPart || '') + this.tab + "for (" + forPart + ") {" + guardPart + varPart + body + this.tab + "}" + (returnResult || '');
+ };
+ For.prototype.pluckDirectCall = function(o, body) {
+ var base, defs, expr, fn, idx, ref, val, _len, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7;
+ defs = '';
+ _ref2 = body.expressions;
+ for (idx = 0, _len = _ref2.length; idx < _len; idx++) {
+ expr = _ref2[idx];
+ expr = expr.unwrapAll();
+ if (!(expr instanceof Call)) {
+ continue;
+ }
+ val = expr.variable.unwrapAll();
+ if (!((val instanceof Code) || (val instanceof Value && ((_ref3 = val.base) != null ? _ref3.unwrapAll() : void 0) instanceof Code && val.properties.length === 1 && ((_ref4 = (_ref5 = val.properties[0].name) != null ? _ref5.value : void 0) === 'call' || _ref4 === 'apply')))) {
+ continue;
+ }
+ fn = ((_ref6 = val.base) != null ? _ref6.unwrapAll() : void 0) || val;
+ ref = new Literal(o.scope.freeVariable('fn'));
+ base = new Value(ref);
+ if (val.base) {
+ _ref7 = [base, val], val.base = _ref7[0], base = _ref7[1];
+ args.unshift(new Literal('this'));
+ }
+ body.expressions[idx] = new Call(base, expr.args);
+ defs += this.tab + new Assign(ref, fn).compile(o, LEVEL_TOP) + ';\n';
+ }
+ return defs;
+ };
+ return For;
+ })();
+ exports.Switch = Switch = (function() {
+ __extends(Switch, Base);
+ function Switch(subject, cases, otherwise) {
+ this.subject = subject;
+ this.cases = cases;
+ this.otherwise = otherwise;
+ }
+ Switch.prototype.children = ['subject', 'cases', 'otherwise'];
+ Switch.prototype.isStatement = YES;
+ Switch.prototype.jumps = function(o) {
+ var block, conds, _i, _len, _ref2, _ref3, _ref4;
+ if (o == null) {
+ o = {
+ block: true
+ };
+ }
+ _ref2 = this.cases;
+ for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
+ _ref3 = _ref2[_i], conds = _ref3[0], block = _ref3[1];
+ if (block.jumps(o)) {
+ return block;
+ }
+ }
+ return (_ref4 = this.otherwise) != null ? _ref4.jumps(o) : void 0;
+ };
+ Switch.prototype.makeReturn = function() {
+ var pair, _i, _len, _ref2, _ref3;
+ _ref2 = this.cases;
+ for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
+ pair = _ref2[_i];
+ pair[1].makeReturn();
+ }
+ if ((_ref3 = this.otherwise) != null) {
+ _ref3.makeReturn();
+ }
+ return this;
+ };
+ Switch.prototype.compileNode = function(o) {
+ var block, body, code, cond, conditions, expr, i, idt1, idt2, _i, _len, _len2, _ref2, _ref3, _ref4, _ref5;
+ idt1 = o.indent + TAB;
+ idt2 = o.indent = idt1 + TAB;
+ code = this.tab + ("switch (" + (((_ref2 = this.subject) != null ? _ref2.compile(o, LEVEL_PAREN) : void 0) || false) + ") {\n");
+ _ref3 = this.cases;
+ for (i = 0, _len = _ref3.length; i < _len; i++) {
+ _ref4 = _ref3[i], conditions = _ref4[0], block = _ref4[1];
+ _ref5 = flatten([conditions]);
+ for (_i = 0, _len2 = _ref5.length; _i < _len2; _i++) {
+ cond = _ref5[_i];
+ if (!this.subject) {
+ cond = cond.invert();
+ }
+ code += idt1 + ("case " + (cond.compile(o, LEVEL_PAREN)) + ":\n");
+ }
+ if (body = block.compile(o, LEVEL_TOP)) {
+ code += body + '\n';
+ }
+ if (i === this.cases.length - 1 && !this.otherwise) {
+ break;
+ }
+ expr = this.lastNonComment(block.expressions);
+ if (expr instanceof Return || (expr instanceof Literal && expr.jumps() && expr.value !== 'debugger')) {
+ continue;
+ }
+ code += idt2 + 'break;\n';
+ }
+ if (this.otherwise && this.otherwise.expressions.length) {
+ code += idt1 + ("default:\n" + (this.otherwise.compile(o, LEVEL_TOP)) + "\n");
+ }
+ return code + this.tab + '}';
+ };
+ return Switch;
+ })();
+ exports.If = If = (function() {
+ __extends(If, Base);
+ function If(condition, body, options) {
+ this.body = body;
+ if (options == null) {
+ options = {};
+ }
+ this.condition = options.type === 'unless' ? condition.invert() : condition;
+ this.elseBody = null;
+ this.isChain = false;
+ this.soak = options.soak;
+ }
+ If.prototype.children = ['condition', 'body', 'elseBody'];
+ If.prototype.bodyNode = function() {
+ var _ref2;
+ return (_ref2 = this.body) != null ? _ref2.unwrap() : void 0;
+ };
+ If.prototype.elseBodyNode = function() {
+ var _ref2;
+ return (_ref2 = this.elseBody) != null ? _ref2.unwrap() : void 0;
+ };
+ If.prototype.addElse = function(elseBody) {
+ if (this.isChain) {
+ this.elseBodyNode().addElse(elseBody);
+ } else {
+ this.isChain = elseBody instanceof If;
+ this.elseBody = this.ensureBlock(elseBody);
+ }
+ return this;
+ };
+ If.prototype.isStatement = function(o) {
+ var _ref2;
+ return (o != null ? o.level : void 0) === LEVEL_TOP || this.bodyNode().isStatement(o) || ((_ref2 = this.elseBodyNode()) != null ? _ref2.isStatement(o) : void 0);
+ };
+ If.prototype.jumps = function(o) {
+ var _ref2;
+ return this.body.jumps(o) || ((_ref2 = this.elseBody) != null ? _ref2.jumps(o) : void 0);
+ };
+ If.prototype.compileNode = function(o) {
+ if (this.isStatement(o)) {
+ return this.compileStatement(o);
+ } else {
+ return this.compileExpression(o);
+ }
+ };
+ If.prototype.makeReturn = function() {
+ this.body && (this.body = new Block([this.body.makeReturn()]));
+ this.elseBody && (this.elseBody = new Block([this.elseBody.makeReturn()]));
+ return this;
+ };
+ If.prototype.ensureBlock = function(node) {
+ if (node instanceof Block) {
+ return node;
+ } else {
+ return new Block([node]);
+ }
+ };
+ If.prototype.compileStatement = function(o) {
+ var body, child, cond, exeq, ifPart;
+ child = del(o, 'chainChild');
+ exeq = del(o, 'isExistentialEquals');
+ if (exeq) {
+ return new If(this.condition.invert(), this.elseBodyNode(), {
+ type: 'if'
+ }).compile(o);
+ }
+ cond = this.condition.compile(o, LEVEL_PAREN);
+ o.indent += TAB;
+ body = this.ensureBlock(this.body).compile(o);
+ if (body) {
+ body = "\n" + body + "\n" + this.tab;
+ }
+ ifPart = "if (" + cond + ") {" + body + "}";
+ if (!child) {
+ ifPart = this.tab + ifPart;
+ }
+ if (!this.elseBody) {
+ return ifPart;
+ }
+ return ifPart + ' else ' + (this.isChain ? (o.indent = this.tab, o.chainChild = true, this.elseBody.unwrap().compile(o, LEVEL_TOP)) : "{\n" + (this.elseBody.compile(o, LEVEL_TOP)) + "\n" + this.tab + "}");
+ };
+ If.prototype.compileExpression = function(o) {
+ var alt, body, code, cond;
+ cond = this.condition.compile(o, LEVEL_COND);
+ body = this.bodyNode().compile(o, LEVEL_LIST);
+ alt = this.elseBodyNode() ? this.elseBodyNode().compile(o, LEVEL_LIST) : 'void 0';
+ code = "" + cond + " ? " + body + " : " + alt;
+ if (o.level >= LEVEL_COND) {
+ return "(" + code + ")";
+ } else {
+ return code;
+ }
+ };
+ If.prototype.unfoldSoak = function() {
+ return this.soak && this;
+ };
+ return If;
+ })();
+ Push = {
+ wrap: function(name, exps) {
+ if (exps.isEmpty() || last(exps.expressions).jumps()) {
+ return exps;
+ }
+ return exps.push(new Call(new Value(new Literal(name), [new Access(new Literal('push'))]), [exps.pop()]));
+ }
+ };
+ Closure = {
+ wrap: function(expressions, statement, noReturn) {
+ var args, call, func, mentionsArgs, meth;
+ if (expressions.jumps()) {
+ return expressions;
+ }
+ func = new Code([], Block.wrap([expressions]));
+ args = [];
+ if ((mentionsArgs = expressions.contains(this.literalArgs)) || expressions.contains(this.literalThis)) {
+ meth = new Literal(mentionsArgs ? 'apply' : 'call');
+ args = [new Literal('this')];
+ if (mentionsArgs) {
+ args.push(new Literal('arguments'));
+ }
+ func = new Value(func, [new Access(meth)]);
+ }
+ func.noReturn = noReturn;
+ call = new Call(func, args);
+ if (statement) {
+ return Block.wrap([call]);
+ } else {
+ return call;
+ }
+ },
+ literalArgs: function(node) {
+ return node instanceof Literal && node.value === 'arguments' && !node.asKey;
+ },
+ literalThis: function(node) {
+ return (node instanceof Literal && node.value === 'this' && !node.asKey) || (node instanceof Code && node.bound);
+ }
+ };
+ unfoldSoak = function(o, parent, name) {
+ var ifn;
+ if (!(ifn = parent[name].unfoldSoak(o))) {
+ return;
+ }
+ parent[name] = ifn.body;
+ ifn.body = new Value(parent);
+ return ifn;
+ };
+ UTILITIES = {
+ "extends": 'function(child, parent) {\n for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; }\n function ctor() { this.constructor = child; }\n ctor.prototype = parent.prototype;\n child.prototype = new ctor;\n child.__super__ = parent.prototype;\n return child;\n}',
+ bind: 'function(fn, me){ return function(){ return fn.apply(me, arguments); }; }',
+ indexOf: 'Array.prototype.indexOf || function(item) {\n for (var i = 0, l = this.length; i < l; i++) {\n if (this[i] === item) return i;\n }\n return -1;\n}',
+ hasProp: 'Object.prototype.hasOwnProperty',
+ slice: 'Array.prototype.slice'
+ };
+ LEVEL_TOP = 1;
+ LEVEL_PAREN = 2;
+ LEVEL_LIST = 3;
+ LEVEL_COND = 4;
+ LEVEL_OP = 5;
+ LEVEL_ACCESS = 6;
+ TAB = ' ';
+ IDENTIFIER = /^[$A-Za-z_\x7f-\uffff][$\w\x7f-\uffff]*$/;
+ SIMPLENUM = /^[+-]?\d+$/;
+ METHOD_DEF = /^(?:([$A-Za-z_][$\w\x7f-\uffff]*)\.prototype\.)?([$A-Za-z_][$\w\x7f-\uffff]*)$/;
+ IS_STRING = /^['"]/;
+ utility = function(name) {
+ var ref;
+ ref = "__" + name;
+ Scope.root.assign(ref, UTILITIES[name]);
+ return ref;
+ };
+ multident = function(code, tab) {
+ return code.replace(/\n/g, '$&' + tab);
+ };
+});
+/**
+ * Copyright (c) 2011 Jeremy Ashkenas
+ *
+ * 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.
+ */
+
+define('ace/mode/coffee/scope', ['require', 'exports', 'module' , 'ace/mode/coffee/helpers'], function(require, exports, module) {
+ var Scope, extend, last, _ref;
+ _ref = require('./helpers'), extend = _ref.extend, last = _ref.last;
+ exports.Scope = Scope = (function() {
+ Scope.root = null;
+ function Scope(parent, expressions, method) {
+ this.parent = parent;
+ this.expressions = expressions;
+ this.method = method;
+ this.variables = [
+ {
+ name: 'arguments',
+ type: 'arguments'
+ }
+ ];
+ this.positions = {};
+ if (!this.parent) {
+ Scope.root = this;
+ }
+ }
+ Scope.prototype.add = function(name, type, immediate) {
+ var pos;
+ if (this.shared && !immediate) {
+ return this.parent.add(name, type, immediate);
+ }
+ if (typeof (pos = this.positions[name]) === 'number') {
+ return this.variables[pos].type = type;
+ } else {
+ return this.positions[name] = this.variables.push({
+ name: name,
+ type: type
+ }) - 1;
+ }
+ };
+ Scope.prototype.find = function(name, options) {
+ if (this.check(name, options)) {
+ return true;
+ }
+ this.add(name, 'var');
+ return false;
+ };
+ Scope.prototype.parameter = function(name) {
+ if (this.shared && this.parent.check(name, true)) {
+ return;
+ }
+ return this.add(name, 'param');
+ };
+ Scope.prototype.check = function(name, immediate) {
+ var found, _ref2;
+ found = !!this.type(name);
+ if (found || immediate) {
+ return found;
+ }
+ return !!((_ref2 = this.parent) != null ? _ref2.check(name) : void 0);
+ };
+ Scope.prototype.temporary = function(name, index) {
+ if (name.length > 1) {
+ return '_' + name + (index > 1 ? index : '');
+ } else {
+ return '_' + (index + parseInt(name, 36)).toString(36).replace(/\d/g, 'a');
+ }
+ };
+ Scope.prototype.type = function(name) {
+ var v, _i, _len, _ref2;
+ _ref2 = this.variables;
+ for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
+ v = _ref2[_i];
+ if (v.name === name) {
+ return v.type;
+ }
+ }
+ return null;
+ };
+ Scope.prototype.freeVariable = function(type) {
+ var index, temp;
+ index = 0;
+ while (this.check((temp = this.temporary(type, index)))) {
+ index++;
+ }
+ this.add(temp, 'var', true);
+ return temp;
+ };
+ Scope.prototype.assign = function(name, value) {
+ this.add(name, {
+ value: value,
+ assigned: true
+ });
+ return this.hasAssignments = true;
+ };
+ Scope.prototype.hasDeclarations = function() {
+ return !!this.declaredVariables().length;
+ };
+ Scope.prototype.declaredVariables = function() {
+ var realVars, tempVars, v, _i, _len, _ref2;
+ realVars = [];
+ tempVars = [];
+ _ref2 = this.variables;
+ for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
+ v = _ref2[_i];
+ if (v.type === 'var') {
+ (v.name.charAt(0) === '_' ? tempVars : realVars).push(v.name);
+ }
+ }
+ return realVars.sort().concat(tempVars.sort());
+ };
+ Scope.prototype.assignedVariables = function() {
+ var v, _i, _len, _ref2, _results;
+ _ref2 = this.variables;
+ _results = [];
+ for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
+ v = _ref2[_i];
+ if (v.type.assigned) {
+ _results.push("" + v.name + " = " + v.type.value);
+ }
+ }
+ return _results;
+ };
+ return Scope;
+ })();
+});
diff --git a/apps/files_texteditor/js/aceeditor/worker-css.js b/apps/files_texteditor/js/aceeditor/worker-css.js
index cfd506b289f..7b179068ae1 100644
--- a/apps/files_texteditor/js/aceeditor/worker-css.js
+++ b/apps/files_texteditor/js/aceeditor/worker-css.js
@@ -1 +1,9538 @@
-function initSender(){var a=require("pilot/event_emitter").EventEmitter,b=require("pilot/oop"),c=function(){};(function(){b.implement(this,a),this.callback=function(a,b){postMessage({type:"call",id:b,data:a})},this.emit=function(a,b){postMessage({type:"event",name:a,data:b})}}).call(c.prototype);return new c}function initBaseUrls(a){require.tlns=a}var console={log:function(a){postMessage({type:"log",data:a})}},window={console:console},require=function(a){var b=require.modules[a];if(b){b.initialized||(b.exports=b.factory().exports,b.initialized=!0);return b.exports}var c=a.split("/");c[0]=require.tlns[c[0]]||c[0],path=c.join("/")+".js",require.id=a,importScripts(path);return require(a)};require.modules={},require.tlns={};var define=function(a,b,c){arguments.length==2?c=b:arguments.length==1&&(c=a,a=require.id);a.indexOf("text/")!==0&&(require.modules[a]={factory:function(){var a={exports:{}},b=c(require,a.exports,a);b&&(a.exports=b);return a}})},main,sender;onmessage=function(a){var b=a.data;if(b.command)main[b.command].apply(main,b.args);else if(b.init){initBaseUrls(b.tlns),require("pilot/fixoldbrowsers"),sender=initSender();var c=require(b.module)[b.classname];main=new c(sender)}else b.event&&sender&&sender._dispatchEvent(b.event,b.data)},define("pilot/fixoldbrowsers",["require","exports","module"],function(a,b,c){if(!Function.prototype.bind){var d=Array.prototype.slice;Function.prototype.bind=function(a){var b=this;if(typeof b.apply!="function"||typeof b.call!="function")return new TypeError;var c=d.call(arguments),e=function f(){if(this instanceof f){var a=Object.create(b.prototype);b.apply(a,c.concat(d.call(arguments)));return a}return b.call.apply(b,c.concat(d.call(arguments)))};e.length=typeof b=="function"?Math.max(b.length-c.length,0):0;return e}}var e=Function.prototype.call,f=Array.prototype,g=Object.prototype,h=e.bind(g.hasOwnProperty),i,j,k,l,m;if(m=h(g,"__defineGetter__"))i=e.bind(g.__defineGetter__),j=e.bind(g.__defineSetter__),k=e.bind(g.__lookupGetter__),l=e.bind(g.__lookupSetter__);Array.isArray||(Array.isArray=function(a){return Object.prototype.toString.call(a)==="[object Array]"}),Array.prototype.forEach||(Array.prototype.forEach=function(a,b){var c=+this.length;for(var d=0;d<c;d++)d in this&&a.call(b,this[d],d,this)}),Array.prototype.map||(Array.prototype.map=function(a){var b=+this.length;if(typeof a!="function")throw new TypeError;var c=Array(b),d=arguments[1];for(var e=0;e<b;e++)e in this&&(c[e]=a.call(d,this[e],e,this));return c}),Array.prototype.filter||(Array.prototype.filter=function(a){var b=[],c=arguments[1];for(var d=0;d<this.length;d++)a.call(c,this[d])&&b.push(this[d]);return b}),Array.prototype.every||(Array.prototype.every=function(a){var b=arguments[1];for(var c=0;c<this.length;c++)if(!a.call(b,this[c]))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(a){var b=arguments[1];for(var c=0;c<this.length;c++)if(a.call(b,this[c]))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(a){var b=+this.length;if(typeof a!="function")throw new TypeError;if(b===0&&arguments.length===1)throw new TypeError;var c=0;if(arguments.length>=2)var d=arguments[1];else do{if(c in this){d=this[c++];break}if(++c>=b)throw new TypeError}while(!0);for(;c<b;c++)c in this&&(d=a.call(null,d,this[c],c,this));return d}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(a){var b=+this.length;if(typeof a!="function")throw new TypeError;if(b===0&&arguments.length===1)throw new TypeError;var c=b-1;if(arguments.length>=2)var d=arguments[1];else do{if(c in this){d=this[c--];break}if(--c<0)throw new TypeError}while(!0);for(;c>=0;c--)c in this&&(d=a.call(null,d,this[c],c,this));return d}),Array.prototype.indexOf||(Array.prototype.indexOf=function(a){var b=this.length;if(!b)return-1;var c=arguments[1]||0;if(c>=b)return-1;c<0&&(c+=b);for(;c<b;c++){if(!h(this,c))continue;if(a===this[c])return c}return-1}),Array.prototype.lastIndexOf||(Array.prototype.lastIndexOf=function(a){var b=this.length;if(!b)return-1;var c=arguments[1]||b;c<0&&(c+=b),c=Math.min(c,b-1);for(;c>=0;c--){if(!h(this,c))continue;if(a===this[c])return c}return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(a){return a.__proto__||a.constructor.prototype});if(!Object.getOwnPropertyDescriptor){var n="Object.getOwnPropertyDescriptor called on a non-object: ";Object.getOwnPropertyDescriptor=function(a,b){if(typeof a!="object"&&typeof a!="function"||a===null)throw new TypeError(n+a);if(!h(a,b))return undefined;var c,d,e;c={enumerable:!0,configurable:!0};if(m){var f=a.__proto__;a.__proto__=g;var d=k(a,b),e=l(a,b);a.__proto__=f;if(d||e){d&&(descriptor.get=d),e&&(descriptor.set=e);return descriptor}}descriptor.value=a[b];return descriptor}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(a){return Object.keys(a)}),Object.create||(Object.create=function(a,b){var c;if(a===null)c={"__proto__":null};else{if(typeof a!="object")throw new TypeError("typeof prototype["+typeof a+"] != 'object'");var d=function(){};d.prototype=a,c=new d,c.__proto__=a}typeof b!="undefined"&&Object.defineProperties(c,b);return c});if(!Object.defineProperty){var o="Property description must be an object: ",p="Object.defineProperty called on non-object: ",q="getters & setters can not be defined on this javascript engine";Object.defineProperty=function(a,b,c){if(typeof a!="object"&&typeof a!="function")throw new TypeError(p+a);if(typeof a!="object"||a===null)throw new TypeError(o+c);if(h(c,"value"))if(m&&(k(a,b)||l(a,b))){var d=a.__proto__;a.__proto__=g,delete a[b],a[b]=c.value,a.prototype}else a[b]=c.value;else{if(!m)throw new TypeError(q);h(c,"get")&&i(a,b,c.get),h(c,"set")&&j(a,b,c.set)}return a}}Object.defineProperties||(Object.defineProperties=function(a,b){for(var c in b)h(b,c)&&Object.defineProperty(a,c,b[c]);return a}),Object.seal||(Object.seal=function(a){return a}),Object.freeze||(Object.freeze=function(a){return a});try{Object.freeze(function(){})}catch(r){Object.freeze=function(a){return function b(b){return typeof b=="function"?b:a(b)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(a){return a}),Object.isSealed||(Object.isSealed=function(a){return!1}),Object.isFrozen||(Object.isFrozen=function(a){return!1}),Object.isExtensible||(Object.isExtensible=function(a){return!0});if(!Object.keys){var s=!0,t=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],u=t.length;for(var v in{toString:null})s=!1;Object.keys=function W(a){if(typeof a!="object"&&typeof a!="function"||a===null)throw new TypeError("Object.keys called on a non-object");var W=[];for(var b in a)h(a,b)&&W.push(b);if(s)for(var c=0,d=u;c<d;c++){var e=t[c];h(a,e)&&W.push(e)}return W}}Date.prototype.toISOString||(Date.prototype.toISOString=function(){return this.getUTCFullYear()+"-"+(this.getUTCMonth()+1)+"-"+this.getUTCDate()+"T"+this.getUTCHours()+":"+this.getUTCMinutes()+":"+this.getUTCSeconds()+"Z"}),Date.now||(Date.now=function(){return(new Date).getTime()}),Date.prototype.toJSON||(Date.prototype.toJSON=function(a){if(typeof this.toISOString!="function")throw new TypeError;return this.toISOString()}),isNaN(Date.parse("T00:00"))&&(Date=function(a){var b=function(c,d,e,f,g,h,i){var j=arguments.length;if(this instanceof a){var k=j===1&&String(c)===c?new a(b.parse(c)):j>=7?new a(c,d,e,f,g,h,i):j>=6?new a(c,d,e,f,g,h):j>=5?new a(c,d,e,f,g):j>=4?new a(c,d,e,f):j>=3?new a(c,d,e):j>=2?new a(c,d):j>=1?new a(c):new a;k.constructor=b;return k}return a.apply(this,arguments)},c=new RegExp("^(?:((?:[+-]\\d\\d)?\\d\\d\\d\\d)(?:-(\\d\\d)(?:-(\\d\\d))?)?)?(?:T(\\d\\d):(\\d\\d)(?::(\\d\\d)(?:\\.(\\d\\d\\d))?)?)?(?:Z|([+-])(\\d\\d):(\\d\\d))?$");for(var d in a)b[d]=a[d];b.now=a.now,b.UTC=a.UTC,b.prototype=a.prototype,b.prototype.constructor=b,b.parse=function e(b){var d=c.exec(b);if(d){d.shift();var e=d[0]===undefined;for(var f=0;f<10;f++){if(f===7)continue;d[f]=+(d[f]||(f<3?1:0)),f===1&&d[f]--}if(e)return((d[3]*60+d[4])*60+d[5])*1e3+d[6];var g=(d[8]*60+d[9])*60*1e3;d[6]==="-"&&(g=-g);return a.UTC.apply(this,d.slice(0,7))+g}return a.parse.apply(this,arguments)};return b}(Date));if(!String.prototype.trim){var w=/^\s\s*/,x=/\s\s*$/;String.prototype.trim=function(){return String(this).replace(w,"").replace(x,"")}}}),define("pilot/event_emitter",["require","exports","module"],function(a,b,c){var d={};d._emit=d._dispatchEvent=function(a,b){this._eventRegistry=this._eventRegistry||{};var c=this._eventRegistry[a];if(!!c&&!!c.length){var b=b||{};b.type=a;for(var d=0;d<c.length;d++)c[d](b)}},d.on=d.addEventListener=function(a,b){this._eventRegistry=this._eventRegistry||{};var c=this._eventRegistry[a];if(!c)var c=this._eventRegistry[a]=[];c.indexOf(b)==-1&&c.push(b)},d.removeListener=d.removeEventListener=function(a,b){this._eventRegistry=this._eventRegistry||{};var c=this._eventRegistry[a];if(!!c){var d=c.indexOf(b);d!==-1&&c.splice(d,1)}},d.removeAllListeners=function(a){this._eventRegistry&&(this._eventRegistry[a]=[])},b.EventEmitter=d}),define("pilot/oop",["require","exports","module"],function(a,b,c){b.inherits=function(){var a=function(){};return function(b,c){a.prototype=c.prototype,b.super_=c.prototype,b.prototype=new a,b.prototype.constructor=b}}(),b.mixin=function(a,b){for(var c in b)a[c]=b[c]},b.implement=function(a,c){b.mixin(a,c)}}),define("ace/mode/css_worker",["require","exports","module","pilot/oop","ace/worker/mirror","ace/mode/css/csslint"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/worker/mirror").Mirror,f=a("ace/mode/css/csslint").CSSLint,g=b.Worker=function(a){e.call(this,a),this.setTimeout(200)};d.inherits(g,e),function(){this.onUpdate=function(){var a=this.doc.getValue();result=f.verify(a),this.sender.emit("csslint",result.messages.map(function(a){delete a.rule;return a}))}}.call(g.prototype)}),define("ace/worker/mirror",["require","exports","module","ace/document","pilot/lang"],function(a,b,c){var d=a("ace/document").Document,e=a("pilot/lang"),f=b.Mirror=function(a){this.sender=a;var b=this.doc=new d(""),c=this.deferredUpdate=e.deferredCall(this.onUpdate.bind(this)),f=this;a.on("change",function(a){b.applyDeltas([a.data]),c.schedule(f.$timeout)})};(function(){this.$timeout=500,this.setTimeout=function(a){this.$timeout=a},this.setValue=function(a){this.doc.setValue(a),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(a){this.sender.callback(this.doc.getValue(),a)},this.onUpdate=function(){}}).call(f.prototype)}),define("ace/document",["require","exports","module","pilot/oop","pilot/event_emitter","ace/range","ace/anchor"],function(a,b,c){var d=a("pilot/oop"),e=a("pilot/event_emitter").EventEmitter,f=a("ace/range").Range,g=a("ace/anchor").Anchor,h=function(a){this.$lines=[],Array.isArray(a)?this.insertLines(0,a):a.length==0?this.$lines=[""]:this.insert({row:0,column:0},a)};(function(){d.implement(this,e),this.setValue=function(a){var b=this.getLength();this.remove(new f(0,0,b,this.getLine(b-1).length)),this.insert({row:0,column:0},a)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(a,b){return new g(this,a,b)},"aaa".split(/a/).length==0?this.$split=function(a){return a.replace(/\r\n|\r/g,"\n").split("\n")}:this.$split=function(a){return a.split(/\r\n|\r|\n/)},this.$detectNewLine=function(a){var b=a.match(/^.*?(\r?\n)/m);b?this.$autoNewLine=b[1]:this.$autoNewLine="\n"},this.getNewLineCharacter=function(){switch(this.$newLineMode){case"windows":return"\r\n";case"unix":return"\n";case"auto":return this.$autoNewLine}},this.$autoNewLine="\n",this.$newLineMode="auto",this.setNewLineMode=function(a){this.$newLineMode!==a&&(this.$newLineMode=a)},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(a){return a=="\r\n"||a=="\r"||a=="\n"},this.getLine=function(a){return this.$lines[a]||""},this.getLines=function(a,b){return this.$lines.slice(a,b+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(a){if(a.start.row==a.end.row)return this.$lines[a.start.row].substring(a.start.column,a.end.column);var b=[];b.push(this.$lines[a.start.row].substring(a.start.column)),b.push.apply(b,this.getLines(a.start.row+1,a.end.row-1)),b.push(this.$lines[a.end.row].substring(0,a.end.column));return b.join(this.getNewLineCharacter())},this.$clipPosition=function(a){var b=this.getLength();a.row>=b&&(a.row=Math.max(0,b-1),a.column=this.getLine(b-1).length);return a},this.insert=function(a,b){if(b.length==0)return a;a=this.$clipPosition(a),this.getLength()<=1&&this.$detectNewLine(b);var c=this.$split(b),d=c.splice(0,1)[0],e=c.length==0?null:c.splice(c.length-1,1)[0];a=this.insertInLine(a,d),e!==null&&(a=this.insertNewLine(a),a=this.insertLines(a.row,c),a=this.insertInLine(a,e||""));return a},this.insertLines=function(a,b){if(b.length==0)return{row:a,column:0};var c=[a,0];c.push.apply(c,b),this.$lines.splice.apply(this.$lines,c);var d=new f(a,0,a+b.length,0),e={action:"insertLines",range:d,lines:b};this._dispatchEvent("change",{data:e});return d.end},this.insertNewLine=function(a){a=this.$clipPosition(a);var b=this.$lines[a.row]||"";this.$lines[a.row]=b.substring(0,a.column),this.$lines.splice(a.row+1,0,b.substring(a.column,b.length));var c={row:a.row+1,column:0},d={action:"insertText",range:f.fromPoints(a,c),text:this.getNewLineCharacter()};this._dispatchEvent("change",{data:d});return c},this.insertInLine=function(a,b){if(b.length==0)return a;var c=this.$lines[a.row]||"";this.$lines[a.row]=c.substring(0,a.column)+b+c.substring(a.column);var d={row:a.row,column:a.column+b.length},e={action:"insertText",range:f.fromPoints(a,d),text:b};this._dispatchEvent("change",{data:e});return d},this.remove=function(a){a.start=this.$clipPosition(a.start),a.end=this.$clipPosition(a.end);if(a.isEmpty())return a.start;var b=a.start.row,c=a.end.row;if(a.isMultiLine()){var d=a.start.column==0?b:b+1,e=c-1;a.end.column>0&&this.removeInLine(c,0,a.end.column),e>=d&&this.removeLines(d,e),d!=b&&(this.removeInLine(b,a.start.column,this.getLine(b).length),this.removeNewLine(a.start.row))}else this.removeInLine(b,a.start.column,a.end.column);return a.start},this.removeInLine=function(a,b,c){if(b!=c){var d=new f(a,b,a,c),e=this.getLine(a),g=e.substring(b,c),h=e.substring(0,b)+e.substring(c,e.length);this.$lines.splice(a,1,h);var i={action:"removeText",range:d,text:g};this._dispatchEvent("change",{data:i});return d.start}},this.removeLines=function(a,b){var c=new f(a,0,b+1,0),d=this.$lines.splice(a,b-a+1),e={action:"removeLines",range:c,nl:this.getNewLineCharacter(),lines:d};this._dispatchEvent("change",{data:e});return d},this.removeNewLine=function(a){var b=this.getLine(a),c=this.getLine(a+1),d=new f(a,b.length,a+1,0),e=b+c;this.$lines.splice(a,2,e);var g={action:"removeText",range:d,text:this.getNewLineCharacter()};this._dispatchEvent("change",{data:g})},this.replace=function(a,b){if(b.length==0&&a.isEmpty())return a.start;if(b==this.getTextRange(a))return a.end;this.remove(a);if(b)var c=this.insert(a.start,b);else c=a.start;return c},this.applyDeltas=function(a){for(var b=0;b<a.length;b++){var c=a[b],d=f.fromPoints(c.range.start,c.range.end);c.action=="insertLines"?this.insertLines(d.start.row,c.lines):c.action=="insertText"?this.insert(d.start,c.text):c.action=="removeLines"?this.removeLines(d.start.row,d.end.row-1):c.action=="removeText"&&this.remove(d)}},this.revertDeltas=function(a){for(var b=a.length-1;b>=0;b--){var c=a[b],d=f.fromPoints(c.range.start,c.range.end);c.action=="insertLines"?this.removeLines(d.start.row,d.end.row-1):c.action=="insertText"?this.remove(d):c.action=="removeLines"?this.insertLines(d.start.row,c.lines):c.action=="removeText"&&this.insert(d.start,c.text)}}}).call(h.prototype),b.Document=h}),define("ace/range",["require","exports","module"],function(a,b,c){var d=function(a,b,c,d){this.start={row:a,column:b},this.end={row:c,column:d}};(function(){this.toString=function(){return"Range: ["+this.start.row+"/"+this.start.column+"] -> ["+this.end.row+"/"+this.end.column+"]"},this.contains=function(a,b){return this.compare(a,b)==0},this.compareRange=function(a){var b,c=a.end,d=a.start;b=this.compare(c.row,c.column);if(b==1){b=this.compare(d.row,d.column);return b==1?2:b==0?1:0}if(b==-1)return-2;b=this.compare(d.row,d.column);return b==-1?-1:b==1?42:0},this.containsRange=function(a){var b=this.compareRange(a);return b==-1||b==0||b==1},this.isEnd=function(a,b){return this.end.row==a&&this.end.column==b},this.isStart=function(a,b){return this.start.row==a&&this.start.column==b},this.setStart=function(a,b){typeof a=="object"?(this.start.column=a.column,this.start.row=a.row):(this.start.row=a,this.start.column=b)},this.setEnd=function(a,b){typeof a=="object"?(this.end.column=a.column,this.end.row=a.row):(this.end.row=a,this.end.column=b)},this.inside=function(a,b){if(this.compare(a,b)==0)return this.isEnd(a,b)||this.isStart(a,b)?!1:!0;return!1},this.insideStart=function(a,b){if(this.compare(a,b)==0)return this.isEnd(a,b)?!1:!0;return!1},this.insideEnd=function(a,b){if(this.compare(a,b)==0)return this.isStart(a,b)?!1:!0;return!1},this.compare=function(a,b){if(!this.isMultiLine()&&a===this.start.row)return b<this.start.column?-1:b>this.end.column?1:0;return a<this.start.row?-1:a>this.end.row?1:this.start.row===a?b>=this.start.column?0:-1:this.end.row===a?b<=this.end.column?0:1:0},this.compareStart=function(a,b){return this.start.row==a&&this.start.column==b?-1:this.compare(a,b)},this.compareEnd=function(a,b){return this.end.row==a&&this.end.column==b?1:this.compare(a,b)},this.compareInside=function(a,b){return this.end.row==a&&this.end.column==b?1:this.start.row==a&&this.start.column==b?-1:this.compare(a,b)},this.clipRows=function(a,b){if(this.end.row>b)var c={row:b+1,column:0};if(this.start.row>b)var e={row:b+1,column:0};if(this.start.row<a)var e={row:a,column:0};if(this.end.row<a)var c={row:a,column:0};return d.fromPoints(e||this.start,c||this.end)},this.extend=function(a,b){var c=this.compare(a,b);if(c==0)return this;if(c==-1)var e={row:a,column:b};else var f={row:a,column:b};return d.fromPoints(e||this.start,f||this.end)},this.isEmpty=function(){return this.start.row==this.end.row&&this.start.column==this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return d.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new d(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new d(this.start.row,0,this.end.row,0)},this.toScreenRange=function(a){var b=a.documentToScreenPosition(this.start),c=a.documentToScreenPosition(this.end);return new d(b.row,b.column,c.row,c.column)}}).call(d.prototype),d.fromPoints=function(a,b){return new d(a.row,a.column,b.row,b.column)},b.Range=d}),define("ace/anchor",["require","exports","module","pilot/oop","pilot/event_emitter"],function(a,b,c){var d=a("pilot/oop"),e=a("pilot/event_emitter").EventEmitter,f=b.Anchor=function(a,b,c){this.document=a,typeof c=="undefined"?this.setPosition(b.row,b.column):this.setPosition(b,c),this.$onChange=this.onChange.bind(this),a.on("change",this.$onChange)};(function(){d.implement(this,e),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.onChange=function(a){var b=a.data,c=b.range;if(c.start.row!=c.end.row||c.start.row==this.row){if(c.start.row>this.row)return;if(c.start.row==this.row&&c.start.column>this.column)return;var d=this.row,e=this.column;b.action==="insertText"?c.start.row===d&&c.start.column<=e?c.start.row===c.end.row?e+=c.end.column-c.start.column:(e-=c.start.column,d+=c.end.row-c.start.row):c.start.row!==c.end.row&&c.start.row<d&&(d+=c.end.row-c.start.row):b.action==="insertLines"?c.start.row<=d&&(d+=c.end.row-c.start.row):b.action=="removeText"?c.start.row==d&&c.start.column<e?c.end.column>=e?e=c.start.column:e=Math.max(0,e-(c.end.column-c.start.column)):c.start.row!==c.end.row&&c.start.row<d?(c.end.row==d&&(e=Math.max(0,e-c.end.column)+c.start.column),d-=c.end.row-c.start.row):c.end.row==d&&(d-=c.end.row-c.start.row,e=Math.max(0,e-c.end.column)+c.start.column):b.action=="removeLines"&&c.start.row<=d&&(c.end.row<=d?d-=c.end.row-c.start.row:(d=c.start.row,e=0)),this.setPosition(d,e,!0)}},this.setPosition=function(a,b,c){var d;c?d={row:a,column:b}:d=this.$clipPositionToDocument(a,b);if(this.row!=d.row||this.column!=d.column){var e={row:this.row,column:this.column};this.row=d.row,this.column=d.column,this._dispatchEvent("change",{old:e,value:d})}},this.detach=function(){this.document.removeEventListener("change",this.$onChange)},this.$clipPositionToDocument=function(a,b){var c={};a>=this.document.getLength()?(c.row=Math.max(0,this.document.getLength()-1),c.column=this.document.getLine(c.row).length):a<0?(c.row=0,c.column=0):(c.row=a,c.column=Math.min(this.document.getLine(c.row).length,Math.max(0,b))),b<0&&(c.column=0);return c}}).call(f.prototype)}),define("pilot/lang",["require","exports","module"],function(a,b,c){b.stringReverse=function(a){return a.split("").reverse().join("")},b.stringRepeat=function(a,b){return Array(b+1).join(a)};var d=/^\s\s*/,e=/\s\s*$/;b.stringTrimLeft=function(a){return a.replace(d,"")},b.stringTrimRight=function(a){return a.replace(e,"")},b.copyObject=function(a){var b={};for(var c in a)b[c]=a[c];return b},b.copyArray=function(a){var b=[];for(i=0,l=a.length;i<l;i++)a[i]&&typeof a[i]=="object"?b[i]=this.copyObject(a[i]):b[i]=a[i];return b},b.deepCopy=function(a){if(typeof a!="object")return a;var b=a.constructor();for(var c in a)typeof a[c]=="object"?b[c]=this.deepCopy(a[c]):b[c]=a[c];return b},b.arrayToMap=function(a){var b={};for(var c=0;c<a.length;c++)b[a[c]]=1;return b},b.arrayRemove=function(a,b){for(var c=0;c<=a.length;c++)b===a[c]&&a.splice(c,1)},b.escapeRegExp=function(a){return a.replace(/([.*+?^${}()|[\]\/\\])/g,"\\$1")},b.deferredCall=function(a){var b=null,c=function(){b=null,a()},d=function(a){b||(b=setTimeout(c,a||0));return d};d.schedule=d,d.call=function(){this.cancel(),a();return d},d.cancel=function(){clearTimeout(b),b=null;return d};return d}}),define("ace/mode/css/csslint",["require","exports","module"],function(require,exports,module){function indexOf(a,b){if(a.indexOf)return a.indexOf(b);for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1}function mix(a,b){var c;for(c in b)b.hasOwnProperty(c)&&(receiver[c]=b[c]);return c}function Reporter(a){this.messages=[],this.stats=[],this.lines=a}var parserlib={};(function(){function e(a,c){this._reader=a?new b(a.toString()):null,this._token=null,this._tokenData=c,this._lt=[],this._ltIndex=0,this._ltIndexCache=[]}function d(a,b,c){this.col=c,this.line=b,this.text=a}function c(a,b,c){this.col=c,this.line=b,this.message=a}function b(a){this._input=a.replace(/\n\r?/g,"\n"),this._line=1,this._col=1,this._cursor=0}function a(){this._listeners={}}a.prototype={constructor:a,addListener:function(a,b){this._listeners[a]||(this._listeners[a]=[]),this._listeners[a].push(b)},fire:function(a){typeof a=="string"&&(a={type:a}),a.target||(a.target=this);if(!a.type)throw new Error("Event object missing 'type' property.");if(this._listeners[a.type]){var b=this._listeners[a.type].concat();for(var c=0,d=b.length;c<d;c++)b[c].call(this,a)}},removeListener:function(a,b){if(this._listeners[a]){var c=this._listeners[a];for(var d=0,e=c.length;d<e;d++)if(c[d]===b){c.splice(d,1);break}}}},b.prototype={constructor:b,getCol:function(){return this._col},getLine:function(){return this._line},eof:function(){return this._cursor==this._input.length},peek:function(a){var b=null;a=typeof a=="undefined"?1:a,this._cursor<this._input.length&&(b=this._input.charAt(this._cursor+a-1));return b},read:function(){var a=null;this._cursor<this._input.length&&(this._input.charAt(this._cursor)=="\n"?(this._line++,this._col=1):this._col++,a=this._input.charAt(this._cursor++));return a},mark:function(){this._bookmark={cursor:this._cursor,line:this._line,col:this._col}},reset:function(){this._bookmark&&(this._cursor=this._bookmark.cursor,this._line=this._bookmark.line,this._col=this._bookmark.col,delete this._bookmark)},readTo:function(a){var b="",c;while(b.length<a.length||b.lastIndexOf(a)!=b.length-a.length){c=this.read();if(c)b+=c;else throw new Error('Expected "'+a+'" at line '+this._line+", col "+this._col+".")}return b},readWhile:function(a){var b="",c=this.read();while(c!==null&&a(c))b+=c,c=this.read();return b},readMatch:function(a){var b=this._input.substring(this._cursor),c=null;typeof a=="string"?b.indexOf(a)===0&&(c=this.readCount(a.length)):a instanceof RegExp&&a.test(b)&&(c=this.readCount(RegExp.lastMatch.length));return c},readCount:function(a){var b="";while(a--)b+=this.read();return b}},c.prototype=new Error,d.fromToken=function(a){return new d(a.value,a.startLine,a.startCol)},d.prototype={constructor:d,valueOf:function(){return this.toString()},toString:function(){return this.text}},e.createTokenData=function(a){var b=[],c={},d=a.concat([]),e=0,f=d.length+1;d.UNKNOWN=-1,d.unshift({name:"EOF"});for(;e<f;e++)b.push(d[e].name),d[d[e].name]=e,d[e].text&&(c[d[e].text]=e);d.name=function(a){return b[a]},d.type=function(a){return c[a]};return d},e.prototype={constructor:e,match:function(a,b){a instanceof Array||(a=[a]);var c=this.get(b),d=0,e=a.length;while(d<e)if(c==a[d++])return!0;this.unget();return!1},mustMatch:function(a,b){a instanceof Array||(a=[a]);if(!this.match.apply(this,arguments)){token=this.LT(1);throw new c("Expected "+this._tokenData[a[0]].name+" at line "+token.startLine+", col "+token.startCol+".",token.startLine,token.startCol)}},advance:function(a,b){while(this.LA(0)!=0&&!this.match(a,b))this.get();return this.LA(0)},get:function(a){var b=this._tokenData,c=this._reader,d,e=0,f=b.length,g=!1,h,i;if(this._lt.length&&this._ltIndex>=0&&this._ltIndex<this._lt.length){e++,this._token=this._lt[this._ltIndex++],i=b[this._token.type];while(i.channel!==undefined&&a!==i.channel&&this._ltIndex<this._lt.length)this._token=this._lt[this._ltIndex++],i=b[this._token.type],e++;if((i.channel===undefined||a===i.channel)&&this._ltIndex<=this._lt.length){this._ltIndexCache.push(e);return this._token.type}}h=this._getToken(),h.type>-1&&!b[h.type].hide&&(h.channel=b[h.type].channel,this._token=h,this._lt.push(h),this._ltIndexCache.push(this._lt.length-this._ltIndex+e),this._lt.length>5&&this._lt.shift(),this._ltIndexCache.length>5&&this._ltIndexCache.shift(),this._ltIndex=this._lt.length),i=b[h.type];return i&&(i.hide||i.channel!==undefined&&a!==i.channel)?this.get(a):h.type},LA:function(a){var b=a,c;if(a>0){if(a>5)throw new Error("Too much lookahead.");while(b)c=this.get(),b--;while(b<a)this.unget(),b++}else if(a<0)if(this._lt[this._ltIndex+a])c=this._lt[this._ltIndex+a].type;else throw new Error("Too much lookbehind.");else c=this._token.type;return c},LT:function(a){this.LA(a);return this._lt[this._ltIndex+a-1]},peek:function(){return this.LA(1)},token:function(){return this._token},tokenName:function(a){return a<0||a>this._tokenData.length?"UNKNOWN_TOKEN":this._tokenData[a].name},tokenType:function(a){return this._tokenData[a]||-1},unget:function(){if(this._ltIndexCache.length)this._ltIndex-=this._ltIndexCache.pop(),this._token=this._lt[this._ltIndex-1];else throw new Error("Too much lookahead.")}},parserlib.util={StringReader:b,SyntaxError:c,SyntaxUnit:d,EventTarget:a,TokenStreamBase:e}})(),function(){function TokenStream(a){TokenStreamBase.call(this,a,Tokens)}function mix(a,b){for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return a}function isIdentStart(a){return a!=null&&(isNameStart(a)||/\-\\/.test(a))}function isNameChar(a){return a!=null&&(isNameStart(a)||/[0-9\-\\]/.test(a))}function isNameStart(a){return a!=null&&/[a-z_\u0080-\uFFFF\\]/i.test(a)}function isNewLine(a){return a!=null&&nl.test(a)}function isWhitespace(a){return a!=null&&/\s/.test(a)}function isDigit(a){return a!=null&&/\d/.test(a)}function isHexDigit(a){return a!=null&&h.test(a)}function SelectorSubPart(a,b,c,d){SyntaxUnit.call(this,a,c,d),this.type=b,this.args=[]}function SelectorPart(a,b,c,d,e){SyntaxUnit.call(this,c,d,e),this.elementName=a,this.modifiers=b}function Selector(a,b,c){SyntaxUnit.call(this,a.join(" "),b,c),this.parts=a}function PropertyValuePart(text,line,col){SyntaxUnit.apply(this,arguments),this.type="unknown";var temp;if(/^([+\-]?[\d\.]+)([a-z]+)$/i.test(text)){this.type="dimension",this.value=+RegExp.$1,this.units=RegExp.$2;switch(this.units.toLowerCase()){case"em":case"rem":case"ex":case"px":case"cm":case"mm":case"in":case"pt":case"pc":this.type="length";break;case"deg":case"rad":case"grad":this.type="angle";break;case"ms":case"s":this.type="time";break;case"hz":case"khz":this.type="frequency";break;case"dpi":case"dpcm":this.type="resolution"}}else/^([+\-]?[\d\.]+)%$/i.test(text)?(this.type="percentage",this.value=+RegExp.$1):/^([+\-]?[\d\.]+)%$/i.test(text)?(this.type="percentage",this.value=+RegExp.$1):/^([+\-]?\d+)$/i.test(text)?(this.type="integer",this.value=+RegExp.$1):/^([+\-]?[\d\.]+)$/i.test(text)?(this.type="number",this.value=+RegExp.$1):/^#([a-f0-9]{3,6})/i.test(text)?(this.type="color",temp=RegExp.$1,temp.length==3?(this.red=parseInt(temp.charAt(0)+temp.charAt(0),16),this.green=parseInt(temp.charAt(1)+temp.charAt(1),16),this.blue=parseInt(temp.charAt(2)+temp.charAt(2),16)):(this.red=parseInt(temp.substring(0,2),16),this.green=parseInt(temp.substring(2,4),16),this.blue=parseInt(temp.substring(4,6),16))):/^rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)/i.test(text)?(this.type="color",this.red=+RegExp.$1,this.green=+RegExp.$2,this.blue=+RegExp.$3):/^rgb\(\s*(\d+)%\s*,\s*(\d+)%\s*,\s*(\d+)%\s*\)/i.test(text)?(this.type="color",this.red=+RegExp.$1*255/100,this.green=+RegExp.$2*255/100,this.blue=+RegExp.$3*255/100):/^url\(["']?([^\)"']+)["']?\)/i.test(text)?(this.type="uri",this.uri=RegExp.$1):/^["'][^"']*["']/.test(text)?(this.type="string",this.value=eval(text)):Colors[text.toLowerCase()]?(this.type="color",temp=Colors[text.toLowerCase()].substring(1),this.red=parseInt(temp.substring(0,2),16),this.green=parseInt(temp.substring(2,4),16),this.blue=parseInt(temp.substring(4,6),16)):/^[\,\/]$/.test(text)?(this.type="operator",this.value=text):/^[a-z\-\u0080-\uFFFF][a-z0-9\-\u0080-\uFFFF]*$/i.test(text)&&(this.type="identifier",this.value=text)}function PropertyValue(a,b,c){SyntaxUnit.call(this,a.join(" "),b,c),this.parts=a}function PropertyName(a,b,c,d){SyntaxUnit.call(this,(b||"")+a,c,d),this.hack=b}function Parser(a){EventTarget.call(this),this.options=a||{},this._tokenStream=null}function MediaQuery(a,b,c,d,e){SyntaxUnit.call(this,(a?a+" ":"")+(b?b+" ":"")+c.join(" and "),d,e),this.modifier=a,this.mediaType=b,this.features=c}function MediaFeature(a,b){SyntaxUnit.call(this,"("+a+(b!==null?":"+b:"")+")",a.startLine,a.startCol),this.name=a,this.value=b}function Combinator(a,b,c){SyntaxUnit.call(this,a,b,c),this.type="unknown",/^\s+$/.test(a)?this.type="descendant":a==">"?this.type="child":a=="+"?this.type="adjacent-sibling":a=="~"&&(this.type="sibling")}var EventTarget=parserlib.util.EventTarget,TokenStreamBase=parserlib.util.TokenStreamBase,StringReader=parserlib.util.StringReader,SyntaxError=parserlib.util.SyntaxError,SyntaxUnit=parserlib.util.SyntaxUnit,Colors={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgrey:"#d3d3d3",lightgreen:"#90ee90",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370d8",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#d87093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"};Combinator.prototype=new SyntaxUnit,Combinator.prototype.constructor=Combinator;var Level1Properties={background:1,"background-attachment":1,"background-color":1,"background-image":1,"background-position":1,"background-repeat":1,border:1,"border-bottom":1,"border-bottom-width":1,"border-color":1,"border-left":1,"border-left-width":1,"border-right":1,"border-right-width":1,"border-style":1,"border-top":1,"border-top-width":1,"border-width":1,clear:1,color:1,display:1,"float":1,font:1,"font-family":1,"font-size":1,"font-style":1,"font-variant":1,"font-weight":1,height:1,"letter-spacing":1,"line-height":1,"list-style":1,"list-style-image":1,"list-style-position":1,"list-style-type":1,margin:1,"margin-bottom":1,"margin-left":1,"margin-right":1,"margin-top":1,padding:1,"padding-bottom":1,"padding-left":1,"padding-right":1,"padding-top":1,"text-align":1,"text-decoration":1,"text-indent":1,"text-transform":1,"vertical-align":1,"white-space":1,width:1,"word-spacing":1},Level2Properties={azimuth:1,"cue-after":1,"cue-before":1,cue:1,elevation:1,"pause-after":1,"pause-before":1,pause:1,"pitch-range":1,pitch:1,"play-during":1,richness:1,"speak-header":1,"speak-numeral":1,"speak-punctuation":1,speak:1,"speech-rate":1,stress:1,"voice-family":1,volume:1,orphans:1,"page-break-after":1,"page-break-before":1,"page-break-inside":1,widows:1,cursor:1,"outline-color":1,"outline-style":1,"outline-width":1,outline:1,"background-attachment":1,"background-color":1,"background-image":1,"background-position":1,"background-repeat":1,background:1,"border-collapse":1,"border-color":1,"border-spacing":1,"border-style":1,"border-top":1,"border-top-color":1,"border-top-style":1,"border-top-width":1,"border-width":1,border:1,bottom:1,"caption-side":1,clear:1,clip:1,color:1,content:1,"counter-increment":1,"counter-reset":1,direction:1,display:1,"empty-cells":1,"float":1,"font-family":1,"font-size":1,"font-style":1,"font-variant":1,"font-weight":1,font:1,height:1,left:1,"letter-spacing":1,"line-height":1,"list-style-image":1,"list-style-position":1,"list-style-type":1,"list-style":1,"margin-right":1,"margin-top":1,margin:1,"max-height":1,"max-width":1,"min-height":1,"min-width":1,overflow:1,"padding-top":1,padding:1,position:1,quotes:1,right:1,"table-layout":1,"text-align":1,"text-decoration":1,"text-indent":1,"text-transform":1,top:1,"unicode-bidi":1,"vertical-align":1,visibility:1,"white-space":1,width:1,"word-spacing":1,"z-index":1};MediaFeature.prototype=new SyntaxUnit,MediaFeature.prototype.constructor=MediaFeature,MediaQuery.prototype=new SyntaxUnit,MediaQuery.prototype.constructor=MediaQuery,Parser.prototype=function(){var a=new EventTarget,b,c={constructor:Parser,_stylesheet:function(){var a=this._tokenStream,b=null,c,d;this.fire("startstylesheet"),this._charset(),this._skipCruft();while(a.peek()==Tokens.IMPORT_SYM)this._import(),this._skipCruft();while(a.peek()==Tokens.NAMESPACE_SYM)this._namespace(),this._skipCruft();d=a.peek();while(d>Tokens.EOF){try{switch(d){case Tokens.MEDIA_SYM:this._media(),this._skipCruft();break;case Tokens.PAGE_SYM:this._page(),this._skipCruft();break;case Tokens.FONT_FACE_SYM:this._font_face(),this._skipCruft();break;case Tokens.KEYFRAMES_SYM:this._keyframes(),this._skipCruft();break;case Tokens.S:this._readWhitespace();break;default:if(!this._ruleset())switch(d){case Tokens.CHARSET_SYM:c=a.LT(1),this._charset(!1);throw new SyntaxError("@charset not allowed here.",c.startLine,c.startCol);case Tokens.IMPORT_SYM:c=a.LT(1),this._import(!1);throw new SyntaxError("@import not allowed here.",c.startLine,c.startCol);case Tokens.NAMESPACE_SYM:c=a.LT(1),this._namespace(!1);throw new SyntaxError("@namespace not allowed here.",c.startLine,c.startCol);default:a.get(),this._unexpectedToken(a.token())}}}catch(e){if(e instanceof SyntaxError&&!this.options.strict)this.fire({type:"error",error:e,message:e.message,line:e.line,col:e.col});else throw e}d=a.peek()}d!=Tokens.EOF&&this._unexpectedToken(a.token()),this.fire("endstylesheet")},_charset:function(a){var b=this._tokenStream,c,d,e,f;b.match(Tokens.CHARSET_SYM)&&(e=b.token().startLine,f=b.token().startCol,this._readWhitespace(),b.mustMatch(Tokens.STRING),d=b.token(),c=d.value,this._readWhitespace(),b.mustMatch(Tokens.SEMICOLON),a!==!1&&this.fire({type:"charset",charset:c,line:e,col:f}))},_import:function(a){var b=this._tokenStream,c,d,e,f=[];b.mustMatch(Tokens.IMPORT_SYM),e=b.token(),this._readWhitespace(),b.mustMatch([Tokens.STRING,Tokens.URI]),d=b.token().value.replace(/(?:url\()?["']([^"']+)["']\)?/,"$1"),this._readWhitespace(),f=this._media_query_list(),b.mustMatch(Tokens.SEMICOLON),this._readWhitespace(),a!==!1&&this.fire({type:"import",uri:d,media:f,line:e.startLine,col:e.startCol})},_namespace:function(a){var b=this._tokenStream,c,d,e,f;b.mustMatch(Tokens.NAMESPACE_SYM),c=b.token().startLine,d=b.token().startCol,this._readWhitespace(),b.match(Tokens.IDENT)&&(e=b.token().value,this._readWhitespace()),b.mustMatch([Tokens.STRING,Tokens.URI]),f=b.token().value.replace(/(?:url\()?["']([^"']+)["']\)?/,"$1"),this._readWhitespace(),b.mustMatch(Tokens.SEMICOLON),this._readWhitespace(),a!==!1&&this.fire({type:"namespace",prefix:e,uri:f,line:c,col:d})},_media:function(){var a=this._tokenStream,b,c,d;a.mustMatch(Tokens.MEDIA_SYM),b=a.token().startLine,c=a.token().startCol,this._readWhitespace(),d=this._media_query_list(),a.mustMatch(Tokens.LBRACE),this._readWhitespace(),this.fire({type:"startmedia",media:d,line:b,col:c});for(;;)if(a.peek()==Tokens.PAGE_SYM)this._page();else if(!this._ruleset())break;a.mustMatch(Tokens.RBRACE),this._readWhitespace(),this.fire({type:"endmedia",media:d,line:b,col:c})},_media_query_list:function(){var a=this._tokenStream,b=[];this._readWhitespace(),(a.peek()==Tokens.IDENT||a.peek()==Tokens.LPAREN)&&b.push(this._media_query());while(a.match(Tokens.COMMA))this._readWhitespace(),b.push(this._media_query());return b},_media_query:function(){var a=this._tokenStream,b=null,c=null,d=null,e=[];a.match(Tokens.IDENT)&&(c=a.token().value.toLowerCase(),c!="only"&&c!="not"?(a.unget(),c=null):d=a.token()),this._readWhitespace(),a.peek()==Tokens.IDENT?(b=this._media_type(),d===null&&(d=a.token())):a.peek()==Tokens.LPAREN&&(d===null&&(d=a.LT(1)),e.push(this._media_expression()));if(b===null&&e.length===0)return null;this._readWhitespace();while(a.match(Tokens.IDENT))a.token().value.toLowerCase()!="and"&&this._unexpectedToken(a.token()),this._readWhitespace(),e.push(this._media_expression());return new MediaQuery(c,b,e,d.startLine,d.startCol)},_media_type:function(){return this._media_feature()},_media_expression:function(){var a=this._tokenStream,b=null,c,d=null;a.mustMatch(Tokens.LPAREN),b=this._media_feature(),this._readWhitespace(),a.match(Tokens.COLON)&&(this._readWhitespace(),c=a.LT(1),d=this._expression()),a.mustMatch(Tokens.RPAREN),this._readWhitespace();return new MediaFeature(b,d?new SyntaxUnit(d,c.startLine,c.startCol):null)},_media_feature:function(){var a=this._tokenStream;a.mustMatch(Tokens.IDENT);return SyntaxUnit.fromToken(a.token())},_page:function(){var a=this._tokenStream,b,c,d=null,e=null;a.mustMatch(Tokens.PAGE_SYM),b=a.token().startLine,c=a.token().startCol,this._readWhitespace(),a.match(Tokens.IDENT)&&(d=a.token().value,d.toLowerCase()==="auto"&&this._unexpectedToken(a.token())),a.peek()==Tokens.COLON&&(e=this._pseudo_page()),this._readWhitespace(),this.fire({type:"startpage",id:d,pseudo:e,line:b,col:c}),this._readDeclarations(!0,!0),this.fire({type:"endpage",id:d,pseudo:e,line:b,col:c})},_margin:function(){var a=this._tokenStream,b,c,d=this._margin_sym();if(d){b=a.token().startLine,c=a.token().startCol,this.fire({type:"startpagemargin",margin:d,line:b,col:c}),this._readDeclarations(!0),this.fire({type:"endpagemargin",margin:d,line:b,col:c});return!0}return!1},_margin_sym:function(){var a=this._tokenStream;return a.match([Tokens.TOPLEFTCORNER_SYM,Tokens.TOPLEFT_SYM,Tokens.TOPCENTER_SYM,Tokens.TOPRIGHT_SYM,Tokens.TOPRIGHTCORNER_SYM,Tokens.BOTTOMLEFTCORNER_SYM,Tokens.BOTTOMLEFT_SYM,Tokens.BOTTOMCENTER_SYM,Tokens.BOTTOMRIGHT_SYM,Tokens.BOTTOMRIGHTCORNER_SYM,Tokens.LEFTTOP_SYM,Tokens.LEFTMIDDLE_SYM,Tokens.LEFTBOTTOM_SYM,Tokens.RIGHTTOP_SYM,Tokens.RIGHTMIDDLE_SYM,Tokens.RIGHTBOTTOM_SYM])?SyntaxUnit.fromToken(a.token()):null},_pseudo_page:function(){var a=this._tokenStream;a.mustMatch(Tokens.COLON),a.mustMatch(Tokens.IDENT);return a.token().value},_font_face:function(){var a=this._tokenStream,b,c;a.mustMatch(Tokens.FONT_FACE_SYM),b=a.token().startLine,c=a.token().startCol,this._readWhitespace(),this.fire({type:"startfontface",line:b,col:c}),this._readDeclarations(!0),this.fire({type:"endfontface",line:b,col:c})},_operator:function(){var a=this._tokenStream,b=null;a.match([Tokens.SLASH,Tokens.COMMA])&&(b=a.token(),this._readWhitespace());return b?PropertyValuePart.fromToken(b):null},_combinator:function(){var a=this._tokenStream,b=null,c;a.match([Tokens.PLUS,Tokens.GREATER,Tokens.TILDE])&&(c=a.token(),b=new Combinator(c.value,c.startLine,c.startCol),this._readWhitespace());return b},_unary_operator:function(){var a=this._tokenStream;return a.match([Tokens.MINUS,Tokens.PLUS])?a.token().value:null},_property:function(){var a=this._tokenStream,b=null,c=null,d,e,f,g;a.peek()==Tokens.STAR&&this.options.starHack&&(a.get(),e=a.token(),c=e.value,f=e.startLine,g=e.startCol),a.match(Tokens.IDENT)&&(e=a.token(),d=e.value,d.charAt(0)=="_"&&this.options.underscoreHack&&(c="_",d=d.substring(1)),b=new PropertyName(d,c,f||e.startLine,g||e.startCol),this._readWhitespace());return b},_ruleset:function(){var a=this._tokenStream,b,c;try{c=this._selectors_group()}catch(d){if(!(d instanceof SyntaxError&&!this.options.strict))throw d;this.fire({type:"error",error:d,message:d.message,line:d.line,col:d.col}),b=a.advance([Tokens.RBRACE]);if(b!=Tokens.RBRACE)throw d;return!0}c&&(this.fire({type:"startrule",selectors:c,line:c[0].line,col:c[0].col}),this._readDeclarations(!0),this.fire({type:"endrule",selectors:c,line:c[0].line,col:c[0].col}));return c},_selectors_group:function(){var a=this._tokenStream,b=[],c;c=this._selector();if(c!==null){b.push(c);while(a.match(Tokens.COMMA))this._readWhitespace(),c=this._selector(),c!==null?b.push(c):this._unexpectedToken(a.LT(1))}return b.length?b:null},_selector:function(){var a=this._tokenStream,b=[],c=null,d=null,e=null;c=this._simple_selector_sequence();if(c===null)return null;b.push(c);do{d=this._combinator();if(d!==null)b.push(d),c=this._simple_selector_sequence(),c===null?this._unexpectedToken(this.LT(1)):b.push(c);else if(this._readWhitespace())e=new Combinator(a.token().value,a.token().startLine,a.token().startCol),d=this._combinator(),c=this._simple_selector_sequence(),c===null?d!==null&&this._unexpectedToken(a.LT(1)):(d!==null?b.push(d):b.push(e),b.push(c));else break}while(!0);return new Selector(b,b[0].line,b[0].col)},_simple_selector_sequence:function(){var a=this._tokenStream,b=null,c=[],d="",e=[function(){return a.match(Tokens.HASH)?new SelectorSubPart(a.token().value,"id",a.token().startLine,a.token().startCol):null},this._class,this._attrib,this._pseudo,this._negation],f=0,g=e.length,h=null,i=!1,j,k;j=a.LT(1).startLine,k=a.LT(1).startCol,b=this._type_selector(),b||(b=this._universal()),b!==null&&(d+=b);for(;;){if(a.peek()===Tokens.S)break;while(f<g&&h===null)h=e[f++].call(this);if(h===null){if(d==="")return null;break}f=0,c.push(h),d+=h.toString(),h=null}return d!==""?new SelectorPart(b,c,d,j,k):null},_type_selector:function(){var a=this._tokenStream,b=this._namespace_prefix(),c=this._element_name();if(!c){b&&(a.unget(),b.length>1&&a.unget());return null}b&&(c.text=b+c.text,c.col-=b.length);return c},_class:function(){var a=this._tokenStream,b;if(a.match(Tokens.DOT)){a.mustMatch(Tokens.IDENT),b=a.token();return new SelectorSubPart("."+b.value,"class",b.startLine,b.startCol-1)}return null},_element_name:function(){var a=this._tokenStream,b;if(a.match(Tokens.IDENT)){b=a.token();return new SelectorSubPart(b.value,"elementName",b.startLine,b.startCol)}return null},_namespace_prefix:function(){var a=this._tokenStream,b="";if(a.LA(1)===Tokens.PIPE||a.LA(2)===Tokens.PIPE)a.match([Tokens.IDENT,Tokens.STAR])&&(b+=a.token().value),a.mustMatch(Tokens.PIPE),b+="|";return b.length?b:null},_universal:function(){var a=this._tokenStream,b="",c;c=this._namespace_prefix(),c&&(b+=c),a.match(Tokens.STAR)&&(b+="*");return b.length?b:null},_attrib:function(){var a=this._tokenStream,b=null,c,d;if(a.match(Tokens.LBRACKET)){d=a.token(),b=d.value,b+=this._readWhitespace(),c=this._namespace_prefix(),c&&(b+=c),a.mustMatch(Tokens.IDENT),b+=a.token().value,b+=this._readWhitespace(),a.match([Tokens.PREFIXMATCH,Tokens.SUFFIXMATCH,Tokens.SUBSTRINGMATCH,Tokens.EQUALS,Tokens.INCLUDES,Tokens.DASHMATCH])&&(b+=a.token().value,b+=this._readWhitespace(),a.mustMatch([Tokens.IDENT,Tokens.STRING]),b+=a.token().value,b+=this._readWhitespace()),a.mustMatch(Tokens.RBRACKET);return new SelectorSubPart(b+"]","attribute",d.startLine,d.startCol)}return null},_pseudo:function(){var a=this._tokenStream,b=null,c=":",d,e;a.match(Tokens.COLON)&&(a.match(Tokens.COLON)&&(c+=":"),a.match(Tokens.IDENT)?(b=a.token().value,d=a.token().startLine,e=a.token().startCol-c.length):a.peek()==Tokens.FUNCTION&&(d=a.LT(1).startLine,e=a.LT(1).startCol-c.length,b=this._functional_pseudo()),b&&(b=new SelectorSubPart(c+b,"pseudo",d,e)));return b},_functional_pseudo:function(){var a=this._tokenStream,b=null;a.match(Tokens.FUNCTION)&&(b=a.token().value,b+=this._readWhitespace(),b+=this._expression(),a.mustMatch(Tokens.RPAREN),b+=")");return b},_expression:function(){var a=this._tokenStream,b="";while(a.match([Tokens.PLUS,Tokens.MINUS,Tokens.DIMENSION,Tokens.NUMBER,Tokens.STRING,Tokens.IDENT,Tokens.LENGTH,Tokens.FREQ,Tokens.ANGLE,Tokens.TIME,Tokens.RESOLUTION]))b+=a.token().value,b+=this._readWhitespace();return b.length?b:null},_negation:function(){var a=this._tokenStream,b,c,d="",e,f=null;a.match(Tokens.NOT)&&(d=a.token().value,b=a.token().startLine,c=a.token().startCol,d+=this._readWhitespace(),e=this._negation_arg(),d+=e,d+=this._readWhitespace(),a.match(Tokens.RPAREN),d+=a.token().value,f=new SelectorSubPart(d,"not",b,c),f.args.push(e));return f},_negation_arg:function(){var a=this._tokenStream,b=[this._type_selector,this._universal,function(){return a.match(Tokens.HASH)?new SelectorSubPart(a.token().value,"id",a.token().startLine,a.token().startCol):null},this._class,this._attrib,this._pseudo],c=null,d=0,e=b.length,f,g,h,i;g=a.LT(1).startLine,h=a.LT(1).startCol;while(d<e&&c===null)c=b[d].call(this),d++;c===null&&this._unexpectedToken(a.LT(1)),c.type=="elementName"?i=new SelectorPart(c,[],c.toString(),g,h):i=new SelectorPart(null,[c],c.toString(),g,h);return i},_declaration:function(){var a=this._tokenStream,b=null,c=null,d=null;b=this._property();if(b!==null){a.mustMatch(Tokens.COLON),this._readWhitespace(),c=this._expr(),(!c||c.length===0)&&this._unexpectedToken(a.LT(1)),d=this._prio(),this.fire({type:"property",property:b,value:c,important:d,line:b.line,col:b.col});return!0}return!1},_prio:function(){var a=this._tokenStream,b=a.match(Tokens.IMPORTANT_SYM);this._readWhitespace();return b},_expr:function(){var a=this._tokenStream,b=[],c=null,d=null;c=this._term();if(c!==null){b.push(c);do{d=this._operator(),d&&b.push(d),c=this._term();if(c===null)break;b.push(c)}while(!0)}return b.length>0?new PropertyValue(b,b[0].startLine,b[0].startCol):null},_term:function(){var a=this._tokenStream,b=null,c=null,d,e;b=this._unary_operator(),b!==null&&(d=a.token().startLine,e=a.token().startCol),a.peek()==Tokens.IE_FUNCTION&&this.options.ieFilters?(c=this._ie_function(),b===null&&(d=a.token().startLine,e=a.token().startCol)):a.match([Tokens.NUMBER,Tokens.PERCENTAGE,Tokens.LENGTH,Tokens.ANGLE,Tokens.TIME,Tokens.FREQ,Tokens.STRING,Tokens.IDENT,Tokens.URI,Tokens.UNICODE_RANGE])?(c=a.token().value,b===null&&(d=a.token().startLine,e=a.token().startCol),this._readWhitespace()):(c=this._hexcolor(),c===null?(b===null&&(d=a.LT(1).startLine,e=a.LT(1).startCol),c===null&&(a.LA(3)==Tokens.EQUALS&&this.options.ieFilters?c=this._ie_function():c=this._function())):b===null&&(d=a.token().startLine,e=a.token().startCol));return c!==null?new PropertyValuePart(b!==null?b+c:c,d,e):null},_function:function(){var a=this._tokenStream,b=null,c=null;a.match(Tokens.FUNCTION)&&(b=a.token().value,this._readWhitespace(),c=this._expr(),a.match(Tokens.RPAREN),b+=c+")",this._readWhitespace());return b},_ie_function:function(){var a=this._tokenStream,b=null,c=null,d;if(a.match([Tokens.IE_FUNCTION,Tokens.FUNCTION])){b=a.token().value;do{this._readWhitespace()&&(b+=a.token().value),a.LA(0)==Tokens.COMMA&&(b+=a.token().value),a.match(Tokens.IDENT),b+=a.token().value,a.match(Tokens.EQUALS),b+=a.token().value,d=a.peek();while(d!=Tokens.COMMA&&d!=Tokens.S&&d!=Tokens.RPAREN)a.get(),b+=a.token().value,d=a.peek()}while(a.match([Tokens.COMMA,Tokens.S]));a.match(Tokens.RPAREN),b+=")",this._readWhitespace()}return b},_hexcolor:function(){var a=this._tokenStream,b,c=null;if(a.match(Tokens.HASH)){b=a.token(),c=b.value;if(!/#[a-f0-9]{3,6}/i.test(c))throw new SyntaxError("Expected a hex color but found '"+c+"' at line "+b.startLine+", col "+b.startCol+".",b.startLine,b.startCol);this._readWhitespace()}return c},_keyframes:function(){var a=this._tokenStream,b,c,d;a.mustMatch(Tokens.KEYFRAMES_SYM),this._readWhitespace(),d=this._keyframe_name(),this._readWhitespace(),a.mustMatch(Tokens.LBRACE),this.fire({type:"startkeyframes",name:d,line:d.line,col:d.col}),this._readWhitespace(),c=a.peek();while(c==Tokens.IDENT||c==Tokens.PERCENTAGE)this._keyframe_rule(),this._readWhitespace(),c=a.peek();this.fire({type:"endkeyframes",name:d,line:d.line,col:d.col}),this._readWhitespace(),a.mustMatch(Tokens.RBRACE)},_keyframe_name:function(){var a=this._tokenStream,b;a.mustMatch([Tokens.IDENT,Tokens.STRING]);return SyntaxUnit.fromToken(a.token())},_keyframe_rule:function(){var a=this._tokenStream,b,c=this._key_list();this.fire({type:"startkeyframerule",keys:c,line:c[0].line,col:c[0].col}),this._readDeclarations(!0),this.fire({type:"endkeyframerule",keys:c,line:c[0].line,col:c[0].col})},_key_list:function(){var a=this._tokenStream,b,c,d=[];d.push(this._key()),this._readWhitespace();while(a.match(Tokens.COMMA))this._readWhitespace(),d.push(this._key()),this._readWhitespace();return d},_key:function(){var a=this._tokenStream,b;if(a.match(Tokens.PERCENTAGE))return SyntaxUnit.fromToken(a.token());if(a.match(Tokens.IDENT)){b=a.token();if(/from|to/i.test(b.value))return SyntaxUnit.fromToken(b);a.unget()}this._unexpectedToken(a.LT(1))},_skipCruft:function(){while(this._tokenStream.match([Tokens.S,Tokens.CDO,Tokens.CDC]));},_readDeclarations:function(a,b){var c=this._tokenStream,d;this._readWhitespace(),a&&c.mustMatch(Tokens.LBRACE),this._readWhitespace();try{for(;;){if(!b||!this._margin()){if(!this._declaration())break;if(!c.match(Tokens.SEMICOLON))break}this._readWhitespace()}c.mustMatch(Tokens.RBRACE),this._readWhitespace()}catch(e){if(!(e instanceof SyntaxError&&!this.options.strict))throw e;this.fire({type:"error",error:e,message:e.message,line:e.line,col:e.col}),d=c.advance([Tokens.SEMICOLON,Tokens.RBRACE]);if(d==Tokens.SEMICOLON)this._readDeclarations(!1,b);else if(d!=Tokens.RBRACE)throw e}},_readWhitespace:function(){var a=this._tokenStream,b="";while(a.match(Tokens.S))b+=a.token().value;return b},_unexpectedToken:function(a){throw new SyntaxError("Unexpected token '"+a.value+"' at line "+a.startLine+", col "+a.startCol+".",a.startLine,a.startCol)},_verifyEnd:function(){this._tokenStream.LA(1)!=Tokens.EOF&&this._unexpectedToken(this._tokenStream.LT(1))},parse:function(a){this._tokenStream=new TokenStream(a,Tokens),this._stylesheet()},parseStyleSheet:function(a){return this.parse(a)},parseMediaQuery:function(a){this._tokenStream=new TokenStream(a,Tokens);var b=this._media_query();this._verifyEnd();return b},parsePropertyValue:function(a){this._tokenStream=new TokenStream(a,Tokens),this._readWhitespace();var b=this._expr();this._readWhitespace(),this._verifyEnd();return b},parseRule:function(a){this._tokenStream=new TokenStream(a,Tokens),this._readWhitespace();var b=this._ruleset();this._readWhitespace(),this._verifyEnd();return b},parseSelector:function(a){this._tokenStream=new TokenStream(a,Tokens),this._readWhitespace();var b=this._selector();this._readWhitespace(),this._verifyEnd();return b}};for(b in c)a[b]=c[b];return a}(),PropertyName.prototype=new SyntaxUnit,PropertyName.prototype.constructor=PropertyName,PropertyValue.prototype=new SyntaxUnit,PropertyValue.prototype.constructor=PropertyValue,PropertyValuePart.prototype=new SyntaxUnit,PropertyValuePart.prototype.constructor=PropertyValue,PropertyValuePart.fromToken=function(a){return new PropertyValuePart(a.value,a.startLine,a.startCol)},Selector.prototype=new SyntaxUnit,Selector.prototype.constructor=Selector,SelectorPart.prototype=new SyntaxUnit,SelectorPart.prototype.constructor=SelectorPart,SelectorSubPart.prototype=new SyntaxUnit,SelectorSubPart.prototype.constructor=SelectorSubPart;var h=/^[0-9a-fA-F]$/,nonascii=/^[\u0080-\uFFFF]$/,nl=/\n|\r\n|\r|\f/;TokenStream.prototype=mix(new TokenStreamBase,{_getToken:function(a){var b,c=this._reader,d=null,e=c.getLine(),f=c.getCol();b=c.read();while(b){switch(b){case"/":c.peek()=="*"?d=this.commentToken(b,e,f):d=this.charToken(b,e,f);break;case"|":case"~":case"^":case"$":case"*":c.peek()=="="?d=this.comparisonToken(b,e,f):d=this.charToken(b,e,f);break;case'"':case"'":d=this.stringToken(b,e,f);break;case"#":isNameChar(c.peek())?d=this.hashToken(b,e,f):d=this.charToken(b,e,f);break;case".":isDigit(c.peek())?d=this.numberToken(b,e,f):d=this.charToken(b,e,f);break;case"-":c.peek()=="-"?d=this.htmlCommentEndToken(b,e,f):isNameStart(c.peek())?d=this.identOrFunctionToken(b,e,f):d=this.charToken(b,e,f);break;case"!":d=this.importantToken(b,e,f);break;case"@":d=this.atRuleToken(b,e,f);break;case":":d=this.notToken(b,e,f);break;case"<":d=this.htmlCommentStartToken(b,e,f);break;case"U":case"u":if(c.peek()=="+"){d=this.unicodeRangeToken(b,e,f);break};default:isDigit(b)?d=this.numberToken(b,e,f):isWhitespace(b)?d=this.whitespaceToken(b,e,f):isIdentStart(b)?d=this.identOrFunctionToken(b,e,f):d=this.charToken(b,e,f)}break}!d&&b==null&&(d=this.createToken(Tokens.EOF,null,e,f));return d},createToken:function(a,b,c,d,e){var f=this._reader;e=e||{};return{value:b,type:a,channel:e.channel,hide:e.hide||!1,startLine:c,startCol:d,endLine:f.getLine(),endCol:f.getCol()}},atRuleToken:function(a,b,c){var d=a,e=this._reader,f=Tokens.CHAR,g=!1,h,i;e.mark(),h=this.readName(),d=a+h,f=Tokens.type(d.toLowerCase());if(f==Tokens.CHAR||f==Tokens.UNKNOWN)f=Tokens.CHAR,d=a,e.reset();return this.createToken(f,d,b,c)},charToken:function(a,b,c){var d=Tokens.type(a);d==-1&&(d=Tokens.CHAR);return this.createToken(d,a,b,c)},commentToken:function(a,b,c){var d=this._reader,e=this.readComment(a);return this.createToken(Tokens.COMMENT,e,b,c)},comparisonToken:function(a,b,c){var d=this._reader,e=a+d.read(),f=Tokens.type(e)||Tokens.CHAR;return this.createToken(f,e,b,c)},hashToken:function(a,b,c){var d=this._reader,e=this.readName(a);return this.createToken(Tokens.HASH,e,b,c)},htmlCommentStartToken:function(a,b,c){var d=this._reader,e=a;d.mark(),e+=d.readCount(3);if(e=="<!--")return this.createToken(Tokens.CDO,e,b,c);d.reset();return this.charToken(a,b,c)},htmlCommentEndToken:function(a,b,c){var d=this._reader,e=a;d.mark(),e+=d.readCount(2);if(e=="-->")return this.createToken(Tokens.CDC,e,b,c);d.reset();return this.charToken(a,b,c)},identOrFunctionToken:function(a,b,c){var d=this._reader,e=this.readName(a),f=Tokens.IDENT;d.peek()=="("?(e+=d.read(),e.toLowerCase()=="url("?(f=Tokens.URI,e=this.readURI(e),e.toLowerCase()=="url("&&(f=Tokens.FUNCTION)):f=Tokens.FUNCTION):d.peek()==":"&&e.toLowerCase()=="progid"&&(e+=d.readTo("("),f=Tokens.IE_FUNCTION);return this.createToken(f,e,b,c)},importantToken:function(a,b,c){var d=this._reader,e=a,f=Tokens.CHAR,g,h;d.mark(),h=d.read();while(h){if(h=="/"){if(d.peek()!="*")break;g=this.readComment(h);if(g=="")break}else if(isWhitespace(h))e+=h+this.readWhitespace();else{if(/i/i.test(h)){g=d.readCount(8),/mportant/i.test(g)&&(e+=h+g,f=Tokens.IMPORTANT_SYM);break}break}h=d.read()}if(f==Tokens.CHAR){d.reset();return this.charToken(a,b,c)}return this.createToken(f,e,b,c)},notToken:function(a,b,c){var d=this._reader,e=a;d.mark(),e+=d.readCount(4);if(e.toLowerCase()==":not(")return this.createToken(Tokens.NOT,e,b,c);d.reset();return this.charToken(a,b,c)},numberToken:function(a,b,c){var d=this._reader,e=this.readNumber(a),f,g=Tokens.NUMBER,h=d.peek();isIdentStart(h)?(f=this.readName(d.read()),e+=f,/^em$|^ex$|^px$|^gd$|^rem$|^vw$|^vh$|^vm$|^ch$|^cm$|^mm$|^in$|^pt$|^pc$/i.test(f)?g=Tokens.LENGTH:/^deg|^rad$|^grad$/i.test(f)?g=Tokens.ANGLE:/^ms$|^s$/i.test(f)?g=Tokens.TIME:/^hz$|^khz$/i.test(f)?g=Tokens.FREQ:/^dpi$|^dpcm$/i.test(f)?g=Tokens.RESOLUTION:g=Tokens.DIMENSION):h=="%"&&(e+=d.read(),g=Tokens.PERCENTAGE);return this.createToken(g,e,b,c)},stringToken:function(a,b,c){var d=a,e=a,f=this._reader,g=a,h=Tokens.STRING,i=f.read();while(i){e+=i;if(i==d&&g!="\\")break;if(isNewLine(f.peek())&&i!="\\"){h=Tokens.INVALID;break}g=i,i=f.read()}i==null&&(h=Tokens.INVALID);return this.createToken(h,e,b,c)},unicodeRangeToken:function(a,b,c){var d=this._reader,e=a,f,g=Tokens.CHAR;d.peek()=="+"&&(d.mark(),e+=d.read(),e+=this.readUnicodeRangePart(!0),e.length==2?d.reset():(g=Tokens.UNICODE_RANGE,e.indexOf("?")==-1&&d.peek()=="-"&&(d.mark(),f=d.read(),f+=this.readUnicodeRangePart(!1),f.length==1?d.reset():e+=f)));return this.createToken(g,e,b,c)},whitespaceToken:function(a,b,c){var d=this._reader,e=a+this.readWhitespace();return this.createToken(Tokens.S,e,b,c)},readUnicodeRangePart:function(a){var b=this._reader,c="",d=b.peek();while(isHexDigit(d)&&c.length<6)b.read(),c+=d,d=b.peek();if(a)while(d=="?"&&c.length<6)b.read(),c+=d,d=b.peek();return c},readWhitespace:function(){var a=this._reader,b="",c=a.peek();while(isWhitespace(c))a.read(),b+=c,c=a.peek();return b},readNumber:function(a){var b=this._reader,c=a,d=a==".",e=b.peek();while(e){if(isDigit(e))c+=b.read();else{if(e!=".")break;if(d)break;d=!0,c+=b.read()}e=b.peek()}return c},readString:function(){var a=this._reader,b=a.read(),c=b,d=b,e=a.peek();while(e){e=a.read(),c+=e;if(e==b&&d!="\\")break;if(isNewLine(a.peek())&&e!="\\"){c="";break}d=e,e=a.peek()}e==null&&(c="");return c},readURI:function(a){var b=this._reader,c=a,d="",e=b.peek();b.mark();while(e&&isWhitespace(e))b.read(),e=b.peek();e=="'"||e=='"'?d=this.readString():d=this.readURL(),e=b.peek();while(e&&isWhitespace(e))b.read(),e=b.peek();d==""||e!=")"?(c=a,b.reset()):c+=d+b.read();return c},readURL:function(){var a=this._reader,b="",c=a.peek();while(/^[!#$%&\\*-~]$/.test(c))b+=a.read(),c=a.peek();return b},readName:function(a){var b=this._reader,c=a||"",d=b.peek();for(;;)if(d=="\\")c+=this.readEscape(b.read()),d=b.peek();else if(d&&isNameChar(d))c+=b.read(),d=b.peek();else break;return c},readEscape:function(a){var b=this._reader,c=a||"",d=0,e=b.peek();if(isHexDigit(e))do c+=b.read(),e=b.peek();while(e&&isHexDigit(e)&&++d<6);c.length==3&&/\s/.test(e)||c.length==7||c.length==1?b.read():e="";return c+e},readComment:function(a){var b=this._reader,c=a||"",d=b.read();if(d=="*"){while(d){c+=d;if(d=="*"&&b.peek()=="/"){c+=b.read();break}d=b.read()}return c}return""}});var Tokens=[{name:"CDO"},{name:"CDC"},{name:"S",whitespace:!0},{name:"COMMENT",comment:!0,hide:!0,channel:"comment"},{name:"INCLUDES",text:"~="},{name:"DASHMATCH",text:"|="},{name:"PREFIXMATCH",text:"^="},{name:"SUFFIXMATCH",text:"$="},{name:"SUBSTRINGMATCH",text:"*="},{name:"STRING"},{name:"IDENT"},{name:"HASH"},{name:"IMPORT_SYM",text:"@import"},{name:"PAGE_SYM",text:"@page"},{name:"MEDIA_SYM",text:"@media"},{name:"FONT_FACE_SYM",text:"@font-face"},{name:"CHARSET_SYM",text:"@charset"},{name:"NAMESPACE_SYM",text:"@namespace"},{name:"KEYFRAMES_SYM",text:["@keyframes","@-webkit-keyframes","@-moz-keyframes"]},{name:"IMPORTANT_SYM"},{name:"LENGTH"},{name:"ANGLE"},{name:"TIME"},{name:"FREQ"},{name:"DIMENSION"},{name:"PERCENTAGE"},{name:"NUMBER"},{name:"URI"},{name:"FUNCTION"},{name:"UNICODE_RANGE"},{name:"INVALID"},{name:"PLUS",text:"+"},{name:"GREATER",text:">"},{name:"COMMA",text:","},{name:"TILDE",text:"~"},{name:"NOT"},{name:"TOPLEFTCORNER_SYM",text:"@top-left-corner"},{name:"TOPLEFT_SYM",text:"@top-left"},{name:"TOPCENTER_SYM",text:"@top-center"},{name:"TOPRIGHT_SYM",text:"@top-right"},{name:"TOPRIGHTCORNER_SYM",text:"@top-right-corner"},{name:"BOTTOMLEFTCORNER_SYM",text:"@bottom-left-corner"},{name:"BOTTOMLEFT_SYM",text:"@bottom-left"},{name:"BOTTOMCENTER_SYM",text:"@bottom-center"},{name:"BOTTOMRIGHT_SYM",text:"@bottom-right"},{name:"BOTTOMRIGHTCORNER_SYM",text:"@bottom-right-corner"},{name:"LEFTTOP_SYM",text:"@left-top"},{name:"LEFTMIDDLE_SYM",text:"@left-middle"},{name:"LEFTBOTTOM_SYM",text:"@left-bottom"},{name:"RIGHTTOP_SYM",text:"@right-top"},{name:"RIGHTMIDDLE_SYM",text:"@right-middle"},{name:"RIGHTBOTTOM_SYM",text:"@right-bottom"},{name:"RESOLUTION",state:"media"},{name:"IE_FUNCTION"},{name:"CHAR"},{name:"PIPE",text:"|"},{name:"SLASH",text:"/"},{name:"MINUS",text:"-"},{name:"STAR",text:"*"},{name:"LBRACE",text:"{"},{name:"RBRACE",text:"}"},{name:"LBRACKET",text:"["},{name:"RBRACKET",text:"]"},{name:"EQUALS",text:"="},{name:"COLON",text:":"},{name:"SEMICOLON",text:";"},{name:"LPAREN",text:"("},{name:"RPAREN",text:")"},{name:"DOT",text:"."}];(function(){var a=[],b={};Tokens.UNKNOWN=-1,Tokens.unshift({name:"EOF"});for(var c=0,d=Tokens.length;c<d;c++){a.push(Tokens[c].name),Tokens[Tokens[c].name]=c;if(Tokens[c].text)if(Tokens[c].text instanceof Array)for(var e=0;e<Tokens[c].text.length;e++)b[Tokens[c].text[e]]=c;else b[Tokens[c].text]=c}Tokens.name=function(b){return a[b]},Tokens.type=function(a){return b[a]||-1}})(),parserlib.css={Colors:Colors,Combinator:Combinator,Parser:Parser,PropertyName:PropertyName,PropertyValue:PropertyValue,PropertyValuePart:PropertyValuePart,MediaFeature:MediaFeature,MediaQuery:MediaQuery,Selector:Selector,SelectorPart:SelectorPart,SelectorSubPart:SelectorSubPart,TokenStream:TokenStream,Tokens:Tokens}}();var CSSLint=function(){var a=[],b=[],c=new parserlib.util.EventTarget;c.version="@VERSION@",c.addRule=function(b){a.push(b),a[b.id]=b},c.clearRules=function(){a=[]},c.addFormatter=function(a){b[a.id]=a},c.getFormatter=function(a){return b[a]},c.format=function(a,b,c){var d=this.getFormatter(c),e=null;d&&(e=d.startFormat(),e+=d.formatResults(a,b),e+=d.endFormat());return e},c.hasFormat=function(a){return b.hasOwnProperty(a)},c.verify=function(b,c){var d=0,e=a.length,f,g,h=new parserlib.css.Parser({starHack:!0,ieFilters:!0,underscoreHack:!0,strict:!1});g=b.split(/\n\r?/g),f=new Reporter(g);if(!c)while(d<e)a[d++].init(h,f);else{c.errors=1;for(d in c)c.hasOwnProperty(d)&&a[d]&&a[d].init(h,f)}try{h.parse(b)}catch(i){f.error("Fatal error, cannot continue: "+i.message,i.line,i.col)}return{messages:f.messages,stats:f.stats}};return c}();Reporter.prototype={constructor:Reporter,error:function(a,b,c,d){this.messages.push({type:"error",line:b,col:c,message:a,evidence:this.lines[b-1],rule:d})},warn:function(a,b,c,d){this.messages.push({type:"warning",line:b,col:c,message:a,evidence:this.lines[b-1],rule:d})},info:function(a,b,c,d){this.messages.push({type:"info",line:b,col:c,message:a,evidence:this.lines[b-1],rule:d})},rollupError:function(a,b){this.messages.push({type:"error",rollup:!0,message:a,rule:b})},rollupWarn:function(a,b){this.messages.push({type:"warning",rollup:!0,message:a,rule:b})},stat:function(a,b){this.stats[a]=b}},CSSLint.addRule({id:"adjoining-classes",name:"Adjoining Classes",desc:"Don't use adjoining classes.",browsers:"IE6",init:function(a,b){var c=this;a.addListener("startrule",function(a){var d=a.selectors,e,f,g,h,i,j,k;for(i=0;i<d.length;i++){e=d[i];for(j=0;j<e.parts.length;j++){f=e.parts[j];if(f instanceof parserlib.css.SelectorPart){h=0;for(k=0;k<f.modifiers.length;k++)g=f.modifiers[k],g.type=="class"&&h++,h>1&&b.warn("Don't use adjoining classes.",f.line,f.col,c)}}}})}}),CSSLint.addRule({id:"box-model",name:"Box Model",desc:"Don't use width or height when using padding or border.",browsers:"All",init:function(a,b){var c=this,d={border:1,"border-left":1,"border-right":1,padding:1,"padding-left":1,"padding-right":1},e={border:1,"border-bottom":1,"border-top":1,padding:1,"padding-bottom":1,"padding-top":1},f;a.addListener("startrule",function(){f={}}),a.addListener("property",function(a){var b=a.property.text.toLowerCase();if(e[b]||d[b])!/^0\S*$/.test(a.value)&&(b!="border"||a.value!="none")&&(f[b]={line:a.property.line,col:a.property.col,value:a.value});else if(b=="width"||b=="height")f[b]=1}),a.addListener("endrule",function(){var a;if(f.height)for(a in e)e.hasOwnProperty(a)&&f[a]&&(a!="padding"||f[a].value.parts.length!=2||f[a].value.parts[0].value!=0)&&b.warn("Broken box model: using height with "+a+".",f[a].line,f[a].col,c);if(f.width)for(a in d)d.hasOwnProperty(a)&&f[a]&&(a!="padding"||f[a].value.parts.length!=2||f[a].value.parts[1].value!=0)&&b.warn("Broken box model: using width with "+a+".",f[a].line,f[a].col,c)})}}),CSSLint.addRule({id:"compatible-vendor-prefixes",name:"Compatible Vendor Prefixes",desc:"Include all compatible vendor prefixes to reach a wider range of users.",browsers:"All",init:function(a,b){var c=this,d,e,f,g,h,i,j,k=Array.prototype.push,l=[];d={animation:"webkit moz","animation-delay":"webkit moz","animation-direction":"webkit moz","animation-duration":"webkit moz","animation-fill-mode":"webkit moz","animation-iteration-count":"webkit moz","animation-name":"webkit moz","animation-play-state":"webkit moz","animation-timing-function":"webkit moz",appearance:"webkit moz","border-end":"webkit moz","border-end-color":"webkit moz","border-end-style":"webkit moz","border-end-width":"webkit moz","border-image":"webkit moz o","border-radius":"webkit moz","border-start":"webkit moz","border-start-color":"webkit moz","border-start-style":"webkit moz","border-start-width":"webkit moz","box-align":"webkit moz ms","box-direction":"webkit moz ms","box-flex":"webkit moz ms","box-lines":"webkit ms","box-ordinal-group":"webkit moz ms","box-orient":"webkit moz ms","box-pack":"webkit moz ms","box-sizing":"webkit moz","box-shadow":"webkit moz","column-count":"webkit moz","column-gap":"webkit moz","column-rule":"webkit moz","column-rule-color":"webkit moz","column-rule-style":"webkit moz","column-rule-width":"webkit moz","column-width":"webkit moz",hyphens:"epub moz","line-break":"webkit ms","margin-end":"webkit moz","margin-start":"webkit moz","marquee-speed":"webkit wap","marquee-style":"webkit wap","padding-end":"webkit moz","padding-start":"webkit moz","tab-size":"moz o","text-size-adjust":"webkit ms",transform:"webkit moz ms o","transform-origin":"webkit moz ms o",transition:"webkit moz o","transition-delay":"webkit moz o","transition-duration":"webkit moz o","transition-property":"webkit moz o","transition-timing-function":"webkit moz o","user-modify":"webkit moz","user-select":"webkit moz","word-break":"epub ms","writing-mode":"epub ms"};for(f in d)if(d.hasOwnProperty(f)){g=[],h=d[f].split(" ");for(i=0,j=h.length;i<j;i++)g.push("-"+h[i]+"-"+f);d[f]=g,k.apply(l,g)}a.addListener("startrule",function(){e=[]}),a.addListener("property",function(a){var b=a.property.text;l.indexOf(b)>-1&&e.push(b)}),a.addListener("endrule",function(a){if(!!e.length){var f={},g,h,i,j,k,l,m,n,o,p;for(g=0,h=e.length;g<h;g++){i=e[g];for(j in d)d.hasOwnProperty(j)&&(k=d[j],k.indexOf(i)>-1&&(f[j]===undefined&&(f[j]={full:k.slice(0),actual:[]}),f[j].actual.indexOf(i)===-1&&f[j].actual.push(i)))}for(j in f)if(f.hasOwnProperty(j)){l=f[j],m=l.full,n=l.actual;if(m.length>n.length)for(g=0,h=m.length;g<h;g++)o=m[g],n.indexOf(o)===-1&&(p=n.length===1?n[0]:n.length==2?n.join(" and "):n.join(", "),b.warn("The property "+o+" is compatible with "+p+" and should be included as well.",a.selectors[0].line,a.selectors[0].col,c))}}})}}),CSSLint.addRule({id:"display-property-grouping",name:"Display Property Grouping",desc:"Certain properties shouldn't be used with certain display property values.",browsers:"All",init:function(a,b){function f(a,f,g){e[a]&&(typeof d[a]!="string"||e[a].value.toLowerCase()!=d[a])&&b.warn(g||a+" can't be used with display: "+f+".",e[a].line,e[a].col,c)}var c=this,d={display:1,"float":"none",height:1,width:1,margin:1,"margin-left":1,"margin-right":1,"margin-bottom":1,"margin-top":1,padding:1,"padding-left":1,"padding-right":1,"padding-bottom":1,"padding-top":1,"vertical-align":1},e;a.addListener("startrule",function(){e={}}),a.addListener("property",function(a){var b=a.property.text.toLowerCase();d[b]&&(e[b]={value:a.value.text,line:a.property.line,col:a.property.col})}),a.addListener("endrule",function(){var a=e.display?e.display.value:null;if(a)switch(a){case"inline":f("height",a),f("width",a),f("margin",a),f("margin-top",a),f("margin-bottom",a),f("float",a,"display:inline has no effect on floated elements (but may be used to fix the IE6 double-margin bug).");break;case"block":f("vertical-align",a);break;case"inline-block":f("float",a);break;default:a.indexOf("table-")==0&&(f("margin",a),f("margin-left",a),f("margin-right",a),f("margin-top",a),f("margin-bottom",a),f("float",a))}})}}),CSSLint.addRule({id:"duplicate-properties",name:"Duplicate Properties",desc:"Duplicate properties must appear one after the other.",browsers:"All",init:function(a,b){function f(a){d={}}var c=this,d,e;a.addListener("startrule",f),a.addListener("startfontface",f),a.addListener("startpage",f),a.addListener("property",function(a){var f=a.property,g=f.text.toLowerCase();d[g]&&(e!=g||d[g]==a.value.text)&&b.warn("Duplicate property '"+a.property+"' found.",a.line,a.col,c),d[g]=a.value.text,e=g})}}),CSSLint.addRule({id:"empty-rules",name:"Empty Rules",desc:"Rules without any properties specified should be removed.",browsers:"All",init:function(a,b){var c=this,d=0;a.addListener("startrule",function(){d=0}),a.addListener("property",function(){d++}),a.addListener("endrule",function(a){var e=a.selectors;d==0&&b.warn("Rule is empty.",e[0].line,e[0].col,c)})}}),CSSLint.addRule({id:"errors",name:"Parsing Errors",desc:"This rule looks for recoverable syntax errors.",browsers:"All",init:function(a,b){var c=this;a.addListener("error",function(a){b.error(a.message,a.line,a.col,c)})}}),CSSLint.addRule({id:"floats",name:"Floats",desc:"This rule tests if the float property is used too many times",browsers:"All",init:function(a,b){var c=this,d=0;a.addListener("property",function(a){a.property.text.toLowerCase()=="float"&&a.value.text.toLowerCase()!="none"&&d++}),a.addListener("endstylesheet",function(){b.stat("floats",d),d>=10&&b.rollupWarn("Too many floats ("+d+"), you're probably using them for layout. Consider using a grid system instead.",c)})}}),CSSLint.addRule({id:"font-faces",name:"Font Faces",desc:"Too many different web fonts in the same stylesheet.",browsers:"All",init:function(a,b){var c=this,d=0;a.addListener("startfontface",function(){d++}),a.addListener("endstylesheet",function(){d>5&&b.rollupWarn("Too many @font-face declarations ("+d+").",c)})}}),CSSLint.addRule({id:"font-sizes",name:"Font Sizes",desc:"Checks the number of font-size declarations.",browsers:"All",init:function(a,b){var c=this,d=0;a.addListener("property",function(a){a.property=="font-size"&&d++}),a.addListener("endstylesheet",function(){b.stat("font-sizes",d),d>=10&&b.rollupWarn("Too many font-size declarations ("+d+"), abstraction needed.",c)})}}),CSSLint.addRule({id:"gradients",name:"Gradients",desc:"When using a vendor-prefixed gradient, make sure to use them all.",browsers:"All",init:function(a,b){var c=this,d;a.addListener("startrule",function(){d={moz:0,webkit:0,ms:0,o:0}}),a.addListener("property",function(a){/\-(moz|ms|o|webkit)(?:\-(?:linear|radial))\-gradient/.test(a.value)&&(d[RegExp.$1]=1)}),a.addListener("endrule",function(a){var e=[];d.moz||e.push("Firefox 3.6+"),d.webkit||e.push("Webkit (Safari, Chrome)"),d.ms||e.push("Internet Explorer 10+"),d.o||e.push("Opera 11.1+"),e.length&&e.length<4&&b.warn("Missing vendor-prefixed CSS gradients for "+e.join(", ")+".",a.selectors[0].line,a.selectors[0].col,c)})}}),CSSLint.addRule({id:"ids",name:"IDs",desc:"Selectors should not contain IDs.",browsers:"All",init:function(a,b){var c=this;a.addListener("startrule",function(a){var d=a.selectors,e,f,g,h,i,j,k;for(i=0;i<d.length;i++){e=d[i],h=0;for(j=0;j<e.parts.length;j++){f=e.parts[j];if(f instanceof parserlib.css.SelectorPart)for(k=0;k<f.modifiers.length;k++)g=f.modifiers[k],g.type=="id"&&h++}h==1?b.warn("Don't use IDs in selectors.",e.line,e.col,c):h>1&&b.warn(h+" IDs in the selector, really?",e.line,e.col,c)}})}}),CSSLint.addRule({id:"import",name:"@import",desc:"Don't use @import, use <link> instead.",browsers:"All",init:function(a,b){var c=this;a.addListener("import",function(a){b.warn("@import prevents parallel downloads, use <link> instead.",a.line,a.col,c)})}}),CSSLint.addRule({id:"important",name:"Important",desc:"Be careful when using !important declaration",browsers:"All",init:function(a,b){var c=this,d=0;a.addListener("property",function(a){a.important===!0&&(d++,b.warn("Use of !important",a.line,a.col,c))}),a.addListener("endstylesheet",function(){b.stat("important",d),d>=10&&b.rollupWarn("Too many !important declarations ("+d+"), try to use less than 10 to avoid specifity issues.",c)})}}),CSSLint.addRule({id:"known-properties",name:"Known Properties",desc:"Properties should be known (listed in CSS specification) or be a vendor-prefixed property.",browsers:"All",init:function(a,b){var c=this,d={"alignment-adjust":1,"alignment-baseline":1,animation:1,"animation-delay":1,"animation-direction":1,"animation-duration":1,"animation-iteration-count":1,"animation-name":1,"animation-play-state":1,"animation-timing-function":1,appearance:1,azimuth:1,"backface-visibility":1,background:1,"background-attachment":1,"background-break":1,"background-clip":1,"background-color":1,"background-image":1,"background-origin":1,"background-position":1,"background-repeat":1,"background-size":1,"baseline-shift":1,binding:1,bleed:1,"bookmark-label":1,"bookmark-level":1,"bookmark-state":1,"bookmark-target":1,border:1,"border-bottom":1,"border-bottom-color":1,"border-bottom-left-radius":1,"border-bottom-right-radius":1,"border-bottom-style":1,"border-bottom-width":1,"border-collapse":1,"border-color":1,"border-image":1,"border-image-outset":1,"border-image-repeat":1,"border-image-slice":1,"border-image-source":1,"border-image-width":1,"border-left":1,"border-left-color":1,"border-left-style":1,"border-left-width":1,"border-radius":1,"border-right":1,"border-right-color":1,"border-right-style":1,"border-right-width":1,"border-spacing":1,"border-style":1,"border-top":1,"border-top-color":1,"border-top-left-radius":1,"border-top-right-radius":1,"border-top-style":1,"border-top-width":1,"border-width":1,bottom:1,"box-align":1,"box-decoration-break":1,"box-direction":1,"box-flex":1,"box-flex-group":1,"box-lines":1,"box-ordinal-group":1,"box-orient":1,"box-pack":1,"box-shadow":1,"box-sizing":1,"break-after":1,"break-before":1,"break-inside":1,"caption-side":1,clear:1,clip:1,color:1,"color-profile":1,"column-count":1,"column-fill":1,"column-gap":1,"column-rule":1,"column-rule-color":1,"column-rule-style":1,"column-rule-width":1,"column-span":1,"column-width":1,columns:1,content:1,"counter-increment":1,"counter-reset":1,crop:1,cue:1,"cue-after":1,"cue-before":1,cursor:1,direction:1,display:1,"dominant-baseline":1,"drop-initial-after-adjust":1,"drop-initial-after-align":1,"drop-initial-before-adjust":1,"drop-initial-before-align":1,"drop-initial-size":1,"drop-initial-value":1,elevation:1,"empty-cells":1,fit:1,"fit-position":1,"float":1,"float-offset":1,font:1,"font-family":1,"font-size":1,"font-size-adjust":1,"font-stretch":1,"font-style":1,"font-variant":1,"font-weight":1,"grid-columns":1,"grid-rows":1,"hanging-punctuation":1,height:1,"hyphenate-after":1,"hyphenate-before":1,"hyphenate-character":1,"hyphenate-lines":1,"hyphenate-resource":1,hyphens:1,icon:1,"image-orientation":1,"image-rendering":1,"image-resolution":1,"inline-box-align":1,left:1,"letter-spacing":1,"line-height":1,"line-stacking":1,"line-stacking-ruby":1,"line-stacking-shift":1,"line-stacking-strategy":1,"list-style":1,"list-style-image":1,"list-style-position":1,"list-style-type":1,margin:1,"margin-bottom":1,"margin-left":1,"margin-right":1,"margin-top":1,mark:1,"mark-after":1,"mark-before":1,marks:1,"marquee-direction":1,"marquee-play-count":1,"marquee-speed":1,"marquee-style":1,"max-height":1,"max-width":1,"min-height":1,"min-width":1,"move-to":1,"nav-down":1,"nav-index":1,"nav-left":1,"nav-right":1,"nav-up":1,opacity:1,orphans:1,outline:1,"outline-color":1,"outline-offset":1,"outline-style":1,"outline-width":1,overflow:1,"overflow-style":1,"overflow-x":1,"overflow-y":1,padding:1,"padding-bottom":1,"padding-left":1,"padding-right":1,"padding-top":1,page:1,"page-break-after":1,"page-break-before":1,"page-break-inside":1,"page-policy":1,pause:1,"pause-after":1,"pause-before":1,perspective:1,"perspective-origin":1,phonemes:1,pitch:1,"pitch-range":1,"play-during":1,position:1,"presentation-level":1,"punctuation-trim":1,quotes:1,"rendering-intent":1,resize:1,rest:1,"rest-after":1,"rest-before":1,richness:1,right:1,rotation:1,"rotation-point":1,"ruby-align":1,"ruby-overhang":1,"ruby-position":1,"ruby-span":1,size:1,speak:1,"speak-header":1,"speak-numeral":1,"speak-punctuation":1,"speech-rate":1,stress:1,"string-set":1,"table-layout":1,target:1,"target-name":1,"target-new":1,"target-position":1,"text-align":1,"text-align-last":1,"text-decoration":1,"text-emphasis":1,"text-height":1,"text-indent":1,"text-justify":1,"text-outline":1,"text-shadow":1,"text-transform":1,"text-wrap":1,top:1,transform:1,"transform-origin":1,"transform-style":1,transition:1,"transition-delay":1,"transition-duration":1,"transition-property":1,"transition-timing-function":1,"unicode-bidi":1,"vertical-align":1,visibility:1,"voice-balance":1,"voice-duration":1,"voice-family":1,"voice-pitch":1,"voice-pitch-range":1,"voice-rate":1,"voice-stress":1,"voice-volume":1,volume:1,"white-space":1,"white-space-collapse":1,widows:1,width:1,"word-break":1,"word-spacing":1,"word-wrap":1,"z-index":1,filter:1,zoom:1};a.addListener("property",function(a){var e=a.property.text.toLowerCase();!d[e]&&e.charAt(0)!="-"&&b.error("Unknown property '"+a.property+"'.",a.line,a.col,c)})}}),CSSLint.addRule({id:"overqualified-elements",name:"Overqualified Elements",desc:"Don't use classes or IDs with elements (a.foo or a#foo).",browsers:"All",init:function(a,b){var c=this,d={};a.addListener("startrule",function(a){var e=a.selectors,f,g,h,i,j,k;for(i=0;i<e.length;i++){f=e[i];for(j=0;j<f.parts.length;j++){g=f.parts[j];if(g instanceof parserlib.css.SelectorPart)for(k=0;k<g.modifiers.length;k++)h=g.modifiers[k],g.elementName&&h.type=="id"?b.warn("Element ("+g+") is overqualified, just use "+h+" without element name.",g.line,g.col,c):h.type=="class"&&(d[h]||(d[h]=[]),d[h].push({modifier:h,part:g}))}}}),a.addListener("endstylesheet",function(){var a;for(a in d)d.hasOwnProperty(a)&&d[a].length==1&&d[a][0].part.elementName&&b.warn("Element ("+d[a][0].part+") is overqualified, just use "+d[a][0].modifier+" without element name.",d[a][0].part.line,d[a][0].part.col,c)})}}),CSSLint.addRule({id:"qualified-headings",name:"Qualified Headings",desc:"Headings should not be qualified (namespaced).",browsers:"All",init:function(a,b){var c=this;a.addListener("startrule",function(a){var d=a.selectors,e,f,g,h;for(g=0;g<d.length;g++){e=d[g];for(h=0;h<e.parts.length;h++)f=e.parts[h],f instanceof parserlib.css.SelectorPart&&f.elementName&&/h[1-6]/.test(f.elementName.toString())&&h>0&&b.warn("Heading ("+f.elementName+") should not be qualified.",f.line,f.col,c)}})}}),CSSLint.addRule({id:"regex-selectors",name:"Regex Selectors",desc:"Selectors that look like regular expressions are slow and should be avoided.",browsers:"All",init:function(a,b){var c=this;a.addListener("startrule",function(a){var d=a.selectors,e,f,g,h,i,j;for(h=0;h<d.length;h++){e=d[h];for(i=0;i<e.parts.length;i++){f=e.parts[i];if(f instanceof parserlib.css.SelectorPart)for(j=0;j<f.modifiers.length;j++)g=f.modifiers[j],g.type=="attribute"&&/([\~\|\^\$\*]=)/.test(g)&&b.warn("Attribute selectors with "+RegExp.$1+" are slow!",g.line,g.col,c)}}})}}),CSSLint.addRule({id:"rules-count",name:"Rules Count",desc:"Track how many rules there are.",browsers:"All",init:function(a,b){var c=this,d=0;a.addListener("startrule",function(){d++}),a.addListener("endstylesheet",function(){b.stat("rule-count",d)})}}),CSSLint.addRule({id:"text-indent",name:"Text Indent",desc:"Checks for text indent less than -99px",browsers:"All",init:function(a,b){var c=this;a.addListener("property",function(a){var d=a.property,e=a.value.parts[0].value;d=="text-indent"&&e<-99&&b.warn("Negative text-indent doesn't work well with RTL. If you use text-indent for image replacement explicitly set text-direction for that item to ltr.",d.line,d.col,c)})}}),CSSLint.addRule({id:"unique-headings",name:"Unique Headings",desc:"Headings should be defined only once.",browsers:"All",init:function(a,b){var c=this,d={h1:0,h2:0,h3:0,h4:0,h5:0,h6:0};a.addListener("startrule",function(a){var e=a.selectors,f,g,h;for(h=0;h<e.length;h++)f=e[h],g=f.parts[f.parts.length-1],g.elementName&&/(h[1-6])/.test(g.elementName.toString())&&(d[RegExp.$1]++,d[RegExp.$1]>1&&b.warn("Heading ("+g.elementName+") has already been defined.",g.line,g.col,c))})}}),CSSLint.addRule({id:"universal-selector",name:"Universal Selector",desc:"The universal selector (*) is known to be slow.",browsers:"All",init:function(a,b){var c=this;a.addListener("startrule",function(a){var d=a.selectors,e,f,g,h,i,j;for(h=0;h<d.length;h++)e=d[h],f=e.parts[e.parts.length-1],f.elementName=="*"&&b.warn(c.desc,f.line,f.col,c)})}}),CSSLint.addRule({id:"vendor-prefix",name:"Vendor Prefix",desc:"When using a vendor-prefixed property, make sure to include the standard one.",browsers:"All",init:function(a,b){function h(a){var e,g,h,i,j,k,l=[];for(e in d)f[e]&&l.push({actual:e,needed:f[e]});for(g=0,h=l.length;g<h;g++)j=l[g].needed,k=l[g].actual,d[j]?d[j][0].pos<d[k][0].pos&&b.warn("Standard property '"+j+"' should come after vendor-prefixed property '"+k+"'.",a.line,a.col,c):b.warn("Missing standard property '"+j+"' to go along with '"+k+"'.",a.line,a.col,c)}function g(){d={},e=1}var c=this,d,e,f={"-moz-border-radius":"border-radius","-webkit-border-radius":"border-radius","-webkit-border-top-left-radius":"border-top-left-radius","-webkit-border-top-right-radius":"border-top-right-radius","-webkit-border-bottom-left-radius":"border-bottom-left-radius","-webkit-border-bottom-right-radius":"border-bottom-right-radius","-moz-border-radius-topleft":"border-top-left-radius","-moz-border-radius-topright":"border-top-right-radius","-moz-border-radius-bottomleft":"border-bottom-left-radius","-moz-border-radius-bottomright":"border-bottom-right-radius","-moz-box-shadow":"box-shadow","-webkit-box-shadow":"box-shadow","-moz-transform":"transform","-webkit-transform":"transform","-o-transform":"transform","-ms-transform":"transform","-moz-box-sizing":"box-sizing","-webkit-box-sizing":"box-sizing","-moz-user-select":"user-select","-khtml-user-select":"user-select","-webkit-user-select":"user-select"};a.addListener("startrule",g),a.addListener("startfontface",g),a.addListener("property",function(a){var b=a.property.text.toLowerCase();d[b]||(d[b]=[]),d[b].push({name:a.property,value:a.value,pos:e++})}),a.addListener("endrule",h),a.addListener("endfontface",h)}}),CSSLint.addRule({id:"zero-units",name:"Zero Units",desc:"You don't need to specify units when a value is 0.",browsers:"All",init:function(a,b){var c=this;a.addListener("property",function(a){var d=a.value.parts,e=0,f=d.length;while(e<f)(d[e].units||d[e].type=="percentage")&&d[e].value===0&&b.warn("Values of 0 shouldn't have units specified.",d[e].line,d[e].col,c),e++})}}),exports.CSSLint=CSSLint}) \ No newline at end of file
+"no use strict";
+
+var console = {
+ log: function(msg) {
+ postMessage({type: "log", data: msg});
+ }
+};
+var window = {
+ console: console
+};
+
+var normalizeModule = function(parentId, moduleName) {
+ // normalize plugin requires
+ if (moduleName.indexOf("!") !== -1) {
+ var chunks = moduleName.split("!");
+ return normalizeModule(parentId, chunks[0]) + "!" + normalizeModule(parentId, chunks[1]);
+ }
+ // normalize relative requires
+ if (moduleName.charAt(0) == ".") {
+ var base = parentId.split("/").slice(0, -1).join("/");
+ var moduleName = base + "/" + moduleName;
+
+ while(moduleName.indexOf(".") !== -1 && previous != moduleName) {
+ var previous = moduleName;
+ var moduleName = moduleName.replace(/\/\.\//, "/").replace(/[^\/]+\/\.\.\//, "");
+ }
+ }
+
+ return moduleName;
+};
+
+var require = function(parentId, id) {
+ var id = normalizeModule(parentId, id);
+
+ var module = require.modules[id];
+ if (module) {
+ if (!module.initialized) {
+ module.exports = module.factory().exports;
+ module.initialized = true;
+ }
+ return module.exports;
+ }
+
+ var chunks = id.split("/");
+ chunks[0] = require.tlns[chunks[0]] || chunks[0];
+ var path = chunks.join("/") + ".js";
+
+ require.id = id;
+ importScripts(path);
+ return require(parentId, id);
+};
+
+require.modules = {};
+require.tlns = {};
+
+var define = function(id, deps, factory) {
+ if (arguments.length == 2) {
+ factory = deps;
+ } else if (arguments.length == 1) {
+ factory = id;
+ id = require.id;
+ }
+
+ if (id.indexOf("text!") === 0)
+ return;
+
+ var req = function(deps, factory) {
+ return require(id, deps, factory);
+ };
+
+ require.modules[id] = {
+ factory: function() {
+ var module = {
+ exports: {}
+ };
+ var returnExports = factory(req, module.exports, module);
+ if (returnExports)
+ module.exports = returnExports;
+ return module;
+ }
+ };
+};
+
+function initBaseUrls(topLevelNamespaces) {
+ require.tlns = topLevelNamespaces;
+}
+
+function initSender() {
+
+ var EventEmitter = require(null, "ace/lib/event_emitter").EventEmitter;
+ var oop = require(null, "ace/lib/oop");
+
+ var Sender = function() {};
+
+ (function() {
+
+ oop.implement(this, EventEmitter);
+
+ this.callback = function(data, callbackId) {
+ postMessage({
+ type: "call",
+ id: callbackId,
+ data: data
+ });
+ };
+
+ this.emit = function(name, data) {
+ postMessage({
+ type: "event",
+ name: name,
+ data: data
+ });
+ };
+
+ }).call(Sender.prototype);
+
+ return new Sender();
+}
+
+var main;
+var sender;
+
+onmessage = function(e) {
+ var msg = e.data;
+ if (msg.command) {
+ main[msg.command].apply(main, msg.args);
+ }
+ else if (msg.init) {
+ initBaseUrls(msg.tlns);
+ require(null, "ace/lib/fixoldbrowsers");
+ sender = initSender();
+ var clazz = require(null, msg.module)[msg.classname];
+ main = new clazz(sender);
+ }
+ else if (msg.event && sender) {
+ sender._emit(msg.event, msg.data);
+ }
+};
+// vim:set ts=4 sts=4 sw=4 st:
+// -- kriskowal Kris Kowal Copyright (C) 2009-2010 MIT License
+// -- tlrobinson Tom Robinson Copyright (C) 2009-2010 MIT License (Narwhal Project)
+// -- dantman Daniel Friesen Copyright(C) 2010 XXX No License Specified
+// -- fschaefer Florian Schäfer Copyright (C) 2010 MIT License
+// -- Irakli Gozalishvili Copyright (C) 2010 MIT License
+
+/*!
+ Copyright (c) 2009, 280 North Inc. http://280north.com/
+ MIT License. http://github.com/280north/narwhal/blob/master/README.md
+*/
+
+define('ace/lib/fixoldbrowsers', ['require', 'exports', 'module' , 'ace/lib/regexp', 'ace/lib/es5-shim'], function(require, exports, module) {
+"use strict";
+
+require("./regexp");
+require("./es5-shim");
+
+});/**
+ * Based on code from:
+ *
+ * XRegExp 1.5.0
+ * (c) 2007-2010 Steven Levithan
+ * MIT License
+ * <http://xregexp.com>
+ * Provides an augmented, extensible, cross-browser implementation of regular expressions,
+ * including support for additional syntax, flags, and methods
+ */
+
+define('ace/lib/regexp', ['require', 'exports', 'module' ], function(require, exports, module) {
+"use strict";
+
+ //---------------------------------
+ // Private variables
+ //---------------------------------
+
+ var real = {
+ exec: RegExp.prototype.exec,
+ test: RegExp.prototype.test,
+ match: String.prototype.match,
+ replace: String.prototype.replace,
+ split: String.prototype.split
+ },
+ compliantExecNpcg = real.exec.call(/()??/, "")[1] === undefined, // check `exec` handling of nonparticipating capturing groups
+ compliantLastIndexIncrement = function () {
+ var x = /^/g;
+ real.test.call(x, "");
+ return !x.lastIndex;
+ }();
+
+ //---------------------------------
+ // Overriden native methods
+ //---------------------------------
+
+ // Adds named capture support (with backreferences returned as `result.name`), and fixes two
+ // cross-browser issues per ES3:
+ // - Captured values for nonparticipating capturing groups should be returned as `undefined`,
+ // rather than the empty string.
+ // - `lastIndex` should not be incremented after zero-length matches.
+ RegExp.prototype.exec = function (str) {
+ var match = real.exec.apply(this, arguments),
+ name, r2;
+ if (match) {
+ // Fix browsers whose `exec` methods don't consistently return `undefined` for
+ // nonparticipating capturing groups
+ if (!compliantExecNpcg && match.length > 1 && indexOf(match, "") > -1) {
+ r2 = RegExp(this.source, real.replace.call(getNativeFlags(this), "g", ""));
+ // Using `str.slice(match.index)` rather than `match[0]` in case lookahead allowed
+ // matching due to characters outside the match
+ real.replace.call(str.slice(match.index), r2, function () {
+ for (var i = 1; i < arguments.length - 2; i++) {
+ if (arguments[i] === undefined)
+ match[i] = undefined;
+ }
+ });
+ }
+ // Attach named capture properties
+ if (this._xregexp && this._xregexp.captureNames) {
+ for (var i = 1; i < match.length; i++) {
+ name = this._xregexp.captureNames[i - 1];
+ if (name)
+ match[name] = match[i];
+ }
+ }
+ // Fix browsers that increment `lastIndex` after zero-length matches
+ if (!compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index))
+ this.lastIndex--;
+ }
+ return match;
+ };
+
+ // Don't override `test` if it won't change anything
+ if (!compliantLastIndexIncrement) {
+ // Fix browser bug in native method
+ RegExp.prototype.test = function (str) {
+ // Use the native `exec` to skip some processing overhead, even though the overriden
+ // `exec` would take care of the `lastIndex` fix
+ var match = real.exec.call(this, str);
+ // Fix browsers that increment `lastIndex` after zero-length matches
+ if (match && this.global && !match[0].length && (this.lastIndex > match.index))
+ this.lastIndex--;
+ return !!match;
+ };
+ }
+
+ //---------------------------------
+ // Private helper functions
+ //---------------------------------
+
+ function getNativeFlags (regex) {
+ return (regex.global ? "g" : "") +
+ (regex.ignoreCase ? "i" : "") +
+ (regex.multiline ? "m" : "") +
+ (regex.extended ? "x" : "") + // Proposed for ES4; included in AS3
+ (regex.sticky ? "y" : "");
+ };
+
+ function indexOf (array, item, from) {
+ if (Array.prototype.indexOf) // Use the native array method if available
+ return array.indexOf(item, from);
+ for (var i = from || 0; i < array.length; i++) {
+ if (array[i] === item)
+ return i;
+ }
+ return -1;
+ };
+
+});// vim: ts=4 sts=4 sw=4 expandtab
+// -- kriskowal Kris Kowal Copyright (C) 2009-2011 MIT License
+// -- tlrobinson Tom Robinson Copyright (C) 2009-2010 MIT License (Narwhal Project)
+// -- dantman Daniel Friesen Copyright (C) 2010 XXX TODO License or CLA
+// -- fschaefer Florian Schäfer Copyright (C) 2010 MIT License
+// -- Gozala Irakli Gozalishvili Copyright (C) 2010 MIT License
+// -- kitcambridge Kit Cambridge Copyright (C) 2011 MIT License
+// -- kossnocorp Sasha Koss XXX TODO License or CLA
+// -- bryanforbes Bryan Forbes XXX TODO License or CLA
+// -- killdream Quildreen Motta Copyright (C) 2011 MIT Licence
+// -- michaelficarra Michael Ficarra Copyright (C) 2011 3-clause BSD License
+// -- sharkbrainguy Gerard Paapu Copyright (C) 2011 MIT License
+// -- bbqsrc Brendan Molloy (C) 2011 Creative Commons Zero (public domain)
+// -- iwyg XXX TODO License or CLA
+// -- DomenicDenicola Domenic Denicola Copyright (C) 2011 MIT License
+// -- xavierm02 Montillet Xavier XXX TODO License or CLA
+// -- Raynos Raynos XXX TODO License or CLA
+// -- samsonjs Sami Samhuri Copyright (C) 2010 MIT License
+// -- rwldrn Rick Waldron Copyright (C) 2011 MIT License
+// -- lexer Alexey Zakharov XXX TODO License or CLA
+
+/*!
+ Copyright (c) 2009, 280 North Inc. http://280north.com/
+ MIT License. http://github.com/280north/narwhal/blob/master/README.md
+*/
+
+define('ace/lib/es5-shim', ['require', 'exports', 'module' ], function(require, exports, module) {
+
+/**
+ * Brings an environment as close to ECMAScript 5 compliance
+ * as is possible with the facilities of erstwhile engines.
+ *
+ * Annotated ES5: http://es5.github.com/ (specific links below)
+ * ES5 Spec: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
+ *
+ * @module
+ */
+
+/*whatsupdoc*/
+
+//
+// Function
+// ========
+//
+
+// ES-5 15.3.4.5
+// http://es5.github.com/#x15.3.4.5
+
+if (!Function.prototype.bind) {
+ Function.prototype.bind = function bind(that) { // .length is 1
+ // 1. Let Target be the this value.
+ var target = this;
+ // 2. If IsCallable(Target) is false, throw a TypeError exception.
+ if (typeof target != "function")
+ throw new TypeError(); // TODO message
+ // 3. Let A be a new (possibly empty) internal list of all of the
+ // argument values provided after thisArg (arg1, arg2 etc), in order.
+ // XXX slicedArgs will stand in for "A" if used
+ var args = slice.call(arguments, 1); // for normal call
+ // 4. Let F be a new native ECMAScript object.
+ // 11. Set the [[Prototype]] internal property of F to the standard
+ // built-in Function prototype object as specified in 15.3.3.1.
+ // 12. Set the [[Call]] internal property of F as described in
+ // 15.3.4.5.1.
+ // 13. Set the [[Construct]] internal property of F as described in
+ // 15.3.4.5.2.
+ // 14. Set the [[HasInstance]] internal property of F as described in
+ // 15.3.4.5.3.
+ var bound = function () {
+
+ if (this instanceof bound) {
+ // 15.3.4.5.2 [[Construct]]
+ // When the [[Construct]] internal method of a function object,
+ // F that was created using the bind function is called with a
+ // list of arguments ExtraArgs, the following steps are taken:
+ // 1. Let target be the value of F's [[TargetFunction]]
+ // internal property.
+ // 2. If target has no [[Construct]] internal method, a
+ // TypeError exception is thrown.
+ // 3. Let boundArgs be the value of F's [[BoundArgs]] internal
+ // property.
+ // 4. Let args be a new list containing the same values as the
+ // list boundArgs in the same order followed by the same
+ // values as the list ExtraArgs in the same order.
+ // 5. Return the result of calling the [[Construct]] internal
+ // method of target providing args as the arguments.
+
+ var F = function(){};
+ F.prototype = target.prototype;
+ var self = new F;
+
+ var result = target.apply(
+ self,
+ args.concat(slice.call(arguments))
+ );
+ if (result !== null && Object(result) === result)
+ return result;
+ return self;
+
+ } else {
+ // 15.3.4.5.1 [[Call]]
+ // When the [[Call]] internal method of a function object, F,
+ // which was created using the bind function is called with a
+ // this value and a list of arguments ExtraArgs, the following
+ // steps are taken:
+ // 1. Let boundArgs be the value of F's [[BoundArgs]] internal
+ // property.
+ // 2. Let boundThis be the value of F's [[BoundThis]] internal
+ // property.
+ // 3. Let target be the value of F's [[TargetFunction]] internal
+ // property.
+ // 4. Let args be a new list containing the same values as the
+ // list boundArgs in the same order followed by the same
+ // values as the list ExtraArgs in the same order.
+ // 5. Return the result of calling the [[Call]] internal method
+ // of target providing boundThis as the this value and
+ // providing args as the arguments.
+
+ // equiv: target.call(this, ...boundArgs, ...args)
+ return target.apply(
+ that,
+ args.concat(slice.call(arguments))
+ );
+
+ }
+
+ };
+ // XXX bound.length is never writable, so don't even try
+ //
+ // 15. If the [[Class]] internal property of Target is "Function", then
+ // a. Let L be the length property of Target minus the length of A.
+ // b. Set the length own property of F to either 0 or L, whichever is
+ // larger.
+ // 16. Else set the length own property of F to 0.
+ // 17. Set the attributes of the length own property of F to the values
+ // specified in 15.3.5.1.
+
+ // TODO
+ // 18. Set the [[Extensible]] internal property of F to true.
+
+ // TODO
+ // 19. Let thrower be the [[ThrowTypeError]] function Object (13.2.3).
+ // 20. Call the [[DefineOwnProperty]] internal method of F with
+ // arguments "caller", PropertyDescriptor {[[Get]]: thrower, [[Set]]:
+ // thrower, [[Enumerable]]: false, [[Configurable]]: false}, and
+ // false.
+ // 21. Call the [[DefineOwnProperty]] internal method of F with
+ // arguments "arguments", PropertyDescriptor {[[Get]]: thrower,
+ // [[Set]]: thrower, [[Enumerable]]: false, [[Configurable]]: false},
+ // and false.
+
+ // TODO
+ // NOTE Function objects created using Function.prototype.bind do not
+ // have a prototype property or the [[Code]], [[FormalParameters]], and
+ // [[Scope]] internal properties.
+ // XXX can't delete prototype in pure-js.
+
+ // 22. Return F.
+ return bound;
+ };
+}
+
+// Shortcut to an often accessed properties, in order to avoid multiple
+// dereference that costs universally.
+// _Please note: Shortcuts are defined after `Function.prototype.bind` as we
+// us it in defining shortcuts.
+var call = Function.prototype.call;
+var prototypeOfArray = Array.prototype;
+var prototypeOfObject = Object.prototype;
+var slice = prototypeOfArray.slice;
+var toString = call.bind(prototypeOfObject.toString);
+var owns = call.bind(prototypeOfObject.hasOwnProperty);
+
+// If JS engine supports accessors creating shortcuts.
+var defineGetter;
+var defineSetter;
+var lookupGetter;
+var lookupSetter;
+var supportsAccessors;
+if ((supportsAccessors = owns(prototypeOfObject, "__defineGetter__"))) {
+ defineGetter = call.bind(prototypeOfObject.__defineGetter__);
+ defineSetter = call.bind(prototypeOfObject.__defineSetter__);
+ lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);
+ lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);
+}
+
+//
+// Array
+// =====
+//
+
+// ES5 15.4.3.2
+// http://es5.github.com/#x15.4.3.2
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/isArray
+if (!Array.isArray) {
+ Array.isArray = function isArray(obj) {
+ return toString(obj) == "[object Array]";
+ };
+}
+
+// The IsCallable() check in the Array functions
+// has been replaced with a strict check on the
+// internal class of the object to trap cases where
+// the provided function was actually a regular
+// expression literal, which in V8 and
+// JavaScriptCore is a typeof "function". Only in
+// V8 are regular expression literals permitted as
+// reduce parameters, so it is desirable in the
+// general case for the shim to match the more
+// strict and common behavior of rejecting regular
+// expressions.
+
+// ES5 15.4.4.18
+// http://es5.github.com/#x15.4.4.18
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/array/forEach
+if (!Array.prototype.forEach) {
+ Array.prototype.forEach = function forEach(fun /*, thisp*/) {
+ var self = toObject(this),
+ thisp = arguments[1],
+ i = 0,
+ length = self.length >>> 0;
+
+ // If no callback function or if callback is not a callable function
+ if (toString(fun) != "[object Function]") {
+ throw new TypeError(); // TODO message
+ }
+
+ while (i < length) {
+ if (i in self) {
+ // Invoke the callback function with call, passing arguments:
+ // context, property value, property key, thisArg object context
+ fun.call(thisp, self[i], i, self);
+ }
+ i++;
+ }
+ };
+}
+
+// ES5 15.4.4.19
+// http://es5.github.com/#x15.4.4.19
+// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/map
+if (!Array.prototype.map) {
+ Array.prototype.map = function map(fun /*, thisp*/) {
+ var self = toObject(this),
+ length = self.length >>> 0,
+ result = Array(length),
+ thisp = arguments[1];
+
+ // If no callback function or if callback is not a callable function
+ if (toString(fun) != "[object Function]") {
+ throw new TypeError(); // TODO message
+ }
+
+ for (var i = 0; i < length; i++) {
+ if (i in self)
+ result[i] = fun.call(thisp, self[i], i, self);
+ }
+ return result;
+ };
+}
+
+// ES5 15.4.4.20
+// http://es5.github.com/#x15.4.4.20
+// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/filter
+if (!Array.prototype.filter) {
+ Array.prototype.filter = function filter(fun /*, thisp */) {
+ var self = toObject(this),
+ length = self.length >>> 0,
+ result = [],
+ thisp = arguments[1];
+
+ // If no callback function or if callback is not a callable function
+ if (toString(fun) != "[object Function]") {
+ throw new TypeError(); // TODO message
+ }
+
+ for (var i = 0; i < length; i++) {
+ if (i in self && fun.call(thisp, self[i], i, self))
+ result.push(self[i]);
+ }
+ return result;
+ };
+}
+
+// ES5 15.4.4.16
+// http://es5.github.com/#x15.4.4.16
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/every
+if (!Array.prototype.every) {
+ Array.prototype.every = function every(fun /*, thisp */) {
+ var self = toObject(this),
+ length = self.length >>> 0,
+ thisp = arguments[1];
+
+ // If no callback function or if callback is not a callable function
+ if (toString(fun) != "[object Function]") {
+ throw new TypeError(); // TODO message
+ }
+
+ for (var i = 0; i < length; i++) {
+ if (i in self && !fun.call(thisp, self[i], i, self))
+ return false;
+ }
+ return true;
+ };
+}
+
+// ES5 15.4.4.17
+// http://es5.github.com/#x15.4.4.17
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/some
+if (!Array.prototype.some) {
+ Array.prototype.some = function some(fun /*, thisp */) {
+ var self = toObject(this),
+ length = self.length >>> 0,
+ thisp = arguments[1];
+
+ // If no callback function or if callback is not a callable function
+ if (toString(fun) != "[object Function]") {
+ throw new TypeError(); // TODO message
+ }
+
+ for (var i = 0; i < length; i++) {
+ if (i in self && fun.call(thisp, self[i], i, self))
+ return true;
+ }
+ return false;
+ };
+}
+
+// ES5 15.4.4.21
+// http://es5.github.com/#x15.4.4.21
+// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/reduce
+if (!Array.prototype.reduce) {
+ Array.prototype.reduce = function reduce(fun /*, initial*/) {
+ var self = toObject(this),
+ length = self.length >>> 0;
+
+ // If no callback function or if callback is not a callable function
+ if (toString(fun) != "[object Function]") {
+ throw new TypeError(); // TODO message
+ }
+
+ // no value to return if no initial value and an empty array
+ if (!length && arguments.length == 1)
+ throw new TypeError(); // TODO message
+
+ var i = 0;
+ var result;
+ if (arguments.length >= 2) {
+ result = arguments[1];
+ } else {
+ do {
+ if (i in self) {
+ result = self[i++];
+ break;
+ }
+
+ // if array contains no values, no initial value to return
+ if (++i >= length)
+ throw new TypeError(); // TODO message
+ } while (true);
+ }
+
+ for (; i < length; i++) {
+ if (i in self)
+ result = fun.call(void 0, result, self[i], i, self);
+ }
+
+ return result;
+ };
+}
+
+// ES5 15.4.4.22
+// http://es5.github.com/#x15.4.4.22
+// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/reduceRight
+if (!Array.prototype.reduceRight) {
+ Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {
+ var self = toObject(this),
+ length = self.length >>> 0;
+
+ // If no callback function or if callback is not a callable function
+ if (toString(fun) != "[object Function]") {
+ throw new TypeError(); // TODO message
+ }
+
+ // no value to return if no initial value, empty array
+ if (!length && arguments.length == 1)
+ throw new TypeError(); // TODO message
+
+ var result, i = length - 1;
+ if (arguments.length >= 2) {
+ result = arguments[1];
+ } else {
+ do {
+ if (i in self) {
+ result = self[i--];
+ break;
+ }
+
+ // if array contains no values, no initial value to return
+ if (--i < 0)
+ throw new TypeError(); // TODO message
+ } while (true);
+ }
+
+ do {
+ if (i in this)
+ result = fun.call(void 0, result, self[i], i, self);
+ } while (i--);
+
+ return result;
+ };
+}
+
+// ES5 15.4.4.14
+// http://es5.github.com/#x15.4.4.14
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf
+if (!Array.prototype.indexOf) {
+ Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {
+ var self = toObject(this),
+ length = self.length >>> 0;
+
+ if (!length)
+ return -1;
+
+ var i = 0;
+ if (arguments.length > 1)
+ i = toInteger(arguments[1]);
+
+ // handle negative indices
+ i = i >= 0 ? i : Math.max(0, length + i);
+ for (; i < length; i++) {
+ if (i in self && self[i] === sought) {
+ return i;
+ }
+ }
+ return -1;
+ };
+}
+
+// ES5 15.4.4.15
+// http://es5.github.com/#x15.4.4.15
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/lastIndexOf
+if (!Array.prototype.lastIndexOf) {
+ Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {
+ var self = toObject(this),
+ length = self.length >>> 0;
+
+ if (!length)
+ return -1;
+ var i = length - 1;
+ if (arguments.length > 1)
+ i = Math.min(i, toInteger(arguments[1]));
+ // handle negative indices
+ i = i >= 0 ? i : length - Math.abs(i);
+ for (; i >= 0; i--) {
+ if (i in self && sought === self[i])
+ return i;
+ }
+ return -1;
+ };
+}
+
+//
+// Object
+// ======
+//
+
+// ES5 15.2.3.2
+// http://es5.github.com/#x15.2.3.2
+if (!Object.getPrototypeOf) {
+ // https://github.com/kriskowal/es5-shim/issues#issue/2
+ // http://ejohn.org/blog/objectgetprototypeof/
+ // recommended by fschaefer on github
+ Object.getPrototypeOf = function getPrototypeOf(object) {
+ return object.__proto__ || (
+ object.constructor ?
+ object.constructor.prototype :
+ prototypeOfObject
+ );
+ };
+}
+
+// ES5 15.2.3.3
+// http://es5.github.com/#x15.2.3.3
+if (!Object.getOwnPropertyDescriptor) {
+ var ERR_NON_OBJECT = "Object.getOwnPropertyDescriptor called on a " +
+ "non-object: ";
+ Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {
+ if ((typeof object != "object" && typeof object != "function") || object === null)
+ throw new TypeError(ERR_NON_OBJECT + object);
+ // If object does not owns property return undefined immediately.
+ if (!owns(object, property))
+ return;
+
+ var descriptor, getter, setter;
+
+ // If object has a property then it's for sure both `enumerable` and
+ // `configurable`.
+ descriptor = { enumerable: true, configurable: true };
+
+ // If JS engine supports accessor properties then property may be a
+ // getter or setter.
+ if (supportsAccessors) {
+ // Unfortunately `__lookupGetter__` will return a getter even
+ // if object has own non getter property along with a same named
+ // inherited getter. To avoid misbehavior we temporary remove
+ // `__proto__` so that `__lookupGetter__` will return getter only
+ // if it's owned by an object.
+ var prototype = object.__proto__;
+ object.__proto__ = prototypeOfObject;
+
+ var getter = lookupGetter(object, property);
+ var setter = lookupSetter(object, property);
+
+ // Once we have getter and setter we can put values back.
+ object.__proto__ = prototype;
+
+ if (getter || setter) {
+ if (getter) descriptor.get = getter;
+ if (setter) descriptor.set = setter;
+
+ // If it was accessor property we're done and return here
+ // in order to avoid adding `value` to the descriptor.
+ return descriptor;
+ }
+ }
+
+ // If we got this far we know that object has an own property that is
+ // not an accessor so we set it as a value and return descriptor.
+ descriptor.value = object[property];
+ return descriptor;
+ };
+}
+
+// ES5 15.2.3.4
+// http://es5.github.com/#x15.2.3.4
+if (!Object.getOwnPropertyNames) {
+ Object.getOwnPropertyNames = function getOwnPropertyNames(object) {
+ return Object.keys(object);
+ };
+}
+
+// ES5 15.2.3.5
+// http://es5.github.com/#x15.2.3.5
+if (!Object.create) {
+ Object.create = function create(prototype, properties) {
+ var object;
+ if (prototype === null) {
+ object = { "__proto__": null };
+ } else {
+ if (typeof prototype != "object")
+ throw new TypeError("typeof prototype["+(typeof prototype)+"] != 'object'");
+ var Type = function () {};
+ Type.prototype = prototype;
+ object = new Type();
+ // IE has no built-in implementation of `Object.getPrototypeOf`
+ // neither `__proto__`, but this manually setting `__proto__` will
+ // guarantee that `Object.getPrototypeOf` will work as expected with
+ // objects created using `Object.create`
+ object.__proto__ = prototype;
+ }
+ if (properties !== void 0)
+ Object.defineProperties(object, properties);
+ return object;
+ };
+}
+
+// ES5 15.2.3.6
+// http://es5.github.com/#x15.2.3.6
+
+// Patch for WebKit and IE8 standard mode
+// Designed by hax <hax.github.com>
+// related issue: https://github.com/kriskowal/es5-shim/issues#issue/5
+// IE8 Reference:
+// http://msdn.microsoft.com/en-us/library/dd282900.aspx
+// http://msdn.microsoft.com/en-us/library/dd229916.aspx
+// WebKit Bugs:
+// https://bugs.webkit.org/show_bug.cgi?id=36423
+
+function doesDefinePropertyWork(object) {
+ try {
+ Object.defineProperty(object, "sentinel", {});
+ return "sentinel" in object;
+ } catch (exception) {
+ // returns falsy
+ }
+}
+
+// check whether defineProperty works if it's given. Otherwise,
+// shim partially.
+if (Object.defineProperty) {
+ var definePropertyWorksOnObject = doesDefinePropertyWork({});
+ var definePropertyWorksOnDom = typeof document == "undefined" ||
+ doesDefinePropertyWork(document.createElement("div"));
+ if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {
+ var definePropertyFallback = Object.defineProperty;
+ }
+}
+
+if (!Object.defineProperty || definePropertyFallback) {
+ var ERR_NON_OBJECT_DESCRIPTOR = "Property description must be an object: ";
+ var ERR_NON_OBJECT_TARGET = "Object.defineProperty called on non-object: "
+ var ERR_ACCESSORS_NOT_SUPPORTED = "getters & setters can not be defined " +
+ "on this javascript engine";
+
+ Object.defineProperty = function defineProperty(object, property, descriptor) {
+ if ((typeof object != "object" && typeof object != "function") || object === null)
+ throw new TypeError(ERR_NON_OBJECT_TARGET + object);
+ if ((typeof descriptor != "object" && typeof descriptor != "function") || descriptor === null)
+ throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);
+
+ // make a valiant attempt to use the real defineProperty
+ // for I8's DOM elements.
+ if (definePropertyFallback) {
+ try {
+ return definePropertyFallback.call(Object, object, property, descriptor);
+ } catch (exception) {
+ // try the shim if the real one doesn't work
+ }
+ }
+
+ // If it's a data property.
+ if (owns(descriptor, "value")) {
+ // fail silently if "writable", "enumerable", or "configurable"
+ // are requested but not supported
+ /*
+ // alternate approach:
+ if ( // can't implement these features; allow false but not true
+ !(owns(descriptor, "writable") ? descriptor.writable : true) ||
+ !(owns(descriptor, "enumerable") ? descriptor.enumerable : true) ||
+ !(owns(descriptor, "configurable") ? descriptor.configurable : true)
+ )
+ throw new RangeError(
+ "This implementation of Object.defineProperty does not " +
+ "support configurable, enumerable, or writable."
+ );
+ */
+
+ if (supportsAccessors && (lookupGetter(object, property) ||
+ lookupSetter(object, property)))
+ {
+ // As accessors are supported only on engines implementing
+ // `__proto__` we can safely override `__proto__` while defining
+ // a property to make sure that we don't hit an inherited
+ // accessor.
+ var prototype = object.__proto__;
+ object.__proto__ = prototypeOfObject;
+ // Deleting a property anyway since getter / setter may be
+ // defined on object itself.
+ delete object[property];
+ object[property] = descriptor.value;
+ // Setting original `__proto__` back now.
+ object.__proto__ = prototype;
+ } else {
+ object[property] = descriptor.value;
+ }
+ } else {
+ if (!supportsAccessors)
+ throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);
+ // If we got that far then getters and setters can be defined !!
+ if (owns(descriptor, "get"))
+ defineGetter(object, property, descriptor.get);
+ if (owns(descriptor, "set"))
+ defineSetter(object, property, descriptor.set);
+ }
+
+ return object;
+ };
+}
+
+// ES5 15.2.3.7
+// http://es5.github.com/#x15.2.3.7
+if (!Object.defineProperties) {
+ Object.defineProperties = function defineProperties(object, properties) {
+ for (var property in properties) {
+ if (owns(properties, property))
+ Object.defineProperty(object, property, properties[property]);
+ }
+ return object;
+ };
+}
+
+// ES5 15.2.3.8
+// http://es5.github.com/#x15.2.3.8
+if (!Object.seal) {
+ Object.seal = function seal(object) {
+ // this is misleading and breaks feature-detection, but
+ // allows "securable" code to "gracefully" degrade to working
+ // but insecure code.
+ return object;
+ };
+}
+
+// ES5 15.2.3.9
+// http://es5.github.com/#x15.2.3.9
+if (!Object.freeze) {
+ Object.freeze = function freeze(object) {
+ // this is misleading and breaks feature-detection, but
+ // allows "securable" code to "gracefully" degrade to working
+ // but insecure code.
+ return object;
+ };
+}
+
+// detect a Rhino bug and patch it
+try {
+ Object.freeze(function () {});
+} catch (exception) {
+ Object.freeze = (function freeze(freezeObject) {
+ return function freeze(object) {
+ if (typeof object == "function") {
+ return object;
+ } else {
+ return freezeObject(object);
+ }
+ };
+ })(Object.freeze);
+}
+
+// ES5 15.2.3.10
+// http://es5.github.com/#x15.2.3.10
+if (!Object.preventExtensions) {
+ Object.preventExtensions = function preventExtensions(object) {
+ // this is misleading and breaks feature-detection, but
+ // allows "securable" code to "gracefully" degrade to working
+ // but insecure code.
+ return object;
+ };
+}
+
+// ES5 15.2.3.11
+// http://es5.github.com/#x15.2.3.11
+if (!Object.isSealed) {
+ Object.isSealed = function isSealed(object) {
+ return false;
+ };
+}
+
+// ES5 15.2.3.12
+// http://es5.github.com/#x15.2.3.12
+if (!Object.isFrozen) {
+ Object.isFrozen = function isFrozen(object) {
+ return false;
+ };
+}
+
+// ES5 15.2.3.13
+// http://es5.github.com/#x15.2.3.13
+if (!Object.isExtensible) {
+ Object.isExtensible = function isExtensible(object) {
+ // 1. If Type(O) is not Object throw a TypeError exception.
+ if (Object(object) === object) {
+ throw new TypeError(); // TODO message
+ }
+ // 2. Return the Boolean value of the [[Extensible]] internal property of O.
+ var name = '';
+ while (owns(object, name)) {
+ name += '?';
+ }
+ object[name] = true;
+ var returnValue = owns(object, name);
+ delete object[name];
+ return returnValue;
+ };
+}
+
+// ES5 15.2.3.14
+// http://es5.github.com/#x15.2.3.14
+if (!Object.keys) {
+ // http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation
+ var hasDontEnumBug = true,
+ dontEnums = [
+ "toString",
+ "toLocaleString",
+ "valueOf",
+ "hasOwnProperty",
+ "isPrototypeOf",
+ "propertyIsEnumerable",
+ "constructor"
+ ],
+ dontEnumsLength = dontEnums.length;
+
+ for (var key in {"toString": null})
+ hasDontEnumBug = false;
+
+ Object.keys = function keys(object) {
+
+ if ((typeof object != "object" && typeof object != "function") || object === null)
+ throw new TypeError("Object.keys called on a non-object");
+
+ var keys = [];
+ for (var name in object) {
+ if (owns(object, name)) {
+ keys.push(name);
+ }
+ }
+
+ if (hasDontEnumBug) {
+ for (var i = 0, ii = dontEnumsLength; i < ii; i++) {
+ var dontEnum = dontEnums[i];
+ if (owns(object, dontEnum)) {
+ keys.push(dontEnum);
+ }
+ }
+ }
+
+ return keys;
+ };
+
+}
+
+//
+// Date
+// ====
+//
+
+// ES5 15.9.5.43
+// http://es5.github.com/#x15.9.5.43
+// This function returns a String value represent the instance in time
+// represented by this Date object. The format of the String is the Date Time
+// string format defined in 15.9.1.15. All fields are present in the String.
+// The time zone is always UTC, denoted by the suffix Z. If the time value of
+// this object is not a finite Number a RangeError exception is thrown.
+if (!Date.prototype.toISOString || (new Date(-62198755200000).toISOString().indexOf('-000001') === -1)) {
+ Date.prototype.toISOString = function toISOString() {
+ var result, length, value, year;
+ if (!isFinite(this))
+ throw new RangeError;
+
+ // the date time string format is specified in 15.9.1.15.
+ result = [this.getUTCMonth() + 1, this.getUTCDate(),
+ this.getUTCHours(), this.getUTCMinutes(), this.getUTCSeconds()];
+ year = this.getUTCFullYear();
+ year = (year < 0 ? '-' : (year > 9999 ? '+' : '')) + ('00000' + Math.abs(year)).slice(0 <= year && year <= 9999 ? -4 : -6);
+
+ length = result.length;
+ while (length--) {
+ value = result[length];
+ // pad months, days, hours, minutes, and seconds to have two digits.
+ if (value < 10)
+ result[length] = "0" + value;
+ }
+ // pad milliseconds to have three digits.
+ return year + "-" + result.slice(0, 2).join("-") + "T" + result.slice(2).join(":") + "." +
+ ("000" + this.getUTCMilliseconds()).slice(-3) + "Z";
+ }
+}
+
+// ES5 15.9.4.4
+// http://es5.github.com/#x15.9.4.4
+if (!Date.now) {
+ Date.now = function now() {
+ return new Date().getTime();
+ };
+}
+
+// ES5 15.9.5.44
+// http://es5.github.com/#x15.9.5.44
+// This function provides a String representation of a Date object for use by
+// JSON.stringify (15.12.3).
+if (!Date.prototype.toJSON) {
+ Date.prototype.toJSON = function toJSON(key) {
+ // When the toJSON method is called with argument key, the following
+ // steps are taken:
+
+ // 1. Let O be the result of calling ToObject, giving it the this
+ // value as its argument.
+ // 2. Let tv be ToPrimitive(O, hint Number).
+ // 3. If tv is a Number and is not finite, return null.
+ // XXX
+ // 4. Let toISO be the result of calling the [[Get]] internal method of
+ // O with argument "toISOString".
+ // 5. If IsCallable(toISO) is false, throw a TypeError exception.
+ if (typeof this.toISOString != "function")
+ throw new TypeError(); // TODO message
+ // 6. Return the result of calling the [[Call]] internal method of
+ // toISO with O as the this value and an empty argument list.
+ return this.toISOString();
+
+ // NOTE 1 The argument is ignored.
+
+ // NOTE 2 The toJSON function is intentionally generic; it does not
+ // require that its this value be a Date object. Therefore, it can be
+ // transferred to other kinds of objects for use as a method. However,
+ // it does require that any such object have a toISOString method. An
+ // object is free to use the argument key to filter its
+ // stringification.
+ };
+}
+
+// ES5 15.9.4.2
+// http://es5.github.com/#x15.9.4.2
+// based on work shared by Daniel Friesen (dantman)
+// http://gist.github.com/303249
+if (Date.parse("+275760-09-13T00:00:00.000Z") !== 8.64e15) {
+ // XXX global assignment won't work in embeddings that use
+ // an alternate object for the context.
+ Date = (function(NativeDate) {
+
+ // Date.length === 7
+ var Date = function Date(Y, M, D, h, m, s, ms) {
+ var length = arguments.length;
+ if (this instanceof NativeDate) {
+ var date = length == 1 && String(Y) === Y ? // isString(Y)
+ // We explicitly pass it through parse:
+ new NativeDate(Date.parse(Y)) :
+ // We have to manually make calls depending on argument
+ // length here
+ length >= 7 ? new NativeDate(Y, M, D, h, m, s, ms) :
+ length >= 6 ? new NativeDate(Y, M, D, h, m, s) :
+ length >= 5 ? new NativeDate(Y, M, D, h, m) :
+ length >= 4 ? new NativeDate(Y, M, D, h) :
+ length >= 3 ? new NativeDate(Y, M, D) :
+ length >= 2 ? new NativeDate(Y, M) :
+ length >= 1 ? new NativeDate(Y) :
+ new NativeDate();
+ // Prevent mixups with unfixed Date object
+ date.constructor = Date;
+ return date;
+ }
+ return NativeDate.apply(this, arguments);
+ };
+
+ // 15.9.1.15 Date Time String Format.
+ var isoDateExpression = new RegExp("^" +
+ "(\\d{4}|[\+\-]\\d{6})" + // four-digit year capture or sign + 6-digit extended year
+ "(?:-(\\d{2})" + // optional month capture
+ "(?:-(\\d{2})" + // optional day capture
+ "(?:" + // capture hours:minutes:seconds.milliseconds
+ "T(\\d{2})" + // hours capture
+ ":(\\d{2})" + // minutes capture
+ "(?:" + // optional :seconds.milliseconds
+ ":(\\d{2})" + // seconds capture
+ "(?:\\.(\\d{3}))?" + // milliseconds capture
+ ")?" +
+ "(?:" + // capture UTC offset component
+ "Z|" + // UTC capture
+ "(?:" + // offset specifier +/-hours:minutes
+ "([-+])" + // sign capture
+ "(\\d{2})" + // hours offset capture
+ ":(\\d{2})" + // minutes offset capture
+ ")" +
+ ")?)?)?)?" +
+ "$");
+
+ // Copy any custom methods a 3rd party library may have added
+ for (var key in NativeDate)
+ Date[key] = NativeDate[key];
+
+ // Copy "native" methods explicitly; they may be non-enumerable
+ Date.now = NativeDate.now;
+ Date.UTC = NativeDate.UTC;
+ Date.prototype = NativeDate.prototype;
+ Date.prototype.constructor = Date;
+
+ // Upgrade Date.parse to handle simplified ISO 8601 strings
+ Date.parse = function parse(string) {
+ var match = isoDateExpression.exec(string);
+ if (match) {
+ match.shift(); // kill match[0], the full match
+ // parse months, days, hours, minutes, seconds, and milliseconds
+ for (var i = 1; i < 7; i++) {
+ // provide default values if necessary
+ match[i] = +(match[i] || (i < 3 ? 1 : 0));
+ // match[1] is the month. Months are 0-11 in JavaScript
+ // `Date` objects, but 1-12 in ISO notation, so we
+ // decrement.
+ if (i == 1)
+ match[i]--;
+ }
+
+ // parse the UTC offset component
+ var minuteOffset = +match.pop(), hourOffset = +match.pop(), sign = match.pop();
+
+ // compute the explicit time zone offset if specified
+ var offset = 0;
+ if (sign) {
+ // detect invalid offsets and return early
+ if (hourOffset > 23 || minuteOffset > 59)
+ return NaN;
+
+ // express the provided time zone offset in minutes. The offset is
+ // negative for time zones west of UTC; positive otherwise.
+ offset = (hourOffset * 60 + minuteOffset) * 6e4 * (sign == "+" ? -1 : 1);
+ }
+
+ // Date.UTC for years between 0 and 99 converts year to 1900 + year
+ // The Gregorian calendar has a 400-year cycle, so
+ // to Date.UTC(year + 400, .... ) - 12622780800000 == Date.UTC(year, ...),
+ // where 12622780800000 - number of milliseconds in Gregorian calendar 400 years
+ var year = +match[0];
+ if (0 <= year && year <= 99) {
+ match[0] = year + 400;
+ return NativeDate.UTC.apply(this, match) + offset - 12622780800000;
+ }
+
+ // compute a new UTC date value, accounting for the optional offset
+ return NativeDate.UTC.apply(this, match) + offset;
+ }
+ return NativeDate.parse.apply(this, arguments);
+ };
+
+ return Date;
+ })(Date);
+}
+
+//
+// String
+// ======
+//
+
+// ES5 15.5.4.20
+// http://es5.github.com/#x15.5.4.20
+var ws = "\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003" +
+ "\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028" +
+ "\u2029\uFEFF";
+if (!String.prototype.trim || ws.trim()) {
+ // http://blog.stevenlevithan.com/archives/faster-trim-javascript
+ // http://perfectionkills.com/whitespace-deviations/
+ ws = "[" + ws + "]";
+ var trimBeginRegexp = new RegExp("^" + ws + ws + "*"),
+ trimEndRegexp = new RegExp(ws + ws + "*$");
+ String.prototype.trim = function trim() {
+ return String(this).replace(trimBeginRegexp, "").replace(trimEndRegexp, "");
+ };
+}
+
+//
+// Util
+// ======
+//
+
+// ES5 9.4
+// http://es5.github.com/#x9.4
+// http://jsperf.com/to-integer
+var toInteger = function (n) {
+ n = +n;
+ if (n !== n) // isNaN
+ n = 0;
+ else if (n !== 0 && n !== (1/0) && n !== -(1/0))
+ n = (n > 0 || -1) * Math.floor(Math.abs(n));
+ return n;
+};
+
+var prepareString = "a"[0] != "a",
+ // ES5 9.9
+ // http://es5.github.com/#x9.9
+ toObject = function (o) {
+ if (o == null) { // this matches both null and undefined
+ throw new TypeError(); // TODO message
+ }
+ // If the implementation doesn't support by-index access of
+ // string characters (ex. IE < 7), split the string
+ if (prepareString && typeof o == "string" && o) {
+ return o.split("");
+ }
+ return Object(o);
+ };
+});/* vim:ts=4:sts=4:sw=4:
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ * Irakli Gozalishvili <rfobic@gmail.com> (http://jeditoolkit.com)
+ * Mike de Boer <mike AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/lib/event_emitter', ['require', 'exports', 'module' ], function(require, exports, module) {
+"use strict";
+
+var EventEmitter = {};
+
+EventEmitter._emit =
+EventEmitter._dispatchEvent = function(eventName, e) {
+ this._eventRegistry = this._eventRegistry || {};
+ this._defaultHandlers = this._defaultHandlers || {};
+
+ var listeners = this._eventRegistry[eventName] || [];
+ var defaultHandler = this._defaultHandlers[eventName];
+ if (!listeners.length && !defaultHandler)
+ return;
+
+ e = e || {};
+ e.type = eventName;
+
+ if (!e.stopPropagation) {
+ e.stopPropagation = function() {
+ this.propagationStopped = true;
+ };
+ }
+
+ if (!e.preventDefault) {
+ e.preventDefault = function() {
+ this.defaultPrevented = true;
+ };
+ }
+
+ for (var i=0; i<listeners.length; i++) {
+ listeners[i](e);
+ if (e.propagationStopped)
+ break;
+ }
+
+ if (defaultHandler && !e.defaultPrevented)
+ defaultHandler(e);
+};
+
+EventEmitter.setDefaultHandler = function(eventName, callback) {
+ this._defaultHandlers = this._defaultHandlers || {};
+
+ if (this._defaultHandlers[eventName])
+ throw new Error("The default handler for '" + eventName + "' is already set");
+
+ this._defaultHandlers[eventName] = callback;
+};
+
+EventEmitter.on =
+EventEmitter.addEventListener = function(eventName, callback) {
+ this._eventRegistry = this._eventRegistry || {};
+
+ var listeners = this._eventRegistry[eventName];
+ if (!listeners)
+ var listeners = this._eventRegistry[eventName] = [];
+
+ if (listeners.indexOf(callback) == -1)
+ listeners.push(callback);
+};
+
+EventEmitter.removeListener =
+EventEmitter.removeEventListener = function(eventName, callback) {
+ this._eventRegistry = this._eventRegistry || {};
+
+ var listeners = this._eventRegistry[eventName];
+ if (!listeners)
+ return;
+
+ var index = listeners.indexOf(callback);
+ if (index !== -1)
+ listeners.splice(index, 1);
+};
+
+EventEmitter.removeAllListeners = function(eventName) {
+ if (this._eventRegistry) this._eventRegistry[eventName] = [];
+};
+
+exports.EventEmitter = EventEmitter;
+
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/lib/oop', ['require', 'exports', 'module' ], function(require, exports, module) {
+"use strict";
+
+exports.inherits = (function() {
+ var tempCtor = function() {};
+ return function(ctor, superCtor) {
+ tempCtor.prototype = superCtor.prototype;
+ ctor.super_ = superCtor.prototype;
+ ctor.prototype = new tempCtor();
+ ctor.prototype.constructor = ctor;
+ };
+}());
+
+exports.mixin = function(obj, mixin) {
+ for (var key in mixin) {
+ obj[key] = mixin[key];
+ }
+};
+
+exports.implement = function(proto, mixin) {
+ exports.mixin(proto, mixin);
+};
+
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/css_worker', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/worker/mirror', 'ace/mode/css/csslint'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var Mirror = require("../worker/mirror").Mirror;
+var CSSLint = require("./css/csslint").CSSLint;
+
+var Worker = exports.Worker = function(sender) {
+ Mirror.call(this, sender);
+ this.setTimeout(200);
+};
+
+oop.inherits(Worker, Mirror);
+
+(function() {
+
+ this.onUpdate = function() {
+ var value = this.doc.getValue();
+
+ var result = CSSLint.verify(value);
+ this.sender.emit("csslint", result.messages.map(function(msg) {
+ delete msg.rule;
+ return msg;
+ }));
+ };
+
+}).call(Worker.prototype);
+
+});define('ace/worker/mirror', ['require', 'exports', 'module' , 'ace/document', 'ace/lib/lang'], function(require, exports, module) {
+"use strict";
+
+var Document = require("../document").Document;
+var lang = require("../lib/lang");
+
+var Mirror = exports.Mirror = function(sender) {
+ this.sender = sender;
+ var doc = this.doc = new Document("");
+
+ var deferredUpdate = this.deferredUpdate = lang.deferredCall(this.onUpdate.bind(this));
+
+ var _self = this;
+ sender.on("change", function(e) {
+ doc.applyDeltas([e.data]);
+ deferredUpdate.schedule(_self.$timeout);
+ });
+};
+
+(function() {
+
+ this.$timeout = 500;
+
+ this.setTimeout = function(timeout) {
+ this.$timeout = timeout;
+ };
+
+ this.setValue = function(value) {
+ this.doc.setValue(value);
+ this.deferredUpdate.schedule(this.$timeout);
+ };
+
+ this.getValue = function(callbackId) {
+ this.sender.callback(this.doc.getValue(), callbackId);
+ };
+
+ this.onUpdate = function() {
+ // abstract method
+ };
+
+}).call(Mirror.prototype);
+
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/document', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event_emitter', 'ace/range', 'ace/anchor'], function(require, exports, module) {
+"use strict";
+
+var oop = require("./lib/oop");
+var EventEmitter = require("./lib/event_emitter").EventEmitter;
+var Range = require("./range").Range;
+var Anchor = require("./anchor").Anchor;
+
+var Document = function(text) {
+ this.$lines = [];
+
+ if (Array.isArray(text)) {
+ this.insertLines(0, text);
+ }
+ // There has to be one line at least in the document. If you pass an empty
+ // string to the insert function, nothing will happen. Workaround.
+ else if (text.length == 0) {
+ this.$lines = [""];
+ } else {
+ this.insert({row: 0, column:0}, text);
+ }
+};
+
+(function() {
+
+ oop.implement(this, EventEmitter);
+
+ this.setValue = function(text) {
+ var len = this.getLength();
+ this.remove(new Range(0, 0, len, this.getLine(len-1).length));
+ this.insert({row: 0, column:0}, text);
+ };
+
+ this.getValue = function() {
+ return this.getAllLines().join(this.getNewLineCharacter());
+ };
+
+ this.createAnchor = function(row, column) {
+ return new Anchor(this, row, column);
+ };
+
+ // check for IE split bug
+ if ("aaa".split(/a/).length == 0)
+ this.$split = function(text) {
+ return text.replace(/\r\n|\r/g, "\n").split("\n");
+ }
+ else
+ this.$split = function(text) {
+ return text.split(/\r\n|\r|\n/);
+ };
+
+
+ this.$detectNewLine = function(text) {
+ var match = text.match(/^.*?(\r\n|\r|\n)/m);
+ if (match) {
+ this.$autoNewLine = match[1];
+ } else {
+ this.$autoNewLine = "\n";
+ }
+ };
+
+ this.getNewLineCharacter = function() {
+ switch (this.$newLineMode) {
+ case "windows":
+ return "\r\n";
+
+ case "unix":
+ return "\n";
+
+ case "auto":
+ return this.$autoNewLine;
+ }
+ };
+
+ this.$autoNewLine = "\n";
+ this.$newLineMode = "auto";
+ this.setNewLineMode = function(newLineMode) {
+ if (this.$newLineMode === newLineMode)
+ return;
+
+ this.$newLineMode = newLineMode;
+ };
+
+ this.getNewLineMode = function() {
+ return this.$newLineMode;
+ };
+
+ this.isNewLine = function(text) {
+ return (text == "\r\n" || text == "\r" || text == "\n");
+ };
+
+ /**
+ * Get a verbatim copy of the given line as it is in the document
+ */
+ this.getLine = function(row) {
+ return this.$lines[row] || "";
+ };
+
+ this.getLines = function(firstRow, lastRow) {
+ return this.$lines.slice(firstRow, lastRow + 1);
+ };
+
+ /**
+ * Returns all lines in the document as string array. Warning: The caller
+ * should not modify this array!
+ */
+ this.getAllLines = function() {
+ return this.getLines(0, this.getLength());
+ };
+
+ this.getLength = function() {
+ return this.$lines.length;
+ };
+
+ this.getTextRange = function(range) {
+ if (range.start.row == range.end.row) {
+ return this.$lines[range.start.row].substring(range.start.column,
+ range.end.column);
+ }
+ else {
+ var lines = [];
+ lines.push(this.$lines[range.start.row].substring(range.start.column));
+ lines.push.apply(lines, this.getLines(range.start.row+1, range.end.row-1));
+ lines.push(this.$lines[range.end.row].substring(0, range.end.column));
+ return lines.join(this.getNewLineCharacter());
+ }
+ };
+
+ this.$clipPosition = function(position) {
+ var length = this.getLength();
+ if (position.row >= length) {
+ position.row = Math.max(0, length - 1);
+ position.column = this.getLine(length-1).length;
+ }
+ return position;
+ };
+
+ this.insert = function(position, text) {
+ if (text.length == 0)
+ return position;
+
+ position = this.$clipPosition(position);
+
+ if (this.getLength() <= 1)
+ this.$detectNewLine(text);
+
+ var lines = this.$split(text);
+ var firstLine = lines.splice(0, 1)[0];
+ var lastLine = lines.length == 0 ? null : lines.splice(lines.length - 1, 1)[0];
+
+ position = this.insertInLine(position, firstLine);
+ if (lastLine !== null) {
+ position = this.insertNewLine(position); // terminate first line
+ position = this.insertLines(position.row, lines);
+ position = this.insertInLine(position, lastLine || "");
+ }
+ return position;
+ };
+
+ this.insertLines = function(row, lines) {
+ if (lines.length == 0)
+ return {row: row, column: 0};
+
+ var args = [row, 0];
+ args.push.apply(args, lines);
+ this.$lines.splice.apply(this.$lines, args);
+
+ var range = new Range(row, 0, row + lines.length, 0);
+ var delta = {
+ action: "insertLines",
+ range: range,
+ lines: lines
+ };
+ this._emit("change", { data: delta });
+ return range.end;
+ };
+
+ this.insertNewLine = function(position) {
+ position = this.$clipPosition(position);
+ var line = this.$lines[position.row] || "";
+
+ this.$lines[position.row] = line.substring(0, position.column);
+ this.$lines.splice(position.row + 1, 0, line.substring(position.column, line.length));
+
+ var end = {
+ row : position.row + 1,
+ column : 0
+ };
+
+ var delta = {
+ action: "insertText",
+ range: Range.fromPoints(position, end),
+ text: this.getNewLineCharacter()
+ };
+ this._emit("change", { data: delta });
+
+ return end;
+ };
+
+ this.insertInLine = function(position, text) {
+ if (text.length == 0)
+ return position;
+
+ var line = this.$lines[position.row] || "";
+
+ this.$lines[position.row] = line.substring(0, position.column) + text
+ + line.substring(position.column);
+
+ var end = {
+ row : position.row,
+ column : position.column + text.length
+ };
+
+ var delta = {
+ action: "insertText",
+ range: Range.fromPoints(position, end),
+ text: text
+ };
+ this._emit("change", { data: delta });
+
+ return end;
+ };
+
+ this.remove = function(range) {
+ // clip to document
+ range.start = this.$clipPosition(range.start);
+ range.end = this.$clipPosition(range.end);
+
+ if (range.isEmpty())
+ return range.start;
+
+ var firstRow = range.start.row;
+ var lastRow = range.end.row;
+
+ if (range.isMultiLine()) {
+ var firstFullRow = range.start.column == 0 ? firstRow : firstRow + 1;
+ var lastFullRow = lastRow - 1;
+
+ if (range.end.column > 0)
+ this.removeInLine(lastRow, 0, range.end.column);
+
+ if (lastFullRow >= firstFullRow)
+ this.removeLines(firstFullRow, lastFullRow);
+
+ if (firstFullRow != firstRow) {
+ this.removeInLine(firstRow, range.start.column, this.getLine(firstRow).length);
+ this.removeNewLine(range.start.row);
+ }
+ }
+ else {
+ this.removeInLine(firstRow, range.start.column, range.end.column);
+ }
+ return range.start;
+ };
+
+ this.removeInLine = function(row, startColumn, endColumn) {
+ if (startColumn == endColumn)
+ return;
+
+ var range = new Range(row, startColumn, row, endColumn);
+ var line = this.getLine(row);
+ var removed = line.substring(startColumn, endColumn);
+ var newLine = line.substring(0, startColumn) + line.substring(endColumn, line.length);
+ this.$lines.splice(row, 1, newLine);
+
+ var delta = {
+ action: "removeText",
+ range: range,
+ text: removed
+ };
+ this._emit("change", { data: delta });
+ return range.start;
+ };
+
+ /**
+ * Removes a range of full lines
+ *
+ * @param firstRow {Integer} The first row to be removed
+ * @param lastRow {Integer} The last row to be removed
+ * @return {String[]} The removed lines
+ */
+ this.removeLines = function(firstRow, lastRow) {
+ var range = new Range(firstRow, 0, lastRow + 1, 0);
+ var removed = this.$lines.splice(firstRow, lastRow - firstRow + 1);
+
+ var delta = {
+ action: "removeLines",
+ range: range,
+ nl: this.getNewLineCharacter(),
+ lines: removed
+ };
+ this._emit("change", { data: delta });
+ return removed;
+ };
+
+ this.removeNewLine = function(row) {
+ var firstLine = this.getLine(row);
+ var secondLine = this.getLine(row+1);
+
+ var range = new Range(row, firstLine.length, row+1, 0);
+ var line = firstLine + secondLine;
+
+ this.$lines.splice(row, 2, line);
+
+ var delta = {
+ action: "removeText",
+ range: range,
+ text: this.getNewLineCharacter()
+ };
+ this._emit("change", { data: delta });
+ };
+
+ this.replace = function(range, text) {
+ if (text.length == 0 && range.isEmpty())
+ return range.start;
+
+ // Shortcut: If the text we want to insert is the same as it is already
+ // in the document, we don't have to replace anything.
+ if (text == this.getTextRange(range))
+ return range.end;
+
+ this.remove(range);
+ if (text) {
+ var end = this.insert(range.start, text);
+ }
+ else {
+ end = range.start;
+ }
+
+ return end;
+ };
+
+ this.applyDeltas = function(deltas) {
+ for (var i=0; i<deltas.length; i++) {
+ var delta = deltas[i];
+ var range = Range.fromPoints(delta.range.start, delta.range.end);
+
+ if (delta.action == "insertLines")
+ this.insertLines(range.start.row, delta.lines);
+ else if (delta.action == "insertText")
+ this.insert(range.start, delta.text);
+ else if (delta.action == "removeLines")
+ this.removeLines(range.start.row, range.end.row - 1);
+ else if (delta.action == "removeText")
+ this.remove(range);
+ }
+ };
+
+ this.revertDeltas = function(deltas) {
+ for (var i=deltas.length-1; i>=0; i--) {
+ var delta = deltas[i];
+
+ var range = Range.fromPoints(delta.range.start, delta.range.end);
+
+ if (delta.action == "insertLines")
+ this.removeLines(range.start.row, range.end.row - 1);
+ else if (delta.action == "insertText")
+ this.remove(range);
+ else if (delta.action == "removeLines")
+ this.insertLines(range.start.row, delta.lines);
+ else if (delta.action == "removeText")
+ this.insert(range.start, delta.text);
+ }
+ };
+
+}).call(Document.prototype);
+
+exports.Document = Document;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/range', ['require', 'exports', 'module' ], function(require, exports, module) {
+"use strict";
+
+var Range = function(startRow, startColumn, endRow, endColumn) {
+ this.start = {
+ row: startRow,
+ column: startColumn
+ };
+
+ this.end = {
+ row: endRow,
+ column: endColumn
+ };
+};
+
+(function() {
+ this.isEequal = function(range) {
+ return this.start.row == range.start.row &&
+ this.end.row == range.end.row &&
+ this.start.column == range.start.column &&
+ this.end.column == range.end.column
+ };
+
+ this.toString = function() {
+ return ("Range: [" + this.start.row + "/" + this.start.column +
+ "] -> [" + this.end.row + "/" + this.end.column + "]");
+ };
+
+ this.contains = function(row, column) {
+ return this.compare(row, column) == 0;
+ };
+
+ /**
+ * Compares this range (A) with another range (B), where B is the passed in
+ * range.
+ *
+ * Return values:
+ * -2: (B) is infront of (A) and doesn't intersect with (A)
+ * -1: (B) begins before (A) but ends inside of (A)
+ * 0: (B) is completly inside of (A) OR (A) is complety inside of (B)
+ * +1: (B) begins inside of (A) but ends outside of (A)
+ * +2: (B) is after (A) and doesn't intersect with (A)
+ *
+ * 42: FTW state: (B) ends in (A) but starts outside of (A)
+ */
+ this.compareRange = function(range) {
+ var cmp,
+ end = range.end,
+ start = range.start;
+
+ cmp = this.compare(end.row, end.column);
+ if (cmp == 1) {
+ cmp = this.compare(start.row, start.column);
+ if (cmp == 1) {
+ return 2;
+ } else if (cmp == 0) {
+ return 1;
+ } else {
+ return 0;
+ }
+ } else if (cmp == -1) {
+ return -2;
+ } else {
+ cmp = this.compare(start.row, start.column);
+ if (cmp == -1) {
+ return -1;
+ } else if (cmp == 1) {
+ return 42;
+ } else {
+ return 0;
+ }
+ }
+ }
+
+ this.comparePoint = function(p) {
+ return this.compare(p.row, p.column);
+ }
+
+ this.containsRange = function(range) {
+ return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;
+ }
+
+ this.isEnd = function(row, column) {
+ return this.end.row == row && this.end.column == column;
+ }
+
+ this.isStart = function(row, column) {
+ return this.start.row == row && this.start.column == column;
+ }
+
+ this.setStart = function(row, column) {
+ if (typeof row == "object") {
+ this.start.column = row.column;
+ this.start.row = row.row;
+ } else {
+ this.start.row = row;
+ this.start.column = column;
+ }
+ }
+
+ this.setEnd = function(row, column) {
+ if (typeof row == "object") {
+ this.end.column = row.column;
+ this.end.row = row.row;
+ } else {
+ this.end.row = row;
+ this.end.column = column;
+ }
+ }
+
+ this.inside = function(row, column) {
+ if (this.compare(row, column) == 0) {
+ if (this.isEnd(row, column) || this.isStart(row, column)) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ this.insideStart = function(row, column) {
+ if (this.compare(row, column) == 0) {
+ if (this.isEnd(row, column)) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ this.insideEnd = function(row, column) {
+ if (this.compare(row, column) == 0) {
+ if (this.isStart(row, column)) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ this.compare = function(row, column) {
+ if (!this.isMultiLine()) {
+ if (row === this.start.row) {
+ return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);
+ };
+ }
+
+ if (row < this.start.row)
+ return -1;
+
+ if (row > this.end.row)
+ return 1;
+
+ if (this.start.row === row)
+ return column >= this.start.column ? 0 : -1;
+
+ if (this.end.row === row)
+ return column <= this.end.column ? 0 : 1;
+
+ return 0;
+ };
+
+ /**
+ * Like .compare(), but if isStart is true, return -1;
+ */
+ this.compareStart = function(row, column) {
+ if (this.start.row == row && this.start.column == column) {
+ return -1;
+ } else {
+ return this.compare(row, column);
+ }
+ }
+
+ /**
+ * Like .compare(), but if isEnd is true, return 1;
+ */
+ this.compareEnd = function(row, column) {
+ if (this.end.row == row && this.end.column == column) {
+ return 1;
+ } else {
+ return this.compare(row, column);
+ }
+ }
+
+ this.compareInside = function(row, column) {
+ if (this.end.row == row && this.end.column == column) {
+ return 1;
+ } else if (this.start.row == row && this.start.column == column) {
+ return -1;
+ } else {
+ return this.compare(row, column);
+ }
+ }
+
+ this.clipRows = function(firstRow, lastRow) {
+ if (this.end.row > lastRow) {
+ var end = {
+ row: lastRow+1,
+ column: 0
+ };
+ }
+
+ if (this.start.row > lastRow) {
+ var start = {
+ row: lastRow+1,
+ column: 0
+ };
+ }
+
+ if (this.start.row < firstRow) {
+ var start = {
+ row: firstRow,
+ column: 0
+ };
+ }
+
+ if (this.end.row < firstRow) {
+ var end = {
+ row: firstRow,
+ column: 0
+ };
+ }
+ return Range.fromPoints(start || this.start, end || this.end);
+ };
+
+ this.extend = function(row, column) {
+ var cmp = this.compare(row, column);
+
+ if (cmp == 0)
+ return this;
+ else if (cmp == -1)
+ var start = {row: row, column: column};
+ else
+ var end = {row: row, column: column};
+
+ return Range.fromPoints(start || this.start, end || this.end);
+ };
+
+ this.isEmpty = function() {
+ return (this.start.row == this.end.row && this.start.column == this.end.column);
+ };
+
+ this.isMultiLine = function() {
+ return (this.start.row !== this.end.row);
+ };
+
+ this.clone = function() {
+ return Range.fromPoints(this.start, this.end);
+ };
+
+ this.collapseRows = function() {
+ if (this.end.column == 0)
+ return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0)
+ else
+ return new Range(this.start.row, 0, this.end.row, 0)
+ };
+
+ this.toScreenRange = function(session) {
+ var screenPosStart =
+ session.documentToScreenPosition(this.start);
+ var screenPosEnd =
+ session.documentToScreenPosition(this.end);
+
+ return new Range(
+ screenPosStart.row, screenPosStart.column,
+ screenPosEnd.row, screenPosEnd.column
+ );
+ };
+
+}).call(Range.prototype);
+
+
+Range.fromPoints = function(start, end) {
+ return new Range(start.row, start.column, end.row, end.column);
+};
+
+exports.Range = Range;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/anchor', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event_emitter'], function(require, exports, module) {
+"use strict";
+
+var oop = require("./lib/oop");
+var EventEmitter = require("./lib/event_emitter").EventEmitter;
+
+/**
+ * An Anchor is a floating pointer in the document. Whenever text is inserted or
+ * deleted before the cursor, the position of the cursor is updated
+ */
+var Anchor = exports.Anchor = function(doc, row, column) {
+ this.document = doc;
+
+ if (typeof column == "undefined")
+ this.setPosition(row.row, row.column);
+ else
+ this.setPosition(row, column);
+
+ this.$onChange = this.onChange.bind(this);
+ doc.on("change", this.$onChange);
+};
+
+(function() {
+
+ oop.implement(this, EventEmitter);
+
+ this.getPosition = function() {
+ return this.$clipPositionToDocument(this.row, this.column);
+ };
+
+ this.getDocument = function() {
+ return this.document;
+ };
+
+ this.onChange = function(e) {
+ var delta = e.data;
+ var range = delta.range;
+
+ if (range.start.row == range.end.row && range.start.row != this.row)
+ return;
+
+ if (range.start.row > this.row)
+ return;
+
+ if (range.start.row == this.row && range.start.column > this.column)
+ return;
+
+ var row = this.row;
+ var column = this.column;
+
+ if (delta.action === "insertText") {
+ if (range.start.row === row && range.start.column <= column) {
+ if (range.start.row === range.end.row) {
+ column += range.end.column - range.start.column;
+ }
+ else {
+ column -= range.start.column;
+ row += range.end.row - range.start.row;
+ }
+ }
+ else if (range.start.row !== range.end.row && range.start.row < row) {
+ row += range.end.row - range.start.row;
+ }
+ } else if (delta.action === "insertLines") {
+ if (range.start.row <= row) {
+ row += range.end.row - range.start.row;
+ }
+ }
+ else if (delta.action == "removeText") {
+ if (range.start.row == row && range.start.column < column) {
+ if (range.end.column >= column)
+ column = range.start.column;
+ else
+ column = Math.max(0, column - (range.end.column - range.start.column));
+
+ } else if (range.start.row !== range.end.row && range.start.row < row) {
+ if (range.end.row == row) {
+ column = Math.max(0, column - range.end.column) + range.start.column;
+ }
+ row -= (range.end.row - range.start.row);
+ }
+ else if (range.end.row == row) {
+ row -= range.end.row - range.start.row;
+ column = Math.max(0, column - range.end.column) + range.start.column;
+ }
+ } else if (delta.action == "removeLines") {
+ if (range.start.row <= row) {
+ if (range.end.row <= row)
+ row -= range.end.row - range.start.row;
+ else {
+ row = range.start.row;
+ column = 0;
+ }
+ }
+ }
+
+ this.setPosition(row, column, true);
+ };
+
+ this.setPosition = function(row, column, noClip) {
+ var pos;
+ if (noClip) {
+ pos = {
+ row: row,
+ column: column
+ };
+ }
+ else {
+ pos = this.$clipPositionToDocument(row, column);
+ }
+
+ if (this.row == pos.row && this.column == pos.column)
+ return;
+
+ var old = {
+ row: this.row,
+ column: this.column
+ };
+
+ this.row = pos.row;
+ this.column = pos.column;
+ this._emit("change", {
+ old: old,
+ value: pos
+ });
+ };
+
+ this.detach = function() {
+ this.document.removeEventListener("change", this.$onChange);
+ };
+
+ this.$clipPositionToDocument = function(row, column) {
+ var pos = {};
+
+ if (row >= this.document.getLength()) {
+ pos.row = Math.max(0, this.document.getLength() - 1);
+ pos.column = this.document.getLine(pos.row).length;
+ }
+ else if (row < 0) {
+ pos.row = 0;
+ pos.column = 0;
+ }
+ else {
+ pos.row = row;
+ pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));
+ }
+
+ if (column < 0)
+ pos.column = 0;
+
+ return pos;
+ };
+
+}).call(Anchor.prototype);
+
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/lib/lang', ['require', 'exports', 'module' ], function(require, exports, module) {
+"use strict";
+
+exports.stringReverse = function(string) {
+ return string.split("").reverse().join("");
+};
+
+exports.stringRepeat = function (string, count) {
+ return new Array(count + 1).join(string);
+};
+
+var trimBeginRegexp = /^\s\s*/;
+var trimEndRegexp = /\s\s*$/;
+
+exports.stringTrimLeft = function (string) {
+ return string.replace(trimBeginRegexp, '');
+};
+
+exports.stringTrimRight = function (string) {
+ return string.replace(trimEndRegexp, '');
+};
+
+exports.copyObject = function(obj) {
+ var copy = {};
+ for (var key in obj) {
+ copy[key] = obj[key];
+ }
+ return copy;
+};
+
+exports.copyArray = function(array){
+ var copy = [];
+ for (var i=0, l=array.length; i<l; i++) {
+ if (array[i] && typeof array[i] == "object")
+ copy[i] = this.copyObject( array[i] );
+ else
+ copy[i] = array[i];
+ }
+ return copy;
+};
+
+exports.deepCopy = function (obj) {
+ if (typeof obj != "object") {
+ return obj;
+ }
+
+ var copy = obj.constructor();
+ for (var key in obj) {
+ if (typeof obj[key] == "object") {
+ copy[key] = this.deepCopy(obj[key]);
+ } else {
+ copy[key] = obj[key];
+ }
+ }
+ return copy;
+};
+
+exports.arrayToMap = function(arr) {
+ var map = {};
+ for (var i=0; i<arr.length; i++) {
+ map[arr[i]] = 1;
+ }
+ return map;
+
+};
+
+/**
+ * splice out of 'array' anything that === 'value'
+ */
+exports.arrayRemove = function(array, value) {
+ for (var i = 0; i <= array.length; i++) {
+ if (value === array[i]) {
+ array.splice(i, 1);
+ }
+ }
+};
+
+exports.escapeRegExp = function(str) {
+ return str.replace(/([.*+?^${}()|[\]\/\\])/g, '\\$1');
+};
+
+exports.deferredCall = function(fcn) {
+
+ var timer = null;
+ var callback = function() {
+ timer = null;
+ fcn();
+ };
+
+ var deferred = function(timeout) {
+ deferred.cancel();
+ timer = setTimeout(callback, timeout || 0);
+ return deferred;
+ };
+
+ deferred.schedule = deferred;
+
+ deferred.call = function() {
+ this.cancel();
+ fcn();
+ return deferred;
+ };
+
+ deferred.cancel = function() {
+ clearTimeout(timer);
+ timer = null;
+ return deferred;
+ };
+
+ return deferred;
+};
+
+});
+/*
+CSSLint
+Copyright (c) 2011 Nicole Sullivan and Nicholas C. Zakas. 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 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.
+
+*/
+define('ace/mode/css/csslint', ['require', 'exports', 'module' ], function(require, exports, module) {
+/*!
+Parser-Lib
+Copyright (c) 2009-2011 Nicholas C. Zakas. 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 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.
+
+*/
+/* Build time: 13-July-2011 04:35:28 */
+var parserlib = {};
+(function(){
+
+/**
+ * A generic base to inherit from for any object
+ * that needs event handling.
+ * @class EventTarget
+ * @constructor
+ */
+function EventTarget(){
+
+ /**
+ * The array of listeners for various events.
+ * @type Object
+ * @property _listeners
+ * @private
+ */
+ this._listeners = {};
+}
+
+EventTarget.prototype = {
+
+ //restore constructor
+ constructor: EventTarget,
+
+ /**
+ * Adds a listener for a given event type.
+ * @param {String} type The type of event to add a listener for.
+ * @param {Function} listener The function to call when the event occurs.
+ * @return {void}
+ * @method addListener
+ */
+ addListener: function(type, listener){
+ if (!this._listeners[type]){
+ this._listeners[type] = [];
+ }
+
+ this._listeners[type].push(listener);
+ },
+
+ /**
+ * Fires an event based on the passed-in object.
+ * @param {Object|String} event An object with at least a 'type' attribute
+ * or a string indicating the event name.
+ * @return {void}
+ * @method fire
+ */
+ fire: function(event){
+ if (typeof event == "string"){
+ event = { type: event };
+ }
+ if (!event.target){
+ event.target = this;
+ }
+
+ if (!event.type){
+ throw new Error("Event object missing 'type' property.");
+ }
+
+ if (this._listeners[event.type]){
+
+ //create a copy of the array and use that so listeners can't chane
+ var listeners = this._listeners[event.type].concat();
+ for (var i=0, len=listeners.length; i < len; i++){
+ listeners[i].call(this, event);
+ }
+ }
+ },
+
+ /**
+ * Removes a listener for a given event type.
+ * @param {String} type The type of event to remove a listener from.
+ * @param {Function} listener The function to remove from the event.
+ * @return {void}
+ * @method removeListener
+ */
+ removeListener: function(type, listener){
+ if (this._listeners[type]){
+ var listeners = this._listeners[type];
+ for (var i=0, len=listeners.length; i < len; i++){
+ if (listeners[i] === listener){
+ listeners.splice(i, 1);
+ break;
+ }
+ }
+
+
+ }
+ }
+};
+/**
+ * Convenient way to read through strings.
+ * @namespace parserlib.util
+ * @class StringReader
+ * @constructor
+ * @param {String} text The text to read.
+ */
+function StringReader(text){
+
+ /**
+ * The input text with line endings normalized.
+ * @property _input
+ * @type String
+ * @private
+ */
+ this._input = text.replace(/\n\r?/g, "\n");
+
+
+ /**
+ * The row for the character to be read next.
+ * @property _line
+ * @type int
+ * @private
+ */
+ this._line = 1;
+
+
+ /**
+ * The column for the character to be read next.
+ * @property _col
+ * @type int
+ * @private
+ */
+ this._col = 1;
+
+ /**
+ * The index of the character in the input to be read next.
+ * @property _cursor
+ * @type int
+ * @private
+ */
+ this._cursor = 0;
+}
+
+StringReader.prototype = {
+
+ //restore constructor
+ constructor: StringReader,
+
+ //-------------------------------------------------------------------------
+ // Position info
+ //-------------------------------------------------------------------------
+
+ /**
+ * Returns the column of the character to be read next.
+ * @return {int} The column of the character to be read next.
+ * @method getCol
+ */
+ getCol: function(){
+ return this._col;
+ },
+
+ /**
+ * Returns the row of the character to be read next.
+ * @return {int} The row of the character to be read next.
+ * @method getLine
+ */
+ getLine: function(){
+ return this._line ;
+ },
+
+ /**
+ * Determines if you're at the end of the input.
+ * @return {Boolean} True if there's no more input, false otherwise.
+ * @method eof
+ */
+ eof: function(){
+ return (this._cursor == this._input.length);
+ },
+
+ //-------------------------------------------------------------------------
+ // Basic reading
+ //-------------------------------------------------------------------------
+
+ /**
+ * Reads the next character without advancing the cursor.
+ * @param {int} count How many characters to look ahead (default is 1).
+ * @return {String} The next character or null if there is no next character.
+ * @method peek
+ */
+ peek: function(count){
+ var c = null;
+ count = (typeof count == "undefined" ? 1 : count);
+
+ //if we're not at the end of the input...
+ if (this._cursor < this._input.length){
+
+ //get character and increment cursor and column
+ c = this._input.charAt(this._cursor + count - 1);
+ }
+
+ return c;
+ },
+
+ /**
+ * Reads the next character from the input and adjusts the row and column
+ * accordingly.
+ * @return {String} The next character or null if there is no next character.
+ * @method read
+ */
+ read: function(){
+ var c = null;
+
+ //if we're not at the end of the input...
+ if (this._cursor < this._input.length){
+
+ //if the last character was a newline, increment row count
+ //and reset column count
+ if (this._input.charAt(this._cursor) == "\n"){
+ this._line++;
+ this._col=1;
+ } else {
+ this._col++;
+ }
+
+ //get character and increment cursor and column
+ c = this._input.charAt(this._cursor++);
+ }
+
+ return c;
+ },
+
+ //-------------------------------------------------------------------------
+ // Misc
+ //-------------------------------------------------------------------------
+
+ /**
+ * Saves the current location so it can be returned to later.
+ * @method mark
+ * @return {void}
+ */
+ mark: function(){
+ this._bookmark = {
+ cursor: this._cursor,
+ line: this._line,
+ col: this._col
+ };
+ },
+
+ reset: function(){
+ if (this._bookmark){
+ this._cursor = this._bookmark.cursor;
+ this._line = this._bookmark.line;
+ this._col = this._bookmark.col;
+ delete this._bookmark;
+ }
+ },
+
+ //-------------------------------------------------------------------------
+ // Advanced reading
+ //-------------------------------------------------------------------------
+
+ /**
+ * Reads up to and including the given string. Throws an error if that
+ * string is not found.
+ * @param {String} pattern The string to read.
+ * @return {String} The string when it is found.
+ * @throws Error when the string pattern is not found.
+ * @method readTo
+ */
+ readTo: function(pattern){
+
+ var buffer = "",
+ c;
+
+ /*
+ * First, buffer must be the same length as the pattern.
+ * Then, buffer must end with the pattern or else reach the
+ * end of the input.
+ */
+ while (buffer.length < pattern.length || buffer.lastIndexOf(pattern) != buffer.length - pattern.length){
+ c = this.read();
+ if (c){
+ buffer += c;
+ } else {
+ throw new Error("Expected \"" + pattern + "\" at line " + this._line + ", col " + this._col + ".");
+ }
+ }
+
+ return buffer;
+
+ },
+
+ /**
+ * Reads characters while each character causes the given
+ * filter function to return true. The function is passed
+ * in each character and either returns true to continue
+ * reading or false to stop.
+ * @param {Function} filter The function to read on each character.
+ * @return {String} The string made up of all characters that passed the
+ * filter check.
+ * @method readWhile
+ */
+ readWhile: function(filter){
+
+ var buffer = "",
+ c = this.read();
+
+ while(c !== null && filter(c)){
+ buffer += c;
+ c = this.read();
+ }
+
+ return buffer;
+
+ },
+
+ /**
+ * Reads characters that match either text or a regular expression and
+ * returns those characters. If a match is found, the row and column
+ * are adjusted; if no match is found, the reader's state is unchanged.
+ * reading or false to stop.
+ * @param {String|RegExp} matchter If a string, then the literal string
+ * value is searched for. If a regular expression, then any string
+ * matching the pattern is search for.
+ * @return {String} The string made up of all characters that matched or
+ * null if there was no match.
+ * @method readMatch
+ */
+ readMatch: function(matcher){
+
+ var source = this._input.substring(this._cursor),
+ value = null;
+
+ //if it's a string, just do a straight match
+ if (typeof matcher == "string"){
+ if (source.indexOf(matcher) === 0){
+ value = this.readCount(matcher.length);
+ }
+ } else if (matcher instanceof RegExp){
+ if (matcher.test(source)){
+ value = this.readCount(RegExp.lastMatch.length);
+ }
+ }
+
+ return value;
+ },
+
+
+ /**
+ * Reads a given number of characters. If the end of the input is reached,
+ * it reads only the remaining characters and does not throw an error.
+ * @param {int} count The number of characters to read.
+ * @return {String} The string made up the read characters.
+ * @method readCount
+ */
+ readCount: function(count){
+ var buffer = "";
+
+ while(count--){
+ buffer += this.read();
+ }
+
+ return buffer;
+ }
+
+};
+/**
+ * Type to use when a syntax error occurs.
+ * @class SyntaxError
+ * @namespace parserlib.util
+ * @constructor
+ * @param {String} message The error message.
+ * @param {int} line The line at which the error occurred.
+ * @param {int} col The column at which the error occurred.
+ */
+function SyntaxError(message, line, col){
+
+ /**
+ * The column at which the error occurred.
+ * @type int
+ * @property col
+ */
+ this.col = col;
+
+ /**
+ * The line at which the error occurred.
+ * @type int
+ * @property line
+ */
+ this.line = line;
+
+ /**
+ * The text representation of the unit.
+ * @type String
+ * @property text
+ */
+ this.message = message;
+
+}
+
+//inherit from Error
+SyntaxError.prototype = new Error();
+/**
+ * Base type to represent a single syntactic unit.
+ * @class SyntaxUnit
+ * @namespace parserlib.util
+ * @constructor
+ * @param {String} text The text of the unit.
+ * @param {int} line The line of text on which the unit resides.
+ * @param {int} col The column of text on which the unit resides.
+ */
+function SyntaxUnit(text, line, col){
+
+
+ /**
+ * The column of text on which the unit resides.
+ * @type int
+ * @property col
+ */
+ this.col = col;
+
+ /**
+ * The line of text on which the unit resides.
+ * @type int
+ * @property line
+ */
+ this.line = line;
+
+ /**
+ * The text representation of the unit.
+ * @type String
+ * @property text
+ */
+ this.text = text;
+
+}
+
+/**
+ * Create a new syntax unit based solely on the given token.
+ * Convenience method for creating a new syntax unit when
+ * it represents a single token instead of multiple.
+ * @param {Object} token The token object to represent.
+ * @return {parserlib.util.SyntaxUnit} The object representing the token.
+ * @static
+ * @method fromToken
+ */
+SyntaxUnit.fromToken = function(token){
+ return new SyntaxUnit(token.value, token.startLine, token.startCol);
+};
+
+SyntaxUnit.prototype = {
+
+ //restore constructor
+ constructor: SyntaxUnit,
+
+ /**
+ * Returns the text representation of the unit.
+ * @return {String} The text representation of the unit.
+ * @method valueOf
+ */
+ valueOf: function(){
+ return this.toString();
+ },
+
+ /**
+ * Returns the text representation of the unit.
+ * @return {String} The text representation of the unit.
+ * @method toString
+ */
+ toString: function(){
+ return this.text;
+ }
+
+};
+/**
+ * Generic TokenStream providing base functionality.
+ * @class TokenStreamBase
+ * @namespace parserlib.util
+ * @constructor
+ * @param {String|StringReader} input The text to tokenize or a reader from
+ * which to read the input.
+ */
+function TokenStreamBase(input, tokenData){
+
+ /**
+ * The string reader for easy access to the text.
+ * @type StringReader
+ * @property _reader
+ * @private
+ */
+ //this._reader = (typeof input == "string") ? new StringReader(input) : input;
+ this._reader = input ? new StringReader(input.toString()) : null;
+
+ /**
+ * Token object for the last consumed token.
+ * @type Token
+ * @property _token
+ * @private
+ */
+ this._token = null;
+
+ /**
+ * The array of token information.
+ * @type Array
+ * @property _tokenData
+ * @private
+ */
+ this._tokenData = tokenData;
+
+ /**
+ * Lookahead token buffer.
+ * @type Array
+ * @property _lt
+ * @private
+ */
+ this._lt = [];
+
+ /**
+ * Lookahead token buffer index.
+ * @type int
+ * @property _ltIndex
+ * @private
+ */
+ this._ltIndex = 0;
+
+ this._ltIndexCache = [];
+}
+
+/**
+ * Accepts an array of token information and outputs
+ * an array of token data containing key-value mappings
+ * and matching functions that the TokenStream needs.
+ * @param {Array} tokens An array of token descriptors.
+ * @return {Array} An array of processed token data.
+ * @method createTokenData
+ * @static
+ */
+TokenStreamBase.createTokenData = function(tokens){
+
+ var nameMap = [],
+ typeMap = {},
+ tokenData = tokens.concat([]),
+ i = 0,
+ len = tokenData.length+1;
+
+ tokenData.UNKNOWN = -1;
+ tokenData.unshift({name:"EOF"});
+
+ for (; i < len; i++){
+ nameMap.push(tokenData[i].name);
+ tokenData[tokenData[i].name] = i;
+ if (tokenData[i].text){
+ typeMap[tokenData[i].text] = i;
+ }
+ }
+
+ tokenData.name = function(tt){
+ return nameMap[tt];
+ };
+
+ tokenData.type = function(c){
+ return typeMap[c];
+ };
+
+ return tokenData;
+};
+
+TokenStreamBase.prototype = {
+
+ //restore constructor
+ constructor: TokenStreamBase,
+
+ //-------------------------------------------------------------------------
+ // Matching methods
+ //-------------------------------------------------------------------------
+
+ /**
+ * Determines if the next token matches the given token type.
+ * If so, that token is consumed; if not, the token is placed
+ * back onto the token stream. You can pass in any number of
+ * token types and this will return true if any of the token
+ * types is found.
+ * @param {int|int[]} tokenTypes Either a single token type or an array of
+ * token types that the next token might be. If an array is passed,
+ * it's assumed that the token can be any of these.
+ * @param {variant} channel (Optional) The channel to read from. If not
+ * provided, reads from the default (unnamed) channel.
+ * @return {Boolean} True if the token type matches, false if not.
+ * @method match
+ */
+ match: function(tokenTypes, channel){
+
+ //always convert to an array, makes things easier
+ if (!(tokenTypes instanceof Array)){
+ tokenTypes = [tokenTypes];
+ }
+
+ var tt = this.get(channel),
+ i = 0,
+ len = tokenTypes.length;
+
+ while(i < len){
+ if (tt == tokenTypes[i++]){
+ return true;
+ }
+ }
+
+ //no match found, put the token back
+ this.unget();
+ return false;
+ },
+
+ /**
+ * Determines if the next token matches the given token type.
+ * If so, that token is consumed; if not, an error is thrown.
+ * @param {int|int[]} tokenTypes Either a single token type or an array of
+ * token types that the next token should be. If an array is passed,
+ * it's assumed that the token must be one of these.
+ * @param {variant} channel (Optional) The channel to read from. If not
+ * provided, reads from the default (unnamed) channel.
+ * @return {void}
+ * @method mustMatch
+ */
+ mustMatch: function(tokenTypes, channel){
+
+ //always convert to an array, makes things easier
+ if (!(tokenTypes instanceof Array)){
+ tokenTypes = [tokenTypes];
+ }
+
+ if (!this.match.apply(this, arguments)){
+ token = this.LT(1);
+ throw new SyntaxError("Expected " + this._tokenData[tokenTypes[0]].name +
+ " at line " + token.startLine + ", col " + token.startCol + ".", token.startLine, token.startCol);
+ }
+ },
+
+ //-------------------------------------------------------------------------
+ // Consuming methods
+ //-------------------------------------------------------------------------
+
+ /**
+ * Keeps reading from the token stream until either one of the specified
+ * token types is found or until the end of the input is reached.
+ * @param {int|int[]} tokenTypes Either a single token type or an array of
+ * token types that the next token should be. If an array is passed,
+ * it's assumed that the token must be one of these.
+ * @param {variant} channel (Optional) The channel to read from. If not
+ * provided, reads from the default (unnamed) channel.
+ * @return {void}
+ * @method advance
+ */
+ advance: function(tokenTypes, channel){
+
+ while(this.LA(0) != 0 && !this.match(tokenTypes, channel)){
+ this.get();
+ }
+
+ return this.LA(0);
+ },
+
+ /**
+ * Consumes the next token from the token stream.
+ * @return {int} The token type of the token that was just consumed.
+ * @method get
+ */
+ get: function(channel){
+
+ var tokenInfo = this._tokenData,
+ reader = this._reader,
+ value,
+ i =0,
+ len = tokenInfo.length,
+ found = false,
+ token,
+ info;
+
+ //check the lookahead buffer first
+ if (this._lt.length && this._ltIndex >= 0 && this._ltIndex < this._lt.length){
+
+ i++;
+ this._token = this._lt[this._ltIndex++];
+ info = tokenInfo[this._token.type];
+
+ //obey channels logic
+ while((info.channel !== undefined && channel !== info.channel) &&
+ this._ltIndex < this._lt.length){
+ this._token = this._lt[this._ltIndex++];
+ info = tokenInfo[this._token.type];
+ i++;
+ }
+
+ //here be dragons
+ if ((info.channel === undefined || channel === info.channel) &&
+ this._ltIndex <= this._lt.length){
+ this._ltIndexCache.push(i);
+ return this._token.type;
+ }
+ }
+
+ //call token retriever method
+ token = this._getToken();
+
+ //if it should be hidden, don't save a token
+ if (token.type > -1 && !tokenInfo[token.type].hide){
+
+ //apply token channel
+ token.channel = tokenInfo[token.type].channel;
+
+ //save for later
+ this._token = token;
+ this._lt.push(token);
+
+ //save space that will be moved (must be done before array is truncated)
+ this._ltIndexCache.push(this._lt.length - this._ltIndex + i);
+
+ //keep the buffer under 5 items
+ if (this._lt.length > 5){
+ this._lt.shift();
+ }
+
+ //also keep the shift buffer under 5 items
+ if (this._ltIndexCache.length > 5){
+ this._ltIndexCache.shift();
+ }
+
+ //update lookahead index
+ this._ltIndex = this._lt.length;
+ }
+
+ /*
+ * Skip to the next token if:
+ * 1. The token type is marked as hidden.
+ * 2. The token type has a channel specified and it isn't the current channel.
+ */
+ info = tokenInfo[token.type];
+ if (info &&
+ (info.hide ||
+ (info.channel !== undefined && channel !== info.channel))){
+ return this.get(channel);
+ } else {
+ //return just the type
+ return token.type;
+ }
+ },
+
+ /**
+ * Looks ahead a certain number of tokens and returns the token type at
+ * that position. This will throw an error if you lookahead past the
+ * end of input, past the size of the lookahead buffer, or back past
+ * the first token in the lookahead buffer.
+ * @param {int} The index of the token type to retrieve. 0 for the
+ * current token, 1 for the next, -1 for the previous, etc.
+ * @return {int} The token type of the token in the given position.
+ * @method LA
+ */
+ LA: function(index){
+ var total = index,
+ tt;
+ if (index > 0){
+ //TODO: Store 5 somewhere
+ if (index > 5){
+ throw new Error("Too much lookahead.");
+ }
+
+ //get all those tokens
+ while(total){
+ tt = this.get();
+ total--;
+ }
+
+ //unget all those tokens
+ while(total < index){
+ this.unget();
+ total++;
+ }
+ } else if (index < 0){
+
+ if(this._lt[this._ltIndex+index]){
+ tt = this._lt[this._ltIndex+index].type;
+ } else {
+ throw new Error("Too much lookbehind.");
+ }
+
+ } else {
+ tt = this._token.type;
+ }
+
+ return tt;
+
+ },
+
+ /**
+ * Looks ahead a certain number of tokens and returns the token at
+ * that position. This will throw an error if you lookahead past the
+ * end of input, past the size of the lookahead buffer, or back past
+ * the first token in the lookahead buffer.
+ * @param {int} The index of the token type to retrieve. 0 for the
+ * current token, 1 for the next, -1 for the previous, etc.
+ * @return {Object} The token of the token in the given position.
+ * @method LA
+ */
+ LT: function(index){
+
+ //lookahead first to prime the token buffer
+ this.LA(index);
+
+ //now find the token, subtract one because _ltIndex is already at the next index
+ return this._lt[this._ltIndex+index-1];
+ },
+
+ /**
+ * Returns the token type for the next token in the stream without
+ * consuming it.
+ * @return {int} The token type of the next token in the stream.
+ * @method peek
+ */
+ peek: function(){
+ return this.LA(1);
+ },
+
+ /**
+ * Returns the actual token object for the last consumed token.
+ * @return {Token} The token object for the last consumed token.
+ * @method token
+ */
+ token: function(){
+ return this._token;
+ },
+
+ /**
+ * Returns the name of the token for the given token type.
+ * @param {int} tokenType The type of token to get the name of.
+ * @return {String} The name of the token or "UNKNOWN_TOKEN" for any
+ * invalid token type.
+ * @method tokenName
+ */
+ tokenName: function(tokenType){
+ if (tokenType < 0 || tokenType > this._tokenData.length){
+ return "UNKNOWN_TOKEN";
+ } else {
+ return this._tokenData[tokenType].name;
+ }
+ },
+
+ /**
+ * Returns the token type value for the given token name.
+ * @param {String} tokenName The name of the token whose value should be returned.
+ * @return {int} The token type value for the given token name or -1
+ * for an unknown token.
+ * @method tokenName
+ */
+ tokenType: function(tokenName){
+ return this._tokenData[tokenName] || -1;
+ },
+
+ /**
+ * Returns the last consumed token to the token stream.
+ * @method unget
+ */
+ unget: function(){
+ //if (this._ltIndex > -1){
+ if (this._ltIndexCache.length){
+ this._ltIndex -= this._ltIndexCache.pop();//--;
+ this._token = this._lt[this._ltIndex - 1];
+ } else {
+ throw new Error("Too much lookahead.");
+ }
+ }
+
+};
+
+
+
+parserlib.util = {
+StringReader: StringReader,
+SyntaxError : SyntaxError,
+SyntaxUnit : SyntaxUnit,
+EventTarget : EventTarget,
+TokenStreamBase : TokenStreamBase
+};
+})();
+
+/*
+Parser-Lib
+Copyright (c) 2009-2011 Nicholas C. Zakas. 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 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.
+
+*/
+/* Build time: 13-July-2011 04:35:28 */
+(function(){
+var EventTarget = parserlib.util.EventTarget,
+TokenStreamBase = parserlib.util.TokenStreamBase,
+StringReader = parserlib.util.StringReader,
+SyntaxError = parserlib.util.SyntaxError,
+SyntaxUnit = parserlib.util.SyntaxUnit;
+
+var Colors = {
+ aliceblue :"#f0f8ff",
+ antiquewhite :"#faebd7",
+ aqua :"#00ffff",
+ aquamarine :"#7fffd4",
+ azure :"#f0ffff",
+ beige :"#f5f5dc",
+ bisque :"#ffe4c4",
+ black :"#000000",
+ blanchedalmond :"#ffebcd",
+ blue :"#0000ff",
+ blueviolet :"#8a2be2",
+ brown :"#a52a2a",
+ burlywood :"#deb887",
+ cadetblue :"#5f9ea0",
+ chartreuse :"#7fff00",
+ chocolate :"#d2691e",
+ coral :"#ff7f50",
+ cornflowerblue :"#6495ed",
+ cornsilk :"#fff8dc",
+ crimson :"#dc143c",
+ cyan :"#00ffff",
+ darkblue :"#00008b",
+ darkcyan :"#008b8b",
+ darkgoldenrod :"#b8860b",
+ darkgray :"#a9a9a9",
+ darkgreen :"#006400",
+ darkkhaki :"#bdb76b",
+ darkmagenta :"#8b008b",
+ darkolivegreen :"#556b2f",
+ darkorange :"#ff8c00",
+ darkorchid :"#9932cc",
+ darkred :"#8b0000",
+ darksalmon :"#e9967a",
+ darkseagreen :"#8fbc8f",
+ darkslateblue :"#483d8b",
+ darkslategray :"#2f4f4f",
+ darkturquoise :"#00ced1",
+ darkviolet :"#9400d3",
+ deeppink :"#ff1493",
+ deepskyblue :"#00bfff",
+ dimgray :"#696969",
+ dodgerblue :"#1e90ff",
+ firebrick :"#b22222",
+ floralwhite :"#fffaf0",
+ forestgreen :"#228b22",
+ fuchsia :"#ff00ff",
+ gainsboro :"#dcdcdc",
+ ghostwhite :"#f8f8ff",
+ gold :"#ffd700",
+ goldenrod :"#daa520",
+ gray :"#808080",
+ green :"#008000",
+ greenyellow :"#adff2f",
+ honeydew :"#f0fff0",
+ hotpink :"#ff69b4",
+ indianred :"#cd5c5c",
+ indigo :"#4b0082",
+ ivory :"#fffff0",
+ khaki :"#f0e68c",
+ lavender :"#e6e6fa",
+ lavenderblush :"#fff0f5",
+ lawngreen :"#7cfc00",
+ lemonchiffon :"#fffacd",
+ lightblue :"#add8e6",
+ lightcoral :"#f08080",
+ lightcyan :"#e0ffff",
+ lightgoldenrodyellow :"#fafad2",
+ lightgrey :"#d3d3d3",
+ lightgreen :"#90ee90",
+ lightpink :"#ffb6c1",
+ lightsalmon :"#ffa07a",
+ lightseagreen :"#20b2aa",
+ lightskyblue :"#87cefa",
+ lightslategray :"#778899",
+ lightsteelblue :"#b0c4de",
+ lightyellow :"#ffffe0",
+ lime :"#00ff00",
+ limegreen :"#32cd32",
+ linen :"#faf0e6",
+ magenta :"#ff00ff",
+ maroon :"#800000",
+ mediumaquamarine:"#66cdaa",
+ mediumblue :"#0000cd",
+ mediumorchid :"#ba55d3",
+ mediumpurple :"#9370d8",
+ mediumseagreen :"#3cb371",
+ mediumslateblue :"#7b68ee",
+ mediumspringgreen :"#00fa9a",
+ mediumturquoise :"#48d1cc",
+ mediumvioletred :"#c71585",
+ midnightblue :"#191970",
+ mintcream :"#f5fffa",
+ mistyrose :"#ffe4e1",
+ moccasin :"#ffe4b5",
+ navajowhite :"#ffdead",
+ navy :"#000080",
+ oldlace :"#fdf5e6",
+ olive :"#808000",
+ olivedrab :"#6b8e23",
+ orange :"#ffa500",
+ orangered :"#ff4500",
+ orchid :"#da70d6",
+ palegoldenrod :"#eee8aa",
+ palegreen :"#98fb98",
+ paleturquoise :"#afeeee",
+ palevioletred :"#d87093",
+ papayawhip :"#ffefd5",
+ peachpuff :"#ffdab9",
+ peru :"#cd853f",
+ pink :"#ffc0cb",
+ plum :"#dda0dd",
+ powderblue :"#b0e0e6",
+ purple :"#800080",
+ red :"#ff0000",
+ rosybrown :"#bc8f8f",
+ royalblue :"#4169e1",
+ saddlebrown :"#8b4513",
+ salmon :"#fa8072",
+ sandybrown :"#f4a460",
+ seagreen :"#2e8b57",
+ seashell :"#fff5ee",
+ sienna :"#a0522d",
+ silver :"#c0c0c0",
+ skyblue :"#87ceeb",
+ slateblue :"#6a5acd",
+ slategray :"#708090",
+ snow :"#fffafa",
+ springgreen :"#00ff7f",
+ steelblue :"#4682b4",
+ tan :"#d2b48c",
+ teal :"#008080",
+ thistle :"#d8bfd8",
+ tomato :"#ff6347",
+ turquoise :"#40e0d0",
+ violet :"#ee82ee",
+ wheat :"#f5deb3",
+ white :"#ffffff",
+ whitesmoke :"#f5f5f5",
+ yellow :"#ffff00",
+ yellowgreen :"#9acd32"
+};
+/**
+ * Represents a selector combinator (whitespace, +, >).
+ * @namespace parserlib.css
+ * @class Combinator
+ * @extends parserlib.util.SyntaxUnit
+ * @constructor
+ * @param {String} text The text representation of the unit.
+ * @param {int} line The line of text on which the unit resides.
+ * @param {int} col The column of text on which the unit resides.
+ */
+function Combinator(text, line, col){
+
+ SyntaxUnit.call(this, text, line, col);
+
+ /**
+ * The type of modifier.
+ * @type String
+ * @property type
+ */
+ this.type = "unknown";
+
+ //pretty simple
+ if (/^\s+$/.test(text)){
+ this.type = "descendant";
+ } else if (text == ">"){
+ this.type = "child";
+ } else if (text == "+"){
+ this.type = "adjacent-sibling";
+ } else if (text == "~"){
+ this.type = "sibling";
+ }
+
+}
+
+Combinator.prototype = new SyntaxUnit();
+Combinator.prototype.constructor = Combinator;
+
+
+
+var Level1Properties = {
+
+ "background": 1,
+ "background-attachment": 1,
+ "background-color": 1,
+ "background-image": 1,
+ "background-position": 1,
+ "background-repeat": 1,
+
+ "border": 1,
+ "border-bottom": 1,
+ "border-bottom-width": 1,
+ "border-color": 1,
+ "border-left": 1,
+ "border-left-width": 1,
+ "border-right": 1,
+ "border-right-width": 1,
+ "border-style": 1,
+ "border-top": 1,
+ "border-top-width": 1,
+ "border-width": 1,
+
+ "clear": 1,
+ "color": 1,
+ "display": 1,
+ "float": 1,
+
+ "font": 1,
+ "font-family": 1,
+ "font-size": 1,
+ "font-style": 1,
+ "font-variant": 1,
+ "font-weight": 1,
+
+ "height": 1,
+ "letter-spacing": 1,
+ "line-height": 1,
+
+ "list-style": 1,
+ "list-style-image": 1,
+ "list-style-position": 1,
+ "list-style-type": 1,
+
+ "margin": 1,
+ "margin-bottom": 1,
+ "margin-left": 1,
+ "margin-right": 1,
+ "margin-top": 1,
+
+ "padding": 1,
+ "padding-bottom": 1,
+ "padding-left": 1,
+ "padding-right": 1,
+ "padding-top": 1,
+
+ "text-align": 1,
+ "text-decoration": 1,
+ "text-indent": 1,
+ "text-transform": 1,
+
+ "vertical-align": 1,
+ "white-space": 1,
+ "width": 1,
+ "word-spacing": 1
+
+};
+
+var Level2Properties = {
+
+ //Aural
+ "azimuth": 1,
+ "cue-after": 1,
+ "cue-before": 1,
+ "cue": 1,
+ "elevation": 1,
+ "pause-after": 1,
+ "pause-before": 1,
+ "pause": 1,
+ "pitch-range": 1,
+ "pitch": 1,
+ "play-during": 1,
+ "richness": 1,
+ "speak-header": 1,
+ "speak-numeral": 1,
+ "speak-punctuation": 1,
+ "speak": 1,
+ "speech-rate": 1,
+ "stress": 1,
+ "voice-family": 1,
+ "volume": 1,
+
+ //Paged
+ "orphans": 1,
+ "page-break-after": 1,
+ "page-break-before": 1,
+ "page-break-inside": 1,
+ "widows": 1,
+
+ //Interactive
+ "cursor": 1,
+ "outline-color": 1,
+ "outline-style": 1,
+ "outline-width": 1,
+ "outline": 1,
+
+ //Visual
+ "background-attachment": 1,
+ "background-color": 1,
+ "background-image": 1,
+ "background-position": 1,
+ "background-repeat": 1,
+ "background": 1,
+ "border-collapse": 1,
+ "border-color": 1,
+ "border-spacing": 1,
+ "border-style": 1,
+ "border-top": 1,
+ "border-top-color": 1,
+ "border-top-style": 1,
+ "border-top-width": 1,
+ "border-width": 1,
+ "border": 1,
+ "bottom": 1,
+ "caption-side": 1,
+ "clear": 1,
+ "clip": 1,
+ "color": 1,
+ "content": 1,
+ "counter-increment": 1,
+ "counter-reset": 1,
+ "direction": 1,
+ "display": 1,
+ "empty-cells": 1,
+ "float": 1,
+ "font-family": 1,
+ "font-size": 1,
+ "font-style": 1,
+ "font-variant": 1,
+ "font-weight": 1,
+ "font": 1,
+ "height": 1,
+ "left": 1,
+ "letter-spacing": 1,
+ "line-height": 1,
+ "list-style-image": 1,
+ "list-style-position": 1,
+ "list-style-type": 1,
+ "list-style": 1,
+ "margin-right": 1,
+ "margin-top": 1,
+ "margin": 1,
+ "max-height": 1,
+ "max-width": 1,
+ "min-height": 1,
+ "min-width": 1,
+ "overflow": 1,
+ "padding-top": 1,
+ "padding": 1,
+ "position": 1,
+ "quotes": 1,
+ "right": 1,
+ "table-layout": 1,
+ "text-align": 1,
+ "text-decoration": 1,
+ "text-indent": 1,
+ "text-transform": 1,
+ "top": 1,
+ "unicode-bidi": 1,
+ "vertical-align": 1,
+ "visibility": 1,
+ "white-space": 1,
+ "width": 1,
+ "word-spacing": 1,
+ "z-index": 1
+};
+/**
+ * Represents a media feature, such as max-width:500.
+ * @namespace parserlib.css
+ * @class MediaFeature
+ * @extends parserlib.util.SyntaxUnit
+ * @constructor
+ * @param {SyntaxUnit} name The name of the feature.
+ * @param {SyntaxUnit} value The value of the feature or null if none.
+ */
+function MediaFeature(name, value){
+
+ SyntaxUnit.call(this, "(" + name + (value !== null ? ":" + value : "") + ")", name.startLine, name.startCol);
+
+ /**
+ * The name of the media feature
+ * @type String
+ * @property name
+ */
+ this.name = name;
+
+ /**
+ * The value for the feature or null if there is none.
+ * @type SyntaxUnit
+ * @property value
+ */
+ this.value = value;
+}
+
+MediaFeature.prototype = new SyntaxUnit();
+MediaFeature.prototype.constructor = MediaFeature;
+
+
+/**
+ * Represents an individual media query.
+ * @namespace parserlib.css
+ * @class MediaQuery
+ * @extends parserlib.util.SyntaxUnit
+ * @constructor
+ * @param {String} modifier The modifier "not" or "only" (or null).
+ * @param {String} mediaType The type of media (i.e., "print").
+ * @param {Array} parts Array of selectors parts making up this selector.
+ * @param {int} line The line of text on which the unit resides.
+ * @param {int} col The column of text on which the unit resides.
+ */
+function MediaQuery(modifier, mediaType, features, line, col){
+
+ SyntaxUnit.call(this, (modifier ? modifier + " ": "") + (mediaType ? mediaType + " " : "") + features.join(" and "), line, col);
+
+ /**
+ * The media modifier ("not" or "only")
+ * @type String
+ * @property modifier
+ */
+ this.modifier = modifier;
+
+ /**
+ * The mediaType (i.e., "print")
+ * @type String
+ * @property mediaType
+ */
+ this.mediaType = mediaType;
+
+ /**
+ * The parts that make up the selector.
+ * @type Array
+ * @property features
+ */
+ this.features = features;
+
+}
+
+MediaQuery.prototype = new SyntaxUnit();
+MediaQuery.prototype.constructor = MediaQuery;
+
+
+/**
+ * A CSS3 parser.
+ * @namespace parserlib.css
+ * @class Parser
+ * @constructor
+ * @param {Object} options (Optional) Various options for the parser:
+ * starHack (true|false) to allow IE6 star hack as valid,
+ * underscoreHack (true|false) to interpret leading underscores
+ * as IE6-7 targeting for known properties, ieFilters (true|false)
+ * to indicate that IE < 8 filters should be accepted and not throw
+ * syntax errors.
+ */
+function Parser(options){
+
+ //inherit event functionality
+ EventTarget.call(this);
+
+
+ this.options = options || {};
+
+ this._tokenStream = null;
+}
+
+Parser.prototype = function(){
+
+ var proto = new EventTarget(), //new prototype
+ prop,
+ additions = {
+
+ //restore constructor
+ constructor: Parser,
+
+ //-----------------------------------------------------------------
+ // Grammar
+ //-----------------------------------------------------------------
+
+ _stylesheet: function(){
+
+ /*
+ * stylesheet
+ * : [ CHARSET_SYM S* STRING S* ';' ]?
+ * [S|CDO|CDC]* [ import [S|CDO|CDC]* ]*
+ * [ namespace [S|CDO|CDC]* ]*
+ * [ [ ruleset | media | page | font_face | keyframes ] [S|CDO|CDC]* ]*
+ * ;
+ */
+
+ var tokenStream = this._tokenStream,
+ charset = null,
+ token,
+ tt;
+
+ this.fire("startstylesheet");
+
+ //try to read character set
+ this._charset();
+
+ this._skipCruft();
+
+ //try to read imports - may be more than one
+ while (tokenStream.peek() == Tokens.IMPORT_SYM){
+ this._import();
+ this._skipCruft();
+ }
+
+ //try to read namespaces - may be more than one
+ while (tokenStream.peek() == Tokens.NAMESPACE_SYM){
+ this._namespace();
+ this._skipCruft();
+ }
+
+ //get the next token
+ tt = tokenStream.peek();
+
+ //try to read the rest
+ while(tt > Tokens.EOF){
+
+ try {
+
+ switch(tt){
+ case Tokens.MEDIA_SYM:
+ this._media();
+ this._skipCruft();
+ break;
+ case Tokens.PAGE_SYM:
+ this._page();
+ this._skipCruft();
+ break;
+ case Tokens.FONT_FACE_SYM:
+ this._font_face();
+ this._skipCruft();
+ break;
+ case Tokens.KEYFRAMES_SYM:
+ this._keyframes();
+ this._skipCruft();
+ break;
+ case Tokens.S:
+ this._readWhitespace();
+ break;
+ default:
+ if(!this._ruleset()){
+
+ //error handling for known issues
+ switch(tt){
+ case Tokens.CHARSET_SYM:
+ token = tokenStream.LT(1);
+ this._charset(false);
+ throw new SyntaxError("@charset not allowed here.", token.startLine, token.startCol);
+ case Tokens.IMPORT_SYM:
+ token = tokenStream.LT(1);
+ this._import(false);
+ throw new SyntaxError("@import not allowed here.", token.startLine, token.startCol);
+ case Tokens.NAMESPACE_SYM:
+ token = tokenStream.LT(1);
+ this._namespace(false);
+ throw new SyntaxError("@namespace not allowed here.", token.startLine, token.startCol);
+ default:
+ tokenStream.get(); //get the last token
+ this._unexpectedToken(tokenStream.token());
+ }
+
+ }
+ }
+ } catch(ex) {
+ if (ex instanceof SyntaxError && !this.options.strict){
+ this.fire({
+ type: "error",
+ error: ex,
+ message: ex.message,
+ line: ex.line,
+ col: ex.col
+ });
+ } else {
+ throw ex;
+ }
+ }
+
+ tt = tokenStream.peek();
+ }
+
+ if (tt != Tokens.EOF){
+ this._unexpectedToken(tokenStream.token());
+ }
+
+ this.fire("endstylesheet");
+ },
+
+ _charset: function(emit){
+ var tokenStream = this._tokenStream,
+ charset,
+ token,
+ line,
+ col;
+
+ if (tokenStream.match(Tokens.CHARSET_SYM)){
+ line = tokenStream.token().startLine;
+ col = tokenStream.token().startCol;
+
+ this._readWhitespace();
+ tokenStream.mustMatch(Tokens.STRING);
+
+ token = tokenStream.token();
+ charset = token.value;
+
+ this._readWhitespace();
+ tokenStream.mustMatch(Tokens.SEMICOLON);
+
+ if (emit !== false){
+ this.fire({
+ type: "charset",
+ charset:charset,
+ line: line,
+ col: col
+ });
+ }
+ }
+ },
+
+ _import: function(emit){
+ /*
+ * import
+ * : IMPORT_SYM S*
+ * [STRING|URI] S* media_query_list? ';' S*
+ */
+
+ var tokenStream = this._tokenStream,
+ tt,
+ uri,
+ importToken,
+ mediaList = [];
+
+ //read import symbol
+ tokenStream.mustMatch(Tokens.IMPORT_SYM);
+ importToken = tokenStream.token();
+ this._readWhitespace();
+
+ tokenStream.mustMatch([Tokens.STRING, Tokens.URI]);
+
+ //grab the URI value
+ uri = tokenStream.token().value.replace(/(?:url\()?["']([^"']+)["']\)?/, "$1");
+
+ this._readWhitespace();
+
+ mediaList = this._media_query_list();
+
+ //must end with a semicolon
+ tokenStream.mustMatch(Tokens.SEMICOLON);
+ this._readWhitespace();
+
+ if (emit !== false){
+ this.fire({
+ type: "import",
+ uri: uri,
+ media: mediaList,
+ line: importToken.startLine,
+ col: importToken.startCol
+ });
+ }
+
+ },
+
+ _namespace: function(emit){
+ /*
+ * namespace
+ * : NAMESPACE_SYM S* [namespace_prefix S*]? [STRING|URI] S* ';' S*
+ */
+
+ var tokenStream = this._tokenStream,
+ line,
+ col,
+ prefix,
+ uri;
+
+ //read import symbol
+ tokenStream.mustMatch(Tokens.NAMESPACE_SYM);
+ line = tokenStream.token().startLine;
+ col = tokenStream.token().startCol;
+ this._readWhitespace();
+
+ //it's a namespace prefix - no _namespace_prefix() method because it's just an IDENT
+ if (tokenStream.match(Tokens.IDENT)){
+ prefix = tokenStream.token().value;
+ this._readWhitespace();
+ }
+
+ tokenStream.mustMatch([Tokens.STRING, Tokens.URI]);
+ /*if (!tokenStream.match(Tokens.STRING)){
+ tokenStream.mustMatch(Tokens.URI);
+ }*/
+
+ //grab the URI value
+ uri = tokenStream.token().value.replace(/(?:url\()?["']([^"']+)["']\)?/, "$1");
+
+ this._readWhitespace();
+
+ //must end with a semicolon
+ tokenStream.mustMatch(Tokens.SEMICOLON);
+ this._readWhitespace();
+
+ if (emit !== false){
+ this.fire({
+ type: "namespace",
+ prefix: prefix,
+ uri: uri,
+ line: line,
+ col: col
+ });
+ }
+
+ },
+
+ _media: function(){
+ /*
+ * media
+ * : MEDIA_SYM S* media_query_list S* '{' S* ruleset* '}' S*
+ * ;
+ */
+ var tokenStream = this._tokenStream,
+ line,
+ col,
+ mediaList;// = [];
+
+ //look for @media
+ tokenStream.mustMatch(Tokens.MEDIA_SYM);
+ line = tokenStream.token().startLine;
+ col = tokenStream.token().startCol;
+
+ this._readWhitespace();
+
+ mediaList = this._media_query_list();
+
+ tokenStream.mustMatch(Tokens.LBRACE);
+ this._readWhitespace();
+
+ this.fire({
+ type: "startmedia",
+ media: mediaList,
+ line: line,
+ col: col
+ });
+
+ while(true) {
+ if (tokenStream.peek() == Tokens.PAGE_SYM){
+ this._page();
+ } else if (!this._ruleset()){
+ break;
+ }
+ }
+
+ tokenStream.mustMatch(Tokens.RBRACE);
+ this._readWhitespace();
+
+ this.fire({
+ type: "endmedia",
+ media: mediaList,
+ line: line,
+ col: col
+ });
+ },
+
+
+ //CSS3 Media Queries
+ _media_query_list: function(){
+ /*
+ * media_query_list
+ * : S* [media_query [ ',' S* media_query ]* ]?
+ * ;
+ */
+ var tokenStream = this._tokenStream,
+ mediaList = [];
+
+
+ this._readWhitespace();
+
+ if (tokenStream.peek() == Tokens.IDENT || tokenStream.peek() == Tokens.LPAREN){
+ mediaList.push(this._media_query());
+ }
+
+ while(tokenStream.match(Tokens.COMMA)){
+ this._readWhitespace();
+ mediaList.push(this._media_query());
+ }
+
+ return mediaList;
+ },
+
+ /*
+ * Note: "expression" in the grammar maps to the _media_expression
+ * method.
+
+ */
+ _media_query: function(){
+ /*
+ * media_query
+ * : [ONLY | NOT]? S* media_type S* [ AND S* expression ]*
+ * | expression [ AND S* expression ]*
+ * ;
+ */
+ var tokenStream = this._tokenStream,
+ type = null,
+ ident = null,
+ token = null,
+ expressions = [];
+
+ if (tokenStream.match(Tokens.IDENT)){
+ ident = tokenStream.token().value.toLowerCase();
+
+ //since there's no custom tokens for these, need to manually check
+ if (ident != "only" && ident != "not"){
+ tokenStream.unget();
+ ident = null;
+ } else {
+ token = tokenStream.token();
+ }
+ }
+
+ this._readWhitespace();
+
+ if (tokenStream.peek() == Tokens.IDENT){
+ type = this._media_type();
+ if (token === null){
+ token = tokenStream.token();
+ }
+ } else if (tokenStream.peek() == Tokens.LPAREN){
+ if (token === null){
+ token = tokenStream.LT(1);
+ }
+ expressions.push(this._media_expression());
+ }
+
+ if (type === null && expressions.length === 0){
+ return null;
+ } else {
+ this._readWhitespace();
+ while (tokenStream.match(Tokens.IDENT)){
+ if (tokenStream.token().value.toLowerCase() != "and"){
+ this._unexpectedToken(tokenStream.token());
+ }
+
+ this._readWhitespace();
+ expressions.push(this._media_expression());
+ }
+ }
+
+ return new MediaQuery(ident, type, expressions, token.startLine, token.startCol);
+ },
+
+ //CSS3 Media Queries
+ _media_type: function(){
+ /*
+ * media_type
+ * : IDENT
+ * ;
+ */
+ return this._media_feature();
+ },
+
+ /**
+ * Note: in CSS3 Media Queries, this is called "expression".
+ * Renamed here to avoid conflict with CSS3 Selectors
+ * definition of "expression". Also note that "expr" in the
+ * grammar now maps to "expression" from CSS3 selectors.
+ * @method _media_expression
+ * @private
+ */
+ _media_expression: function(){
+ /*
+ * expression
+ * : '(' S* media_feature S* [ ':' S* expr ]? ')' S*
+ * ;
+ */
+ var tokenStream = this._tokenStream,
+ feature = null,
+ token,
+ expression = null;
+
+ tokenStream.mustMatch(Tokens.LPAREN);
+
+ feature = this._media_feature();
+ this._readWhitespace();
+
+ if (tokenStream.match(Tokens.COLON)){
+ this._readWhitespace();
+ token = tokenStream.LT(1);
+ expression = this._expression();
+ }
+
+ tokenStream.mustMatch(Tokens.RPAREN);
+ this._readWhitespace();
+
+ return new MediaFeature(feature, (expression ? new SyntaxUnit(expression, token.startLine, token.startCol) : null));
+ },
+
+ //CSS3 Media Queries
+ _media_feature: function(){
+ /*
+ * media_feature
+ * : IDENT
+ * ;
+ */
+ var tokenStream = this._tokenStream;
+
+ tokenStream.mustMatch(Tokens.IDENT);
+
+ return SyntaxUnit.fromToken(tokenStream.token());
+ },
+
+ //CSS3 Paged Media
+ _page: function(){
+ /*
+ * page:
+ * PAGE_SYM S* IDENT? pseudo_page? S*
+ * '{' S* [ declaration | margin ]? [ ';' S* [ declaration | margin ]? ]* '}' S*
+ * ;
+ */
+ var tokenStream = this._tokenStream,
+ line,
+ col,
+ identifier = null,
+ pseudoPage = null;
+
+ //look for @page
+ tokenStream.mustMatch(Tokens.PAGE_SYM);
+ line = tokenStream.token().startLine;
+ col = tokenStream.token().startCol;
+
+ this._readWhitespace();
+
+ if (tokenStream.match(Tokens.IDENT)){
+ identifier = tokenStream.token().value;
+
+ //The value 'auto' may not be used as a page name and MUST be treated as a syntax error.
+ if (identifier.toLowerCase() === "auto"){
+ this._unexpectedToken(tokenStream.token());
+ }
+ }
+
+ //see if there's a colon upcoming
+ if (tokenStream.peek() == Tokens.COLON){
+ pseudoPage = this._pseudo_page();
+ }
+
+ this._readWhitespace();
+
+ this.fire({
+ type: "startpage",
+ id: identifier,
+ pseudo: pseudoPage,
+ line: line,
+ col: col
+ });
+
+ this._readDeclarations(true, true);
+
+ this.fire({
+ type: "endpage",
+ id: identifier,
+ pseudo: pseudoPage,
+ line: line,
+ col: col
+ });
+
+ },
+
+ //CSS3 Paged Media
+ _margin: function(){
+ /*
+ * margin :
+ * margin_sym S* '{' declaration [ ';' S* declaration? ]* '}' S*
+ * ;
+ */
+ var tokenStream = this._tokenStream,
+ line,
+ col,
+ marginSym = this._margin_sym();
+
+ if (marginSym){
+ line = tokenStream.token().startLine;
+ col = tokenStream.token().startCol;
+
+ this.fire({
+ type: "startpagemargin",
+ margin: marginSym,
+ line: line,
+ col: col
+ });
+
+ this._readDeclarations(true);
+
+ this.fire({
+ type: "endpagemargin",
+ margin: marginSym,
+ line: line,
+ col: col
+ });
+ return true;
+ } else {
+ return false;
+ }
+ },
+
+ //CSS3 Paged Media
+ _margin_sym: function(){
+
+ /*
+ * margin_sym :
+ * TOPLEFTCORNER_SYM |
+ * TOPLEFT_SYM |
+ * TOPCENTER_SYM |
+ * TOPRIGHT_SYM |
+ * TOPRIGHTCORNER_SYM |
+ * BOTTOMLEFTCORNER_SYM |
+ * BOTTOMLEFT_SYM |
+ * BOTTOMCENTER_SYM |
+ * BOTTOMRIGHT_SYM |
+ * BOTTOMRIGHTCORNER_SYM |
+ * LEFTTOP_SYM |
+ * LEFTMIDDLE_SYM |
+ * LEFTBOTTOM_SYM |
+ * RIGHTTOP_SYM |
+ * RIGHTMIDDLE_SYM |
+ * RIGHTBOTTOM_SYM
+ * ;
+ */
+
+ var tokenStream = this._tokenStream;
+
+ if(tokenStream.match([Tokens.TOPLEFTCORNER_SYM, Tokens.TOPLEFT_SYM,
+ Tokens.TOPCENTER_SYM, Tokens.TOPRIGHT_SYM, Tokens.TOPRIGHTCORNER_SYM,
+ Tokens.BOTTOMLEFTCORNER_SYM, Tokens.BOTTOMLEFT_SYM,
+ Tokens.BOTTOMCENTER_SYM, Tokens.BOTTOMRIGHT_SYM,
+ Tokens.BOTTOMRIGHTCORNER_SYM, Tokens.LEFTTOP_SYM,
+ Tokens.LEFTMIDDLE_SYM, Tokens.LEFTBOTTOM_SYM, Tokens.RIGHTTOP_SYM,
+ Tokens.RIGHTMIDDLE_SYM, Tokens.RIGHTBOTTOM_SYM]))
+ {
+ return SyntaxUnit.fromToken(tokenStream.token());
+ } else {
+ return null;
+ }
+
+ },
+
+ _pseudo_page: function(){
+ /*
+ * pseudo_page
+ * : ':' IDENT
+ * ;
+ */
+
+ var tokenStream = this._tokenStream;
+
+ tokenStream.mustMatch(Tokens.COLON);
+ tokenStream.mustMatch(Tokens.IDENT);
+
+ //TODO: CSS3 Paged Media says only "left", "center", and "right" are allowed
+
+ return tokenStream.token().value;
+ },
+
+ _font_face: function(){
+ /*
+ * font_face
+ * : FONT_FACE_SYM S*
+ * '{' S* declaration [ ';' S* declaration ]* '}' S*
+ * ;
+ */
+ var tokenStream = this._tokenStream,
+ line,
+ col;
+
+ //look for @page
+ tokenStream.mustMatch(Tokens.FONT_FACE_SYM);
+ line = tokenStream.token().startLine;
+ col = tokenStream.token().startCol;
+
+ this._readWhitespace();
+
+ this.fire({
+ type: "startfontface",
+ line: line,
+ col: col
+ });
+
+ this._readDeclarations(true);
+
+ this.fire({
+ type: "endfontface",
+ line: line,
+ col: col
+ });
+ },
+
+ _operator: function(){
+
+ /*
+ * operator
+ * : '/' S* | ',' S* | /( empty )/
+ * ;
+ */
+
+ var tokenStream = this._tokenStream,
+ token = null;
+
+ if (tokenStream.match([Tokens.SLASH, Tokens.COMMA])){
+ token = tokenStream.token();
+ this._readWhitespace();
+ }
+ return token ? PropertyValuePart.fromToken(token) : null;
+
+ },
+
+ _combinator: function(){
+
+ /*
+ * combinator
+ * : PLUS S* | GREATER S* | TILDE S* | S+
+ * ;
+ */
+
+ var tokenStream = this._tokenStream,
+ value = null,
+ token;
+
+ if(tokenStream.match([Tokens.PLUS, Tokens.GREATER, Tokens.TILDE])){
+ token = tokenStream.token();
+ value = new Combinator(token.value, token.startLine, token.startCol);
+ this._readWhitespace();
+ }
+
+ return value;
+ },
+
+ _unary_operator: function(){
+
+ /*
+ * unary_operator
+ * : '-' | '+'
+ * ;
+ */
+
+ var tokenStream = this._tokenStream;
+
+ if (tokenStream.match([Tokens.MINUS, Tokens.PLUS])){
+ return tokenStream.token().value;
+ } else {
+ return null;
+ }
+ },
+
+ _property: function(){
+
+ /*
+ * property
+ * : IDENT S*
+ * ;
+ */
+
+ var tokenStream = this._tokenStream,
+ value = null,
+ hack = null,
+ tokenValue,
+ token,
+ line,
+ col;
+
+ //check for star hack - throws error if not allowed
+ if (tokenStream.peek() == Tokens.STAR && this.options.starHack){
+ tokenStream.get();
+ token = tokenStream.token();
+ hack = token.value;
+ line = token.startLine;
+ col = token.startCol;
+ }
+
+ if(tokenStream.match(Tokens.IDENT)){
+ token = tokenStream.token();
+ tokenValue = token.value;
+
+ //check for underscore hack - no error if not allowed because it's valid CSS syntax
+ if (tokenValue.charAt(0) == "_" && this.options.underscoreHack){
+ hack = "_";
+ tokenValue = tokenValue.substring(1);
+ }
+
+ value = new PropertyName(tokenValue, hack, (line||token.startLine), (col||token.startCol));
+ this._readWhitespace();
+ }
+
+ return value;
+ },
+
+ //Augmented with CSS3 Selectors
+ _ruleset: function(){
+ /*
+ * ruleset
+ * : selectors_group
+ * '{' S* declaration? [ ';' S* declaration? ]* '}' S*
+ * ;
+ */
+
+ var tokenStream = this._tokenStream,
+ tt,
+ selectors;
+
+
+ /*
+ * Error Recovery: If even a single selector fails to parse,
+ * then the entire ruleset should be thrown away.
+ */
+ try {
+ selectors = this._selectors_group();
+ } catch (ex){
+ if (ex instanceof SyntaxError && !this.options.strict){
+
+ //fire error event
+ this.fire({
+ type: "error",
+ error: ex,
+ message: ex.message,
+ line: ex.line,
+ col: ex.col
+ });
+
+ //skip over everything until closing brace
+ tt = tokenStream.advance([Tokens.RBRACE]);
+ if (tt == Tokens.RBRACE){
+ //if there's a right brace, the rule is finished so don't do anything
+ } else {
+ //otherwise, rethrow the error because it wasn't handled properly
+ throw ex;
+ }
+
+ } else {
+ //not a syntax error, rethrow it
+ throw ex;
+ }
+
+ //trigger parser to continue
+ return true;
+ }
+
+ //if it got here, all selectors parsed
+ if (selectors){
+
+ this.fire({
+ type: "startrule",
+ selectors: selectors,
+ line: selectors[0].line,
+ col: selectors[0].col
+ });
+
+ this._readDeclarations(true);
+
+ this.fire({
+ type: "endrule",
+ selectors: selectors,
+ line: selectors[0].line,
+ col: selectors[0].col
+ });
+
+ }
+
+ return selectors;
+
+ },
+
+ //CSS3 Selectors
+ _selectors_group: function(){
+
+ /*
+ * selectors_group
+ * : selector [ COMMA S* selector ]*
+ * ;
+ */
+ var tokenStream = this._tokenStream,
+ selectors = [],
+ selector;
+
+ selector = this._selector();
+ if (selector !== null){
+
+ selectors.push(selector);
+ while(tokenStream.match(Tokens.COMMA)){
+ this._readWhitespace();
+ selector = this._selector();
+ if (selector !== null){
+ selectors.push(selector);
+ } else {
+ this._unexpectedToken(tokenStream.LT(1));
+ }
+ }
+ }
+
+ return selectors.length ? selectors : null;
+ },
+
+ //CSS3 Selectors
+ _selector: function(){
+ /*
+ * selector
+ * : simple_selector_sequence [ combinator simple_selector_sequence ]*
+ * ;
+ */
+
+ var tokenStream = this._tokenStream,
+ selector = [],
+ nextSelector = null,
+ combinator = null,
+ ws = null;
+
+ //if there's no simple selector, then there's no selector
+ nextSelector = this._simple_selector_sequence();
+ if (nextSelector === null){
+ return null;
+ }
+
+ selector.push(nextSelector);
+
+ do {
+
+ //look for a combinator
+ combinator = this._combinator();
+
+ if (combinator !== null){
+ selector.push(combinator);
+ nextSelector = this._simple_selector_sequence();
+
+ //there must be a next selector
+ if (nextSelector === null){
+ this._unexpectedToken(this.LT(1));
+ } else {
+
+ //nextSelector is an instance of SelectorPart
+ selector.push(nextSelector);
+ }
+ } else {
+
+ //if there's not whitespace, we're done
+ if (this._readWhitespace()){
+
+ //add whitespace separator
+ ws = new Combinator(tokenStream.token().value, tokenStream.token().startLine, tokenStream.token().startCol);
+
+ //combinator is not required
+ combinator = this._combinator();
+
+ //selector is required if there's a combinator
+ nextSelector = this._simple_selector_sequence();
+ if (nextSelector === null){
+ if (combinator !== null){
+ this._unexpectedToken(tokenStream.LT(1));
+ }
+ } else {
+
+ if (combinator !== null){
+ selector.push(combinator);
+ } else {
+ selector.push(ws);
+ }
+
+ selector.push(nextSelector);
+ }
+ } else {
+ break;
+ }
+
+ }
+ } while(true);
+
+ return new Selector(selector, selector[0].line, selector[0].col);
+ },
+
+ //CSS3 Selectors
+ _simple_selector_sequence: function(){
+ /*
+ * simple_selector_sequence
+ * : [ type_selector | universal ]
+ * [ HASH | class | attrib | pseudo | negation ]*
+ * | [ HASH | class | attrib | pseudo | negation ]+
+ * ;
+ */
+
+ var tokenStream = this._tokenStream,
+
+ //parts of a simple selector
+ elementName = null,
+ modifiers = [],
+
+ //complete selector text
+ selectorText= "",
+
+ //the different parts after the element name to search for
+ components = [
+ //HASH
+ function(){
+ return tokenStream.match(Tokens.HASH) ?
+ new SelectorSubPart(tokenStream.token().value, "id", tokenStream.token().startLine, tokenStream.token().startCol) :
+ null;
+ },
+ this._class,
+ this._attrib,
+ this._pseudo,
+ this._negation
+ ],
+ i = 0,
+ len = components.length,
+ component = null,
+ found = false,
+ line,
+ col;
+
+
+ //get starting line and column for the selector
+ line = tokenStream.LT(1).startLine;
+ col = tokenStream.LT(1).startCol;
+
+ elementName = this._type_selector();
+ if (!elementName){
+ elementName = this._universal();
+ }
+
+ if (elementName !== null){
+ selectorText += elementName;
+ }
+
+ while(true){
+
+ //whitespace means we're done
+ if (tokenStream.peek() === Tokens.S){
+ break;
+ }
+
+ //check for each component
+ while(i < len && component === null){
+ component = components[i++].call(this);
+ }
+
+ if (component === null){
+
+ //we don't have a selector
+ if (selectorText === ""){
+ return null;
+ } else {
+ break;
+ }
+ } else {
+ i = 0;
+ modifiers.push(component);
+ selectorText += component.toString();
+ component = null;
+ }
+ }
+
+
+ return selectorText !== "" ?
+ new SelectorPart(elementName, modifiers, selectorText, line, col) :
+ null;
+ },
+
+ //CSS3 Selectors
+ _type_selector: function(){
+ /*
+ * type_selector
+ * : [ namespace_prefix ]? element_name
+ * ;
+ */
+
+ var tokenStream = this._tokenStream,
+ ns = this._namespace_prefix(),
+ elementName = this._element_name();
+
+ if (!elementName){
+ /*
+ * Need to back out the namespace that was read due to both
+ * type_selector and universal reading namespace_prefix
+ * first. Kind of hacky, but only way I can figure out
+ * right now how to not change the grammar.
+ */
+ if (ns){
+ tokenStream.unget();
+ if (ns.length > 1){
+ tokenStream.unget();
+ }
+ }
+
+ return null;
+ } else {
+ if (ns){
+ elementName.text = ns + elementName.text;
+ elementName.col -= ns.length;
+ }
+ return elementName;
+ }
+ },
+
+ //CSS3 Selectors
+ _class: function(){
+ /*
+ * class
+ * : '.' IDENT
+ * ;
+ */
+
+ var tokenStream = this._tokenStream,
+ token;
+
+ if (tokenStream.match(Tokens.DOT)){
+ tokenStream.mustMatch(Tokens.IDENT);
+ token = tokenStream.token();
+ return new SelectorSubPart("." + token.value, "class", token.startLine, token.startCol - 1);
+ } else {
+ return null;
+ }
+
+ },
+
+ //CSS3 Selectors
+ _element_name: function(){
+ /*
+ * element_name
+ * : IDENT
+ * ;
+ */
+
+ var tokenStream = this._tokenStream,
+ token;
+
+ if (tokenStream.match(Tokens.IDENT)){
+ token = tokenStream.token();
+ return new SelectorSubPart(token.value, "elementName", token.startLine, token.startCol);
+
+ } else {
+ return null;
+ }
+ },
+
+ //CSS3 Selectors
+ _namespace_prefix: function(){
+ /*
+ * namespace_prefix
+ * : [ IDENT | '*' ]? '|'
+ * ;
+ */
+ var tokenStream = this._tokenStream,
+ value = "";
+
+ //verify that this is a namespace prefix
+ if (tokenStream.LA(1) === Tokens.PIPE || tokenStream.LA(2) === Tokens.PIPE){
+
+ if(tokenStream.match([Tokens.IDENT, Tokens.STAR])){
+ value += tokenStream.token().value;
+ }
+
+ tokenStream.mustMatch(Tokens.PIPE);
+ value += "|";
+
+ }
+
+ return value.length ? value : null;
+ },
+
+ //CSS3 Selectors
+ _universal: function(){
+ /*
+ * universal
+ * : [ namespace_prefix ]? '*'
+ * ;
+ */
+ var tokenStream = this._tokenStream,
+ value = "",
+ ns;
+
+ ns = this._namespace_prefix();
+ if(ns){
+ value += ns;
+ }
+
+ if(tokenStream.match(Tokens.STAR)){
+ value += "*";
+ }
+
+ return value.length ? value : null;
+
+ },
+
+ //CSS3 Selectors
+ _attrib: function(){
+ /*
+ * attrib
+ * : '[' S* [ namespace_prefix ]? IDENT S*
+ * [ [ PREFIXMATCH |
+ * SUFFIXMATCH |
+ * SUBSTRINGMATCH |
+ * '=' |
+ * INCLUDES |
+ * DASHMATCH ] S* [ IDENT | STRING ] S*
+ * ]? ']'
+ * ;
+ */
+
+ var tokenStream = this._tokenStream,
+ value = null,
+ ns,
+ token;
+
+ if (tokenStream.match(Tokens.LBRACKET)){
+ token = tokenStream.token();
+ value = token.value;
+ value += this._readWhitespace();
+
+ ns = this._namespace_prefix();
+
+ if (ns){
+ value += ns;
+ }
+
+ tokenStream.mustMatch(Tokens.IDENT);
+ value += tokenStream.token().value;
+ value += this._readWhitespace();
+
+ if(tokenStream.match([Tokens.PREFIXMATCH, Tokens.SUFFIXMATCH, Tokens.SUBSTRINGMATCH,
+ Tokens.EQUALS, Tokens.INCLUDES, Tokens.DASHMATCH])){
+
+ value += tokenStream.token().value;
+ value += this._readWhitespace();
+
+ tokenStream.mustMatch([Tokens.IDENT, Tokens.STRING]);
+ value += tokenStream.token().value;
+ value += this._readWhitespace();
+ }
+
+ tokenStream.mustMatch(Tokens.RBRACKET);
+
+ return new SelectorSubPart(value + "]", "attribute", token.startLine, token.startCol);
+ } else {
+ return null;
+ }
+ },
+
+ //CSS3 Selectors
+ _pseudo: function(){
+
+ /*
+ * pseudo
+ * : ':' ':'? [ IDENT | functional_pseudo ]
+ * ;
+ */
+
+ var tokenStream = this._tokenStream,
+ pseudo = null,
+ colons = ":",
+ line,
+ col;
+
+ if (tokenStream.match(Tokens.COLON)){
+
+ if (tokenStream.match(Tokens.COLON)){
+ colons += ":";
+ }
+
+ if (tokenStream.match(Tokens.IDENT)){
+ pseudo = tokenStream.token().value;
+ line = tokenStream.token().startLine;
+ col = tokenStream.token().startCol - colons.length;
+ } else if (tokenStream.peek() == Tokens.FUNCTION){
+ line = tokenStream.LT(1).startLine;
+ col = tokenStream.LT(1).startCol - colons.length;
+ pseudo = this._functional_pseudo();
+ }
+
+ if (pseudo){
+ pseudo = new SelectorSubPart(colons + pseudo, "pseudo", line, col);
+ }
+ }
+
+ return pseudo;
+ },
+
+ //CSS3 Selectors
+ _functional_pseudo: function(){
+ /*
+ * functional_pseudo
+ * : FUNCTION S* expression ')'
+ * ;
+ */
+
+ var tokenStream = this._tokenStream,
+ value = null;
+
+ if(tokenStream.match(Tokens.FUNCTION)){
+ value = tokenStream.token().value;
+ value += this._readWhitespace();
+ value += this._expression();
+ tokenStream.mustMatch(Tokens.RPAREN);
+ value += ")";
+ }
+
+ return value;
+ },
+
+ //CSS3 Selectors
+ _expression: function(){
+ /*
+ * expression
+ * : [ [ PLUS | '-' | DIMENSION | NUMBER | STRING | IDENT ] S* ]+
+ * ;
+ */
+
+ var tokenStream = this._tokenStream,
+ value = "";
+
+ while(tokenStream.match([Tokens.PLUS, Tokens.MINUS, Tokens.DIMENSION,
+ Tokens.NUMBER, Tokens.STRING, Tokens.IDENT, Tokens.LENGTH,
+ Tokens.FREQ, Tokens.ANGLE, Tokens.TIME,
+ Tokens.RESOLUTION])){
+
+ value += tokenStream.token().value;
+ value += this._readWhitespace();
+ }
+
+ return value.length ? value : null;
+
+ },
+
+ //CSS3 Selectors
+ _negation: function(){
+ /*
+ * negation
+ * : NOT S* negation_arg S* ')'
+ * ;
+ */
+
+ var tokenStream = this._tokenStream,
+ line,
+ col,
+ value = "",
+ arg,
+ subpart = null;
+
+ if (tokenStream.match(Tokens.NOT)){
+ value = tokenStream.token().value;
+ line = tokenStream.token().startLine;
+ col = tokenStream.token().startCol;
+ value += this._readWhitespace();
+ arg = this._negation_arg();
+ value += arg;
+ value += this._readWhitespace();
+ tokenStream.match(Tokens.RPAREN);
+ value += tokenStream.token().value;
+
+ subpart = new SelectorSubPart(value, "not", line, col);
+ subpart.args.push(arg);
+ }
+
+ return subpart;
+ },
+
+ //CSS3 Selectors
+ _negation_arg: function(){
+ /*
+ * negation_arg
+ * : type_selector | universal | HASH | class | attrib | pseudo
+ * ;
+ */
+
+ var tokenStream = this._tokenStream,
+ args = [
+ this._type_selector,
+ this._universal,
+ function(){
+ return tokenStream.match(Tokens.HASH) ?
+ new SelectorSubPart(tokenStream.token().value, "id", tokenStream.token().startLine, tokenStream.token().startCol) :
+ null;
+ },
+ this._class,
+ this._attrib,
+ this._pseudo
+ ],
+ arg = null,
+ i = 0,
+ len = args.length,
+ elementName,
+ line,
+ col,
+ part;
+
+ line = tokenStream.LT(1).startLine;
+ col = tokenStream.LT(1).startCol;
+
+ while(i < len && arg === null){
+
+ arg = args[i].call(this);
+ i++;
+ }
+
+ //must be a negation arg
+ if (arg === null){
+ this._unexpectedToken(tokenStream.LT(1));
+ }
+
+ //it's an element name
+ if (arg.type == "elementName"){
+ part = new SelectorPart(arg, [], arg.toString(), line, col);
+ } else {
+ part = new SelectorPart(null, [arg], arg.toString(), line, col);
+ }
+
+ return part;
+ },
+
+ _declaration: function(){
+
+ /*
+ * declaration
+ * : property ':' S* expr prio?
+ * | /( empty )/
+ * ;
+ */
+
+ var tokenStream = this._tokenStream,
+ property = null,
+ expr = null,
+ prio = null;
+
+ property = this._property();
+ if (property !== null){
+
+ tokenStream.mustMatch(Tokens.COLON);
+ this._readWhitespace();
+
+ expr = this._expr();
+
+ //if there's no parts for the value, it's an error
+ if (!expr || expr.length === 0){
+ this._unexpectedToken(tokenStream.LT(1));
+ }
+
+ prio = this._prio();
+
+ this.fire({
+ type: "property",
+ property: property,
+ value: expr,
+ important: prio,
+ line: property.line,
+ col: property.col
+ });
+
+ return true;
+ } else {
+ return false;
+ }
+ },
+
+ _prio: function(){
+ /*
+ * prio
+ * : IMPORTANT_SYM S*
+ * ;
+ */
+
+ var tokenStream = this._tokenStream,
+ result = tokenStream.match(Tokens.IMPORTANT_SYM);
+
+ this._readWhitespace();
+ return result;
+ },
+
+ _expr: function(){
+ /*
+ * expr
+ * : term [ operator term ]*
+ * ;
+ */
+
+ var tokenStream = this._tokenStream,
+ values = [],
+ //valueParts = [],
+ value = null,
+ operator = null;
+
+ value = this._term();
+ if (value !== null){
+
+ values.push(value);
+
+ do {
+ operator = this._operator();
+
+ //if there's an operator, keep building up the value parts
+ if (operator){
+ values.push(operator);
+ } /*else {
+ //if there's not an operator, you have a full value
+ values.push(new PropertyValue(valueParts, valueParts[0].line, valueParts[0].col));
+ valueParts = [];
+ }*/
+
+ value = this._term();
+
+ if (value === null){
+ break;
+ } else {
+ values.push(value);
+ }
+ } while(true);
+ }
+
+ //cleanup
+ /*if (valueParts.length){
+ values.push(new PropertyValue(valueParts, valueParts[0].line, valueParts[0].col));
+ }*/
+
+ return values.length > 0 ? new PropertyValue(values, values[0].startLine, values[0].startCol) : null;
+ },
+
+ _term: function(){
+
+ /*
+ * term
+ * : unary_operator?
+ * [ NUMBER S* | PERCENTAGE S* | LENGTH S* | ANGLE S* |
+ * TIME S* | FREQ S* | function | ie_function ]
+ * | STRING S* | IDENT S* | URI S* | UNICODERANGE S* | hexcolor
+ * ;
+ */
+
+ var tokenStream = this._tokenStream,
+ unary = null,
+ value = null,
+ line,
+ col;
+
+ //returns the operator or null
+ unary = this._unary_operator();
+ if (unary !== null){
+ line = tokenStream.token().startLine;
+ col = tokenStream.token().startCol;
+ }
+
+ //exception for IE filters
+ if (tokenStream.peek() == Tokens.IE_FUNCTION && this.options.ieFilters){
+
+ value = this._ie_function();
+ if (unary === null){
+ line = tokenStream.token().startLine;
+ col = tokenStream.token().startCol;
+ }
+
+ //see if there's a simple match
+ } else if (tokenStream.match([Tokens.NUMBER, Tokens.PERCENTAGE, Tokens.LENGTH,
+ Tokens.ANGLE, Tokens.TIME,
+ Tokens.FREQ, Tokens.STRING, Tokens.IDENT, Tokens.URI, Tokens.UNICODE_RANGE])){
+
+ value = tokenStream.token().value;
+ if (unary === null){
+ line = tokenStream.token().startLine;
+ col = tokenStream.token().startCol;
+ }
+ this._readWhitespace();
+ } else {
+
+ //see if it's a color
+ value = this._hexcolor();
+ if (value === null){
+
+ //if there's no unary, get the start of the next token for line/col info
+ if (unary === null){
+ line = tokenStream.LT(1).startLine;
+ col = tokenStream.LT(1).startCol;
+ }
+
+ //has to be a function
+ if (value === null){
+
+ /*
+ * This checks for alpha(opacity=0) style of IE
+ * functions. IE_FUNCTION only presents progid: style.
+ */
+ if (tokenStream.LA(3) == Tokens.EQUALS && this.options.ieFilters){
+ value = this._ie_function();
+ } else {
+ value = this._function();
+ }
+ }
+
+ /*if (value === null){
+ return null;
+ //throw new Error("Expected identifier at line " + tokenStream.token().startLine + ", character " + tokenStream.token().startCol + ".");
+ }*/
+
+ } else {
+ if (unary === null){
+ line = tokenStream.token().startLine;
+ col = tokenStream.token().startCol;
+ }
+ }
+
+ }
+
+ return value !== null ?
+ new PropertyValuePart(unary !== null ? unary + value : value, line, col) :
+ null;
+
+ },
+
+ _function: function(){
+
+ /*
+ * function
+ * : FUNCTION S* expr ')' S*
+ * ;
+ */
+
+ var tokenStream = this._tokenStream,
+ functionText = null,
+ expr = null;
+
+ if (tokenStream.match(Tokens.FUNCTION)){
+ functionText = tokenStream.token().value;
+ this._readWhitespace();
+ expr = this._expr();
+
+ tokenStream.match(Tokens.RPAREN);
+ functionText += expr + ")";
+ this._readWhitespace();
+ }
+
+ return functionText;
+ },
+
+ _ie_function: function(){
+
+ /* (My own extension)
+ * ie_function
+ * : IE_FUNCTION S* IDENT '=' term [S* ','? IDENT '=' term]+ ')' S*
+ * ;
+ */
+
+ var tokenStream = this._tokenStream,
+ functionText = null,
+ expr = null,
+ lt;
+
+ //IE function can begin like a regular function, too
+ if (tokenStream.match([Tokens.IE_FUNCTION, Tokens.FUNCTION])){
+ functionText = tokenStream.token().value;
+
+ do {
+
+ if (this._readWhitespace()){
+ functionText += tokenStream.token().value;
+ }
+
+ //might be second time in the loop
+ if (tokenStream.LA(0) == Tokens.COMMA){
+ functionText += tokenStream.token().value;
+ }
+
+ tokenStream.match(Tokens.IDENT);
+ functionText += tokenStream.token().value;
+
+ tokenStream.match(Tokens.EQUALS);
+ functionText += tokenStream.token().value;
+
+ //functionText += this._term();
+ lt = tokenStream.peek();
+ while(lt != Tokens.COMMA && lt != Tokens.S && lt != Tokens.RPAREN){
+ tokenStream.get();
+ functionText += tokenStream.token().value;
+ lt = tokenStream.peek();
+ }
+ } while(tokenStream.match([Tokens.COMMA, Tokens.S]));
+
+ tokenStream.match(Tokens.RPAREN);
+ functionText += ")";
+ this._readWhitespace();
+ }
+
+ return functionText;
+ },
+
+ _hexcolor: function(){
+ /*
+ * There is a constraint on the color that it must
+ * have either 3 or 6 hex-digits (i.e., [0-9a-fA-F])
+ * after the "#"; e.g., "#000" is OK, but "#abcd" is not.
+ *
+ * hexcolor
+ * : HASH S*
+ * ;
+ */
+
+ var tokenStream = this._tokenStream,
+ token,
+ color = null;
+
+ if(tokenStream.match(Tokens.HASH)){
+
+ //need to do some validation here
+
+ token = tokenStream.token();
+ color = token.value;
+ if (!/#[a-f0-9]{3,6}/i.test(color)){
+ throw new SyntaxError("Expected a hex color but found '" + color + "' at line " + token.startLine + ", col " + token.startCol + ".", token.startLine, token.startCol);
+ }
+ this._readWhitespace();
+ }
+
+ return color;
+ },
+
+ //-----------------------------------------------------------------
+ // Animations methods
+ //-----------------------------------------------------------------
+
+ _keyframes: function(){
+
+ /*
+ * keyframes:
+ * : KEYFRAMES_SYM S* keyframe_name S* '{' S* keyframe_rule* '}' {
+ * ;
+ */
+ var tokenStream = this._tokenStream,
+ token,
+ tt,
+ name;
+
+ tokenStream.mustMatch(Tokens.KEYFRAMES_SYM);
+ this._readWhitespace();
+ name = this._keyframe_name();
+
+ this._readWhitespace();
+ tokenStream.mustMatch(Tokens.LBRACE);
+
+ this.fire({
+ type: "startkeyframes",
+ name: name,
+ line: name.line,
+ col: name.col
+ });
+
+ this._readWhitespace();
+ tt = tokenStream.peek();
+
+ //check for key
+ while(tt == Tokens.IDENT || tt == Tokens.PERCENTAGE) {
+ this._keyframe_rule();
+ this._readWhitespace();
+ tt = tokenStream.peek();
+ }
+
+ this.fire({
+ type: "endkeyframes",
+ name: name,
+ line: name.line,
+ col: name.col
+ });
+
+ this._readWhitespace();
+ tokenStream.mustMatch(Tokens.RBRACE);
+
+ },
+
+ _keyframe_name: function(){
+
+ /*
+ * keyframe_name:
+ * : IDENT
+ * | STRING
+ * ;
+ */
+ var tokenStream = this._tokenStream,
+ token;
+
+ tokenStream.mustMatch([Tokens.IDENT, Tokens.STRING]);
+ return SyntaxUnit.fromToken(tokenStream.token());
+ },
+
+ _keyframe_rule: function(){
+
+ /*
+ * keyframe_rule:
+ * : key_list S*
+ * '{' S* declaration [ ';' S* declaration ]* '}' S*
+ * ;
+ */
+ var tokenStream = this._tokenStream,
+ token,
+ keyList = this._key_list();
+
+ this.fire({
+ type: "startkeyframerule",
+ keys: keyList,
+ line: keyList[0].line,
+ col: keyList[0].col
+ });
+
+ this._readDeclarations(true);
+
+ this.fire({
+ type: "endkeyframerule",
+ keys: keyList,
+ line: keyList[0].line,
+ col: keyList[0].col
+ });
+
+ },
+
+ _key_list: function(){
+
+ /*
+ * key_list:
+ * : key [ S* ',' S* key]*
+ * ;
+ */
+ var tokenStream = this._tokenStream,
+ token,
+ key,
+ keyList = [];
+
+ //must be least one key
+ keyList.push(this._key());
+
+ this._readWhitespace();
+
+ while(tokenStream.match(Tokens.COMMA)){
+ this._readWhitespace();
+ keyList.push(this._key());
+ this._readWhitespace();
+ }
+
+ return keyList;
+ },
+
+ _key: function(){
+ /*
+ * There is a restriction that IDENT can be only "from" or "to".
+ *
+ * key
+ * : PERCENTAGE
+ * | IDENT
+ * ;
+ */
+
+ var tokenStream = this._tokenStream,
+ token;
+
+ if (tokenStream.match(Tokens.PERCENTAGE)){
+ return SyntaxUnit.fromToken(tokenStream.token());
+ } else if (tokenStream.match(Tokens.IDENT)){
+ token = tokenStream.token();
+
+ if (/from|to/i.test(token.value)){
+ return SyntaxUnit.fromToken(token);
+ }
+
+ tokenStream.unget();
+ }
+
+ //if it gets here, there wasn't a valid token, so time to explode
+ this._unexpectedToken(tokenStream.LT(1));
+ },
+
+ //-----------------------------------------------------------------
+ // Helper methods
+ //-----------------------------------------------------------------
+
+ /**
+ * Not part of CSS grammar, but useful for skipping over
+ * combination of white space and HTML-style comments.
+ * @return {void}
+ * @method _skipCruft
+ * @private
+ */
+ _skipCruft: function(){
+ while(this._tokenStream.match([Tokens.S, Tokens.CDO, Tokens.CDC])){
+ //noop
+ }
+ },
+
+ /**
+ * Not part of CSS grammar, but this pattern occurs frequently
+ * in the official CSS grammar. Split out here to eliminate
+ * duplicate code.
+ * @param {Boolean} checkStart Indicates if the rule should check
+ * for the left brace at the beginning.
+ * @param {Boolean} readMargins Indicates if the rule should check
+ * for margin patterns.
+ * @return {void}
+ * @method _readDeclarations
+ * @private
+ */
+ _readDeclarations: function(checkStart, readMargins){
+ /*
+ * Reads the pattern
+ * S* '{' S* declaration [ ';' S* declaration ]* '}' S*
+ * or
+ * S* '{' S* [ declaration | margin ]? [ ';' S* [ declaration | margin ]? ]* '}' S*
+ * Note that this is how it is described in CSS3 Paged Media, but is actually incorrect.
+ * A semicolon is only necessary following a delcaration is there's another declaration
+ * or margin afterwards.
+ */
+ var tokenStream = this._tokenStream,
+ tt;
+
+
+ this._readWhitespace();
+
+ if (checkStart){
+ tokenStream.mustMatch(Tokens.LBRACE);
+ }
+
+ this._readWhitespace();
+
+ try {
+
+ while(true){
+
+ if (readMargins && this._margin()){
+ //noop
+ } else if (this._declaration()){
+ if (!tokenStream.match(Tokens.SEMICOLON)){
+ break;
+ }
+ } else {
+ break;
+ }
+
+ //if ((!this._margin() && !this._declaration()) || !tokenStream.match(Tokens.SEMICOLON)){
+ // break;
+ //}
+ this._readWhitespace();
+ }
+
+ tokenStream.mustMatch(Tokens.RBRACE);
+ this._readWhitespace();
+
+ } catch (ex) {
+ if (ex instanceof SyntaxError && !this.options.strict){
+
+ //fire error event
+ this.fire({
+ type: "error",
+ error: ex,
+ message: ex.message,
+ line: ex.line,
+ col: ex.col
+ });
+
+ //see if there's another declaration
+ tt = tokenStream.advance([Tokens.SEMICOLON, Tokens.RBRACE]);
+ if (tt == Tokens.SEMICOLON){
+ //if there's a semicolon, then there might be another declaration
+ this._readDeclarations(false, readMargins);
+ } else if (tt == Tokens.RBRACE){
+ //if there's a right brace, the rule is finished so don't do anything
+ } else {
+ //otherwise, rethrow the error because it wasn't handled properly
+ throw ex;
+ }
+
+ } else {
+ //not a syntax error, rethrow it
+ throw ex;
+ }
+ }
+
+ },
+
+ /**
+ * In some cases, you can end up with two white space tokens in a
+ * row. Instead of making a change in every function that looks for
+ * white space, this function is used to match as much white space
+ * as necessary.
+ * @method _readWhitespace
+ * @return {String} The white space if found, empty string if not.
+ * @private
+ */
+ _readWhitespace: function(){
+
+ var tokenStream = this._tokenStream,
+ ws = "";
+
+ while(tokenStream.match(Tokens.S)){
+ ws += tokenStream.token().value;
+ }
+
+ return ws;
+ },
+
+
+ /**
+ * Throws an error when an unexpected token is found.
+ * @param {Object} token The token that was found.
+ * @method _unexpectedToken
+ * @return {void}
+ * @private
+ */
+ _unexpectedToken: function(token){
+ throw new SyntaxError("Unexpected token '" + token.value + "' at line " + token.startLine + ", col " + token.startCol + ".", token.startLine, token.startCol);
+ },
+
+ /**
+ * Helper method used for parsing subparts of a style sheet.
+ * @return {void}
+ * @method _verifyEnd
+ * @private
+ */
+ _verifyEnd: function(){
+ if (this._tokenStream.LA(1) != Tokens.EOF){
+ this._unexpectedToken(this._tokenStream.LT(1));
+ }
+ },
+
+ //-----------------------------------------------------------------
+ // Parsing methods
+ //-----------------------------------------------------------------
+
+ parse: function(input){
+ this._tokenStream = new TokenStream(input, Tokens);
+ this._stylesheet();
+ },
+
+ parseStyleSheet: function(input){
+ //just passthrough
+ return this.parse(input);
+ },
+
+ parseMediaQuery: function(input){
+ this._tokenStream = new TokenStream(input, Tokens);
+ var result = this._media_query();
+
+ //if there's anything more, then it's an invalid selector
+ this._verifyEnd();
+
+ //otherwise return result
+ return result;
+ },
+
+ /**
+ * Parses a property value (everything after the semicolon).
+ * @return {parserlib.css.PropertyValue} The property value.
+ * @throws parserlib.util.SyntaxError If an unexpected token is found.
+ * @method parserPropertyValue
+ */
+ parsePropertyValue: function(input){
+
+ this._tokenStream = new TokenStream(input, Tokens);
+ this._readWhitespace();
+
+ var result = this._expr();
+
+ //okay to have a trailing white space
+ this._readWhitespace();
+
+ //if there's anything more, then it's an invalid selector
+ this._verifyEnd();
+
+ //otherwise return result
+ return result;
+ },
+
+ /**
+ * Parses a complete CSS rule, including selectors and
+ * properties.
+ * @param {String} input The text to parser.
+ * @return {Boolean} True if the parse completed successfully, false if not.
+ * @method parseRule
+ */
+ parseRule: function(input){
+ this._tokenStream = new TokenStream(input, Tokens);
+
+ //skip any leading white space
+ this._readWhitespace();
+
+ var result = this._ruleset();
+
+ //skip any trailing white space
+ this._readWhitespace();
+
+ //if there's anything more, then it's an invalid selector
+ this._verifyEnd();
+
+ //otherwise return result
+ return result;
+ },
+
+ /**
+ * Parses a single CSS selector (no comma)
+ * @param {String} input The text to parse as a CSS selector.
+ * @return {Selector} An object representing the selector.
+ * @throws parserlib.util.SyntaxError If an unexpected token is found.
+ * @method parseSelector
+ */
+ parseSelector: function(input){
+
+ this._tokenStream = new TokenStream(input, Tokens);
+
+ //skip any leading white space
+ this._readWhitespace();
+
+ var result = this._selector();
+
+ //skip any trailing white space
+ this._readWhitespace();
+
+ //if there's anything more, then it's an invalid selector
+ this._verifyEnd();
+
+ //otherwise return result
+ return result;
+ }
+
+ };
+
+ //copy over onto prototype
+ for (prop in additions){
+ proto[prop] = additions[prop];
+ }
+
+ return proto;
+}();
+
+
+/*
+nth
+ : S* [ ['-'|'+']? INTEGER? {N} [ S* ['-'|'+'] S* INTEGER ]? |
+ ['-'|'+']? INTEGER | {O}{D}{D} | {E}{V}{E}{N} ] S*
+ ;
+*/
+/**
+ * Represents a selector combinator (whitespace, +, >).
+ * @namespace parserlib.css
+ * @class PropertyName
+ * @extends parserlib.util.SyntaxUnit
+ * @constructor
+ * @param {String} text The text representation of the unit.
+ * @param {String} hack The type of IE hack applied ("*", "_", or null).
+ * @param {int} line The line of text on which the unit resides.
+ * @param {int} col The column of text on which the unit resides.
+ */
+function PropertyName(text, hack, line, col){
+
+ SyntaxUnit.call(this, (hack||"") + text, line, col);
+
+ /**
+ * The type of IE hack applied ("*", "_", or null).
+ * @type String
+ * @property hack
+ */
+ this.hack = hack;
+
+}
+
+PropertyName.prototype = new SyntaxUnit();
+PropertyName.prototype.constructor = PropertyName;
+
+
+/**
+ * Represents a single part of a CSS property value, meaning that it represents
+ * just everything single part between ":" and ";". If there are multiple values
+ * separated by commas, this type represents just one of the values.
+ * @param {String[]} parts An array of value parts making up this value.
+ * @param {int} line The line of text on which the unit resides.
+ * @param {int} col The column of text on which the unit resides.
+ * @namespace parserlib.css
+ * @class PropertyValue
+ * @extends parserlib.util.SyntaxUnit
+ * @constructor
+ */
+function PropertyValue(parts, line, col){
+
+ SyntaxUnit.call(this, parts.join(" "), line, col);
+
+ /**
+ * The parts that make up the selector.
+ * @type Array
+ * @property parts
+ */
+ this.parts = parts;
+
+}
+
+PropertyValue.prototype = new SyntaxUnit();
+PropertyValue.prototype.constructor = PropertyValue;
+
+
+/**
+ * Represents a single part of a CSS property value, meaning that it represents
+ * just one part of the data between ":" and ";".
+ * @param {String} text The text representation of the unit.
+ * @param {int} line The line of text on which the unit resides.
+ * @param {int} col The column of text on which the unit resides.
+ * @namespace parserlib.css
+ * @class PropertyValuePart
+ * @extends parserlib.util.SyntaxUnit
+ * @constructor
+ */
+function PropertyValuePart(text, line, col){
+
+ SyntaxUnit.apply(this,arguments);
+
+ /**
+ * Indicates the type of value unit.
+ * @type String
+ * @property type
+ */
+ this.type = "unknown";
+
+ //figure out what type of data it is
+
+ var temp;
+
+ //it is a measurement?
+ if (/^([+\-]?[\d\.]+)([a-z]+)$/i.test(text)){ //dimension
+ this.type = "dimension";
+ this.value = +RegExp.$1;
+ this.units = RegExp.$2;
+
+ //try to narrow down
+ switch(this.units.toLowerCase()){
+
+ case "em":
+ case "rem":
+ case "ex":
+ case "px":
+ case "cm":
+ case "mm":
+ case "in":
+ case "pt":
+ case "pc":
+ this.type = "length";
+ break;
+
+ case "deg":
+ case "rad":
+ case "grad":
+ this.type = "angle";
+ break;
+
+ case "ms":
+ case "s":
+ this.type = "time";
+ break;
+
+ case "hz":
+ case "khz":
+ this.type = "frequency";
+ break;
+
+ case "dpi":
+ case "dpcm":
+ this.type = "resolution";
+ break;
+
+ //default
+
+ }
+
+ } else if (/^([+\-]?[\d\.]+)%$/i.test(text)){ //percentage
+ this.type = "percentage";
+ this.value = +RegExp.$1;
+ } else if (/^([+\-]?[\d\.]+)%$/i.test(text)){ //percentage
+ this.type = "percentage";
+ this.value = +RegExp.$1;
+ } else if (/^([+\-]?\d+)$/i.test(text)){ //integer
+ this.type = "integer";
+ this.value = +RegExp.$1;
+ } else if (/^([+\-]?[\d\.]+)$/i.test(text)){ //number
+ this.type = "number";
+ this.value = +RegExp.$1;
+
+ } else if (/^#([a-f0-9]{3,6})/i.test(text)){ //hexcolor
+ this.type = "color";
+ temp = RegExp.$1;
+ if (temp.length == 3){
+ this.red = parseInt(temp.charAt(0)+temp.charAt(0),16);
+ this.green = parseInt(temp.charAt(1)+temp.charAt(1),16);
+ this.blue = parseInt(temp.charAt(2)+temp.charAt(2),16);
+ } else {
+ this.red = parseInt(temp.substring(0,2),16);
+ this.green = parseInt(temp.substring(2,4),16);
+ this.blue = parseInt(temp.substring(4,6),16);
+ }
+ } else if (/^rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)/i.test(text)){ //rgb() color with absolute numbers
+ this.type = "color";
+ this.red = +RegExp.$1;
+ this.green = +RegExp.$2;
+ this.blue = +RegExp.$3;
+ } else if (/^rgb\(\s*(\d+)%\s*,\s*(\d+)%\s*,\s*(\d+)%\s*\)/i.test(text)){ //rgb() color with percentages
+ this.type = "color";
+ this.red = +RegExp.$1 * 255 / 100;
+ this.green = +RegExp.$2 * 255 / 100;
+ this.blue = +RegExp.$3 * 255 / 100;
+ } else if (/^url\(["']?([^\)"']+)["']?\)/i.test(text)){ //URI
+ this.type = "uri";
+ this.uri = RegExp.$1;
+ } else if (/^["'][^"']*["']/.test(text)){ //string
+ this.type = "string";
+ this.value = eval(text);
+ } else if (Colors[text.toLowerCase()]){ //named color
+ this.type = "color";
+ temp = Colors[text.toLowerCase()].substring(1);
+ this.red = parseInt(temp.substring(0,2),16);
+ this.green = parseInt(temp.substring(2,4),16);
+ this.blue = parseInt(temp.substring(4,6),16);
+ } else if (/^[\,\/]$/.test(text)){
+ this.type = "operator";
+ this.value = text;
+ } else if (/^[a-z\-\u0080-\uFFFF][a-z0-9\-\u0080-\uFFFF]*$/i.test(text)){
+ this.type = "identifier";
+ this.value = text;
+ }
+
+}
+
+PropertyValuePart.prototype = new SyntaxUnit();
+PropertyValuePart.prototype.constructor = PropertyValue;
+
+/**
+ * Create a new syntax unit based solely on the given token.
+ * Convenience method for creating a new syntax unit when
+ * it represents a single token instead of multiple.
+ * @param {Object} token The token object to represent.
+ * @return {parserlib.css.PropertyValuePart} The object representing the token.
+ * @static
+ * @method fromToken
+ */
+PropertyValuePart.fromToken = function(token){
+ return new PropertyValuePart(token.value, token.startLine, token.startCol);
+};
+/**
+ * Represents an entire single selector, including all parts but not
+ * including multiple selectors (those separated by commas).
+ * @namespace parserlib.css
+ * @class Selector
+ * @extends parserlib.util.SyntaxUnit
+ * @constructor
+ * @param {Array} parts Array of selectors parts making up this selector.
+ * @param {int} line The line of text on which the unit resides.
+ * @param {int} col The column of text on which the unit resides.
+ */
+function Selector(parts, line, col){
+
+ SyntaxUnit.call(this, parts.join(" "), line, col);
+
+ /**
+ * The parts that make up the selector.
+ * @type Array
+ * @property parts
+ */
+ this.parts = parts;
+
+}
+
+Selector.prototype = new SyntaxUnit();
+Selector.prototype.constructor = Selector;
+
+
+/**
+ * Represents a single part of a selector string, meaning a single set of
+ * element name and modifiers. This does not include combinators such as
+ * spaces, +, >, etc.
+ * @namespace parserlib.css
+ * @class SelectorPart
+ * @extends parserlib.util.SyntaxUnit
+ * @constructor
+ * @param {String} elementName The element name in the selector or null
+ * if there is no element name.
+ * @param {Array} modifiers Array of individual modifiers for the element.
+ * May be empty if there are none.
+ * @param {String} text The text representation of the unit.
+ * @param {int} line The line of text on which the unit resides.
+ * @param {int} col The column of text on which the unit resides.
+ */
+function SelectorPart(elementName, modifiers, text, line, col){
+
+ SyntaxUnit.call(this, text, line, col);
+
+ /**
+ * The tag name of the element to which this part
+ * of the selector affects.
+ * @type String
+ * @property elementName
+ */
+ this.elementName = elementName;
+
+ /**
+ * The parts that come after the element name, such as class names, IDs,
+ * pseudo classes/elements, etc.
+ * @type Array
+ * @property modifiers
+ */
+ this.modifiers = modifiers;
+
+}
+
+SelectorPart.prototype = new SyntaxUnit();
+SelectorPart.prototype.constructor = SelectorPart;
+
+
+/**
+ * Represents a selector modifier string, meaning a class name, element name,
+ * element ID, pseudo rule, etc.
+ * @namespace parserlib.css
+ * @class SelectorSubPart
+ * @extends parserlib.util.SyntaxUnit
+ * @constructor
+ * @param {String} text The text representation of the unit.
+ * @param {String} type The type of selector modifier.
+ * @param {int} line The line of text on which the unit resides.
+ * @param {int} col The column of text on which the unit resides.
+ */
+function SelectorSubPart(text, type, line, col){
+
+ SyntaxUnit.call(this, text, line, col);
+
+ /**
+ * The type of modifier.
+ * @type String
+ * @property type
+ */
+ this.type = type;
+
+ /**
+ * Some subparts have arguments, this represents them.
+ * @type Array
+ * @property args
+ */
+ this.args = [];
+
+}
+
+SelectorSubPart.prototype = new SyntaxUnit();
+SelectorSubPart.prototype.constructor = SelectorSubPart;
+
+
+
+
+var h = /^[0-9a-fA-F]$/,
+ nonascii = /^[\u0080-\uFFFF]$/,
+ nl = /\n|\r\n|\r|\f/;
+
+//-----------------------------------------------------------------------------
+// Helper functions
+//-----------------------------------------------------------------------------
+
+
+function isHexDigit(c){
+ return c != null && h.test(c);
+}
+
+function isDigit(c){
+ return c != null && /\d/.test(c);
+}
+
+function isWhitespace(c){
+ return c != null && /\s/.test(c);
+}
+
+function isNewLine(c){
+ return c != null && nl.test(c);
+}
+
+function isNameStart(c){
+ return c != null && (/[a-z_\u0080-\uFFFF\\]/i.test(c));
+}
+
+function isNameChar(c){
+ return c != null && (isNameStart(c) || /[0-9\-\\]/.test(c));
+}
+
+function isIdentStart(c){
+ return c != null && (isNameStart(c) || /\-\\/.test(c));
+}
+
+function mix(receiver, supplier){
+ for (var prop in supplier){
+ if (supplier.hasOwnProperty(prop)){
+ receiver[prop] = supplier[prop];
+ }
+ }
+ return receiver;
+}
+
+//-----------------------------------------------------------------------------
+// CSS Token Stream
+//-----------------------------------------------------------------------------
+
+
+/**
+ * A token stream that produces CSS tokens.
+ * @param {String|Reader} input The source of text to tokenize.
+ * @constructor
+ * @class TokenStream
+ * @namespace parserlib.css
+ */
+function TokenStream(input){
+ TokenStreamBase.call(this, input, Tokens);
+}
+
+TokenStream.prototype = mix(new TokenStreamBase(), {
+
+ /**
+ * Overrides the TokenStreamBase method of the same name
+ * to produce CSS tokens.
+ * @param {variant} channel The name of the channel to use
+ * for the next token.
+ * @return {Object} A token object representing the next token.
+ * @method _getToken
+ * @private
+ */
+ _getToken: function(channel){
+
+ var c,
+ reader = this._reader,
+ token = null,
+ startLine = reader.getLine(),
+ startCol = reader.getCol();
+
+ c = reader.read();
+
+
+ while(c){
+ switch(c){
+
+ /*
+ * Potential tokens:
+ * - COMMENT
+ * - SLASH
+ * - CHAR
+ */
+ case "/":
+
+ if(reader.peek() == "*"){
+ token = this.commentToken(c, startLine, startCol);
+ } else {
+ token = this.charToken(c, startLine, startCol);
+ }
+ break;
+
+ /*
+ * Potential tokens:
+ * - DASHMATCH
+ * - INCLUDES
+ * - PREFIXMATCH
+ * - SUFFIXMATCH
+ * - SUBSTRINGMATCH
+ * - CHAR
+ */
+ case "|":
+ case "~":
+ case "^":
+ case "$":
+ case "*":
+ if(reader.peek() == "="){
+ token = this.comparisonToken(c, startLine, startCol);
+ } else {
+ token = this.charToken(c, startLine, startCol);
+ }
+ break;
+
+ /*
+ * Potential tokens:
+ * - STRING
+ * - INVALID
+ */
+ case "\"":
+ case "'":
+ token = this.stringToken(c, startLine, startCol);
+ break;
+
+ /*
+ * Potential tokens:
+ * - HASH
+ * - CHAR
+ */
+ case "#":
+ if (isNameChar(reader.peek())){
+ token = this.hashToken(c, startLine, startCol);
+ } else {
+ token = this.charToken(c, startLine, startCol);
+ }
+ break;
+
+ /*
+ * Potential tokens:
+ * - DOT
+ * - NUMBER
+ * - DIMENSION
+ * - PERCENTAGE
+ */
+ case ".":
+ if (isDigit(reader.peek())){
+ token = this.numberToken(c, startLine, startCol);
+ } else {
+ token = this.charToken(c, startLine, startCol);
+ }
+ break;
+
+ /*
+ * Potential tokens:
+ * - CDC
+ * - MINUS
+ * - NUMBER
+ * - DIMENSION
+ * - PERCENTAGE
+ */
+ case "-":
+ if (reader.peek() == "-"){ //could be closing HTML-style comment
+ token = this.htmlCommentEndToken(c, startLine, startCol);
+ } else if (isNameStart(reader.peek())){
+ token = this.identOrFunctionToken(c, startLine, startCol);
+ } else {
+ token = this.charToken(c, startLine, startCol);
+ }
+ break;
+
+ /*
+ * Potential tokens:
+ * - IMPORTANT_SYM
+ * - CHAR
+ */
+ case "!":
+ token = this.importantToken(c, startLine, startCol);
+ break;
+
+ /*
+ * Any at-keyword or CHAR
+ */
+ case "@":
+ token = this.atRuleToken(c, startLine, startCol);
+ break;
+
+ /*
+ * Potential tokens:
+ * - NOT
+ * - CHAR
+ */
+ case ":":
+ token = this.notToken(c, startLine, startCol);
+ break;
+
+ /*
+ * Potential tokens:
+ * - CDO
+ * - CHAR
+ */
+ case "<":
+ token = this.htmlCommentStartToken(c, startLine, startCol);
+ break;
+
+ /*
+ * Potential tokens:
+ * - UNICODE_RANGE
+ * - URL
+ * - CHAR
+ */
+ case "U":
+ case "u":
+ if (reader.peek() == "+"){
+ token = this.unicodeRangeToken(c, startLine, startCol);
+ break;
+ }
+ /*falls through*/
+
+ default:
+
+ /*
+ * Potential tokens:
+ * - NUMBER
+ * - DIMENSION
+ * - LENGTH
+ * - FREQ
+ * - TIME
+ * - EMS
+ * - EXS
+ * - ANGLE
+ */
+ if (isDigit(c)){
+ token = this.numberToken(c, startLine, startCol);
+ } else
+
+ /*
+ * Potential tokens:
+ * - S
+ */
+ if (isWhitespace(c)){
+ token = this.whitespaceToken(c, startLine, startCol);
+ } else
+
+ /*
+ * Potential tokens:
+ * - IDENT
+ */
+ if (isIdentStart(c)){
+ token = this.identOrFunctionToken(c, startLine, startCol);
+ } else
+
+ /*
+ * Potential tokens:
+ * - CHAR
+ * - PLUS
+ */
+ {
+ token = this.charToken(c, startLine, startCol);
+ }
+
+
+
+
+
+
+ }
+
+ //make sure this token is wanted
+ //TODO: check channel
+ break;
+
+ c = reader.read();
+ }
+
+ if (!token && c == null){
+ token = this.createToken(Tokens.EOF,null,startLine,startCol);
+ }
+
+ return token;
+ },
+
+ //-------------------------------------------------------------------------
+ // Methods to create tokens
+ //-------------------------------------------------------------------------
+
+ /**
+ * Produces a token based on available data and the current
+ * reader position information. This method is called by other
+ * private methods to create tokens and is never called directly.
+ * @param {int} tt The token type.
+ * @param {String} value The text value of the token.
+ * @param {int} startLine The beginning line for the character.
+ * @param {int} startCol The beginning column for the character.
+ * @param {Object} options (Optional) Specifies a channel property
+ * to indicate that a different channel should be scanned
+ * and/or a hide property indicating that the token should
+ * be hidden.
+ * @return {Object} A token object.
+ * @method createToken
+ */
+ createToken: function(tt, value, startLine, startCol, options){
+ var reader = this._reader;
+ options = options || {};
+
+ return {
+ value: value,
+ type: tt,
+ channel: options.channel,
+ hide: options.hide || false,
+ startLine: startLine,
+ startCol: startCol,
+ endLine: reader.getLine(),
+ endCol: reader.getCol()
+ };
+ },
+
+ //-------------------------------------------------------------------------
+ // Methods to create specific tokens
+ //-------------------------------------------------------------------------
+
+ /**
+ * Produces a token for any at-rule. If the at-rule is unknown, then
+ * the token is for a single "@" character.
+ * @param {String} first The first character for the token.
+ * @param {int} startLine The beginning line for the character.
+ * @param {int} startCol The beginning column for the character.
+ * @return {Object} A token object.
+ * @method atRuleToken
+ */
+ atRuleToken: function(first, startLine, startCol){
+ var rule = first,
+ reader = this._reader,
+ tt = Tokens.CHAR,
+ valid = false,
+ ident,
+ c;
+
+ /*
+ * First, mark where we are. There are only four @ rules,
+ * so anything else is really just an invalid token.
+ * Basically, if this doesn't match one of the known @
+ * rules, just return '@' as an unknown token and allow
+ * parsing to continue after that point.
+ */
+ reader.mark();
+
+ //try to find the at-keyword
+ ident = this.readName();
+ rule = first + ident;
+ tt = Tokens.type(rule.toLowerCase());
+
+ //if it's not valid, use the first character only and reset the reader
+ if (tt == Tokens.CHAR || tt == Tokens.UNKNOWN){
+ tt = Tokens.CHAR;
+ rule = first;
+ reader.reset();
+ }
+
+ return this.createToken(tt, rule, startLine, startCol);
+ },
+
+ /**
+ * Produces a character token based on the given character
+ * and location in the stream. If there's a special (non-standard)
+ * token name, this is used; otherwise CHAR is used.
+ * @param {String} c The character for the token.
+ * @param {int} startLine The beginning line for the character.
+ * @param {int} startCol The beginning column for the character.
+ * @return {Object} A token object.
+ * @method charToken
+ */
+ charToken: function(c, startLine, startCol){
+ var tt = Tokens.type(c);
+
+ if (tt == -1){
+ tt = Tokens.CHAR;
+ }
+
+ return this.createToken(tt, c, startLine, startCol);
+ },
+
+ /**
+ * Produces a character token based on the given character
+ * and location in the stream. If there's a special (non-standard)
+ * token name, this is used; otherwise CHAR is used.
+ * @param {String} first The first character for the token.
+ * @param {int} startLine The beginning line for the character.
+ * @param {int} startCol The beginning column for the character.
+ * @return {Object} A token object.
+ * @method commentToken
+ */
+ commentToken: function(first, startLine, startCol){
+ var reader = this._reader,
+ comment = this.readComment(first);
+
+ return this.createToken(Tokens.COMMENT, comment, startLine, startCol);
+ },
+
+ /**
+ * Produces a comparison token based on the given character
+ * and location in the stream. The next character must be
+ * read and is already known to be an equals sign.
+ * @param {String} c The character for the token.
+ * @param {int} startLine The beginning line for the character.
+ * @param {int} startCol The beginning column for the character.
+ * @return {Object} A token object.
+ * @method comparisonToken
+ */
+ comparisonToken: function(c, startLine, startCol){
+ var reader = this._reader,
+ comparison = c + reader.read(),
+ tt = Tokens.type(comparison) || Tokens.CHAR;
+
+ return this.createToken(tt, comparison, startLine, startCol);
+ },
+
+ /**
+ * Produces a hash token based on the specified information. The
+ * first character provided is the pound sign (#) and then this
+ * method reads a name afterward.
+ * @param {String} first The first character (#) in the hash name.
+ * @param {int} startLine The beginning line for the character.
+ * @param {int} startCol The beginning column for the character.
+ * @return {Object} A token object.
+ * @method hashToken
+ */
+ hashToken: function(first, startLine, startCol){
+ var reader = this._reader,
+ name = this.readName(first);
+
+ return this.createToken(Tokens.HASH, name, startLine, startCol);
+ },
+
+ /**
+ * Produces a CDO or CHAR token based on the specified information. The
+ * first character is provided and the rest is read by the function to determine
+ * the correct token to create.
+ * @param {String} first The first character in the token.
+ * @param {int} startLine The beginning line for the character.
+ * @param {int} startCol The beginning column for the character.
+ * @return {Object} A token object.
+ * @method htmlCommentStartToken
+ */
+ htmlCommentStartToken: function(first, startLine, startCol){
+ var reader = this._reader,
+ text = first;
+
+ reader.mark();
+ text += reader.readCount(3);
+
+ if (text == "<!--"){
+ return this.createToken(Tokens.CDO, text, startLine, startCol);
+ } else {
+ reader.reset();
+ return this.charToken(first, startLine, startCol);
+ }
+ },
+
+ /**
+ * Produces a CDC or CHAR token based on the specified information. The
+ * first character is provided and the rest is read by the function to determine
+ * the correct token to create.
+ * @param {String} first The first character in the token.
+ * @param {int} startLine The beginning line for the character.
+ * @param {int} startCol The beginning column for the character.
+ * @return {Object} A token object.
+ * @method htmlCommentEndToken
+ */
+ htmlCommentEndToken: function(first, startLine, startCol){
+ var reader = this._reader,
+ text = first;
+
+ reader.mark();
+ text += reader.readCount(2);
+
+ if (text == "-->"){
+ return this.createToken(Tokens.CDC, text, startLine, startCol);
+ } else {
+ reader.reset();
+ return this.charToken(first, startLine, startCol);
+ }
+ },
+
+ /**
+ * Produces an IDENT or FUNCTION token based on the specified information. The
+ * first character is provided and the rest is read by the function to determine
+ * the correct token to create.
+ * @param {String} first The first character in the identifier.
+ * @param {int} startLine The beginning line for the character.
+ * @param {int} startCol The beginning column for the character.
+ * @return {Object} A token object.
+ * @method identOrFunctionToken
+ */
+ identOrFunctionToken: function(first, startLine, startCol){
+ var reader = this._reader,
+ ident = this.readName(first),
+ tt = Tokens.IDENT;
+
+ //if there's a left paren immediately after, it's a URI or function
+ if (reader.peek() == "("){
+ ident += reader.read();
+ if (ident.toLowerCase() == "url("){
+ tt = Tokens.URI;
+ ident = this.readURI(ident);
+
+ //didn't find a valid URL or there's no closing paren
+ if (ident.toLowerCase() == "url("){
+ tt = Tokens.FUNCTION;
+ }
+ } else {
+ tt = Tokens.FUNCTION;
+ }
+ } else if (reader.peek() == ":"){ //might be an IE function
+
+ //IE-specific functions always being with progid:
+ if (ident.toLowerCase() == "progid"){
+ ident += reader.readTo("(");
+ tt = Tokens.IE_FUNCTION;
+ }
+ }
+
+ return this.createToken(tt, ident, startLine, startCol);
+ },
+
+ /**
+ * Produces an IMPORTANT_SYM or CHAR token based on the specified information. The
+ * first character is provided and the rest is read by the function to determine
+ * the correct token to create.
+ * @param {String} first The first character in the token.
+ * @param {int} startLine The beginning line for the character.
+ * @param {int} startCol The beginning column for the character.
+ * @return {Object} A token object.
+ * @method importantToken
+ */
+ importantToken: function(first, startLine, startCol){
+ var reader = this._reader,
+ important = first,
+ tt = Tokens.CHAR,
+ temp,
+ c;
+
+ reader.mark();
+ c = reader.read();
+
+ while(c){
+
+ //there can be a comment in here
+ if (c == "/"){
+
+ //if the next character isn't a star, then this isn't a valid !important token
+ if (reader.peek() != "*"){
+ break;
+ } else {
+ temp = this.readComment(c);
+ if (temp == ""){ //broken!
+ break;
+ }
+ }
+ } else if (isWhitespace(c)){
+ important += c + this.readWhitespace();
+ } else if (/i/i.test(c)){
+ temp = reader.readCount(8);
+ if (/mportant/i.test(temp)){
+ important += c + temp;
+ tt = Tokens.IMPORTANT_SYM;
+
+ }
+ break; //we're done
+ } else {
+ break;
+ }
+
+ c = reader.read();
+ }
+
+ if (tt == Tokens.CHAR){
+ reader.reset();
+ return this.charToken(first, startLine, startCol);
+ } else {
+ return this.createToken(tt, important, startLine, startCol);
+ }
+
+
+ },
+
+ /**
+ * Produces a NOT or CHAR token based on the specified information. The
+ * first character is provided and the rest is read by the function to determine
+ * the correct token to create.
+ * @param {String} first The first character in the token.
+ * @param {int} startLine The beginning line for the character.
+ * @param {int} startCol The beginning column for the character.
+ * @return {Object} A token object.
+ * @method notToken
+ */
+ notToken: function(first, startLine, startCol){
+ var reader = this._reader,
+ text = first;
+
+ reader.mark();
+ text += reader.readCount(4);
+
+ if (text.toLowerCase() == ":not("){
+ return this.createToken(Tokens.NOT, text, startLine, startCol);
+ } else {
+ reader.reset();
+ return this.charToken(first, startLine, startCol);
+ }
+ },
+
+ /**
+ * Produces a number token based on the given character
+ * and location in the stream. This may return a token of
+ * NUMBER, EMS, EXS, LENGTH, ANGLE, TIME, FREQ, DIMENSION,
+ * or PERCENTAGE.
+ * @param {String} first The first character for the token.
+ * @param {int} startLine The beginning line for the character.
+ * @param {int} startCol The beginning column for the character.
+ * @return {Object} A token object.
+ * @method numberToken
+ */
+ numberToken: function(first, startLine, startCol){
+ var reader = this._reader,
+ value = this.readNumber(first),
+ ident,
+ tt = Tokens.NUMBER,
+ c = reader.peek();
+
+ if (isIdentStart(c)){
+ ident = this.readName(reader.read());
+ value += ident;
+
+ if (/^em$|^ex$|^px$|^gd$|^rem$|^vw$|^vh$|^vm$|^ch$|^cm$|^mm$|^in$|^pt$|^pc$/i.test(ident)){
+ tt = Tokens.LENGTH;
+ } else if (/^deg|^rad$|^grad$/i.test(ident)){
+ tt = Tokens.ANGLE;
+ } else if (/^ms$|^s$/i.test(ident)){
+ tt = Tokens.TIME;
+ } else if (/^hz$|^khz$/i.test(ident)){
+ tt = Tokens.FREQ;
+ } else if (/^dpi$|^dpcm$/i.test(ident)){
+ tt = Tokens.RESOLUTION;
+ } else {
+ tt = Tokens.DIMENSION;
+ }
+
+ } else if (c == "%"){
+ value += reader.read();
+ tt = Tokens.PERCENTAGE;
+ }
+
+ return this.createToken(tt, value, startLine, startCol);
+ },
+
+ /**
+ * Produces a string token based on the given character
+ * and location in the stream. Since strings may be indicated
+ * by single or double quotes, a failure to match starting
+ * and ending quotes results in an INVALID token being generated.
+ * The first character in the string is passed in and then
+ * the rest are read up to and including the final quotation mark.
+ * @param {String} first The first character in the string.
+ * @param {int} startLine The beginning line for the character.
+ * @param {int} startCol The beginning column for the character.
+ * @return {Object} A token object.
+ * @method stringToken
+ */
+ stringToken: function(first, startLine, startCol){
+ var delim = first,
+ string = first,
+ reader = this._reader,
+ prev = first,
+ tt = Tokens.STRING,
+ c = reader.read();
+
+ while(c){
+ string += c;
+
+ //if the delimiter is found with an escapement, we're done.
+ if (c == delim && prev != "\\"){
+ break;
+ }
+
+ //if there's a newline without an escapement, it's an invalid string
+ if (isNewLine(reader.peek()) && c != "\\"){
+ tt = Tokens.INVALID;
+ break;
+ }
+
+ //save previous and get next
+ prev = c;
+ c = reader.read();
+ }
+
+ //if c is null, that means we're out of input and the string was never closed
+ if (c == null){
+ tt = Tokens.INVALID;
+ }
+
+ return this.createToken(tt, string, startLine, startCol);
+ },
+
+ unicodeRangeToken: function(first, startLine, startCol){
+ var reader = this._reader,
+ value = first,
+ temp,
+ tt = Tokens.CHAR;
+
+ //then it should be a unicode range
+ if (reader.peek() == "+"){
+ reader.mark();
+ value += reader.read();
+ value += this.readUnicodeRangePart(true);
+
+ //ensure there's an actual unicode range here
+ if (value.length == 2){
+ reader.reset();
+ } else {
+
+ tt = Tokens.UNICODE_RANGE;
+
+ //if there's a ? in the first part, there can't be a second part
+ if (value.indexOf("?") == -1){
+
+ if (reader.peek() == "-"){
+ reader.mark();
+ temp = reader.read();
+ temp += this.readUnicodeRangePart(false);
+
+ //if there's not another value, back up and just take the first
+ if (temp.length == 1){
+ reader.reset();
+ } else {
+ value += temp;
+ }
+ }
+
+ }
+ }
+ }
+
+ return this.createToken(tt, value, startLine, startCol);
+ },
+
+ /**
+ * Produces a S token based on the specified information. Since whitespace
+ * may have multiple characters, this consumes all whitespace characters
+ * into a single token.
+ * @param {String} first The first character in the token.
+ * @param {int} startLine The beginning line for the character.
+ * @param {int} startCol The beginning column for the character.
+ * @return {Object} A token object.
+ * @method whitespaceToken
+ */
+ whitespaceToken: function(first, startLine, startCol){
+ var reader = this._reader,
+ value = first + this.readWhitespace();
+ return this.createToken(Tokens.S, value, startLine, startCol);
+ },
+
+
+
+
+ //-------------------------------------------------------------------------
+ // Methods to read values from the string stream
+ //-------------------------------------------------------------------------
+
+ readUnicodeRangePart: function(allowQuestionMark){
+ var reader = this._reader,
+ part = "",
+ c = reader.peek();
+
+ //first read hex digits
+ while(isHexDigit(c) && part.length < 6){
+ reader.read();
+ part += c;
+ c = reader.peek();
+ }
+
+ //then read question marks if allowed
+ if (allowQuestionMark){
+ while(c == "?" && part.length < 6){
+ reader.read();
+ part += c;
+ c = reader.peek();
+ }
+ }
+
+ //there can't be any other characters after this point
+
+ return part;
+ },
+
+ readWhitespace: function(){
+ var reader = this._reader,
+ whitespace = "",
+ c = reader.peek();
+
+ while(isWhitespace(c)){
+ reader.read();
+ whitespace += c;
+ c = reader.peek();
+ }
+
+ return whitespace;
+ },
+ readNumber: function(first){
+ var reader = this._reader,
+ number = first,
+ hasDot = (first == "."),
+ c = reader.peek();
+
+
+ while(c){
+ if (isDigit(c)){
+ number += reader.read();
+ } else if (c == "."){
+ if (hasDot){
+ break;
+ } else {
+ hasDot = true;
+ number += reader.read();
+ }
+ } else {
+ break;
+ }
+
+ c = reader.peek();
+ }
+
+ return number;
+ },
+ readString: function(){
+ var reader = this._reader,
+ delim = reader.read(),
+ string = delim,
+ prev = delim,
+ c = reader.peek();
+
+ while(c){
+ c = reader.read();
+ string += c;
+
+ //if the delimiter is found with an escapement, we're done.
+ if (c == delim && prev != "\\"){
+ break;
+ }
+
+ //if there's a newline without an escapement, it's an invalid string
+ if (isNewLine(reader.peek()) && c != "\\"){
+ string = "";
+ break;
+ }
+
+ //save previous and get next
+ prev = c;
+ c = reader.peek();
+ }
+
+ //if c is null, that means we're out of input and the string was never closed
+ if (c == null){
+ string = "";
+ }
+
+ return string;
+ },
+ readURI: function(first){
+ var reader = this._reader,
+ uri = first,
+ inner = "",
+ c = reader.peek();
+
+ reader.mark();
+
+ //skip whitespace before
+ while(c && isWhitespace(c)){
+ reader.read();
+ c = reader.peek();
+ }
+
+ //it's a string
+ if (c == "'" || c == "\""){
+ inner = this.readString();
+ } else {
+ inner = this.readURL();
+ }
+
+ c = reader.peek();
+
+ //skip whitespace after
+ while(c && isWhitespace(c)){
+ reader.read();
+ c = reader.peek();
+ }
+
+ //if there was no inner value or the next character isn't closing paren, it's not a URI
+ if (inner == "" || c != ")"){
+ uri = first;
+ reader.reset();
+ } else {
+ uri += inner + reader.read();
+ }
+
+ return uri;
+ },
+ readURL: function(){
+ var reader = this._reader,
+ url = "",
+ c = reader.peek();
+
+ //TODO: Check for escape and nonascii
+ while (/^[!#$%&\\*-~]$/.test(c)){
+ url += reader.read();
+ c = reader.peek();
+ }
+
+ return url;
+
+ },
+ readName: function(first){
+ var reader = this._reader,
+ ident = first || "",
+ c = reader.peek();
+
+ while(true){
+ if (c == "\\"){
+ ident += this.readEscape(reader.read());
+ c = reader.peek();
+ } else if(c && isNameChar(c)){
+ ident += reader.read();
+ c = reader.peek();
+ } else {
+ break;
+ }
+ }
+
+ return ident;
+ },
+
+ readEscape: function(first){
+ var reader = this._reader,
+ cssEscape = first || "",
+ i = 0,
+ c = reader.peek();
+
+ if (isHexDigit(c)){
+ do {
+ cssEscape += reader.read();
+ c = reader.peek();
+ } while(c && isHexDigit(c) && ++i < 6);
+ }
+
+ if (cssEscape.length == 3 && /\s/.test(c) ||
+ cssEscape.length == 7 || cssEscape.length == 1){
+ reader.read();
+ } else {
+ c = "";
+ }
+
+ return cssEscape + c;
+ },
+
+ readComment: function(first){
+ var reader = this._reader,
+ comment = first || "",
+ c = reader.read();
+
+ if (c == "*"){
+ while(c){
+ comment += c;
+
+ //look for end of comment
+ if (c == "*" && reader.peek() == "/"){
+ comment += reader.read();
+ break;
+ }
+
+ c = reader.read();
+ }
+
+ return comment;
+ } else {
+ return "";
+ }
+
+ }
+});
+
+
+var Tokens = [
+
+ /*
+ * The following token names are defined in CSS3 Grammar: http://www.w3.org/TR/css3-syntax/#lexical
+ */
+
+ //HTML-style comments
+ { name: "CDO"},
+ { name: "CDC"},
+
+ //ignorables
+ { name: "S", whitespace: true/*, channel: "ws"*/},
+ { name: "COMMENT", comment: true, hide: true, channel: "comment" },
+
+ //attribute equality
+ { name: "INCLUDES", text: "~="},
+ { name: "DASHMATCH", text: "|="},
+ { name: "PREFIXMATCH", text: "^="},
+ { name: "SUFFIXMATCH", text: "$="},
+ { name: "SUBSTRINGMATCH", text: "*="},
+
+ //identifier types
+ { name: "STRING"},
+ { name: "IDENT"},
+ { name: "HASH"},
+
+ //at-keywords
+ { name: "IMPORT_SYM", text: "@import"},
+ { name: "PAGE_SYM", text: "@page"},
+ { name: "MEDIA_SYM", text: "@media"},
+ { name: "FONT_FACE_SYM", text: "@font-face"},
+ { name: "CHARSET_SYM", text: "@charset"},
+ { name: "NAMESPACE_SYM", text: "@namespace"},
+ //{ name: "ATKEYWORD"},
+
+ //CSS3 animations
+ { name: "KEYFRAMES_SYM", text: [ "@keyframes", "@-webkit-keyframes", "@-moz-keyframes" ] },
+
+ //important symbol
+ { name: "IMPORTANT_SYM"},
+
+ //measurements
+ { name: "LENGTH"},
+ { name: "ANGLE"},
+ { name: "TIME"},
+ { name: "FREQ"},
+ { name: "DIMENSION"},
+ { name: "PERCENTAGE"},
+ { name: "NUMBER"},
+
+ //functions
+ { name: "URI"},
+ { name: "FUNCTION"},
+
+ //Unicode ranges
+ { name: "UNICODE_RANGE"},
+
+ /*
+ * The following token names are defined in CSS3 Selectors: http://www.w3.org/TR/css3-selectors/#selector-syntax
+ */
+
+ //invalid string
+ { name: "INVALID"},
+
+ //combinators
+ { name: "PLUS", text: "+" },
+ { name: "GREATER", text: ">"},
+ { name: "COMMA", text: ","},
+ { name: "TILDE", text: "~"},
+
+ //modifier
+ { name: "NOT"},
+
+ /*
+ * Defined in CSS3 Paged Media
+ */
+ { name: "TOPLEFTCORNER_SYM", text: "@top-left-corner"},
+ { name: "TOPLEFT_SYM", text: "@top-left"},
+ { name: "TOPCENTER_SYM", text: "@top-center"},
+ { name: "TOPRIGHT_SYM", text: "@top-right"},
+ { name: "TOPRIGHTCORNER_SYM", text: "@top-right-corner"},
+ { name: "BOTTOMLEFTCORNER_SYM", text: "@bottom-left-corner"},
+ { name: "BOTTOMLEFT_SYM", text: "@bottom-left"},
+ { name: "BOTTOMCENTER_SYM", text: "@bottom-center"},
+ { name: "BOTTOMRIGHT_SYM", text: "@bottom-right"},
+ { name: "BOTTOMRIGHTCORNER_SYM", text: "@bottom-right-corner"},
+ { name: "LEFTTOP_SYM", text: "@left-top"},
+ { name: "LEFTMIDDLE_SYM", text: "@left-middle"},
+ { name: "LEFTBOTTOM_SYM", text: "@left-bottom"},
+ { name: "RIGHTTOP_SYM", text: "@right-top"},
+ { name: "RIGHTMIDDLE_SYM", text: "@right-middle"},
+ { name: "RIGHTBOTTOM_SYM", text: "@right-bottom"},
+
+ /*
+ * The following token names are defined in CSS3 Media Queries: http://www.w3.org/TR/css3-mediaqueries/#syntax
+ */
+ /*{ name: "MEDIA_ONLY", state: "media"},
+ { name: "MEDIA_NOT", state: "media"},
+ { name: "MEDIA_AND", state: "media"},*/
+ { name: "RESOLUTION", state: "media"},
+
+ /*
+ * The following token names are not defined in any CSS specification but are used by the lexer.
+ */
+
+ //not a real token, but useful for stupid IE filters
+ { name: "IE_FUNCTION" },
+
+ //part of CSS3 grammar but not the Flex code
+ { name: "CHAR" },
+
+ //TODO: Needed?
+ //Not defined as tokens, but might as well be
+ {
+ name: "PIPE",
+ text: "|"
+ },
+ {
+ name: "SLASH",
+ text: "/"
+ },
+ {
+ name: "MINUS",
+ text: "-"
+ },
+ {
+ name: "STAR",
+ text: "*"
+ },
+
+ {
+ name: "LBRACE",
+ text: "{"
+ },
+ {
+ name: "RBRACE",
+ text: "}"
+ },
+ {
+ name: "LBRACKET",
+ text: "["
+ },
+ {
+ name: "RBRACKET",
+ text: "]"
+ },
+ {
+ name: "EQUALS",
+ text: "="
+ },
+ {
+ name: "COLON",
+ text: ":"
+ },
+ {
+ name: "SEMICOLON",
+ text: ";"
+ },
+
+ {
+ name: "LPAREN",
+ text: "("
+ },
+ {
+ name: "RPAREN",
+ text: ")"
+ },
+ {
+ name: "DOT",
+ text: "."
+ }
+];
+
+(function(){
+
+ var nameMap = [],
+ typeMap = {};
+
+ Tokens.UNKNOWN = -1;
+ Tokens.unshift({name:"EOF"});
+ for (var i=0, len = Tokens.length; i < len; i++){
+ nameMap.push(Tokens[i].name);
+ Tokens[Tokens[i].name] = i;
+ if (Tokens[i].text){
+ if (Tokens[i].text instanceof Array){
+ for (var j=0; j < Tokens[i].text.length; j++){
+ typeMap[Tokens[i].text[j]] = i;
+ }
+ } else {
+ typeMap[Tokens[i].text] = i;
+ }
+ }
+ }
+
+ Tokens.name = function(tt){
+ return nameMap[tt];
+ };
+
+ Tokens.type = function(c){
+ return typeMap[c] || -1;
+ };
+
+})();
+
+
+
+
+
+parserlib.css = {
+Colors :Colors,
+Combinator :Combinator,
+Parser :Parser,
+PropertyName :PropertyName,
+PropertyValue :PropertyValue,
+PropertyValuePart :PropertyValuePart,
+MediaFeature :MediaFeature,
+MediaQuery :MediaQuery,
+Selector :Selector,
+SelectorPart :SelectorPart,
+SelectorSubPart :SelectorSubPart,
+TokenStream :TokenStream,
+Tokens :Tokens
+};
+})();
+
+/**
+ * Main CSSLint object.
+ * @class CSSLint
+ * @static
+ * @extends parserlib.util.EventTarget
+ */
+var CSSLint = (function(){
+
+ var rules = [],
+ formatters = [],
+ api = new parserlib.util.EventTarget();
+
+ api.version = "@VERSION@";
+
+ //-------------------------------------------------------------------------
+ // Rule Management
+ //-------------------------------------------------------------------------
+
+ /**
+ * Adds a new rule to the engine.
+ * @param {Object} rule The rule to add.
+ * @method addRule
+ */
+ api.addRule = function(rule){
+ rules.push(rule);
+ rules[rule.id] = rule;
+ };
+
+ /**
+ * Clears all rule from the engine.
+ * @method clearRules
+ */
+ api.clearRules = function(){
+ rules = [];
+ };
+
+ //-------------------------------------------------------------------------
+ // Formatters
+ //-------------------------------------------------------------------------
+
+ /**
+ * Adds a new formatter to the engine.
+ * @param {Object} formatter The formatter to add.
+ * @method addFormatter
+ */
+ api.addFormatter = function(formatter) {
+ // formatters.push(formatter);
+ formatters[formatter.id] = formatter;
+ };
+
+ /**
+ * Retrieves a formatter for use.
+ * @param {String} formatId The name of the format to retrieve.
+ * @return {Object} The formatter or undefined.
+ * @method getFormatter
+ */
+ api.getFormatter = function(formatId){
+ return formatters[formatId];
+ };
+
+ /**
+ * Formats the results in a particular format for a single file.
+ * @param {Object} result The results returned from CSSLint.verify().
+ * @param {String} filename The filename for which the results apply.
+ * @param {String} formatId The name of the formatter to use.
+ * @return {String} A formatted string for the results.
+ * @method format
+ */
+ api.format = function(results, filename, formatId) {
+ var formatter = this.getFormatter(formatId),
+ result = null;
+
+ if (formatter){
+ result = formatter.startFormat();
+ result += formatter.formatResults(results, filename);
+ result += formatter.endFormat();
+ }
+
+ return result;
+ }
+
+ /**
+ * Indicates if the given format is supported.
+ * @param {String} formatId The ID of the format to check.
+ * @return {Boolean} True if the format exists, false if not.
+ * @method hasFormat
+ */
+ api.hasFormat = function(formatId){
+ return formatters.hasOwnProperty(formatId);
+ };
+
+ //-------------------------------------------------------------------------
+ // Verification
+ //-------------------------------------------------------------------------
+
+ /**
+ * Starts the verification process for the given CSS text.
+ * @param {String} text The CSS text to verify.
+ * @param {Object} ruleset (Optional) List of rules to apply. If null, then
+ * all rules are used.
+ * @return {Object} Results of the verification.
+ * @method verify
+ */
+ api.verify = function(text, ruleset){
+
+ var i = 0,
+ len = rules.length,
+ reporter,
+ lines,
+ parser = new parserlib.css.Parser({ starHack: true, ieFilters: true,
+ underscoreHack: true, strict: false });
+
+ lines = text.split(/\n\r?/g);
+ reporter = new Reporter(lines);
+
+ if (!ruleset){
+ while (i < len){
+ rules[i++].init(parser, reporter);
+ }
+ } else {
+ ruleset.errors = 1; //always report parsing errors
+ for (i in ruleset){
+ if(ruleset.hasOwnProperty(i)){
+ if (rules[i]){
+ rules[i].init(parser, reporter);
+ }
+ }
+ }
+ }
+
+ //capture most horrible error type
+ try {
+ parser.parse(text);
+ } catch (ex) {
+ reporter.error("Fatal error, cannot continue: " + ex.message, ex.line, ex.col);
+ }
+
+ return {
+ messages : reporter.messages,
+ stats : reporter.stats
+ };
+ };
+
+ //-------------------------------------------------------------------------
+ // Publish the API
+ //-------------------------------------------------------------------------
+
+ return api;
+
+})();
+/**
+ * An instance of Report is used to report results of the
+ * verification back to the main API.
+ * @class Reporter
+ * @constructor
+ * @param {String[]} lines The text lines of the source.
+ */
+function Reporter(lines){
+
+ /**
+ * List of messages being reported.
+ * @property messages
+ * @type String[]
+ */
+ this.messages = [];
+
+ /**
+ * List of statistics being reported.
+ * @property stats
+ * @type String[]
+ */
+ this.stats = [];
+
+ /**
+ * Lines of code being reported on. Used to provide contextual information
+ * for messages.
+ * @property lines
+ * @type String[]
+ */
+ this.lines = lines;
+}
+
+Reporter.prototype = {
+
+ //restore constructor
+ constructor: Reporter,
+
+ /**
+ * Report an error.
+ * @param {String} message The message to store.
+ * @param {int} line The line number.
+ * @param {int} col The column number.
+ * @param {Object} rule The rule this message relates to.
+ * @method error
+ */
+ error: function(message, line, col, rule){
+ this.messages.push({
+ type : "error",
+ line : line,
+ col : col,
+ message : message,
+ evidence: this.lines[line-1],
+ rule : rule
+ });
+ },
+
+ /**
+ * Report an warning.
+ * @param {String} message The message to store.
+ * @param {int} line The line number.
+ * @param {int} col The column number.
+ * @param {Object} rule The rule this message relates to.
+ * @method warn
+ */
+ warn: function(message, line, col, rule){
+ this.messages.push({
+ type : "warning",
+ line : line,
+ col : col,
+ message : message,
+ evidence: this.lines[line-1],
+ rule : rule
+ });
+ },
+
+ /**
+ * Report some informational text.
+ * @param {String} message The message to store.
+ * @param {int} line The line number.
+ * @param {int} col The column number.
+ * @param {Object} rule The rule this message relates to.
+ * @method info
+ */
+ info: function(message, line, col, rule){
+ this.messages.push({
+ type : "info",
+ line : line,
+ col : col,
+ message : message,
+ evidence: this.lines[line-1],
+ rule : rule
+ });
+ },
+
+ /**
+ * Report some rollup error information.
+ * @param {String} message The message to store.
+ * @param {Object} rule The rule this message relates to.
+ * @method rollupError
+ */
+ rollupError: function(message, rule){
+ this.messages.push({
+ type : "error",
+ rollup : true,
+ message : message,
+ rule : rule
+ });
+ },
+
+ /**
+ * Report some rollup warning information.
+ * @param {String} message The message to store.
+ * @param {Object} rule The rule this message relates to.
+ * @method rollupWarn
+ */
+ rollupWarn: function(message, rule){
+ this.messages.push({
+ type : "warning",
+ rollup : true,
+ message : message,
+ rule : rule
+ });
+ },
+
+ /**
+ * Report a statistic.
+ * @param {String} name The name of the stat to store.
+ * @param {Variant} value The value of the stat.
+ * @method stat
+ */
+ stat: function(name, value){
+ this.stats[name] = value;
+ }
+};
+/*
+ * Utility functions that make life easier.
+ */
+
+/*
+ * Adds all properties from supplier onto receiver,
+ * overwriting if the same name already exists on
+ * reciever.
+ * @param {Object} The object to receive the properties.
+ * @param {Object} The object to provide the properties.
+ * @return {Object} The receiver
+ */
+function mix(reciever, supplier){
+ var prop;
+
+ for (prop in supplier){
+ if (supplier.hasOwnProperty(prop)){
+ receiver[prop] = supplier[prop];
+ }
+ }
+
+ return prop;
+}
+
+/*
+ * Polyfill for array indexOf() method.
+ * @param {Array} values The array to search.
+ * @param {Variant} value The value to search for.
+ * @return {int} The index of the value if found, -1 if not.
+ */
+function indexOf(values, value){
+ if (values.indexOf){
+ return values.indexOf(value);
+ } else {
+ for (var i=0, len=values.length; i < len; i++){
+ if (values[i] === value){
+ return i;
+ }
+ }
+ return -1;
+ }
+}
+/*
+ * Rule: Don't use adjoining classes (.foo.bar).
+ */
+CSSLint.addRule({
+
+ //rule information
+ id: "adjoining-classes",
+ name: "Adjoining Classes",
+ desc: "Don't use adjoining classes.",
+ browsers: "IE6",
+
+ //initialization
+ init: function(parser, reporter){
+ var rule = this;
+ parser.addListener("startrule", function(event){
+ var selectors = event.selectors,
+ selector,
+ part,
+ modifier,
+ classCount,
+ i, j, k;
+
+ for (i=0; i < selectors.length; i++){
+ selector = selectors[i];
+ for (j=0; j < selector.parts.length; j++){
+ part = selector.parts[j];
+ if (part instanceof parserlib.css.SelectorPart){
+ classCount = 0;
+ for (k=0; k < part.modifiers.length; k++){
+ modifier = part.modifiers[k];
+ if (modifier.type == "class"){
+ classCount++;
+ }
+ if (classCount > 1){
+ reporter.warn("Don't use adjoining classes.", part.line, part.col, rule);
+ }
+ }
+ }
+ }
+ }
+ });
+ }
+
+});
+/*
+ * Rule: Don't use width or height when using padding or border.
+ */
+CSSLint.addRule({
+
+ //rule information
+ id: "box-model",
+ name: "Box Model",
+ desc: "Don't use width or height when using padding or border.",
+ browsers: "All",
+
+ //initialization
+ init: function(parser, reporter){
+ var rule = this,
+ widthProperties = {
+ border: 1,
+ "border-left": 1,
+ "border-right": 1,
+ padding: 1,
+ "padding-left": 1,
+ "padding-right": 1
+ },
+ heightProperties = {
+ border: 1,
+ "border-bottom": 1,
+ "border-top": 1,
+ padding: 1,
+ "padding-bottom": 1,
+ "padding-top": 1
+ },
+ properties;
+
+ parser.addListener("startrule", function(){
+ properties = {
+ };
+ });
+
+ parser.addListener("property", function(event){
+ var name = event.property.text.toLowerCase();
+
+ if (heightProperties[name] || widthProperties[name]){
+ if (!/^0\S*$/.test(event.value) && !(name == "border" && event.value == "none")){
+ properties[name] = { line: event.property.line, col: event.property.col, value: event.value };
+ }
+ } else {
+ if (name == "width" || name == "height"){
+ properties[name] = 1;
+ }
+ }
+
+ });
+
+ parser.addListener("endrule", function(){
+ var prop;
+ if (properties["height"]){
+ for (prop in heightProperties){
+ if (heightProperties.hasOwnProperty(prop) && properties[prop]){
+
+ //special case for padding
+ if (prop == "padding" && properties[prop].value.parts.length == 2 && properties[prop].value.parts[0].value == 0){
+ //noop
+ } else {
+ reporter.warn("Broken box model: using height with " + prop + ".", properties[prop].line, properties[prop].col, rule);
+ }
+ }
+ }
+ }
+
+ if (properties["width"]){
+ for (prop in widthProperties){
+ if (widthProperties.hasOwnProperty(prop) && properties[prop]){
+
+ if (prop == "padding" && properties[prop].value.parts.length == 2 && properties[prop].value.parts[1].value == 0){
+ //noop
+ } else {
+ reporter.warn("Broken box model: using width with " + prop + ".", properties[prop].line, properties[prop].col, rule);
+ }
+ }
+ }
+ }
+
+ });
+ }
+
+});
+/*
+ * Rule: Include all compatible vendor prefixes to reach a wider
+ * range of users.
+ */
+/*global CSSLint*/
+CSSLint.addRule({
+
+ //rule information
+ id: "compatible-vendor-prefixes",
+ name: "Compatible Vendor Prefixes",
+ desc: "Include all compatible vendor prefixes to reach a wider range of users.",
+ browsers: "All",
+
+ //initialization
+ init: function (parser, reporter) {
+ var rule = this,
+ compatiblePrefixes,
+ properties,
+ prop,
+ variations,
+ prefixed,
+ i,
+ len,
+ arrayPush = Array.prototype.push,
+ applyTo = [];
+
+ // See http://peter.sh/experiments/vendor-prefixed-css-property-overview/ for details
+ compatiblePrefixes = {
+ "animation" : "webkit moz",
+ "animation-delay" : "webkit moz",
+ "animation-direction" : "webkit moz",
+ "animation-duration" : "webkit moz",
+ "animation-fill-mode" : "webkit moz",
+ "animation-iteration-count" : "webkit moz",
+ "animation-name" : "webkit moz",
+ "animation-play-state" : "webkit moz",
+ "animation-timing-function" : "webkit moz",
+ "appearance" : "webkit moz",
+ "border-end" : "webkit moz",
+ "border-end-color" : "webkit moz",
+ "border-end-style" : "webkit moz",
+ "border-end-width" : "webkit moz",
+ "border-image" : "webkit moz o",
+ "border-radius" : "webkit moz",
+ "border-start" : "webkit moz",
+ "border-start-color" : "webkit moz",
+ "border-start-style" : "webkit moz",
+ "border-start-width" : "webkit moz",
+ "box-align" : "webkit moz ms",
+ "box-direction" : "webkit moz ms",
+ "box-flex" : "webkit moz ms",
+ "box-lines" : "webkit ms",
+ "box-ordinal-group" : "webkit moz ms",
+ "box-orient" : "webkit moz ms",
+ "box-pack" : "webkit moz ms",
+ "box-sizing" : "webkit moz",
+ "box-shadow" : "webkit moz",
+ "column-count" : "webkit moz",
+ "column-gap" : "webkit moz",
+ "column-rule" : "webkit moz",
+ "column-rule-color" : "webkit moz",
+ "column-rule-style" : "webkit moz",
+ "column-rule-width" : "webkit moz",
+ "column-width" : "webkit moz",
+ "hyphens" : "epub moz",
+ "line-break" : "webkit ms",
+ "margin-end" : "webkit moz",
+ "margin-start" : "webkit moz",
+ "marquee-speed" : "webkit wap",
+ "marquee-style" : "webkit wap",
+ "padding-end" : "webkit moz",
+ "padding-start" : "webkit moz",
+ "tab-size" : "moz o",
+ "text-size-adjust" : "webkit ms",
+ "transform" : "webkit moz ms o",
+ "transform-origin" : "webkit moz ms o",
+ "transition" : "webkit moz o",
+ "transition-delay" : "webkit moz o",
+ "transition-duration" : "webkit moz o",
+ "transition-property" : "webkit moz o",
+ "transition-timing-function" : "webkit moz o",
+ "user-modify" : "webkit moz",
+ "user-select" : "webkit moz",
+ "word-break" : "epub ms",
+ "writing-mode" : "epub ms"
+ };
+
+ for (prop in compatiblePrefixes) {
+ if (compatiblePrefixes.hasOwnProperty(prop)) {
+ variations = [];
+ prefixed = compatiblePrefixes[prop].split(' ');
+ for (i = 0, len = prefixed.length; i < len; i++) {
+ variations.push('-' + prefixed[i] + '-' + prop);
+ }
+ compatiblePrefixes[prop] = variations;
+ arrayPush.apply(applyTo, variations);
+ }
+ }
+ parser.addListener("startrule", function () {
+ properties = [];
+ });
+
+ parser.addListener("property", function (event) {
+ var name = event.property.text;
+ if (applyTo.indexOf(name) > -1) {
+ properties.push(name);
+ }
+ });
+
+ parser.addListener("endrule", function (event) {
+ if (!properties.length) {
+ return;
+ }
+
+ var propertyGroups = {},
+ i,
+ len,
+ name,
+ prop,
+ variations,
+ value,
+ full,
+ actual,
+ item,
+ propertiesSpecified;
+
+ for (i = 0, len = properties.length; i < len; i++) {
+ name = properties[i];
+
+ for (prop in compatiblePrefixes) {
+ if (compatiblePrefixes.hasOwnProperty(prop)) {
+ variations = compatiblePrefixes[prop];
+ if (variations.indexOf(name) > -1) {
+ if (propertyGroups[prop] === undefined) {
+ propertyGroups[prop] = {
+ full : variations.slice(0),
+ actual : []
+ };
+ }
+ if (propertyGroups[prop].actual.indexOf(name) === -1) {
+ propertyGroups[prop].actual.push(name);
+ }
+ }
+ }
+ }
+ }
+
+ for (prop in propertyGroups) {
+ if (propertyGroups.hasOwnProperty(prop)) {
+ value = propertyGroups[prop];
+ full = value.full;
+ actual = value.actual;
+
+ if (full.length > actual.length) {
+ for (i = 0, len = full.length; i < len; i++) {
+ item = full[i];
+ if (actual.indexOf(item) === -1) {
+ propertiesSpecified = (actual.length === 1) ? actual[0] : (actual.length == 2) ? actual.join(" and ") : actual.join(", ");
+ reporter.warn("The property " + item + " is compatible with " + propertiesSpecified + " and should be included as well.", event.selectors[0].line, event.selectors[0].col, rule);
+ }
+ }
+
+ }
+ }
+ }
+ });
+ }
+});
+/*
+ * Rule: Certain properties don't play well with certain display values.
+ * - float should not be used with inline-block
+ * - height, width, margin-top, margin-bottom, float should not be used with inline
+ * - vertical-align should not be used with block
+ * - margin, float should not be used with table-*
+ */
+CSSLint.addRule({
+
+ //rule information
+ id: "display-property-grouping",
+ name: "Display Property Grouping",
+ desc: "Certain properties shouldn't be used with certain display property values.",
+ browsers: "All",
+
+ //initialization
+ init: function(parser, reporter){
+ var rule = this;
+
+ var propertiesToCheck = {
+ display: 1,
+ "float": "none",
+ height: 1,
+ width: 1,
+ margin: 1,
+ "margin-left": 1,
+ "margin-right": 1,
+ "margin-bottom": 1,
+ "margin-top": 1,
+ padding: 1,
+ "padding-left": 1,
+ "padding-right": 1,
+ "padding-bottom": 1,
+ "padding-top": 1,
+ "vertical-align": 1
+ },
+ properties;
+
+ parser.addListener("startrule", function(){
+ properties = {};
+ });
+
+ parser.addListener("property", function(event){
+ var name = event.property.text.toLowerCase();
+
+ if (propertiesToCheck[name]){
+ properties[name] = { value: event.value.text, line: event.property.line, col: event.property.col };
+ }
+ });
+
+ parser.addListener("endrule", function(){
+
+ var display = properties.display ? properties.display.value : null;
+ if (display){
+ switch(display){
+
+ case "inline":
+ //height, width, margin-top, margin-bottom, float should not be used with inline
+ reportProperty("height", display);
+ reportProperty("width", display);
+ reportProperty("margin", display);
+ reportProperty("margin-top", display);
+ reportProperty("margin-bottom", display);
+ reportProperty("float", display, "display:inline has no effect on floated elements (but may be used to fix the IE6 double-margin bug).");
+ break;
+
+ case "block":
+ //vertical-align should not be used with block
+ reportProperty("vertical-align", display);
+ break;
+
+ case "inline-block":
+ //float should not be used with inline-block
+ reportProperty("float", display);
+ break;
+
+ default:
+ //margin, float should not be used with table
+ if (display.indexOf("table-") == 0){
+ reportProperty("margin", display);
+ reportProperty("margin-left", display);
+ reportProperty("margin-right", display);
+ reportProperty("margin-top", display);
+ reportProperty("margin-bottom", display);
+ reportProperty("float", display);
+ }
+
+ //otherwise do nothing
+ }
+ }
+
+ });
+
+
+ function reportProperty(name, display, msg){
+ if (properties[name]){
+ if (!(typeof propertiesToCheck[name] == "string") || properties[name].value.toLowerCase() != propertiesToCheck[name]){
+ reporter.warn(msg || name + " can't be used with display: " + display + ".", properties[name].line, properties[name].col, rule);
+ }
+ }
+ }
+ }
+
+});
+/*
+ * Rule: Duplicate properties must appear one after the other. If an already-defined
+ * property appears somewhere else in the rule, then it's likely an error.
+ */
+CSSLint.addRule({
+
+ //rule information
+ id: "duplicate-properties",
+ name: "Duplicate Properties",
+ desc: "Duplicate properties must appear one after the other.",
+ browsers: "All",
+
+ //initialization
+ init: function(parser, reporter){
+ var rule = this,
+ properties,
+ lastProperty;
+
+ function startRule(event){
+ properties = {};
+ }
+
+ parser.addListener("startrule", startRule);
+ parser.addListener("startfontface", startRule);
+ parser.addListener("startpage", startRule);
+
+ parser.addListener("property", function(event){
+ var property = event.property,
+ name = property.text.toLowerCase();
+
+ if (properties[name] && (lastProperty != name || properties[name] == event.value.text)){
+ reporter.warn("Duplicate property '" + event.property + "' found.", event.line, event.col, rule);
+ }
+
+ properties[name] = event.value.text;
+ lastProperty = name;
+
+ });
+
+
+ }
+
+});
+/*
+ * Rule: Style rules without any properties defined should be removed.
+ */
+CSSLint.addRule({
+
+ //rule information
+ id: "empty-rules",
+ name: "Empty Rules",
+ desc: "Rules without any properties specified should be removed.",
+ browsers: "All",
+
+ //initialization
+ init: function(parser, reporter){
+ var rule = this,
+ count = 0;
+
+ parser.addListener("startrule", function(){
+ count=0;
+ });
+
+ parser.addListener("property", function(){
+ count++;
+ });
+
+ parser.addListener("endrule", function(event){
+ var selectors = event.selectors;
+ if (count == 0){
+ reporter.warn("Rule is empty.", selectors[0].line, selectors[0].col, rule);
+ }
+ });
+ }
+
+});
+/*
+ * Rule: There should be no syntax errors. (Duh.)
+ */
+CSSLint.addRule({
+
+ //rule information
+ id: "errors",
+ name: "Parsing Errors",
+ desc: "This rule looks for recoverable syntax errors.",
+ browsers: "All",
+
+ //initialization
+ init: function(parser, reporter){
+ var rule = this;
+
+ parser.addListener("error", function(event){
+ reporter.error(event.message, event.line, event.col, rule);
+ });
+
+ }
+
+});
+/*
+ * Rule: You shouldn't use more than 10 floats. If you do, there's probably
+ * room for some abstraction.
+ */
+CSSLint.addRule({
+
+ //rule information
+ id: "floats",
+ name: "Floats",
+ desc: "This rule tests if the float property is used too many times",
+ browsers: "All",
+
+ //initialization
+ init: function(parser, reporter){
+ var rule = this;
+ var count = 0;
+
+ //count how many times "float" is used
+ parser.addListener("property", function(event){
+ if (event.property.text.toLowerCase() == "float" &&
+ event.value.text.toLowerCase() != "none"){
+ count++;
+ }
+ });
+
+ //report the results
+ parser.addListener("endstylesheet", function(){
+ reporter.stat("floats", count);
+ if (count >= 10){
+ reporter.rollupWarn("Too many floats (" + count + "), you're probably using them for layout. Consider using a grid system instead.", rule);
+ }
+ });
+ }
+
+});
+/*
+ * Rule: Avoid too many @font-face declarations in the same stylesheet.
+ */
+CSSLint.addRule({
+
+ //rule information
+ id: "font-faces",
+ name: "Font Faces",
+ desc: "Too many different web fonts in the same stylesheet.",
+ browsers: "All",
+
+ //initialization
+ init: function(parser, reporter){
+ var rule = this,
+ count = 0;
+
+
+ parser.addListener("startfontface", function(){
+ count++;
+ });
+
+ parser.addListener("endstylesheet", function(){
+ if (count > 5){
+ reporter.rollupWarn("Too many @font-face declarations (" + count + ").", rule);
+ }
+ });
+ }
+
+});
+/*
+ * Rule: You shouldn't need more than 9 font-size declarations.
+ */
+
+CSSLint.addRule({
+
+ //rule information
+ id: "font-sizes",
+ name: "Font Sizes",
+ desc: "Checks the number of font-size declarations.",
+ browsers: "All",
+
+ //initialization
+ init: function(parser, reporter){
+ var rule = this,
+ count = 0;
+
+ //check for use of "font-size"
+ parser.addListener("property", function(event){
+ if (event.property == "font-size"){
+ count++;
+ }
+ });
+
+ //report the results
+ parser.addListener("endstylesheet", function(){
+ reporter.stat("font-sizes", count);
+ if (count >= 10){
+ reporter.rollupWarn("Too many font-size declarations (" + count + "), abstraction needed.", rule);
+ }
+ });
+ }
+
+});
+/*
+ * Rule: When using a vendor-prefixed gradient, make sure to use them all.
+ */
+CSSLint.addRule({
+
+ //rule information
+ id: "gradients",
+ name: "Gradients",
+ desc: "When using a vendor-prefixed gradient, make sure to use them all.",
+ browsers: "All",
+
+ //initialization
+ init: function(parser, reporter){
+ var rule = this,
+ gradients;
+
+ parser.addListener("startrule", function(){
+ gradients = {
+ moz: 0,
+ webkit: 0,
+ ms: 0,
+ o: 0
+ };
+ });
+
+ parser.addListener("property", function(event){
+
+ if (/\-(moz|ms|o|webkit)(?:\-(?:linear|radial))\-gradient/.test(event.value)){
+ gradients[RegExp.$1] = 1;
+ }
+
+ });
+
+ parser.addListener("endrule", function(event){
+ var missing = [];
+
+ if (!gradients.moz){
+ missing.push("Firefox 3.6+");
+ }
+
+ if (!gradients.webkit){
+ missing.push("Webkit (Safari, Chrome)");
+ }
+
+ if (!gradients.ms){
+ missing.push("Internet Explorer 10+");
+ }
+
+ if (!gradients.o){
+ missing.push("Opera 11.1+");
+ }
+
+ if (missing.length && missing.length < 4){
+ reporter.warn("Missing vendor-prefixed CSS gradients for " + missing.join(", ") + ".", event.selectors[0].line, event.selectors[0].col, rule);
+ }
+
+ });
+
+ }
+
+});
+/*
+ * Rule: Don't use IDs for selectors.
+ */
+CSSLint.addRule({
+
+ //rule information
+ id: "ids",
+ name: "IDs",
+ desc: "Selectors should not contain IDs.",
+ browsers: "All",
+
+ //initialization
+ init: function(parser, reporter){
+ var rule = this;
+ parser.addListener("startrule", function(event){
+ var selectors = event.selectors,
+ selector,
+ part,
+ modifier,
+ idCount,
+ i, j, k;
+
+ for (i=0; i < selectors.length; i++){
+ selector = selectors[i];
+ idCount = 0;
+
+ for (j=0; j < selector.parts.length; j++){
+ part = selector.parts[j];
+ if (part instanceof parserlib.css.SelectorPart){
+ for (k=0; k < part.modifiers.length; k++){
+ modifier = part.modifiers[k];
+ if (modifier.type == "id"){
+ idCount++;
+ }
+ }
+ }
+ }
+
+ if (idCount == 1){
+ reporter.warn("Don't use IDs in selectors.", selector.line, selector.col, rule);
+ } else if (idCount > 1){
+ reporter.warn(idCount + " IDs in the selector, really?", selector.line, selector.col, rule);
+ }
+ }
+
+ });
+ }
+
+});
+/*
+ * Rule: Don't use @import, use <link> instead.
+ */
+CSSLint.addRule({
+
+ //rule information
+ id: "import",
+ name: "@import",
+ desc: "Don't use @import, use <link> instead.",
+ browsers: "All",
+
+ //initialization
+ init: function(parser, reporter){
+ var rule = this;
+
+ parser.addListener("import", function(event){
+ reporter.warn("@import prevents parallel downloads, use <link> instead.", event.line, event.col, rule);
+ });
+
+ }
+
+});
+/*
+ * Rule: Make sure !important is not overused, this could lead to specificity
+ * war. Display a warning on !important declarations, an error if it's
+ * used more at least 10 times.
+ */
+CSSLint.addRule({
+
+ //rule information
+ id: "important",
+ name: "Important",
+ desc: "Be careful when using !important declaration",
+ browsers: "All",
+
+ //initialization
+ init: function(parser, reporter){
+ var rule = this,
+ count = 0;
+
+ //warn that important is used and increment the declaration counter
+ parser.addListener("property", function(event){
+ if (event.important === true){
+ count++;
+ reporter.warn("Use of !important", event.line, event.col, rule);
+ }
+ });
+
+ //if there are more than 10, show an error
+ parser.addListener("endstylesheet", function(){
+ reporter.stat("important", count);
+ if (count >= 10){
+ reporter.rollupWarn("Too many !important declarations (" + count + "), try to use less than 10 to avoid specifity issues.", rule);
+ }
+ });
+ }
+
+});
+/*
+ * Rule: Properties should be known (listed in CSS3 specification) or
+ * be a vendor-prefixed property.
+ */
+CSSLint.addRule({
+
+ //rule information
+ id: "known-properties",
+ name: "Known Properties",
+ desc: "Properties should be known (listed in CSS specification) or be a vendor-prefixed property.",
+ browsers: "All",
+
+ //initialization
+ init: function(parser, reporter){
+ var rule = this,
+ properties = {
+
+ "alignment-adjust": 1,
+ "alignment-baseline": 1,
+ "animation": 1,
+ "animation-delay": 1,
+ "animation-direction": 1,
+ "animation-duration": 1,
+ "animation-iteration-count": 1,
+ "animation-name": 1,
+ "animation-play-state": 1,
+ "animation-timing-function": 1,
+ "appearance": 1,
+ "azimuth": 1,
+ "backface-visibility": 1,
+ "background": 1,
+ "background-attachment": 1,
+ "background-break": 1,
+ "background-clip": 1,
+ "background-color": 1,
+ "background-image": 1,
+ "background-origin": 1,
+ "background-position": 1,
+ "background-repeat": 1,
+ "background-size": 1,
+ "baseline-shift": 1,
+ "binding": 1,
+ "bleed": 1,
+ "bookmark-label": 1,
+ "bookmark-level": 1,
+ "bookmark-state": 1,
+ "bookmark-target": 1,
+ "border": 1,
+ "border-bottom": 1,
+ "border-bottom-color": 1,
+ "border-bottom-left-radius": 1,
+ "border-bottom-right-radius": 1,
+ "border-bottom-style": 1,
+ "border-bottom-width": 1,
+ "border-collapse": 1,
+ "border-color": 1,
+ "border-image": 1,
+ "border-image-outset": 1,
+ "border-image-repeat": 1,
+ "border-image-slice": 1,
+ "border-image-source": 1,
+ "border-image-width": 1,
+ "border-left": 1,
+ "border-left-color": 1,
+ "border-left-style": 1,
+ "border-left-width": 1,
+ "border-radius": 1,
+ "border-right": 1,
+ "border-right-color": 1,
+ "border-right-style": 1,
+ "border-right-width": 1,
+ "border-spacing": 1,
+ "border-style": 1,
+ "border-top": 1,
+ "border-top-color": 1,
+ "border-top-left-radius": 1,
+ "border-top-right-radius": 1,
+ "border-top-style": 1,
+ "border-top-width": 1,
+ "border-width": 1,
+ "bottom": 1,
+ "box-align": 1,
+ "box-decoration-break": 1,
+ "box-direction": 1,
+ "box-flex": 1,
+ "box-flex-group": 1,
+ "box-lines": 1,
+ "box-ordinal-group": 1,
+ "box-orient": 1,
+ "box-pack": 1,
+ "box-shadow": 1,
+ "box-sizing": 1,
+ "break-after": 1,
+ "break-before": 1,
+ "break-inside": 1,
+ "caption-side": 1,
+ "clear": 1,
+ "clip": 1,
+ "color": 1,
+ "color-profile": 1,
+ "column-count": 1,
+ "column-fill": 1,
+ "column-gap": 1,
+ "column-rule": 1,
+ "column-rule-color": 1,
+ "column-rule-style": 1,
+ "column-rule-width": 1,
+ "column-span": 1,
+ "column-width": 1,
+ "columns": 1,
+ "content": 1,
+ "counter-increment": 1,
+ "counter-reset": 1,
+ "crop": 1,
+ "cue": 1,
+ "cue-after": 1,
+ "cue-before": 1,
+ "cursor": 1,
+ "direction": 1,
+ "display": 1,
+ "dominant-baseline": 1,
+ "drop-initial-after-adjust": 1,
+ "drop-initial-after-align": 1,
+ "drop-initial-before-adjust": 1,
+ "drop-initial-before-align": 1,
+ "drop-initial-size": 1,
+ "drop-initial-value": 1,
+ "elevation": 1,
+ "empty-cells": 1,
+ "fit": 1,
+ "fit-position": 1,
+ "float": 1,
+ "float-offset": 1,
+ "font": 1,
+ "font-family": 1,
+ "font-size": 1,
+ "font-size-adjust": 1,
+ "font-stretch": 1,
+ "font-style": 1,
+ "font-variant": 1,
+ "font-weight": 1,
+ "grid-columns": 1,
+ "grid-rows": 1,
+ "hanging-punctuation": 1,
+ "height": 1,
+ "hyphenate-after": 1,
+ "hyphenate-before": 1,
+ "hyphenate-character": 1,
+ "hyphenate-lines": 1,
+ "hyphenate-resource": 1,
+ "hyphens": 1,
+ "icon": 1,
+ "image-orientation": 1,
+ "image-rendering": 1,
+ "image-resolution": 1,
+ "inline-box-align": 1,
+ "left": 1,
+ "letter-spacing": 1,
+ "line-height": 1,
+ "line-stacking": 1,
+ "line-stacking-ruby": 1,
+ "line-stacking-shift": 1,
+ "line-stacking-strategy": 1,
+ "list-style": 1,
+ "list-style-image": 1,
+ "list-style-position": 1,
+ "list-style-type": 1,
+ "margin": 1,
+ "margin-bottom": 1,
+ "margin-left": 1,
+ "margin-right": 1,
+ "margin-top": 1,
+ "mark": 1,
+ "mark-after": 1,
+ "mark-before": 1,
+ "marks": 1,
+ "marquee-direction": 1,
+ "marquee-play-count": 1,
+ "marquee-speed": 1,
+ "marquee-style": 1,
+ "max-height": 1,
+ "max-width": 1,
+ "min-height": 1,
+ "min-width": 1,
+ "move-to": 1,
+ "nav-down": 1,
+ "nav-index": 1,
+ "nav-left": 1,
+ "nav-right": 1,
+ "nav-up": 1,
+ "opacity": 1,
+ "orphans": 1,
+ "outline": 1,
+ "outline-color": 1,
+ "outline-offset": 1,
+ "outline-style": 1,
+ "outline-width": 1,
+ "overflow": 1,
+ "overflow-style": 1,
+ "overflow-x": 1,
+ "overflow-y": 1,
+ "padding": 1,
+ "padding-bottom": 1,
+ "padding-left": 1,
+ "padding-right": 1,
+ "padding-top": 1,
+ "page": 1,
+ "page-break-after": 1,
+ "page-break-before": 1,
+ "page-break-inside": 1,
+ "page-policy": 1,
+ "pause": 1,
+ "pause-after": 1,
+ "pause-before": 1,
+ "perspective": 1,
+ "perspective-origin": 1,
+ "phonemes": 1,
+ "pitch": 1,
+ "pitch-range": 1,
+ "play-during": 1,
+ "position": 1,
+ "presentation-level": 1,
+ "punctuation-trim": 1,
+ "quotes": 1,
+ "rendering-intent": 1,
+ "resize": 1,
+ "rest": 1,
+ "rest-after": 1,
+ "rest-before": 1,
+ "richness": 1,
+ "right": 1,
+ "rotation": 1,
+ "rotation-point": 1,
+ "ruby-align": 1,
+ "ruby-overhang": 1,
+ "ruby-position": 1,
+ "ruby-span": 1,
+ "size": 1,
+ "speak": 1,
+ "speak-header": 1,
+ "speak-numeral": 1,
+ "speak-punctuation": 1,
+ "speech-rate": 1,
+ "stress": 1,
+ "string-set": 1,
+ "table-layout": 1,
+ "target": 1,
+ "target-name": 1,
+ "target-new": 1,
+ "target-position": 1,
+ "text-align": 1,
+ "text-align-last": 1,
+ "text-decoration": 1,
+ "text-emphasis": 1,
+ "text-height": 1,
+ "text-indent": 1,
+ "text-justify": 1,
+ "text-outline": 1,
+ "text-shadow": 1,
+ "text-transform": 1,
+ "text-wrap": 1,
+ "top": 1,
+ "transform": 1,
+ "transform-origin": 1,
+ "transform-style": 1,
+ "transition": 1,
+ "transition-delay": 1,
+ "transition-duration": 1,
+ "transition-property": 1,
+ "transition-timing-function": 1,
+ "unicode-bidi": 1,
+ "vertical-align": 1,
+ "visibility": 1,
+ "voice-balance": 1,
+ "voice-duration": 1,
+ "voice-family": 1,
+ "voice-pitch": 1,
+ "voice-pitch-range": 1,
+ "voice-rate": 1,
+ "voice-stress": 1,
+ "voice-volume": 1,
+ "volume": 1,
+ "white-space": 1,
+ "white-space-collapse": 1,
+ "widows": 1,
+ "width": 1,
+ "word-break": 1,
+ "word-spacing": 1,
+ "word-wrap": 1,
+ "z-index": 1,
+
+ //IE
+ "filter": 1,
+ "zoom": 1
+ };
+
+ parser.addListener("property", function(event){
+ var name = event.property.text.toLowerCase();
+
+ if (!properties[name] && name.charAt(0) != "-"){
+ reporter.error("Unknown property '" + event.property + "'.", event.line, event.col, rule);
+ }
+
+ });
+ }
+
+});
+/*
+ * Rule: Don't use classes or IDs with elements (a.foo or a#foo).
+ */
+CSSLint.addRule({
+
+ //rule information
+ id: "overqualified-elements",
+ name: "Overqualified Elements",
+ desc: "Don't use classes or IDs with elements (a.foo or a#foo).",
+ browsers: "All",
+
+ //initialization
+ init: function(parser, reporter){
+ var rule = this,
+ classes = {};
+
+ parser.addListener("startrule", function(event){
+ var selectors = event.selectors,
+ selector,
+ part,
+ modifier,
+ i, j, k;
+
+ for (i=0; i < selectors.length; i++){
+ selector = selectors[i];
+
+ for (j=0; j < selector.parts.length; j++){
+ part = selector.parts[j];
+ if (part instanceof parserlib.css.SelectorPart){
+ for (k=0; k < part.modifiers.length; k++){
+ modifier = part.modifiers[k];
+ if (part.elementName && modifier.type == "id"){
+ reporter.warn("Element (" + part + ") is overqualified, just use " + modifier + " without element name.", part.line, part.col, rule);
+ } else if (modifier.type == "class"){
+
+ if (!classes[modifier]){
+ classes[modifier] = [];
+ }
+ classes[modifier].push({ modifier: modifier, part: part });
+ }
+ }
+ }
+ }
+ }
+ });
+
+ parser.addListener("endstylesheet", function(){
+
+ var prop;
+ for (prop in classes){
+ if (classes.hasOwnProperty(prop)){
+
+ //one use means that this is overqualified
+ if (classes[prop].length == 1 && classes[prop][0].part.elementName){
+ reporter.warn("Element (" + classes[prop][0].part + ") is overqualified, just use " + classes[prop][0].modifier + " without element name.", classes[prop][0].part.line, classes[prop][0].part.col, rule);
+ }
+ }
+ }
+ });
+ }
+
+});
+/*
+ * Rule: Headings (h1-h6) should not be qualified (namespaced).
+ */
+CSSLint.addRule({
+
+ //rule information
+ id: "qualified-headings",
+ name: "Qualified Headings",
+ desc: "Headings should not be qualified (namespaced).",
+ browsers: "All",
+
+ //initialization
+ init: function(parser, reporter){
+ var rule = this;
+
+ parser.addListener("startrule", function(event){
+ var selectors = event.selectors,
+ selector,
+ part,
+ i, j;
+
+ for (i=0; i < selectors.length; i++){
+ selector = selectors[i];
+
+ for (j=0; j < selector.parts.length; j++){
+ part = selector.parts[j];
+ if (part instanceof parserlib.css.SelectorPart){
+ if (part.elementName && /h[1-6]/.test(part.elementName.toString()) && j > 0){
+ reporter.warn("Heading (" + part.elementName + ") should not be qualified.", part.line, part.col, rule);
+ }
+ }
+ }
+ }
+ });
+ }
+
+});
+/*
+ * Rule: Selectors that look like regular expressions are slow and should be avoided.
+ */
+CSSLint.addRule({
+
+ //rule information
+ id: "regex-selectors",
+ name: "Regex Selectors",
+ desc: "Selectors that look like regular expressions are slow and should be avoided.",
+ browsers: "All",
+
+ //initialization
+ init: function(parser, reporter){
+ var rule = this;
+
+ parser.addListener("startrule", function(event){
+ var selectors = event.selectors,
+ selector,
+ part,
+ modifier,
+ i, j, k;
+
+ for (i=0; i < selectors.length; i++){
+ selector = selectors[i];
+ for (j=0; j < selector.parts.length; j++){
+ part = selector.parts[j];
+ if (part instanceof parserlib.css.SelectorPart){
+ for (k=0; k < part.modifiers.length; k++){
+ modifier = part.modifiers[k];
+ if (modifier.type == "attribute"){
+ if (/([\~\|\^\$\*]=)/.test(modifier)){
+ reporter.warn("Attribute selectors with " + RegExp.$1 + " are slow!", modifier.line, modifier.col, rule);
+ }
+ }
+
+ }
+ }
+ }
+ }
+ });
+ }
+
+});
+/*
+ * Rule: Total number of rules should not exceed x.
+ */
+CSSLint.addRule({
+
+ //rule information
+ id: "rules-count",
+ name: "Rules Count",
+ desc: "Track how many rules there are.",
+ browsers: "All",
+
+ //initialization
+ init: function(parser, reporter){
+ var rule = this,
+ count = 0;
+
+ //count each rule
+ parser.addListener("startrule", function(){
+ count++;
+ });
+
+ parser.addListener("endstylesheet", function(){
+ reporter.stat("rule-count", count);
+ });
+ }
+
+});
+/*
+ * Rule: Don't use text-indent for image replacement if you need to support rtl.
+ *
+ */
+/*
+ * Should we be checking for rtl/ltr?
+ */
+//Commented out due to lack of tests
+CSSLint.addRule({
+
+ //rule information
+ id: "text-indent",
+ name: "Text Indent",
+ desc: "Checks for text indent less than -99px",
+ browsers: "All",
+
+ //initialization
+ init: function(parser, reporter){
+ var rule = this;
+
+ //check for use of "font-size"
+ parser.addListener("property", function(event){
+ var name = event.property,
+ value = event.value.parts[0].value;
+
+ if (name == "text-indent" && value < -99){
+ reporter.warn("Negative text-indent doesn't work well with RTL. If you use text-indent for image replacement explicitly set text-direction for that item to ltr.", name.line, name.col, rule);
+ }
+ });
+ }
+
+});
+/*
+ * Rule: Headings (h1-h6) should be defined only once.
+ */
+CSSLint.addRule({
+
+ //rule information
+ id: "unique-headings",
+ name: "Unique Headings",
+ desc: "Headings should be defined only once.",
+ browsers: "All",
+
+ //initialization
+ init: function(parser, reporter){
+ var rule = this;
+
+ var headings = {
+ h1: 0,
+ h2: 0,
+ h3: 0,
+ h4: 0,
+ h5: 0,
+ h6: 0
+ };
+
+ parser.addListener("startrule", function(event){
+ var selectors = event.selectors,
+ selector,
+ part,
+ i;
+
+ for (i=0; i < selectors.length; i++){
+ selector = selectors[i];
+ part = selector.parts[selector.parts.length-1];
+
+ if (part.elementName && /(h[1-6])/.test(part.elementName.toString())){
+ headings[RegExp.$1]++;
+ if (headings[RegExp.$1] > 1) {
+ reporter.warn("Heading (" + part.elementName + ") has already been defined.", part.line, part.col, rule);
+ }
+ }
+ }
+ });
+ }
+
+});
+/*
+ * Rule: Don't use universal selector because it's slow.
+ */
+CSSLint.addRule({
+
+ //rule information
+ id: "universal-selector",
+ name: "Universal Selector",
+ desc: "The universal selector (*) is known to be slow.",
+ browsers: "All",
+
+ //initialization
+ init: function(parser, reporter){
+ var rule = this;
+
+ parser.addListener("startrule", function(event){
+ var selectors = event.selectors,
+ selector,
+ part,
+ modifier,
+ i, j, k;
+
+ for (i=0; i < selectors.length; i++){
+ selector = selectors[i];
+
+ part = selector.parts[selector.parts.length-1];
+ if (part.elementName == "*"){
+ reporter.warn(rule.desc, part.line, part.col, rule);
+ }
+ }
+ });
+ }
+
+});
+/*
+ * Rule: When using a vendor-prefixed property, make sure to
+ * include the standard one.
+ */
+CSSLint.addRule({
+
+ //rule information
+ id: "vendor-prefix",
+ name: "Vendor Prefix",
+ desc: "When using a vendor-prefixed property, make sure to include the standard one.",
+ browsers: "All",
+
+ //initialization
+ init: function(parser, reporter){
+ var rule = this,
+ properties,
+ num,
+ propertiesToCheck = {
+ "-moz-border-radius": "border-radius",
+ "-webkit-border-radius": "border-radius",
+ "-webkit-border-top-left-radius": "border-top-left-radius",
+ "-webkit-border-top-right-radius": "border-top-right-radius",
+ "-webkit-border-bottom-left-radius": "border-bottom-left-radius",
+ "-webkit-border-bottom-right-radius": "border-bottom-right-radius",
+ "-moz-border-radius-topleft": "border-top-left-radius",
+ "-moz-border-radius-topright": "border-top-right-radius",
+ "-moz-border-radius-bottomleft": "border-bottom-left-radius",
+ "-moz-border-radius-bottomright": "border-bottom-right-radius",
+ "-moz-box-shadow": "box-shadow",
+ "-webkit-box-shadow": "box-shadow",
+ "-moz-transform" : "transform",
+ "-webkit-transform" : "transform",
+ "-o-transform" : "transform",
+ "-ms-transform" : "transform",
+ "-moz-box-sizing" : "box-sizing",
+ "-webkit-box-sizing" : "box-sizing",
+ "-moz-user-select" : "user-select",
+ "-khtml-user-select" : "user-select",
+ "-webkit-user-select" : "user-select"
+ };
+
+ //event handler for beginning of rules
+ function startRule(){
+ properties = {};
+ num=1;
+ }
+
+ //event handler for end of rules
+ function endRule(event){
+ var prop,
+ i, len,
+ standard,
+ needed,
+ actual,
+ needsStandard = [];
+
+ for (prop in properties){
+ if (propertiesToCheck[prop]){
+ needsStandard.push({ actual: prop, needed: propertiesToCheck[prop]});
+ }
+ }
+
+ for (i=0, len=needsStandard.length; i < len; i++){
+ needed = needsStandard[i].needed;
+ actual = needsStandard[i].actual;
+
+ if (!properties[needed]){
+ reporter.warn("Missing standard property '" + needed + "' to go along with '" + actual + "'.", event.line, event.col, rule);
+ } else {
+ //make sure standard property is last
+ if (properties[needed][0].pos < properties[actual][0].pos){
+ reporter.warn("Standard property '" + needed + "' should come after vendor-prefixed property '" + actual + "'.", event.line, event.col, rule);
+ }
+ }
+ }
+
+ }
+
+ parser.addListener("startrule", startRule);
+ parser.addListener("startfontface", startRule);
+
+ parser.addListener("property", function(event){
+ var name = event.property.text.toLowerCase();
+
+ if (!properties[name]){
+ properties[name] = [];
+ }
+
+ properties[name].push({ name: event.property, value : event.value, pos:num++ });
+ });
+
+ parser.addListener("endrule", endRule);
+ parser.addListener("endfontface", endRule);
+ }
+
+});
+/*
+ * Rule: If an element has a width of 100%, be careful when placing within
+ * an element that has padding. It may look strange.
+ */
+//Commented out pending further review.
+/*CSSLint.addRule({
+
+ //rule information
+ id: "width-100",
+ name: "Width 100%",
+ desc: "Be careful when using width: 100% on elements.",
+ browsers: "All",
+
+ //initialization
+ init: function(parser, reporter){
+ var rule = this,
+ width100,
+ boxsizing;
+
+ parser.addListener("startrule", function(){
+ width100 = null;
+ boxsizing = false;
+ });
+
+ parser.addListener("property", function(event){
+ var name = event.property.text.toLowerCase(),
+ value = event.value;
+
+ if (name == "width" && value == "100%"){
+ width100 = event.property;
+ } else if (name == "box-sizing" || /\-(?:webkit|ms|moz)\-box-sizing/.test(name)){ //means you know what you're doing
+ boxsizing = true;
+ }
+ });
+
+ parser.addListener("endrule", function(){
+ if (width100 && !boxsizing){
+ reporter.warn("Elements with a width of 100% may not appear as you expect inside of other elements.", width100.line, width100.col, rule);
+ }
+ });
+ }
+
+});*/
+/*
+ * Rule: You don't need to specify units when a value is 0.
+ */
+CSSLint.addRule({
+
+ //rule information
+ id: "zero-units",
+ name: "Zero Units",
+ desc: "You don't need to specify units when a value is 0.",
+ browsers: "All",
+
+ //initialization
+ init: function(parser, reporter){
+ var rule = this;
+
+ //count how many times "float" is used
+ parser.addListener("property", function(event){
+ var parts = event.value.parts,
+ i = 0,
+ len = parts.length;
+
+ while(i < len){
+ if ((parts[i].units || parts[i].type == "percentage") && parts[i].value === 0){
+ reporter.warn("Values of 0 shouldn't have units specified.", parts[i].line, parts[i].col, rule);
+ }
+ i++;
+ }
+
+ });
+
+ }
+
+});
+
+exports.CSSLint = CSSLint;
+});
diff --git a/apps/files_texteditor/js/aceeditor/worker-javascript.js b/apps/files_texteditor/js/aceeditor/worker-javascript.js
index 5792f4562c4..e48c6e810dc 100644
--- a/apps/files_texteditor/js/aceeditor/worker-javascript.js
+++ b/apps/files_texteditor/js/aceeditor/worker-javascript.js
@@ -1 +1,9752 @@
-function initSender(){var a=require("pilot/event_emitter").EventEmitter,b=require("pilot/oop"),c=function(){};(function(){b.implement(this,a),this.callback=function(a,b){postMessage({type:"call",id:b,data:a})},this.emit=function(a,b){postMessage({type:"event",name:a,data:b})}}).call(c.prototype);return new c}function initBaseUrls(a){require.tlns=a}var console={log:function(a){postMessage({type:"log",data:a})}},window={console:console},require=function(a){var b=require.modules[a];if(b){b.initialized||(b.exports=b.factory().exports,b.initialized=!0);return b.exports}var c=a.split("/");c[0]=require.tlns[c[0]]||c[0],path=c.join("/")+".js",require.id=a,importScripts(path);return require(a)};require.modules={},require.tlns={};var define=function(a,b,c){arguments.length==2?c=b:arguments.length==1&&(c=a,a=require.id);a.indexOf("text/")!==0&&(require.modules[a]={factory:function(){var a={exports:{}},b=c(require,a.exports,a);b&&(a.exports=b);return a}})},main,sender;onmessage=function(a){var b=a.data;if(b.command)main[b.command].apply(main,b.args);else if(b.init){initBaseUrls(b.tlns),require("pilot/fixoldbrowsers"),sender=initSender();var c=require(b.module)[b.classname];main=new c(sender)}else b.event&&sender&&sender._dispatchEvent(b.event,b.data)},define("pilot/fixoldbrowsers",["require","exports","module"],function(a,b,c){if(!Function.prototype.bind){var d=Array.prototype.slice;Function.prototype.bind=function(a){var b=this;if(typeof b.apply!="function"||typeof b.call!="function")return new TypeError;var c=d.call(arguments),e=function f(){if(this instanceof f){var a=Object.create(b.prototype);b.apply(a,c.concat(d.call(arguments)));return a}return b.call.apply(b,c.concat(d.call(arguments)))};e.length=typeof b=="function"?Math.max(b.length-c.length,0):0;return e}}var e=Function.prototype.call,f=Array.prototype,g=Object.prototype,h=e.bind(g.hasOwnProperty),i,j,k,l,m;if(m=h(g,"__defineGetter__"))i=e.bind(g.__defineGetter__),j=e.bind(g.__defineSetter__),k=e.bind(g.__lookupGetter__),l=e.bind(g.__lookupSetter__);Array.isArray||(Array.isArray=function(a){return Object.prototype.toString.call(a)==="[object Array]"}),Array.prototype.forEach||(Array.prototype.forEach=function(a,b){var c=+this.length;for(var d=0;d<c;d++)d in this&&a.call(b,this[d],d,this)}),Array.prototype.map||(Array.prototype.map=function(a){var b=+this.length;if(typeof a!="function")throw new TypeError;var c=Array(b),d=arguments[1];for(var e=0;e<b;e++)e in this&&(c[e]=a.call(d,this[e],e,this));return c}),Array.prototype.filter||(Array.prototype.filter=function(a){var b=[],c=arguments[1];for(var d=0;d<this.length;d++)a.call(c,this[d])&&b.push(this[d]);return b}),Array.prototype.every||(Array.prototype.every=function(a){var b=arguments[1];for(var c=0;c<this.length;c++)if(!a.call(b,this[c]))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(a){var b=arguments[1];for(var c=0;c<this.length;c++)if(a.call(b,this[c]))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(a){var b=+this.length;if(typeof a!="function")throw new TypeError;if(b===0&&arguments.length===1)throw new TypeError;var c=0;if(arguments.length>=2)var d=arguments[1];else do{if(c in this){d=this[c++];break}if(++c>=b)throw new TypeError}while(!0);for(;c<b;c++)c in this&&(d=a.call(null,d,this[c],c,this));return d}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(a){var b=+this.length;if(typeof a!="function")throw new TypeError;if(b===0&&arguments.length===1)throw new TypeError;var c=b-1;if(arguments.length>=2)var d=arguments[1];else do{if(c in this){d=this[c--];break}if(--c<0)throw new TypeError}while(!0);for(;c>=0;c--)c in this&&(d=a.call(null,d,this[c],c,this));return d}),Array.prototype.indexOf||(Array.prototype.indexOf=function(a){var b=this.length;if(!b)return-1;var c=arguments[1]||0;if(c>=b)return-1;c<0&&(c+=b);for(;c<b;c++){if(!h(this,c))continue;if(a===this[c])return c}return-1}),Array.prototype.lastIndexOf||(Array.prototype.lastIndexOf=function(a){var b=this.length;if(!b)return-1;var c=arguments[1]||b;c<0&&(c+=b),c=Math.min(c,b-1);for(;c>=0;c--){if(!h(this,c))continue;if(a===this[c])return c}return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(a){return a.__proto__||a.constructor.prototype});if(!Object.getOwnPropertyDescriptor){var n="Object.getOwnPropertyDescriptor called on a non-object: ";Object.getOwnPropertyDescriptor=function(a,b){if(typeof a!="object"&&typeof a!="function"||a===null)throw new TypeError(n+a);if(!h(a,b))return undefined;var c,d,e;c={enumerable:!0,configurable:!0};if(m){var f=a.__proto__;a.__proto__=g;var d=k(a,b),e=l(a,b);a.__proto__=f;if(d||e){d&&(descriptor.get=d),e&&(descriptor.set=e);return descriptor}}descriptor.value=a[b];return descriptor}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(a){return Object.keys(a)}),Object.create||(Object.create=function(a,b){var c;if(a===null)c={"__proto__":null};else{if(typeof a!="object")throw new TypeError("typeof prototype["+typeof a+"] != 'object'");var d=function(){};d.prototype=a,c=new d,c.__proto__=a}typeof b!="undefined"&&Object.defineProperties(c,b);return c});if(!Object.defineProperty){var o="Property description must be an object: ",p="Object.defineProperty called on non-object: ",q="getters & setters can not be defined on this javascript engine";Object.defineProperty=function(a,b,c){if(typeof a!="object"&&typeof a!="function")throw new TypeError(p+a);if(typeof a!="object"||a===null)throw new TypeError(o+c);if(h(c,"value"))if(m&&(k(a,b)||l(a,b))){var d=a.__proto__;a.__proto__=g,delete a[b],a[b]=c.value,a.prototype}else a[b]=c.value;else{if(!m)throw new TypeError(q);h(c,"get")&&i(a,b,c.get),h(c,"set")&&j(a,b,c.set)}return a}}Object.defineProperties||(Object.defineProperties=function(a,b){for(var c in b)h(b,c)&&Object.defineProperty(a,c,b[c]);return a}),Object.seal||(Object.seal=function(a){return a}),Object.freeze||(Object.freeze=function(a){return a});try{Object.freeze(function(){})}catch(r){Object.freeze=function(a){return function b(b){return typeof b=="function"?b:a(b)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(a){return a}),Object.isSealed||(Object.isSealed=function(a){return!1}),Object.isFrozen||(Object.isFrozen=function(a){return!1}),Object.isExtensible||(Object.isExtensible=function(a){return!0});if(!Object.keys){var s=!0,t=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],u=t.length;for(var v in{toString:null})s=!1;Object.keys=function W(a){if(typeof a!="object"&&typeof a!="function"||a===null)throw new TypeError("Object.keys called on a non-object");var W=[];for(var b in a)h(a,b)&&W.push(b);if(s)for(var c=0,d=u;c<d;c++){var e=t[c];h(a,e)&&W.push(e)}return W}}Date.prototype.toISOString||(Date.prototype.toISOString=function(){return this.getUTCFullYear()+"-"+(this.getUTCMonth()+1)+"-"+this.getUTCDate()+"T"+this.getUTCHours()+":"+this.getUTCMinutes()+":"+this.getUTCSeconds()+"Z"}),Date.now||(Date.now=function(){return(new Date).getTime()}),Date.prototype.toJSON||(Date.prototype.toJSON=function(a){if(typeof this.toISOString!="function")throw new TypeError;return this.toISOString()}),isNaN(Date.parse("T00:00"))&&(Date=function(a){var b=function(c,d,e,f,g,h,i){var j=arguments.length;if(this instanceof a){var k=j===1&&String(c)===c?new a(b.parse(c)):j>=7?new a(c,d,e,f,g,h,i):j>=6?new a(c,d,e,f,g,h):j>=5?new a(c,d,e,f,g):j>=4?new a(c,d,e,f):j>=3?new a(c,d,e):j>=2?new a(c,d):j>=1?new a(c):new a;k.constructor=b;return k}return a.apply(this,arguments)},c=new RegExp("^(?:((?:[+-]\\d\\d)?\\d\\d\\d\\d)(?:-(\\d\\d)(?:-(\\d\\d))?)?)?(?:T(\\d\\d):(\\d\\d)(?::(\\d\\d)(?:\\.(\\d\\d\\d))?)?)?(?:Z|([+-])(\\d\\d):(\\d\\d))?$");for(var d in a)b[d]=a[d];b.now=a.now,b.UTC=a.UTC,b.prototype=a.prototype,b.prototype.constructor=b,b.parse=function e(b){var d=c.exec(b);if(d){d.shift();var e=d[0]===undefined;for(var f=0;f<10;f++){if(f===7)continue;d[f]=+(d[f]||(f<3?1:0)),f===1&&d[f]--}if(e)return((d[3]*60+d[4])*60+d[5])*1e3+d[6];var g=(d[8]*60+d[9])*60*1e3;d[6]==="-"&&(g=-g);return a.UTC.apply(this,d.slice(0,7))+g}return a.parse.apply(this,arguments)};return b}(Date));if(!String.prototype.trim){var w=/^\s\s*/,x=/\s\s*$/;String.prototype.trim=function(){return String(this).replace(w,"").replace(x,"")}}}),define("pilot/event_emitter",["require","exports","module"],function(a,b,c){var d={};d._emit=d._dispatchEvent=function(a,b){this._eventRegistry=this._eventRegistry||{};var c=this._eventRegistry[a];if(!!c&&!!c.length){var b=b||{};b.type=a;for(var d=0;d<c.length;d++)c[d](b)}},d.on=d.addEventListener=function(a,b){this._eventRegistry=this._eventRegistry||{};var c=this._eventRegistry[a];if(!c)var c=this._eventRegistry[a]=[];c.indexOf(b)==-1&&c.push(b)},d.removeListener=d.removeEventListener=function(a,b){this._eventRegistry=this._eventRegistry||{};var c=this._eventRegistry[a];if(!!c){var d=c.indexOf(b);d!==-1&&c.splice(d,1)}},d.removeAllListeners=function(a){this._eventRegistry&&(this._eventRegistry[a]=[])},b.EventEmitter=d}),define("pilot/oop",["require","exports","module"],function(a,b,c){b.inherits=function(){var a=function(){};return function(b,c){a.prototype=c.prototype,b.super_=c.prototype,b.prototype=new a,b.prototype.constructor=b}}(),b.mixin=function(a,b){for(var c in b)a[c]=b[c]},b.implement=function(a,c){b.mixin(a,c)}}),define("ace/mode/javascript_worker",["require","exports","module","pilot/oop","ace/worker/mirror","ace/worker/jshint","ace/narcissus/jsparse"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/worker/mirror").Mirror,f=a("ace/worker/jshint").JSHINT,g=b.JavaScriptWorker=function(a){e.call(this,a),this.setTimeout(500)};d.inherits(g,e),function(){this.onUpdate=function(){var b=this.doc.getValue();b=b.replace(/^#!.*\n/,"\n");var c=a("ace/narcissus/jsparse");try{c.parse(b)}catch(d){this.sender.emit("narcissus",{row:d.lineno-1,column:null,text:d.message,type:"error"});return}finally{}f(b,{undef:!1,onevar:!1,passfail:!1}),this.sender.emit("jslint",f.errors)}}.call(g.prototype)}),define("ace/worker/mirror",["require","exports","module","ace/document","pilot/lang"],function(a,b,c){var d=a("ace/document").Document,e=a("pilot/lang"),f=b.Mirror=function(a){this.sender=a;var b=this.doc=new d(""),c=this.deferredUpdate=e.deferredCall(this.onUpdate.bind(this)),f=this;a.on("change",function(a){b.applyDeltas([a.data]),c.schedule(f.$timeout)})};(function(){this.$timeout=500,this.setTimeout=function(a){this.$timeout=a},this.setValue=function(a){this.doc.setValue(a),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(a){this.sender.callback(this.doc.getValue(),a)},this.onUpdate=function(){}}).call(f.prototype)}),define("ace/document",["require","exports","module","pilot/oop","pilot/event_emitter","ace/range","ace/anchor"],function(a,b,c){var d=a("pilot/oop"),e=a("pilot/event_emitter").EventEmitter,f=a("ace/range").Range,g=a("ace/anchor").Anchor,h=function(a){this.$lines=[],Array.isArray(a)?this.insertLines(0,a):a.length==0?this.$lines=[""]:this.insert({row:0,column:0},a)};(function(){d.implement(this,e),this.setValue=function(a){var b=this.getLength();this.remove(new f(0,0,b,this.getLine(b-1).length)),this.insert({row:0,column:0},a)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(a,b){return new g(this,a,b)},"aaa".split(/a/).length==0?this.$split=function(a){return a.replace(/\r\n|\r/g,"\n").split("\n")}:this.$split=function(a){return a.split(/\r\n|\r|\n/)},this.$detectNewLine=function(a){var b=a.match(/^.*?(\r?\n)/m);b?this.$autoNewLine=b[1]:this.$autoNewLine="\n"},this.getNewLineCharacter=function(){switch(this.$newLineMode){case"windows":return"\r\n";case"unix":return"\n";case"auto":return this.$autoNewLine}},this.$autoNewLine="\n",this.$newLineMode="auto",this.setNewLineMode=function(a){this.$newLineMode!==a&&(this.$newLineMode=a)},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(a){return a=="\r\n"||a=="\r"||a=="\n"},this.getLine=function(a){return this.$lines[a]||""},this.getLines=function(a,b){return this.$lines.slice(a,b+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(a){if(a.start.row==a.end.row)return this.$lines[a.start.row].substring(a.start.column,a.end.column);var b=[];b.push(this.$lines[a.start.row].substring(a.start.column)),b.push.apply(b,this.getLines(a.start.row+1,a.end.row-1)),b.push(this.$lines[a.end.row].substring(0,a.end.column));return b.join(this.getNewLineCharacter())},this.$clipPosition=function(a){var b=this.getLength();a.row>=b&&(a.row=Math.max(0,b-1),a.column=this.getLine(b-1).length);return a},this.insert=function(a,b){if(b.length==0)return a;a=this.$clipPosition(a),this.getLength()<=1&&this.$detectNewLine(b);var c=this.$split(b),d=c.splice(0,1)[0],e=c.length==0?null:c.splice(c.length-1,1)[0];a=this.insertInLine(a,d),e!==null&&(a=this.insertNewLine(a),a=this.insertLines(a.row,c),a=this.insertInLine(a,e||""));return a},this.insertLines=function(a,b){if(b.length==0)return{row:a,column:0};var c=[a,0];c.push.apply(c,b),this.$lines.splice.apply(this.$lines,c);var d=new f(a,0,a+b.length,0),e={action:"insertLines",range:d,lines:b};this._dispatchEvent("change",{data:e});return d.end},this.insertNewLine=function(a){a=this.$clipPosition(a);var b=this.$lines[a.row]||"";this.$lines[a.row]=b.substring(0,a.column),this.$lines.splice(a.row+1,0,b.substring(a.column,b.length));var c={row:a.row+1,column:0},d={action:"insertText",range:f.fromPoints(a,c),text:this.getNewLineCharacter()};this._dispatchEvent("change",{data:d});return c},this.insertInLine=function(a,b){if(b.length==0)return a;var c=this.$lines[a.row]||"";this.$lines[a.row]=c.substring(0,a.column)+b+c.substring(a.column);var d={row:a.row,column:a.column+b.length},e={action:"insertText",range:f.fromPoints(a,d),text:b};this._dispatchEvent("change",{data:e});return d},this.remove=function(a){a.start=this.$clipPosition(a.start),a.end=this.$clipPosition(a.end);if(a.isEmpty())return a.start;var b=a.start.row,c=a.end.row;if(a.isMultiLine()){var d=a.start.column==0?b:b+1,e=c-1;a.end.column>0&&this.removeInLine(c,0,a.end.column),e>=d&&this.removeLines(d,e),d!=b&&(this.removeInLine(b,a.start.column,this.getLine(b).length),this.removeNewLine(a.start.row))}else this.removeInLine(b,a.start.column,a.end.column);return a.start},this.removeInLine=function(a,b,c){if(b!=c){var d=new f(a,b,a,c),e=this.getLine(a),g=e.substring(b,c),h=e.substring(0,b)+e.substring(c,e.length);this.$lines.splice(a,1,h);var i={action:"removeText",range:d,text:g};this._dispatchEvent("change",{data:i});return d.start}},this.removeLines=function(a,b){var c=new f(a,0,b+1,0),d=this.$lines.splice(a,b-a+1),e={action:"removeLines",range:c,nl:this.getNewLineCharacter(),lines:d};this._dispatchEvent("change",{data:e});return d},this.removeNewLine=function(a){var b=this.getLine(a),c=this.getLine(a+1),d=new f(a,b.length,a+1,0),e=b+c;this.$lines.splice(a,2,e);var g={action:"removeText",range:d,text:this.getNewLineCharacter()};this._dispatchEvent("change",{data:g})},this.replace=function(a,b){if(b.length==0&&a.isEmpty())return a.start;if(b==this.getTextRange(a))return a.end;this.remove(a);if(b)var c=this.insert(a.start,b);else c=a.start;return c},this.applyDeltas=function(a){for(var b=0;b<a.length;b++){var c=a[b],d=f.fromPoints(c.range.start,c.range.end);c.action=="insertLines"?this.insertLines(d.start.row,c.lines):c.action=="insertText"?this.insert(d.start,c.text):c.action=="removeLines"?this.removeLines(d.start.row,d.end.row-1):c.action=="removeText"&&this.remove(d)}},this.revertDeltas=function(a){for(var b=a.length-1;b>=0;b--){var c=a[b],d=f.fromPoints(c.range.start,c.range.end);c.action=="insertLines"?this.removeLines(d.start.row,d.end.row-1):c.action=="insertText"?this.remove(d):c.action=="removeLines"?this.insertLines(d.start.row,c.lines):c.action=="removeText"&&this.insert(d.start,c.text)}}}).call(h.prototype),b.Document=h}),define("ace/range",["require","exports","module"],function(a,b,c){var d=function(a,b,c,d){this.start={row:a,column:b},this.end={row:c,column:d}};(function(){this.toString=function(){return"Range: ["+this.start.row+"/"+this.start.column+"] -> ["+this.end.row+"/"+this.end.column+"]"},this.contains=function(a,b){return this.compare(a,b)==0},this.compareRange=function(a){var b,c=a.end,d=a.start;b=this.compare(c.row,c.column);if(b==1){b=this.compare(d.row,d.column);return b==1?2:b==0?1:0}if(b==-1)return-2;b=this.compare(d.row,d.column);return b==-1?-1:b==1?42:0},this.containsRange=function(a){var b=this.compareRange(a);return b==-1||b==0||b==1},this.isEnd=function(a,b){return this.end.row==a&&this.end.column==b},this.isStart=function(a,b){return this.start.row==a&&this.start.column==b},this.setStart=function(a,b){typeof a=="object"?(this.start.column=a.column,this.start.row=a.row):(this.start.row=a,this.start.column=b)},this.setEnd=function(a,b){typeof a=="object"?(this.end.column=a.column,this.end.row=a.row):(this.end.row=a,this.end.column=b)},this.inside=function(a,b){if(this.compare(a,b)==0)return this.isEnd(a,b)||this.isStart(a,b)?!1:!0;return!1},this.insideStart=function(a,b){if(this.compare(a,b)==0)return this.isEnd(a,b)?!1:!0;return!1},this.insideEnd=function(a,b){if(this.compare(a,b)==0)return this.isStart(a,b)?!1:!0;return!1},this.compare=function(a,b){if(!this.isMultiLine()&&a===this.start.row)return b<this.start.column?-1:b>this.end.column?1:0;return a<this.start.row?-1:a>this.end.row?1:this.start.row===a?b>=this.start.column?0:-1:this.end.row===a?b<=this.end.column?0:1:0},this.compareStart=function(a,b){return this.start.row==a&&this.start.column==b?-1:this.compare(a,b)},this.compareEnd=function(a,b){return this.end.row==a&&this.end.column==b?1:this.compare(a,b)},this.compareInside=function(a,b){return this.end.row==a&&this.end.column==b?1:this.start.row==a&&this.start.column==b?-1:this.compare(a,b)},this.clipRows=function(a,b){if(this.end.row>b)var c={row:b+1,column:0};if(this.start.row>b)var e={row:b+1,column:0};if(this.start.row<a)var e={row:a,column:0};if(this.end.row<a)var c={row:a,column:0};return d.fromPoints(e||this.start,c||this.end)},this.extend=function(a,b){var c=this.compare(a,b);if(c==0)return this;if(c==-1)var e={row:a,column:b};else var f={row:a,column:b};return d.fromPoints(e||this.start,f||this.end)},this.isEmpty=function(){return this.start.row==this.end.row&&this.start.column==this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return d.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new d(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new d(this.start.row,0,this.end.row,0)},this.toScreenRange=function(a){var b=a.documentToScreenPosition(this.start),c=a.documentToScreenPosition(this.end);return new d(b.row,b.column,c.row,c.column)}}).call(d.prototype),d.fromPoints=function(a,b){return new d(a.row,a.column,b.row,b.column)},b.Range=d}),define("ace/anchor",["require","exports","module","pilot/oop","pilot/event_emitter"],function(a,b,c){var d=a("pilot/oop"),e=a("pilot/event_emitter").EventEmitter,f=b.Anchor=function(a,b,c){this.document=a,typeof c=="undefined"?this.setPosition(b.row,b.column):this.setPosition(b,c),this.$onChange=this.onChange.bind(this),a.on("change",this.$onChange)};(function(){d.implement(this,e),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.onChange=function(a){var b=a.data,c=b.range;if(c.start.row!=c.end.row||c.start.row==this.row){if(c.start.row>this.row)return;if(c.start.row==this.row&&c.start.column>this.column)return;var d=this.row,e=this.column;b.action==="insertText"?c.start.row===d&&c.start.column<=e?c.start.row===c.end.row?e+=c.end.column-c.start.column:(e-=c.start.column,d+=c.end.row-c.start.row):c.start.row!==c.end.row&&c.start.row<d&&(d+=c.end.row-c.start.row):b.action==="insertLines"?c.start.row<=d&&(d+=c.end.row-c.start.row):b.action=="removeText"?c.start.row==d&&c.start.column<e?c.end.column>=e?e=c.start.column:e=Math.max(0,e-(c.end.column-c.start.column)):c.start.row!==c.end.row&&c.start.row<d?(c.end.row==d&&(e=Math.max(0,e-c.end.column)+c.start.column),d-=c.end.row-c.start.row):c.end.row==d&&(d-=c.end.row-c.start.row,e=Math.max(0,e-c.end.column)+c.start.column):b.action=="removeLines"&&c.start.row<=d&&(c.end.row<=d?d-=c.end.row-c.start.row:(d=c.start.row,e=0)),this.setPosition(d,e,!0)}},this.setPosition=function(a,b,c){var d;c?d={row:a,column:b}:d=this.$clipPositionToDocument(a,b);if(this.row!=d.row||this.column!=d.column){var e={row:this.row,column:this.column};this.row=d.row,this.column=d.column,this._dispatchEvent("change",{old:e,value:d})}},this.detach=function(){this.document.removeEventListener("change",this.$onChange)},this.$clipPositionToDocument=function(a,b){var c={};a>=this.document.getLength()?(c.row=Math.max(0,this.document.getLength()-1),c.column=this.document.getLine(c.row).length):a<0?(c.row=0,c.column=0):(c.row=a,c.column=Math.min(this.document.getLine(c.row).length,Math.max(0,b))),b<0&&(c.column=0);return c}}).call(f.prototype)}),define("pilot/lang",["require","exports","module"],function(a,b,c){b.stringReverse=function(a){return a.split("").reverse().join("")},b.stringRepeat=function(a,b){return Array(b+1).join(a)};var d=/^\s\s*/,e=/\s\s*$/;b.stringTrimLeft=function(a){return a.replace(d,"")},b.stringTrimRight=function(a){return a.replace(e,"")},b.copyObject=function(a){var b={};for(var c in a)b[c]=a[c];return b},b.copyArray=function(a){var b=[];for(i=0,l=a.length;i<l;i++)a[i]&&typeof a[i]=="object"?b[i]=this.copyObject(a[i]):b[i]=a[i];return b},b.deepCopy=function(a){if(typeof a!="object")return a;var b=a.constructor();for(var c in a)typeof a[c]=="object"?b[c]=this.deepCopy(a[c]):b[c]=a[c];return b},b.arrayToMap=function(a){var b={};for(var c=0;c<a.length;c++)b[a[c]]=1;return b},b.arrayRemove=function(a,b){for(var c=0;c<=a.length;c++)b===a[c]&&a.splice(c,1)},b.escapeRegExp=function(a){return a.replace(/([.*+?^${}()|[\]\/\\])/g,"\\$1")},b.deferredCall=function(a){var b=null,c=function(){b=null,a()},d=function(a){b||(b=setTimeout(c,a||0));return d};d.schedule=d,d.call=function(){this.cancel(),a();return d},d.cancel=function(){clearTimeout(b),b=null;return d};return d}}),define("ace/worker/jshint",["require","exports","module"],function(a,b,c){var d=function(){function bZ(){function b(){var a=x;bm("[");if(x.id!=="]")for(;;){if(x.id==="(end)")bg("Missing ']' to match '[' from line {a}.",x,a.line);else{if(x.id==="]"){be("Unexpected comma.",O);break}x.id===","&&bg("Unexpected comma.",x)}bZ();if(x.id!==",")break;bm(",")}bm("]")}function a(){var a={},b=x;bm("{");if(x.id!=="}")for(;;){if(x.id==="(end)")bg("Missing '}' to match '{' from line {a}.",x,b.line);else{if(x.id==="}"){be("Unexpected comma.",O);break}x.id===","?bg("Unexpected comma.",x):x.id!=="(string)"&&be("Expected a string and instead saw {a}.",x,x.value)}a[x.value]===!0?be("Duplicate key '{a}'.",x,x.value):x.value==="__proto__"&&!A.proto||x.value==="__iterator__"&&!A.iterator?be("The '{a}' key may produce unexpected results.",x,x.value):a[x.value]=!0,bm(),bm(":"),bZ();if(x.id!==",")break;bm(",")}bm("}")}switch(x.id){case"{":a();break;case"[":b();break;case"true":case"false":case"null":case"(number)":case"(string)":bm();break;case"-":bm("-"),O.character!==x.from&&be("Unexpected space after '-'.",O),bo(O,x),bm("(number)");break;default:bg("Expected a JSON value.",x)}}function bX(b,c){var d,e=A,f=G;A=Object.create(A),G=Object.create(G),j={"(name)":b||'"'+a+'"',"(line)":x.line,"(context)":j,"(breakage)":0,"(loopage)":0,"(scope)":G,"(statement)":c},d=j,O.funct=j,l.push(j),b&&bj(b,"function"),j["(params)"]=bW(),bS(!1),G=f,A=e,j["(last)"]=O.line,j=j["(context)"];return d}function bW(){var a,b=x,c=[];bm("("),bq();if(x.id===")")bm(")"),bq(D,O);else for(;;){a=bN(!0),c.push(a),bj(a,"parameter");if(x.id===",")bv();else{bm(")",b),bq(D,O);return c}}}function bV(){var a=bM(!0);a||(x.id==="(string)"?(a=x.value,bm()):x.id==="(number)"&&(a=x.value.toString(),bm()));return a}function bU(a){var b=a.value,c=a.line,d=n[b];typeof d=="function"&&(d=!1),d?d[d.length-1]!==c&&d.push(c):(d=[c],n[b]=d)}function bT(a){v&&typeof v[a]!="boolean"&&be("Unexpected /*member '{a}'.",O,a),typeof u[a]=="number"?u[a]+=1:u[a]=1}function bS(a,b){var c,d=o,e=p,f=L,g=G,h;o=a,G=Object.create(G),br(O,x),h=x;if(x.id==="{"){bm("{");if(x.id!=="}"||O.line!==x.line){p+=A.indent;while(!a&&x.from>p)p+=A.indent;!a&&!bQ()&&!f&&A.strict&&j["(context)"]["(global)"]&&be('Missing "use strict" statement.'),c=bR(),L=f,p-=A.indent,bt()}bm("}",h),p=e}else a?((!b||A.curly)&&be("Expected '{a}' and instead saw '{b}'.",x,"{",x.value),z=!0,c=[bP()],z=!1):bg("Expected '{a}' and instead saw '{b}'.",x,"{",x.value);j["(verb)"]=null,G=g,o=d,a&&A.noempty&&(!c||c.length===0)&&be("Empty block.");return c}function bR(a){var b=[],c,d;while(!x.reach&&x.id!=="(end)")x.id===";"?(be("Unnecessary semicolon."),bm(";")):b.push(bP());return b}function bQ(){if(x.value==="use strict"){L&&be('Unnecessary "use strict".'),bm(),bm(";"),L=!0,A.newcap=!0,A.undef=!0;return!0}return!1}function bP(a){var b=p,c,d=G,e=x;if(e.id===";")be("Unnecessary semicolon.",e),bm(";");else{e.identifier&&!e.reserved&&bl().id===":"&&(bm(),bm(":"),G=Object.create(d),bj(e.value,"label"),x.labelled||be("Label '{a}' on {b} statement.",x,e.value,x.value),Z.test(e.value+":")&&be("Label '{a}' looks like a javascript url.",e,e.value),x.label=e.value,e=x),a||bt(),c=bn(0,!0),e.block||(!A.expr&&(!c||!c.exps)?be("Expected an assignment or function call and instead saw an expression.",O):A.nonew&&c.id==="("&&c.left.id==="new"&&be("Do not use 'new' for side effects."),x.id!==";"?!A.asi&&(!A.lastsemic||x.id!="}"||x.line!=O.line)&&bf("Missing semicolon.",O.line,O.from+O.value.length):(bo(O,x),bm(";"),br(O,x))),p=b,G=d;return c}}function bO(a){var b=0,c;if(x.id===";"&&!z)for(;;){c=bl(b);if(c.reach)return;if(c.id!=="(endline)"){if(c.id==="function"){be("Inner functions should be listed at the top of the outer function.",c);break}be("Unreachable '{a}' after '{b}'.",c,c.value,a);break}b+=1}}function bN(a){var b=bM(a);if(b)return b;O.id==="function"&&x.id==="("?be("Missing name in function declaration."):bg("Expected an identifier and instead saw '{a}'.",x,x.value)}function bM(a){if(x.identifier){bm(),O.reserved&&!A.es5&&(!a||O.value!="undefined")&&be("Expected an identifier and instead saw '{a}' (a reserved word).",O,O.id);return O.value}}function bL(a,b){var c=bw(a,150);c.led=function(a){A.plusplus?be("Unexpected use of '{a}'.",this,this.id):(!a.identifier||a.reserved)&&a.id!=="."&&a.id!=="["&&be("Bad operand.",this),this.left=a;return this};return c}function bK(a){bw(a,20).exps=!0;return bF(a,function(a,b){A.bitwise&&be("Unexpected use of '{a}'.",b,b.id),br(D,O),br(O,x);if(a){if(a.id==="."||a.id==="["||a.identifier&&!a.reserved){bn(19);return b}a===M["function"]&&be("Expected an identifier in an assignment, and instead saw a function invocation.",O);return b}bg("Bad assignment.",b)},20)}function bJ(a,b,c){var d=bw(a,c);bA(d),d.led=typeof b=="function"?b:function(a){A.bitwise&&be("Unexpected use of '{a}'.",this,this.id),this.left=a,this.right=bn(c);return this};return d}function bI(a,b){bw(a,20).exps=!0;return bF(a,function(a,b){var c;b.left=a,B[a.value]===!1&&G[a.value]["(global)"]===!0?be("Read only.",a):a["function"]&&be("'{a}' is a function.",a,a.value);if(a){if(a.id==="."||a.id==="["){(!a.left||a.left.value==="arguments")&&be("Bad assignment.",b),b.right=bn(19);return b}if(a.identifier&&!a.reserved){j[a.value]==="exception"&&be("Do not assign to the exception parameter.",a),b.right=bn(19);return b}a===M["function"]&&be("Expected an identifier in an assignment and instead saw a function invocation.",O)}bg("Bad assignment.",b)},20)}function bH(a){return a&&(a.type==="(number)"&&+a.value===0||a.type==="(string)"&&a.value===""||a.type==="null"&&!A.eqnull||a.type==="true"||a.type==="false"||a.type==="undefined")}function bG(a,b){var c=bw(a,100);c.led=function(a){bs(D,O),br(O,x);var c=bn(100);a&&a.id==="NaN"||c&&c.id==="NaN"?be("Use the isNaN function to compare with NaN.",this):b&&b.apply(this,[a,c]),a.id==="!"&&be("Confusing use of '{a}'.",a,"!"),c.id==="!"&&be("Confusing use of '{a}'.",a,"!"),this.left=a,this.right=c;return this};return c}function bF(a,b,c,d){var e=bw(a,c);bA(e),e.led=function(a){d||(bs(D,O),br(O,x));if(typeof b=="function")return b(a,this);this.left=a,this.right=bn(c);return this};return e}function bE(a,b){return bD(a,function(){typeof b=="function"&&b(this);return this})}function bD(a,b){var c=bC(a,b);c.identifier=c.reserved=!0;return c}function bC(a,b){var c=bx(a);c.type=a,c.nud=b;return c}function bB(a,b){var c=bw(a,150);bA(c),c.nud=typeof b=="function"?b:function(){this.right=bn(150),this.arity="unary";if(this.id==="++"||this.id==="--")A.plusplus?be("Unexpected use of '{a}'.",this,this.id):(!this.right.identifier||this.right.reserved)&&this.right.id!=="."&&this.right.id!=="["&&be("Bad operand.",this);return this};return c}function bA(a){var b=a.id.charAt(0);if(b>="a"&&b<="z"||b>="A"&&b<="Z")a.identifier=a.reserved=!0;return a}function bz(a,b){var c=by(a,b);c.block=!0;return c}function by(a,b){var c=bx(a);c.identifier=c.reserved=!0,c.fud=b;return c}function bx(a){return bw(a,0)}function bw(a,b){var c=M[a];if(!c||typeof c!="object")M[a]=c={id:a,lbp:b,value:a};return c}function bv(){O.line!==x.line?A.laxbreak||be("Bad line breaking before '{a}'.",O,x.id):O.character!==x.from&&A.white&&be("Unexpected space after '{a}'.",x,O.value),bm(","),br(O,x)}function bu(a){a=a||O,a.line!==x.line&&be("Line breaking error '{a}'.",a,a.value)}function bt(a){var b;A.white&&x.id!=="(end)"&&(b=p+(a||0),x.from!==b&&be("Expected '{a}' to have an indentation at {b} instead at {c}.",x,x.value,b,x.from))}function bs(a,b){a=a||O,b=b||x,!A.laxbreak&&a.line!==b.line?be("Bad line breaking before '{a}'.",b,b.id):A.white&&(a=a||O,b=b||x,a.character===b.from&&be("Missing space after '{a}'.",x,a.value))}function br(a,b){A.white&&(a=a||O,b=b||x,a.line===b.line&&a.character===b.from&&be("Missing space after '{a}'.",x,a.value))}function bq(a,b){a=a||O,b=b||x,A.white&&!a.comment&&a.line===b.line&&bo(a,b)}function bp(a,b){a=a||O,b=b||x,A.white&&(a.character!==b.from||a.line!==b.line)&&be("Unexpected space before '{a}'.",b,b.value)}function bo(a,b){a=a||O,b=b||x,A.white&&a.character!==b.from&&a.line===b.line&&be("Unexpected space after '{a}'.",b,a.value)}function bn(b,c){var d,e=!1;x.id==="(end)"&&bg("Unexpected early end of program.",O),bm(),c&&(a="anonymous",j["(verb)"]=O.value);if(c===!0&&O.fud)d=O.fud();else{if(O.nud)d=O.nud();else{if(x.type==="(number)"&&O.id==="."){be("A leading decimal point can be confused with a dot: '.{a}'.",O,x.value),bm();return O}bg("Expected an identifier and instead saw '{a}'.",O,O.id)}while(b<x.lbp)e=O.value=="Array",bm(),e&&O.id=="("&&x.id==")"&&be("Use the array literal notation [].",O),O.led?d=O.led(d):bg("Expected an operator and instead saw '{a}'.",O,O.id)}return d}function bm(b,c){switch(O.id){case"(number)":x.id==="."&&be("A dot following a number can be confused with a decimal point.",O);break;case"-":(x.id==="-"||x.id==="--")&&be("Confusing minusses.");break;case"+":(x.id==="+"||x.id==="++")&&be("Confusing plusses.")}if(O.type==="(string)"||O.identifier)a=O.value;b&&x.id!==b&&(c?x.id==="(end)"?be("Unmatched '{a}'.",c,c.id):be("Expected '{a}' to match '{b}' from line {c} and instead saw '{d}'.",x,b,c.id,c.line,x.value):(x.type!=="(identifier)"||x.value!==b)&&be("Expected '{a}' and instead saw '{b}'.",x,b,x.value)),D=O,O=x;for(;;){x=t.shift()||bi.token();if(x.id==="(end)"||x.id==="(error)")return;if(x.type==="special")bk();else if(x.id!=="(endline)")break}}function bl(a){var b=a||0,c=0,d;while(c<=b)d=t[c],d||(d=t[c]=bi.token()),c+=1;return d}function bk(){var a,b,d,e=x.value,f,g;switch(e){case"*/":bg("Unbegun comment.");break;case"/*members":case"/*member":e="/*members",v||(v={}),b=v;break;case"/*jshint":case"/*jslint":b=A,d=c;break;case"/*global":b=B;break;default:bg("What?")}f=bi.token();loop:for(;;){for(;;){if(f.type==="special"&&f.value==="*/")break loop;if(f.id!=="(endline)"&&f.id!==",")break;f=bi.token()}f.type!=="(string)"&&f.type!=="(identifier)"&&e!=="/*members"&&bg("Bad option.",f),g=bi.token(),g.id===":"?(g=bi.token(),b===v&&bg("Expected '{a}' and instead saw '{b}'.",f,"*/",":"),f.value!=="indent"||e!=="/*jshint"&&e!=="/*jslint"?f.value!=="maxerr"||e!=="/*jshint"&&e!=="/*jslint"?f.value!=="maxlen"||e!=="/*jshint"&&e!=="/*jslint"?g.value==="true"?b[f.value]=!0:g.value==="false"?b[f.value]=!1:bg("Bad option value.",g):(a=+g.value,(typeof a!="number"||!isFinite(a)||a<=0||Math.floor(a)!==a)&&bg("Expected a small integer and instead saw '{a}'.",g,g.value),b.maxlen=a):(a=+g.value,(typeof a!="number"||!isFinite(a)||a<=0||Math.floor(a)!==a)&&bg("Expected a small integer and instead saw '{a}'.",g,g.value),b.maxerr=a):(a=+g.value,(typeof a!="number"||!isFinite(a)||a<=0||Math.floor(a)!==a)&&bg("Expected a small integer and instead saw '{a}'.",g,g.value),b.white=!0,b.indent=a),f=bi.token()):((e==="/*jshint"||e==="/*jslint")&&bg("Missing option value.",f),b[f.value]=!1,f=g)}d&&bc()}function bj(a,b){a==="hasOwnProperty"&&be("'hasOwnProperty' is a really bad name."),ba(j,a)&&!j["(global)"]&&(j[a]===!0?A.latedef&&be("'{a}' was used before it was defined.",x,a):A.shadow||be("'{a}' is already defined.",x,a)),j[a]=b,j["(global)"]?(m[a]=j,ba(n,a)&&(A.latedef&&be("'{a}' was used before it was defined.",x,a),delete n[a])):G[a]=j}function bh(a,b,c,d,e,f,g){return bg(a,{line:b,from:c},d,e,f,g)}function bg(a,b,c,d,e,f){var g=be(a,b,c,d,e,f);bd("Stopping, unable to continue.",g.line,g.character)}function bf(a,b,c,d,e,f,g){return be(a,{line:b,from:c},d,e,f,g)}function be(a,b,c,e,f,g){var h,i,j;b=b||x,b.id==="(end)"&&(b=O),i=b.line||0,h=b.from||0,j={id:"(error)",raw:a,evidence:s[i-1]||"",line:i,character:h,a:c,b:e,c:f,d:g},j.reason=a.supplant(j),d.errors.push(j),A.passfail&&bd("Stopping. ",i,h),Q+=1,Q>=A.maxerr&&bd("Too many errors.",i,h);return j}function bd(a,b,c){var d=Math.floor(b/s.length*100);throw{name:"JSHintError",line:b,character:c,message:a+" ("+d+"% scanned)."}}function bc(){A.couch&&bb(B,f),A.rhino&&bb(B,F),A.prototypejs&&bb(B,E),A.node&&bb(B,y),A.devel&&bb(B,g),A.dojo&&bb(B,h),A.browser&&bb(B,e),A.jquery&&bb(B,r),A.mootools&&bb(B,w),A.wsh&&bb(B,R),A.globalstrict&&A.strict!==!1&&(A.strict=!0)}function bb(a,b){var c;for(c in b)ba(b,c)&&(a[c]=b[c])}function ba(a,b){return Object.prototype.hasOwnProperty.call(a,b)}function _(){}"use strict";var a,b={"<":!0,"<=":!0,"==":!0,"===":!0,"!==":!0,"!=":!0,">":!0,">=":!0,"+":!0,"-":!0,"*":!0,"/":!0,"%":!0},c={asi:!0,bitwise:!0,boss:!0,browser:!0,couch:!0,curly:!0,debug:!0,devel:!0,dojo:!0,eqeqeq:!0,eqnull:!0,es5:!0,evil:!0,expr:!0,forin:!0,globalstrict:!0,immed:!0,iterator:!0,jquery:!0,latedef:!0,laxbreak:!0,loopfunc:!0,mootools:!0,newcap:!0,noarg:!0,node:!0,noempty:!0,nonew:!0,nomen:!0,onevar:!0,passfail:!0,plusplus:!0,proto:!0,prototypejs:!0,regexdash:!0,regexp:!0,rhino:!0,undef:!0,scripturl:!0,shadow:!0,strict:!0,sub:!0,supernew:!0,trailing:!0,white:!0,wsh:!0},e={ArrayBuffer:!1,ArrayBufferView:!1,addEventListener:!1,applicationCache:!1,blur:!1,clearInterval:!1,clearTimeout:!1,close:!1,closed:!1,DataView:!1,defaultStatus:!1,document:!1,event:!1,FileReader:!1,Float32Array:!1,Float64Array:!1,focus:!1,frames:!1,getComputedStyle:!1,HTMLElement:!1,history:!1,Int16Array:!1,Int32Array:!1,Int8Array:!1,Image:!1,length:!1,localStorage:!1,location:!1,moveBy:!1,moveTo:!1,name:!1,navigator:!1,onbeforeunload:!0,onblur:!0,onerror:!0,onfocus:!0,onload:!0,onresize:!0,onunload:!0,open:!1,openDatabase:!1,opener:!1,Option:!1,parent:!1,print:!1,removeEventListener:!1,resizeBy:!1,resizeTo:!1,screen:!1,scroll:!1,scrollBy:!1,scrollTo:!1,setInterval:!1,setTimeout:!1,status:!1,top:!1,Uint16Array:!1,Uint32Array:!1,Uint8Array:!1,WebSocket:!1,window:!1,Worker:!1,XMLHttpRequest:!1,XPathEvaluator:!1,XPathException:!1,XPathExpression:!1,XPathNamespace:!1,XPathNSResolver:!1,XPathResult:!1},f={require:!1,respond:!1,getRow:!1,emit:!1,send:!1,start:!1,sum:!1,log:!1,exports:!1,module:!1},g={alert:!1,confirm:!1,console:!1,Debug:!1,opera:!1,prompt:!1},h={dojo:!1,dijit:!1,dojox:!1,define:!1,require:!1},i={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"/":"\\/","\\":"\\\\"},j,k=["closure","exception","global","label","outer","unused","var"],l,m,n,o,p,q,r={$:!1,jQuery:!1},s,t,u,v,w={$:!1,$$:!1,Assets:!1,Browser:!1,Chain:!1,Class:!1,Color:!1,Cookie:!1,Core:!1,Document:!1,DomReady:!1,DOMReady:!1,Drag:!1,Element:!1,Elements:!1,Event:!1,Events:!1,Fx:!1,Group:!1,Hash:!1,HtmlTable:!1,Iframe:!1,IframeShim:!1,InputValidator:!1,instanceOf:!1,Keyboard:!1,Locale:!1,Mask:!1,MooTools:!1,Native:!1,Options:!1,OverText:!1,Request:!1,Scroller:!1,Slick:!1,Slider:!1,Sortables:!1,Spinner:!1,Swiff:!1,Tips:!1,Type:!1,typeOf:!1,URI:!1,Window:!1},x,y={__filename:!1,__dirname:!1,exports:!1,Buffer:!1,GLOBAL:!1,global:!1,module:!1,process:!1,require:!1},z,A,B,C,D,E={$:!1,$$:!1,$A:!1,$F:!1,$H:!1,$R:!1,$break:!1,$continue:!1,$w:!1,Abstract:!1,Ajax:!1,Class:!1,Enumerable:!1,Element:!1,Event:!1,Field:!1,Form:!1,Hash:!1,Insertion:!1,ObjectRange:!1,PeriodicalExecuter:!1,Position:!1,Prototype:!1,Selector:!1,Template:!1,Toggle:!1,Try:!1,Autocompleter:!1,Builder:!1,Control:!1,Draggable:!1,Draggables:!1,Droppables:!1,Effect:!1,Sortable:!1,SortableObserver:!1,Sound:!1,Scriptaculous:!1},F={defineClass:!1,deserialize:!1,gc:!1,help:!1,load:!1,loadClass:!1,print:!1,quit:!1,readFile:!1,readUrl:!1,runCommand:!1,seal:!1,serialize:!1,spawn:!1,sync:!1,toint32:!1,version:!1},G,H,I,J={Array:!1,Boolean:!1,Date:!1,decodeURI:!1,decodeURIComponent:!1,encodeURI:!1,encodeURIComponent:!1,Error:!1,eval:!1,EvalError:!1,Function:!1,hasOwnProperty:!1,isFinite:!1,isNaN:!1,JSON:!1,Math:!1,Number:!1,Object:!1,parseInt:!1,parseFloat:!1,RangeError:!1,ReferenceError:!1,RegExp:!1,String:!1,SyntaxError:!1,TypeError:!1,URIError:!1},K={E:!0,LN2:!0,LN10:!0,LOG2E:!0,LOG10E:!0,MAX_VALUE:!0,MIN_VALUE:!0,NEGATIVE_INFINITY:!0,PI:!0,POSITIVE_INFINITY:!0,SQRT1_2:!0,SQRT2:!0},L,M={},N,O,P,Q,R={ActiveXObject:!0,Enumerator:!0,GetObject:!0,ScriptEngine:!0,ScriptEngineBuildVersion:!0,ScriptEngineMajorVersion:!0,ScriptEngineMinorVersion:!0,VBArray:!0,WSH:!0,WScript:!0},S,T,U,V,W,X,Y,Z,$;(function(){S=/@cc|<\/?|script|\]\s*\]|<\s*!|&lt/i,T=/[\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/,U=/^\s*([(){}\[.,:;'"~\?\]#@]|==?=?|\/(\*(jshint|jslint|members?|global)?|=|\/)?|\*[\/=]?|\+(?:=|\++)?|-(?:=|-+)?|%=?|&[&=]?|\|[|=]?|>>?>?=?|<([\/=!]|\!(\[|--)?|<=?)?|\^=?|\!=?=?|[a-zA-Z_$][a-zA-Z0-9_$]*|[0-9]+([xX][0-9a-fA-F]+|\.[0-9]*)?([eE][+\-]?[0-9]+)?)/,V=/[\u0000-\u001f&<"\/\\\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/,W=/[\u0000-\u001f&<"\/\\\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,X=/\*\/|\/\*/,Y=/^([a-zA-Z_$][a-zA-Z0-9_$]*)$/,Z=/^(?:javascript|jscript|ecmascript|vbscript|mocha|livescript)\s*:/i,$=/^\s*\/\*\s*falls\sthrough\s*\*\/\s*$/})(),typeof Array.isArray!="function"&&(Array.isArray=function(a){return Object.prototype.toString.apply(a)==="[object Array]"}),typeof Object.create!="function"&&(Object.create=function(a){_.prototype=a;return new _}),typeof Object.keys!="function"&&(Object.keys=function(a){var b=[],c;for(c in a)ba(a,c)&&b.push(c);return b}),typeof String.prototype.entityify!="function"&&(String.prototype.entityify=function(){return this.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}),typeof String.prototype.isAlpha!="function"&&(String.prototype.isAlpha=function(){return this>="a"&&this<="z￿"||this>="A"&&this<="Z￿"}),typeof String.prototype.isDigit!="function"&&(String.prototype.isDigit=function(){return this>="0"&&this<="9"}),typeof String.prototype.supplant!="function"&&(String.prototype.supplant=function(a){return this.replace(/\{([^{}]*)\}/g,function(b,c){var d=a[c];return typeof d=="string"||typeof d=="number"?d:b})}),typeof String.prototype.name!="function"&&(String.prototype.name=function(){return Y.test(this)?this:V.test(this)?'"'+this.replace(W,function(a){var b=i[a];return b?b:"\\u"+("0000"+a.charCodeAt().toString(16)).slice(-4)})+'"':'"'+this+'"'});var bi=function(){function f(d,e){var f,g;d==="(color)"||d==="(range)"?g={type:d}:d==="(punctuator)"||d==="(identifier)"&&ba(M,e)?g=M[e]||M["(error)"]:g=M[d],g=Object.create(g),(d==="(string)"||d==="(range)")&&!A.scripturl&&Z.test(e)&&bf("Script URL.",c,b),d==="(identifier)"&&(g.identifier=!0,e==="__proto__"&&!A.proto?bf("The '{a}' property is deprecated.",c,b,e):e==="__iterator__"&&!A.iterator?bf("'{a}' is only available in JavaScript 1.7.",c,b,e):A.nomen&&(e.charAt(0)==="_"||e.charAt(e.length-1)==="_")&&bf("Unexpected {a} in '{b}'.",c,b,"dangling '_'",e)),g.value=e,g.line=c,g.character=a,g.from=b,f=g.id,f!=="(endline)"&&(C=f&&("(,=:[!&|?{};".indexOf(f.charAt(f.length-1))>=0||f==="return"));return g}function e(){var b,e;if(c>=s.length)return!1;a=1,d=s[c],c+=1,b=d.search(/ \t/),b>=0&&bf("Mixed spaces and tabs.",c,b+1),d=d.replace(/\t/g,N),b=d.search(T),b>=0&&bf("Unsafe character.",c,b),A.maxlen&&A.maxlen<d.length&&bf("Line too long.",c,d.length),e=d.search(/\s+$/),A.trailing&&~e&&!~d.search(/^\s+$/)&&bf("Trailing whitespace.",c,e);return!0}var a,b,c,d;return{init:function(a){typeof a=="string"?s=a.replace(/\r\n/g,"\n").replace(/\r/g,"\n").split("\n"):s=a,s[0]&&s[0].substr(0,2)=="#!"&&(s[0]=""),c=0,e(),b=1},range:function(e,g){var h,i="";b=a,d.charAt(0)!==e&&bh("Expected '{a}' and instead saw '{b}'.",c,a,e,d.charAt(0));for(;;){d=d.slice(1),a+=1,h=d.charAt(0);switch(h){case"":bh("Missing '{a}'.",c,a,h);break;case g:d=d.slice(1),a+=1;return f("(range)",i);case"\\":bf("Unexpected '{a}'.",c,a,h)}i+=h}},token:function(){function t(g){function k(b){var e=parseInt(d.substr(i+1,b),16);i+=b,e>=32&&e<=126&&e!==34&&e!==92&&e!==39&&bf("Unnecessary escapement.",c,a),a+=b,h=String.fromCharCode(e)}var h,i,j="";q&&g!=='"'&&bf("Strings must use doublequote.",c,a),i=0;for(;;){while(i>=d.length)i=0,e()||bh("Unclosed string.",c,b);h=d.charAt(i);if(h===g){a+=1,d=d.substr(i+1);return f("(string)",j,g)}if(h<" "){if(h==="\n"||h==="\r")break;bf("Control character in string: {a}.",c,a+i,d.slice(0,i))}else if(h==="\\"){i+=1,a+=1,h=d.charAt(i);switch(h){case"\\":case'"':case"/":break;case"'":q&&bf("Avoid \\'.",c,a);break;case"b":h="\b";break;case"f":h="\f";break;case"n":h="\n";break;case"r":h="\r";break;case"t":h="\t";break;case"u":k(4);break;case"v":q&&bf("Avoid \\v.",c,a),h=" ";break;case"x":q&&bf("Avoid \\x-.",c,a),k(2);break;default:bf("Bad escapement.",c,a)}}j+=h,a+=1,i+=1}}function s(c){var e=c.exec(d),f;if(e){n=e[0].length,f=e[1],h=f.charAt(0),d=d.substr(n),b=a+n-f.length,a+=n;return f}}var g,h,i,j,k,l,m,n,o,p,r;for(;;){if(!d)return f(e()?"(endline)":"(end)","");r=s(U);if(!r){r="",h="";while(d&&d<"!")d=d.substr(1);d&&bh("Unexpected '{a}'.",c,a,d.substr(0,1))}else{if(h.isAlpha()||h==="_"||h==="$")return f("(identifier)",r);if(h.isDigit()){isFinite(Number(r))||bf("Bad number '{a}'.",c,a,r),d.substr(0,1).isAlpha()&&bf("Missing space after '{a}'.",c,a,r),h==="0"&&(j=r.substr(1,1),j.isDigit()?O.id!=="."&&bf("Don't use extra leading zeros '{a}'.",c,a,r):q&&(j==="x"||j==="X")&&bf("Avoid 0x-. '{a}'.",c,a,r)),r.substr(r.length-1)==="."&&bf("A trailing decimal point can be confused with a dot '{a}'.",c,a,r);return f("(number)",r)}switch(r){case'"':case"'":return t(r);case"//":H&&bf("Unexpected comment.",c,a),d="",O.comment=!0;break;case"/*":H&&bf("Unexpected comment.",c,a);for(;;){m=d.search(X);if(m>=0)break;e()||bh("Unclosed comment.",c,a)}a+=m+2,d.substr(m,1)==="/"&&bh("Nested comment.",c,a),d=d.substr(m+2),O.comment=!0;break;case"/*members":case"/*member":case"/*jshint":case"/*jslint":case"/*global":case"*/":return{value:r,type:"special",line:c,character:a,from:b};case"":break;case"/":O.id==="/="&&bh("A regular expression literal can be confused with '/='.",c,b);if(C){k=0,i=0,n=0;for(;;){g=!0,h=d.charAt(n),n+=1;switch(h){case"":bh("Unclosed regular expression.",c,b);return;case"/":k>0&&bf("Unescaped '{a}'.",c,b+n,"/"),h=d.substr(0,n-1),p={g:!0,i:!0,m:!0};while(p[d.charAt(n)]===!0)p[d.charAt(n)]=!1,n+=1;a+=n,d=d.substr(n),p=d.charAt(0),(p==="/"||p==="*")&&bh("Confusing regular expression.",c,b);return f("(regexp)",h);case"\\":h=d.charAt(n),h<" "?bf("Unexpected control character in regular expression.",c,b+n):h==="<"&&bf("Unexpected escaped character '{a}' in regular expression.",c,b+n,h),n+=1;break;case"(":k+=1,g=!1;if(d.charAt(n)==="?"){n+=1;switch(d.charAt(n)){case":":case"=":case"!":n+=1;break;default:bf("Expected '{a}' and instead saw '{b}'.",c,b+n,":",d.charAt(n))}}else i+=1;break;case"|":g=!1;break;case")":k===0?bf("Unescaped '{a}'.",c,b+n,")"):k-=1;break;case" ":p=1;while(d.charAt(n)===" ")n+=1,p+=1;p>1&&bf("Spaces are hard to count. Use {{a}}.",c,b+n,p);break;case"[":h=d.charAt(n),h==="^"&&(n+=1,A.regexp?bf("Insecure '{a}'.",c,b+n,h):d.charAt(n)==="]"&&bh("Unescaped '{a}'.",c,b+n,"^")),p=!1,h==="]"&&(bf("Empty class.",c,b+n-1),p=!0);klass:do{h=d.charAt(n),n+=1;switch(h){case"[":case"^":bf("Unescaped '{a}'.",c,b+n,h),p=!0;break;case"-":p?p=!1:(bf("Unescaped '{a}'.",c,b+n,"-"),p=!0);break;case"]":!p&&!A.regexdash&&bf("Unescaped '{a}'.",c,b+n-1,"-");break klass;case"\\":h=d.charAt(n),h<" "?bf("Unexpected control character in regular expression.",c,b+n):h==="<"&&bf("Unexpected escaped character '{a}' in regular expression.",c,b+n,h),n+=1,p=!0;break;case"/":bf("Unescaped '{a}'.",c,b+n-1,"/"),p=!0;break;case"<":p=!0;break;default:p=!0}}while(h);break;case".":A.regexp&&bf("Insecure '{a}'.",c,b+n,h);break;case"]":case"?":case"{":case"}":case"+":case"*":bf("Unescaped '{a}'.",c,b+n,h)}if(g)switch(d.charAt(n)){case"?":case"+":case"*":n+=1,d.charAt(n)==="?"&&(n+=1);break;case"{":n+=1,h=d.charAt(n),(h<"0"||h>"9")&&bf("Expected a number and instead saw '{a}'.",c,b+n,h),n+=1,o=+h;for(;;){h=d.charAt(n);if(h<"0"||h>"9")break;n+=1,o=+h+o*10}l=o;if(h===","){n+=1,l=Infinity,h=d.charAt(n);if(h>="0"&&h<="9"){n+=1,l=+h;for(;;){h=d.charAt(n);if(h<"0"||h>"9")break;n+=1,l=+h+l*10}}}d.charAt(n)!=="}"?bf("Expected '{a}' and instead saw '{b}'.",c,b+n,"}",h):n+=1,d.charAt(n)==="?"&&(n+=1),o>l&&bf("'{a}' should not be greater than '{b}'.",c,b+n,o,l)}}h=d.substr(0,n-1),a+=n,d=d.substr(n);return f("(regexp)",h)}return f("(punctuator)",r);case"#":return f("(punctuator)",r);default:return f("(punctuator)",r)}}}}}}();bC("(number)",function(){return this}),bC("(string)",function(){return this}),M["(identifier)"]={type:"(identifier)",lbp:0,identifier:!0,nud:function(){var b=this.value,c=G[b],d;typeof c=="function"?c=undefined:typeof c=="boolean"&&(d=j,j=l[0],bj(b,"var"),c=j,j=d);if(j===c)switch(j[b]){case"unused":j[b]="var";break;case"unction":j[b]="function",this["function"]=!0;break;case"function":this["function"]=!0;break;case"label":be("'{a}' is a statement label.",O,b)}else if(j["(global)"])a!="typeof"&&a!="delete"&&A.undef&&typeof B[b]!="boolean"&&be("'{a}' is not defined.",O,b),bU(O);else switch(j[b]){case"closure":case"function":case"var":case"unused":be("'{a}' used out of scope.",O,b);break;case"label":be("'{a}' is a statement label.",O,b);break;case"outer":case"global":break;default:if(c===!0)j[b]=!0;else if(c===null)be("'{a}' is not allowed.",O,b),bU(O);else if(typeof c!="object")a!="typeof"&&a!="delete"&&A.undef?be("'{a}' is not defined.",O,b):j[b]=!0,bU(O);else switch(c[b]){case"function":case"unction":this["function"]=!0,c[b]="closure",j[b]=c["(global)"]?"global":"outer";break;case"var":case"unused":c[b]="closure",j[b]=c["(global)"]?"global":"outer";break;case"closure":case"parameter":j[b]=c["(global)"]?"global":"outer";break;case"label":be("'{a}' is a statement label.",O,b)}}return this},led:function(){bg("Expected an operator and instead saw '{a}'.",x,x.value)}},bC("(regexp)",function(){return this}),bx("(endline)"),bx("(begin)"),bx("(end)").reach=!0,bx("</").reach=!0,bx("<!"),bx("<!--"),bx("-->"),bx("(error)").reach=!0,bx("}").reach=!0,bx(")"),bx("]"),bx('"').reach=!0,bx("'").reach=!0,bx(";"),bx(":").reach=!0,bx(","),bx("#"),bx("@"),bD("else"),bD("case").reach=!0,bD("catch"),bD("default").reach=!0,bD("finally"),bE("arguments",function(a){L&&j["(global)"]&&be("Strict violation.",a)}),bE("eval"),bE("false"),bE("Infinity"),bE("NaN"),bE("null"),bE("this",function(a){L&&(j["(statement)"]&&j["(name)"].charAt(0)>"Z"||j["(global)"])&&be("Strict violation.",a)}),bE("true"),bE("undefined"),bI("=","assign",20),bI("+=","assignadd",20),bI("-=","assignsub",20),bI("*=","assignmult",20),bI("/=","assigndiv",20).nud=function(){bg("A regular expression literal can be confused with '/='.")},bI("%=","assignmod",20),bK("&=","assignbitand",20),bK("|=","assignbitor",20),bK("^=","assignbitxor",20),bK("<<=","assignshiftleft",20),bK(">>=","assignshiftright",20),bK(">>>=","assignshiftrightunsigned",20),bF("?",function(a,b){b.left=a,b.right=bn(10),bm(":"),b["else"]=bn(10);return b},30),bF("||","or",40),bF("&&","and",50),bJ("|","bitor",70),bJ("^","bitxor",80),bJ("&","bitand",90),bG("==",function(a,b){var c=A.eqnull&&(a.value=="null"||b.value=="null");!c&&A.eqeqeq?be("Expected '{a}' and instead saw '{b}'.",this,"===","=="):bH(a)?be("Use '{a}' to compare with '{b}'.",this,"===",a.value):bH(b)&&be("Use '{a}' to compare with '{b}'.",this,"===",b.value);return this}),bG("==="),bG("!=",function(a,b){var c=A.eqnull&&(a.value=="null"||b.value=="null");!c&&A.eqeqeq?be("Expected '{a}' and instead saw '{b}'.",this,"!==","!="):bH(a)?be("Use '{a}' to compare with '{b}'.",this,"!==",a.value):bH(b)&&be("Use '{a}' to compare with '{b}'.",this,"!==",b.value);return this}),bG("!=="),bG("<"),bG(">"),bG("<="),bG(">="),bJ("<<","shiftleft",120),bJ(">>","shiftright",120),bJ(">>>","shiftrightunsigned",120),bF("in","in",120),bF("instanceof","instanceof",120),bF("+",function(a,b){var c=bn(130);if(a&&c&&a.id==="(string)"&&c.id==="(string)"){a.value+=c.value,a.character=c.character,!A.scripturl&&Z.test(a.value)&&be("JavaScript URL.",a);return a}b.left=a,b.right=c;return b},130),bB("+","num"),bB("+++",function(){be("Confusing pluses."),this.right=bn(150),this.arity="unary";return this}),bF("+++",function(a){be("Confusing pluses."),this.left=a,this.right=bn(130);return this},130),bF("-","sub",130),bB("-","neg"),bB("---",function(){be("Confusing minuses."),this.right=bn(150),this.arity="unary";return this}),bF("---",function(a){be("Confusing minuses."),this.left=a,this.right=bn(130);return this},130),bF("*","mult",140),bF("/","div",140),bF("%","mod",140),bL("++","postinc"),bB("++","preinc"),M["++"].exps=!0,bL("--","postdec"),bB("--","predec"),M["--"].exps=!0,bB("delete",function(){var a=bn(0);(!a||a.id!=="."&&a.id!=="[")&&be("Variables should not be deleted."),this.first=a;return this}).exps=!0,bB("~",function(){A.bitwise&&be("Unexpected '{a}'.",this,"~"),bn(150);return this}),bB("!",function(){this.right=bn(150),this.arity="unary",b[this.right.id]===!0&&be("Confusing use of '{a}'.",this,"!");return this}),bB("typeof","typeof"),bB("new",function(){var a=bn(155),b;if(a&&a.id!=="function")if(a.identifier){a["new"]=!0;switch(a.value){case"Object":be("Use the object literal notation {}.",O);break;case"Number":case"String":case"Boolean":case"Math":case"JSON":be("Do not use {a} as a constructor.",O,a.value);break;case"Function":A.evil||be("The Function constructor is eval.");break;case"Date":case"RegExp":break;default:a.id!=="function"&&(b=a.value.substr(0,1),A.newcap&&(b<"A"||b>"Z")&&be("A constructor name should start with an uppercase letter.",O))}}else a.id!=="."&&a.id!=="["&&a.id!=="("&&be("Bad constructor.",O);else A.supernew||be("Weird construction. Delete 'new'.",this);bo(O,x),x.id!=="("&&!A.supernew&&be("Missing '()' invoking a constructor."),this.first=a;return this}),M["new"].exps=!0,bB("void").exps=!0,bF(".",function(a,b){bo(D,O),bp();var c=bN();typeof c=="string"&&bT(c),b.left=a,b.right=c,A.noarg&&a&&a.value==="arguments"&&(c==="callee"||c==="caller")?be("Avoid arguments.{a}.",a,c):!A.evil&&a&&a.value==="document"&&(c==="write"||c==="writeln")&&be("document.write can be a form of eval.",a),!A.evil&&(c==="eval"||c==="execScript")&&be("eval is evil.");return b},160,!0),bF("(",function(a,b){D.id!=="}"&&D.id!==")"&&bp(D,O),bq(),A.immed&&!a.immed&&a.id==="function"&&be("Wrap an immediate function invocation in parentheses to assist the reader in understanding that the expression is the result of a function, and not the function itself.");var c=0,d=[];a&&a.type==="(identifier)"&&a.value.match(/^[A-Z]([A-Z0-9_$]*[a-z][A-Za-z0-9_$]*)?$/)&&a.value!=="Number"&&a.value!=="String"&&a.value!=="Boolean"&&a.value!=="Date"&&(a.value==="Math"?be("Math is not a function.",a):A.newcap&&be("Missing 'new' prefix when invoking a constructor.",a));if(x.id!==")")for(;;){d[d.length]=bn(10),c+=1;if(x.id!==",")break;bv()}bm(")"),bq(D,O),typeof a=="object"&&(a.value==="parseInt"&&c===1&&be("Missing radix parameter.",a),A.evil||(a.value==="eval"||a.value==="Function"||a.value==="execScript"?be("eval is evil.",a):d[0]&&d[0].id==="(string)"&&(a.value==="setTimeout"||a.value==="setInterval")&&be("Implied eval is evil. Pass a function instead of a string.",a)),!a.identifier&&a.id!=="."&&a.id!=="["&&a.id!=="("&&a.id!=="&&"&&a.id!=="||"&&a.id!=="?"&&be("Bad invocation.",a)),b.left=a;return b},155,!0).exps=!0,bB("(",function(){bq(),x.id==="function"&&(x.immed=!0);var a=bn(0);bm(")",this),bq(D,O),A.immed&&a.id==="function"&&(x.id==="("?be("Move the invocation into the parens that contain the function.",x):be("Do not wrap function literals in parens unless they are to be immediately invoked.",this));return a}),bF("[",function(a,b){bp(D,O),bq();var c=bn(0),d;c&&c.type==="(string)"&&(!A.evil&&(c.value==="eval"||c.value==="execScript")&&be("eval is evil.",b),bT(c.value),!A.sub&&Y.test(c.value)&&(d=M[c.value],(!d||!d.reserved)&&be("['{a}'] is better written in dot notation.",c,c.value))),bm("]",b),bq(D,O),b.left=a,b.right=c;return b},160,!0),bB("[",function(){var a=O.line!==x.line;this.first=[],a&&(p+=A.indent,x.from===p+A.indent&&(p+=A.indent));while(x.id!=="(end)"){while(x.id===",")be("Extra comma."),bm(",");if(x.id==="]")break;a&&O.line!==x.line&&bt(),this.first.push(bn(10));if(x.id!==",")break;bv();if(x.id==="]"&&!A.es5){be("Extra comma.",O);break}}a&&(p-=A.indent,bt()),bm("]",this);return this},160),function(a){a.nud=function(){var a,b,c,d,e,f={},g;a=O.line!==x.line,a&&(p+=A.indent,x.from===p+A.indent&&(p+=A.indent));for(;;){if(x.id==="}")break;a&&bt();if(x.value==="get"&&bl().id!==":")bm("get"),A.es5||bg("get/set are ES5 features."),c=bV(),c||bg("Missing property name."),g=x,bo(O,x),b=bX(),!A.loopfunc&&j["(loopage)"]&&be("Don't make functions within a loop.",g),e=b["(params)"],e&&be("Unexpected parameter '{a}' in get {b} function.",g,e[0],c),bo(O,x),bm(","),bt(),bm("set"),d=bV(),c!==d&&bg("Expected {a} and instead saw {b}.",O,c,d),g=x,bo(O,x),b=bX(),e=b["(params)"],(!e||e.length!==1||e[0]!=="value")&&be("Expected (value) in set {a} function.",g,c);else{c=bV();if(typeof c!="string")break;bm(":"),br(O,x),bn(10)}f[c]===!0&&be("Duplicate member '{a}'.",x,c),f[c]=!0,bT(c);if(x.id===",")bv(),x.id===","?be("Extra comma.",O):x.id==="}"&&!A.es5&&be("Extra comma.",O);else break}a&&(p-=A.indent,bt()),bm("}",this);return this},a.fud=function(){bg("Expected to see a statement and instead saw a block.",O)}}(bx("{"));var bY=by("var",function(a){var b,c,d;j["(onevar)"]&&A.onevar?be("Too many var statements."):j["(global)"]||(j["(onevar)"]=!0),this.first=[];for(;;){br(O,x),b=bN(),j["(global)"]&&B[b]===!1&&be("Redefinition of '{a}'.",O,b),bj(b,"unused");if(a)break;c=O,this.first.push(O),x.id==="="&&(br(O,x),bm("="),br(O,x),x.id==="undefined"&&be("It is not necessary to initialize '{a}' to 'undefined'.",O,b),bl(0).id==="="&&x.identifier&&bg("Variable {a} was not declared correctly.",x,x.value),d=bn(0),c.first=d);if(x.id!==",")break;bv()}return this});bY.exps=!0,bz("function",function(){o&&be("Function declarations should not be placed in blocks. Use a function expression or move the statement to the top of the outer function.",O);var a=bN();bo(O,x),bj(a,"unction"),bX(a,!0),x.id==="("&&x.line===O.line&&bg("Function declarations are not invocable. Wrap the whole function invocation in parens.");return this}),bB("function",function(){var a=bM();a?bo(O,x):br(O,x),bX(a),!A.loopfunc&&j["(loopage)"]&&be("Don't make functions within a loop.");return this}),bz("if",function(){var a=x;bm("("),br(this,a),bq(),bn(20),x.id==="="&&(A.boss||be("Expected a conditional expression and instead saw an assignment."),bm("="),bn(20)),bm(")",a),bq(D,O),bS(!0,!0),x.id==="else"&&(br(O,x),bm("else"),x.id==="if"||x.id==="switch"?bP(!0):bS(!0,!0));return this}),bz("try",function(){var a,b,c;bS(!1),x.id==="catch"&&(bm("catch"),br(O,x),bm("("),c=G,G=Object.create(c),b=x.value,x.type!=="(identifier)"?be("Expected an identifier and instead saw '{a}'.",x,b):bj(b,"exception"),bm(),bm(")"),bS(!1),a=!0,G=c);if(x.id==="finally")bm("finally"),bS(!1);else{a||bg("Expected '{a}' and instead saw '{b}'.",x,"catch",x.value);return this}}),bz("while",function(){var a=x;j["(breakage)"]+=1,j["(loopage)"]+=1,bm("("),br(this,a),bq(),bn(20),x.id==="="&&(A.boss||be("Expected a conditional expression and instead saw an assignment."),bm("="),bn(20)),bm(")",a),bq(D,O),bS(!0,!0),j["(breakage)"]-=1,j["(loopage)"]-=1;return this}).labelled=!0,bD("with"),bz("switch",function(){var a=x,b=!1;j["(breakage)"]+=1,bm("("),br(this,a),bq(),this.condition=bn(20),bm(")",a),bq(D,O),br(O,x),a=x,bm("{"),br(O,x),p+=A.indent,this.cases=[];for(;;)switch(x.id){case"case":switch(j["(verb)"]){case"break":case"case":case"continue":case"return":case"switch":case"throw":break;default:$.test(s[x.line-2])||be("Expected a 'break' statement before 'case'.",O)}bt(-A.indent),bm("case"),this.cases.push(bn(20)),b=!0,bm(":"),j["(verb)"]="case";break;case"default":switch(j["(verb)"]){case"break":case"continue":case"return":case"throw":break;default:$.test(s[x.line-2])||be("Expected a 'break' statement before 'default'.",O)}bt(-A.indent),bm("default"),b=!0,bm(":");break;case"}":p-=A.indent,bt(),bm("}",a),(this.cases.length===1||this.condition.id==="true"||this.condition.id==="false")&&be("This 'switch' should be an 'if'.",this),j["(breakage)"]-=1,j["(verb)"]=undefined;return;case"(end)":bg("Missing '{a}'.",x,"}");return;default:if(b)switch(O.id){case",":bg("Each value should have its own case label.");return;case":":bR();break;default:bg("Missing ':' on a case clause.",O)}else bg("Expected '{a}' and instead saw '{b}'.",x,"case",x.value)}}).labelled=!0,by("debugger",function(){A.debug||be("All 'debugger' statements should be removed.");return this}).exps=!0,function(){var a=by("do",function(){j["(breakage)"]+=1,j["(loopage)"]+=1,this.first=bS(!0),bm("while");var a=x;br(O,a),bm("("),bq(),bn(20),x.id==="="&&(A.boss||be("Expected a conditional expression and instead saw an assignment."),bm("="),bn(20)),bm(")",a),bq(D,O),j["(breakage)"]-=1,j["(loopage)"]-=1;return this});a.labelled=!0,a.exps=!0}(),bz("for",function(){var a,b=x;j["(breakage)"]+=1,j["(loopage)"]+=1,bm("("),br(this,b),bq();if(bl(x.id==="var"?1:0).id==="in"){if(x.id==="var")bm("var"),bY.fud.call(bY,!0);else{switch(j[x.value]){case"unused":j[x.value]="var";break;case"var":break;default:be("Bad for in variable '{a}'.",x,x.value)}bm()}bm("in"),bn(20),bm(")",b),a=bS(!0,!0),A.forin&&(a.length>1||typeof a[0]!="object"||a[0].value!=="if")&&be("The body of a for in should be wrapped in an if statement to filter unwanted properties from the prototype.",this),j["(breakage)"]-=1,j["(loopage)"]-=1;return this}if(x.id!==";")if(x.id==="var")bm("var"),bY.fud.call(bY);else for(;;){bn(0,"for");if(x.id!==",")break;bv()}bu(O),bm(";"),x.id!==";"&&(bn(20),x.id==="="&&(A.boss||be("Expected a conditional expression and instead saw an assignment."),bm("="),bn(20))),bu(O),bm(";"),x.id===";"&&bg("Expected '{a}' and instead saw '{b}'.",x,")",";");if(x.id!==")")for(;;){bn(0,"for");if(x.id!==",")break;bv()}bm(")",b),bq(D,O),bS(!0,!0),j["(breakage)"]-=1,j["(loopage)"]-=1;return this}).labelled=!0,by("break",function(){var a=x.value;j["(breakage)"]===0&&be("Unexpected '{a}'.",x,this.value),bu(this),x.id!==";"&&O.line===x.line&&(j[a]!=="label"?be("'{a}' is not a statement label.",x,a):G[a]!==j&&be("'{a}' is out of scope.",x,a),this.first=x,bm()),bO("break");return this}).exps=!0,by("continue",function(){var a=x.value;j["(breakage)"]===0&&be("Unexpected '{a}'.",x,this.value),bu(this),x.id!==";"?O.line===x.line&&(j[a]!=="label"?be("'{a}' is not a statement label.",x,a):G[a]!==j&&be("'{a}' is out of scope.",x,a),this.first=x,bm()):j["(loopage)"]||be("Unexpected '{a}'.",x,this.value),bO("continue");return this}).exps=!0,by("return",function(){bu(this),x.id==="(regexp)"&&be("Wrap the /regexp/ literal in parens to disambiguate the slash operator."),x.id!==";"&&!x.reach&&(br(O,x),this.first=bn(20)),bO("return");return this}).exps=!0,by("throw",function(){bu(this),br(O,x),this.first=bn(20),bO("throw");return this}).exps=!0,bD("class"),bD("const"),bD("enum"),bD("export"),bD("extends"),bD("import"),bD("super"),bD("let"),bD("yield"),bD("implements"),bD("interface"),bD("package"),bD("private"),bD("protected"),bD("public"),bD("static");var b$=function(a,b,c){var e,f,g;d.errors=[],B=Object.create(J),bb(B,c||{});if(b){e=b.predef;if(e)if(Array.isArray(e))for(f=0;f<e.length;f+=1)B[e[f]]=!0;else if(typeof e=="object"){g=Object.keys(e);for(f=0;f<g.length;f+=1)B[g[f]]=!!e[g[f]]}A=b}else A={};A.indent=A.indent||4,A.maxerr=A.maxerr||50,N="";for(f=0;f<A.indent;f+=1)N+=" ";p=1,m=Object.create(B),G=m,j={"(global)":!0,"(name)":"(global)","(scope)":G,"(breakage)":0,"(loopage)":0},l=[j],P=[],H=!1,I=null,u={},v=null,n={},o=!1,t=[],q=!1,Q=0,bi.init(a),C=!0,L=!1,D=O=x=M["(begin)"],bc();try{bm();switch(x.id){case"{":case"[":A.laxbreak=!0,q=!0,bZ();break;default:x.value==="use strict"&&(A.globalstrict||be('Use the function form of "use strict".'),bQ()),bR("lib")}bm("(end)")}catch(h){h&&d.errors.push({reason:h.message,line:h.line||x.line,character:h.character||x.from},null)}return d.errors.length===0};b$.data=function(){var a={functions:[]},b,c,d=[],e,f,g,h=[],i,j=[],m;b$.errors.length&&(a.errors=b$.errors),q&&(a.json=!0);for(i in n)ba(n,i)&&d.push({name:i,line:n[i]});d.length>0&&(a.implieds=d),P.length>0&&(a.urls=P),c=Object.keys(G),c.length>0&&(a.globals=c);for(f=1;f<l.length;f+=1){e=l[f],b={};for(g=0;g<k.length;g+=1)b[k[g]]=[];for(i in e)ba(e,i)&&i.charAt(0)!=="("&&(m=e[i],m==="unction"&&(m="unused"),Array.isArray(b[m])&&(b[m].push(i),m==="unused"&&j.push({name:i,line:e["(line)"],"function":e["(name)"]})));for(g=0;g<k.length;g+=1)b[k[g]].length===0&&delete b[k[g]];b.name=e["(name)"],b.param=e["(params)"],b.line=e["(line)"],b.last=e["(last)"],a.functions.push(b)}j.length>0&&(a.unused=j),h=[];for(i in u)if(typeof u[i]=="number"){a.member=u;break}return a},b$.report=function(a){function o(a,b){var c,d,e;if(b){m.push("<div><i>"+a+"</i> "),b=b.sort();for(d=0;d<b.length;d+=1)b[d]!==e&&(e=b[d],m.push((c?", ":"")+e),c=!0);m.push("</div>")}}var b=b$.data(),c=[],d,e,f,g,h,i,j,k="",l,m=[],n;if(b.errors||b.implieds||b.unused){f=!0,m.push("<div id=errors><i>Error:</i>");if(b.errors)for(h=0;h<b.errors.length;h+=1)d=b.errors[h],d&&(e=d.evidence||"",m.push("<p>Problem"+(isFinite(d.line)?" at line "+d.line+" character "+d.character:"")+": "+d.reason.entityify()+"</p><p class=evidence>"+(e&&(e.length>80?e.slice(0,77)+"...":e).entityify())+"</p>"));if(b.implieds){n=[];for(h=0;h<b.implieds.length;h+=1)n[h]="<code>"+b.implieds[h].name+"</code>&nbsp;<i>"+b.implieds[h].line+"</i>";m.push("<p><i>Implied global:</i> "+n.join(", ")+"</p>")}if(b.unused){n=[];for(h=0;h<b.unused.length;h+=1)n[h]="<code><u>"+b.unused[h].name+"</u></code>&nbsp;<i>"+b.unused[h].line+"</i> <code>"+b.unused[h]["function"]+"</code>";m.push("<p><i>Unused variable:</i> "+n.join(", ")+"</p>")}b.json&&m.push("<p>JSON: bad.</p>"),m.push("</div>")}if(!a){m.push("<br><div id=functions>"),b.urls&&o("URLs<br>",b.urls,"<br>"),b.json&&!f?m.push("<p>JSON: good.</p>"):b.globals?m.push("<div><i>Global</i> "+b.globals.sort().join(", ")+"</div>"):m.push("<div><i>No new global variables introduced.</i></div>");for(h=0;h<b.functions.length;h+=1)g=b.functions[h],m.push("<br><div class=function><i>"+g.line+"-"+g.last+"</i> "+(g.name||"")+"("+(g.param?g.param.join(", "):"")+")</div>"),o("<big><b>Unused</b></big>",g.unused),o("Closure",g.closure),o("Variable",g["var"]),o("Exception",g.exception),o("Outer",g.outer),o("Global",g.global),o("Label",g.label);if(b.member){c=Object.keys(b.member);if(c.length){c=c.sort(),k="<br><pre id=members>/*members ",j=10;for(h=0;h<c.length;h+=1)i=c[h],l=i.name(),j+l.length>72&&(m.push(k+"<br>"),k=" ",j=1),j+=l.length+2,b.member[i]===1&&(l="<i>"+l+"</i>"),h<c.length-1&&(l+=", "),k+=l;m.push(k+"<br>*/</pre>")}m.push("</div>")}}return m.join("")},b$.jshint=b$,b$.edition="2011-04-16";return b$}();typeof b=="object"&&b&&(b.JSHINT=d)}),define("ace/narcissus/jsparse",["require","exports","module","ace/narcissus/jslex","ace/narcissus/jsdefs"],function(require,exports,module){function parseStdin(a,b){for(;;)try{var c=new lexer.Tokenizer(a,"stdin",b.value),d=Script(c,!1);b.value=c.lineno;return d}catch(e){if(!c.unexpectedEOF)throw e;var f=readline();if(!f)throw e;a+="\n"+f}}function parse(a,b,c){var d=new lexer.Tokenizer(a,b,c),e=Script(d,!1);if(!d.done)throw d.newSyntaxError("Syntax error");return e}function PrimaryExpression(a,b){var c,d,e=a.get(!0);switch(e){case FUNCTION:c=FunctionDefinition(a,b,!1,EXPRESSED_FORM);break;case LEFT_BRACKET:c=new Node(a,{type:ARRAY_INIT});while((e=a.peek(!0))!==RIGHT_BRACKET){if(e===COMMA){a.get(),c.push(null);continue}c.push(AssignExpression(a,b));if(e!==COMMA&&!a.match(COMMA))break}c.children.length===1&&a.match(FOR)&&(d=new Node(a,{type:ARRAY_COMP,expression:c.children[0],tail:ComprehensionTail(a,b)}),c=d),a.mustMatch(RIGHT_BRACKET);break;case LEFT_CURLY:var f,g;c=new Node(a,{type:OBJECT_INIT});object_init:if(!a.match(RIGHT_CURLY)){do{e=a.get();if(a.token.value!=="get"&&a.token.value!=="set"||a.peek()!==IDENTIFIER){switch(e){case IDENTIFIER:case NUMBER:case STRING:f=new Node(a,{type:IDENTIFIER});break;case RIGHT_CURLY:if(b.ecma3OnlyMode)throw a.newSyntaxError("Illegal trailing ,");break object_init;default:if(a.token.value in definitions.keywords){f=new Node(a,{type:IDENTIFIER});break}throw a.newSyntaxError("Invalid property name")}if(a.match(COLON))d=new Node(a,{type:PROPERTY_INIT}),d.push(f),d.push(AssignExpression(a,b)),c.push(d);else{if(a.peek()!==COMMA&&a.peek()!==RIGHT_CURLY)throw a.newSyntaxError("missing : after property");c.push(f)}}else{if(b.ecma3OnlyMode)throw a.newSyntaxError("Illegal property accessor");c.push(FunctionDefinition(a,b,!0,EXPRESSED_FORM))}}while(a.match(COMMA));a.mustMatch(RIGHT_CURLY)}break;case LEFT_PAREN:c=ParenExpression(a,b),a.mustMatch(RIGHT_PAREN),c.parenthesized=!0;break;case LET:c=LetBlock(a,b,!1);break;case NULL:case THIS:case TRUE:case FALSE:case IDENTIFIER:case NUMBER:case STRING:case REGEXP:c=new Node(a);break;default:throw a.newSyntaxError("missing operand")}return c}function ArgumentList(a,b){var c,d;c=new Node(a,{type:LIST});if(a.match(RIGHT_PAREN,!0))return c;do{d=AssignExpression(a,b);if(d.type===YIELD&&!d.parenthesized&&a.peek()===COMMA)throw a.newSyntaxError("Yield expression must be parenthesized");if(a.match(FOR)){d=GeneratorExpression(a,b,d);if(c.children.length>1||a.peek(!0)===COMMA)throw a.newSyntaxError("Generator expression must be parenthesized")}c.push(d)}while(a.match(COMMA));a.mustMatch(RIGHT_PAREN);return c}function MemberExpression(a,b,c){var d,e,f,g;a.match(NEW)?(d=new Node(a),d.push(MemberExpression(a,b,!1)),a.match(LEFT_PAREN)&&(d.type=NEW_WITH_ARGS,d.push(ArgumentList(a,b)))):d=PrimaryExpression(a,b);while((g=a.get())!==END){switch(g){case DOT:e=new Node(a),e.push(d),a.mustMatch(IDENTIFIER),e.push(new Node(a));break;case LEFT_BRACKET:e=new Node(a,{type:INDEX}),e.push(d),e.push(Expression(a,b)),a.mustMatch(RIGHT_BRACKET);break;case LEFT_PAREN:if(c){e=new Node(a,{type:CALL}),e.push(d),e.push(ArgumentList(a,b));break};default:a.unget();return d}d=e}return d}function UnaryExpression(a,b){var c,d,e;switch(e=a.get(!0)){case DELETE:case VOID:case TYPEOF:case NOT:case BITWISE_NOT:case PLUS:case MINUS:e===PLUS?c=new Node(a,{type:UNARY_PLUS}):e===MINUS?c=new Node(a,{type:UNARY_MINUS}):c=new Node(a),c.push(UnaryExpression(a,b));break;case INCREMENT:case DECREMENT:c=new Node(a),c.push(MemberExpression(a,b,!0));break;default:a.unget(),c=MemberExpression(a,b,!0),a.tokens[a.tokenIndex+a.lookahead-1&3].lineno===a.lineno&&(a.match(INCREMENT)||a.match(DECREMENT))&&(d=new Node(a,{postfix:!0}),d.push(c),c=d)}return c}function MultiplyExpression(a,b){var c,d;c=UnaryExpression(a,b);while(a.match(MUL)||a.match(DIV)||a.match(MOD))d=new Node(a),d.push(c),d.push(UnaryExpression(a,b)),c=d;return c}function AddExpression(a,b){var c,d;c=MultiplyExpression(a,b);while(a.match(PLUS)||a.match(MINUS))d=new Node(a),d.push(c),d.push(MultiplyExpression(a,b)),c=d;return c}function ShiftExpression(a,b){var c,d;c=AddExpression(a,b);while(a.match(LSH)||a.match(RSH)||a.match(URSH))d=new Node(a),d.push(c),d.push(AddExpression(a,b)),c=d;return c}function RelationalExpression(a,b){var c,d,e=b.update({inForLoopInit:!1});c=ShiftExpression(a,e);while(a.match(LT)||a.match(LE)||a.match(GE)||a.match(GT)||!b.inForLoopInit&&a.match(IN)||a.match(INSTANCEOF))d=new Node(a),d.push(c),d.push(ShiftExpression(a,e)),c=d;return c}function EqualityExpression(a,b){var c,d;c=RelationalExpression(a,b);while(a.match(EQ)||a.match(NE)||a.match(STRICT_EQ)||a.match(STRICT_NE))d=new Node(a),d.push(c),d.push(RelationalExpression(a,b)),c=d;return c}function BitwiseAndExpression(a,b){var c,d;c=EqualityExpression(a,b);while(a.match(BITWISE_AND))d=new Node(a),d.push(c),d.push(EqualityExpression(a,b)),c=d;return c}function BitwiseXorExpression(a,b){var c,d;c=BitwiseAndExpression(a,b);while(a.match(BITWISE_XOR))d=new Node(a),d.push(c),d.push(BitwiseAndExpression(a,b)),c=d;return c}function BitwiseOrExpression(a,b){var c,d;c=BitwiseXorExpression(a,b);while(a.match(BITWISE_OR))d=new Node(a),d.push(c),d.push(BitwiseXorExpression(a,b)),c=d;return c}function AndExpression(a,b){var c,d;c=BitwiseOrExpression(a,b);while(a.match(AND))d=new Node(a),d.push(c),d.push(BitwiseOrExpression(a,b)),c=d;return c}function OrExpression(a,b){var c,d;c=AndExpression(a,b);while(a.match(OR))d=new Node(a),d.push(c),d.push(AndExpression(a,b)),c=d;return c}function ConditionalExpression(a,b){var c,d;c=OrExpression(a,b);if(a.match(HOOK)){d=c,c=new Node(a,{type:HOOK}),c.push(d),c.push(AssignExpression(a,b.update({inForLoopInit:!1})));if(!a.match(COLON))throw a.newSyntaxError("missing : after ?");c.push(AssignExpression(a,b))}return c}function AssignExpression(a,b){var c,d;if(a.match(YIELD,!0))return ReturnOrYield(a,b);c=new Node(a,{type:ASSIGN}),d=ConditionalExpression(a,b);if(!a.match(ASSIGN))return d;switch(d.type){case OBJECT_INIT:case ARRAY_INIT:d.destructuredNames=checkDestructuring(a,b,d);case IDENTIFIER:case DOT:case INDEX:case CALL:break;default:throw a.newSyntaxError("Bad left-hand side of assignment")}c.assignOp=a.token.assignOp,c.push(d),c.push(AssignExpression(a,b));return c}function Expression(a,b){var c,d;c=AssignExpression(a,b);if(a.match(COMMA)){d=new Node(a,{type:COMMA}),d.push(c),c=d;do{d=c.children[c.children.length-1];if(d.type===YIELD&&!d.parenthesized)throw a.newSyntaxError("Yield expression must be parenthesized");c.push(AssignExpression(a,b))}while(a.match(COMMA))}return c}function ParenExpression(a,b){var c=Expression(a,b.update({inForLoopInit:b.inForLoopInit&&a.token.type===LEFT_PAREN}));if(a.match(FOR)){if(c.type===YIELD&&!c.parenthesized)throw a.newSyntaxError("Yield expression must be parenthesized");if(c.type===COMMA&&!c.parenthesized)throw a.newSyntaxError("Generator expression must be parenthesized");c=GeneratorExpression(a,b,c)}return c}function HeadExpression(a,b){var c=MaybeLeftParen(a,b),d=ParenExpression(a,b);MaybeRightParen(a,c);if(c===END&&!d.parenthesized){var e=a.peek();if(e!==LEFT_CURLY&&!definitions.isStatementStartCode[e])throw a.newSyntaxError("Unparenthesized head followed by unbraced body")}return d}function ComprehensionTail(a,b){var c,d,e,f,g;c=new Node(a,{type:COMP_TAIL});do{d=new Node(a,{type:FOR_IN,isLoop:!0}),a.match(IDENTIFIER)&&(a.token.value==="each"?d.isEach=!0:a.unget()),g=MaybeLeftParen(a,b);switch(a.get()){case LEFT_BRACKET:case LEFT_CURLY:a.unget(),d.iterator=DestructuringExpression(a,b);break;case IDENTIFIER:d.iterator=f=new Node(a,{type:IDENTIFIER}),f.name=f.value,d.varDecl=e=new Node(a,{type:VAR}),e.push(f),b.parentScript.varDecls.push(f);break;default:throw a.newSyntaxError("missing identifier")}a.mustMatch(IN),d.object=Expression(a,b),MaybeRightParen(a,g),c.push(d)}while(a.match(FOR));a.match(IF)&&(c.guard=HeadExpression(a,b));return c}function GeneratorExpression(a,b,c){return new Node(a,{type:GENERATOR,expression:c,tail:ComprehensionTail(a,b)})}function DestructuringExpression(a,b,c){var d=PrimaryExpression(a,b);d.destructuredNames=checkDestructuring(a,b,d,c);return d}function checkDestructuring(a,b,c,d){if(c.type===ARRAY_COMP)throw a.newSyntaxError("Invalid array comprehension left-hand side");if(c.type===ARRAY_INIT||c.type===OBJECT_INIT){var e={},f,g,h,i,j,k=c.children;for(var l=0,m=k.length;l<m;l++){if(!(f=k[l]))continue;f.type===PROPERTY_INIT?(j=f.children,i=j[1],h=j[0].value):c.type===OBJECT_INIT?(i=f,h=f.value):(i=f,h=l);if(i.type===ARRAY_INIT||i.type===OBJECT_INIT)e[h]=checkDestructuring(a,b,i,d);else{if(d&&i.type!==IDENTIFIER)throw a.newSyntaxError("missing name in pattern");e[h]=i}}return e}}function LetBlock(a,b,c){var d,e;d=new Node(a,{type:LET_BLOCK,varDecls:[]}),a.mustMatch(LEFT_PAREN),d.variables=Variables(a,b,d),a.mustMatch(RIGHT_PAREN),c&&a.peek()!==LEFT_CURLY&&(e=new Node(a,{type:SEMICOLON,expression:d}),c=!1),c?d.block=Block(a,b):d.expression=AssignExpression(a,b);return d}function Variables(a,b,c){var d,e,f,g,h,i;i=a.token.type;switch(i){case VAR:case CONST:h=b.parentScript;break;case LET:h=b.parentBlock;break;case LEFT_PAREN:i=LET,h=c}d=new Node(a,{type:i,destructurings:[]});do{i=a.get();if(i===LEFT_BRACKET||i===LEFT_CURLY){a.unget();var j=DestructuringExpression(a,b,!0);e=new Node(a,{type:IDENTIFIER,name:j,readOnly:d.type===CONST}),d.push(e),pushDestructuringVarDecls(e.name.destructuredNames,h),d.destructurings.push({exp:j,decl:e});if(b.inForLoopInit&&a.peek()===IN)continue;a.mustMatch(ASSIGN);if(a.token.assignOp)throw a.newSyntaxError("Invalid variable initialization");e.initializer=AssignExpression(a,b);continue}if(i!==IDENTIFIER)throw a.newSyntaxError("missing variable name");e=new Node(a,{type:IDENTIFIER,name:a.token.value,readOnly:d.type===CONST}),d.push(e),h.varDecls.push(e);if(a.match(ASSIGN)){if(a.token.assignOp)throw a.newSyntaxError("Invalid variable initialization");e.initializer=AssignExpression(a,b)}}while(a.match(COMMA));return d}function FunctionDefinition(a,b,c,d){var e,f=new Node(a,{params:[]});f.type!==FUNCTION&&(f.type=f.value==="get"?GETTER:SETTER);if(a.match(IDENTIFIER))f.name=a.token.value;else if(c)throw a.newSyntaxError("missing function identifier");var g=new StaticContext(null,null,!0,!1,NESTING_TOP);a.mustMatch(LEFT_PAREN);if(!a.match(RIGHT_PAREN)){do switch(a.get()){case LEFT_BRACKET:case LEFT_CURLY:a.unget(),f.params.push(DestructuringExpression(a,g));break;case IDENTIFIER:f.params.push(a.token.value);break;default:throw a.newSyntaxError("missing formal parameter")}while(a.match(COMMA));a.mustMatch(RIGHT_PAREN)}e=a.get(),e!==LEFT_CURLY&&a.unget();if(e!==LEFT_CURLY){f.body=AssignExpression(a,g);if(f.body.isGenerator)throw a.newSyntaxError("Generator returns a value")}else f.body=Script(a,!0);e===LEFT_CURLY&&a.mustMatch(RIGHT_CURLY),f.end=a.token.end,f.functionForm=d,d===DECLARED_FORM&&b.parentScript.funDecls.push(f);return f}function ReturnOrYield(a,b){var c,d,e=a.token.type,f,g=b.parentScript;if(e===RETURN){if(!b.inFunction)throw a.newSyntaxError("Return not in function")}else{if(!b.inFunction)throw a.newSyntaxError("Yield not in function");g.isGenerator=!0}c=new Node(a,{value:undefined}),f=a.peek(!0),f!==END&&f!==NEWLINE&&f!==SEMICOLON&&f!==RIGHT_CURLY&&(e!==YIELD||f!==e&&f!==RIGHT_BRACKET&&f!==RIGHT_PAREN&&f!==COLON&&f!==COMMA)?e===RETURN?(c.value=Expression(a,b),g.hasReturnWithValue=!0):c.value=AssignExpression(a,b):e===RETURN&&(g.hasEmptyReturn=!0);if(g.hasReturnWithValue&&g.isGenerator)throw a.newSyntaxError("Generator returns a value");return c}function MagicalSemicolon(a){var b;if(a.lineno===a.token.lineno){b=a.peekOnSameLine();if(b!==END&&b!==NEWLINE&&b!==SEMICOLON&&b!==RIGHT_CURLY)throw a.newSyntaxError("missing ; before statement")}a.match(SEMICOLON)}function Statement(a,b){var c,d,e,f,g,h,i,j=a.get(!0),k,l,m;switch(j){case FUNCTION:return FunctionDefinition(a,b,!0,b.nesting!==NESTING_TOP?STATEMENT_FORM:DECLARED_FORM);case LEFT_CURLY:e=new Node(a,blockInit()),Statements(a,b.update({parentBlock:e}).pushTarget(e).nest(NESTING_SHALLOW),e),a.mustMatch(RIGHT_CURLY);return e;case IF:e=new Node(a),e.condition=HeadExpression(a,b),l=b.pushTarget(e).nest(NESTING_DEEP),e.thenPart=Statement(a,l),e.elsePart=a.match(ELSE)?Statement(a,l):null;return e;case SWITCH:e=new Node(a,{cases:[],defaultIndex:-1}),e.discriminant=HeadExpression(a,b),l=b.pushTarget(e).nest(NESTING_DEEP),a.mustMatch(LEFT_CURLY);while((j=a.get())!==RIGHT_CURLY){switch(j){case DEFAULT:if(e.defaultIndex>=0)throw a.newSyntaxError("More than one switch default");case CASE:f=new Node(a),j===DEFAULT?e.defaultIndex=e.cases.length:f.caseLabel=Expression(a,l,COLON);break;default:throw a.newSyntaxError("Invalid switch case")}a.mustMatch(COLON),f.statements=new Node(a,blockInit());while((j=a.peek(!0))!==CASE&&j!==DEFAULT&&j!==RIGHT_CURLY)f.statements.push(Statement(a,l));e.cases.push(f)}return e;case FOR:e=new Node(a,LOOP_INIT),a.match(IDENTIFIER)&&(a.token.value==="each"?e.isEach=!0:a.unget()),b.parenFreeMode||a.mustMatch(LEFT_PAREN),l=b.pushTarget(e).nest(NESTING_DEEP),m=b.update({inForLoopInit:!0}),(j=a.peek())!==SEMICOLON&&(j===VAR||j===CONST?(a.get(),f=Variables(a,m)):j===LET?(a.get(),a.peek()===LEFT_PAREN?f=LetBlock(a,m,!1):(m.parentBlock=e,e.varDecls=[],f=Variables(a,m))):f=Expression(a,m));if(f&&a.match(IN)){e.type=FOR_IN,e.object=Expression(a,m);if(f.type===VAR||f.type===LET){h=f.children;if(h.length!==1&&f.destructurings.length!==1)throw new SyntaxError("Invalid for..in left-hand side",a.filename,f.lineno);f.destructurings.length>0?e.iterator=f.destructurings[0]:e.iterator=h[0],e.varDecl=f}else{if(f.type===ARRAY_INIT||f.type===OBJECT_INIT)f.destructuredNames=checkDestructuring(a,m,f);e.iterator=f}}else{e.setup=f,a.mustMatch(SEMICOLON);if(e.isEach)throw a.newSyntaxError("Invalid for each..in loop");e.condition=a.peek()===SEMICOLON?null:Expression(a,m),a.mustMatch(SEMICOLON),k=a.peek(),e.update=(b.parenFreeMode?k===LEFT_CURLY||definitions.isStatementStartCode[k]:k===RIGHT_PAREN)?null:Expression(a,m)}b.parenFreeMode||a.mustMatch(RIGHT_PAREN),e.body=Statement(a,l);return e;case WHILE:e=new Node(a,{isLoop:!0}),e.condition=HeadExpression(a,b),e.body=Statement(a,b.pushTarget(e).nest(NESTING_DEEP));return e;case DO:e=new Node(a,{isLoop:!0}),e.body=Statement(a,b.pushTarget(e).nest(NESTING_DEEP)),a.mustMatch(WHILE),e.condition=HeadExpression(a,b);if(!b.ecmaStrictMode){a.match(SEMICOLON);return e}break;case BREAK:case CONTINUE:e=new Node(a),l=b.pushTarget(e),a.peekOnSameLine()===IDENTIFIER&&(a.get(),e.label=a.token.value),e.target=e.label?l.labeledTargets.find(function(a){return a.labels.has(e.label)}):l.defaultTarget;if(!e.target)throw a.newSyntaxError("Invalid "+(j===BREAK?"break":"continue"));if(!e.target.isLoop&&j===CONTINUE)throw a.newSyntaxError("Invalid continue");break;case TRY:e=new Node(a,{catchClauses:[]}),e.tryBlock=Block(a,b);while(a.match(CATCH)){f=new Node(a),g=MaybeLeftParen(a,b);switch(a.get()){case LEFT_BRACKET:case LEFT_CURLY:a.unget(),f.varName=DestructuringExpression(a,b,!0);break;case IDENTIFIER:f.varName=a.token.value;break;default:throw a.newSyntaxError("missing identifier in catch")}if(a.match(IF)){if(b.ecma3OnlyMode)throw a.newSyntaxError("Illegal catch guard");if(e.catchClauses.length&&!e.catchClauses.top().guard)throw a.newSyntaxError("Guarded catch after unguarded");f.guard=Expression(a,b)}MaybeRightParen(a,g),f.block=Block(a,b),e.catchClauses.push(f)}a.match(FINALLY)&&(e.finallyBlock=Block(a,b));if(!e.catchClauses.length&&!e.finallyBlock)throw a.newSyntaxError("Invalid try statement");return e;case CATCH:case FINALLY:throw a.newSyntaxError(definitions.tokens[j]+" without preceding try");case THROW:e=new Node(a),e.exception=Expression(a,b);break;case RETURN:e=ReturnOrYield(a,b);break;case WITH:e=new Node(a),e.object=HeadExpression(a,b),e.body=Statement(a,b.pushTarget(e).nest(NESTING_DEEP));return e;case VAR:case CONST:e=Variables(a,b);break;case LET:a.peek()===LEFT_PAREN?e=LetBlock(a,b,!0):e=Variables(a,b);break;case DEBUGGER:e=new Node(a);break;case NEWLINE:case SEMICOLON:e=new Node(a,{type:SEMICOLON}),e.expression=null;return e;default:if(j===IDENTIFIER){j=a.peek();if(j===COLON){d=a.token.value;if(b.allLabels.has(d))throw a.newSyntaxError("Duplicate label");a.get(),e=new Node(a,{type:LABEL,label:d}),e.statement=Statement(a,b.pushLabel(d).nest(NESTING_SHALLOW)),e.target=e.statement.type===LABEL?e.statement.target:e.statement;return e}}e=new Node(a,{type:SEMICOLON}),a.unget(),e.expression=Expression(a,b),e.end=e.expression.end}MagicalSemicolon(a);return e}function Block(a,b){a.mustMatch(LEFT_CURLY);var c=new Node(a,blockInit());Statements(a,b.update({parentBlock:c}).pushTarget(c),c),a.mustMatch(RIGHT_CURLY);return c}function Statements(a,b,c){try{while(!a.done&&a.peek(!0)!==RIGHT_CURLY)c.push(Statement(a,b))}catch(d){a.done&&(a.unexpectedEOF=!0);throw d}}function MaybeRightParen(a,b){b===LEFT_PAREN&&a.mustMatch(RIGHT_PAREN)}function MaybeLeftParen(a,b){return b.parenFreeMode?a.match(LEFT_PAREN)?LEFT_PAREN:END:a.mustMatch(LEFT_PAREN).type}function scriptInit(){return{type:SCRIPT,funDecls:[],varDecls:[],modDecls:[],impDecls:[],expDecls:[],loadDeps:[],hasEmptyReturn:!1,hasReturnWithValue:!1,isGenerator:!1}}function blockInit(){return{type:BLOCK,varDecls:[]}}function tokenString(a){var b=definitions.tokens[a];return/^\W/.test(b)?definitions.opTypeNames[b]:b.toUpperCase()}function Node(a,b){var c=a.token;c?(this.type=c.type,this.value=c.value,this.lineno=c.lineno,this.start=c.start,this.end=c.end):this.lineno=a.lineno,this.tokenizer=a,this.children=[];for(var d in b)this[d]=b[d]}function Script(a,b){var c=new Node(a,scriptInit()),d=new StaticContext(c,c,b,!1,NESTING_TOP);Statements(a,d,c);return c}function StaticContext(a,b,c,d,e){this.parentScript=a,this.parentBlock=b,this.inFunction=c,this.inForLoopInit=d,this.nesting=e,this.allLabels=new Stack,this.currentLabels=new Stack,this.labeledTargets=new Stack,this.defaultTarget=null,definitions.options.ecma3OnlyMode&&(this.ecma3OnlyMode=!0),definitions.options.parenFreeMode&&(this.parenFreeMode=!0)}function pushDestructuringVarDecls(a,b){for(var c in a){var d=a[c];d.type===IDENTIFIER?b.varDecls.push(d):pushDestructuringVarDecls(d,b)}}var lexer=require("ace/narcissus/jslex"),definitions=require("ace/narcissus/jsdefs");const StringMap=definitions.StringMap,Stack=definitions.Stack;eval(definitions.consts);const NESTING_TOP=0,NESTING_SHALLOW=1,NESTING_DEEP=2;StaticContext.prototype={ecma3OnlyMode:!1,parenFreeMode:!1,update:function(a){var b={};for(var c in a)b[c]={value:a[c],writable:!0,enumerable:!0,configurable:!0};return Object.create(this,b)},pushLabel:function(a){return this.update({currentLabels:this.currentLabels.push(a),allLabels:this.allLabels.push(a)})},pushTarget:function(a){var b=a.isLoop||a.type===SWITCH;if(this.currentLabels.isEmpty())return b?this.update({defaultTarget:a}):this;a.labels=new StringMap,this.currentLabels.forEach(function(b){a.labels.set(b,!0)});return this.update({currentLabels:new Stack,labeledTargets:this.labeledTargets.push(a),defaultTarget:b?a:this.defaultTarget})},nest:function(a){var b=Math.max(this.nesting,a);return b!==this.nesting?this.update({nesting:b}):this}},definitions.defineProperty(Array.prototype,"top",function(){return this.length&&this[this.length-1]},!1,!1,!0);var Np=Node.prototype={};Np.constructor=Node,Np.toSource=Object.prototype.toSource,Np.push=function(a){a!==null&&(a.start<this.start&&(this.start=a.start),this.end<a.end&&(this.end=a.end));return this.children.push(a)},Node.indentLevel=0,Np.toString=function(){var a=[];for(var b in this)this.hasOwnProperty(b)&&b!=="type"&&b!=="target"&&a.push({id:b,value:this[b]});a.sort(function(a,b){return a.id<b.id?-1:1});const c=" ";var d=++Node.indentLevel,e="{\n"+c.repeat(d)+"type: "+tokenString(this.type);for(b=0;b<a.length;b++)e+=",\n"+c.repeat(d)+a[b].id+": "+a[b].value;d=--Node.indentLevel,e+="\n"+c.repeat(d)+"}";return e},Np.getSource=function(){return this.tokenizer.source.slice(this.start,this.end)};const LOOP_INIT={isLoop:!0};definitions.defineGetter(Np,"filename",function(){return this.tokenizer.filename}),definitions.defineProperty(String.prototype,"repeat",function(a){var b="",c=this+b;while(--a>=0)b+=c;return b},!1,!1,!0);const DECLARED_FORM=0,EXPRESSED_FORM=1,STATEMENT_FORM=2;exports.parse=parse,exports.parseStdin=parseStdin,exports.Node=Node,exports.DECLARED_FORM=DECLARED_FORM,exports.EXPRESSED_FORM=EXPRESSED_FORM,exports.STATEMENT_FORM=STATEMENT_FORM,exports.Tokenizer=lexer.Tokenizer,exports.FunctionDefinition=FunctionDefinition}),define("ace/narcissus/jslex",["require","exports","module","ace/narcissus/jsdefs"],function(require,exports,module){function Tokenizer(a,b,c){this.cursor=0,this.source=String(a),this.tokens=[],this.tokenIndex=0,this.lookahead=0,this.scanNewlines=!1,this.unexpectedEOF=!1,this.filename=b||"",this.lineno=c||1}var definitions=require("ace/narcissus/jsdefs");eval(definitions.consts);var opTokens={};for(var op in definitions.opTypeNames){if(op==="\n"||op===".")continue;var node=opTokens;for(var i=0;i<op.length;i++){var ch=op[i];ch in node||(node[ch]={}),node=node[ch],node.op=op}}Tokenizer.prototype={get done(){return this.peek(!0)===END},get token(){return this.tokens[this.tokenIndex]},match:function(a,b){return this.get(b)===a||this.unget()},mustMatch:function(a){if(!this.match(a))throw this.newSyntaxError("Missing "+definitions.tokens[a].toLowerCase());return this.token},peek:function(a){var b,c;this.lookahead?(c=this.tokens[this.tokenIndex+this.lookahead&3],b=this.scanNewlines&&c.lineno!==this.lineno?NEWLINE:c.type):(b=this.get(a),this.unget());return b},peekOnSameLine:function(a){this.scanNewlines=!0;var b=this.peek(a);this.scanNewlines=!1;return b},skip:function(){var a=this.source;for(;;){var b=a[this.cursor++],c=a[this.cursor];if(b==="\n"&&!this.scanNewlines)this.lineno++;else if(b==="/"&&c==="*"){this.cursor++;for(;;){b=a[this.cursor++];if(b===undefined)throw this.newSyntaxError("Unterminated comment");if(b==="*"){c=a[this.cursor];if(c==="/"){this.cursor++;break}}else b==="\n"&&this.lineno++}}else if(b==="/"&&c==="/"){this.cursor++;for(;;){b=a[this.cursor++];if(b===undefined)return;if(b==="\n"){this.lineno++;break}}}else if(b!==" "&&b!=="\t"){this.cursor--;return}}},lexExponent:function(){var a=this.source,b=a[this.cursor];if(b==="e"||b==="E"){this.cursor++,ch=a[this.cursor++];if(ch==="+"||ch==="-")ch=a[this.cursor++];if(ch<"0"||ch>"9")throw this.newSyntaxError("Missing exponent");do ch=a[this.cursor++];while(ch>="0"&&ch<="9");this.cursor--;return!0}return!1},lexZeroNumber:function(a){var b=this.token,c=this.source;b.type=NUMBER,a=c[this.cursor++];if(a==="."){do a=c[this.cursor++];while(a>="0"&&a<="9");this.cursor--,this.lexExponent(),b.value=parseFloat(b.start,this.cursor)}else if(a==="x"||a==="X"){do a=c[this.cursor++];while(a>="0"&&a<="9"||a>="a"&&a<="f"||a>="A"&&a<="F");this.cursor--,b.value=parseInt(c.substring(b.start,this.cursor))}else if(a>="0"&&a<="7"){do a=c[this.cursor++];while(a>="0"&&a<="7");this.cursor--,b.value=parseInt(c.substring(b.start,this.cursor))}else this.cursor--,this.lexExponent(),b.value=0},lexNumber:function(a){var b=this.token,c=this.source;b.type=NUMBER;var d=!1;do a=c[this.cursor++],a==="."&&!d&&(d=!0,a=c[this.cursor++]);while(a>="0"&&a<="9");this.cursor--;var e=this.lexExponent();d=d||e;var f=c.substring(b.start,this.cursor);b.value=d?parseFloat(f):parseInt(f)},lexDot:function(a){var b=this.token,c=this.source,d=c[this.cursor];if(d>="0"&&d<="9"){do a=c[this.cursor++];while(a>="0"&&a<="9");this.cursor--,this.lexExponent(),b.type=NUMBER,b.value=parseFloat(b.start,this.cursor)}else b.type=DOT,b.assignOp=null,b.value="."},lexString:function(ch){var token=this.token,input=this.source;token.type=STRING;var hasEscapes=!1,delim=ch;if(input.length<=this.cursor)throw this.newSyntaxError("Unterminated string literal");while((ch=input[this.cursor++])!==delim){if(this.cursor==input.length)throw this.newSyntaxError("Unterminated string literal");if(ch==="\\"){hasEscapes=!0;if(++this.cursor==input.length)throw this.newSyntaxError("Unterminated string literal")}}token.value=hasEscapes?eval(input.substring(token.start,this.cursor)):input.substring(token.start+1,this.cursor-1)},lexRegExp:function(ch){var token=this.token,input=this.source;token.type=REGEXP;do{ch=input[this.cursor++];if(ch==="\\")this.cursor++;else if(ch==="["){do{if(ch===undefined)throw this.newSyntaxError("Unterminated character class");ch==="\\"&&this.cursor++,ch=input[this.cursor++]}while(ch!=="]")}else if(ch===undefined)throw this.newSyntaxError("Unterminated regex")}while(ch!=="/");do ch=input[this.cursor++];while(ch>="a"&&ch<="z");this.cursor--,token.value=eval(input.substring(token.start,this.cursor))},lexOp:function(a){var b=this.token,c=this.source,d=opTokens[a],e=c[this.cursor];e in d&&(d=d[e],this.cursor++,e=c[this.cursor],e in d&&(d=d[e],this.cursor++,e=c[this.cursor]));var f=d.op;definitions.assignOps[f]&&c[this.cursor]==="="?(this.cursor++,b.type=ASSIGN,b.assignOp=definitions.tokenIds[definitions.opTypeNames[f]],f+="="):(b.type=definitions.tokenIds[definitions.opTypeNames[f]],b.assignOp=null),b.value=f},lexIdent:function(a){var b=this.token,c=this.source;do a=c[this.cursor++];while(a>="a"&&a<="z"||a>="A"&&a<="Z"||a>="0"&&a<="9"||a==="$"||a==="_");this.cursor--;var d=c.substring(b.start,this.cursor);b.type=definitions.keywords[d]||IDENTIFIER,b.value=d},get:function(a){var b;while(this.lookahead){--this.lookahead,this.tokenIndex=this.tokenIndex+1&3,b=this.tokens[this.tokenIndex];if(b.type!==NEWLINE||this.scanNewlines)return b.type}this.skip(),this.tokenIndex=this.tokenIndex+1&3,b=this.tokens[this.tokenIndex],b||(this.tokens[this.tokenIndex]=b={});var c=this.source;if(this.cursor===c.length)return b.type=END;b.start=this.cursor,b.lineno=this.lineno;var d=c[this.cursor++];if(d>="a"&&d<="z"||d>="A"&&d<="Z"||d==="$"||d==="_")this.lexIdent(d);else if(a&&d==="/")this.lexRegExp(d);else if(d in opTokens)this.lexOp(d);else if(d===".")this.lexDot(d);else if(d>="1"&&d<="9")this.lexNumber(d);else if(d==="0")this.lexZeroNumber(d);else if(d==='"'||d==="'")this.lexString(d);else if(this.scanNewlines&&d==="\n")b.type=NEWLINE,b.value="\n",this.lineno++;else throw this.newSyntaxError("Illegal token");b.end=this.cursor;return b.type},unget:function(){if(++this.lookahead===4)throw"PANIC: too much lookahead!";this.tokenIndex=this.tokenIndex-1&3},newSyntaxError:function(a){var b=new SyntaxError(a,this.filename,this.lineno);b.source=this.source,b.lineno=this.lineno,b.cursor=this.lookahead?this.tokens[this.tokenIndex+this.lookahead&3].start:this.cursor;return b}},exports.Tokenizer=Tokenizer}),define("ace/narcissus/jsdefs",["require","exports","module"],function(a,b,c){function y(a){this.elts=a||null}function x(){this.table=Object.create(null,{}),this.size=0}function v(){return undefined}function u(a){return{getOwnPropertyDescriptor:function(b){var c=Object.getOwnPropertyDescriptor(a,b);c.configurable=!0;return c},getPropertyDescriptor:function(b){var c=s(a,b);c.configurable=!0;return c},getOwnPropertyNames:function(){return Object.getOwnPropertyNames(a)},defineProperty:function(b,c){Object.defineProperty(a,b,c)},"delete":function(b){return delete a[b]},fix:function(){return Object.isFrozen(a)?t(a):undefined},has:function(b){return b in a},hasOwn:function(b){return{}.hasOwnProperty.call(a,b)},get:function(b,c){return a[c]},set:function(b,c,d){a[c]=d;return!0},enumerate:function(){var b=[];for(m in a)b.push(m);return b},keys:function(){return Object.keys(a)}}}function t(a){var b={};for(var c in Object.getOwnPropertyNames(a))b[c]=Object.getOwnPropertyDescriptor(a,c);return b}function s(a,b){while(a){if({}.hasOwnProperty.call(a,b))return Object.getOwnPropertyDescriptor(a,b);a=Object.getPrototypeOf(a)}}function r(a){return typeof a=="function"&&a.toString().match(/\[native code\]/)}function q(a,b,c,d,e,f){Object.defineProperty(a,b,{value:c,writable:!e,configurable:!d,enumerable:!f})}function p(a,b,c,d,e){Object.defineProperty(a,b,{get:c,configurable:!d,enumerable:!e})}b.options={version:185},function(){b.hostGlobal=this}();var d=["END","\n",";",",","=","?",":","CONDITIONAL","||","&&","|","^","&","==","!=","===","!==","<","<=",">=",">","<<",">>",">>>","+","-","*","/","%","!","~","UNARY_PLUS","UNARY_MINUS","++","--",".","[","]","{","}","(",")","SCRIPT","BLOCK","LABEL","FOR_IN","CALL","NEW_WITH_ARGS","INDEX","ARRAY_INIT","OBJECT_INIT","PROPERTY_INIT","GETTER","SETTER","GROUP","LIST","LET_BLOCK","ARRAY_COMP","GENERATOR","COMP_TAIL","IDENTIFIER","NUMBER","STRING","REGEXP","break","case","catch","const","continue","debugger","default","delete","do","else","false","finally","for","function","if","in","instanceof","let","new","null","return","switch","this","throw","true","try","typeof","var","void","yield","while","with"],e=["break","const","continue","debugger","do","for","if","return","switch","throw","try","var","yield","while","with"],f={"\n":"NEWLINE",";":"SEMICOLON",",":"COMMA","?":"HOOK",":":"COLON","||":"OR","&&":"AND","|":"BITWISE_OR","^":"BITWISE_XOR","&":"BITWISE_AND","===":"STRICT_EQ","==":"EQ","=":"ASSIGN","!==":"STRICT_NE","!=":"NE","<<":"LSH","<=":"LE","<":"LT",">>>":"URSH",">>":"RSH",">=":"GE",">":"GT","++":"INCREMENT","--":"DECREMENT","+":"PLUS","-":"MINUS","*":"MUL","/":"DIV","%":"MOD","!":"NOT","~":"BITWISE_NOT",".":"DOT","[":"LEFT_BRACKET","]":"RIGHT_BRACKET","{":"LEFT_CURLY","}":"RIGHT_CURLY","(":"LEFT_PAREN",")":"RIGHT_PAREN"},g={"__proto__":null},h={},i="const ";for(var j=0,k=d.length;j<k;j++){j>0&&(i+=", ");var l=d[j],m;/^[a-z]/.test(l)?(m=l.toUpperCase(),g[l]=j):m=/^\W/.test(l)?f[l]:l,i+=m+" = "+j,h[m]=j,d[l]=j}i+=";";var n={"__proto__":null};for(j=0,k=e.length;j<k;j++)n[g[e[j]]]=!0;var o=["|","^","&","<<",">>",">>>","+","-","*","/","%"];for(j=0,k=o.length;j<k;j++)l=o[j],o[l]=d[l];var w={}.hasOwnProperty;x.prototype={has:function(a){return w.call(this.table,a)},set:function(a,b){w.call(this.table,a)||this.size++,this.table[a]=b},get:function(a){return this.table[a]},getDef:function(a,b){w.call(this.table,a)||(this.size++,this.table[a]=b());return this.table[a]},forEach:function(a){var b=this.table;for(var c in b)a.call(this,c,b[c])},toString:function(){return"[object StringMap]"}},y.prototype={push:function(a){return new y({top:a,rest:this.elts})},top:function(){if(!this.elts)throw new Error("empty stack");return this.elts.top},isEmpty:function(){return this.top===null},find:function(a){for(var b=this.elts;b;b=b.rest)if(a(b.top))return b.top;return null},has:function(a){return Boolean(this.find(function(b){return b===a}))},forEach:function(a){for(var b=this.elts;b;b=b.rest)a(b.top)}},b.tokens=d,b.opTypeNames=f,b.keywords=g,b.isStatementStartCode=n,b.tokenIds=h,b.consts=i,b.assignOps=o,b.defineGetter=p,b.defineProperty=q,b.isNativeCode=r,b.makePassthruHandler=u,b.noPropFound=v,b.StringMap=x,b.Stack=y}) \ No newline at end of file
+"no use strict";
+
+var console = {
+ log: function(msg) {
+ postMessage({type: "log", data: msg});
+ }
+};
+var window = {
+ console: console
+};
+
+var normalizeModule = function(parentId, moduleName) {
+ // normalize plugin requires
+ if (moduleName.indexOf("!") !== -1) {
+ var chunks = moduleName.split("!");
+ return normalizeModule(parentId, chunks[0]) + "!" + normalizeModule(parentId, chunks[1]);
+ }
+ // normalize relative requires
+ if (moduleName.charAt(0) == ".") {
+ var base = parentId.split("/").slice(0, -1).join("/");
+ var moduleName = base + "/" + moduleName;
+
+ while(moduleName.indexOf(".") !== -1 && previous != moduleName) {
+ var previous = moduleName;
+ var moduleName = moduleName.replace(/\/\.\//, "/").replace(/[^\/]+\/\.\.\//, "");
+ }
+ }
+
+ return moduleName;
+};
+
+var require = function(parentId, id) {
+ var id = normalizeModule(parentId, id);
+
+ var module = require.modules[id];
+ if (module) {
+ if (!module.initialized) {
+ module.exports = module.factory().exports;
+ module.initialized = true;
+ }
+ return module.exports;
+ }
+
+ var chunks = id.split("/");
+ chunks[0] = require.tlns[chunks[0]] || chunks[0];
+ var path = chunks.join("/") + ".js";
+
+ require.id = id;
+ importScripts(path);
+ return require(parentId, id);
+};
+
+require.modules = {};
+require.tlns = {};
+
+var define = function(id, deps, factory) {
+ if (arguments.length == 2) {
+ factory = deps;
+ } else if (arguments.length == 1) {
+ factory = id;
+ id = require.id;
+ }
+
+ if (id.indexOf("text!") === 0)
+ return;
+
+ var req = function(deps, factory) {
+ return require(id, deps, factory);
+ };
+
+ require.modules[id] = {
+ factory: function() {
+ var module = {
+ exports: {}
+ };
+ var returnExports = factory(req, module.exports, module);
+ if (returnExports)
+ module.exports = returnExports;
+ return module;
+ }
+ };
+};
+
+function initBaseUrls(topLevelNamespaces) {
+ require.tlns = topLevelNamespaces;
+}
+
+function initSender() {
+
+ var EventEmitter = require(null, "ace/lib/event_emitter").EventEmitter;
+ var oop = require(null, "ace/lib/oop");
+
+ var Sender = function() {};
+
+ (function() {
+
+ oop.implement(this, EventEmitter);
+
+ this.callback = function(data, callbackId) {
+ postMessage({
+ type: "call",
+ id: callbackId,
+ data: data
+ });
+ };
+
+ this.emit = function(name, data) {
+ postMessage({
+ type: "event",
+ name: name,
+ data: data
+ });
+ };
+
+ }).call(Sender.prototype);
+
+ return new Sender();
+}
+
+var main;
+var sender;
+
+onmessage = function(e) {
+ var msg = e.data;
+ if (msg.command) {
+ main[msg.command].apply(main, msg.args);
+ }
+ else if (msg.init) {
+ initBaseUrls(msg.tlns);
+ require(null, "ace/lib/fixoldbrowsers");
+ sender = initSender();
+ var clazz = require(null, msg.module)[msg.classname];
+ main = new clazz(sender);
+ }
+ else if (msg.event && sender) {
+ sender._emit(msg.event, msg.data);
+ }
+};
+// vim:set ts=4 sts=4 sw=4 st:
+// -- kriskowal Kris Kowal Copyright (C) 2009-2010 MIT License
+// -- tlrobinson Tom Robinson Copyright (C) 2009-2010 MIT License (Narwhal Project)
+// -- dantman Daniel Friesen Copyright(C) 2010 XXX No License Specified
+// -- fschaefer Florian Schäfer Copyright (C) 2010 MIT License
+// -- Irakli Gozalishvili Copyright (C) 2010 MIT License
+
+/*!
+ Copyright (c) 2009, 280 North Inc. http://280north.com/
+ MIT License. http://github.com/280north/narwhal/blob/master/README.md
+*/
+
+define('ace/lib/fixoldbrowsers', ['require', 'exports', 'module' , 'ace/lib/regexp', 'ace/lib/es5-shim'], function(require, exports, module) {
+"use strict";
+
+require("./regexp");
+require("./es5-shim");
+
+});/**
+ * Based on code from:
+ *
+ * XRegExp 1.5.0
+ * (c) 2007-2010 Steven Levithan
+ * MIT License
+ * <http://xregexp.com>
+ * Provides an augmented, extensible, cross-browser implementation of regular expressions,
+ * including support for additional syntax, flags, and methods
+ */
+
+define('ace/lib/regexp', ['require', 'exports', 'module' ], function(require, exports, module) {
+"use strict";
+
+ //---------------------------------
+ // Private variables
+ //---------------------------------
+
+ var real = {
+ exec: RegExp.prototype.exec,
+ test: RegExp.prototype.test,
+ match: String.prototype.match,
+ replace: String.prototype.replace,
+ split: String.prototype.split
+ },
+ compliantExecNpcg = real.exec.call(/()??/, "")[1] === undefined, // check `exec` handling of nonparticipating capturing groups
+ compliantLastIndexIncrement = function () {
+ var x = /^/g;
+ real.test.call(x, "");
+ return !x.lastIndex;
+ }();
+
+ //---------------------------------
+ // Overriden native methods
+ //---------------------------------
+
+ // Adds named capture support (with backreferences returned as `result.name`), and fixes two
+ // cross-browser issues per ES3:
+ // - Captured values for nonparticipating capturing groups should be returned as `undefined`,
+ // rather than the empty string.
+ // - `lastIndex` should not be incremented after zero-length matches.
+ RegExp.prototype.exec = function (str) {
+ var match = real.exec.apply(this, arguments),
+ name, r2;
+ if (match) {
+ // Fix browsers whose `exec` methods don't consistently return `undefined` for
+ // nonparticipating capturing groups
+ if (!compliantExecNpcg && match.length > 1 && indexOf(match, "") > -1) {
+ r2 = RegExp(this.source, real.replace.call(getNativeFlags(this), "g", ""));
+ // Using `str.slice(match.index)` rather than `match[0]` in case lookahead allowed
+ // matching due to characters outside the match
+ real.replace.call(str.slice(match.index), r2, function () {
+ for (var i = 1; i < arguments.length - 2; i++) {
+ if (arguments[i] === undefined)
+ match[i] = undefined;
+ }
+ });
+ }
+ // Attach named capture properties
+ if (this._xregexp && this._xregexp.captureNames) {
+ for (var i = 1; i < match.length; i++) {
+ name = this._xregexp.captureNames[i - 1];
+ if (name)
+ match[name] = match[i];
+ }
+ }
+ // Fix browsers that increment `lastIndex` after zero-length matches
+ if (!compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index))
+ this.lastIndex--;
+ }
+ return match;
+ };
+
+ // Don't override `test` if it won't change anything
+ if (!compliantLastIndexIncrement) {
+ // Fix browser bug in native method
+ RegExp.prototype.test = function (str) {
+ // Use the native `exec` to skip some processing overhead, even though the overriden
+ // `exec` would take care of the `lastIndex` fix
+ var match = real.exec.call(this, str);
+ // Fix browsers that increment `lastIndex` after zero-length matches
+ if (match && this.global && !match[0].length && (this.lastIndex > match.index))
+ this.lastIndex--;
+ return !!match;
+ };
+ }
+
+ //---------------------------------
+ // Private helper functions
+ //---------------------------------
+
+ function getNativeFlags (regex) {
+ return (regex.global ? "g" : "") +
+ (regex.ignoreCase ? "i" : "") +
+ (regex.multiline ? "m" : "") +
+ (regex.extended ? "x" : "") + // Proposed for ES4; included in AS3
+ (regex.sticky ? "y" : "");
+ };
+
+ function indexOf (array, item, from) {
+ if (Array.prototype.indexOf) // Use the native array method if available
+ return array.indexOf(item, from);
+ for (var i = from || 0; i < array.length; i++) {
+ if (array[i] === item)
+ return i;
+ }
+ return -1;
+ };
+
+});// vim: ts=4 sts=4 sw=4 expandtab
+// -- kriskowal Kris Kowal Copyright (C) 2009-2011 MIT License
+// -- tlrobinson Tom Robinson Copyright (C) 2009-2010 MIT License (Narwhal Project)
+// -- dantman Daniel Friesen Copyright (C) 2010 XXX TODO License or CLA
+// -- fschaefer Florian Schäfer Copyright (C) 2010 MIT License
+// -- Gozala Irakli Gozalishvili Copyright (C) 2010 MIT License
+// -- kitcambridge Kit Cambridge Copyright (C) 2011 MIT License
+// -- kossnocorp Sasha Koss XXX TODO License or CLA
+// -- bryanforbes Bryan Forbes XXX TODO License or CLA
+// -- killdream Quildreen Motta Copyright (C) 2011 MIT Licence
+// -- michaelficarra Michael Ficarra Copyright (C) 2011 3-clause BSD License
+// -- sharkbrainguy Gerard Paapu Copyright (C) 2011 MIT License
+// -- bbqsrc Brendan Molloy (C) 2011 Creative Commons Zero (public domain)
+// -- iwyg XXX TODO License or CLA
+// -- DomenicDenicola Domenic Denicola Copyright (C) 2011 MIT License
+// -- xavierm02 Montillet Xavier XXX TODO License or CLA
+// -- Raynos Raynos XXX TODO License or CLA
+// -- samsonjs Sami Samhuri Copyright (C) 2010 MIT License
+// -- rwldrn Rick Waldron Copyright (C) 2011 MIT License
+// -- lexer Alexey Zakharov XXX TODO License or CLA
+
+/*!
+ Copyright (c) 2009, 280 North Inc. http://280north.com/
+ MIT License. http://github.com/280north/narwhal/blob/master/README.md
+*/
+
+define('ace/lib/es5-shim', ['require', 'exports', 'module' ], function(require, exports, module) {
+
+/**
+ * Brings an environment as close to ECMAScript 5 compliance
+ * as is possible with the facilities of erstwhile engines.
+ *
+ * Annotated ES5: http://es5.github.com/ (specific links below)
+ * ES5 Spec: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
+ *
+ * @module
+ */
+
+/*whatsupdoc*/
+
+//
+// Function
+// ========
+//
+
+// ES-5 15.3.4.5
+// http://es5.github.com/#x15.3.4.5
+
+if (!Function.prototype.bind) {
+ Function.prototype.bind = function bind(that) { // .length is 1
+ // 1. Let Target be the this value.
+ var target = this;
+ // 2. If IsCallable(Target) is false, throw a TypeError exception.
+ if (typeof target != "function")
+ throw new TypeError(); // TODO message
+ // 3. Let A be a new (possibly empty) internal list of all of the
+ // argument values provided after thisArg (arg1, arg2 etc), in order.
+ // XXX slicedArgs will stand in for "A" if used
+ var args = slice.call(arguments, 1); // for normal call
+ // 4. Let F be a new native ECMAScript object.
+ // 11. Set the [[Prototype]] internal property of F to the standard
+ // built-in Function prototype object as specified in 15.3.3.1.
+ // 12. Set the [[Call]] internal property of F as described in
+ // 15.3.4.5.1.
+ // 13. Set the [[Construct]] internal property of F as described in
+ // 15.3.4.5.2.
+ // 14. Set the [[HasInstance]] internal property of F as described in
+ // 15.3.4.5.3.
+ var bound = function () {
+
+ if (this instanceof bound) {
+ // 15.3.4.5.2 [[Construct]]
+ // When the [[Construct]] internal method of a function object,
+ // F that was created using the bind function is called with a
+ // list of arguments ExtraArgs, the following steps are taken:
+ // 1. Let target be the value of F's [[TargetFunction]]
+ // internal property.
+ // 2. If target has no [[Construct]] internal method, a
+ // TypeError exception is thrown.
+ // 3. Let boundArgs be the value of F's [[BoundArgs]] internal
+ // property.
+ // 4. Let args be a new list containing the same values as the
+ // list boundArgs in the same order followed by the same
+ // values as the list ExtraArgs in the same order.
+ // 5. Return the result of calling the [[Construct]] internal
+ // method of target providing args as the arguments.
+
+ var F = function(){};
+ F.prototype = target.prototype;
+ var self = new F;
+
+ var result = target.apply(
+ self,
+ args.concat(slice.call(arguments))
+ );
+ if (result !== null && Object(result) === result)
+ return result;
+ return self;
+
+ } else {
+ // 15.3.4.5.1 [[Call]]
+ // When the [[Call]] internal method of a function object, F,
+ // which was created using the bind function is called with a
+ // this value and a list of arguments ExtraArgs, the following
+ // steps are taken:
+ // 1. Let boundArgs be the value of F's [[BoundArgs]] internal
+ // property.
+ // 2. Let boundThis be the value of F's [[BoundThis]] internal
+ // property.
+ // 3. Let target be the value of F's [[TargetFunction]] internal
+ // property.
+ // 4. Let args be a new list containing the same values as the
+ // list boundArgs in the same order followed by the same
+ // values as the list ExtraArgs in the same order.
+ // 5. Return the result of calling the [[Call]] internal method
+ // of target providing boundThis as the this value and
+ // providing args as the arguments.
+
+ // equiv: target.call(this, ...boundArgs, ...args)
+ return target.apply(
+ that,
+ args.concat(slice.call(arguments))
+ );
+
+ }
+
+ };
+ // XXX bound.length is never writable, so don't even try
+ //
+ // 15. If the [[Class]] internal property of Target is "Function", then
+ // a. Let L be the length property of Target minus the length of A.
+ // b. Set the length own property of F to either 0 or L, whichever is
+ // larger.
+ // 16. Else set the length own property of F to 0.
+ // 17. Set the attributes of the length own property of F to the values
+ // specified in 15.3.5.1.
+
+ // TODO
+ // 18. Set the [[Extensible]] internal property of F to true.
+
+ // TODO
+ // 19. Let thrower be the [[ThrowTypeError]] function Object (13.2.3).
+ // 20. Call the [[DefineOwnProperty]] internal method of F with
+ // arguments "caller", PropertyDescriptor {[[Get]]: thrower, [[Set]]:
+ // thrower, [[Enumerable]]: false, [[Configurable]]: false}, and
+ // false.
+ // 21. Call the [[DefineOwnProperty]] internal method of F with
+ // arguments "arguments", PropertyDescriptor {[[Get]]: thrower,
+ // [[Set]]: thrower, [[Enumerable]]: false, [[Configurable]]: false},
+ // and false.
+
+ // TODO
+ // NOTE Function objects created using Function.prototype.bind do not
+ // have a prototype property or the [[Code]], [[FormalParameters]], and
+ // [[Scope]] internal properties.
+ // XXX can't delete prototype in pure-js.
+
+ // 22. Return F.
+ return bound;
+ };
+}
+
+// Shortcut to an often accessed properties, in order to avoid multiple
+// dereference that costs universally.
+// _Please note: Shortcuts are defined after `Function.prototype.bind` as we
+// us it in defining shortcuts.
+var call = Function.prototype.call;
+var prototypeOfArray = Array.prototype;
+var prototypeOfObject = Object.prototype;
+var slice = prototypeOfArray.slice;
+var toString = call.bind(prototypeOfObject.toString);
+var owns = call.bind(prototypeOfObject.hasOwnProperty);
+
+// If JS engine supports accessors creating shortcuts.
+var defineGetter;
+var defineSetter;
+var lookupGetter;
+var lookupSetter;
+var supportsAccessors;
+if ((supportsAccessors = owns(prototypeOfObject, "__defineGetter__"))) {
+ defineGetter = call.bind(prototypeOfObject.__defineGetter__);
+ defineSetter = call.bind(prototypeOfObject.__defineSetter__);
+ lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);
+ lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);
+}
+
+//
+// Array
+// =====
+//
+
+// ES5 15.4.3.2
+// http://es5.github.com/#x15.4.3.2
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/isArray
+if (!Array.isArray) {
+ Array.isArray = function isArray(obj) {
+ return toString(obj) == "[object Array]";
+ };
+}
+
+// The IsCallable() check in the Array functions
+// has been replaced with a strict check on the
+// internal class of the object to trap cases where
+// the provided function was actually a regular
+// expression literal, which in V8 and
+// JavaScriptCore is a typeof "function". Only in
+// V8 are regular expression literals permitted as
+// reduce parameters, so it is desirable in the
+// general case for the shim to match the more
+// strict and common behavior of rejecting regular
+// expressions.
+
+// ES5 15.4.4.18
+// http://es5.github.com/#x15.4.4.18
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/array/forEach
+if (!Array.prototype.forEach) {
+ Array.prototype.forEach = function forEach(fun /*, thisp*/) {
+ var self = toObject(this),
+ thisp = arguments[1],
+ i = 0,
+ length = self.length >>> 0;
+
+ // If no callback function or if callback is not a callable function
+ if (toString(fun) != "[object Function]") {
+ throw new TypeError(); // TODO message
+ }
+
+ while (i < length) {
+ if (i in self) {
+ // Invoke the callback function with call, passing arguments:
+ // context, property value, property key, thisArg object context
+ fun.call(thisp, self[i], i, self);
+ }
+ i++;
+ }
+ };
+}
+
+// ES5 15.4.4.19
+// http://es5.github.com/#x15.4.4.19
+// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/map
+if (!Array.prototype.map) {
+ Array.prototype.map = function map(fun /*, thisp*/) {
+ var self = toObject(this),
+ length = self.length >>> 0,
+ result = Array(length),
+ thisp = arguments[1];
+
+ // If no callback function or if callback is not a callable function
+ if (toString(fun) != "[object Function]") {
+ throw new TypeError(); // TODO message
+ }
+
+ for (var i = 0; i < length; i++) {
+ if (i in self)
+ result[i] = fun.call(thisp, self[i], i, self);
+ }
+ return result;
+ };
+}
+
+// ES5 15.4.4.20
+// http://es5.github.com/#x15.4.4.20
+// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/filter
+if (!Array.prototype.filter) {
+ Array.prototype.filter = function filter(fun /*, thisp */) {
+ var self = toObject(this),
+ length = self.length >>> 0,
+ result = [],
+ thisp = arguments[1];
+
+ // If no callback function or if callback is not a callable function
+ if (toString(fun) != "[object Function]") {
+ throw new TypeError(); // TODO message
+ }
+
+ for (var i = 0; i < length; i++) {
+ if (i in self && fun.call(thisp, self[i], i, self))
+ result.push(self[i]);
+ }
+ return result;
+ };
+}
+
+// ES5 15.4.4.16
+// http://es5.github.com/#x15.4.4.16
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/every
+if (!Array.prototype.every) {
+ Array.prototype.every = function every(fun /*, thisp */) {
+ var self = toObject(this),
+ length = self.length >>> 0,
+ thisp = arguments[1];
+
+ // If no callback function or if callback is not a callable function
+ if (toString(fun) != "[object Function]") {
+ throw new TypeError(); // TODO message
+ }
+
+ for (var i = 0; i < length; i++) {
+ if (i in self && !fun.call(thisp, self[i], i, self))
+ return false;
+ }
+ return true;
+ };
+}
+
+// ES5 15.4.4.17
+// http://es5.github.com/#x15.4.4.17
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/some
+if (!Array.prototype.some) {
+ Array.prototype.some = function some(fun /*, thisp */) {
+ var self = toObject(this),
+ length = self.length >>> 0,
+ thisp = arguments[1];
+
+ // If no callback function or if callback is not a callable function
+ if (toString(fun) != "[object Function]") {
+ throw new TypeError(); // TODO message
+ }
+
+ for (var i = 0; i < length; i++) {
+ if (i in self && fun.call(thisp, self[i], i, self))
+ return true;
+ }
+ return false;
+ };
+}
+
+// ES5 15.4.4.21
+// http://es5.github.com/#x15.4.4.21
+// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/reduce
+if (!Array.prototype.reduce) {
+ Array.prototype.reduce = function reduce(fun /*, initial*/) {
+ var self = toObject(this),
+ length = self.length >>> 0;
+
+ // If no callback function or if callback is not a callable function
+ if (toString(fun) != "[object Function]") {
+ throw new TypeError(); // TODO message
+ }
+
+ // no value to return if no initial value and an empty array
+ if (!length && arguments.length == 1)
+ throw new TypeError(); // TODO message
+
+ var i = 0;
+ var result;
+ if (arguments.length >= 2) {
+ result = arguments[1];
+ } else {
+ do {
+ if (i in self) {
+ result = self[i++];
+ break;
+ }
+
+ // if array contains no values, no initial value to return
+ if (++i >= length)
+ throw new TypeError(); // TODO message
+ } while (true);
+ }
+
+ for (; i < length; i++) {
+ if (i in self)
+ result = fun.call(void 0, result, self[i], i, self);
+ }
+
+ return result;
+ };
+}
+
+// ES5 15.4.4.22
+// http://es5.github.com/#x15.4.4.22
+// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/reduceRight
+if (!Array.prototype.reduceRight) {
+ Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {
+ var self = toObject(this),
+ length = self.length >>> 0;
+
+ // If no callback function or if callback is not a callable function
+ if (toString(fun) != "[object Function]") {
+ throw new TypeError(); // TODO message
+ }
+
+ // no value to return if no initial value, empty array
+ if (!length && arguments.length == 1)
+ throw new TypeError(); // TODO message
+
+ var result, i = length - 1;
+ if (arguments.length >= 2) {
+ result = arguments[1];
+ } else {
+ do {
+ if (i in self) {
+ result = self[i--];
+ break;
+ }
+
+ // if array contains no values, no initial value to return
+ if (--i < 0)
+ throw new TypeError(); // TODO message
+ } while (true);
+ }
+
+ do {
+ if (i in this)
+ result = fun.call(void 0, result, self[i], i, self);
+ } while (i--);
+
+ return result;
+ };
+}
+
+// ES5 15.4.4.14
+// http://es5.github.com/#x15.4.4.14
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf
+if (!Array.prototype.indexOf) {
+ Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {
+ var self = toObject(this),
+ length = self.length >>> 0;
+
+ if (!length)
+ return -1;
+
+ var i = 0;
+ if (arguments.length > 1)
+ i = toInteger(arguments[1]);
+
+ // handle negative indices
+ i = i >= 0 ? i : Math.max(0, length + i);
+ for (; i < length; i++) {
+ if (i in self && self[i] === sought) {
+ return i;
+ }
+ }
+ return -1;
+ };
+}
+
+// ES5 15.4.4.15
+// http://es5.github.com/#x15.4.4.15
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/lastIndexOf
+if (!Array.prototype.lastIndexOf) {
+ Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {
+ var self = toObject(this),
+ length = self.length >>> 0;
+
+ if (!length)
+ return -1;
+ var i = length - 1;
+ if (arguments.length > 1)
+ i = Math.min(i, toInteger(arguments[1]));
+ // handle negative indices
+ i = i >= 0 ? i : length - Math.abs(i);
+ for (; i >= 0; i--) {
+ if (i in self && sought === self[i])
+ return i;
+ }
+ return -1;
+ };
+}
+
+//
+// Object
+// ======
+//
+
+// ES5 15.2.3.2
+// http://es5.github.com/#x15.2.3.2
+if (!Object.getPrototypeOf) {
+ // https://github.com/kriskowal/es5-shim/issues#issue/2
+ // http://ejohn.org/blog/objectgetprototypeof/
+ // recommended by fschaefer on github
+ Object.getPrototypeOf = function getPrototypeOf(object) {
+ return object.__proto__ || (
+ object.constructor ?
+ object.constructor.prototype :
+ prototypeOfObject
+ );
+ };
+}
+
+// ES5 15.2.3.3
+// http://es5.github.com/#x15.2.3.3
+if (!Object.getOwnPropertyDescriptor) {
+ var ERR_NON_OBJECT = "Object.getOwnPropertyDescriptor called on a " +
+ "non-object: ";
+ Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {
+ if ((typeof object != "object" && typeof object != "function") || object === null)
+ throw new TypeError(ERR_NON_OBJECT + object);
+ // If object does not owns property return undefined immediately.
+ if (!owns(object, property))
+ return;
+
+ var descriptor, getter, setter;
+
+ // If object has a property then it's for sure both `enumerable` and
+ // `configurable`.
+ descriptor = { enumerable: true, configurable: true };
+
+ // If JS engine supports accessor properties then property may be a
+ // getter or setter.
+ if (supportsAccessors) {
+ // Unfortunately `__lookupGetter__` will return a getter even
+ // if object has own non getter property along with a same named
+ // inherited getter. To avoid misbehavior we temporary remove
+ // `__proto__` so that `__lookupGetter__` will return getter only
+ // if it's owned by an object.
+ var prototype = object.__proto__;
+ object.__proto__ = prototypeOfObject;
+
+ var getter = lookupGetter(object, property);
+ var setter = lookupSetter(object, property);
+
+ // Once we have getter and setter we can put values back.
+ object.__proto__ = prototype;
+
+ if (getter || setter) {
+ if (getter) descriptor.get = getter;
+ if (setter) descriptor.set = setter;
+
+ // If it was accessor property we're done and return here
+ // in order to avoid adding `value` to the descriptor.
+ return descriptor;
+ }
+ }
+
+ // If we got this far we know that object has an own property that is
+ // not an accessor so we set it as a value and return descriptor.
+ descriptor.value = object[property];
+ return descriptor;
+ };
+}
+
+// ES5 15.2.3.4
+// http://es5.github.com/#x15.2.3.4
+if (!Object.getOwnPropertyNames) {
+ Object.getOwnPropertyNames = function getOwnPropertyNames(object) {
+ return Object.keys(object);
+ };
+}
+
+// ES5 15.2.3.5
+// http://es5.github.com/#x15.2.3.5
+if (!Object.create) {
+ Object.create = function create(prototype, properties) {
+ var object;
+ if (prototype === null) {
+ object = { "__proto__": null };
+ } else {
+ if (typeof prototype != "object")
+ throw new TypeError("typeof prototype["+(typeof prototype)+"] != 'object'");
+ var Type = function () {};
+ Type.prototype = prototype;
+ object = new Type();
+ // IE has no built-in implementation of `Object.getPrototypeOf`
+ // neither `__proto__`, but this manually setting `__proto__` will
+ // guarantee that `Object.getPrototypeOf` will work as expected with
+ // objects created using `Object.create`
+ object.__proto__ = prototype;
+ }
+ if (properties !== void 0)
+ Object.defineProperties(object, properties);
+ return object;
+ };
+}
+
+// ES5 15.2.3.6
+// http://es5.github.com/#x15.2.3.6
+
+// Patch for WebKit and IE8 standard mode
+// Designed by hax <hax.github.com>
+// related issue: https://github.com/kriskowal/es5-shim/issues#issue/5
+// IE8 Reference:
+// http://msdn.microsoft.com/en-us/library/dd282900.aspx
+// http://msdn.microsoft.com/en-us/library/dd229916.aspx
+// WebKit Bugs:
+// https://bugs.webkit.org/show_bug.cgi?id=36423
+
+function doesDefinePropertyWork(object) {
+ try {
+ Object.defineProperty(object, "sentinel", {});
+ return "sentinel" in object;
+ } catch (exception) {
+ // returns falsy
+ }
+}
+
+// check whether defineProperty works if it's given. Otherwise,
+// shim partially.
+if (Object.defineProperty) {
+ var definePropertyWorksOnObject = doesDefinePropertyWork({});
+ var definePropertyWorksOnDom = typeof document == "undefined" ||
+ doesDefinePropertyWork(document.createElement("div"));
+ if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {
+ var definePropertyFallback = Object.defineProperty;
+ }
+}
+
+if (!Object.defineProperty || definePropertyFallback) {
+ var ERR_NON_OBJECT_DESCRIPTOR = "Property description must be an object: ";
+ var ERR_NON_OBJECT_TARGET = "Object.defineProperty called on non-object: "
+ var ERR_ACCESSORS_NOT_SUPPORTED = "getters & setters can not be defined " +
+ "on this javascript engine";
+
+ Object.defineProperty = function defineProperty(object, property, descriptor) {
+ if ((typeof object != "object" && typeof object != "function") || object === null)
+ throw new TypeError(ERR_NON_OBJECT_TARGET + object);
+ if ((typeof descriptor != "object" && typeof descriptor != "function") || descriptor === null)
+ throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);
+
+ // make a valiant attempt to use the real defineProperty
+ // for I8's DOM elements.
+ if (definePropertyFallback) {
+ try {
+ return definePropertyFallback.call(Object, object, property, descriptor);
+ } catch (exception) {
+ // try the shim if the real one doesn't work
+ }
+ }
+
+ // If it's a data property.
+ if (owns(descriptor, "value")) {
+ // fail silently if "writable", "enumerable", or "configurable"
+ // are requested but not supported
+ /*
+ // alternate approach:
+ if ( // can't implement these features; allow false but not true
+ !(owns(descriptor, "writable") ? descriptor.writable : true) ||
+ !(owns(descriptor, "enumerable") ? descriptor.enumerable : true) ||
+ !(owns(descriptor, "configurable") ? descriptor.configurable : true)
+ )
+ throw new RangeError(
+ "This implementation of Object.defineProperty does not " +
+ "support configurable, enumerable, or writable."
+ );
+ */
+
+ if (supportsAccessors && (lookupGetter(object, property) ||
+ lookupSetter(object, property)))
+ {
+ // As accessors are supported only on engines implementing
+ // `__proto__` we can safely override `__proto__` while defining
+ // a property to make sure that we don't hit an inherited
+ // accessor.
+ var prototype = object.__proto__;
+ object.__proto__ = prototypeOfObject;
+ // Deleting a property anyway since getter / setter may be
+ // defined on object itself.
+ delete object[property];
+ object[property] = descriptor.value;
+ // Setting original `__proto__` back now.
+ object.__proto__ = prototype;
+ } else {
+ object[property] = descriptor.value;
+ }
+ } else {
+ if (!supportsAccessors)
+ throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);
+ // If we got that far then getters and setters can be defined !!
+ if (owns(descriptor, "get"))
+ defineGetter(object, property, descriptor.get);
+ if (owns(descriptor, "set"))
+ defineSetter(object, property, descriptor.set);
+ }
+
+ return object;
+ };
+}
+
+// ES5 15.2.3.7
+// http://es5.github.com/#x15.2.3.7
+if (!Object.defineProperties) {
+ Object.defineProperties = function defineProperties(object, properties) {
+ for (var property in properties) {
+ if (owns(properties, property))
+ Object.defineProperty(object, property, properties[property]);
+ }
+ return object;
+ };
+}
+
+// ES5 15.2.3.8
+// http://es5.github.com/#x15.2.3.8
+if (!Object.seal) {
+ Object.seal = function seal(object) {
+ // this is misleading and breaks feature-detection, but
+ // allows "securable" code to "gracefully" degrade to working
+ // but insecure code.
+ return object;
+ };
+}
+
+// ES5 15.2.3.9
+// http://es5.github.com/#x15.2.3.9
+if (!Object.freeze) {
+ Object.freeze = function freeze(object) {
+ // this is misleading and breaks feature-detection, but
+ // allows "securable" code to "gracefully" degrade to working
+ // but insecure code.
+ return object;
+ };
+}
+
+// detect a Rhino bug and patch it
+try {
+ Object.freeze(function () {});
+} catch (exception) {
+ Object.freeze = (function freeze(freezeObject) {
+ return function freeze(object) {
+ if (typeof object == "function") {
+ return object;
+ } else {
+ return freezeObject(object);
+ }
+ };
+ })(Object.freeze);
+}
+
+// ES5 15.2.3.10
+// http://es5.github.com/#x15.2.3.10
+if (!Object.preventExtensions) {
+ Object.preventExtensions = function preventExtensions(object) {
+ // this is misleading and breaks feature-detection, but
+ // allows "securable" code to "gracefully" degrade to working
+ // but insecure code.
+ return object;
+ };
+}
+
+// ES5 15.2.3.11
+// http://es5.github.com/#x15.2.3.11
+if (!Object.isSealed) {
+ Object.isSealed = function isSealed(object) {
+ return false;
+ };
+}
+
+// ES5 15.2.3.12
+// http://es5.github.com/#x15.2.3.12
+if (!Object.isFrozen) {
+ Object.isFrozen = function isFrozen(object) {
+ return false;
+ };
+}
+
+// ES5 15.2.3.13
+// http://es5.github.com/#x15.2.3.13
+if (!Object.isExtensible) {
+ Object.isExtensible = function isExtensible(object) {
+ // 1. If Type(O) is not Object throw a TypeError exception.
+ if (Object(object) === object) {
+ throw new TypeError(); // TODO message
+ }
+ // 2. Return the Boolean value of the [[Extensible]] internal property of O.
+ var name = '';
+ while (owns(object, name)) {
+ name += '?';
+ }
+ object[name] = true;
+ var returnValue = owns(object, name);
+ delete object[name];
+ return returnValue;
+ };
+}
+
+// ES5 15.2.3.14
+// http://es5.github.com/#x15.2.3.14
+if (!Object.keys) {
+ // http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation
+ var hasDontEnumBug = true,
+ dontEnums = [
+ "toString",
+ "toLocaleString",
+ "valueOf",
+ "hasOwnProperty",
+ "isPrototypeOf",
+ "propertyIsEnumerable",
+ "constructor"
+ ],
+ dontEnumsLength = dontEnums.length;
+
+ for (var key in {"toString": null})
+ hasDontEnumBug = false;
+
+ Object.keys = function keys(object) {
+
+ if ((typeof object != "object" && typeof object != "function") || object === null)
+ throw new TypeError("Object.keys called on a non-object");
+
+ var keys = [];
+ for (var name in object) {
+ if (owns(object, name)) {
+ keys.push(name);
+ }
+ }
+
+ if (hasDontEnumBug) {
+ for (var i = 0, ii = dontEnumsLength; i < ii; i++) {
+ var dontEnum = dontEnums[i];
+ if (owns(object, dontEnum)) {
+ keys.push(dontEnum);
+ }
+ }
+ }
+
+ return keys;
+ };
+
+}
+
+//
+// Date
+// ====
+//
+
+// ES5 15.9.5.43
+// http://es5.github.com/#x15.9.5.43
+// This function returns a String value represent the instance in time
+// represented by this Date object. The format of the String is the Date Time
+// string format defined in 15.9.1.15. All fields are present in the String.
+// The time zone is always UTC, denoted by the suffix Z. If the time value of
+// this object is not a finite Number a RangeError exception is thrown.
+if (!Date.prototype.toISOString || (new Date(-62198755200000).toISOString().indexOf('-000001') === -1)) {
+ Date.prototype.toISOString = function toISOString() {
+ var result, length, value, year;
+ if (!isFinite(this))
+ throw new RangeError;
+
+ // the date time string format is specified in 15.9.1.15.
+ result = [this.getUTCMonth() + 1, this.getUTCDate(),
+ this.getUTCHours(), this.getUTCMinutes(), this.getUTCSeconds()];
+ year = this.getUTCFullYear();
+ year = (year < 0 ? '-' : (year > 9999 ? '+' : '')) + ('00000' + Math.abs(year)).slice(0 <= year && year <= 9999 ? -4 : -6);
+
+ length = result.length;
+ while (length--) {
+ value = result[length];
+ // pad months, days, hours, minutes, and seconds to have two digits.
+ if (value < 10)
+ result[length] = "0" + value;
+ }
+ // pad milliseconds to have three digits.
+ return year + "-" + result.slice(0, 2).join("-") + "T" + result.slice(2).join(":") + "." +
+ ("000" + this.getUTCMilliseconds()).slice(-3) + "Z";
+ }
+}
+
+// ES5 15.9.4.4
+// http://es5.github.com/#x15.9.4.4
+if (!Date.now) {
+ Date.now = function now() {
+ return new Date().getTime();
+ };
+}
+
+// ES5 15.9.5.44
+// http://es5.github.com/#x15.9.5.44
+// This function provides a String representation of a Date object for use by
+// JSON.stringify (15.12.3).
+if (!Date.prototype.toJSON) {
+ Date.prototype.toJSON = function toJSON(key) {
+ // When the toJSON method is called with argument key, the following
+ // steps are taken:
+
+ // 1. Let O be the result of calling ToObject, giving it the this
+ // value as its argument.
+ // 2. Let tv be ToPrimitive(O, hint Number).
+ // 3. If tv is a Number and is not finite, return null.
+ // XXX
+ // 4. Let toISO be the result of calling the [[Get]] internal method of
+ // O with argument "toISOString".
+ // 5. If IsCallable(toISO) is false, throw a TypeError exception.
+ if (typeof this.toISOString != "function")
+ throw new TypeError(); // TODO message
+ // 6. Return the result of calling the [[Call]] internal method of
+ // toISO with O as the this value and an empty argument list.
+ return this.toISOString();
+
+ // NOTE 1 The argument is ignored.
+
+ // NOTE 2 The toJSON function is intentionally generic; it does not
+ // require that its this value be a Date object. Therefore, it can be
+ // transferred to other kinds of objects for use as a method. However,
+ // it does require that any such object have a toISOString method. An
+ // object is free to use the argument key to filter its
+ // stringification.
+ };
+}
+
+// ES5 15.9.4.2
+// http://es5.github.com/#x15.9.4.2
+// based on work shared by Daniel Friesen (dantman)
+// http://gist.github.com/303249
+if (Date.parse("+275760-09-13T00:00:00.000Z") !== 8.64e15) {
+ // XXX global assignment won't work in embeddings that use
+ // an alternate object for the context.
+ Date = (function(NativeDate) {
+
+ // Date.length === 7
+ var Date = function Date(Y, M, D, h, m, s, ms) {
+ var length = arguments.length;
+ if (this instanceof NativeDate) {
+ var date = length == 1 && String(Y) === Y ? // isString(Y)
+ // We explicitly pass it through parse:
+ new NativeDate(Date.parse(Y)) :
+ // We have to manually make calls depending on argument
+ // length here
+ length >= 7 ? new NativeDate(Y, M, D, h, m, s, ms) :
+ length >= 6 ? new NativeDate(Y, M, D, h, m, s) :
+ length >= 5 ? new NativeDate(Y, M, D, h, m) :
+ length >= 4 ? new NativeDate(Y, M, D, h) :
+ length >= 3 ? new NativeDate(Y, M, D) :
+ length >= 2 ? new NativeDate(Y, M) :
+ length >= 1 ? new NativeDate(Y) :
+ new NativeDate();
+ // Prevent mixups with unfixed Date object
+ date.constructor = Date;
+ return date;
+ }
+ return NativeDate.apply(this, arguments);
+ };
+
+ // 15.9.1.15 Date Time String Format.
+ var isoDateExpression = new RegExp("^" +
+ "(\\d{4}|[\+\-]\\d{6})" + // four-digit year capture or sign + 6-digit extended year
+ "(?:-(\\d{2})" + // optional month capture
+ "(?:-(\\d{2})" + // optional day capture
+ "(?:" + // capture hours:minutes:seconds.milliseconds
+ "T(\\d{2})" + // hours capture
+ ":(\\d{2})" + // minutes capture
+ "(?:" + // optional :seconds.milliseconds
+ ":(\\d{2})" + // seconds capture
+ "(?:\\.(\\d{3}))?" + // milliseconds capture
+ ")?" +
+ "(?:" + // capture UTC offset component
+ "Z|" + // UTC capture
+ "(?:" + // offset specifier +/-hours:minutes
+ "([-+])" + // sign capture
+ "(\\d{2})" + // hours offset capture
+ ":(\\d{2})" + // minutes offset capture
+ ")" +
+ ")?)?)?)?" +
+ "$");
+
+ // Copy any custom methods a 3rd party library may have added
+ for (var key in NativeDate)
+ Date[key] = NativeDate[key];
+
+ // Copy "native" methods explicitly; they may be non-enumerable
+ Date.now = NativeDate.now;
+ Date.UTC = NativeDate.UTC;
+ Date.prototype = NativeDate.prototype;
+ Date.prototype.constructor = Date;
+
+ // Upgrade Date.parse to handle simplified ISO 8601 strings
+ Date.parse = function parse(string) {
+ var match = isoDateExpression.exec(string);
+ if (match) {
+ match.shift(); // kill match[0], the full match
+ // parse months, days, hours, minutes, seconds, and milliseconds
+ for (var i = 1; i < 7; i++) {
+ // provide default values if necessary
+ match[i] = +(match[i] || (i < 3 ? 1 : 0));
+ // match[1] is the month. Months are 0-11 in JavaScript
+ // `Date` objects, but 1-12 in ISO notation, so we
+ // decrement.
+ if (i == 1)
+ match[i]--;
+ }
+
+ // parse the UTC offset component
+ var minuteOffset = +match.pop(), hourOffset = +match.pop(), sign = match.pop();
+
+ // compute the explicit time zone offset if specified
+ var offset = 0;
+ if (sign) {
+ // detect invalid offsets and return early
+ if (hourOffset > 23 || minuteOffset > 59)
+ return NaN;
+
+ // express the provided time zone offset in minutes. The offset is
+ // negative for time zones west of UTC; positive otherwise.
+ offset = (hourOffset * 60 + minuteOffset) * 6e4 * (sign == "+" ? -1 : 1);
+ }
+
+ // Date.UTC for years between 0 and 99 converts year to 1900 + year
+ // The Gregorian calendar has a 400-year cycle, so
+ // to Date.UTC(year + 400, .... ) - 12622780800000 == Date.UTC(year, ...),
+ // where 12622780800000 - number of milliseconds in Gregorian calendar 400 years
+ var year = +match[0];
+ if (0 <= year && year <= 99) {
+ match[0] = year + 400;
+ return NativeDate.UTC.apply(this, match) + offset - 12622780800000;
+ }
+
+ // compute a new UTC date value, accounting for the optional offset
+ return NativeDate.UTC.apply(this, match) + offset;
+ }
+ return NativeDate.parse.apply(this, arguments);
+ };
+
+ return Date;
+ })(Date);
+}
+
+//
+// String
+// ======
+//
+
+// ES5 15.5.4.20
+// http://es5.github.com/#x15.5.4.20
+var ws = "\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003" +
+ "\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028" +
+ "\u2029\uFEFF";
+if (!String.prototype.trim || ws.trim()) {
+ // http://blog.stevenlevithan.com/archives/faster-trim-javascript
+ // http://perfectionkills.com/whitespace-deviations/
+ ws = "[" + ws + "]";
+ var trimBeginRegexp = new RegExp("^" + ws + ws + "*"),
+ trimEndRegexp = new RegExp(ws + ws + "*$");
+ String.prototype.trim = function trim() {
+ return String(this).replace(trimBeginRegexp, "").replace(trimEndRegexp, "");
+ };
+}
+
+//
+// Util
+// ======
+//
+
+// ES5 9.4
+// http://es5.github.com/#x9.4
+// http://jsperf.com/to-integer
+var toInteger = function (n) {
+ n = +n;
+ if (n !== n) // isNaN
+ n = 0;
+ else if (n !== 0 && n !== (1/0) && n !== -(1/0))
+ n = (n > 0 || -1) * Math.floor(Math.abs(n));
+ return n;
+};
+
+var prepareString = "a"[0] != "a",
+ // ES5 9.9
+ // http://es5.github.com/#x9.9
+ toObject = function (o) {
+ if (o == null) { // this matches both null and undefined
+ throw new TypeError(); // TODO message
+ }
+ // If the implementation doesn't support by-index access of
+ // string characters (ex. IE < 7), split the string
+ if (prepareString && typeof o == "string" && o) {
+ return o.split("");
+ }
+ return Object(o);
+ };
+});/* vim:ts=4:sts=4:sw=4:
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ * Irakli Gozalishvili <rfobic@gmail.com> (http://jeditoolkit.com)
+ * Mike de Boer <mike AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/lib/event_emitter', ['require', 'exports', 'module' ], function(require, exports, module) {
+"use strict";
+
+var EventEmitter = {};
+
+EventEmitter._emit =
+EventEmitter._dispatchEvent = function(eventName, e) {
+ this._eventRegistry = this._eventRegistry || {};
+ this._defaultHandlers = this._defaultHandlers || {};
+
+ var listeners = this._eventRegistry[eventName] || [];
+ var defaultHandler = this._defaultHandlers[eventName];
+ if (!listeners.length && !defaultHandler)
+ return;
+
+ e = e || {};
+ e.type = eventName;
+
+ if (!e.stopPropagation) {
+ e.stopPropagation = function() {
+ this.propagationStopped = true;
+ };
+ }
+
+ if (!e.preventDefault) {
+ e.preventDefault = function() {
+ this.defaultPrevented = true;
+ };
+ }
+
+ for (var i=0; i<listeners.length; i++) {
+ listeners[i](e);
+ if (e.propagationStopped)
+ break;
+ }
+
+ if (defaultHandler && !e.defaultPrevented)
+ defaultHandler(e);
+};
+
+EventEmitter.setDefaultHandler = function(eventName, callback) {
+ this._defaultHandlers = this._defaultHandlers || {};
+
+ if (this._defaultHandlers[eventName])
+ throw new Error("The default handler for '" + eventName + "' is already set");
+
+ this._defaultHandlers[eventName] = callback;
+};
+
+EventEmitter.on =
+EventEmitter.addEventListener = function(eventName, callback) {
+ this._eventRegistry = this._eventRegistry || {};
+
+ var listeners = this._eventRegistry[eventName];
+ if (!listeners)
+ var listeners = this._eventRegistry[eventName] = [];
+
+ if (listeners.indexOf(callback) == -1)
+ listeners.push(callback);
+};
+
+EventEmitter.removeListener =
+EventEmitter.removeEventListener = function(eventName, callback) {
+ this._eventRegistry = this._eventRegistry || {};
+
+ var listeners = this._eventRegistry[eventName];
+ if (!listeners)
+ return;
+
+ var index = listeners.indexOf(callback);
+ if (index !== -1)
+ listeners.splice(index, 1);
+};
+
+EventEmitter.removeAllListeners = function(eventName) {
+ if (this._eventRegistry) this._eventRegistry[eventName] = [];
+};
+
+exports.EventEmitter = EventEmitter;
+
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/lib/oop', ['require', 'exports', 'module' ], function(require, exports, module) {
+"use strict";
+
+exports.inherits = (function() {
+ var tempCtor = function() {};
+ return function(ctor, superCtor) {
+ tempCtor.prototype = superCtor.prototype;
+ ctor.super_ = superCtor.prototype;
+ ctor.prototype = new tempCtor();
+ ctor.prototype.constructor = ctor;
+ };
+}());
+
+exports.mixin = function(obj, mixin) {
+ for (var key in mixin) {
+ obj[key] = mixin[key];
+ }
+};
+
+exports.implement = function(proto, mixin) {
+ exports.mixin(proto, mixin);
+};
+
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/mode/javascript_worker', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/worker/mirror', 'ace/worker/jshint', 'ace/narcissus/jsparse'], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var Mirror = require("../worker/mirror").Mirror;
+var lint = require("../worker/jshint").JSHINT;
+
+var JavaScriptWorker = exports.JavaScriptWorker = function(sender) {
+ Mirror.call(this, sender);
+ this.setTimeout(500);
+};
+
+oop.inherits(JavaScriptWorker, Mirror);
+
+(function() {
+
+ this.onUpdate = function() {
+ var value = this.doc.getValue();
+ value = value.replace(/^#!.*\n/, "\n");
+
+// var start = new Date();
+ var parser = require("../narcissus/jsparse");
+ try {
+ parser.parse(value);
+ } catch(e) {
+// console.log("narcissus")
+// console.log(e);
+ var chunks = e.message.split(":")
+ var message = chunks.pop().trim();
+ var lineNumber = parseInt(chunks.pop().trim()) - 1;
+ this.sender.emit("narcissus", {
+ row: lineNumber,
+ column: null, // TODO convert e.cursor
+ text: message,
+ type: "error"
+ });
+ return;
+ } finally {
+// console.log("parse time: " + (new Date() - start));
+ }
+
+// var start = new Date();
+// console.log("jslint")
+ lint(value, {undef: false, onevar: false, passfail: false});
+ this.sender.emit("jslint", lint.errors);
+// console.log("lint time: " + (new Date() - start));
+ }
+
+}).call(JavaScriptWorker.prototype);
+
+});define('ace/worker/mirror', ['require', 'exports', 'module' , 'ace/document', 'ace/lib/lang'], function(require, exports, module) {
+"use strict";
+
+var Document = require("../document").Document;
+var lang = require("../lib/lang");
+
+var Mirror = exports.Mirror = function(sender) {
+ this.sender = sender;
+ var doc = this.doc = new Document("");
+
+ var deferredUpdate = this.deferredUpdate = lang.deferredCall(this.onUpdate.bind(this));
+
+ var _self = this;
+ sender.on("change", function(e) {
+ doc.applyDeltas([e.data]);
+ deferredUpdate.schedule(_self.$timeout);
+ });
+};
+
+(function() {
+
+ this.$timeout = 500;
+
+ this.setTimeout = function(timeout) {
+ this.$timeout = timeout;
+ };
+
+ this.setValue = function(value) {
+ this.doc.setValue(value);
+ this.deferredUpdate.schedule(this.$timeout);
+ };
+
+ this.getValue = function(callbackId) {
+ this.sender.callback(this.doc.getValue(), callbackId);
+ };
+
+ this.onUpdate = function() {
+ // abstract method
+ };
+
+}).call(Mirror.prototype);
+
+});/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/document', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event_emitter', 'ace/range', 'ace/anchor'], function(require, exports, module) {
+"use strict";
+
+var oop = require("./lib/oop");
+var EventEmitter = require("./lib/event_emitter").EventEmitter;
+var Range = require("./range").Range;
+var Anchor = require("./anchor").Anchor;
+
+var Document = function(text) {
+ this.$lines = [];
+
+ if (Array.isArray(text)) {
+ this.insertLines(0, text);
+ }
+ // There has to be one line at least in the document. If you pass an empty
+ // string to the insert function, nothing will happen. Workaround.
+ else if (text.length == 0) {
+ this.$lines = [""];
+ } else {
+ this.insert({row: 0, column:0}, text);
+ }
+};
+
+(function() {
+
+ oop.implement(this, EventEmitter);
+
+ this.setValue = function(text) {
+ var len = this.getLength();
+ this.remove(new Range(0, 0, len, this.getLine(len-1).length));
+ this.insert({row: 0, column:0}, text);
+ };
+
+ this.getValue = function() {
+ return this.getAllLines().join(this.getNewLineCharacter());
+ };
+
+ this.createAnchor = function(row, column) {
+ return new Anchor(this, row, column);
+ };
+
+ // check for IE split bug
+ if ("aaa".split(/a/).length == 0)
+ this.$split = function(text) {
+ return text.replace(/\r\n|\r/g, "\n").split("\n");
+ }
+ else
+ this.$split = function(text) {
+ return text.split(/\r\n|\r|\n/);
+ };
+
+
+ this.$detectNewLine = function(text) {
+ var match = text.match(/^.*?(\r\n|\r|\n)/m);
+ if (match) {
+ this.$autoNewLine = match[1];
+ } else {
+ this.$autoNewLine = "\n";
+ }
+ };
+
+ this.getNewLineCharacter = function() {
+ switch (this.$newLineMode) {
+ case "windows":
+ return "\r\n";
+
+ case "unix":
+ return "\n";
+
+ case "auto":
+ return this.$autoNewLine;
+ }
+ };
+
+ this.$autoNewLine = "\n";
+ this.$newLineMode = "auto";
+ this.setNewLineMode = function(newLineMode) {
+ if (this.$newLineMode === newLineMode)
+ return;
+
+ this.$newLineMode = newLineMode;
+ };
+
+ this.getNewLineMode = function() {
+ return this.$newLineMode;
+ };
+
+ this.isNewLine = function(text) {
+ return (text == "\r\n" || text == "\r" || text == "\n");
+ };
+
+ /**
+ * Get a verbatim copy of the given line as it is in the document
+ */
+ this.getLine = function(row) {
+ return this.$lines[row] || "";
+ };
+
+ this.getLines = function(firstRow, lastRow) {
+ return this.$lines.slice(firstRow, lastRow + 1);
+ };
+
+ /**
+ * Returns all lines in the document as string array. Warning: The caller
+ * should not modify this array!
+ */
+ this.getAllLines = function() {
+ return this.getLines(0, this.getLength());
+ };
+
+ this.getLength = function() {
+ return this.$lines.length;
+ };
+
+ this.getTextRange = function(range) {
+ if (range.start.row == range.end.row) {
+ return this.$lines[range.start.row].substring(range.start.column,
+ range.end.column);
+ }
+ else {
+ var lines = [];
+ lines.push(this.$lines[range.start.row].substring(range.start.column));
+ lines.push.apply(lines, this.getLines(range.start.row+1, range.end.row-1));
+ lines.push(this.$lines[range.end.row].substring(0, range.end.column));
+ return lines.join(this.getNewLineCharacter());
+ }
+ };
+
+ this.$clipPosition = function(position) {
+ var length = this.getLength();
+ if (position.row >= length) {
+ position.row = Math.max(0, length - 1);
+ position.column = this.getLine(length-1).length;
+ }
+ return position;
+ };
+
+ this.insert = function(position, text) {
+ if (text.length == 0)
+ return position;
+
+ position = this.$clipPosition(position);
+
+ if (this.getLength() <= 1)
+ this.$detectNewLine(text);
+
+ var lines = this.$split(text);
+ var firstLine = lines.splice(0, 1)[0];
+ var lastLine = lines.length == 0 ? null : lines.splice(lines.length - 1, 1)[0];
+
+ position = this.insertInLine(position, firstLine);
+ if (lastLine !== null) {
+ position = this.insertNewLine(position); // terminate first line
+ position = this.insertLines(position.row, lines);
+ position = this.insertInLine(position, lastLine || "");
+ }
+ return position;
+ };
+
+ this.insertLines = function(row, lines) {
+ if (lines.length == 0)
+ return {row: row, column: 0};
+
+ var args = [row, 0];
+ args.push.apply(args, lines);
+ this.$lines.splice.apply(this.$lines, args);
+
+ var range = new Range(row, 0, row + lines.length, 0);
+ var delta = {
+ action: "insertLines",
+ range: range,
+ lines: lines
+ };
+ this._emit("change", { data: delta });
+ return range.end;
+ };
+
+ this.insertNewLine = function(position) {
+ position = this.$clipPosition(position);
+ var line = this.$lines[position.row] || "";
+
+ this.$lines[position.row] = line.substring(0, position.column);
+ this.$lines.splice(position.row + 1, 0, line.substring(position.column, line.length));
+
+ var end = {
+ row : position.row + 1,
+ column : 0
+ };
+
+ var delta = {
+ action: "insertText",
+ range: Range.fromPoints(position, end),
+ text: this.getNewLineCharacter()
+ };
+ this._emit("change", { data: delta });
+
+ return end;
+ };
+
+ this.insertInLine = function(position, text) {
+ if (text.length == 0)
+ return position;
+
+ var line = this.$lines[position.row] || "";
+
+ this.$lines[position.row] = line.substring(0, position.column) + text
+ + line.substring(position.column);
+
+ var end = {
+ row : position.row,
+ column : position.column + text.length
+ };
+
+ var delta = {
+ action: "insertText",
+ range: Range.fromPoints(position, end),
+ text: text
+ };
+ this._emit("change", { data: delta });
+
+ return end;
+ };
+
+ this.remove = function(range) {
+ // clip to document
+ range.start = this.$clipPosition(range.start);
+ range.end = this.$clipPosition(range.end);
+
+ if (range.isEmpty())
+ return range.start;
+
+ var firstRow = range.start.row;
+ var lastRow = range.end.row;
+
+ if (range.isMultiLine()) {
+ var firstFullRow = range.start.column == 0 ? firstRow : firstRow + 1;
+ var lastFullRow = lastRow - 1;
+
+ if (range.end.column > 0)
+ this.removeInLine(lastRow, 0, range.end.column);
+
+ if (lastFullRow >= firstFullRow)
+ this.removeLines(firstFullRow, lastFullRow);
+
+ if (firstFullRow != firstRow) {
+ this.removeInLine(firstRow, range.start.column, this.getLine(firstRow).length);
+ this.removeNewLine(range.start.row);
+ }
+ }
+ else {
+ this.removeInLine(firstRow, range.start.column, range.end.column);
+ }
+ return range.start;
+ };
+
+ this.removeInLine = function(row, startColumn, endColumn) {
+ if (startColumn == endColumn)
+ return;
+
+ var range = new Range(row, startColumn, row, endColumn);
+ var line = this.getLine(row);
+ var removed = line.substring(startColumn, endColumn);
+ var newLine = line.substring(0, startColumn) + line.substring(endColumn, line.length);
+ this.$lines.splice(row, 1, newLine);
+
+ var delta = {
+ action: "removeText",
+ range: range,
+ text: removed
+ };
+ this._emit("change", { data: delta });
+ return range.start;
+ };
+
+ /**
+ * Removes a range of full lines
+ *
+ * @param firstRow {Integer} The first row to be removed
+ * @param lastRow {Integer} The last row to be removed
+ * @return {String[]} The removed lines
+ */
+ this.removeLines = function(firstRow, lastRow) {
+ var range = new Range(firstRow, 0, lastRow + 1, 0);
+ var removed = this.$lines.splice(firstRow, lastRow - firstRow + 1);
+
+ var delta = {
+ action: "removeLines",
+ range: range,
+ nl: this.getNewLineCharacter(),
+ lines: removed
+ };
+ this._emit("change", { data: delta });
+ return removed;
+ };
+
+ this.removeNewLine = function(row) {
+ var firstLine = this.getLine(row);
+ var secondLine = this.getLine(row+1);
+
+ var range = new Range(row, firstLine.length, row+1, 0);
+ var line = firstLine + secondLine;
+
+ this.$lines.splice(row, 2, line);
+
+ var delta = {
+ action: "removeText",
+ range: range,
+ text: this.getNewLineCharacter()
+ };
+ this._emit("change", { data: delta });
+ };
+
+ this.replace = function(range, text) {
+ if (text.length == 0 && range.isEmpty())
+ return range.start;
+
+ // Shortcut: If the text we want to insert is the same as it is already
+ // in the document, we don't have to replace anything.
+ if (text == this.getTextRange(range))
+ return range.end;
+
+ this.remove(range);
+ if (text) {
+ var end = this.insert(range.start, text);
+ }
+ else {
+ end = range.start;
+ }
+
+ return end;
+ };
+
+ this.applyDeltas = function(deltas) {
+ for (var i=0; i<deltas.length; i++) {
+ var delta = deltas[i];
+ var range = Range.fromPoints(delta.range.start, delta.range.end);
+
+ if (delta.action == "insertLines")
+ this.insertLines(range.start.row, delta.lines);
+ else if (delta.action == "insertText")
+ this.insert(range.start, delta.text);
+ else if (delta.action == "removeLines")
+ this.removeLines(range.start.row, range.end.row - 1);
+ else if (delta.action == "removeText")
+ this.remove(range);
+ }
+ };
+
+ this.revertDeltas = function(deltas) {
+ for (var i=deltas.length-1; i>=0; i--) {
+ var delta = deltas[i];
+
+ var range = Range.fromPoints(delta.range.start, delta.range.end);
+
+ if (delta.action == "insertLines")
+ this.removeLines(range.start.row, range.end.row - 1);
+ else if (delta.action == "insertText")
+ this.remove(range);
+ else if (delta.action == "removeLines")
+ this.insertLines(range.start.row, delta.lines);
+ else if (delta.action == "removeText")
+ this.insert(range.start, delta.text);
+ }
+ };
+
+}).call(Document.prototype);
+
+exports.Document = Document;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/range', ['require', 'exports', 'module' ], function(require, exports, module) {
+"use strict";
+
+var Range = function(startRow, startColumn, endRow, endColumn) {
+ this.start = {
+ row: startRow,
+ column: startColumn
+ };
+
+ this.end = {
+ row: endRow,
+ column: endColumn
+ };
+};
+
+(function() {
+ this.isEequal = function(range) {
+ return this.start.row == range.start.row &&
+ this.end.row == range.end.row &&
+ this.start.column == range.start.column &&
+ this.end.column == range.end.column
+ };
+
+ this.toString = function() {
+ return ("Range: [" + this.start.row + "/" + this.start.column +
+ "] -> [" + this.end.row + "/" + this.end.column + "]");
+ };
+
+ this.contains = function(row, column) {
+ return this.compare(row, column) == 0;
+ };
+
+ /**
+ * Compares this range (A) with another range (B), where B is the passed in
+ * range.
+ *
+ * Return values:
+ * -2: (B) is infront of (A) and doesn't intersect with (A)
+ * -1: (B) begins before (A) but ends inside of (A)
+ * 0: (B) is completly inside of (A) OR (A) is complety inside of (B)
+ * +1: (B) begins inside of (A) but ends outside of (A)
+ * +2: (B) is after (A) and doesn't intersect with (A)
+ *
+ * 42: FTW state: (B) ends in (A) but starts outside of (A)
+ */
+ this.compareRange = function(range) {
+ var cmp,
+ end = range.end,
+ start = range.start;
+
+ cmp = this.compare(end.row, end.column);
+ if (cmp == 1) {
+ cmp = this.compare(start.row, start.column);
+ if (cmp == 1) {
+ return 2;
+ } else if (cmp == 0) {
+ return 1;
+ } else {
+ return 0;
+ }
+ } else if (cmp == -1) {
+ return -2;
+ } else {
+ cmp = this.compare(start.row, start.column);
+ if (cmp == -1) {
+ return -1;
+ } else if (cmp == 1) {
+ return 42;
+ } else {
+ return 0;
+ }
+ }
+ }
+
+ this.comparePoint = function(p) {
+ return this.compare(p.row, p.column);
+ }
+
+ this.containsRange = function(range) {
+ return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;
+ }
+
+ this.isEnd = function(row, column) {
+ return this.end.row == row && this.end.column == column;
+ }
+
+ this.isStart = function(row, column) {
+ return this.start.row == row && this.start.column == column;
+ }
+
+ this.setStart = function(row, column) {
+ if (typeof row == "object") {
+ this.start.column = row.column;
+ this.start.row = row.row;
+ } else {
+ this.start.row = row;
+ this.start.column = column;
+ }
+ }
+
+ this.setEnd = function(row, column) {
+ if (typeof row == "object") {
+ this.end.column = row.column;
+ this.end.row = row.row;
+ } else {
+ this.end.row = row;
+ this.end.column = column;
+ }
+ }
+
+ this.inside = function(row, column) {
+ if (this.compare(row, column) == 0) {
+ if (this.isEnd(row, column) || this.isStart(row, column)) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ this.insideStart = function(row, column) {
+ if (this.compare(row, column) == 0) {
+ if (this.isEnd(row, column)) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ this.insideEnd = function(row, column) {
+ if (this.compare(row, column) == 0) {
+ if (this.isStart(row, column)) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ this.compare = function(row, column) {
+ if (!this.isMultiLine()) {
+ if (row === this.start.row) {
+ return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);
+ };
+ }
+
+ if (row < this.start.row)
+ return -1;
+
+ if (row > this.end.row)
+ return 1;
+
+ if (this.start.row === row)
+ return column >= this.start.column ? 0 : -1;
+
+ if (this.end.row === row)
+ return column <= this.end.column ? 0 : 1;
+
+ return 0;
+ };
+
+ /**
+ * Like .compare(), but if isStart is true, return -1;
+ */
+ this.compareStart = function(row, column) {
+ if (this.start.row == row && this.start.column == column) {
+ return -1;
+ } else {
+ return this.compare(row, column);
+ }
+ }
+
+ /**
+ * Like .compare(), but if isEnd is true, return 1;
+ */
+ this.compareEnd = function(row, column) {
+ if (this.end.row == row && this.end.column == column) {
+ return 1;
+ } else {
+ return this.compare(row, column);
+ }
+ }
+
+ this.compareInside = function(row, column) {
+ if (this.end.row == row && this.end.column == column) {
+ return 1;
+ } else if (this.start.row == row && this.start.column == column) {
+ return -1;
+ } else {
+ return this.compare(row, column);
+ }
+ }
+
+ this.clipRows = function(firstRow, lastRow) {
+ if (this.end.row > lastRow) {
+ var end = {
+ row: lastRow+1,
+ column: 0
+ };
+ }
+
+ if (this.start.row > lastRow) {
+ var start = {
+ row: lastRow+1,
+ column: 0
+ };
+ }
+
+ if (this.start.row < firstRow) {
+ var start = {
+ row: firstRow,
+ column: 0
+ };
+ }
+
+ if (this.end.row < firstRow) {
+ var end = {
+ row: firstRow,
+ column: 0
+ };
+ }
+ return Range.fromPoints(start || this.start, end || this.end);
+ };
+
+ this.extend = function(row, column) {
+ var cmp = this.compare(row, column);
+
+ if (cmp == 0)
+ return this;
+ else if (cmp == -1)
+ var start = {row: row, column: column};
+ else
+ var end = {row: row, column: column};
+
+ return Range.fromPoints(start || this.start, end || this.end);
+ };
+
+ this.isEmpty = function() {
+ return (this.start.row == this.end.row && this.start.column == this.end.column);
+ };
+
+ this.isMultiLine = function() {
+ return (this.start.row !== this.end.row);
+ };
+
+ this.clone = function() {
+ return Range.fromPoints(this.start, this.end);
+ };
+
+ this.collapseRows = function() {
+ if (this.end.column == 0)
+ return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0)
+ else
+ return new Range(this.start.row, 0, this.end.row, 0)
+ };
+
+ this.toScreenRange = function(session) {
+ var screenPosStart =
+ session.documentToScreenPosition(this.start);
+ var screenPosEnd =
+ session.documentToScreenPosition(this.end);
+
+ return new Range(
+ screenPosStart.row, screenPosStart.column,
+ screenPosEnd.row, screenPosEnd.column
+ );
+ };
+
+}).call(Range.prototype);
+
+
+Range.fromPoints = function(start, end) {
+ return new Range(start.row, start.column, end.row, end.column);
+};
+
+exports.Range = Range;
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/anchor', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event_emitter'], function(require, exports, module) {
+"use strict";
+
+var oop = require("./lib/oop");
+var EventEmitter = require("./lib/event_emitter").EventEmitter;
+
+/**
+ * An Anchor is a floating pointer in the document. Whenever text is inserted or
+ * deleted before the cursor, the position of the cursor is updated
+ */
+var Anchor = exports.Anchor = function(doc, row, column) {
+ this.document = doc;
+
+ if (typeof column == "undefined")
+ this.setPosition(row.row, row.column);
+ else
+ this.setPosition(row, column);
+
+ this.$onChange = this.onChange.bind(this);
+ doc.on("change", this.$onChange);
+};
+
+(function() {
+
+ oop.implement(this, EventEmitter);
+
+ this.getPosition = function() {
+ return this.$clipPositionToDocument(this.row, this.column);
+ };
+
+ this.getDocument = function() {
+ return this.document;
+ };
+
+ this.onChange = function(e) {
+ var delta = e.data;
+ var range = delta.range;
+
+ if (range.start.row == range.end.row && range.start.row != this.row)
+ return;
+
+ if (range.start.row > this.row)
+ return;
+
+ if (range.start.row == this.row && range.start.column > this.column)
+ return;
+
+ var row = this.row;
+ var column = this.column;
+
+ if (delta.action === "insertText") {
+ if (range.start.row === row && range.start.column <= column) {
+ if (range.start.row === range.end.row) {
+ column += range.end.column - range.start.column;
+ }
+ else {
+ column -= range.start.column;
+ row += range.end.row - range.start.row;
+ }
+ }
+ else if (range.start.row !== range.end.row && range.start.row < row) {
+ row += range.end.row - range.start.row;
+ }
+ } else if (delta.action === "insertLines") {
+ if (range.start.row <= row) {
+ row += range.end.row - range.start.row;
+ }
+ }
+ else if (delta.action == "removeText") {
+ if (range.start.row == row && range.start.column < column) {
+ if (range.end.column >= column)
+ column = range.start.column;
+ else
+ column = Math.max(0, column - (range.end.column - range.start.column));
+
+ } else if (range.start.row !== range.end.row && range.start.row < row) {
+ if (range.end.row == row) {
+ column = Math.max(0, column - range.end.column) + range.start.column;
+ }
+ row -= (range.end.row - range.start.row);
+ }
+ else if (range.end.row == row) {
+ row -= range.end.row - range.start.row;
+ column = Math.max(0, column - range.end.column) + range.start.column;
+ }
+ } else if (delta.action == "removeLines") {
+ if (range.start.row <= row) {
+ if (range.end.row <= row)
+ row -= range.end.row - range.start.row;
+ else {
+ row = range.start.row;
+ column = 0;
+ }
+ }
+ }
+
+ this.setPosition(row, column, true);
+ };
+
+ this.setPosition = function(row, column, noClip) {
+ var pos;
+ if (noClip) {
+ pos = {
+ row: row,
+ column: column
+ };
+ }
+ else {
+ pos = this.$clipPositionToDocument(row, column);
+ }
+
+ if (this.row == pos.row && this.column == pos.column)
+ return;
+
+ var old = {
+ row: this.row,
+ column: this.column
+ };
+
+ this.row = pos.row;
+ this.column = pos.column;
+ this._emit("change", {
+ old: old,
+ value: pos
+ });
+ };
+
+ this.detach = function() {
+ this.document.removeEventListener("change", this.$onChange);
+ };
+
+ this.$clipPositionToDocument = function(row, column) {
+ var pos = {};
+
+ if (row >= this.document.getLength()) {
+ pos.row = Math.max(0, this.document.getLength() - 1);
+ pos.column = this.document.getLine(pos.row).length;
+ }
+ else if (row < 0) {
+ pos.row = 0;
+ pos.column = 0;
+ }
+ else {
+ pos.row = row;
+ pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));
+ }
+
+ if (column < 0)
+ pos.column = 0;
+
+ return pos;
+ };
+
+}).call(Anchor.prototype);
+
+});
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs <fabian AT ajax DOT org>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('ace/lib/lang', ['require', 'exports', 'module' ], function(require, exports, module) {
+"use strict";
+
+exports.stringReverse = function(string) {
+ return string.split("").reverse().join("");
+};
+
+exports.stringRepeat = function (string, count) {
+ return new Array(count + 1).join(string);
+};
+
+var trimBeginRegexp = /^\s\s*/;
+var trimEndRegexp = /\s\s*$/;
+
+exports.stringTrimLeft = function (string) {
+ return string.replace(trimBeginRegexp, '');
+};
+
+exports.stringTrimRight = function (string) {
+ return string.replace(trimEndRegexp, '');
+};
+
+exports.copyObject = function(obj) {
+ var copy = {};
+ for (var key in obj) {
+ copy[key] = obj[key];
+ }
+ return copy;
+};
+
+exports.copyArray = function(array){
+ var copy = [];
+ for (var i=0, l=array.length; i<l; i++) {
+ if (array[i] && typeof array[i] == "object")
+ copy[i] = this.copyObject( array[i] );
+ else
+ copy[i] = array[i];
+ }
+ return copy;
+};
+
+exports.deepCopy = function (obj) {
+ if (typeof obj != "object") {
+ return obj;
+ }
+
+ var copy = obj.constructor();
+ for (var key in obj) {
+ if (typeof obj[key] == "object") {
+ copy[key] = this.deepCopy(obj[key]);
+ } else {
+ copy[key] = obj[key];
+ }
+ }
+ return copy;
+};
+
+exports.arrayToMap = function(arr) {
+ var map = {};
+ for (var i=0; i<arr.length; i++) {
+ map[arr[i]] = 1;
+ }
+ return map;
+
+};
+
+/**
+ * splice out of 'array' anything that === 'value'
+ */
+exports.arrayRemove = function(array, value) {
+ for (var i = 0; i <= array.length; i++) {
+ if (value === array[i]) {
+ array.splice(i, 1);
+ }
+ }
+};
+
+exports.escapeRegExp = function(str) {
+ return str.replace(/([.*+?^${}()|[\]\/\\])/g, '\\$1');
+};
+
+exports.deferredCall = function(fcn) {
+
+ var timer = null;
+ var callback = function() {
+ timer = null;
+ fcn();
+ };
+
+ var deferred = function(timeout) {
+ deferred.cancel();
+ timer = setTimeout(callback, timeout || 0);
+ return deferred;
+ };
+
+ deferred.schedule = deferred;
+
+ deferred.call = function() {
+ this.cancel();
+ fcn();
+ return deferred;
+ };
+
+ deferred.cancel = function() {
+ clearTimeout(timer);
+ timer = null;
+ return deferred;
+ };
+
+ return deferred;
+};
+
+});
+define('ace/worker/jshint', ['require', 'exports', 'module' ], function(require, exports, module) {
+/*!
+ * JSHint, by JSHint Community.
+ *
+ * Licensed under the same slightly modified MIT license that JSLint is.
+ * It stops evil-doers everywhere.
+ *
+ * JSHint is a derivative work of JSLint:
+ *
+ * Copyright (c) 2002 Douglas Crockford (www.JSLint.com)
+ *
+ * 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 shall be used for Good, not Evil.
+ *
+ * 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.
+ *
+ * JSHint was forked from 2010-12-16 edition of JSLint.
+ *
+ */
+
+/*
+ JSHINT is a global function. It takes two parameters.
+
+ var myResult = JSHINT(source, option);
+
+ The first parameter is either a string or an array of strings. If it is a
+ string, it will be split on '\n' or '\r'. If it is an array of strings, it
+ is assumed that each string represents one line. The source can be a
+ JavaScript text or a JSON text.
+
+ The second parameter is an optional object of options which control the
+ operation of JSHINT. Most of the options are booleans: They are all
+ optional and have a default value of false. One of the options, predef,
+ can be an array of names, which will be used to declare global variables,
+ or an object whose keys are used as global names, with a boolean value
+ that determines if they are assignable.
+
+ If it checks out, JSHINT returns true. Otherwise, it returns false.
+
+ If false, you can inspect JSHINT.errors to find out the problems.
+ JSHINT.errors is an array of objects containing these members:
+
+ {
+ line : The line (relative to 0) at which the lint was found
+ character : The character (relative to 0) at which the lint was found
+ reason : The problem
+ evidence : The text line in which the problem occurred
+ raw : The raw message before the details were inserted
+ a : The first detail
+ b : The second detail
+ c : The third detail
+ d : The fourth detail
+ }
+
+ If a fatal error was found, a null will be the last element of the
+ JSHINT.errors array.
+
+ You can request a Function Report, which shows all of the functions
+ and the parameters and vars that they use. This can be used to find
+ implied global variables and other problems. The report is in HTML and
+ can be inserted in an HTML <body>.
+
+ var myReport = JSHINT.report(limited);
+
+ If limited is true, then the report will be limited to only errors.
+
+ You can request a data structure which contains JSHint's results.
+
+ var myData = JSHINT.data();
+
+ It returns a structure with this form:
+
+ {
+ errors: [
+ {
+ line: NUMBER,
+ character: NUMBER,
+ reason: STRING,
+ evidence: STRING
+ }
+ ],
+ functions: [
+ name: STRING,
+ line: NUMBER,
+ last: NUMBER,
+ param: [
+ STRING
+ ],
+ closure: [
+ STRING
+ ],
+ var: [
+ STRING
+ ],
+ exception: [
+ STRING
+ ],
+ outer: [
+ STRING
+ ],
+ unused: [
+ STRING
+ ],
+ global: [
+ STRING
+ ],
+ label: [
+ STRING
+ ]
+ ],
+ globals: [
+ STRING
+ ],
+ member: {
+ STRING: NUMBER
+ },
+ unuseds: [
+ {
+ name: STRING,
+ line: NUMBER
+ }
+ ],
+ implieds: [
+ {
+ name: STRING,
+ line: NUMBER
+ }
+ ],
+ urls: [
+ STRING
+ ],
+ json: BOOLEAN
+ }
+
+ Empty arrays will not be included.
+
+*/
+
+/*jshint
+ evil: true, nomen: false, onevar: false, regexp: false, strict: true, boss: true,
+ undef: true, maxlen: 100
+*/
+
+/*members "\b", "\t", "\n", "\f", "\r", "!=", "!==", "\"", "%", "(begin)",
+ "(breakage)", "(context)", "(error)", "(global)", "(identifier)", "(last)",
+ "(line)", "(loopage)", "(name)", "(onevar)", "(params)", "(scope)",
+ "(statement)", "(verb)", "*", "+", "++", "-", "--", "\/", "<", "<=", "==",
+ "===", ">", ">=", $, $$, $A, $F, $H, $R, $break, $continue, $w, Abstract, Ajax,
+ __filename, __dirname, ActiveXObject, Array, ArrayBuffer, ArrayBufferView,
+ Autocompleter, Assets, Boolean, Builder, Buffer, Browser, COM, CScript, Canvas,
+ CustomAnimation, Class, Control, Chain, Color, Cookie, Core, DataView, Date,
+ Debug, Draggable, Draggables, Droppables, Document, DomReady, DOMReady, Drag,
+ E, Enumerator, Enumerable, Element, Elements, Error, Effect, EvalError, Event,
+ Events, FadeAnimation, Field, Flash, Float32Array, Float64Array, Form,
+ FormField, Frame, Function, Fx, GetObject, Group, Hash, HotKey, HTMLElement,
+ HtmlTable, Iframe, IframeShim, Image, Int16Array, Int32Array, Int8Array,
+ Insertion, InputValidator, JSON, Keyboard, Locale, LN10, LN2, LOG10E, LOG2E,
+ MAX_VALUE, MIN_VALUE, Mask, Math, MenuItem, MoveAnimation, MooTools, Native,
+ NEGATIVE_INFINITY, Number, Object, ObjectRange, Option, Options, OverText, PI,
+ POSITIVE_INFINITY, PeriodicalExecuter, Point, Position, Prototype, RangeError,
+ Rectangle, ReferenceError, RegExp, ResizeAnimation, Request, RotateAnimation,
+ SQRT1_2, SQRT2, ScrollBar, ScriptEngine, ScriptEngineBuildVersion,
+ ScriptEngineMajorVersion, ScriptEngineMinorVersion, Scriptaculous, Scroller,
+ Slick, Slider, Selector, String, Style, SyntaxError, Sortable, Sortables,
+ SortableObserver, Sound, Spinner, System, Swiff, Text, TextArea, Template,
+ Timer, Tips, Type, TypeError, Toggle, Try, URI, URIError, URL, VBArray, WSH,
+ WScript, Web, Window, XMLDOM, XMLHttpRequest, XPathEvaluator, XPathException,
+ XPathExpression, XPathNamespace, XPathNSResolver, XPathResult, "\\", a,
+ addEventListener, address, alert, apply, applicationCache, arguments, arity,
+ asi, b, bitwise, block, blur, boolOptions, boss, browser, c, call, callee,
+ caller, cases, charAt, charCodeAt, character, clearInterval, clearTimeout,
+ close, closed, closure, comment, condition, confirm, console, constructor,
+ content, couch, create, css, curly, d, data, datalist, dd, debug, decodeURI,
+ decodeURIComponent, defaultStatus, defineClass, deserialize, devel, document,
+ dojo, dijit, dojox, define, edition, else, emit, encodeURI, encodeURIComponent,
+ entityify, eqeqeq, eqnull, errors, es5, escape, eval, event, evidence, evil,
+ ex, exception, exec, exps, expr, exports, FileReader, first, floor, focus,
+ forin, fragment, frames, from, fromCharCode, fud, funct, function, functions,
+ g, gc, getComputedStyle, getRow, GLOBAL, global, globals, globalstrict,
+ hasOwnProperty, help, history, i, id, identifier, immed, implieds, include,
+ indent, indexOf, init, ins, instanceOf, isAlpha, isApplicationRunning, isArray,
+ isDigit, isFinite, isNaN, iterator, join, jshint,
+ JSHINT, json, jquery, jQuery, keys, label, labelled, last, lastsemic, laxbreak,
+ latedef, lbp, led, left, length, line, load, loadClass, localStorage, location,
+ log, loopfunc, m, match, maxerr, maxlen, member,message, meta, module, moveBy,
+ moveTo, mootools, name, navigator, new, newcap, noarg, node, noempty, nomen,
+ nonew, nud, onbeforeunload, onblur, onerror, onevar, onfocus, onload, onresize,
+ onunload, open, openDatabase, openURL, opener, opera, outer, param, parent,
+ parseFloat, parseInt, passfail, plusplus, predef, print, process, prompt,
+ proto, prototype, prototypejs, push, quit, range, raw, reach, reason, regexp,
+ readFile, readUrl, regexdash, removeEventListener, replace, report, require,
+ reserved, resizeBy, resizeTo, resolvePath, resumeUpdates, respond, rhino, right,
+ runCommand, scroll, screen, scripturl, scrollBy, scrollTo, scrollbar, search, seal, send,
+ serialize, setInterval, setTimeout, shift, slice, sort,spawn, split, stack,
+ status, start, strict, sub, substr, supernew, shadow, supplant, sum, sync,
+ test, toLowerCase, toString, toUpperCase, toint32, token, top, trailing, type,
+ typeOf, Uint16Array, Uint32Array, Uint8Array, undef, unused, urls, value, valueOf,
+ var, version, WebSocket, white, window, Worker, wsh*/
+
+/*global exports: false */
+
+// We build the application inside a function so that we produce only a single
+// global variable. That function will be invoked immediately, and its return
+// value is the JSHINT function itself.
+
+var JSHINT = (function () {
+ "use strict";
+
+ var anonname, // The guessed name for anonymous functions.
+
+// These are operators that should not be used with the ! operator.
+
+ bang = {
+ '<' : true,
+ '<=' : true,
+ '==' : true,
+ '===': true,
+ '!==': true,
+ '!=' : true,
+ '>' : true,
+ '>=' : true,
+ '+' : true,
+ '-' : true,
+ '*' : true,
+ '/' : true,
+ '%' : true
+ },
+
+// These are the JSHint boolean options.
+
+ boolOptions = {
+ asi : true, // if automatic semicolon insertion should be tolerated
+ bitwise : true, // if bitwise operators should not be allowed
+ boss : true, // if advanced usage of assignments should be allowed
+ browser : true, // if the standard browser globals should be predefined
+ couch : true, // if CouchDB globals should be predefined
+ curly : true, // if curly braces around all blocks should be required
+ debug : true, // if debugger statements should be allowed
+ devel : true, // if logging globals should be predefined (console, alert, etc.)
+ dojo : true, // if Dojo Toolkit globals should be predefined
+ eqeqeq : true, // if === should be required
+ eqnull : true, // if == null comparisons should be tolerated
+ es5 : true, // if ES5 syntax should be allowed
+ evil : true, // if eval should be allowed
+ expr : true, // if ExpressionStatement should be allowed as Programs
+ forin : true, // if for in statements must filter
+ globalstrict: true, // if global "use strict"; should be allowed (also enables 'strict')
+ immed : true, // if immediate invocations must be wrapped in parens
+ iterator : true, // if the `__iterator__` property should be disallowed
+ jquery : true, // if jQuery globals should be predefined
+ latedef : true, // if the use before definition should not be tolerated
+ laxbreak : true, // if line breaks should not be checked
+ loopfunc : true, // if functions should be allowed to be defined within loops
+ mootools : true, // if MooTools globals should be predefined
+ newcap : true, // if constructor names must be capitalized
+ noarg : true, // if arguments.caller and arguments.callee should be disallowed
+ node : true, // if the Node.js environment globals should be predefined
+ noempty : true, // if empty blocks should be disallowed
+ nonew : true, // if using `new` for side-effects should be disallowed
+ nomen : true, // if names should be checked
+ onevar : true, // if only one var statement per function should be allowed
+ passfail : true, // if the scan should stop on first error
+ plusplus : true, // if increment/decrement should not be allowed
+ proto : true, // if the `__proto__` property should be disallowed
+ prototypejs : true, // if Prototype and Scriptaculous globals should be predefined
+ regexdash : true, // if unescaped last dash (-) inside brackets should be tolerated
+ regexp : true, // if the . should not be allowed in regexp literals
+ rhino : true, // if the Rhino environment globals should be predefined
+ undef : true, // if variables should be declared before used
+ scripturl : true, // if script-targeted URLs should be tolerated
+ shadow : true, // if variable shadowing should be tolerated
+ strict : true, // require the "use strict"; pragma
+ sub : true, // if all forms of subscript notation are tolerated
+ supernew : true, // if `new function () { ... };` and `new Object;`
+ // should be tolerated
+ trailing : true, // if trailing whitespace rules apply
+ white : true, // if strict whitespace rules apply
+ wsh : true // if the Windows Scripting Host environment globals should
+ // be predefined
+ },
+
+// browser contains a set of global names which are commonly provided by a
+// web browser environment.
+
+ browser = {
+ ArrayBuffer : false,
+ ArrayBufferView : false,
+ addEventListener: false,
+ applicationCache: false,
+ blur : false,
+ clearInterval : false,
+ clearTimeout : false,
+ close : false,
+ closed : false,
+ DataView : false,
+ defaultStatus : false,
+ document : false,
+ event : false,
+ FileReader : false,
+ Float32Array : false,
+ Float64Array : false,
+ focus : false,
+ frames : false,
+ getComputedStyle: false,
+ HTMLElement : false,
+ history : false,
+ Int16Array : false,
+ Int32Array : false,
+ Int8Array : false,
+ Image : false,
+ length : false,
+ localStorage : false,
+ location : false,
+ moveBy : false,
+ moveTo : false,
+ name : false,
+ navigator : false,
+ onbeforeunload : true,
+ onblur : true,
+ onerror : true,
+ onfocus : true,
+ onload : true,
+ onresize : true,
+ onunload : true,
+ open : false,
+ openDatabase : false,
+ opener : false,
+ Option : false,
+ parent : false,
+ print : false,
+ removeEventListener: false,
+ resizeBy : false,
+ resizeTo : false,
+ screen : false,
+ scroll : false,
+ scrollBy : false,
+ scrollTo : false,
+ setInterval : false,
+ setTimeout : false,
+ status : false,
+ top : false,
+ Uint16Array : false,
+ Uint32Array : false,
+ Uint8Array : false,
+ WebSocket : false,
+ window : false,
+ Worker : false,
+ XMLHttpRequest : false,
+ XPathEvaluator : false,
+ XPathException : false,
+ XPathExpression : false,
+ XPathNamespace : false,
+ XPathNSResolver : false,
+ XPathResult : false
+ },
+
+ couch = {
+ "require" : false,
+ respond : false,
+ getRow : false,
+ emit : false,
+ send : false,
+ start : false,
+ sum : false,
+ log : false,
+ exports : false,
+ module : false
+ },
+
+ devel = {
+ alert : false,
+ confirm : false,
+ console : false,
+ Debug : false,
+ opera : false,
+ prompt : false
+ },
+
+ dojo = {
+ dojo : false,
+ dijit : false,
+ dojox : false,
+ define : false,
+ "require" : false
+ },
+
+ escapes = {
+ '\b': '\\b',
+ '\t': '\\t',
+ '\n': '\\n',
+ '\f': '\\f',
+ '\r': '\\r',
+ '"' : '\\"',
+ '/' : '\\/',
+ '\\': '\\\\'
+ },
+
+ funct, // The current function
+
+ functionicity = [
+ 'closure', 'exception', 'global', 'label',
+ 'outer', 'unused', 'var'
+ ],
+
+ functions, // All of the functions
+
+ global, // The global scope
+ implied, // Implied globals
+ inblock,
+ indent,
+ jsonmode,
+
+ jquery = {
+ '$' : false,
+ jQuery : false
+ },
+
+ lines,
+ lookahead,
+ member,
+ membersOnly,
+
+ mootools = {
+ '$' : false,
+ '$$' : false,
+ Assets : false,
+ Browser : false,
+ Chain : false,
+ Class : false,
+ Color : false,
+ Cookie : false,
+ Core : false,
+ Document : false,
+ DomReady : false,
+ DOMReady : false,
+ Drag : false,
+ Element : false,
+ Elements : false,
+ Event : false,
+ Events : false,
+ Fx : false,
+ Group : false,
+ Hash : false,
+ HtmlTable : false,
+ Iframe : false,
+ IframeShim : false,
+ InputValidator : false,
+ instanceOf : false,
+ Keyboard : false,
+ Locale : false,
+ Mask : false,
+ MooTools : false,
+ Native : false,
+ Options : false,
+ OverText : false,
+ Request : false,
+ Scroller : false,
+ Slick : false,
+ Slider : false,
+ Sortables : false,
+ Spinner : false,
+ Swiff : false,
+ Tips : false,
+ Type : false,
+ typeOf : false,
+ URI : false,
+ Window : false
+ },
+
+ nexttoken,
+
+ node = {
+ __filename : false,
+ __dirname : false,
+ exports : false,
+ Buffer : false,
+ GLOBAL : false,
+ global : false,
+ module : false,
+ process : false,
+ require : false
+ },
+
+ noreach,
+ option,
+ predefined, // Global variables defined by option
+ prereg,
+ prevtoken,
+
+ prototypejs = {
+ '$' : false,
+ '$$' : false,
+ '$A' : false,
+ '$F' : false,
+ '$H' : false,
+ '$R' : false,
+ '$break' : false,
+ '$continue' : false,
+ '$w' : false,
+ Abstract : false,
+ Ajax : false,
+ Class : false,
+ Enumerable : false,
+ Element : false,
+ Event : false,
+ Field : false,
+ Form : false,
+ Hash : false,
+ Insertion : false,
+ ObjectRange : false,
+ PeriodicalExecuter: false,
+ Position : false,
+ Prototype : false,
+ Selector : false,
+ Template : false,
+ Toggle : false,
+ Try : false,
+ Autocompleter : false,
+ Builder : false,
+ Control : false,
+ Draggable : false,
+ Draggables : false,
+ Droppables : false,
+ Effect : false,
+ Sortable : false,
+ SortableObserver : false,
+ Sound : false,
+ Scriptaculous : false
+ },
+
+ rhino = {
+ defineClass : false,
+ deserialize : false,
+ gc : false,
+ help : false,
+ load : false,
+ loadClass : false,
+ print : false,
+ quit : false,
+ readFile : false,
+ readUrl : false,
+ runCommand : false,
+ seal : false,
+ serialize : false,
+ spawn : false,
+ sync : false,
+ toint32 : false,
+ version : false
+ },
+
+ scope, // The current scope
+ src,
+ stack,
+
+// standard contains the global names that are provided by the
+// ECMAScript standard.
+
+ standard = {
+ Array : false,
+ Boolean : false,
+ Date : false,
+ decodeURI : false,
+ decodeURIComponent : false,
+ encodeURI : false,
+ encodeURIComponent : false,
+ Error : false,
+ 'eval' : false,
+ EvalError : false,
+ Function : false,
+ hasOwnProperty : false,
+ isFinite : false,
+ isNaN : false,
+ JSON : false,
+ Math : false,
+ Number : false,
+ Object : false,
+ parseInt : false,
+ parseFloat : false,
+ RangeError : false,
+ ReferenceError : false,
+ RegExp : false,
+ String : false,
+ SyntaxError : false,
+ TypeError : false,
+ URIError : false
+ },
+
+ standard_member = {
+ E : true,
+ LN2 : true,
+ LN10 : true,
+ LOG2E : true,
+ LOG10E : true,
+ MAX_VALUE : true,
+ MIN_VALUE : true,
+ NEGATIVE_INFINITY : true,
+ PI : true,
+ POSITIVE_INFINITY : true,
+ SQRT1_2 : true,
+ SQRT2 : true
+ },
+
+ strict_mode,
+ syntax = {},
+ tab,
+ token,
+ urls,
+ warnings,
+
+ wsh = {
+ ActiveXObject : true,
+ Enumerator : true,
+ GetObject : true,
+ ScriptEngine : true,
+ ScriptEngineBuildVersion : true,
+ ScriptEngineMajorVersion : true,
+ ScriptEngineMinorVersion : true,
+ VBArray : true,
+ WSH : true,
+ WScript : true
+ };
+
+ // Regular expressions. Some of these are stupidly long.
+ var ax, cx, tx, nx, nxg, lx, ix, jx, ft;
+ (function () {
+ /*jshint maxlen:300 */
+
+ // unsafe comment or string
+ ax = /@cc|<\/?|script|\]\s*\]|<\s*!|&lt/i;
+
+ // unsafe characters that are silently deleted by one or more browsers
+ cx = /[\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/;
+
+ // token
+ tx = /^\s*([(){}\[.,:;'"~\?\]#@]|==?=?|\/(\*(jshint|jslint|members?|global)?|=|\/)?|\*[\/=]?|\+(?:=|\++)?|-(?:=|-+)?|%=?|&[&=]?|\|[|=]?|>>?>?=?|<([\/=!]|\!(\[|--)?|<=?)?|\^=?|\!=?=?|[a-zA-Z_$][a-zA-Z0-9_$]*|[0-9]+([xX][0-9a-fA-F]+|\.[0-9]*)?([eE][+\-]?[0-9]+)?)/;
+
+ // characters in strings that need escapement
+ nx = /[\u0000-\u001f&<"\/\\\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/;
+ nxg = /[\u0000-\u001f&<"\/\\\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
+
+ // star slash
+ lx = /\*\/|\/\*/;
+
+ // identifier
+ ix = /^([a-zA-Z_$][a-zA-Z0-9_$]*)$/;
+
+ // javascript url
+ jx = /^(?:javascript|jscript|ecmascript|vbscript|mocha|livescript)\s*:/i;
+
+ // catches /* falls through */ comments
+ ft = /^\s*\/\*\s*falls\sthrough\s*\*\/\s*$/;
+ }());
+
+ function F() {} // Used by Object.create
+
+ function is_own(object, name) {
+
+// The object.hasOwnProperty method fails when the property under consideration
+// is named 'hasOwnProperty'. So we have to use this more convoluted form.
+
+ return Object.prototype.hasOwnProperty.call(object, name);
+ }
+
+// Provide critical ES5 functions to ES3.
+
+ if (typeof Array.isArray !== 'function') {
+ Array.isArray = function (o) {
+ return Object.prototype.toString.apply(o) === '[object Array]';
+ };
+ }
+
+ if (typeof Object.create !== 'function') {
+ Object.create = function (o) {
+ F.prototype = o;
+ return new F();
+ };
+ }
+
+ if (typeof Object.keys !== 'function') {
+ Object.keys = function (o) {
+ var a = [], k;
+ for (k in o) {
+ if (is_own(o, k)) {
+ a.push(k);
+ }
+ }
+ return a;
+ };
+ }
+
+// Non standard methods
+
+ if (typeof String.prototype.entityify !== 'function') {
+ String.prototype.entityify = function () {
+ return this
+ .replace(/&/g, '&amp;')
+ .replace(/</g, '&lt;')
+ .replace(/>/g, '&gt;');
+ };
+ }
+
+ if (typeof String.prototype.isAlpha !== 'function') {
+ String.prototype.isAlpha = function () {
+ return (this >= 'a' && this <= 'z\uffff') ||
+ (this >= 'A' && this <= 'Z\uffff');
+ };
+ }
+
+ if (typeof String.prototype.isDigit !== 'function') {
+ String.prototype.isDigit = function () {
+ return (this >= '0' && this <= '9');
+ };
+ }
+
+ if (typeof String.prototype.supplant !== 'function') {
+ String.prototype.supplant = function (o) {
+ return this.replace(/\{([^{}]*)\}/g, function (a, b) {
+ var r = o[b];
+ return typeof r === 'string' || typeof r === 'number' ? r : a;
+ });
+ };
+ }
+
+ if (typeof String.prototype.name !== 'function') {
+ String.prototype.name = function () {
+
+// If the string looks like an identifier, then we can return it as is.
+// If the string contains no control characters, no quote characters, and no
+// backslash characters, then we can simply slap some quotes around it.
+// Otherwise we must also replace the offending characters with safe
+// sequences.
+
+ if (ix.test(this)) {
+ return this;
+ }
+ if (nx.test(this)) {
+ return '"' + this.replace(nxg, function (a) {
+ var c = escapes[a];
+ if (c) {
+ return c;
+ }
+ return '\\u' + ('0000' + a.charCodeAt().toString(16)).slice(-4);
+ }) + '"';
+ }
+ return '"' + this + '"';
+ };
+ }
+
+
+ function combine(t, o) {
+ var n;
+ for (n in o) {
+ if (is_own(o, n)) {
+ t[n] = o[n];
+ }
+ }
+ }
+
+ function assume() {
+ if (option.couch)
+ combine(predefined, couch);
+
+ if (option.rhino)
+ combine(predefined, rhino);
+
+ if (option.prototypejs)
+ combine(predefined, prototypejs);
+
+ if (option.node)
+ combine(predefined, node);
+
+ if (option.devel)
+ combine(predefined, devel);
+
+ if (option.dojo)
+ combine(predefined, dojo);
+
+ if (option.browser)
+ combine(predefined, browser);
+
+ if (option.jquery)
+ combine(predefined, jquery);
+
+ if (option.mootools)
+ combine(predefined, mootools);
+
+ if (option.wsh)
+ combine(predefined, wsh);
+
+ if (option.globalstrict && option.strict !== false)
+ option.strict = true;
+ }
+
+
+// Produce an error warning.
+
+ function quit(message, line, chr) {
+ var percentage = Math.floor((line / lines.length) * 100);
+
+ throw {
+ name: 'JSHintError',
+ line: line,
+ character: chr,
+ message: message + " (" + percentage + "% scanned)."
+ };
+ }
+
+ function warning(m, t, a, b, c, d) {
+ var ch, l, w;
+ t = t || nexttoken;
+ if (t.id === '(end)') { // `~
+ t = token;
+ }
+ l = t.line || 0;
+ ch = t.from || 0;
+ w = {
+ id: '(error)',
+ raw: m,
+ evidence: lines[l - 1] || '',
+ line: l,
+ character: ch,
+ a: a,
+ b: b,
+ c: c,
+ d: d
+ };
+ w.reason = m.supplant(w);
+ JSHINT.errors.push(w);
+ if (option.passfail) {
+ quit('Stopping. ', l, ch);
+ }
+ warnings += 1;
+ if (warnings >= option.maxerr) {
+ quit("Too many errors.", l, ch);
+ }
+ return w;
+ }
+
+ function warningAt(m, l, ch, a, b, c, d) {
+ return warning(m, {
+ line: l,
+ from: ch
+ }, a, b, c, d);
+ }
+
+ function error(m, t, a, b, c, d) {
+ var w = warning(m, t, a, b, c, d);
+ quit("Stopping, unable to continue.", w.line, w.character);
+ }
+
+ function errorAt(m, l, ch, a, b, c, d) {
+ return error(m, {
+ line: l,
+ from: ch
+ }, a, b, c, d);
+ }
+
+
+
+// lexical analysis and token construction
+
+ var lex = (function lex() {
+ var character, from, line, s;
+
+// Private lex methods
+
+ function nextLine() {
+ var at,
+ tw; // trailing whitespace check
+
+ if (line >= lines.length)
+ return false;
+
+ character = 1;
+ s = lines[line];
+ line += 1;
+ at = s.search(/ \t/);
+
+ if (at >= 0)
+ warningAt("Mixed spaces and tabs.", line, at + 1);
+
+ s = s.replace(/\t/g, tab);
+ at = s.search(cx);
+
+ if (at >= 0)
+ warningAt("Unsafe character.", line, at);
+
+ if (option.maxlen && option.maxlen < s.length)
+ warningAt("Line too long.", line, s.length);
+
+ // Check for trailing whitespaces
+ tw = s.search(/\s+$/);
+ if (option.trailing && ~tw && !~s.search(/^\s+$/))
+ warningAt("Trailing whitespace.", line, tw);
+
+ return true;
+ }
+
+// Produce a token object. The token inherits from a syntax symbol.
+
+ function it(type, value) {
+ var i, t;
+ if (type === '(color)' || type === '(range)') {
+ t = {type: type};
+ } else if (type === '(punctuator)' ||
+ (type === '(identifier)' && is_own(syntax, value))) {
+ t = syntax[value] || syntax['(error)'];
+ } else {
+ t = syntax[type];
+ }
+ t = Object.create(t);
+ if (type === '(string)' || type === '(range)') {
+ if (!option.scripturl && jx.test(value)) {
+ warningAt("Script URL.", line, from);
+ }
+ }
+ if (type === '(identifier)') {
+ t.identifier = true;
+ if (value === '__proto__' && !option.proto) {
+ warningAt("The '{a}' property is deprecated.",
+ line, from, value);
+ } else if (value === '__iterator__' && !option.iterator) {
+ warningAt("'{a}' is only available in JavaScript 1.7.",
+ line, from, value);
+ } else if (option.nomen && (value.charAt(0) === '_' ||
+ value.charAt(value.length - 1) === '_')) {
+ warningAt("Unexpected {a} in '{b}'.", line, from,
+ "dangling '_'", value);
+ }
+ }
+ t.value = value;
+ t.line = line;
+ t.character = character;
+ t.from = from;
+ i = t.id;
+ if (i !== '(endline)') {
+ prereg = i &&
+ (('(,=:[!&|?{};'.indexOf(i.charAt(i.length - 1)) >= 0) ||
+ i === 'return');
+ }
+ return t;
+ }
+
+// Public lex methods
+
+ return {
+ init: function (source) {
+ if (typeof source === 'string') {
+ lines = source
+ .replace(/\r\n/g, '\n')
+ .replace(/\r/g, '\n')
+ .split('\n');
+ } else {
+ lines = source;
+ }
+
+ // If the first line is a shebang (#!), make it a blank and move on.
+ // Shebangs are used by Node scripts.
+ if (lines[0] && lines[0].substr(0, 2) == '#!')
+ lines[0] = '';
+
+ line = 0;
+ nextLine();
+ from = 1;
+ },
+
+ range: function (begin, end) {
+ var c, value = '';
+ from = character;
+ if (s.charAt(0) !== begin) {
+ errorAt("Expected '{a}' and instead saw '{b}'.",
+ line, character, begin, s.charAt(0));
+ }
+ for (;;) {
+ s = s.slice(1);
+ character += 1;
+ c = s.charAt(0);
+ switch (c) {
+ case '':
+ errorAt("Missing '{a}'.", line, character, c);
+ break;
+ case end:
+ s = s.slice(1);
+ character += 1;
+ return it('(range)', value);
+ case '\\':
+ warningAt("Unexpected '{a}'.", line, character, c);
+ }
+ value += c;
+ }
+
+ },
+
+// token -- this is called by advance to get the next token.
+
+ token: function () {
+ var b, c, captures, d, depth, high, i, l, low, q, t;
+
+ function match(x) {
+ var r = x.exec(s), r1;
+ if (r) {
+ l = r[0].length;
+ r1 = r[1];
+ c = r1.charAt(0);
+ s = s.substr(l);
+ from = character + l - r1.length;
+ character += l;
+ return r1;
+ }
+ }
+
+ function string(x) {
+ var c, j, r = '';
+
+ if (jsonmode && x !== '"') {
+ warningAt("Strings must use doublequote.",
+ line, character);
+ }
+
+ function esc(n) {
+ var i = parseInt(s.substr(j + 1, n), 16);
+ j += n;
+ if (i >= 32 && i <= 126 &&
+ i !== 34 && i !== 92 && i !== 39) {
+ warningAt("Unnecessary escapement.", line, character);
+ }
+ character += n;
+ c = String.fromCharCode(i);
+ }
+ j = 0;
+ for (;;) {
+ while (j >= s.length) {
+ j = 0;
+ if (!nextLine()) {
+ errorAt("Unclosed string.", line, from);
+ }
+ }
+ c = s.charAt(j);
+ if (c === x) {
+ character += 1;
+ s = s.substr(j + 1);
+ return it('(string)', r, x);
+ }
+ if (c < ' ') {
+ if (c === '\n' || c === '\r') {
+ break;
+ }
+ warningAt("Control character in string: {a}.",
+ line, character + j, s.slice(0, j));
+ } else if (c === '\\') {
+ j += 1;
+ character += 1;
+ c = s.charAt(j);
+ switch (c) {
+ case '\\':
+ case '"':
+ case '/':
+ break;
+ case '\'':
+ if (jsonmode) {
+ warningAt("Avoid \\'.", line, character);
+ }
+ break;
+ case 'b':
+ c = '\b';
+ break;
+ case 'f':
+ c = '\f';
+ break;
+ case 'n':
+ c = '\n';
+ break;
+ case 'r':
+ c = '\r';
+ break;
+ case 't':
+ c = '\t';
+ break;
+ case 'u':
+ esc(4);
+ break;
+ case 'v':
+ if (jsonmode) {
+ warningAt("Avoid \\v.", line, character);
+ }
+ c = '\v';
+ break;
+ case 'x':
+ if (jsonmode) {
+ warningAt("Avoid \\x-.", line, character);
+ }
+ esc(2);
+ break;
+ default:
+ warningAt("Bad escapement.", line, character);
+ }
+ }
+ r += c;
+ character += 1;
+ j += 1;
+ }
+ }
+
+ for (;;) {
+ if (!s) {
+ return it(nextLine() ? '(endline)' : '(end)', '');
+ }
+ t = match(tx);
+ if (!t) {
+ t = '';
+ c = '';
+ while (s && s < '!') {
+ s = s.substr(1);
+ }
+ if (s) {
+ errorAt("Unexpected '{a}'.", line, character, s.substr(0, 1));
+ }
+ } else {
+
+ // identifier
+
+ if (c.isAlpha() || c === '_' || c === '$') {
+ return it('(identifier)', t);
+ }
+
+ // number
+
+ if (c.isDigit()) {
+ if (!isFinite(Number(t))) {
+ warningAt("Bad number '{a}'.",
+ line, character, t);
+ }
+ if (s.substr(0, 1).isAlpha()) {
+ warningAt("Missing space after '{a}'.",
+ line, character, t);
+ }
+ if (c === '0') {
+ d = t.substr(1, 1);
+ if (d.isDigit()) {
+ if (token.id !== '.') {
+ warningAt("Don't use extra leading zeros '{a}'.",
+ line, character, t);
+ }
+ } else if (jsonmode && (d === 'x' || d === 'X')) {
+ warningAt("Avoid 0x-. '{a}'.",
+ line, character, t);
+ }
+ }
+ if (t.substr(t.length - 1) === '.') {
+ warningAt(
+"A trailing decimal point can be confused with a dot '{a}'.", line, character, t);
+ }
+ return it('(number)', t);
+ }
+ switch (t) {
+
+ // string
+
+ case '"':
+ case "'":
+ return string(t);
+
+ // // comment
+
+ case '//':
+ if (src) {
+ warningAt("Unexpected comment.", line, character);
+ }
+ s = '';
+ token.comment = true;
+ break;
+
+ // /* comment
+
+ case '/*':
+ if (src) {
+ warningAt("Unexpected comment.", line, character);
+ }
+ for (;;) {
+ i = s.search(lx);
+ if (i >= 0) {
+ break;
+ }
+ if (!nextLine()) {
+ errorAt("Unclosed comment.", line, character);
+ }
+ }
+ character += i + 2;
+ if (s.substr(i, 1) === '/') {
+ errorAt("Nested comment.", line, character);
+ }
+ s = s.substr(i + 2);
+ token.comment = true;
+ break;
+
+ // /*members /*jshint /*global
+
+ case '/*members':
+ case '/*member':
+ case '/*jshint':
+ case '/*jslint':
+ case '/*global':
+ case '*/':
+ return {
+ value: t,
+ type: 'special',
+ line: line,
+ character: character,
+ from: from
+ };
+
+ case '':
+ break;
+ // /
+ case '/':
+ if (token.id === '/=') {
+ errorAt(
+"A regular expression literal can be confused with '/='.", line, from);
+ }
+ if (prereg) {
+ depth = 0;
+ captures = 0;
+ l = 0;
+ for (;;) {
+ b = true;
+ c = s.charAt(l);
+ l += 1;
+ switch (c) {
+ case '':
+ errorAt("Unclosed regular expression.",
+ line, from);
+ return;
+ case '/':
+ if (depth > 0) {
+ warningAt("Unescaped '{a}'.",
+ line, from + l, '/');
+ }
+ c = s.substr(0, l - 1);
+ q = {
+ g: true,
+ i: true,
+ m: true
+ };
+ while (q[s.charAt(l)] === true) {
+ q[s.charAt(l)] = false;
+ l += 1;
+ }
+ character += l;
+ s = s.substr(l);
+ q = s.charAt(0);
+ if (q === '/' || q === '*') {
+ errorAt("Confusing regular expression.",
+ line, from);
+ }
+ return it('(regexp)', c);
+ case '\\':
+ c = s.charAt(l);
+ if (c < ' ') {
+ warningAt(
+"Unexpected control character in regular expression.", line, from + l);
+ } else if (c === '<') {
+ warningAt(
+"Unexpected escaped character '{a}' in regular expression.", line, from + l, c);
+ }
+ l += 1;
+ break;
+ case '(':
+ depth += 1;
+ b = false;
+ if (s.charAt(l) === '?') {
+ l += 1;
+ switch (s.charAt(l)) {
+ case ':':
+ case '=':
+ case '!':
+ l += 1;
+ break;
+ default:
+ warningAt(
+"Expected '{a}' and instead saw '{b}'.", line, from + l, ':', s.charAt(l));
+ }
+ } else {
+ captures += 1;
+ }
+ break;
+ case '|':
+ b = false;
+ break;
+ case ')':
+ if (depth === 0) {
+ warningAt("Unescaped '{a}'.",
+ line, from + l, ')');
+ } else {
+ depth -= 1;
+ }
+ break;
+ case ' ':
+ q = 1;
+ while (s.charAt(l) === ' ') {
+ l += 1;
+ q += 1;
+ }
+ if (q > 1) {
+ warningAt(
+"Spaces are hard to count. Use {{a}}.", line, from + l, q);
+ }
+ break;
+ case '[':
+ c = s.charAt(l);
+ if (c === '^') {
+ l += 1;
+ if (option.regexp) {
+ warningAt("Insecure '{a}'.",
+ line, from + l, c);
+ } else if (s.charAt(l) === ']') {
+ errorAt("Unescaped '{a}'.",
+ line, from + l, '^');
+ }
+ }
+ q = false;
+ if (c === ']') {
+ warningAt("Empty class.", line,
+ from + l - 1);
+ q = true;
+ }
+klass: do {
+ c = s.charAt(l);
+ l += 1;
+ switch (c) {
+ case '[':
+ case '^':
+ warningAt("Unescaped '{a}'.",
+ line, from + l, c);
+ q = true;
+ break;
+ case '-':
+ if (q) {
+ q = false;
+ } else {
+ warningAt("Unescaped '{a}'.",
+ line, from + l, '-');
+ q = true;
+ }
+ break;
+ case ']':
+ if (!q && !option.regexdash) {
+ warningAt("Unescaped '{a}'.",
+ line, from + l - 1, '-');
+ }
+ break klass;
+ case '\\':
+ c = s.charAt(l);
+ if (c < ' ') {
+ warningAt(
+"Unexpected control character in regular expression.", line, from + l);
+ } else if (c === '<') {
+ warningAt(
+"Unexpected escaped character '{a}' in regular expression.", line, from + l, c);
+ }
+ l += 1;
+ q = true;
+ break;
+ case '/':
+ warningAt("Unescaped '{a}'.",
+ line, from + l - 1, '/');
+ q = true;
+ break;
+ case '<':
+ q = true;
+ break;
+ default:
+ q = true;
+ }
+ } while (c);
+ break;
+ case '.':
+ if (option.regexp) {
+ warningAt("Insecure '{a}'.", line,
+ from + l, c);
+ }
+ break;
+ case ']':
+ case '?':
+ case '{':
+ case '}':
+ case '+':
+ case '*':
+ warningAt("Unescaped '{a}'.", line,
+ from + l, c);
+ }
+ if (b) {
+ switch (s.charAt(l)) {
+ case '?':
+ case '+':
+ case '*':
+ l += 1;
+ if (s.charAt(l) === '?') {
+ l += 1;
+ }
+ break;
+ case '{':
+ l += 1;
+ c = s.charAt(l);
+ if (c < '0' || c > '9') {
+ warningAt(
+"Expected a number and instead saw '{a}'.", line, from + l, c);
+ }
+ l += 1;
+ low = +c;
+ for (;;) {
+ c = s.charAt(l);
+ if (c < '0' || c > '9') {
+ break;
+ }
+ l += 1;
+ low = +c + (low * 10);
+ }
+ high = low;
+ if (c === ',') {
+ l += 1;
+ high = Infinity;
+ c = s.charAt(l);
+ if (c >= '0' && c <= '9') {
+ l += 1;
+ high = +c;
+ for (;;) {
+ c = s.charAt(l);
+ if (c < '0' || c > '9') {
+ break;
+ }
+ l += 1;
+ high = +c + (high * 10);
+ }
+ }
+ }
+ if (s.charAt(l) !== '}') {
+ warningAt(
+"Expected '{a}' and instead saw '{b}'.", line, from + l, '}', c);
+ } else {
+ l += 1;
+ }
+ if (s.charAt(l) === '?') {
+ l += 1;
+ }
+ if (low > high) {
+ warningAt(
+"'{a}' should not be greater than '{b}'.", line, from + l, low, high);
+ }
+ }
+ }
+ }
+ c = s.substr(0, l - 1);
+ character += l;
+ s = s.substr(l);
+ return it('(regexp)', c);
+ }
+ return it('(punctuator)', t);
+
+ // punctuator
+
+ case '#':
+ return it('(punctuator)', t);
+ default:
+ return it('(punctuator)', t);
+ }
+ }
+ }
+ }
+ };
+ }());
+
+
+ function addlabel(t, type) {
+
+ if (t === 'hasOwnProperty') {
+ warning("'hasOwnProperty' is a really bad name.");
+ }
+
+// Define t in the current function in the current scope.
+
+ if (is_own(funct, t) && !funct['(global)']) {
+ if (funct[t] === true) {
+ if (option.latedef)
+ warning("'{a}' was used before it was defined.", nexttoken, t);
+ } else {
+ if (!option.shadow)
+ warning("'{a}' is already defined.", nexttoken, t);
+ }
+ }
+
+ funct[t] = type;
+ if (funct['(global)']) {
+ global[t] = funct;
+ if (is_own(implied, t)) {
+ if (option.latedef)
+ warning("'{a}' was used before it was defined.", nexttoken, t);
+ delete implied[t];
+ }
+ } else {
+ scope[t] = funct;
+ }
+ }
+
+
+ function doOption() {
+ var b, obj, filter, o = nexttoken.value, t, v;
+ switch (o) {
+ case '*/':
+ error("Unbegun comment.");
+ break;
+ case '/*members':
+ case '/*member':
+ o = '/*members';
+ if (!membersOnly) {
+ membersOnly = {};
+ }
+ obj = membersOnly;
+ break;
+ case '/*jshint':
+ case '/*jslint':
+ obj = option;
+ filter = boolOptions;
+ break;
+ case '/*global':
+ obj = predefined;
+ break;
+ default:
+ error("What?");
+ }
+ t = lex.token();
+loop: for (;;) {
+ for (;;) {
+ if (t.type === 'special' && t.value === '*/') {
+ break loop;
+ }
+ if (t.id !== '(endline)' && t.id !== ',') {
+ break;
+ }
+ t = lex.token();
+ }
+ if (t.type !== '(string)' && t.type !== '(identifier)' &&
+ o !== '/*members') {
+ error("Bad option.", t);
+ }
+ v = lex.token();
+ if (v.id === ':') {
+ v = lex.token();
+ if (obj === membersOnly) {
+ error("Expected '{a}' and instead saw '{b}'.",
+ t, '*/', ':');
+ }
+ if (t.value === 'indent' && (o === '/*jshint' || o === '/*jslint')) {
+ b = +v.value;
+ if (typeof b !== 'number' || !isFinite(b) || b <= 0 ||
+ Math.floor(b) !== b) {
+ error("Expected a small integer and instead saw '{a}'.",
+ v, v.value);
+ }
+ obj.white = true;
+ obj.indent = b;
+ } else if (t.value === 'maxerr' && (o === '/*jshint' || o === '/*jslint')) {
+ b = +v.value;
+ if (typeof b !== 'number' || !isFinite(b) || b <= 0 ||
+ Math.floor(b) !== b) {
+ error("Expected a small integer and instead saw '{a}'.",
+ v, v.value);
+ }
+ obj.maxerr = b;
+ } else if (t.value === 'maxlen' && (o === '/*jshint' || o === '/*jslint')) {
+ b = +v.value;
+ if (typeof b !== 'number' || !isFinite(b) || b <= 0 ||
+ Math.floor(b) !== b) {
+ error("Expected a small integer and instead saw '{a}'.",
+ v, v.value);
+ }
+ obj.maxlen = b;
+ } else if (v.value === 'true') {
+ obj[t.value] = true;
+ } else if (v.value === 'false') {
+ obj[t.value] = false;
+ } else {
+ error("Bad option value.", v);
+ }
+ t = lex.token();
+ } else {
+ if (o === '/*jshint' || o === '/*jslint') {
+ error("Missing option value.", t);
+ }
+ obj[t.value] = false;
+ t = v;
+ }
+ }
+ if (filter) {
+ assume();
+ }
+ }
+
+
+// We need a peek function. If it has an argument, it peeks that much farther
+// ahead. It is used to distinguish
+// for ( var i in ...
+// from
+// for ( var i = ...
+
+ function peek(p) {
+ var i = p || 0, j = 0, t;
+
+ while (j <= i) {
+ t = lookahead[j];
+ if (!t) {
+ t = lookahead[j] = lex.token();
+ }
+ j += 1;
+ }
+ return t;
+ }
+
+
+
+// Produce the next token. It looks for programming errors.
+
+ function advance(id, t) {
+ switch (token.id) {
+ case '(number)':
+ if (nexttoken.id === '.') {
+ warning("A dot following a number can be confused with a decimal point.", token);
+ }
+ break;
+ case '-':
+ if (nexttoken.id === '-' || nexttoken.id === '--') {
+ warning("Confusing minusses.");
+ }
+ break;
+ case '+':
+ if (nexttoken.id === '+' || nexttoken.id === '++') {
+ warning("Confusing plusses.");
+ }
+ break;
+ }
+ if (token.type === '(string)' || token.identifier) {
+ anonname = token.value;
+ }
+
+ if (id && nexttoken.id !== id) {
+ if (t) {
+ if (nexttoken.id === '(end)') {
+ warning("Unmatched '{a}'.", t, t.id);
+ } else {
+ warning("Expected '{a}' to match '{b}' from line {c} and instead saw '{d}'.",
+ nexttoken, id, t.id, t.line, nexttoken.value);
+ }
+ } else if (nexttoken.type !== '(identifier)' ||
+ nexttoken.value !== id) {
+ warning("Expected '{a}' and instead saw '{b}'.",
+ nexttoken, id, nexttoken.value);
+ }
+ }
+ prevtoken = token;
+ token = nexttoken;
+ for (;;) {
+ nexttoken = lookahead.shift() || lex.token();
+ if (nexttoken.id === '(end)' || nexttoken.id === '(error)') {
+ return;
+ }
+ if (nexttoken.type === 'special') {
+ doOption();
+ } else {
+ if (nexttoken.id !== '(endline)') {
+ break;
+ }
+ }
+ }
+ }
+
+
+// This is the heart of JSHINT, the Pratt parser. In addition to parsing, it
+// is looking for ad hoc lint patterns. We add .fud to Pratt's model, which is
+// like .nud except that it is only used on the first token of a statement.
+// Having .fud makes it much easier to define statement-oriented languages like
+// JavaScript. I retained Pratt's nomenclature.
+
+// .nud Null denotation
+// .fud First null denotation
+// .led Left denotation
+// lbp Left binding power
+// rbp Right binding power
+
+// They are elements of the parsing method called Top Down Operator Precedence.
+
+ function expression(rbp, initial) {
+ var left, isArray = false;
+
+ if (nexttoken.id === '(end)')
+ error("Unexpected early end of program.", token);
+
+ advance();
+ if (initial) {
+ anonname = 'anonymous';
+ funct['(verb)'] = token.value;
+ }
+ if (initial === true && token.fud) {
+ left = token.fud();
+ } else {
+ if (token.nud) {
+ left = token.nud();
+ } else {
+ if (nexttoken.type === '(number)' && token.id === '.') {
+ warning("A leading decimal point can be confused with a dot: '.{a}'.",
+ token, nexttoken.value);
+ advance();
+ return token;
+ } else {
+ error("Expected an identifier and instead saw '{a}'.",
+ token, token.id);
+ }
+ }
+ while (rbp < nexttoken.lbp) {
+ isArray = token.value == 'Array';
+ advance();
+ if (isArray && token.id == '(' && nexttoken.id == ')')
+ warning("Use the array literal notation [].", token);
+ if (token.led) {
+ left = token.led(left);
+ } else {
+ error("Expected an operator and instead saw '{a}'.",
+ token, token.id);
+ }
+ }
+ }
+ return left;
+ }
+
+
+// Functions for conformance of style.
+
+ function adjacent(left, right) {
+ left = left || token;
+ right = right || nexttoken;
+ if (option.white) {
+ if (left.character !== right.from && left.line === right.line) {
+ warning("Unexpected space after '{a}'.", right, left.value);
+ }
+ }
+ }
+
+ function nobreak(left, right) {
+ left = left || token;
+ right = right || nexttoken;
+ if (option.white && (left.character !== right.from || left.line !== right.line)) {
+ warning("Unexpected space before '{a}'.", right, right.value);
+ }
+ }
+
+ function nospace(left, right) {
+ left = left || token;
+ right = right || nexttoken;
+ if (option.white && !left.comment) {
+ if (left.line === right.line) {
+ adjacent(left, right);
+ }
+ }
+ }
+
+ function nonadjacent(left, right) {
+ if (option.white) {
+ left = left || token;
+ right = right || nexttoken;
+ if (left.line === right.line && left.character === right.from) {
+ warning("Missing space after '{a}'.",
+ nexttoken, left.value);
+ }
+ }
+ }
+
+ function nobreaknonadjacent(left, right) {
+ left = left || token;
+ right = right || nexttoken;
+ if (!option.laxbreak && left.line !== right.line) {
+ warning("Bad line breaking before '{a}'.", right, right.id);
+ } else if (option.white) {
+ left = left || token;
+ right = right || nexttoken;
+ if (left.character === right.from) {
+ warning("Missing space after '{a}'.",
+ nexttoken, left.value);
+ }
+ }
+ }
+
+ function indentation(bias) {
+ var i;
+ if (option.white && nexttoken.id !== '(end)') {
+ i = indent + (bias || 0);
+ if (nexttoken.from !== i) {
+ warning(
+"Expected '{a}' to have an indentation at {b} instead at {c}.",
+ nexttoken, nexttoken.value, i, nexttoken.from);
+ }
+ }
+ }
+
+ function nolinebreak(t) {
+ t = t || token;
+ if (t.line !== nexttoken.line) {
+ warning("Line breaking error '{a}'.", t, t.value);
+ }
+ }
+
+
+ function comma() {
+ if (token.line !== nexttoken.line) {
+ if (!option.laxbreak) {
+ warning("Bad line breaking before '{a}'.", token, nexttoken.id);
+ }
+ } else if (token.character !== nexttoken.from && option.white) {
+ warning("Unexpected space after '{a}'.", nexttoken, token.value);
+ }
+ advance(',');
+ nonadjacent(token, nexttoken);
+ }
+
+
+// Functional constructors for making the symbols that will be inherited by
+// tokens.
+
+ function symbol(s, p) {
+ var x = syntax[s];
+ if (!x || typeof x !== 'object') {
+ syntax[s] = x = {
+ id: s,
+ lbp: p,
+ value: s
+ };
+ }
+ return x;
+ }
+
+
+ function delim(s) {
+ return symbol(s, 0);
+ }
+
+
+ function stmt(s, f) {
+ var x = delim(s);
+ x.identifier = x.reserved = true;
+ x.fud = f;
+ return x;
+ }
+
+
+ function blockstmt(s, f) {
+ var x = stmt(s, f);
+ x.block = true;
+ return x;
+ }
+
+
+ function reserveName(x) {
+ var c = x.id.charAt(0);
+ if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
+ x.identifier = x.reserved = true;
+ }
+ return x;
+ }
+
+
+ function prefix(s, f) {
+ var x = symbol(s, 150);
+ reserveName(x);
+ x.nud = (typeof f === 'function') ? f : function () {
+ this.right = expression(150);
+ this.arity = 'unary';
+ if (this.id === '++' || this.id === '--') {
+ if (option.plusplus) {
+ warning("Unexpected use of '{a}'.", this, this.id);
+ } else if ((!this.right.identifier || this.right.reserved) &&
+ this.right.id !== '.' && this.right.id !== '[') {
+ warning("Bad operand.", this);
+ }
+ }
+ return this;
+ };
+ return x;
+ }
+
+
+ function type(s, f) {
+ var x = delim(s);
+ x.type = s;
+ x.nud = f;
+ return x;
+ }
+
+
+ function reserve(s, f) {
+ var x = type(s, f);
+ x.identifier = x.reserved = true;
+ return x;
+ }
+
+
+ function reservevar(s, v) {
+ return reserve(s, function () {
+ if (typeof v === 'function') {
+ v(this);
+ }
+ return this;
+ });
+ }
+
+
+ function infix(s, f, p, w) {
+ var x = symbol(s, p);
+ reserveName(x);
+ x.led = function (left) {
+ if (!w) {
+ nobreaknonadjacent(prevtoken, token);
+ nonadjacent(token, nexttoken);
+ }
+ if (typeof f === 'function') {
+ return f(left, this);
+ } else {
+ this.left = left;
+ this.right = expression(p);
+ return this;
+ }
+ };
+ return x;
+ }
+
+
+ function relation(s, f) {
+ var x = symbol(s, 100);
+ x.led = function (left) {
+ nobreaknonadjacent(prevtoken, token);
+ nonadjacent(token, nexttoken);
+ var right = expression(100);
+ if ((left && left.id === 'NaN') || (right && right.id === 'NaN')) {
+ warning("Use the isNaN function to compare with NaN.", this);
+ } else if (f) {
+ f.apply(this, [left, right]);
+ }
+ if (left.id === '!') {
+ warning("Confusing use of '{a}'.", left, '!');
+ }
+ if (right.id === '!') {
+ warning("Confusing use of '{a}'.", left, '!');
+ }
+ this.left = left;
+ this.right = right;
+ return this;
+ };
+ return x;
+ }
+
+
+ function isPoorRelation(node) {
+ return node &&
+ ((node.type === '(number)' && +node.value === 0) ||
+ (node.type === '(string)' && node.value === '') ||
+ (node.type === 'null' && !option.eqnull) ||
+ node.type === 'true' ||
+ node.type === 'false' ||
+ node.type === 'undefined');
+ }
+
+
+ function assignop(s, f) {
+ symbol(s, 20).exps = true;
+ return infix(s, function (left, that) {
+ var l;
+ that.left = left;
+ if (predefined[left.value] === false &&
+ scope[left.value]['(global)'] === true) {
+ warning("Read only.", left);
+ } else if (left['function']) {
+ warning("'{a}' is a function.", left, left.value);
+ }
+ if (left) {
+ if (left.id === '.' || left.id === '[') {
+ if (!left.left || left.left.value === 'arguments') {
+ warning('Bad assignment.', that);
+ }
+ that.right = expression(19);
+ return that;
+ } else if (left.identifier && !left.reserved) {
+ if (funct[left.value] === 'exception') {
+ warning("Do not assign to the exception parameter.", left);
+ }
+ that.right = expression(19);
+ return that;
+ }
+ if (left === syntax['function']) {
+ warning(
+"Expected an identifier in an assignment and instead saw a function invocation.",
+ token);
+ }
+ }
+ error("Bad assignment.", that);
+ }, 20);
+ }
+
+
+ function bitwise(s, f, p) {
+ var x = symbol(s, p);
+ reserveName(x);
+ x.led = (typeof f === 'function') ? f : function (left) {
+ if (option.bitwise) {
+ warning("Unexpected use of '{a}'.", this, this.id);
+ }
+ this.left = left;
+ this.right = expression(p);
+ return this;
+ };
+ return x;
+ }
+
+
+ function bitwiseassignop(s) {
+ symbol(s, 20).exps = true;
+ return infix(s, function (left, that) {
+ if (option.bitwise) {
+ warning("Unexpected use of '{a}'.", that, that.id);
+ }
+ nonadjacent(prevtoken, token);
+ nonadjacent(token, nexttoken);
+ if (left) {
+ if (left.id === '.' || left.id === '[' ||
+ (left.identifier && !left.reserved)) {
+ expression(19);
+ return that;
+ }
+ if (left === syntax['function']) {
+ warning(
+"Expected an identifier in an assignment, and instead saw a function invocation.",
+ token);
+ }
+ return that;
+ }
+ error("Bad assignment.", that);
+ }, 20);
+ }
+
+
+ function suffix(s, f) {
+ var x = symbol(s, 150);
+ x.led = function (left) {
+ if (option.plusplus) {
+ warning("Unexpected use of '{a}'.", this, this.id);
+ } else if ((!left.identifier || left.reserved) &&
+ left.id !== '.' && left.id !== '[') {
+ warning("Bad operand.", this);
+ }
+ this.left = left;
+ return this;
+ };
+ return x;
+ }
+
+
+ // fnparam means that this identifier is being defined as a function
+ // argument (see identifier())
+ function optionalidentifier(fnparam) {
+ if (nexttoken.identifier) {
+ advance();
+ if (token.reserved && !option.es5) {
+ // `undefined` as a function param is a common pattern to protect
+ // against the case when somebody does `undefined = true` and
+ // help with minification. More info: https://gist.github.com/315916
+ if (!fnparam || token.value != 'undefined') {
+ warning("Expected an identifier and instead saw '{a}' (a reserved word).",
+ token, token.id);
+ }
+ }
+ return token.value;
+ }
+ }
+
+ // fnparam means that this identifier is being defined as a function
+ // argument
+ function identifier(fnparam) {
+ var i = optionalidentifier(fnparam);
+ if (i) {
+ return i;
+ }
+ if (token.id === 'function' && nexttoken.id === '(') {
+ warning("Missing name in function declaration.");
+ } else {
+ error("Expected an identifier and instead saw '{a}'.",
+ nexttoken, nexttoken.value);
+ }
+ }
+
+
+ function reachable(s) {
+ var i = 0, t;
+ if (nexttoken.id !== ';' || noreach) {
+ return;
+ }
+ for (;;) {
+ t = peek(i);
+ if (t.reach) {
+ return;
+ }
+ if (t.id !== '(endline)') {
+ if (t.id === 'function') {
+ warning(
+"Inner functions should be listed at the top of the outer function.", t);
+ break;
+ }
+ warning("Unreachable '{a}' after '{b}'.", t, t.value, s);
+ break;
+ }
+ i += 1;
+ }
+ }
+
+
+ function statement(noindent) {
+ var i = indent, r, s = scope, t = nexttoken;
+
+// We don't like the empty statement.
+
+ if (t.id === ';') {
+ warning("Unnecessary semicolon.", t);
+ advance(';');
+ return;
+ }
+
+// Is this a labelled statement?
+
+ if (t.identifier && !t.reserved && peek().id === ':') {
+ advance();
+ advance(':');
+ scope = Object.create(s);
+ addlabel(t.value, 'label');
+ if (!nexttoken.labelled) {
+ warning("Label '{a}' on {b} statement.",
+ nexttoken, t.value, nexttoken.value);
+ }
+ if (jx.test(t.value + ':')) {
+ warning("Label '{a}' looks like a javascript url.",
+ t, t.value);
+ }
+ nexttoken.label = t.value;
+ t = nexttoken;
+ }
+
+// Parse the statement.
+
+ if (!noindent) {
+ indentation();
+ }
+ r = expression(0, true);
+
+// Look for the final semicolon.
+
+ if (!t.block) {
+ if (!option.expr && (!r || !r.exps)) {
+ warning("Expected an assignment or function call and instead saw an expression.",
+ token);
+ } else if (option.nonew && r.id === '(' && r.left.id === 'new') {
+ warning("Do not use 'new' for side effects.");
+ }
+ if (nexttoken.id !== ';') {
+ if (!option.asi && !(option.lastsemic && nexttoken.id == '}' &&
+ nexttoken.line == token.line)) {
+ warningAt("Missing semicolon.", token.line, token.from + token.value.length);
+ }
+ } else {
+ adjacent(token, nexttoken);
+ advance(';');
+ nonadjacent(token, nexttoken);
+ }
+ }
+
+// Restore the indentation.
+
+ indent = i;
+ scope = s;
+ return r;
+ }
+
+
+ function use_strict() {
+ if (nexttoken.value === 'use strict') {
+ if (strict_mode) {
+ warning("Unnecessary \"use strict\".");
+ }
+ advance();
+ advance(';');
+ strict_mode = true;
+ option.newcap = true;
+ option.undef = true;
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+
+ function statements(begin) {
+ var a = [], f, p;
+
+ while (!nexttoken.reach && nexttoken.id !== '(end)') {
+ if (nexttoken.id === ';') {
+ warning("Unnecessary semicolon.");
+ advance(';');
+ } else {
+ a.push(statement());
+ }
+ }
+ return a;
+ }
+
+
+ /*
+ * Parses a single block. A block is a sequence of statements wrapped in
+ * braces.
+ *
+ * ordinary - true for everything but function bodies and try blocks.
+ * stmt - true if block can be a single statement (e.g. in if/for/while).
+ */
+ function block(ordinary, stmt) {
+ var a,
+ b = inblock,
+ old_indent = indent,
+ m = strict_mode,
+ s = scope,
+ t;
+
+ inblock = ordinary;
+ scope = Object.create(scope);
+ nonadjacent(token, nexttoken);
+ t = nexttoken;
+
+ if (nexttoken.id === '{') {
+ advance('{');
+ if (nexttoken.id !== '}' || token.line !== nexttoken.line) {
+ indent += option.indent;
+ while (!ordinary && nexttoken.from > indent) {
+ indent += option.indent;
+ }
+ if (!ordinary && !use_strict() && !m && option.strict &&
+ funct['(context)']['(global)']) {
+ warning("Missing \"use strict\" statement.");
+ }
+ a = statements();
+ strict_mode = m;
+ indent -= option.indent;
+ indentation();
+ }
+ advance('}', t);
+ indent = old_indent;
+ } else if (!ordinary) {
+ error("Expected '{a}' and instead saw '{b}'.",
+ nexttoken, '{', nexttoken.value);
+ } else {
+ if (!stmt || option.curly)
+ warning("Expected '{a}' and instead saw '{b}'.",
+ nexttoken, '{', nexttoken.value);
+
+ noreach = true;
+ a = [statement()];
+ noreach = false;
+ }
+ funct['(verb)'] = null;
+ scope = s;
+ inblock = b;
+ if (ordinary && option.noempty && (!a || a.length === 0)) {
+ warning("Empty block.");
+ }
+ return a;
+ }
+
+
+ function countMember(m) {
+ if (membersOnly && typeof membersOnly[m] !== 'boolean') {
+ warning("Unexpected /*member '{a}'.", token, m);
+ }
+ if (typeof member[m] === 'number') {
+ member[m] += 1;
+ } else {
+ member[m] = 1;
+ }
+ }
+
+
+ function note_implied(token) {
+ var name = token.value, line = token.line, a = implied[name];
+ if (typeof a === 'function') {
+ a = false;
+ }
+ if (!a) {
+ a = [line];
+ implied[name] = a;
+ } else if (a[a.length - 1] !== line) {
+ a.push(line);
+ }
+ }
+
+// Build the syntax table by declaring the syntactic elements of the language.
+
+ type('(number)', function () {
+ return this;
+ });
+ type('(string)', function () {
+ return this;
+ });
+
+ syntax['(identifier)'] = {
+ type: '(identifier)',
+ lbp: 0,
+ identifier: true,
+ nud: function () {
+ var v = this.value,
+ s = scope[v],
+ f;
+ if (typeof s === 'function') {
+
+// Protection against accidental inheritance.
+
+ s = undefined;
+ } else if (typeof s === 'boolean') {
+ f = funct;
+ funct = functions[0];
+ addlabel(v, 'var');
+ s = funct;
+ funct = f;
+ }
+
+// The name is in scope and defined in the current function.
+
+ if (funct === s) {
+
+// Change 'unused' to 'var', and reject labels.
+
+ switch (funct[v]) {
+ case 'unused':
+ funct[v] = 'var';
+ break;
+ case 'unction':
+ funct[v] = 'function';
+ this['function'] = true;
+ break;
+ case 'function':
+ this['function'] = true;
+ break;
+ case 'label':
+ warning("'{a}' is a statement label.", token, v);
+ break;
+ }
+
+// The name is not defined in the function. If we are in the global scope,
+// then we have an undefined variable.
+//
+// Operators typeof and delete do not raise runtime errors even if the base
+// object of a reference is null so no need to display warning if we're
+// inside of typeof or delete.
+
+ } else if (funct['(global)']) {
+ if (anonname != 'typeof' && anonname != 'delete' &&
+ option.undef && typeof predefined[v] !== 'boolean') {
+ warning("'{a}' is not defined.", token, v);
+ }
+ note_implied(token);
+
+// If the name is already defined in the current
+// function, but not as outer, then there is a scope error.
+
+ } else {
+ switch (funct[v]) {
+ case 'closure':
+ case 'function':
+ case 'var':
+ case 'unused':
+ warning("'{a}' used out of scope.", token, v);
+ break;
+ case 'label':
+ warning("'{a}' is a statement label.", token, v);
+ break;
+ case 'outer':
+ case 'global':
+ break;
+ default:
+
+// If the name is defined in an outer function, make an outer entry, and if
+// it was unused, make it var.
+
+ if (s === true) {
+ funct[v] = true;
+ } else if (s === null) {
+ warning("'{a}' is not allowed.", token, v);
+ note_implied(token);
+ } else if (typeof s !== 'object') {
+
+// Operators typeof and delete do not raise runtime errors even if the base object of
+// a reference is null so no need to display warning if we're inside of typeof or delete.
+
+ if (anonname != 'typeof' && anonname != 'delete' && option.undef) {
+ warning("'{a}' is not defined.", token, v);
+ } else {
+ funct[v] = true;
+ }
+ note_implied(token);
+ } else {
+ switch (s[v]) {
+ case 'function':
+ case 'unction':
+ this['function'] = true;
+ s[v] = 'closure';
+ funct[v] = s['(global)'] ? 'global' : 'outer';
+ break;
+ case 'var':
+ case 'unused':
+ s[v] = 'closure';
+ funct[v] = s['(global)'] ? 'global' : 'outer';
+ break;
+ case 'closure':
+ case 'parameter':
+ funct[v] = s['(global)'] ? 'global' : 'outer';
+ break;
+ case 'label':
+ warning("'{a}' is a statement label.", token, v);
+ }
+ }
+ }
+ }
+ return this;
+ },
+ led: function () {
+ error("Expected an operator and instead saw '{a}'.",
+ nexttoken, nexttoken.value);
+ }
+ };
+
+ type('(regexp)', function () {
+ return this;
+ });
+
+
+// ECMAScript parser
+
+ delim('(endline)');
+ delim('(begin)');
+ delim('(end)').reach = true;
+ delim('</').reach = true;
+ delim('<!');
+ delim('<!--');
+ delim('-->');
+ delim('(error)').reach = true;
+ delim('}').reach = true;
+ delim(')');
+ delim(']');
+ delim('"').reach = true;
+ delim("'").reach = true;
+ delim(';');
+ delim(':').reach = true;
+ delim(',');
+ delim('#');
+ delim('@');
+ reserve('else');
+ reserve('case').reach = true;
+ reserve('catch');
+ reserve('default').reach = true;
+ reserve('finally');
+ reservevar('arguments', function (x) {
+ if (strict_mode && funct['(global)']) {
+ warning("Strict violation.", x);
+ }
+ });
+ reservevar('eval');
+ reservevar('false');
+ reservevar('Infinity');
+ reservevar('NaN');
+ reservevar('null');
+ reservevar('this', function (x) {
+ if (strict_mode && ((funct['(statement)'] &&
+ funct['(name)'].charAt(0) > 'Z') || funct['(global)'])) {
+ warning("Strict violation.", x);
+ }
+ });
+ reservevar('true');
+ reservevar('undefined');
+ assignop('=', 'assign', 20);
+ assignop('+=', 'assignadd', 20);
+ assignop('-=', 'assignsub', 20);
+ assignop('*=', 'assignmult', 20);
+ assignop('/=', 'assigndiv', 20).nud = function () {
+ error("A regular expression literal can be confused with '/='.");
+ };
+ assignop('%=', 'assignmod', 20);
+ bitwiseassignop('&=', 'assignbitand', 20);
+ bitwiseassignop('|=', 'assignbitor', 20);
+ bitwiseassignop('^=', 'assignbitxor', 20);
+ bitwiseassignop('<<=', 'assignshiftleft', 20);
+ bitwiseassignop('>>=', 'assignshiftright', 20);
+ bitwiseassignop('>>>=', 'assignshiftrightunsigned', 20);
+ infix('?', function (left, that) {
+ that.left = left;
+ that.right = expression(10);
+ advance(':');
+ that['else'] = expression(10);
+ return that;
+ }, 30);
+
+ infix('||', 'or', 40);
+ infix('&&', 'and', 50);
+ bitwise('|', 'bitor', 70);
+ bitwise('^', 'bitxor', 80);
+ bitwise('&', 'bitand', 90);
+ relation('==', function (left, right) {
+ var eqnull = option.eqnull &&
+ (left.value == 'null' || right.value == 'null');
+
+ if (!eqnull && option.eqeqeq) {
+ warning("Expected '{a}' and instead saw '{b}'.",
+ this, '===', '==');
+ } else if (isPoorRelation(left)) {
+ warning("Use '{a}' to compare with '{b}'.",
+ this, '===', left.value);
+ } else if (isPoorRelation(right)) {
+ warning("Use '{a}' to compare with '{b}'.",
+ this, '===', right.value);
+ }
+ return this;
+ });
+ relation('===');
+ relation('!=', function (left, right) {
+ var eqnull = option.eqnull &&
+ (left.value == 'null' || right.value == 'null');
+
+ if (!eqnull && option.eqeqeq) {
+ warning("Expected '{a}' and instead saw '{b}'.",
+ this, '!==', '!=');
+ } else if (isPoorRelation(left)) {
+ warning("Use '{a}' to compare with '{b}'.",
+ this, '!==', left.value);
+ } else if (isPoorRelation(right)) {
+ warning("Use '{a}' to compare with '{b}'.",
+ this, '!==', right.value);
+ }
+ return this;
+ });
+ relation('!==');
+ relation('<');
+ relation('>');
+ relation('<=');
+ relation('>=');
+ bitwise('<<', 'shiftleft', 120);
+ bitwise('>>', 'shiftright', 120);
+ bitwise('>>>', 'shiftrightunsigned', 120);
+ infix('in', 'in', 120);
+ infix('instanceof', 'instanceof', 120);
+ infix('+', function (left, that) {
+ var right = expression(130);
+ if (left && right && left.id === '(string)' && right.id === '(string)') {
+ left.value += right.value;
+ left.character = right.character;
+ if (!option.scripturl && jx.test(left.value)) {
+ warning("JavaScript URL.", left);
+ }
+ return left;
+ }
+ that.left = left;
+ that.right = right;
+ return that;
+ }, 130);
+ prefix('+', 'num');
+ prefix('+++', function () {
+ warning("Confusing pluses.");
+ this.right = expression(150);
+ this.arity = 'unary';
+ return this;
+ });
+ infix('+++', function (left) {
+ warning("Confusing pluses.");
+ this.left = left;
+ this.right = expression(130);
+ return this;
+ }, 130);
+ infix('-', 'sub', 130);
+ prefix('-', 'neg');
+ prefix('---', function () {
+ warning("Confusing minuses.");
+ this.right = expression(150);
+ this.arity = 'unary';
+ return this;
+ });
+ infix('---', function (left) {
+ warning("Confusing minuses.");
+ this.left = left;
+ this.right = expression(130);
+ return this;
+ }, 130);
+ infix('*', 'mult', 140);
+ infix('/', 'div', 140);
+ infix('%', 'mod', 140);
+
+ suffix('++', 'postinc');
+ prefix('++', 'preinc');
+ syntax['++'].exps = true;
+
+ suffix('--', 'postdec');
+ prefix('--', 'predec');
+ syntax['--'].exps = true;
+ prefix('delete', function () {
+ var p = expression(0);
+ if (!p || (p.id !== '.' && p.id !== '[')) {
+ warning("Variables should not be deleted.");
+ }
+ this.first = p;
+ return this;
+ }).exps = true;
+
+ prefix('~', function () {
+ if (option.bitwise) {
+ warning("Unexpected '{a}'.", this, '~');
+ }
+ expression(150);
+ return this;
+ });
+
+ prefix('!', function () {
+ this.right = expression(150);
+ this.arity = 'unary';
+ if (bang[this.right.id] === true) {
+ warning("Confusing use of '{a}'.", this, '!');
+ }
+ return this;
+ });
+ prefix('typeof', 'typeof');
+ prefix('new', function () {
+ var c = expression(155), i;
+ if (c && c.id !== 'function') {
+ if (c.identifier) {
+ c['new'] = true;
+ switch (c.value) {
+ case 'Object':
+ warning("Use the object literal notation {}.", token);
+ break;
+ case 'Number':
+ case 'String':
+ case 'Boolean':
+ case 'Math':
+ case 'JSON':
+ warning("Do not use {a} as a constructor.", token, c.value);
+ break;
+ case 'Function':
+ if (!option.evil) {
+ warning("The Function constructor is eval.");
+ }
+ break;
+ case 'Date':
+ case 'RegExp':
+ break;
+ default:
+ if (c.id !== 'function') {
+ i = c.value.substr(0, 1);
+ if (option.newcap && (i < 'A' || i > 'Z')) {
+ warning("A constructor name should start with "+
+ "an uppercase letter.", token);
+ }
+ }
+ }
+ } else {
+ if (c.id !== '.' && c.id !== '[' && c.id !== '(') {
+ warning("Bad constructor.", token);
+ }
+ }
+ } else {
+ if (!option.supernew)
+ warning("Weird construction. Delete 'new'.", this);
+ }
+ adjacent(token, nexttoken);
+ if (nexttoken.id !== '(' && !option.supernew) {
+ warning("Missing '()' invoking a constructor.");
+ }
+ this.first = c;
+ return this;
+ });
+ syntax['new'].exps = true;
+
+ prefix('void').exps = true;
+
+ infix('.', function (left, that) {
+ adjacent(prevtoken, token);
+ nobreak();
+ var m = identifier();
+ if (typeof m === 'string') {
+ countMember(m);
+ }
+ that.left = left;
+ that.right = m;
+ if (option.noarg && left && left.value === 'arguments' &&
+ (m === 'callee' || m === 'caller')) {
+ warning("Avoid arguments.{a}.", left, m);
+ } else if (!option.evil && left && left.value === 'document' &&
+ (m === 'write' || m === 'writeln')) {
+ warning("document.write can be a form of eval.", left);
+ }
+ if (!option.evil && (m === 'eval' || m === 'execScript')) {
+ warning('eval is evil.');
+ }
+ return that;
+ }, 160, true);
+
+ infix('(', function (left, that) {
+ if (prevtoken.id !== '}' && prevtoken.id !== ')') {
+ nobreak(prevtoken, token);
+ }
+ nospace();
+ if (option.immed && !left.immed && left.id === 'function') {
+ warning("Wrap an immediate function invocation in parentheses " +
+ "to assist the reader in understanding that the expression " +
+ "is the result of a function, and not the function itself.");
+ }
+ var n = 0,
+ p = [];
+ if (left) {
+ if (left.type === '(identifier)') {
+ if (left.value.match(/^[A-Z]([A-Z0-9_$]*[a-z][A-Za-z0-9_$]*)?$/)) {
+ if (left.value !== 'Number' && left.value !== 'String' &&
+ left.value !== 'Boolean' &&
+ left.value !== 'Date') {
+ if (left.value === 'Math') {
+ warning("Math is not a function.", left);
+ } else if (option.newcap) {
+ warning(
+"Missing 'new' prefix when invoking a constructor.", left);
+ }
+ }
+ }
+ }
+ }
+ if (nexttoken.id !== ')') {
+ for (;;) {
+ p[p.length] = expression(10);
+ n += 1;
+ if (nexttoken.id !== ',') {
+ break;
+ }
+ comma();
+ }
+ }
+ advance(')');
+ nospace(prevtoken, token);
+ if (typeof left === 'object') {
+ if (left.value === 'parseInt' && n === 1) {
+ warning("Missing radix parameter.", left);
+ }
+ if (!option.evil) {
+ if (left.value === 'eval' || left.value === 'Function' ||
+ left.value === 'execScript') {
+ warning("eval is evil.", left);
+ } else if (p[0] && p[0].id === '(string)' &&
+ (left.value === 'setTimeout' ||
+ left.value === 'setInterval')) {
+ warning(
+ "Implied eval is evil. Pass a function instead of a string.", left);
+ }
+ }
+ if (!left.identifier && left.id !== '.' && left.id !== '[' &&
+ left.id !== '(' && left.id !== '&&' && left.id !== '||' &&
+ left.id !== '?') {
+ warning("Bad invocation.", left);
+ }
+ }
+ that.left = left;
+ return that;
+ }, 155, true).exps = true;
+
+ prefix('(', function () {
+ nospace();
+ if (nexttoken.id === 'function') {
+ nexttoken.immed = true;
+ }
+ var v = expression(0);
+ advance(')', this);
+ nospace(prevtoken, token);
+ if (option.immed && v.id === 'function') {
+ if (nexttoken.id === '(') {
+ warning(
+"Move the invocation into the parens that contain the function.", nexttoken);
+ } else {
+ warning(
+"Do not wrap function literals in parens unless they are to be immediately invoked.",
+ this);
+ }
+ }
+ return v;
+ });
+
+ infix('[', function (left, that) {
+ nobreak(prevtoken, token);
+ nospace();
+ var e = expression(0), s;
+ if (e && e.type === '(string)') {
+ if (!option.evil && (e.value === 'eval' || e.value === 'execScript')) {
+ warning("eval is evil.", that);
+ }
+ countMember(e.value);
+ if (!option.sub && ix.test(e.value)) {
+ s = syntax[e.value];
+ if (!s || !s.reserved) {
+ warning("['{a}'] is better written in dot notation.",
+ e, e.value);
+ }
+ }
+ }
+ advance(']', that);
+ nospace(prevtoken, token);
+ that.left = left;
+ that.right = e;
+ return that;
+ }, 160, true);
+
+ prefix('[', function () {
+ var b = token.line !== nexttoken.line;
+ this.first = [];
+ if (b) {
+ indent += option.indent;
+ if (nexttoken.from === indent + option.indent) {
+ indent += option.indent;
+ }
+ }
+ while (nexttoken.id !== '(end)') {
+ while (nexttoken.id === ',') {
+ warning("Extra comma.");
+ advance(',');
+ }
+ if (nexttoken.id === ']') {
+ break;
+ }
+ if (b && token.line !== nexttoken.line) {
+ indentation();
+ }
+ this.first.push(expression(10));
+ if (nexttoken.id === ',') {
+ comma();
+ if (nexttoken.id === ']' && !option.es5) {
+ warning("Extra comma.", token);
+ break;
+ }
+ } else {
+ break;
+ }
+ }
+ if (b) {
+ indent -= option.indent;
+ indentation();
+ }
+ advance(']', this);
+ return this;
+ }, 160);
+
+
+ function property_name() {
+ var id = optionalidentifier(true);
+ if (!id) {
+ if (nexttoken.id === '(string)') {
+ id = nexttoken.value;
+ advance();
+ } else if (nexttoken.id === '(number)') {
+ id = nexttoken.value.toString();
+ advance();
+ }
+ }
+ return id;
+ }
+
+
+ function functionparams() {
+ var i, t = nexttoken, p = [];
+ advance('(');
+ nospace();
+ if (nexttoken.id === ')') {
+ advance(')');
+ nospace(prevtoken, token);
+ return;
+ }
+ for (;;) {
+ i = identifier(true);
+ p.push(i);
+ addlabel(i, 'parameter');
+ if (nexttoken.id === ',') {
+ comma();
+ } else {
+ advance(')', t);
+ nospace(prevtoken, token);
+ return p;
+ }
+ }
+ }
+
+
+ function doFunction(i, statement) {
+ var f,
+ oldOption = option,
+ oldScope = scope;
+
+ option = Object.create(option);
+ scope = Object.create(scope);
+
+ funct = {
+ '(name)' : i || '"' + anonname + '"',
+ '(line)' : nexttoken.line,
+ '(context)' : funct,
+ '(breakage)' : 0,
+ '(loopage)' : 0,
+ '(scope)' : scope,
+ '(statement)': statement
+ };
+ f = funct;
+ token.funct = funct;
+ functions.push(funct);
+ if (i) {
+ addlabel(i, 'function');
+ }
+ funct['(params)'] = functionparams();
+
+ block(false);
+ scope = oldScope;
+ option = oldOption;
+ funct['(last)'] = token.line;
+ funct = funct['(context)'];
+ return f;
+ }
+
+
+ (function (x) {
+ x.nud = function () {
+ var b, f, i, j, p, seen = {}, t;
+
+ b = token.line !== nexttoken.line;
+ if (b) {
+ indent += option.indent;
+ if (nexttoken.from === indent + option.indent) {
+ indent += option.indent;
+ }
+ }
+ for (;;) {
+ if (nexttoken.id === '}') {
+ break;
+ }
+ if (b) {
+ indentation();
+ }
+ if (nexttoken.value === 'get' && peek().id !== ':') {
+ advance('get');
+ if (!option.es5) {
+ error("get/set are ES5 features.");
+ }
+ i = property_name();
+ if (!i) {
+ error("Missing property name.");
+ }
+ t = nexttoken;
+ adjacent(token, nexttoken);
+ f = doFunction();
+ if (!option.loopfunc && funct['(loopage)']) {
+ warning("Don't make functions within a loop.", t);
+ }
+ p = f['(params)'];
+ if (p) {
+ warning("Unexpected parameter '{a}' in get {b} function.", t, p[0], i);
+ }
+ adjacent(token, nexttoken);
+ advance(',');
+ indentation();
+ advance('set');
+ j = property_name();
+ if (i !== j) {
+ error("Expected {a} and instead saw {b}.", token, i, j);
+ }
+ t = nexttoken;
+ adjacent(token, nexttoken);
+ f = doFunction();
+ p = f['(params)'];
+ if (!p || p.length !== 1 || p[0] !== 'value') {
+ warning("Expected (value) in set {a} function.", t, i);
+ }
+ } else {
+ i = property_name();
+ if (typeof i !== 'string') {
+ break;
+ }
+ advance(':');
+ nonadjacent(token, nexttoken);
+ expression(10);
+ }
+ if (seen[i] === true) {
+ warning("Duplicate member '{a}'.", nexttoken, i);
+ }
+ seen[i] = true;
+ countMember(i);
+ if (nexttoken.id === ',') {
+ comma();
+ if (nexttoken.id === ',') {
+ warning("Extra comma.", token);
+ } else if (nexttoken.id === '}' && !option.es5) {
+ warning("Extra comma.", token);
+ }
+ } else {
+ break;
+ }
+ }
+ if (b) {
+ indent -= option.indent;
+ indentation();
+ }
+ advance('}', this);
+ return this;
+ };
+ x.fud = function () {
+ error("Expected to see a statement and instead saw a block.", token);
+ };
+ }(delim('{')));
+
+ var varstatement = stmt('var', function (prefix) {
+ // JavaScript does not have block scope. It only has function scope. So,
+ // declaring a variable in a block can have unexpected consequences.
+ var id, name, value;
+
+ if (funct['(onevar)'] && option.onevar) {
+ warning("Too many var statements.");
+ } else if (!funct['(global)']) {
+ funct['(onevar)'] = true;
+ }
+ this.first = [];
+ for (;;) {
+ nonadjacent(token, nexttoken);
+ id = identifier();
+ if (funct['(global)'] && predefined[id] === false) {
+ warning("Redefinition of '{a}'.", token, id);
+ }
+ addlabel(id, 'unused');
+ if (prefix) {
+ break;
+ }
+ name = token;
+ this.first.push(token);
+ if (nexttoken.id === '=') {
+ nonadjacent(token, nexttoken);
+ advance('=');
+ nonadjacent(token, nexttoken);
+ if (nexttoken.id === 'undefined') {
+ warning("It is not necessary to initialize '{a}' to 'undefined'.", token, id);
+ }
+ if (peek(0).id === '=' && nexttoken.identifier) {
+ error("Variable {a} was not declared correctly.",
+ nexttoken, nexttoken.value);
+ }
+ value = expression(0);
+ name.first = value;
+ }
+ if (nexttoken.id !== ',') {
+ break;
+ }
+ comma();
+ }
+ return this;
+ });
+ varstatement.exps = true;
+
+ blockstmt('function', function () {
+ if (inblock) {
+ warning("Function declarations should not be placed in blocks. " +
+ "Use a function expression or move the statement to the top of " +
+ "the outer function.", token);
+
+ }
+ var i = identifier();
+ adjacent(token, nexttoken);
+ addlabel(i, 'unction');
+ doFunction(i, true);
+ if (nexttoken.id === '(' && nexttoken.line === token.line) {
+ error(
+"Function declarations are not invocable. Wrap the whole function invocation in parens.");
+ }
+ return this;
+ });
+
+ prefix('function', function () {
+ var i = optionalidentifier();
+ if (i) {
+ adjacent(token, nexttoken);
+ } else {
+ nonadjacent(token, nexttoken);
+ }
+ doFunction(i);
+ if (!option.loopfunc && funct['(loopage)']) {
+ warning("Don't make functions within a loop.");
+ }
+ return this;
+ });
+
+ blockstmt('if', function () {
+ var t = nexttoken;
+ advance('(');
+ nonadjacent(this, t);
+ nospace();
+ expression(20);
+ if (nexttoken.id === '=') {
+ if (!option.boss)
+ warning("Expected a conditional expression and instead saw an assignment.");
+ advance('=');
+ expression(20);
+ }
+ advance(')', t);
+ nospace(prevtoken, token);
+ block(true, true);
+ if (nexttoken.id === 'else') {
+ nonadjacent(token, nexttoken);
+ advance('else');
+ if (nexttoken.id === 'if' || nexttoken.id === 'switch') {
+ statement(true);
+ } else {
+ block(true, true);
+ }
+ }
+ return this;
+ });
+
+ blockstmt('try', function () {
+ var b, e, s;
+
+ block(false);
+ if (nexttoken.id === 'catch') {
+ advance('catch');
+ nonadjacent(token, nexttoken);
+ advance('(');
+ s = scope;
+ scope = Object.create(s);
+ e = nexttoken.value;
+ if (nexttoken.type !== '(identifier)') {
+ warning("Expected an identifier and instead saw '{a}'.",
+ nexttoken, e);
+ } else {
+ addlabel(e, 'exception');
+ }
+ advance();
+ advance(')');
+ block(false);
+ b = true;
+ scope = s;
+ }
+ if (nexttoken.id === 'finally') {
+ advance('finally');
+ block(false);
+ return;
+ } else if (!b) {
+ error("Expected '{a}' and instead saw '{b}'.",
+ nexttoken, 'catch', nexttoken.value);
+ }
+ return this;
+ });
+
+ blockstmt('while', function () {
+ var t = nexttoken;
+ funct['(breakage)'] += 1;
+ funct['(loopage)'] += 1;
+ advance('(');
+ nonadjacent(this, t);
+ nospace();
+ expression(20);
+ if (nexttoken.id === '=') {
+ if (!option.boss)
+ warning("Expected a conditional expression and instead saw an assignment.");
+ advance('=');
+ expression(20);
+ }
+ advance(')', t);
+ nospace(prevtoken, token);
+ block(true, true);
+ funct['(breakage)'] -= 1;
+ funct['(loopage)'] -= 1;
+ return this;
+ }).labelled = true;
+
+ reserve('with');
+
+ blockstmt('switch', function () {
+ var t = nexttoken,
+ g = false;
+ funct['(breakage)'] += 1;
+ advance('(');
+ nonadjacent(this, t);
+ nospace();
+ this.condition = expression(20);
+ advance(')', t);
+ nospace(prevtoken, token);
+ nonadjacent(token, nexttoken);
+ t = nexttoken;
+ advance('{');
+ nonadjacent(token, nexttoken);
+ indent += option.indent;
+ this.cases = [];
+ for (;;) {
+ switch (nexttoken.id) {
+ case 'case':
+ switch (funct['(verb)']) {
+ case 'break':
+ case 'case':
+ case 'continue':
+ case 'return':
+ case 'switch':
+ case 'throw':
+ break;
+ default:
+ // You can tell JSHint that you don't use break intentionally by
+ // adding a comment /* falls through */ on a line just before
+ // the next `case`.
+ if (!ft.test(lines[nexttoken.line - 2])) {
+ warning(
+ "Expected a 'break' statement before 'case'.",
+ token);
+ }
+ }
+ indentation(-option.indent);
+ advance('case');
+ this.cases.push(expression(20));
+ g = true;
+ advance(':');
+ funct['(verb)'] = 'case';
+ break;
+ case 'default':
+ switch (funct['(verb)']) {
+ case 'break':
+ case 'continue':
+ case 'return':
+ case 'throw':
+ break;
+ default:
+ if (!ft.test(lines[nexttoken.line - 2])) {
+ warning(
+ "Expected a 'break' statement before 'default'.",
+ token);
+ }
+ }
+ indentation(-option.indent);
+ advance('default');
+ g = true;
+ advance(':');
+ break;
+ case '}':
+ indent -= option.indent;
+ indentation();
+ advance('}', t);
+ if (this.cases.length === 1 || this.condition.id === 'true' ||
+ this.condition.id === 'false') {
+ warning("This 'switch' should be an 'if'.", this);
+ }
+ funct['(breakage)'] -= 1;
+ funct['(verb)'] = undefined;
+ return;
+ case '(end)':
+ error("Missing '{a}'.", nexttoken, '}');
+ return;
+ default:
+ if (g) {
+ switch (token.id) {
+ case ',':
+ error("Each value should have its own case label.");
+ return;
+ case ':':
+ statements();
+ break;
+ default:
+ error("Missing ':' on a case clause.", token);
+ }
+ } else {
+ error("Expected '{a}' and instead saw '{b}'.",
+ nexttoken, 'case', nexttoken.value);
+ }
+ }
+ }
+ }).labelled = true;
+
+ stmt('debugger', function () {
+ if (!option.debug) {
+ warning("All 'debugger' statements should be removed.");
+ }
+ return this;
+ }).exps = true;
+
+ (function () {
+ var x = stmt('do', function () {
+ funct['(breakage)'] += 1;
+ funct['(loopage)'] += 1;
+ this.first = block(true);
+ advance('while');
+ var t = nexttoken;
+ nonadjacent(token, t);
+ advance('(');
+ nospace();
+ expression(20);
+ if (nexttoken.id === '=') {
+ if (!option.boss)
+ warning("Expected a conditional expression and instead saw an assignment.");
+ advance('=');
+ expression(20);
+ }
+ advance(')', t);
+ nospace(prevtoken, token);
+ funct['(breakage)'] -= 1;
+ funct['(loopage)'] -= 1;
+ return this;
+ });
+ x.labelled = true;
+ x.exps = true;
+ }());
+
+ blockstmt('for', function () {
+ var s, t = nexttoken;
+ funct['(breakage)'] += 1;
+ funct['(loopage)'] += 1;
+ advance('(');
+ nonadjacent(this, t);
+ nospace();
+ if (peek(nexttoken.id === 'var' ? 1 : 0).id === 'in') {
+ if (nexttoken.id === 'var') {
+ advance('var');
+ varstatement.fud.call(varstatement, true);
+ } else {
+ switch (funct[nexttoken.value]) {
+ case 'unused':
+ funct[nexttoken.value] = 'var';
+ break;
+ case 'var':
+ break;
+ default:
+ warning("Bad for in variable '{a}'.",
+ nexttoken, nexttoken.value);
+ }
+ advance();
+ }
+ advance('in');
+ expression(20);
+ advance(')', t);
+ s = block(true, true);
+ if (option.forin && (s.length > 1 || typeof s[0] !== 'object' ||
+ s[0].value !== 'if')) {
+ warning("The body of a for in should be wrapped in an if statement to filter " +
+ "unwanted properties from the prototype.", this);
+ }
+ funct['(breakage)'] -= 1;
+ funct['(loopage)'] -= 1;
+ return this;
+ } else {
+ if (nexttoken.id !== ';') {
+ if (nexttoken.id === 'var') {
+ advance('var');
+ varstatement.fud.call(varstatement);
+ } else {
+ for (;;) {
+ expression(0, 'for');
+ if (nexttoken.id !== ',') {
+ break;
+ }
+ comma();
+ }
+ }
+ }
+ nolinebreak(token);
+ advance(';');
+ if (nexttoken.id !== ';') {
+ expression(20);
+ if (nexttoken.id === '=') {
+ if (!option.boss)
+ warning("Expected a conditional expression and instead saw an assignment.");
+ advance('=');
+ expression(20);
+ }
+ }
+ nolinebreak(token);
+ advance(';');
+ if (nexttoken.id === ';') {
+ error("Expected '{a}' and instead saw '{b}'.",
+ nexttoken, ')', ';');
+ }
+ if (nexttoken.id !== ')') {
+ for (;;) {
+ expression(0, 'for');
+ if (nexttoken.id !== ',') {
+ break;
+ }
+ comma();
+ }
+ }
+ advance(')', t);
+ nospace(prevtoken, token);
+ block(true, true);
+ funct['(breakage)'] -= 1;
+ funct['(loopage)'] -= 1;
+ return this;
+ }
+ }).labelled = true;
+
+
+ stmt('break', function () {
+ var v = nexttoken.value;
+ if (funct['(breakage)'] === 0) {
+ warning("Unexpected '{a}'.", nexttoken, this.value);
+ }
+ nolinebreak(this);
+ if (nexttoken.id !== ';') {
+ if (token.line === nexttoken.line) {
+ if (funct[v] !== 'label') {
+ warning("'{a}' is not a statement label.", nexttoken, v);
+ } else if (scope[v] !== funct) {
+ warning("'{a}' is out of scope.", nexttoken, v);
+ }
+ this.first = nexttoken;
+ advance();
+ }
+ }
+ reachable('break');
+ return this;
+ }).exps = true;
+
+
+ stmt('continue', function () {
+ var v = nexttoken.value;
+ if (funct['(breakage)'] === 0) {
+ warning("Unexpected '{a}'.", nexttoken, this.value);
+ }
+ nolinebreak(this);
+ if (nexttoken.id !== ';') {
+ if (token.line === nexttoken.line) {
+ if (funct[v] !== 'label') {
+ warning("'{a}' is not a statement label.", nexttoken, v);
+ } else if (scope[v] !== funct) {
+ warning("'{a}' is out of scope.", nexttoken, v);
+ }
+ this.first = nexttoken;
+ advance();
+ }
+ } else if (!funct['(loopage)']) {
+ warning("Unexpected '{a}'.", nexttoken, this.value);
+ }
+ reachable('continue');
+ return this;
+ }).exps = true;
+
+
+ stmt('return', function () {
+ nolinebreak(this);
+ if (nexttoken.id === '(regexp)') {
+ warning("Wrap the /regexp/ literal in parens to disambiguate the slash operator.");
+ }
+ if (nexttoken.id !== ';' && !nexttoken.reach) {
+ nonadjacent(token, nexttoken);
+ this.first = expression(20);
+ }
+ reachable('return');
+ return this;
+ }).exps = true;
+
+
+ stmt('throw', function () {
+ nolinebreak(this);
+ nonadjacent(token, nexttoken);
+ this.first = expression(20);
+ reachable('throw');
+ return this;
+ }).exps = true;
+
+// Superfluous reserved words
+
+ reserve('class');
+ reserve('const');
+ reserve('enum');
+ reserve('export');
+ reserve('extends');
+ reserve('import');
+ reserve('super');
+
+ reserve('let');
+ reserve('yield');
+ reserve('implements');
+ reserve('interface');
+ reserve('package');
+ reserve('private');
+ reserve('protected');
+ reserve('public');
+ reserve('static');
+
+
+// Parse JSON
+
+ function jsonValue() {
+
+ function jsonObject() {
+ var o = {}, t = nexttoken;
+ advance('{');
+ if (nexttoken.id !== '}') {
+ for (;;) {
+ if (nexttoken.id === '(end)') {
+ error("Missing '}' to match '{' from line {a}.",
+ nexttoken, t.line);
+ } else if (nexttoken.id === '}') {
+ warning("Unexpected comma.", token);
+ break;
+ } else if (nexttoken.id === ',') {
+ error("Unexpected comma.", nexttoken);
+ } else if (nexttoken.id !== '(string)') {
+ warning("Expected a string and instead saw {a}.",
+ nexttoken, nexttoken.value);
+ }
+ if (o[nexttoken.value] === true) {
+ warning("Duplicate key '{a}'.",
+ nexttoken, nexttoken.value);
+ } else if ((nexttoken.value === '__proto__' &&
+ !option.proto) || (nexttoken.value === '__iterator__' &&
+ !option.iterator)) {
+ warning("The '{a}' key may produce unexpected results.",
+ nexttoken, nexttoken.value);
+ } else {
+ o[nexttoken.value] = true;
+ }
+ advance();
+ advance(':');
+ jsonValue();
+ if (nexttoken.id !== ',') {
+ break;
+ }
+ advance(',');
+ }
+ }
+ advance('}');
+ }
+
+ function jsonArray() {
+ var t = nexttoken;
+ advance('[');
+ if (nexttoken.id !== ']') {
+ for (;;) {
+ if (nexttoken.id === '(end)') {
+ error("Missing ']' to match '[' from line {a}.",
+ nexttoken, t.line);
+ } else if (nexttoken.id === ']') {
+ warning("Unexpected comma.", token);
+ break;
+ } else if (nexttoken.id === ',') {
+ error("Unexpected comma.", nexttoken);
+ }
+ jsonValue();
+ if (nexttoken.id !== ',') {
+ break;
+ }
+ advance(',');
+ }
+ }
+ advance(']');
+ }
+
+ switch (nexttoken.id) {
+ case '{':
+ jsonObject();
+ break;
+ case '[':
+ jsonArray();
+ break;
+ case 'true':
+ case 'false':
+ case 'null':
+ case '(number)':
+ case '(string)':
+ advance();
+ break;
+ case '-':
+ advance('-');
+ if (token.character !== nexttoken.from) {
+ warning("Unexpected space after '-'.", token);
+ }
+ adjacent(token, nexttoken);
+ advance('(number)');
+ break;
+ default:
+ error("Expected a JSON value.", nexttoken);
+ }
+ }
+
+
+// The actual JSHINT function itself.
+
+ var itself = function (s, o, g) {
+ var a, i, k;
+ JSHINT.errors = [];
+ predefined = Object.create(standard);
+ combine(predefined, g || {});
+ if (o) {
+ a = o.predef;
+ if (a) {
+ if (Array.isArray(a)) {
+ for (i = 0; i < a.length; i += 1) {
+ predefined[a[i]] = true;
+ }
+ } else if (typeof a === 'object') {
+ k = Object.keys(a);
+ for (i = 0; i < k.length; i += 1) {
+ predefined[k[i]] = !!a[k[i]];
+ }
+ }
+ }
+ option = o;
+ } else {
+ option = {};
+ }
+ option.indent = option.indent || 4;
+ option.maxerr = option.maxerr || 50;
+
+ tab = '';
+ for (i = 0; i < option.indent; i += 1) {
+ tab += ' ';
+ }
+ indent = 1;
+ global = Object.create(predefined);
+ scope = global;
+ funct = {
+ '(global)': true,
+ '(name)': '(global)',
+ '(scope)': scope,
+ '(breakage)': 0,
+ '(loopage)': 0
+ };
+ functions = [funct];
+ urls = [];
+ src = false;
+ stack = null;
+ member = {};
+ membersOnly = null;
+ implied = {};
+ inblock = false;
+ lookahead = [];
+ jsonmode = false;
+ warnings = 0;
+ lex.init(s);
+ prereg = true;
+ strict_mode = false;
+
+ prevtoken = token = nexttoken = syntax['(begin)'];
+ assume();
+
+ try {
+ advance();
+ switch (nexttoken.id) {
+ case '{':
+ case '[':
+ option.laxbreak = true;
+ jsonmode = true;
+ jsonValue();
+ break;
+ default:
+ if (nexttoken.value === 'use strict') {
+ if (!option.globalstrict)
+ warning("Use the function form of \"use strict\".");
+ use_strict();
+ }
+ statements('lib');
+ }
+ advance('(end)');
+ } catch (e) {
+ if (e) {
+ JSHINT.errors.push({
+ reason : e.message,
+ line : e.line || nexttoken.line,
+ character : e.character || nexttoken.from
+ }, null);
+ }
+ }
+ return JSHINT.errors.length === 0;
+ };
+
+
+// Data summary.
+
+ itself.data = function () {
+
+ var data = {functions: []}, fu, globals, implieds = [], f, i, j,
+ members = [], n, unused = [], v;
+ if (itself.errors.length) {
+ data.errors = itself.errors;
+ }
+
+ if (jsonmode) {
+ data.json = true;
+ }
+
+ for (n in implied) {
+ if (is_own(implied, n)) {
+ implieds.push({
+ name: n,
+ line: implied[n]
+ });
+ }
+ }
+ if (implieds.length > 0) {
+ data.implieds = implieds;
+ }
+
+ if (urls.length > 0) {
+ data.urls = urls;
+ }
+
+ globals = Object.keys(scope);
+ if (globals.length > 0) {
+ data.globals = globals;
+ }
+
+ for (i = 1; i < functions.length; i += 1) {
+ f = functions[i];
+ fu = {};
+ for (j = 0; j < functionicity.length; j += 1) {
+ fu[functionicity[j]] = [];
+ }
+ for (n in f) {
+ if (is_own(f, n) && n.charAt(0) !== '(') {
+ v = f[n];
+ if (v === 'unction') {
+ v = 'unused';
+ }
+ if (Array.isArray(fu[v])) {
+ fu[v].push(n);
+ if (v === 'unused') {
+ unused.push({
+ name: n,
+ line: f['(line)'],
+ 'function': f['(name)']
+ });
+ }
+ }
+ }
+ }
+ for (j = 0; j < functionicity.length; j += 1) {
+ if (fu[functionicity[j]].length === 0) {
+ delete fu[functionicity[j]];
+ }
+ }
+ fu.name = f['(name)'];
+ fu.param = f['(params)'];
+ fu.line = f['(line)'];
+ fu.last = f['(last)'];
+ data.functions.push(fu);
+ }
+
+ if (unused.length > 0) {
+ data.unused = unused;
+ }
+
+ members = [];
+ for (n in member) {
+ if (typeof member[n] === 'number') {
+ data.member = member;
+ break;
+ }
+ }
+
+ return data;
+ };
+
+ itself.report = function (option) {
+ var data = itself.data();
+
+ var a = [], c, e, err, f, i, k, l, m = '', n, o = [], s;
+
+ function detail(h, array) {
+ var b, i, singularity;
+ if (array) {
+ o.push('<div><i>' + h + '</i> ');
+ array = array.sort();
+ for (i = 0; i < array.length; i += 1) {
+ if (array[i] !== singularity) {
+ singularity = array[i];
+ o.push((b ? ', ' : '') + singularity);
+ b = true;
+ }
+ }
+ o.push('</div>');
+ }
+ }
+
+
+ if (data.errors || data.implieds || data.unused) {
+ err = true;
+ o.push('<div id=errors><i>Error:</i>');
+ if (data.errors) {
+ for (i = 0; i < data.errors.length; i += 1) {
+ c = data.errors[i];
+ if (c) {
+ e = c.evidence || '';
+ o.push('<p>Problem' + (isFinite(c.line) ? ' at line ' +
+ c.line + ' character ' + c.character : '') +
+ ': ' + c.reason.entityify() +
+ '</p><p class=evidence>' +
+ (e && (e.length > 80 ? e.slice(0, 77) + '...' :
+ e).entityify()) + '</p>');
+ }
+ }
+ }
+
+ if (data.implieds) {
+ s = [];
+ for (i = 0; i < data.implieds.length; i += 1) {
+ s[i] = '<code>' + data.implieds[i].name + '</code>&nbsp;<i>' +
+ data.implieds[i].line + '</i>';
+ }
+ o.push('<p><i>Implied global:</i> ' + s.join(', ') + '</p>');
+ }
+
+ if (data.unused) {
+ s = [];
+ for (i = 0; i < data.unused.length; i += 1) {
+ s[i] = '<code><u>' + data.unused[i].name + '</u></code>&nbsp;<i>' +
+ data.unused[i].line + '</i> <code>' +
+ data.unused[i]['function'] + '</code>';
+ }
+ o.push('<p><i>Unused variable:</i> ' + s.join(', ') + '</p>');
+ }
+ if (data.json) {
+ o.push('<p>JSON: bad.</p>');
+ }
+ o.push('</div>');
+ }
+
+ if (!option) {
+
+ o.push('<br><div id=functions>');
+
+ if (data.urls) {
+ detail("URLs<br>", data.urls, '<br>');
+ }
+
+ if (data.json && !err) {
+ o.push('<p>JSON: good.</p>');
+ } else if (data.globals) {
+ o.push('<div><i>Global</i> ' +
+ data.globals.sort().join(', ') + '</div>');
+ } else {
+ o.push('<div><i>No new global variables introduced.</i></div>');
+ }
+
+ for (i = 0; i < data.functions.length; i += 1) {
+ f = data.functions[i];
+
+ o.push('<br><div class=function><i>' + f.line + '-' +
+ f.last + '</i> ' + (f.name || '') + '(' +
+ (f.param ? f.param.join(', ') : '') + ')</div>');
+ detail('<big><b>Unused</b></big>', f.unused);
+ detail('Closure', f.closure);
+ detail('Variable', f['var']);
+ detail('Exception', f.exception);
+ detail('Outer', f.outer);
+ detail('Global', f.global);
+ detail('Label', f.label);
+ }
+
+ if (data.member) {
+ a = Object.keys(data.member);
+ if (a.length) {
+ a = a.sort();
+ m = '<br><pre id=members>/*members ';
+ l = 10;
+ for (i = 0; i < a.length; i += 1) {
+ k = a[i];
+ n = k.name();
+ if (l + n.length > 72) {
+ o.push(m + '<br>');
+ m = ' ';
+ l = 1;
+ }
+ l += n.length + 2;
+ if (data.member[k] === 1) {
+ n = '<i>' + n + '</i>';
+ }
+ if (i < a.length - 1) {
+ n += ', ';
+ }
+ m += n;
+ }
+ o.push(m + '<br>*/</pre>');
+ }
+ o.push('</div>');
+ }
+ }
+ return o.join('');
+ };
+ itself.jshint = itself;
+
+ itself.edition = '2011-04-16';
+
+ return itself;
+
+}());
+
+// Make JSHINT a Node module, if possible.
+if (typeof exports == 'object' && exports)
+ exports.JSHINT = JSHINT;
+
+});/* -*- Mode: JS; tab-width: 4; indent-tabs-mode: nil; -*-
+ * vim: set sw=4 ts=4 et tw=78:
+ * ***** BEGIN LICENSE BLOCK *****
+ *
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is the Narcissus JavaScript engine.
+ *
+ * The Initial Developer of the Original Code is
+ * Brendan Eich <brendan@mozilla.org>.
+ * Portions created by the Initial Developer are Copyright (C) 2004
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Tom Austin <taustin@ucsc.edu>
+ * Brendan Eich <brendan@mozilla.org>
+ * Shu-Yu Guo <shu@rfrn.org>
+ * Dave Herman <dherman@mozilla.com>
+ * Dimitris Vardoulakis <dimvar@ccs.neu.edu>
+ * Patrick Walton <pcwalton@mozilla.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+/*
+ * Narcissus - JS implemented in JS.
+ *
+ * Parser.
+ */
+
+define('ace/narcissus/jsparse', ['require', 'exports', 'module' , 'ace/narcissus/jslex', 'ace/narcissus/jsdefs'], function(require, exports, module) {
+
+ var lexer = require("./jslex");
+ var definitions = require("./jsdefs");
+
+ const StringMap = definitions.StringMap;
+ const Stack = definitions.Stack;
+
+ // Set constants in the local scope.
+ eval(definitions.consts);
+
+ // Banned statement types by language version.
+ const blackLists = { 160: {}, 185: {}, harmony: {} };
+ blackLists[160][IMPORT] = true;
+ blackLists[160][EXPORT] = true;
+ blackLists[160][LET] = true;
+ blackLists[160][MODULE] = true;
+ blackLists[160][YIELD] = true;
+ blackLists[185][IMPORT] = true;
+ blackLists[185][EXPORT] = true;
+ blackLists[185][MODULE] = true;
+ blackLists.harmony[WITH] = true;
+
+ /*
+ * pushDestructuringVarDecls :: (node, hoisting node) -> void
+ *
+ * Recursively add all destructured declarations to varDecls.
+ */
+ function pushDestructuringVarDecls(n, s) {
+ for (var i in n) {
+ var sub = n[i];
+ if (sub.type === IDENTIFIER) {
+ s.varDecls.push(sub);
+ } else {
+ pushDestructuringVarDecls(sub, s);
+ }
+ }
+ }
+
+ function StaticContext(parentScript, parentBlock, inModule, inFunction) {
+ this.parentScript = parentScript;
+ this.parentBlock = parentBlock || parentScript;
+ this.inModule = inModule || false;
+ this.inFunction = inFunction || false;
+ this.inForLoopInit = false;
+ this.topLevel = true;
+ this.allLabels = new Stack();
+ this.currentLabels = new Stack();
+ this.labeledTargets = new Stack();
+ this.defaultLoopTarget = null;
+ this.defaultTarget = null;
+ this.blackList = blackLists[Narcissus.options.version];
+ Narcissus.options.ecma3OnlyMode && (this.ecma3OnlyMode = true);
+ Narcissus.options.parenFreeMode && (this.parenFreeMode = true);
+ }
+
+ StaticContext.prototype = {
+ ecma3OnlyMode: false,
+ parenFreeMode: false,
+ // non-destructive update via prototype extension
+ update: function(ext) {
+ var desc = {};
+ for (var key in ext) {
+ desc[key] = {
+ value: ext[key],
+ writable: true,
+ enumerable: true,
+ configurable: true
+ }
+ }
+ return Object.create(this, desc);
+ },
+ pushLabel: function(label) {
+ return this.update({ currentLabels: this.currentLabels.push(label),
+ allLabels: this.allLabels.push(label) });
+ },
+ pushTarget: function(target) {
+ var isDefaultLoopTarget = target.isLoop;
+ var isDefaultTarget = isDefaultLoopTarget || target.type === SWITCH;
+
+ if (this.currentLabels.isEmpty()) {
+ if (isDefaultLoopTarget) this.update({ defaultLoopTarget: target });
+ if (isDefaultTarget) this.update({ defaultTarget: target });
+ return this;
+ }
+
+ target.labels = new StringMap();
+ this.currentLabels.forEach(function(label) {
+ target.labels.set(label, true);
+ });
+ return this.update({ currentLabels: new Stack(),
+ labeledTargets: this.labeledTargets.push(target),
+ defaultLoopTarget: isDefaultLoopTarget
+ ? target
+ : this.defaultLoopTarget,
+ defaultTarget: isDefaultTarget
+ ? target
+ : this.defaultTarget });
+ },
+ nest: function() {
+ return this.topLevel ? this.update({ topLevel: false }) : this;
+ },
+ allow: function(type) {
+ switch (type) {
+ case EXPORT:
+ if (!this.inModule || this.inFunction || !this.topLevel)
+ return false;
+ // FALL THROUGH
+
+ case IMPORT:
+ return !this.inFunction && this.topLevel;
+
+ case MODULE:
+ return !this.inFunction && this.topLevel;
+
+ default:
+ return true;
+ }
+ }
+ };
+
+ /*
+ * Script :: (tokenizer, boolean, boolean) -> node
+ *
+ * Parses the toplevel and module/function bodies.
+ */
+ function Script(t, inModule, inFunction) {
+ var n = new Node(t, scriptInit());
+ Statements(t, new StaticContext(n, n, inModule, inFunction), n);
+ return n;
+ }
+
+ // We extend Array slightly with a top-of-stack method.
+ definitions.defineProperty(Array.prototype, "top",
+ function() {
+ return this.length && this[this.length-1];
+ }, false, false, true);
+
+ /*
+ * Node :: (tokenizer, optional init object) -> node
+ */
+ function Node(t, init) {
+ var token = t.token;
+ if (token) {
+ // If init.type exists it will override token.type.
+ this.type = token.type;
+ this.value = token.value;
+ this.lineno = token.lineno;
+
+ // Start and end are file positions for error handling.
+ this.start = token.start;
+ this.end = token.end;
+ } else {
+ this.lineno = t.lineno;
+ }
+
+ // Node uses a tokenizer for debugging (getSource, filename getter).
+ this.tokenizer = t;
+ this.children = [];
+
+ for (var prop in init)
+ this[prop] = init[prop];
+ }
+
+ /*
+ * SyntheticNode :: (tokenizer, optional init object) -> node
+ */
+ function SyntheticNode(t, init) {
+ // print("SYNTHETIC NODE");
+ // if (init.type === COMMA) {
+ // print("SYNTHETIC COMMA");
+ // print(init);
+ // }
+ this.tokenizer = t;
+ this.children = [];
+ for (var prop in init)
+ this[prop] = init[prop];
+ this.synthetic = true;
+ }
+
+ var Np = Node.prototype = SyntheticNode.prototype = {};
+ Np.constructor = Node;
+
+ const TO_SOURCE_SKIP = {
+ type: true,
+ value: true,
+ lineno: true,
+ start: true,
+ end: true,
+ tokenizer: true,
+ assignOp: true
+ };
+ function unevalableConst(code) {
+ var token = definitions.tokens[code];
+ var constName = definitions.opTypeNames.hasOwnProperty(token)
+ ? definitions.opTypeNames[token]
+ : token in definitions.keywords
+ ? token.toUpperCase()
+ : token;
+ return { toSource: function() { return constName } };
+ }
+ Np.toSource = function toSource() {
+ var mock = {};
+ var self = this;
+ mock.type = unevalableConst(this.type);
+ if ("value" in this)
+ mock.value = this.value;
+ if ("lineno" in this)
+ mock.lineno = this.lineno;
+ if ("start" in this)
+ mock.start = this.start;
+ if ("end" in this)
+ mock.end = this.end;
+ if (this.assignOp)
+ mock.assignOp = unevalableConst(this.assignOp);
+ for (var key in this) {
+ if (this.hasOwnProperty(key) && !(key in TO_SOURCE_SKIP))
+ mock[key] = this[key];
+ }
+ return mock.toSource();
+ };
+
+ // Always use push to add operands to an expression, to update start and end.
+ Np.push = function (kid) {
+ // kid can be null e.g. [1, , 2].
+ if (kid !== null) {
+ if (kid.start < this.start)
+ this.start = kid.start;
+ if (this.end < kid.end)
+ this.end = kid.end;
+ }
+ return this.children.push(kid);
+ }
+
+ Node.indentLevel = 0;
+
+ function tokenString(tt) {
+ var t = definitions.tokens[tt];
+ return /^\W/.test(t) ? definitions.opTypeNames[t] : t.toUpperCase();
+ }
+
+ Np.toString = function () {
+ var a = [];
+ for (var i in this) {
+ if (this.hasOwnProperty(i) && i !== 'type' && i !== 'target')
+ a.push({id: i, value: this[i]});
+ }
+ a.sort(function (a,b) { return (a.id < b.id) ? -1 : 1; });
+ const INDENTATION = " ";
+ var n = ++Node.indentLevel;
+ var s = "{\n" + INDENTATION.repeat(n) + "type: " + tokenString(this.type);
+ for (i = 0; i < a.length; i++)
+ s += ",\n" + INDENTATION.repeat(n) + a[i].id + ": " + a[i].value;
+ n = --Node.indentLevel;
+ s += "\n" + INDENTATION.repeat(n) + "}";
+ return s;
+ }
+
+ Np.getSource = function () {
+ return this.tokenizer.source.slice(this.start, this.end);
+ };
+
+ /*
+ * Helper init objects for common nodes.
+ */
+
+ const LOOP_INIT = { isLoop: true };
+
+ function blockInit() {
+ return { type: BLOCK, varDecls: [] };
+ }
+
+ function scriptInit() {
+ return { type: SCRIPT,
+ funDecls: [],
+ varDecls: [],
+ modDefns: new StringMap(),
+ modAssns: new StringMap(),
+ modDecls: new StringMap(),
+ modLoads: new StringMap(),
+ impDecls: [],
+ expDecls: [],
+ exports: new StringMap(),
+ hasEmptyReturn: false,
+ hasReturnWithValue: false,
+ isGenerator: false };
+ }
+
+ definitions.defineGetter(Np, "filename",
+ function() {
+ return this.tokenizer.filename;
+ });
+
+ definitions.defineGetter(Np, "length",
+ function() {
+ throw new Error("Node.prototype.length is gone; " +
+ "use n.children.length instead");
+ });
+
+ definitions.defineProperty(String.prototype, "repeat",
+ function(n) {
+ var s = "", t = this + s;
+ while (--n >= 0)
+ s += t;
+ return s;
+ }, false, false, true);
+
+ function MaybeLeftParen(t, x) {
+ if (x.parenFreeMode)
+ return t.match(LEFT_PAREN) ? LEFT_PAREN : END;
+ return t.mustMatch(LEFT_PAREN).type;
+ }
+
+ function MaybeRightParen(t, p) {
+ if (p === LEFT_PAREN)
+ t.mustMatch(RIGHT_PAREN);
+ }
+
+ /*
+ * Statements :: (tokenizer, compiler context, node) -> void
+ *
+ * Parses a sequence of Statements.
+ */
+ function Statements(t, x, n) {
+ try {
+ while (!t.done && t.peek(true) !== RIGHT_CURLY)
+ n.push(Statement(t, x));
+ } catch (e) {
+ if (t.done)
+ t.unexpectedEOF = true;
+ throw e;
+ }
+ }
+
+ function Block(t, x) {
+ t.mustMatch(LEFT_CURLY);
+ var n = new Node(t, blockInit());
+ Statements(t, x.update({ parentBlock: n }).pushTarget(n), n);
+ t.mustMatch(RIGHT_CURLY);
+ return n;
+ }
+
+ const DECLARED_FORM = 0, EXPRESSED_FORM = 1, STATEMENT_FORM = 2;
+
+ /*
+ * Export :: (binding node, boolean) -> Export
+ *
+ * Static semantic representation of a module export.
+ */
+ function Export(node, isDefinition) {
+ this.node = node; // the AST node declaring this individual export
+ this.isDefinition = isDefinition; // is the node an 'export'-annotated definition?
+ this.resolved = null; // resolved pointer to the target of this export
+ }
+
+ /*
+ * registerExport :: (StringMap, EXPORT node) -> void
+ */
+ function registerExport(exports, decl) {
+ function register(name, exp) {
+ if (exports.has(name))
+ throw new SyntaxError("multiple exports of " + name);
+ exports.set(name, exp);
+ }
+
+ switch (decl.type) {
+ case MODULE:
+ case FUNCTION:
+ register(decl.name, new Export(decl, true));
+ break;
+
+ case VAR:
+ for (var i = 0; i < decl.children.length; i++)
+ register(decl.children[i].name, new Export(decl.children[i], true));
+ break;
+
+ case LET:
+ case CONST:
+ throw new Error("NYI: " + definitions.tokens[decl.type]);
+
+ case EXPORT:
+ for (var i = 0; i < decl.pathList.length; i++) {
+ var path = decl.pathList[i];
+ switch (path.type) {
+ case OBJECT_INIT:
+ for (var j = 0; j < path.children.length; j++) {
+ // init :: IDENTIFIER | PROPERTY_INIT
+ var init = path.children[j];
+ if (init.type === IDENTIFIER)
+ register(init.value, new Export(init, false));
+ else
+ register(init.children[0].value, new Export(init.children[1], false));
+ }
+ break;
+
+ case DOT:
+ register(path.children[1].value, new Export(path, false));
+ break;
+
+ case IDENTIFIER:
+ register(path.value, new Export(path, false));
+ break;
+
+ default:
+ throw new Error("unexpected export path: " + definitions.tokens[path.type]);
+ }
+ }
+ break;
+
+ default:
+ throw new Error("unexpected export decl: " + definitions.tokens[exp.type]);
+ }
+ }
+
+ /*
+ * Module :: (node) -> Module
+ *
+ * Static semantic representation of a module.
+ */
+ function Module(node) {
+ var exports = node.body.exports;
+ var modDefns = node.body.modDefns;
+
+ var exportedModules = new StringMap();
+
+ exports.forEach(function(name, exp) {
+ var node = exp.node;
+ if (node.type === MODULE) {
+ exportedModules.set(name, node);
+ } else if (!exp.isDefinition && node.type === IDENTIFIER && modDefns.has(node.value)) {
+ var mod = modDefns.get(node.value);
+ exportedModules.set(name, mod);
+ }
+ });
+
+ this.node = node;
+ this.exports = exports;
+ this.exportedModules = exportedModules;
+ }
+
+ /*
+ * Statement :: (tokenizer, compiler context) -> node
+ *
+ * Parses a Statement.
+ */
+ function Statement(t, x) {
+ var i, label, n, n2, p, c, ss, tt = t.get(true), tt2, x2, x3;
+
+ var comments = t.blockComments;
+
+ if (x.blackList[tt])
+ throw t.newSyntaxError(definitions.tokens[tt] + " statements only allowed in Harmony");
+ if (!x.allow(tt))
+ throw t.newSyntaxError(definitions.tokens[tt] + " statement in illegal context");
+
+ // Cases for statements ending in a right curly return early, avoiding the
+ // common semicolon insertion magic after this switch.
+ switch (tt) {
+ case IMPORT:
+ n = new Node(t);
+ n.pathList = ImportPathList(t, x);
+ x.parentScript.impDecls.push(n);
+ break;
+
+ case EXPORT:
+ switch (t.peek()) {
+ case MODULE:
+ case FUNCTION:
+ case LET:
+ case VAR:
+ case CONST:
+ n = Statement(t, x);
+ n.blockComments = comments;
+ n.exported = true;
+ x.parentScript.expDecls.push(n);
+ registerExport(x.parentScript.exports, n);
+ return n;
+
+ default:
+ n = new Node(t);
+ n.pathList = ExportPathList(t, x);
+ break;
+ }
+ x.parentScript.expDecls.push(n);
+ registerExport(x.parentScript.exports, n);
+ break;
+
+ case MODULE:
+ n = new Node(t);
+ n.blockComments = comments;
+ t.mustMatch(IDENTIFIER);
+ label = t.token.value;
+
+ if (t.match(LEFT_CURLY)) {
+ n.name = label;
+ n.body = Script(t, true, false);
+ n.module = new Module(n);
+ t.mustMatch(RIGHT_CURLY);
+ x.parentScript.modDefns.set(n.name, n);
+ return n;
+ }
+
+ t.unget();
+ ModuleVariables(t, x, n);
+ return n;
+
+ case FUNCTION:
+ // DECLARED_FORM extends funDecls of x, STATEMENT_FORM doesn't.
+ return FunctionDefinition(t, x, true, x.topLevel ? DECLARED_FORM : STATEMENT_FORM, comments);
+
+ case LEFT_CURLY:
+ n = new Node(t, blockInit());
+ Statements(t, x.update({ parentBlock: n }).pushTarget(n).nest(), n);
+ t.mustMatch(RIGHT_CURLY);
+ return n;
+
+ case IF:
+ n = new Node(t);
+ n.condition = HeadExpression(t, x);
+ x2 = x.pushTarget(n).nest();
+ n.thenPart = Statement(t, x2);
+ n.elsePart = t.match(ELSE, true) ? Statement(t, x2) : null;
+ return n;
+
+ case SWITCH:
+ // This allows CASEs after a DEFAULT, which is in the standard.
+ n = new Node(t, { cases: [], defaultIndex: -1 });
+ n.discriminant = HeadExpression(t, x);
+ x2 = x.pushTarget(n).nest();
+ t.mustMatch(LEFT_CURLY);
+ while ((tt = t.get()) !== RIGHT_CURLY) {
+ switch (tt) {
+ case DEFAULT:
+ if (n.defaultIndex >= 0)
+ throw t.newSyntaxError("More than one switch default");
+ // FALL THROUGH
+ case CASE:
+ n2 = new Node(t);
+ if (tt === DEFAULT)
+ n.defaultIndex = n.cases.length;
+ else
+ n2.caseLabel = Expression(t, x2, COLON);
+ break;
+
+ default:
+ throw t.newSyntaxError("Invalid switch case");
+ }
+ t.mustMatch(COLON);
+ n2.statements = new Node(t, blockInit());
+ while ((tt=t.peek(true)) !== CASE && tt !== DEFAULT &&
+ tt !== RIGHT_CURLY)
+ n2.statements.push(Statement(t, x2));
+ n.cases.push(n2);
+ }
+ return n;
+
+ case FOR:
+ n = new Node(t, LOOP_INIT);
+ n.blockComments = comments;
+ if (t.match(IDENTIFIER)) {
+ if (t.token.value === "each")
+ n.isEach = true;
+ else
+ t.unget();
+ }
+ if (!x.parenFreeMode)
+ t.mustMatch(LEFT_PAREN);
+ x2 = x.pushTarget(n).nest();
+ x3 = x.update({ inForLoopInit: true });
+ n2 = null;
+ if ((tt = t.peek(true)) !== SEMICOLON) {
+ if (tt === VAR || tt === CONST) {
+ t.get();
+ n2 = Variables(t, x3);
+ } else if (tt === LET) {
+ t.get();
+ if (t.peek() === LEFT_PAREN) {
+ n2 = LetBlock(t, x3, false);
+ } else {
+ // Let in for head, we need to add an implicit block
+ // around the rest of the for.
+ x3.parentBlock = n;
+ n.varDecls = [];
+ n2 = Variables(t, x3);
+ }
+ } else {
+ n2 = Expression(t, x3);
+ }
+ }
+ if (n2 && t.match(IN)) {
+ n.type = FOR_IN;
+ n.object = Expression(t, x3);
+ if (n2.type === VAR || n2.type === LET) {
+ c = n2.children;
+
+ // Destructuring turns one decl into multiples, so either
+ // there must be only one destructuring or only one
+ // decl.
+ if (c.length !== 1 && n2.destructurings.length !== 1) {
+ throw new SyntaxError("Invalid for..in left-hand side",
+ t.filename, n2.lineno);
+ }
+ if (n2.destructurings.length > 0) {
+ n.iterator = n2.destructurings[0];
+ } else {
+ n.iterator = c[0];
+ }
+ n.varDecl = n2;
+ } else {
+ if (n2.type === ARRAY_INIT || n2.type === OBJECT_INIT) {
+ n2.destructuredNames = checkDestructuring(t, x3, n2);
+ }
+ n.iterator = n2;
+ }
+ } else {
+ x3.inForLoopInit = false;
+ n.setup = n2;
+ t.mustMatch(SEMICOLON);
+ if (n.isEach)
+ throw t.newSyntaxError("Invalid for each..in loop");
+ n.condition = (t.peek(true) === SEMICOLON)
+ ? null
+ : Expression(t, x3);
+ t.mustMatch(SEMICOLON);
+ tt2 = t.peek(true);
+ n.update = (x.parenFreeMode
+ ? tt2 === LEFT_CURLY || definitions.isStatementStartCode[tt2]
+ : tt2 === RIGHT_PAREN)
+ ? null
+ : Expression(t, x3);
+ }
+ if (!x.parenFreeMode)
+ t.mustMatch(RIGHT_PAREN);
+ n.body = Statement(t, x2);
+ return n;
+
+ case WHILE:
+ n = new Node(t, { isLoop: true });
+ n.blockComments = comments;
+ n.condition = HeadExpression(t, x);
+ n.body = Statement(t, x.pushTarget(n).nest());
+ return n;
+
+ case DO:
+ n = new Node(t, { isLoop: true });
+ n.blockComments = comments;
+ n.body = Statement(t, x.pushTarget(n).nest());
+ t.mustMatch(WHILE);
+ n.condition = HeadExpression(t, x);
+ if (!x.ecmaStrictMode) {
+ // <script language="JavaScript"> (without version hints) may need
+ // automatic semicolon insertion without a newline after do-while.
+ // See http://bugzilla.mozilla.org/show_bug.cgi?id=238945.
+ t.match(SEMICOLON);
+ return n;
+ }
+ break;
+
+ case BREAK:
+ case CONTINUE:
+ n = new Node(t);
+ n.blockComments = comments;
+
+ // handle the |foo: break foo;| corner case
+ x2 = x.pushTarget(n);
+
+ if (t.peekOnSameLine() === IDENTIFIER) {
+ t.get();
+ n.label = t.token.value;
+ }
+
+ if (n.label) {
+ n.target = x2.labeledTargets.find(function(target) { return target.labels.has(n.label) });
+ } else if (tt === CONTINUE) {
+ n.target = x2.defaultLoopTarget;
+ } else {
+ n.target = x2.defaultTarget;
+ }
+
+ if (!n.target)
+ throw t.newSyntaxError("Invalid " + ((tt === BREAK) ? "break" : "continue"));
+ if (!n.target.isLoop && tt === CONTINUE)
+ throw t.newSyntaxError("Invalid continue");
+
+ break;
+
+ case TRY:
+ n = new Node(t, { catchClauses: [] });
+ n.blockComments = comments;
+ n.tryBlock = Block(t, x);
+ while (t.match(CATCH)) {
+ n2 = new Node(t);
+ p = MaybeLeftParen(t, x);
+ switch (t.get()) {
+ case LEFT_BRACKET:
+ case LEFT_CURLY:
+ // Destructured catch identifiers.
+ t.unget();
+ n2.varName = DestructuringExpression(t, x, true);
+ break;
+ case IDENTIFIER:
+ n2.varName = t.token.value;
+ break;
+ default:
+ throw t.newSyntaxError("missing identifier in catch");
+ break;
+ }
+ if (t.match(IF)) {
+ if (x.ecma3OnlyMode)
+ throw t.newSyntaxError("Illegal catch guard");
+ if (n.catchClauses.length && !n.catchClauses.top().guard)
+ throw t.newSyntaxError("Guarded catch after unguarded");
+ n2.guard = Expression(t, x);
+ }
+ MaybeRightParen(t, p);
+ n2.block = Block(t, x);
+ n.catchClauses.push(n2);
+ }
+ if (t.match(FINALLY))
+ n.finallyBlock = Block(t, x);
+ if (!n.catchClauses.length && !n.finallyBlock)
+ throw t.newSyntaxError("Invalid try statement");
+ return n;
+
+ case CATCH:
+ case FINALLY:
+ throw t.newSyntaxError(definitions.tokens[tt] + " without preceding try");
+
+ case THROW:
+ n = new Node(t);
+ n.exception = Expression(t, x);
+ break;
+
+ case RETURN:
+ n = ReturnOrYield(t, x);
+ break;
+
+ case WITH:
+ n = new Node(t);
+ n.blockComments = comments;
+ n.object = HeadExpression(t, x);
+ n.body = Statement(t, x.pushTarget(n).nest());
+ return n;
+
+ case VAR:
+ case CONST:
+ n = Variables(t, x);
+ break;
+
+ case LET:
+ if (t.peek() === LEFT_PAREN)
+ n = LetBlock(t, x, true);
+ else
+ n = Variables(t, x);
+ break;
+
+ case DEBUGGER:
+ n = new Node(t);
+ break;
+
+ case NEWLINE:
+ case SEMICOLON:
+ n = new Node(t, { type: SEMICOLON });
+ n.blockComments = comments;
+ n.expression = null;
+ return n;
+
+ default:
+ if (tt === IDENTIFIER) {
+ tt = t.peek();
+ // Labeled statement.
+ if (tt === COLON) {
+ label = t.token.value;
+ if (x.allLabels.has(label))
+ throw t.newSyntaxError("Duplicate label");
+ t.get();
+ n = new Node(t, { type: LABEL, label: label });
+ n.blockComments = comments;
+ n.statement = Statement(t, x.pushLabel(label).nest());
+ n.target = (n.statement.type === LABEL) ? n.statement.target : n.statement;
+ return n;
+ }
+ }
+
+ // Expression statement.
+ // We unget the current token to parse the expression as a whole.
+ n = new Node(t, { type: SEMICOLON });
+ t.unget();
+ n.blockComments = comments;
+ n.expression = Expression(t, x);
+ n.end = n.expression.end;
+ break;
+ }
+
+ n.blockComments = comments;
+ MagicalSemicolon(t);
+ return n;
+ }
+
+ /*
+ * MagicalSemicolon :: (tokenizer) -> void
+ */
+ function MagicalSemicolon(t) {
+ var tt;
+ if (t.lineno === t.token.lineno) {
+ tt = t.peekOnSameLine();
+ if (tt !== END && tt !== NEWLINE && tt !== SEMICOLON && tt !== RIGHT_CURLY)
+ throw t.newSyntaxError("missing ; before statement");
+ }
+ t.match(SEMICOLON);
+ }
+
+ /*
+ * ReturnOrYield :: (tokenizer, compiler context) -> (RETURN | YIELD) node
+ */
+ function ReturnOrYield(t, x) {
+ var n, b, tt = t.token.type, tt2;
+
+ var parentScript = x.parentScript;
+
+ if (tt === RETURN) {
+ if (!x.inFunction)
+ throw t.newSyntaxError("Return not in function");
+ } else /* if (tt === YIELD) */ {
+ if (!x.inFunction)
+ throw t.newSyntaxError("Yield not in function");
+ parentScript.isGenerator = true;
+ }
+ n = new Node(t, { value: undefined });
+
+ tt2 = (tt === RETURN) ? t.peekOnSameLine(true) : t.peek(true);
+ if (tt2 !== END && tt2 !== NEWLINE &&
+ tt2 !== SEMICOLON && tt2 !== RIGHT_CURLY
+ && (tt !== YIELD ||
+ (tt2 !== tt && tt2 !== RIGHT_BRACKET && tt2 !== RIGHT_PAREN &&
+ tt2 !== COLON && tt2 !== COMMA))) {
+ if (tt === RETURN) {
+ n.value = Expression(t, x);
+ parentScript.hasReturnWithValue = true;
+ } else {
+ n.value = AssignExpression(t, x);
+ }
+ } else if (tt === RETURN) {
+ parentScript.hasEmptyReturn = true;
+ }
+
+ // Disallow return v; in generator.
+ if (parentScript.hasReturnWithValue && parentScript.isGenerator)
+ throw t.newSyntaxError("Generator returns a value");
+
+ return n;
+ }
+
+ /*
+ * ModuleExpression :: (tokenizer, compiler context) -> (STRING | IDENTIFIER | DOT) node
+ */
+ function ModuleExpression(t, x) {
+ return t.match(STRING) ? new Node(t) : QualifiedPath(t, x);
+ }
+
+ /*
+ * ImportPathList :: (tokenizer, compiler context) -> Array[DOT node]
+ */
+ function ImportPathList(t, x) {
+ var a = [];
+ do {
+ a.push(ImportPath(t, x));
+ } while (t.match(COMMA));
+ return a;
+ }
+
+ /*
+ * ImportPath :: (tokenizer, compiler context) -> DOT node
+ */
+ function ImportPath(t, x) {
+ var n = QualifiedPath(t, x);
+ if (!t.match(DOT)) {
+ if (n.type === IDENTIFIER)
+ throw t.newSyntaxError("cannot import local variable");
+ return n;
+ }
+
+ var n2 = new Node(t);
+ n2.push(n);
+ n2.push(ImportSpecifierSet(t, x));
+ return n2;
+ }
+
+ /*
+ * ExplicitSpecifierSet :: (tokenizer, compiler context, (tokenizer, compiler context) -> node)
+ * -> OBJECT_INIT node
+ */
+ function ExplicitSpecifierSet(t, x, SpecifierRHS) {
+ var n, n2, id, tt;
+
+ n = new Node(t, { type: OBJECT_INIT });
+ t.mustMatch(LEFT_CURLY);
+
+ if (!t.match(RIGHT_CURLY)) {
+ do {
+ id = Identifier(t, x);
+ if (t.match(COLON)) {
+ n2 = new Node(t, { type: PROPERTY_INIT });
+ n2.push(id);
+ n2.push(SpecifierRHS(t, x));
+ n.push(n2);
+ } else {
+ n.push(id);
+ }
+ } while (!t.match(RIGHT_CURLY) && t.mustMatch(COMMA));
+ }
+
+ return n;
+ }
+
+ /*
+ * ImportSpecifierSet :: (tokenizer, compiler context) -> (IDENTIFIER | OBJECT_INIT) node
+ */
+ function ImportSpecifierSet(t, x) {
+ return t.match(MUL)
+ ? new Node(t, { type: IDENTIFIER, name: "*" })
+ : ExplicitSpecifierSet(t, x, Identifier);
+ }
+
+ /*
+ * Identifier :: (tokenizer, compiler context) -> IDENTIFIER node
+ */
+ function Identifier(t, x) {
+ t.mustMatch(IDENTIFIER);
+ return new Node(t, { type: IDENTIFIER });
+ }
+
+ /*
+ * IdentifierName :: (tokenizer) -> IDENTIFIER node
+ */
+ function IdentifierName(t) {
+ if (t.match(IDENTIFIER))
+ return new Node(t, { type: IDENTIFIER });
+ t.get();
+ if (t.token.value in definitions.keywords)
+ return new Node(t, { type: IDENTIFIER });
+ throw t.newSyntaxError("missing IdentifierName");
+ }
+
+ /*
+ * QualifiedPath :: (tokenizer, compiler context) -> (IDENTIFIER | DOT) node
+ */
+ function QualifiedPath(t, x) {
+ var n, n2;
+
+ n = Identifier(t, x);
+
+ while (t.match(DOT)) {
+ if (t.peek() !== IDENTIFIER) {
+ // Unget the '.' token, which isn't part of the QualifiedPath.
+ t.unget();
+ break;
+ }
+ n2 = new Node(t);
+ n2.push(n);
+ n2.push(Identifier(t, x));
+ n = n2;
+ }
+
+ return n;
+ }
+
+ /*
+ * ExportPath :: (tokenizer, compiler context) -> (IDENTIFIER | DOT | OBJECT_INIT) node
+ */
+ function ExportPath(t, x) {
+ if (t.peek() === LEFT_CURLY)
+ return ExplicitSpecifierSet(t, x, QualifiedPath);
+ return QualifiedPath(t, x);
+ }
+
+ /*
+ * ExportPathList :: (tokenizer, compiler context)
+ * -> Array[(IDENTIFIER | DOT | OBJECT_INIT) node]
+ */
+ function ExportPathList(t, x) {
+ var a = [];
+ do {
+ a.push(ExportPath(t, x));
+ } while (t.match(COMMA));
+ return a;
+ }
+
+ /*
+ * FunctionDefinition :: (tokenizer, compiler context, boolean,
+ * DECLARED_FORM or EXPRESSED_FORM or STATEMENT_FORM,
+ * [string] or null or undefined)
+ * -> node
+ */
+ function FunctionDefinition(t, x, requireName, functionForm, comments) {
+ var tt;
+ var f = new Node(t, { params: [], paramComments: [] });
+ if (typeof comment === "undefined")
+ comment = null;
+ f.blockComments = comments;
+ if (f.type !== FUNCTION)
+ f.type = (f.value === "get") ? GETTER : SETTER;
+ if (t.match(IDENTIFIER))
+ f.name = t.token.value;
+ else if (requireName)
+ throw t.newSyntaxError("missing function identifier");
+
+ var inModule = x ? x.inModule : false;
+ var x2 = new StaticContext(null, null, inModule, true);
+
+ t.mustMatch(LEFT_PAREN);
+ if (!t.match(RIGHT_PAREN)) {
+ do {
+ tt = t.get();
+ f.paramComments.push(t.lastBlockComment());
+ switch (tt) {
+ case LEFT_BRACKET:
+ case LEFT_CURLY:
+ // Destructured formal parameters.
+ t.unget();
+ f.params.push(DestructuringExpression(t, x2));
+ break;
+ case IDENTIFIER:
+ f.params.push(t.token.value);
+ break;
+ default:
+ throw t.newSyntaxError("missing formal parameter");
+ break;
+ }
+ } while (t.match(COMMA));
+ t.mustMatch(RIGHT_PAREN);
+ }
+
+ // Do we have an expression closure or a normal body?
+ tt = t.get();
+ if (tt !== LEFT_CURLY)
+ t.unget();
+
+ if (tt !== LEFT_CURLY) {
+ f.body = AssignExpression(t, x2);
+ if (f.body.isGenerator)
+ throw t.newSyntaxError("Generator returns a value");
+ } else {
+ f.body = Script(t, inModule, true);
+ }
+
+ if (tt === LEFT_CURLY)
+ t.mustMatch(RIGHT_CURLY);
+
+ f.end = t.token.end;
+ f.functionForm = functionForm;
+ if (functionForm === DECLARED_FORM)
+ x.parentScript.funDecls.push(f);
+ return f;
+ }
+
+ /*
+ * ModuleVariables :: (tokenizer, compiler context, MODULE node) -> void
+ *
+ * Parses a comma-separated list of module declarations (and maybe
+ * initializations).
+ */
+ function ModuleVariables(t, x, n) {
+ var n1, n2;
+ do {
+ n1 = Identifier(t, x);
+ if (t.match(ASSIGN)) {
+ n2 = ModuleExpression(t, x);
+ n1.initializer = n2;
+ if (n2.type === STRING)
+ x.parentScript.modLoads.set(n1.value, n2.value);
+ else
+ x.parentScript.modAssns.set(n1.value, n1);
+ }
+ n.push(n1);
+ } while (t.match(COMMA));
+ }
+
+ /*
+ * Variables :: (tokenizer, compiler context) -> node
+ *
+ * Parses a comma-separated list of var declarations (and maybe
+ * initializations).
+ */
+ function Variables(t, x, letBlock) {
+ var n, n2, ss, i, s, tt;
+
+ tt = t.token.type;
+ switch (tt) {
+ case VAR:
+ case CONST:
+ s = x.parentScript;
+ break;
+ case LET:
+ s = x.parentBlock;
+ break;
+ case LEFT_PAREN:
+ tt = LET;
+ s = letBlock;
+ break;
+ }
+
+ n = new Node(t, { type: tt, destructurings: [] });
+
+ do {
+ tt = t.get();
+ if (tt === LEFT_BRACKET || tt === LEFT_CURLY) {
+ // Need to unget to parse the full destructured expression.
+ t.unget();
+
+ var dexp = DestructuringExpression(t, x, true);
+
+ n2 = new Node(t, { type: IDENTIFIER,
+ name: dexp,
+ readOnly: n.type === CONST });
+ n.push(n2);
+ pushDestructuringVarDecls(n2.name.destructuredNames, s);
+ n.destructurings.push({ exp: dexp, decl: n2 });
+
+ if (x.inForLoopInit && t.peek() === IN) {
+ continue;
+ }
+
+ t.mustMatch(ASSIGN);
+ if (t.token.assignOp)
+ throw t.newSyntaxError("Invalid variable initialization");
+
+ n2.blockComment = t.lastBlockComment();
+ n2.initializer = AssignExpression(t, x);
+
+ continue;
+ }
+
+ if (tt !== IDENTIFIER)
+ throw t.newSyntaxError("missing variable name");
+
+ n2 = new Node(t, { type: IDENTIFIER,
+ name: t.token.value,
+ readOnly: n.type === CONST });
+ n.push(n2);
+ s.varDecls.push(n2);
+
+ if (t.match(ASSIGN)) {
+ var comment = t.lastBlockComment();
+ if (t.token.assignOp)
+ throw t.newSyntaxError("Invalid variable initialization");
+
+ n2.initializer = AssignExpression(t, x);
+ } else {
+ var comment = t.lastBlockComment();
+ }
+ n2.blockComment = comment;
+ } while (t.match(COMMA));
+
+ return n;
+ }
+
+ /*
+ * LetBlock :: (tokenizer, compiler context, boolean) -> node
+ *
+ * Does not handle let inside of for loop init.
+ */
+ function LetBlock(t, x, isStatement) {
+ var n, n2;
+
+ // t.token.type must be LET
+ n = new Node(t, { type: LET_BLOCK, varDecls: [] });
+ t.mustMatch(LEFT_PAREN);
+ n.variables = Variables(t, x, n);
+ t.mustMatch(RIGHT_PAREN);
+
+ if (isStatement && t.peek() !== LEFT_CURLY) {
+ /*
+ * If this is really an expression in let statement guise, then we
+ * need to wrap the LET_BLOCK node in a SEMICOLON node so that we pop
+ * the return value of the expression.
+ */
+ n2 = new Node(t, { type: SEMICOLON,
+ expression: n });
+ isStatement = false;
+ }
+
+ if (isStatement)
+ n.block = Block(t, x);
+ else
+ n.expression = AssignExpression(t, x);
+
+ return n;
+ }
+
+ function checkDestructuring(t, x, n, simpleNamesOnly) {
+ if (n.type === ARRAY_COMP)
+ throw t.newSyntaxError("Invalid array comprehension left-hand side");
+ if (n.type !== ARRAY_INIT && n.type !== OBJECT_INIT)
+ return;
+
+ var lhss = {};
+ var nn, n2, idx, sub, cc, c = n.children;
+ for (var i = 0, j = c.length; i < j; i++) {
+ if (!(nn = c[i]))
+ continue;
+ if (nn.type === PROPERTY_INIT) {
+ cc = nn.children;
+ sub = cc[1];
+ idx = cc[0].value;
+ } else if (n.type === OBJECT_INIT) {
+ // Do we have destructuring shorthand {foo, bar}?
+ sub = nn;
+ idx = nn.value;
+ } else {
+ sub = nn;
+ idx = i;
+ }
+
+ if (sub.type === ARRAY_INIT || sub.type === OBJECT_INIT) {
+ lhss[idx] = checkDestructuring(t, x, sub, simpleNamesOnly);
+ } else {
+ if (simpleNamesOnly && sub.type !== IDENTIFIER) {
+ // In declarations, lhs must be simple names
+ throw t.newSyntaxError("missing name in pattern");
+ }
+
+ lhss[idx] = sub;
+ }
+ }
+
+ return lhss;
+ }
+
+ function DestructuringExpression(t, x, simpleNamesOnly) {
+ var n = PrimaryExpression(t, x);
+ // Keep the list of lefthand sides for varDecls
+ n.destructuredNames = checkDestructuring(t, x, n, simpleNamesOnly);
+ return n;
+ }
+
+ function GeneratorExpression(t, x, e) {
+ return new Node(t, { type: GENERATOR,
+ expression: e,
+ tail: ComprehensionTail(t, x) });
+ }
+
+ function ComprehensionTail(t, x) {
+ var body, n, n2, n3, p;
+
+ // t.token.type must be FOR
+ body = new Node(t, { type: COMP_TAIL });
+
+ do {
+ // Comprehension tails are always for..in loops.
+ n = new Node(t, { type: FOR_IN, isLoop: true });
+ if (t.match(IDENTIFIER)) {
+ // But sometimes they're for each..in.
+ if (t.token.value === "each")
+ n.isEach = true;
+ else
+ t.unget();
+ }
+ p = MaybeLeftParen(t, x);
+ switch(t.get()) {
+ case LEFT_BRACKET:
+ case LEFT_CURLY:
+ t.unget();
+ // Destructured left side of for in comprehension tails.
+ n.iterator = DestructuringExpression(t, x);
+ break;
+
+ case IDENTIFIER:
+ n.iterator = n3 = new Node(t, { type: IDENTIFIER });
+ n3.name = n3.value;
+ n.varDecl = n2 = new Node(t, { type: VAR });
+ n2.push(n3);
+ x.parentScript.varDecls.push(n3);
+ // Don't add to varDecls since the semantics of comprehensions is
+ // such that the variables are in their own function when
+ // desugared.
+ break;
+
+ default:
+ throw t.newSyntaxError("missing identifier");
+ }
+ t.mustMatch(IN);
+ n.object = Expression(t, x);
+ MaybeRightParen(t, p);
+ body.push(n);
+ } while (t.match(FOR));
+
+ // Optional guard.
+ if (t.match(IF))
+ body.guard = HeadExpression(t, x);
+
+ return body;
+ }
+
+ function HeadExpression(t, x) {
+ var p = MaybeLeftParen(t, x);
+ var n = ParenExpression(t, x);
+ MaybeRightParen(t, p);
+ if (p === END && !n.parenthesized) {
+ var tt = t.peek();
+ if (tt !== LEFT_CURLY && !definitions.isStatementStartCode[tt])
+ throw t.newSyntaxError("Unparenthesized head followed by unbraced body");
+ }
+ return n;
+ }
+
+ function ParenExpression(t, x) {
+ // Always accept the 'in' operator in a parenthesized expression,
+ // where it's unambiguous, even if we might be parsing the init of a
+ // for statement.
+ var n = Expression(t, x.update({ inForLoopInit: x.inForLoopInit &&
+ (t.token.type === LEFT_PAREN) }));
+
+ if (t.match(FOR)) {
+ if (n.type === YIELD && !n.parenthesized)
+ throw t.newSyntaxError("Yield expression must be parenthesized");
+ if (n.type === COMMA && !n.parenthesized)
+ throw t.newSyntaxError("Generator expression must be parenthesized");
+ n = GeneratorExpression(t, x, n);
+ }
+
+ return n;
+ }
+
+ /*
+ * Expression :: (tokenizer, compiler context) -> node
+ *
+ * Top-down expression parser matched against SpiderMonkey.
+ */
+ function Expression(t, x) {
+ var n, n2;
+
+ n = AssignExpression(t, x);
+ if (t.match(COMMA)) {
+ n2 = new Node(t, { type: COMMA });
+ n2.push(n);
+ n = n2;
+ do {
+ n2 = n.children[n.children.length-1];
+ if (n2.type === YIELD && !n2.parenthesized)
+ throw t.newSyntaxError("Yield expression must be parenthesized");
+ n.push(AssignExpression(t, x));
+ } while (t.match(COMMA));
+ }
+
+ return n;
+ }
+
+ function AssignExpression(t, x) {
+ var n, lhs;
+
+ // Have to treat yield like an operand because it could be the leftmost
+ // operand of the expression.
+ if (t.match(YIELD, true))
+ return ReturnOrYield(t, x);
+
+ n = new Node(t, { type: ASSIGN });
+ lhs = ConditionalExpression(t, x);
+
+ if (!t.match(ASSIGN)) {
+ return lhs;
+ }
+
+ n.blockComment = t.lastBlockComment();
+
+ switch (lhs.type) {
+ case OBJECT_INIT:
+ case ARRAY_INIT:
+ lhs.destructuredNames = checkDestructuring(t, x, lhs);
+ // FALL THROUGH
+ case IDENTIFIER: case DOT: case INDEX: case CALL:
+ break;
+ default:
+ throw t.newSyntaxError("Bad left-hand side of assignment");
+ break;
+ }
+
+ n.assignOp = lhs.assignOp = t.token.assignOp;
+ n.push(lhs);
+ n.push(AssignExpression(t, x));
+
+ return n;
+ }
+
+ function ConditionalExpression(t, x) {
+ var n, n2;
+
+ n = OrExpression(t, x);
+ if (t.match(HOOK)) {
+ n2 = n;
+ n = new Node(t, { type: HOOK });
+ n.push(n2);
+ /*
+ * Always accept the 'in' operator in the middle clause of a ternary,
+ * where it's unambiguous, even if we might be parsing the init of a
+ * for statement.
+ */
+ n.push(AssignExpression(t, x.update({ inForLoopInit: false })));
+ if (!t.match(COLON))
+ throw t.newSyntaxError("missing : after ?");
+ n.push(AssignExpression(t, x));
+ }
+
+ return n;
+ }
+
+ function OrExpression(t, x) {
+ var n, n2;
+
+ n = AndExpression(t, x);
+ while (t.match(OR)) {
+ n2 = new Node(t);
+ n2.push(n);
+ n2.push(AndExpression(t, x));
+ n = n2;
+ }
+
+ return n;
+ }
+
+ function AndExpression(t, x) {
+ var n, n2;
+
+ n = BitwiseOrExpression(t, x);
+ while (t.match(AND)) {
+ n2 = new Node(t);
+ n2.push(n);
+ n2.push(BitwiseOrExpression(t, x));
+ n = n2;
+ }
+
+ return n;
+ }
+
+ function BitwiseOrExpression(t, x) {
+ var n, n2;
+
+ n = BitwiseXorExpression(t, x);
+ while (t.match(BITWISE_OR)) {
+ n2 = new Node(t);
+ n2.push(n);
+ n2.push(BitwiseXorExpression(t, x));
+ n = n2;
+ }
+
+ return n;
+ }
+
+ function BitwiseXorExpression(t, x) {
+ var n, n2;
+
+ n = BitwiseAndExpression(t, x);
+ while (t.match(BITWISE_XOR)) {
+ n2 = new Node(t);
+ n2.push(n);
+ n2.push(BitwiseAndExpression(t, x));
+ n = n2;
+ }
+
+ return n;
+ }
+
+ function BitwiseAndExpression(t, x) {
+ var n, n2;
+
+ n = EqualityExpression(t, x);
+ while (t.match(BITWISE_AND)) {
+ n2 = new Node(t);
+ n2.push(n);
+ n2.push(EqualityExpression(t, x));
+ n = n2;
+ }
+
+ return n;
+ }
+
+ function EqualityExpression(t, x) {
+ var n, n2;
+
+ n = RelationalExpression(t, x);
+ while (t.match(EQ) || t.match(NE) ||
+ t.match(STRICT_EQ) || t.match(STRICT_NE)) {
+ n2 = new Node(t);
+ n2.push(n);
+ n2.push(RelationalExpression(t, x));
+ n = n2;
+ }
+
+ return n;
+ }
+
+ function RelationalExpression(t, x) {
+ var n, n2;
+
+ /*
+ * Uses of the in operator in shiftExprs are always unambiguous,
+ * so unset the flag that prohibits recognizing it.
+ */
+ var x2 = x.update({ inForLoopInit: false });
+ n = ShiftExpression(t, x2);
+ while ((t.match(LT) || t.match(LE) || t.match(GE) || t.match(GT) ||
+ (!x.inForLoopInit && t.match(IN)) ||
+ t.match(INSTANCEOF))) {
+ n2 = new Node(t);
+ n2.push(n);
+ n2.push(ShiftExpression(t, x2));
+ n = n2;
+ }
+
+ return n;
+ }
+
+ function ShiftExpression(t, x) {
+ var n, n2;
+
+ n = AddExpression(t, x);
+ while (t.match(LSH) || t.match(RSH) || t.match(URSH)) {
+ n2 = new Node(t);
+ n2.push(n);
+ n2.push(AddExpression(t, x));
+ n = n2;
+ }
+
+ return n;
+ }
+
+ function AddExpression(t, x) {
+ var n, n2;
+
+ n = MultiplyExpression(t, x);
+ while (t.match(PLUS) || t.match(MINUS)) {
+ n2 = new Node(t);
+ n2.push(n);
+ n2.push(MultiplyExpression(t, x));
+ n = n2;
+ }
+
+ return n;
+ }
+
+ function MultiplyExpression(t, x) {
+ var n, n2;
+
+ n = UnaryExpression(t, x);
+ while (t.match(MUL) || t.match(DIV) || t.match(MOD)) {
+ n2 = new Node(t);
+ n2.push(n);
+ n2.push(UnaryExpression(t, x));
+ n = n2;
+ }
+
+ return n;
+ }
+
+ function UnaryExpression(t, x) {
+ var n, n2, tt;
+
+ switch (tt = t.get(true)) {
+ case DELETE: case VOID: case TYPEOF:
+ case NOT: case BITWISE_NOT: case PLUS: case MINUS:
+ if (tt === PLUS)
+ n = new Node(t, { type: UNARY_PLUS });
+ else if (tt === MINUS)
+ n = new Node(t, { type: UNARY_MINUS });
+ else
+ n = new Node(t);
+ n.push(UnaryExpression(t, x));
+ break;
+
+ case INCREMENT:
+ case DECREMENT:
+ // Prefix increment/decrement.
+ n = new Node(t);
+ n.push(MemberExpression(t, x, true));
+ break;
+
+ default:
+ t.unget();
+ n = MemberExpression(t, x, true);
+
+ // Don't look across a newline boundary for a postfix {in,de}crement.
+ if (t.tokens[(t.tokenIndex + t.lookahead - 1) & 3].lineno ===
+ t.lineno) {
+ if (t.match(INCREMENT) || t.match(DECREMENT)) {
+ n2 = new Node(t, { postfix: true });
+ n2.push(n);
+ n = n2;
+ }
+ }
+ break;
+ }
+
+ return n;
+ }
+
+ function MemberExpression(t, x, allowCallSyntax) {
+ var n, n2, name, tt;
+
+ if (t.match(NEW)) {
+ n = new Node(t);
+ n.push(MemberExpression(t, x, false));
+ if (t.match(LEFT_PAREN)) {
+ n.type = NEW_WITH_ARGS;
+ n.push(ArgumentList(t, x));
+ }
+ } else {
+ n = PrimaryExpression(t, x);
+ }
+
+ while ((tt = t.get()) !== END) {
+ switch (tt) {
+ case DOT:
+ n2 = new Node(t);
+ n2.push(n);
+ n2.push(IdentifierName(t));
+ break;
+
+ case LEFT_BRACKET:
+ n2 = new Node(t, { type: INDEX });
+ n2.push(n);
+ n2.push(Expression(t, x));
+ t.mustMatch(RIGHT_BRACKET);
+ break;
+
+ case LEFT_PAREN:
+ if (allowCallSyntax) {
+ n2 = new Node(t, { type: CALL });
+ n2.push(n);
+ n2.push(ArgumentList(t, x));
+ break;
+ }
+
+ // FALL THROUGH
+ default:
+ t.unget();
+ return n;
+ }
+
+ n = n2;
+ }
+
+ return n;
+ }
+
+ function ArgumentList(t, x) {
+ var n, n2;
+
+ n = new Node(t, { type: LIST });
+ if (t.match(RIGHT_PAREN, true))
+ return n;
+ do {
+ n2 = AssignExpression(t, x);
+ if (n2.type === YIELD && !n2.parenthesized && t.peek() === COMMA)
+ throw t.newSyntaxError("Yield expression must be parenthesized");
+ if (t.match(FOR)) {
+ n2 = GeneratorExpression(t, x, n2);
+ if (n.children.length > 1 || t.peek(true) === COMMA)
+ throw t.newSyntaxError("Generator expression must be parenthesized");
+ }
+ n.push(n2);
+ } while (t.match(COMMA));
+ t.mustMatch(RIGHT_PAREN);
+
+ return n;
+ }
+
+ function PrimaryExpression(t, x) {
+ var n, n2, tt = t.get(true);
+
+ switch (tt) {
+ case FUNCTION:
+ n = FunctionDefinition(t, x, false, EXPRESSED_FORM);
+ break;
+
+ case LEFT_BRACKET:
+ n = new Node(t, { type: ARRAY_INIT });
+ while ((tt = t.peek(true)) !== RIGHT_BRACKET) {
+ if (tt === COMMA) {
+ t.get();
+ n.push(null);
+ continue;
+ }
+ n.push(AssignExpression(t, x));
+ if (tt !== COMMA && !t.match(COMMA))
+ break;
+ }
+
+ // If we matched exactly one element and got a FOR, we have an
+ // array comprehension.
+ if (n.children.length === 1 && t.match(FOR)) {
+ n2 = new Node(t, { type: ARRAY_COMP,
+ expression: n.children[0],
+ tail: ComprehensionTail(t, x) });
+ n = n2;
+ }
+ t.mustMatch(RIGHT_BRACKET);
+ break;
+
+ case LEFT_CURLY:
+ var id, fd;
+ n = new Node(t, { type: OBJECT_INIT });
+
+ object_init:
+ if (!t.match(RIGHT_CURLY)) {
+ do {
+ tt = t.get();
+ if ((t.token.value === "get" || t.token.value === "set") &&
+ t.peek() === IDENTIFIER) {
+ if (x.ecma3OnlyMode)
+ throw t.newSyntaxError("Illegal property accessor");
+ n.push(FunctionDefinition(t, x, true, EXPRESSED_FORM));
+ } else {
+ var comments = t.blockComments;
+ switch (tt) {
+ case IDENTIFIER: case NUMBER: case STRING:
+ id = new Node(t, { type: IDENTIFIER });
+ break;
+ case RIGHT_CURLY:
+ if (x.ecma3OnlyMode)
+ throw t.newSyntaxError("Illegal trailing ,");
+ break object_init;
+ default:
+ if (t.token.value in definitions.keywords) {
+ id = new Node(t, { type: IDENTIFIER });
+ break;
+ }
+ throw t.newSyntaxError("Invalid property name");
+ }
+ if (t.match(COLON)) {
+ n2 = new Node(t, { type: PROPERTY_INIT });
+ n2.push(id);
+ n2.push(AssignExpression(t, x));
+ n2.blockComments = comments;
+ n.push(n2);
+ } else {
+ // Support, e.g., |var {x, y} = o| as destructuring shorthand
+ // for |var {x: x, y: y} = o|, per proposed JS2/ES4 for JS1.8.
+ if (t.peek() !== COMMA && t.peek() !== RIGHT_CURLY)
+ throw t.newSyntaxError("missing : after property");
+ n.push(id);
+ }
+ }
+ } while (t.match(COMMA));
+ t.mustMatch(RIGHT_CURLY);
+ }
+ break;
+
+ case LEFT_PAREN:
+ n = ParenExpression(t, x);
+ t.mustMatch(RIGHT_PAREN);
+ n.parenthesized = true;
+ break;
+
+ case LET:
+ n = LetBlock(t, x, false);
+ break;
+
+ case NULL: case THIS: case TRUE: case FALSE:
+ case IDENTIFIER: case NUMBER: case STRING: case REGEXP:
+ n = new Node(t);
+ break;
+
+ default:
+ throw t.newSyntaxError("missing operand");
+ break;
+ }
+
+ return n;
+ }
+
+ /*
+ * parse :: (source, filename, line number) -> node
+ */
+ function parse(s, f, l) {
+ var t = new lexer.Tokenizer(s, f, l);
+ var n = Script(t, false, false);
+ if (!t.done)
+ throw t.newSyntaxError("Syntax error");
+
+ return n;
+ }
+
+ /*
+ * parseStdin :: (source, {line number}, string, (string) -> boolean) -> program node
+ */
+ function parseStdin(s, ln, prefix, isCommand) {
+ // the special .begin command is only recognized at the beginning
+ if (s.match(/^[\s]*\.begin[\s]*$/)) {
+ ++ln.value;
+ return parseMultiline(ln, prefix);
+ }
+
+ // commands at the beginning are treated as the entire input
+ if (isCommand(s.trim()))
+ s = "";
+
+ for (;;) {
+ try {
+ var t = new lexer.Tokenizer(s, "stdin", ln.value);
+ var n = Script(t, false, false);
+ ln.value = t.lineno;
+ return n;
+ } catch (e) {
+ if (!t.unexpectedEOF)
+ throw e;
+
+ // commands in the middle are not treated as part of the input
+ var more;
+ do {
+ if (prefix)
+ putstr(prefix);
+ more = readline();
+ if (!more)
+ throw e;
+ } while (isCommand(more.trim()));
+
+ s += "\n" + more;
+ }
+ }
+ }
+
+ /*
+ * parseMultiline :: ({line number}, string | null) -> program node
+ */
+ function parseMultiline(ln, prefix) {
+ var s = "";
+ for (;;) {
+ if (prefix)
+ putstr(prefix);
+ var more = readline();
+ if (more === null)
+ return null;
+ // the only command recognized in multiline mode is .end
+ if (more.match(/^[\s]*\.end[\s]*$/))
+ break;
+ s += "\n" + more;
+ }
+ var t = new lexer.Tokenizer(s, "stdin", ln.value);
+ var n = Script(t, false, false);
+ ln.value = t.lineno;
+ return n;
+ }
+
+ module.exports = {
+ parse: parse,
+ parseStdin: parseStdin,
+ Node: Node,
+ SyntheticNode: SyntheticNode,
+ DECLARED_FORM: DECLARED_FORM,
+ EXPRESSED_FORM: EXPRESSED_FORM,
+ STATEMENT_FORM: STATEMENT_FORM,
+ Tokenizer: lexer.Tokenizer,
+ FunctionDefinition: FunctionDefinition,
+ Module: Module,
+ Export: Export
+ };
+
+});/* vim: set sw=4 ts=4 et tw=78: */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is the Narcissus JavaScript engine.
+ *
+ * The Initial Developer of the Original Code is
+ * Brendan Eich <brendan@mozilla.org>.
+ * Portions created by the Initial Developer are Copyright (C) 2004
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Tom Austin <taustin@ucsc.edu>
+ * Brendan Eich <brendan@mozilla.org>
+ * Shu-Yu Guo <shu@rfrn.org>
+ * Dave Herman <dherman@mozilla.com>
+ * Dimitris Vardoulakis <dimvar@ccs.neu.edu>
+ * Patrick Walton <pcwalton@mozilla.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+/*
+ * Narcissus - JS implemented in JS.
+ *
+ * Lexical scanner.
+ */
+
+ define('ace/narcissus/jslex', ['require', 'exports', 'module' , 'ace/narcissus/jsdefs'], function(require, exports, module) {
+
+ var definitions = require("./jsdefs");
+
+ // Set constants in the local scope.
+ eval(definitions.consts);
+
+ // Banned keywords by language version
+ const blackLists = { 160: {}, 185: {}, harmony: {} };
+ blackLists[160][LET] = true;
+ blackLists[160][MODULE] = true;
+ blackLists[160][YIELD] = true;
+ blackLists[185][MODULE] = true;
+
+ // Build up a trie of operator tokens.
+ var opTokens = {};
+ for (var op in definitions.opTypeNames) {
+ if (op === '\n' || op === '.')
+ continue;
+
+ var node = opTokens;
+ for (var i = 0; i < op.length; i++) {
+ var ch = op[i];
+ if (!(ch in node))
+ node[ch] = {};
+ node = node[ch];
+ node.op = op;
+ }
+ }
+
+ /*
+ * Tokenizer :: (source, filename, line number) -> Tokenizer
+ */
+ function Tokenizer(s, f, l) {
+ this.cursor = 0;
+ this.source = String(s);
+ this.tokens = [];
+ this.tokenIndex = 0;
+ this.lookahead = 0;
+ this.scanNewlines = false;
+ this.unexpectedEOF = false;
+ this.filename = f || "";
+ this.lineno = l || 1;
+ this.blackList = blackLists[Narcissus.options.version];
+ this.blockComments = null;
+ }
+
+ Tokenizer.prototype = {
+ get done() {
+ // We need to set scanOperand to true here because the first thing
+ // might be a regexp.
+ return this.peek(true) === END;
+ },
+
+ get token() {
+ return this.tokens[this.tokenIndex];
+ },
+
+ match: function (tt, scanOperand) {
+ return this.get(scanOperand) === tt || this.unget();
+ },
+
+ mustMatch: function (tt) {
+ if (!this.match(tt)) {
+ throw this.newSyntaxError("Missing " +
+ definitions.tokens[tt].toLowerCase());
+ }
+ return this.token;
+ },
+
+ peek: function (scanOperand) {
+ var tt, next;
+ if (this.lookahead) {
+ next = this.tokens[(this.tokenIndex + this.lookahead) & 3];
+ tt = (this.scanNewlines && next.lineno !== this.lineno)
+ ? NEWLINE
+ : next.type;
+ } else {
+ tt = this.get(scanOperand);
+ this.unget();
+ }
+ return tt;
+ },
+
+ peekOnSameLine: function (scanOperand) {
+ this.scanNewlines = true;
+ var tt = this.peek(scanOperand);
+ this.scanNewlines = false;
+ return tt;
+ },
+
+ lastBlockComment: function() {
+ var length = this.blockComments.length;
+ return length ? this.blockComments[length - 1] : null;
+ },
+
+ // Eat comments and whitespace.
+ skip: function () {
+ var input = this.source;
+ this.blockComments = [];
+ for (;;) {
+ var ch = input[this.cursor++];
+ var next = input[this.cursor];
+ // handle \r, \r\n and (always preferable) \n
+ if (ch === '\r') {
+ // if the next character is \n, we don't care about this at all
+ if (next === '\n') continue;
+
+ // otherwise, we want to consider this as a newline
+ ch = '\n';
+ }
+
+ if (ch === '\n' && !this.scanNewlines) {
+ this.lineno++;
+ } else if (ch === '/' && next === '*') {
+ var commentStart = ++this.cursor;
+ for (;;) {
+ ch = input[this.cursor++];
+ if (ch === undefined)
+ throw this.newSyntaxError("Unterminated comment");
+
+ if (ch === '*') {
+ next = input[this.cursor];
+ if (next === '/') {
+ var commentEnd = this.cursor - 1;
+ this.cursor++;
+ break;
+ }
+ } else if (ch === '\n') {
+ this.lineno++;
+ }
+ }
+ this.blockComments.push(input.substring(commentStart, commentEnd));
+ } else if (ch === '/' && next === '/') {
+ this.cursor++;
+ for (;;) {
+ ch = input[this.cursor++];
+ next = input[this.cursor];
+ if (ch === undefined)
+ return;
+
+ if (ch === '\r') {
+ // check for \r\n
+ if (next !== '\n') ch = '\n';
+ }
+
+ if (ch === '\n') {
+ if (this.scanNewlines) {
+ this.cursor--;
+ } else {
+ this.lineno++;
+ }
+ break;
+ }
+ }
+ } else if (!(ch in definitions.whitespace)) {
+ this.cursor--;
+ return;
+ }
+ }
+ },
+
+ // Lex the exponential part of a number, if present. Return true iff an
+ // exponential part was found.
+ lexExponent: function() {
+ var input = this.source;
+ var next = input[this.cursor];
+ if (next === 'e' || next === 'E') {
+ this.cursor++;
+ ch = input[this.cursor++];
+ if (ch === '+' || ch === '-')
+ ch = input[this.cursor++];
+
+ if (ch < '0' || ch > '9')
+ throw this.newSyntaxError("Missing exponent");
+
+ do {
+ ch = input[this.cursor++];
+ } while (ch >= '0' && ch <= '9');
+ this.cursor--;
+
+ return true;
+ }
+
+ return false;
+ },
+
+ lexZeroNumber: function (ch) {
+ var token = this.token, input = this.source;
+ token.type = NUMBER;
+
+ ch = input[this.cursor++];
+ if (ch === '.') {
+ do {
+ ch = input[this.cursor++];
+ } while (ch >= '0' && ch <= '9');
+ this.cursor--;
+
+ this.lexExponent();
+ token.value = parseFloat(token.start, this.cursor);
+ } else if (ch === 'x' || ch === 'X') {
+ do {
+ ch = input[this.cursor++];
+ } while ((ch >= '0' && ch <= '9') || (ch >= 'a' && ch <= 'f') ||
+ (ch >= 'A' && ch <= 'F'));
+ this.cursor--;
+
+ token.value = parseInt(input.substring(token.start, this.cursor));
+ } else if (ch >= '0' && ch <= '7') {
+ do {
+ ch = input[this.cursor++];
+ } while (ch >= '0' && ch <= '7');
+ this.cursor--;
+
+ token.value = parseInt(input.substring(token.start, this.cursor));
+ } else {
+ this.cursor--;
+ this.lexExponent(); // 0E1, &c.
+ token.value = 0;
+ }
+ },
+
+ lexNumber: function (ch) {
+ var token = this.token, input = this.source;
+ token.type = NUMBER;
+
+ var floating = false;
+ do {
+ ch = input[this.cursor++];
+ if (ch === '.' && !floating) {
+ floating = true;
+ ch = input[this.cursor++];
+ }
+ } while (ch >= '0' && ch <= '9');
+
+ this.cursor--;
+
+ var exponent = this.lexExponent();
+ floating = floating || exponent;
+
+ var str = input.substring(token.start, this.cursor);
+ token.value = floating ? parseFloat(str) : parseInt(str);
+ },
+
+ lexDot: function (ch) {
+ var token = this.token, input = this.source;
+ var next = input[this.cursor];
+ if (next >= '0' && next <= '9') {
+ do {
+ ch = input[this.cursor++];
+ } while (ch >= '0' && ch <= '9');
+ this.cursor--;
+
+ this.lexExponent();
+
+ token.type = NUMBER;
+ token.value = parseFloat(token.start, this.cursor);
+ } else {
+ token.type = DOT;
+ token.assignOp = null;
+ token.value = '.';
+ }
+ },
+
+ lexString: function (ch) {
+ var token = this.token, input = this.source;
+ token.type = STRING;
+
+ var hasEscapes = false;
+ var delim = ch;
+ if (input.length <= this.cursor)
+ throw this.newSyntaxError("Unterminated string literal");
+ while ((ch = input[this.cursor++]) !== delim) {
+ if (this.cursor == input.length)
+ throw this.newSyntaxError("Unterminated string literal");
+ if (ch === '\\') {
+ hasEscapes = true;
+ if (++this.cursor == input.length)
+ throw this.newSyntaxError("Unterminated string literal");
+ }
+ }
+
+ token.value = hasEscapes
+ ? eval(input.substring(token.start, this.cursor))
+ : input.substring(token.start + 1, this.cursor - 1);
+ },
+
+ lexRegExp: function (ch) {
+ var token = this.token, input = this.source;
+ token.type = REGEXP;
+
+ do {
+ ch = input[this.cursor++];
+ if (ch === '\\') {
+ this.cursor++;
+ } else if (ch === '[') {
+ do {
+ if (ch === undefined)
+ throw this.newSyntaxError("Unterminated character class");
+
+ if (ch === '\\')
+ this.cursor++;
+
+ ch = input[this.cursor++];
+ } while (ch !== ']');
+ } else if (ch === undefined) {
+ throw this.newSyntaxError("Unterminated regex");
+ }
+ } while (ch !== '/');
+
+ do {
+ ch = input[this.cursor++];
+ } while (ch >= 'a' && ch <= 'z');
+
+ this.cursor--;
+
+ token.value = eval(input.substring(token.start, this.cursor));
+ },
+
+ lexOp: function (ch) {
+ var token = this.token, input = this.source;
+
+ // A bit ugly, but it seems wasteful to write a trie lookup routine
+ // for only 3 characters...
+ var node = opTokens[ch];
+ var next = input[this.cursor];
+ if (next in node) {
+ node = node[next];
+ this.cursor++;
+ next = input[this.cursor];
+ if (next in node) {
+ node = node[next];
+ this.cursor++;
+ next = input[this.cursor];
+ }
+ }
+
+ var op = node.op;
+ if (definitions.assignOps[op] && input[this.cursor] === '=') {
+ this.cursor++;
+ token.type = ASSIGN;
+ token.assignOp = definitions.tokenIds[definitions.opTypeNames[op]];
+ op += '=';
+ } else {
+ token.type = definitions.tokenIds[definitions.opTypeNames[op]];
+ token.assignOp = null;
+ }
+
+ token.value = op;
+ },
+
+ // FIXME: Unicode escape sequences
+ lexIdent: function (ch) {
+ var token = this.token;
+ var id = ch;
+
+ while ((ch = this.getValidIdentifierChar(false)) !== null) {
+ id += ch;
+ }
+
+ token.type = definitions.keywords[id] || IDENTIFIER;
+ if (token.type in this.blackList) {
+ // banned keyword, this is an identifier
+ token.type = IDENTIFIER;
+ }
+ token.value = id;
+ },
+
+ /*
+ * Tokenizer.get :: void -> token type
+ *
+ * Consume input *only* if there is no lookahead.
+ * Dispatch to the appropriate lexing function depending on the input.
+ */
+ get: function (scanOperand) {
+ var token;
+ while (this.lookahead) {
+ --this.lookahead;
+ this.tokenIndex = (this.tokenIndex + 1) & 3;
+ token = this.tokens[this.tokenIndex];
+ if (token.type !== NEWLINE || this.scanNewlines)
+ return token.type;
+ }
+
+ this.skip();
+
+ this.tokenIndex = (this.tokenIndex + 1) & 3;
+ token = this.tokens[this.tokenIndex];
+ if (!token)
+ this.tokens[this.tokenIndex] = token = {};
+
+ var input = this.source;
+ if (this.cursor >= input.length)
+ return token.type = END;
+
+ token.start = this.cursor;
+ token.lineno = this.lineno;
+
+ var ich = this.getValidIdentifierChar(true);
+ var ch = (ich === null) ? input[this.cursor++] : null;
+ if (ich !== null) {
+ this.lexIdent(ich);
+ } else if (scanOperand && ch === '/') {
+ this.lexRegExp(ch);
+ } else if (ch in opTokens) {
+ this.lexOp(ch);
+ } else if (ch === '.') {
+ this.lexDot(ch);
+ } else if (ch >= '1' && ch <= '9') {
+ this.lexNumber(ch);
+ } else if (ch === '0') {
+ this.lexZeroNumber(ch);
+ } else if (ch === '"' || ch === "'") {
+ this.lexString(ch);
+ } else if (this.scanNewlines && (ch === '\n' || ch === '\r')) {
+ // if this was a \r, look for \r\n
+ if (ch === '\r' && input[this.cursor] === '\n') this.cursor++;
+ token.type = NEWLINE;
+ token.value = '\n';
+ this.lineno++;
+ } else {
+ throw this.newSyntaxError("Illegal token");
+ }
+
+ token.end = this.cursor;
+ return token.type;
+ },
+
+ /*
+ * Tokenizer.unget :: void -> undefined
+ *
+ * Match depends on unget returning undefined.
+ */
+ unget: function () {
+ if (++this.lookahead === 4) throw "PANIC: too much lookahead!";
+ this.tokenIndex = (this.tokenIndex - 1) & 3;
+ },
+
+ newSyntaxError: function (m) {
+ m = (this.filename ? this.filename + ":" : "") + this.lineno + ": " + m;
+ var e = new SyntaxError(m, this.filename, this.lineno);
+ e.source = this.source;
+ e.cursor = this.lookahead
+ ? this.tokens[(this.tokenIndex + this.lookahead) & 3].start
+ : this.cursor;
+ return e;
+ },
+
+ /* Gets a single valid identifier char from the input stream, or null
+ * if there is none.
+ * Since JavaScript provides no convenient way to determine if a
+ * character is in a particular Unicode category, we use
+ * metacircularity to accomplish this (oh yeaaaah!) */
+ getValidIdentifierChar: function(first) {
+ var input = this.source;
+ if (this.cursor >= input.length) return null;
+ var ch = input[this.cursor];
+
+ // first check for \u escapes
+ if (ch === '\\' && input[this.cursor+1] === 'u') {
+ // get the character value
+ try {
+ ch = String.fromCharCode(parseInt(
+ input.substring(this.cursor + 2, this.cursor + 6),
+ 16));
+ } catch (ex) {
+ return null;
+ }
+ this.cursor += 5;
+ }
+
+ // check directly for ASCII
+ if (ch <= "\u007F") {
+ if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || ch === '$' || ch === '_' ||
+ (!first && (ch >= '0' && ch <= '9'))) {
+ this.cursor++;
+ return ch;
+ }
+ return null;
+ }
+
+ // create an object to test this in
+ var x = {};
+ x["x"+ch] = true;
+ x[ch] = true;
+
+ // then use eval to determine if it's a valid character
+ var valid = false;
+ try {
+ valid = (Function("x", "return (x." + (first?"":"x") + ch + ");")(x) === true);
+ } catch (ex) {}
+ if (valid) this.cursor++;
+ return (valid ? ch : null);
+ },
+ };
+
+
+ module.exports = { Tokenizer: Tokenizer };
+
+});
+/* vim: set sw=4 ts=4 et tw=78: */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is the Narcissus JavaScript engine.
+ *
+ * The Initial Developer of the Original Code is
+ * Brendan Eich <brendan@mozilla.org>.
+ * Portions created by the Initial Developer are Copyright (C) 2004
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Tom Austin <taustin@ucsc.edu>
+ * Brendan Eich <brendan@mozilla.org>
+ * Shu-Yu Guo <shu@rfrn.org>
+ * Dave Herman <dherman@mozilla.com>
+ * Dimitris Vardoulakis <dimvar@ccs.neu.edu>
+ * Patrick Walton <pcwalton@mozilla.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+/*
+ * Narcissus - JS implemented in JS.
+ *
+ * Well-known constants and lookup tables. Many consts are generated from the
+ * tokens table via eval to minimize redundancy, so consumers must be compiled
+ * separately to take advantage of the simple switch-case constant propagation
+ * done by SpiderMonkey.
+ */
+
+define('ace/narcissus/jsdefs', ['require', 'exports', 'module' ], function(require, exports, module) {
+
+ var narcissus = {
+ options: {
+ version: 185,
+ // Global variables to hide from the interpreter
+ hiddenHostGlobals: { Narcissus: true },
+ // Desugar SpiderMonkey language extensions?
+ desugarExtensions: false
+ },
+ hostSupportsEvalConst: (function() {
+ try {
+ return eval("(function(s) { eval(s); return x })('const x = true;')");
+ } catch (e) {
+ return false;
+ }
+ })(),
+ hostGlobal: this
+ };
+ Narcissus = narcissus;
+
+ var tokens = [
+ // End of source.
+ "END",
+
+ // Operators and punctuators. Some pair-wise order matters, e.g. (+, -)
+ // and (UNARY_PLUS, UNARY_MINUS).
+ "\n", ";",
+ ",",
+ "=",
+ "?", ":", "CONDITIONAL",
+ "||",
+ "&&",
+ "|",
+ "^",
+ "&",
+ "==", "!=", "===", "!==",
+ "<", "<=", ">=", ">",
+ "<<", ">>", ">>>",
+ "+", "-",
+ "*", "/", "%",
+ "!", "~", "UNARY_PLUS", "UNARY_MINUS",
+ "++", "--",
+ ".",
+ "[", "]",
+ "{", "}",
+ "(", ")",
+
+ // Nonterminal tree node type codes.
+ "SCRIPT", "BLOCK", "LABEL", "FOR_IN", "CALL", "NEW_WITH_ARGS", "INDEX",
+ "ARRAY_INIT", "OBJECT_INIT", "PROPERTY_INIT", "GETTER", "SETTER",
+ "GROUP", "LIST", "LET_BLOCK", "ARRAY_COMP", "GENERATOR", "COMP_TAIL",
+
+ // Terminals.
+ "IDENTIFIER", "NUMBER", "STRING", "REGEXP",
+
+ // Keywords.
+ "break",
+ "case", "catch", "const", "continue",
+ "debugger", "default", "delete", "do",
+ "else", "export",
+ "false", "finally", "for", "function",
+ "if", "import", "in", "instanceof",
+ "let", "module",
+ "new", "null",
+ "return",
+ "switch",
+ "this", "throw", "true", "try", "typeof",
+ "var", "void",
+ "yield",
+ "while", "with",
+ ];
+
+ var statementStartTokens = [
+ "break",
+ "const", "continue",
+ "debugger", "do",
+ "for",
+ "if",
+ "return",
+ "switch",
+ "throw", "try",
+ "var",
+ "yield",
+ "while", "with",
+ ];
+
+ // Whitespace characters (see ECMA-262 7.2)
+ var whitespaceChars = [
+ // normal whitespace:
+ "\u0009", "\u000B", "\u000C", "\u0020", "\u00A0", "\uFEFF",
+
+ // high-Unicode whitespace:
+ "\u1680", "\u180E",
+ "\u2000", "\u2001", "\u2002", "\u2003", "\u2004", "\u2005", "\u2006",
+ "\u2007", "\u2008", "\u2009", "\u200A",
+ "\u202F", "\u205F", "\u3000"
+ ];
+
+ var whitespace = {};
+ for (var i = 0; i < whitespaceChars.length; i++) {
+ whitespace[whitespaceChars[i]] = true;
+ }
+
+ // Operator and punctuator mapping from token to tree node type name.
+ // NB: because the lexer doesn't backtrack, all token prefixes must themselves
+ // be valid tokens (e.g. !== is acceptable because its prefixes are the valid
+ // tokens != and !).
+ var opTypeNames = {
+ '\n': "NEWLINE",
+ ';': "SEMICOLON",
+ ',': "COMMA",
+ '?': "HOOK",
+ ':': "COLON",
+ '||': "OR",
+ '&&': "AND",
+ '|': "BITWISE_OR",
+ '^': "BITWISE_XOR",
+ '&': "BITWISE_AND",
+ '===': "STRICT_EQ",
+ '==': "EQ",
+ '=': "ASSIGN",
+ '!==': "STRICT_NE",
+ '!=': "NE",
+ '<<': "LSH",
+ '<=': "LE",
+ '<': "LT",
+ '>>>': "URSH",
+ '>>': "RSH",
+ '>=': "GE",
+ '>': "GT",
+ '++': "INCREMENT",
+ '--': "DECREMENT",
+ '+': "PLUS",
+ '-': "MINUS",
+ '*': "MUL",
+ '/': "DIV",
+ '%': "MOD",
+ '!': "NOT",
+ '~': "BITWISE_NOT",
+ '.': "DOT",
+ '[': "LEFT_BRACKET",
+ ']': "RIGHT_BRACKET",
+ '{': "LEFT_CURLY",
+ '}': "RIGHT_CURLY",
+ '(': "LEFT_PAREN",
+ ')': "RIGHT_PAREN"
+ };
+
+ // Hash of keyword identifier to tokens index. NB: we must null __proto__ to
+ // avoid toString, etc. namespace pollution.
+ var keywords = {__proto__: null};
+
+ // Define const END, etc., based on the token names. Also map name to index.
+ var tokenIds = {};
+
+ // Building up a string to be eval'd in different contexts.
+ var consts = Narcissus.hostSupportsEvalConst ? "const " : "var ";
+ for (var i = 0, j = tokens.length; i < j; i++) {
+ if (i > 0)
+ consts += ", ";
+ var t = tokens[i];
+ var name;
+ if (/^[a-z]/.test(t)) {
+ name = t.toUpperCase();
+ keywords[t] = i;
+ } else {
+ name = (/^\W/.test(t) ? opTypeNames[t] : t);
+ }
+ consts += name + " = " + i;
+ tokenIds[name] = i;
+ tokens[t] = i;
+ }
+ consts += ";";
+
+ var isStatementStartCode = {__proto__: null};
+ for (i = 0, j = statementStartTokens.length; i < j; i++)
+ isStatementStartCode[keywords[statementStartTokens[i]]] = true;
+
+ // Map assignment operators to their indexes in the tokens array.
+ var assignOps = ['|', '^', '&', '<<', '>>', '>>>', '+', '-', '*', '/', '%'];
+
+ for (i = 0, j = assignOps.length; i < j; i++) {
+ t = assignOps[i];
+ assignOps[t] = tokens[t];
+ }
+
+ function defineGetter(obj, prop, fn, dontDelete, dontEnum) {
+ Object.defineProperty(obj, prop,
+ { get: fn, configurable: !dontDelete, enumerable: !dontEnum });
+ }
+
+ function defineGetterSetter(obj, prop, getter, setter, dontDelete, dontEnum) {
+ Object.defineProperty(obj, prop, {
+ get: getter,
+ set: setter,
+ configurable: !dontDelete,
+ enumerable: !dontEnum
+ });
+ }
+
+ function defineMemoGetter(obj, prop, fn, dontDelete, dontEnum) {
+ Object.defineProperty(obj, prop, {
+ get: function() {
+ var val = fn();
+ defineProperty(obj, prop, val, dontDelete, true, dontEnum);
+ return val;
+ },
+ configurable: true,
+ enumerable: !dontEnum
+ });
+ }
+
+ function defineProperty(obj, prop, val, dontDelete, readOnly, dontEnum) {
+ Object.defineProperty(obj, prop,
+ { value: val, writable: !readOnly, configurable: !dontDelete,
+ enumerable: !dontEnum });
+ }
+
+ // Returns true if fn is a native function. (Note: SpiderMonkey specific.)
+ function isNativeCode(fn) {
+ // Relies on the toString method to identify native code.
+ return ((typeof fn) === "function") && fn.toString().match(/\[native code\]/);
+ }
+
+ function getPropertyDescriptor(obj, name) {
+ while (obj) {
+ if (({}).hasOwnProperty.call(obj, name))
+ return Object.getOwnPropertyDescriptor(obj, name);
+ obj = Object.getPrototypeOf(obj);
+ }
+ }
+
+ function getPropertyNames(obj) {
+ var table = Object.create(null, {});
+ while (obj) {
+ var names = Object.getOwnPropertyNames(obj);
+ for (var i = 0, n = names.length; i < n; i++)
+ table[names[i]] = true;
+ obj = Object.getPrototypeOf(obj);
+ }
+ return Object.keys(table);
+ }
+
+ function getOwnProperties(obj) {
+ var map = {};
+ for (var name in Object.getOwnPropertyNames(obj))
+ map[name] = Object.getOwnPropertyDescriptor(obj, name);
+ return map;
+ }
+
+ function blacklistHandler(target, blacklist) {
+ var mask = Object.create(null, {});
+ var redirect = StringMap.create(blacklist).mapObject(function(name) { return mask; });
+ return mixinHandler(redirect, target);
+ }
+
+ function whitelistHandler(target, whitelist) {
+ var catchall = Object.create(null, {});
+ var redirect = StringMap.create(whitelist).mapObject(function(name) { return target; });
+ return mixinHandler(redirect, catchall);
+ }
+
+ function mirrorHandler(target, writable) {
+ var handler = makePassthruHandler(target);
+
+ var defineProperty = handler.defineProperty;
+ handler.defineProperty = function(name, desc) {
+ if (!desc.enumerable)
+ throw new Error("mirror property must be enumerable");
+ if (!desc.configurable)
+ throw new Error("mirror property must be configurable");
+ if (desc.writable !== writable)
+ throw new Error("mirror property must " + (writable ? "" : "not ") + "be writable");
+ defineProperty(name, desc);
+ };
+
+ handler.fix = function() { };
+ handler.getOwnPropertyDescriptor = handler.getPropertyDescriptor;
+ handler.getOwnPropertyNames = getPropertyNames.bind(handler, target);
+ handler.keys = handler.enumerate;
+ handler["delete"] = function() { return false; };
+ handler.hasOwn = handler.has;
+ return handler;
+ }
+
+ /*
+ * Mixin proxies break the single-inheritance model of prototypes, so
+ * the handler treats all properties as own-properties:
+ *
+ * X
+ * |
+ * +------------+------------+
+ * | O |
+ * | | |
+ * | O O O |
+ * | | | | |
+ * | O O O O |
+ * | | | | | |
+ * | O O O O O |
+ * | | | | | | |
+ * +-(*)--(w)--(x)--(y)--(z)-+
+ */
+
+ function mixinHandler(redirect, catchall) {
+ function targetFor(name) {
+ return hasOwn(redirect, name) ? redirect[name] : catchall;
+ }
+
+ function getMuxPropertyDescriptor(name) {
+ var desc = getPropertyDescriptor(targetFor(name), name);
+ if (desc)
+ desc.configurable = true;
+ return desc;
+ }
+
+ function getMuxPropertyNames() {
+ var names1 = Object.getOwnPropertyNames(redirect).filter(function(name) {
+ return name in redirect[name];
+ });
+ var names2 = getPropertyNames(catchall).filter(function(name) {
+ return !hasOwn(redirect, name);
+ });
+ return names1.concat(names2);
+ }
+
+ function enumerateMux() {
+ var result = Object.getOwnPropertyNames(redirect).filter(function(name) {
+ return name in redirect[name];
+ });
+ for (name in catchall) {
+ if (!hasOwn(redirect, name))
+ result.push(name);
+ };
+ return result;
+ }
+
+ function hasMux(name) {
+ return name in targetFor(name);
+ }
+
+ return {
+ getOwnPropertyDescriptor: getMuxPropertyDescriptor,
+ getPropertyDescriptor: getMuxPropertyDescriptor,
+ getOwnPropertyNames: getMuxPropertyNames,
+ defineProperty: function(name, desc) {
+ Object.defineProperty(targetFor(name), name, desc);
+ },
+ "delete": function(name) {
+ var target = targetFor(name);
+ return delete target[name];
+ },
+ // FIXME: ha ha ha
+ fix: function() { },
+ has: hasMux,
+ hasOwn: hasMux,
+ get: function(receiver, name) {
+ var target = targetFor(name);
+ return target[name];
+ },
+ set: function(receiver, name, val) {
+ var target = targetFor(name);
+ target[name] = val;
+ return true;
+ },
+ enumerate: enumerateMux,
+ keys: enumerateMux
+ };
+ }
+
+ function makePassthruHandler(obj) {
+ // Handler copied from
+ // http://wiki.ecmascript.org/doku.php?id=harmony:proxies&s=proxy%20object#examplea_no-op_forwarding_proxy
+ return {
+ getOwnPropertyDescriptor: function(name) {
+ var desc = Object.getOwnPropertyDescriptor(obj, name);
+
+ // a trapping proxy's properties must always be configurable
+ desc.configurable = true;
+ return desc;
+ },
+ getPropertyDescriptor: function(name) {
+ var desc = getPropertyDescriptor(obj, name);
+
+ // a trapping proxy's properties must always be configurable
+ desc.configurable = true;
+ return desc;
+ },
+ getOwnPropertyNames: function() {
+ return Object.getOwnPropertyNames(obj);
+ },
+ defineProperty: function(name, desc) {
+ Object.defineProperty(obj, name, desc);
+ },
+ "delete": function(name) { return delete obj[name]; },
+ fix: function() {
+ if (Object.isFrozen(obj)) {
+ return getOwnProperties(obj);
+ }
+
+ // As long as obj is not frozen, the proxy won't allow itself to be fixed.
+ return undefined; // will cause a TypeError to be thrown
+ },
+
+ has: function(name) { return name in obj; },
+ hasOwn: function(name) { return ({}).hasOwnProperty.call(obj, name); },
+ get: function(receiver, name) { return obj[name]; },
+
+ // bad behavior when set fails in non-strict mode
+ set: function(receiver, name, val) { obj[name] = val; return true; },
+ enumerate: function() {
+ var result = [];
+ for (name in obj) { result.push(name); };
+ return result;
+ },
+ keys: function() { return Object.keys(obj); }
+ };
+ }
+
+ var hasOwnProperty = ({}).hasOwnProperty;
+
+ function hasOwn(obj, name) {
+ return hasOwnProperty.call(obj, name);
+ }
+
+ function StringMap(table, size) {
+ this.table = table || Object.create(null, {});
+ this.size = size || 0;
+ }
+
+ StringMap.create = function(table) {
+ var init = Object.create(null, {});
+ var size = 0;
+ var names = Object.getOwnPropertyNames(table);
+ for (var i = 0, n = names.length; i < n; i++) {
+ var name = names[i];
+ init[name] = table[name];
+ size++;
+ }
+ return new StringMap(init, size);
+ };
+
+ StringMap.prototype = {
+ has: function(x) { return hasOwnProperty.call(this.table, x); },
+ set: function(x, v) {
+ if (!hasOwnProperty.call(this.table, x))
+ this.size++;
+ this.table[x] = v;
+ },
+ get: function(x) { return this.table[x]; },
+ getDef: function(x, thunk) {
+ if (!hasOwnProperty.call(this.table, x)) {
+ this.size++;
+ this.table[x] = thunk();
+ }
+ return this.table[x];
+ },
+ forEach: function(f) {
+ var table = this.table;
+ for (var key in table)
+ f.call(this, key, table[key]);
+ },
+ map: function(f) {
+ var table1 = this.table;
+ var table2 = Object.create(null, {});
+ this.forEach(function(key, val) {
+ table2[key] = f.call(this, val, key);
+ });
+ return new StringMap(table2, this.size);
+ },
+ mapObject: function(f) {
+ var table1 = this.table;
+ var table2 = Object.create(null, {});
+ this.forEach(function(key, val) {
+ table2[key] = f.call(this, val, key);
+ });
+ return table2;
+ },
+ toObject: function() {
+ return this.mapObject(function(val) { return val; });
+ },
+ choose: function() {
+ return Object.getOwnPropertyNames(this.table)[0];
+ },
+ remove: function(x) {
+ if (hasOwnProperty.call(this.table, x)) {
+ this.size--;
+ delete this.table[x];
+ }
+ },
+ copy: function() {
+ var table = Object.create(null, {});
+ for (var key in this.table)
+ table[key] = this.table[key];
+ return new StringMap(table, this.size);
+ },
+ toString: function() { return "[object StringMap]" }
+ };
+
+ // an object-key table with poor asymptotics (replace with WeakMap when possible)
+ function ObjectMap(array) {
+ this.array = array || [];
+ }
+
+ function searchMap(map, key, found, notFound) {
+ var a = map.array;
+ for (var i = 0, n = a.length; i < n; i++) {
+ var pair = a[i];
+ if (pair.key === key)
+ return found(pair, i);
+ }
+ return notFound();
+ }
+
+ ObjectMap.prototype = {
+ has: function(x) {
+ return searchMap(this, x, function() { return true }, function() { return false });
+ },
+ set: function(x, v) {
+ var a = this.array;
+ searchMap(this, x,
+ function(pair) { pair.value = v },
+ function() { a.push({ key: x, value: v }) });
+ },
+ get: function(x) {
+ return searchMap(this, x,
+ function(pair) { return pair.value },
+ function() { return null });
+ },
+ getDef: function(x, thunk) {
+ var a = this.array;
+ return searchMap(this, x,
+ function(pair) { return pair.value },
+ function() {
+ var v = thunk();
+ a.push({ key: x, value: v });
+ return v;
+ });
+ },
+ forEach: function(f) {
+ var a = this.array;
+ for (var i = 0, n = a.length; i < n; i++) {
+ var pair = a[i];
+ f.call(this, pair.key, pair.value);
+ }
+ },
+ choose: function() {
+ return this.array[0].key;
+ },
+ get size() {
+ return this.array.length;
+ },
+ remove: function(x) {
+ var a = this.array;
+ searchMap(this, x,
+ function(pair, i) { a.splice(i, 1) },
+ function() { });
+ },
+ copy: function() {
+ return new ObjectMap(this.array.map(function(pair) {
+ return { key: pair.key, value: pair.value }
+ }));
+ },
+ clear: function() {
+ this.array = [];
+ },
+ toString: function() { return "[object ObjectMap]" }
+ };
+
+ // non-destructive stack
+ function Stack(elts) {
+ this.elts = elts || null;
+ }
+
+ Stack.prototype = {
+ push: function(x) {
+ return new Stack({ top: x, rest: this.elts });
+ },
+ top: function() {
+ if (!this.elts)
+ throw new Error("empty stack");
+ return this.elts.top;
+ },
+ isEmpty: function() {
+ return this.top === null;
+ },
+ find: function(test) {
+ for (var elts = this.elts; elts; elts = elts.rest) {
+ if (test(elts.top))
+ return elts.top;
+ }
+ return null;
+ },
+ has: function(x) {
+ return Boolean(this.find(function(elt) { return elt === x }));
+ },
+ forEach: function(f) {
+ for (var elts = this.elts; elts; elts = elts.rest) {
+ f(elts.top);
+ }
+ }
+ };
+
+ module.exports = {
+ tokens: tokens,
+ whitespace: whitespace,
+ opTypeNames: opTypeNames,
+ keywords: keywords,
+ isStatementStartCode: isStatementStartCode,
+ tokenIds: tokenIds,
+ consts: consts,
+ assignOps: assignOps,
+ defineGetter: defineGetter,
+ defineGetterSetter: defineGetterSetter,
+ defineMemoGetter: defineMemoGetter,
+ defineProperty: defineProperty,
+ isNativeCode: isNativeCode,
+ mirrorHandler: mirrorHandler,
+ mixinHandler: mixinHandler,
+ whitelistHandler: whitelistHandler,
+ blacklistHandler: blacklistHandler,
+ makePassthruHandler: makePassthruHandler,
+ StringMap: StringMap,
+ ObjectMap: ObjectMap,
+ Stack: Stack
+ };
+}); \ No newline at end of file
diff --git a/apps/files_texteditor/js/editor.js b/apps/files_texteditor/js/editor.js
index a0629aa8c4e..cb1af3dd6db 100644
--- a/apps/files_texteditor/js/editor.js
+++ b/apps/files_texteditor/js/editor.js
@@ -14,25 +14,32 @@ function setSyntaxMode(ext){
// Todo finish these
filetype["h"] = "c_cpp";
filetype["c"] = "c_cpp";
- filetype["cpp"] = "c_cpp";
filetype["clj"] = "clojure";
filetype["coffee"] = "coffee"; // coffescript can be compiled to javascript
+ filetype["coldfusion"] = "cfc";
+ filetype["cpp"] = "c_cpp";
filetype["cs"] = "csharp";
filetype["css"] = "css";
filetype["groovy"] = "groovy";
+ filetype["haxe"] = "hx";
filetype["html"] = "html";
filetype["java"] = "java";
filetype["js"] = "javascript";
filetype["json"] = "json";
+ filetype["latex"] = "latex";
+ filetype["lua"] = "lua";
+ filetype["markdown"] = "markdown"; // also: .md .markdown .mdown .mdwn
filetype["ml"] = "ocaml";
filetype["mli"] = "ocaml";
filetype["pl"] = "perl";
filetype["php"] = "php";
+ filetype["powershell"] = "ps1";
filetype["py"] = "python";
filetype["rb"] = "ruby";
filetype["scad"] = "scad"; // seems to be something like 3d model files printed with e.g. reprap
filetype["scala"] = "scala";
filetype["scss"] = "scss"; // "sassy css"
+ filetype["sql"] = "sql";
filetype["svg"] = "svg";
filetype["textile"] = "textile"; // related to markdown
filetype["xml"] = "xml";
@@ -47,145 +54,175 @@ function setSyntaxMode(ext){
}
}
-function showControls(filename){
+function showControls(filename,writeperms){
// Loads the control bar at the top.
$('.actions,#file_action_panel').fadeOut('slow').promise().done(function() {
// Load the new toolbar.
- var savebtnhtml = '<input type="button" id="editor_save" value="'+t('files_texteditor','Save')+'">';
- var html = '<input type="button" id="editor_close" value="Close">';
+ var editorcontrols;
+ if(writeperms=="true"){
+ var editorcontrols = '<button id="editor_save">'+t('files_texteditor','Save')+'</button><div class="separator"></div><label for="gotolineval">Go to line:</label><input type="text" id="gotolineval"><div class="separator"></div>';
+ }
+ var html = '<label for="editorseachval">Search:</label><input type="text" name="editorsearchval" id="editorsearchval"><div class="separator"></div><button id="editor_close">'+t('files_texteditor','Close')+'</button>';
$('#controls').append(html);
$('#editorbar').fadeIn('slow');
var breadcrumbhtml = '<div class="crumb svg" id="breadcrumb_file" style="background-image:url(&quot;../core/img/breadcrumb.png&quot;)"><p>'+filename+'</p></div>';
- $('.actions').before(breadcrumbhtml);
- $('.actions').before(savebtnhtml);
+ $('.actions').before(breadcrumbhtml).before(editorcontrols);
});
}
function bindControlEvents(){
- $("#editor_save").live('click',function() {
- doFileSave();
- });
-
- $('#editor_close').live('click',function() {
- hideFileEditor();
- });
+ $("#editor_save").die('click',doFileSave).live('click',doFileSave);
+ $('#editor_close').die('click',hideFileEditor).live('click',hideFileEditor);
+ $('#gotolineval').die('keyup', goToLine).live('keyup', goToLine);
+ $('#editorsearchval').die('keyup', doSearch).live('keyup', doSearch);
+ $('#clearsearchbtn').die('click', resetSearch).live('click', resetSearch);
+ $('#nextsearchbtn').die('click', nextSearchResult).live('click', nextSearchResult);
}
+// returns true or false if the editor is in view or not
function editorIsShown(){
// Not working as intended. Always returns true.
return is_editor_shown;
}
-function updateSessionFileHash(path){
- $.get(OC.filePath('files_texteditor','ajax','loadfile.php'),
- { path: path },
- function(jsondata){
- if(jsondata.status=='failure'){
- alert('Failed to update session file hash.');
- }
- }, "json");}
+// Moves the editor view to the line number speificed in #gotolineval
+function goToLine(){
+ // Go to the line specified
+ window.aceEditor.gotoLine($('#gotolineval').val());
+
+}
+
+//resets the search
+function resetSearch(){
+ $('#editorsearchval').val('');
+ $('#nextsearchbtn').remove();
+ $('#clearsearchbtn').remove();
+ window.aceEditor.gotoLine(0);
+}
+
+// moves the cursor to the next search resukt
+function nextSearchResult(){
+ window.aceEditor.findNext();
+}
+// Performs the initial search
+function doSearch(){
+ // check if search box empty?
+ if($('#editorsearchval').val()==''){
+ // Hide clear button
+ window.aceEditor.gotoLine(0);
+ $('#nextsearchbtn').remove();
+ $('#clearsearchbtn').remove();
+ } else {
+ // New search
+ // Reset cursor
+ window.aceEditor.gotoLine(0);
+ // Do search
+ window.aceEditor.find($('#editorsearchval').val(),{
+ backwards: false,
+ wrap: false,
+ caseSensitive: false,
+ wholeWord: false,
+ regExp: false
+ });
+ // Show next and clear buttons
+ // check if already there
+ if($('#nextsearchbtn').length==0){
+ var nextbtnhtml = '<button id="nextsearchbtn">Next</button>';
+ var clearbtnhtml = '<button id="clearsearchbtn">Clear</button>';
+ $('#editorsearchval').after(nextbtnhtml).after(clearbtnhtml);
+ }
+ }
+}
+// Tries to save the file.
function doFileSave(){
if(editorIsShown()){
- $('#editor_save').after('<img id="saving_icon" src="'+OC.filePath('core','img','loading.gif')+'"></img>');
+ // Get file path
+ var path = $('#editor').attr('data-dir')+'/'+$('#editor').attr('data-filename');
+ // Get original mtime
+ var mtime = $('#editor').attr('data-mtime');
+ // Show saving spinner
+ $("#editor_save").die('click',doFileSave);
+ $('#save_result').remove();
+ $('#editor_save').text(t('files_texteditor','Saving...'));//after('<img id="saving_icon" src="'+OC.filePath('core','img','loading.gif')+'"></img>');
+ // Get the data
var filecontents = window.aceEditor.getSession().getValue();
- var dir = $('#editor').attr('data-dir');
- var file = $('#editor').attr('data-filename');
- $.post(OC.filePath('files_texteditor','ajax','savefile.php'), { filecontents: filecontents, file: file, dir: dir },function(jsondata){
-
- if(jsondata.status == 'failure'){
- var answer = confirm(jsondata.data.message);
- if(answer){
- $.post(OC.filePath('files_texteditor','ajax','savefile.php'),{ filecontents: filecontents, file: file, dir: dir, force: 'true' },function(jsondata){
- if(jsondata.status =='success'){
- $('#saving_icon').remove();
- $('#editor_save').after('<p id="save_result" style="float: left">Saved!</p>')
- setTimeout(function() {
- $('#save_result').remove();
- }, 2000);
- }
- else {
- // Save error
- $('#saving_icon').remove();
- $('#editor_save').after('<p id="save_result" style="float: left">Failed!</p>');
- setTimeout(function() {
- $('#save_result').fadeOut('slow',function(){ $(this).remove(); });
- }, 2000);
- }
- }, 'json');
- }
- else {
- // Don't save!
- $('#saving_icon').remove();
- // Temporary measure until we get a tick icon
- $('#editor_save').after('<p id="save_result" style="float: left">Saved!</p>');
- setTimeout(function() {
- $('#save_result').fadeOut('slow',function(){ $(this).remove(); });
- }, 2000);
- }
- }
- else if(jsondata.status == 'success'){
- // Success
- $('#saving_icon').remove();
- // Temporary measure until we get a tick icon
- $('#editor_save').after('<p id="save_result" style="float: left">Saved!</p>');
- setTimeout(function() {
- $('#save_result').fadeOut('slow',function(){ $(this).remove(); });
- }, 2000);
+ // Send the data
+ $.post(OC.filePath('files_texteditor','ajax','savefile.php'), { filecontents: filecontents, path: path, mtime: mtime },function(jsondata){
+ if(jsondata.status!='success'){
+ // Save failed
+ $('#editor_save').text(t('files_texteditor','Save'));
+ $('#editor_save').after('<p id="save_result" style="float: left">Failed to save file</p>');
+ $("#editor_save").live('click',doFileSave);
+ } else {
+ // Save OK
+ // Update mtime
+ $('#editor').attr('data-mtime',jsondata.data.mtime);
+ $('#editor_save').text(t('files_texteditor','Save'));
+ $("#editor_save").live('click',doFileSave);
}
- }, 'json');
- giveEditorFocus();
- } else {
- return;
- }
+ },'json');
+ }
};
+// Gives the editor focus
function giveEditorFocus(){
window.aceEditor.focus();
};
+// Loads the file editor. Accepts two parameters, dir and filename.
function showFileEditor(dir,filename){
if(!editorIsShown()){
// Loads the file editor and display it.
- var data = $.ajax({
- url: OC.filePath('files','ajax','download.php')+'?files='+encodeURIComponent(filename)+'&dir='+encodeURIComponent(dir),
- complete: function(data){
+ var data = $.getJSON(
+ OC.filePath('files_texteditor','ajax','loadfile.php'),
+ {file:filename,dir:dir},
+ function(result){
+ if(result.status == 'success'){
+ // Save mtime
+ $('#editor').attr('data-mtime', result.data.mtime);
// Initialise the editor
- updateSessionFileHash(dir+'/'+filename);
- showControls(filename);
+ showControls(filename,result.data.write);
$('table').fadeOut('slow', function() {
- $('#editor').text(data.responseText);
- // encodeURIComponenet?
+ // Update document title
+ document.title = filename;
+ $('#editor').text(result.data.filecontents);
$('#editor').attr('data-dir', dir);
$('#editor').attr('data-filename', filename);
- window.aceEditor = ace.edit("editor");
+ window.aceEditor = ace.edit("editor");
aceEditor.setShowPrintMargin(false);
+ if(result.data.write=='false'){
+ aceEditor.setReadOnly(true);
+ }
setEditorSize();
setSyntaxMode(getFileExtension(filename));
OC.addScript('files_texteditor','aceeditor/theme-clouds', function(){
window.aceEditor.setTheme("ace/theme/clouds");
});
});
- // End success
+ } else {
+ // Failed to get the file.
+ alert(result.data.message);
}
- // End ajax
- });
+ // End success
+ }
+ // End ajax
+ );
is_editor_shown = true;
}
}
+// Fades out the editor.
function hideFileEditor(){
- // Fade out controls
- $('#editor_close').fadeOut('slow');
- // Fade out the save button
- $('#editor_save').fadeOut('slow');
- // Fade out breadcrumb
- $('#breadcrumb_file').fadeOut('slow', function(){ $(this).remove();});
+ // Fades out editor controls
+ $('#controls > :not(.actions,#file_access_panel,.crumb),#breadcrumb_file').fadeOut('slow',function(){
+ $(this).remove();
+ });
// Fade out editor
$('#editor').fadeOut('slow', function(){
- $('#editor_close').remove();
- $('#editor_save').remove();
- $('#editor').remove();
+ $(this).remove();
+ // Reset document title
+ document.title = "ownCloud";
var editorhtml = '<div id="editor"></div>';
$('table').after(editorhtml);
$('.actions,#file_access_panel').fadeIn('slow');
@@ -194,6 +231,21 @@ function hideFileEditor(){
is_editor_shown = false;
}
+// Keyboard Shortcuts
+var ctrlBtn = false;
+
+// returns true if ctrl+s or cmd+s is being pressed
+function checkForSaveKeyPress(e){
+ if(e.which == 17 || e.which == 91) ctrlBtn=true;
+ if(e.which == 83 && ctrlBtn == true) {
+ e.preventDefault();
+ $('#editor_save').trigger('click');
+ return false;
+
+ }
+}
+
+// resizes the editor window
$(window).resize(function() {
setEditorSize();
});
@@ -220,6 +272,9 @@ $(document).ready(function(){
showFileEditor(dir,file);
});
}
- // Binds the file save and close editor events to the buttons
+ // Binds the file save and close editor events, and gotoline button
bindControlEvents();
+
+ // Binds the save keyboard shortcut events
+ $(document).unbind('keydown').bind('keydown',checkForSaveKeyPress);
});
diff --git a/apps/gallery/ajax/galleryOp.php b/apps/gallery/ajax/galleryOp.php
index 3d1ed1f33cb..f162fe2bc46 100644
--- a/apps/gallery/ajax/galleryOp.php
+++ b/apps/gallery/ajax/galleryOp.php
@@ -1,4 +1,4 @@
-<?
+<?php
/**
* ownCloud - gallery application
@@ -23,29 +23,75 @@
require_once('../../../lib/base.php');
require_once(OC::$CLASSPATH['OC_Gallery_Album']);
-OC_JSON::checkLoggedIn();
+require_once(OC::$CLASSPATH['OC_Gallery_Scanner']);
OC_JSON::checkAppEnabled('gallery');
function handleRename($oldname, $newname) {
+ OC_JSON::checkLoggedIn();
OC_Gallery_Album::rename($oldname, $newname, OC_User::getUser());
+ OC_Gallery_Album::changeThumbnailPath($oldname, $newname);
}
function handleRemove($name) {
+ OC_JSON::checkLoggedIn();
OC_Gallery_Album::remove(OC_User::getUser(), $name);
}
+function handleGetThumbnails($albumname) {
+ OC_JSON::checkLoggedIn();
+ $photo = new OC_Image();
+ $photo->loadFromFile(OC::$CONFIG_DATADIRECTORY.'/../gallery/'.$albumname.'.png');
+ $photo->show();
+}
+
+function handleGalleryScanning() {
+ OC_JSON::checkLoggedIn();
+ OC_Gallery_Scanner::cleanup();
+ OC_JSON::success(array('albums' => OC_Gallery_Scanner::scan('/')));
+}
+
+function handleFilescan() {
+ OC_JSON::checkLoggedIn();
+ $pathlist = OC_Gallery_Scanner::find_paths('/');
+ sort($pathlist);
+ OC_JSON::success(array('paths' => $pathlist));
+}
+
+function handlePartialCreate($path) {
+ OC_JSON::checkLoggedIn();
+ if (empty($path)) OC_JSON::error(array('cause' => 'No path specified'));
+ if (!OC_Filesystem::is_dir($path)) OC_JSON::error(array('cause' => 'Invalid path given'));
+
+ $album = OC_Gallery_Album::find(OC_User::getUser(), null, $path);
+ $albums;
+ OC_Gallery_Scanner::scanDir($path, $albums);
+ OC_JSON::success(array('album_details' => $albums));
+}
+
if ($_GET['operation']) {
switch($_GET['operation']) {
- case "rename":
+ case 'rename':
handleRename($_GET['oldname'], $_GET['newname']);
OC_JSON::success(array('newname' => $_GET['newname']));
break;
- case "remove":
+ case 'remove':
handleRemove($_GET['name']);
OC_JSON::success();
- break;
- default:
- OC_JSON::error(array('cause' => "Unknown operation"));
+ break;
+ case 'get_covers':
+ handleGetThumbnails($_GET['albumname']);
+ break;
+ case 'scan':
+ handleGalleryScanning();
+ break;
+ case 'filescan':
+ handleFilescan();
+ break;
+ case 'partial_create':
+ handlePartialCreate($_GET['path']);
+ break;
+ default:
+ OC_JSON::error(array('cause' => 'Unknown operation'));
}
}
?>
diff --git a/apps/gallery/ajax/getCovers.php b/apps/gallery/ajax/getCovers.php
deleted file mode 100644
index 4db73d0fbf3..00000000000
--- a/apps/gallery/ajax/getCovers.php
+++ /dev/null
@@ -1,99 +0,0 @@
-<?php
-
-/**
-* ownCloud - gallery application
-*
-* @author Bartek Przybylski
-* @copyright 2012 Bartek Przybylski bart.p.pl@gmail.com
-*
-* This library is free software; you can redistribute it and/or
-* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
-* License as published by the Free Software Foundation; either
-* version 3 of the License, or 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 AFFERO 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, see <http://www.gnu.org/licenses/>.
-*
-*/
-
-require_once('../../../lib/base.php');
-OC_JSON::checkLoggedIn();
-OC_JSON::checkAppEnabled('gallery');
-
-function CroppedThumbnail($imgSrc,$thumbnail_width,$thumbnail_height, $tgtImg, $shift) {
- //getting the image dimensions
- list($width_orig, $height_orig) = getimagesize($imgSrc);
- switch (strtolower(substr($imgSrc, strrpos($imgSrc, '.')+1))) {
- case "jpeg":
- case "jpg":
- case "tiff":
- $myImage = imagecreatefromjpeg($imgSrc);
- break;
- case "png":
- $myImage = imagecreatefrompng($imgSrc);
- break;
- default:
- exit();
- }
- if(!$myImage) exit();
- $ratio_orig = $width_orig/$height_orig;
-
- if ($thumbnail_width/$thumbnail_height > $ratio_orig) {
- $new_height = $thumbnail_width/$ratio_orig;
- $new_width = $thumbnail_width;
- } else {
- $new_width = $thumbnail_height*$ratio_orig;
- $new_height = $thumbnail_height;
- }
-
- $x_mid = $new_width/2; //horizontal middle
- $y_mid = $new_height/2; //vertical middle
-
- $process = imagecreatetruecolor(round($new_width), round($new_height));
-
- imagecopyresampled($process, $myImage, 0, 0, 0, 0, $new_width, $new_height, $width_orig, $height_orig);
- imagecopyresampled($tgtImg, $process, $shift, 0, ($x_mid-($thumbnail_width/2)), ($y_mid-($thumbnail_height/2)), $thumbnail_width, $thumbnail_height, $thumbnail_width, $thumbnail_height);
-
- imagedestroy($process);
- imagedestroy($myImage);
-}
-
-$box_size = 200;
-$album_name= $_GET['album_name'];
-
-$result = OC_Gallery_Photo::findForAlbum(OC_User::getUser(), $album_name);
-
-$numOfItems = min($result->numRows(),10);
-
-if ($numOfItems){
- $targetImg = imagecreatetruecolor($numOfItems*$box_size, $box_size);
-}
-else{
- $targetImg = imagecreatetruecolor($box_size, $box_size);
-}
-$counter = 0;
-while (($i = $result->fetchRow()) && $counter < $numOfItems) {
- $imagePath = OC_Filesystem::getLocalFile($i['file_path']);
- if(file_exists($imagePath))
- {
- CroppedThumbnail($imagePath, $box_size, $box_size, $targetImg, $counter*$box_size);
- $counter++;
- }
-}
-
-header('Content-Type: image/png');
-
-$offset = 3600 * 24;
-// calc the string in GMT not localtime and add the offset
-header("Expires: " . gmdate("D, d M Y H:i:s", time() + $offset) . " GMT");
-header('Cache-Control: max-age='.$offset.', must-revalidate');
-header('Pragma: public');
-
-imagepng($targetImg);
-imagedestroy($targetImg);
-?>
diff --git a/apps/gallery/ajax/scanForAlbums.php b/apps/gallery/ajax/scanForAlbums.php
deleted file mode 100644
index b8ed639d9dc..00000000000
--- a/apps/gallery/ajax/scanForAlbums.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-
-/**
-* ownCloud - gallery application
-*
-* @author Bartek Przybylski
-* @copyright 2012 Bartek Przybylski bart.p.pl@gmail.com
-*
-* This library is free software; you can redistribute it and/or
-* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
-* License as published by the Free Software Foundation; either
-* version 3 of the License, or 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 AFFERO 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, see <http://www.gnu.org/licenses/>.
-*
-*/
-
-require_once('../../../lib/base.php');
-OC_JSON::checkLoggedIn();
-OC_JSON::checkAppEnabled('gallery');
-
-OC_Gallery_Scanner::cleanUp();
-OC_JSON::success(array('albums' => OC_Gallery_Scanner::scan('/')));
-
-?>
diff --git a/apps/gallery/appinfo/app.php b/apps/gallery/appinfo/app.php
index 9c665fd3500..da872274497 100644
--- a/apps/gallery/appinfo/app.php
+++ b/apps/gallery/appinfo/app.php
@@ -26,6 +26,8 @@ OC::$CLASSPATH['OC_Gallery_Photo'] = 'apps/gallery/lib/photo.php';
OC::$CLASSPATH['OC_Gallery_Scanner'] = 'apps/gallery/lib/scanner.php';
OC::$CLASSPATH['OC_Gallery_Hooks_Handlers'] = 'apps/gallery/lib/hooks_handlers.php';
+$l = new OC_L10N('gallery');
+
OC_App::register(array(
'order' => 20,
'id' => 'gallery',
@@ -36,7 +38,7 @@ OC_App::addNavigationEntry( array(
'order' => 20,
'href' => OC_Helper::linkTo('gallery', 'index.php'),
'icon' => OC_Helper::imagePath('core', 'places/picture.svg'),
- 'name' => 'Gallery'));
+ 'name' => $l->t('Gallery')));
class OC_GallerySearchProvider extends OC_Search_Provider{
function search($query){
diff --git a/apps/gallery/css/styles.css b/apps/gallery/css/styles.css
index cc343ba0d08..4ada23b0b06 100644
--- a/apps/gallery/css/styles.css
+++ b/apps/gallery/css/styles.css
@@ -1,11 +1,11 @@
div#gallery_list { margin: 90pt 20pt; }
-div#gallery_list.leftcontent { padding-top: 15px; margin: 0; text-align: center; }
-div#gallery_album_box { width: 200px; text-align: center; border: 0; display: inline-block; margin: 5pt; vertical-align: top; padding: 10px; border: solid 1px black; position: relative; overflow: hidden; color: #999; }
+div#gallery_list.leftcontent { padding-top: 15pt; margin: 0; position: absolute; bottom:0px; text-align: center; overflow: scroll; }
+div#gallery_album_box { width: 200px; text-align: center; border: 0; display: inline-block; margin: 5pt; vertical-align: top; padding: 10px; position: relative; overflow: hidden; color: #999; }
div#gallery_album_box:hover { color: black; }
.leftcontent div#gallery_album_box { margin: 5px; }
-div#gallery_album_box h1 { font-size: 12pt; font-family: Verdana; }
+div#gallery_album_box h1 { font-size: 9pt; font-family: Verdana; }
div#gallery_album_cover { width: 199px; height: 199px; border: solid 1pt #999; padding: 0; }
div#gallery_control_overlay { border: 0; position:absolute; right: 10pt; background-color: #333; opacity: 0.5; visibility:hidden; padding: 0 5pt; }
div#gallery_control_overlay a { color:white; }
-#gallery_images { padding:10px 5px; }
+#gallery_images.rightcontent { padding:10px 5px; position:absolute; bottom: 0px; overflow: scroll; }
diff --git a/apps/gallery/js/album_cover.js b/apps/gallery/js/album_cover.js
index f6cb2da3103..e50593c0087 100644
--- a/apps/gallery/js/album_cover.js
+++ b/apps/gallery/js/album_cover.js
@@ -4,10 +4,11 @@ $(document).ready(function() {
if (r.status == 'success') {
for (var i in r.albums) {
var a = r.albums[i];
- Albums.add(a.name, a.numOfItems, a.bgPath);
+ Albums.add(a.name, a.numOfItems);
}
var targetDiv = document.getElementById('gallery_list');
if (targetDiv) {
+ $(targetDiv).html('');
Albums.display(targetDiv);
} else {
alert('Error occured: no such layer `gallery_list`');
@@ -30,14 +31,42 @@ function createNewAlbum() {
}
}
+var albumCounter = 0;
+var totalAlbums = 0;
+
function scanForAlbums() {
+ var albumCounter = 0;
+ var totalAlbums = 0;
+ $('#notification').text("Scanning directories");
$("#notification").fadeIn();
$("#notification").slideDown();
- $.getJSON('ajax/scanForAlbums.php', function(r) {
- $("#notification").fadeOut();
- $("#notification").slideUp();
+ $.getJSON('ajax/galleryOp.php?operation=filescan', function(r) {
+
if (r.status == 'success') {
- window.location.reload(true);
+ totalAlbums = r.paths.length;
+ $('#notification').text("Creating thumbnails ... " + Math.floor((albumCounter/totalAlbums)*100) + "%");
+ for(var a in r.paths) {
+ $.getJSON('ajax/galleryOp.php?operation=partial_create&path='+r.paths[a], function(r) {
+
+ if (r.status == 'success') {
+ Albums.add(r.album_details.albumName, r.album_details.imagesCount);
+ }
+
+ albumCounter++;
+ $('#notification').text("Creating thumbnails ... " + Math.floor((albumCounter/totalAlbums)*100) + "%");
+ if (albumCounter == totalAlbums) {
+ $("#notification").fadeOut();
+ $("#notification").slideUp();
+ var targetDiv = document.getElementById('gallery_list');
+ if (targetDiv) {
+ targetDiv.innerHTML = '';
+ Albums.display(targetDiv);
+ } else {
+ alert('Error occured: no such layer `gallery_list`');
+ }
+ }
+ });
+ }
} else {
alert('Error occured: ' + r.message);
}
@@ -48,8 +77,8 @@ function galleryRemove(albumName) {
if (confirm("Do you wan't to remove album " + albumName + "?")) {
$.getJSON("ajax/galleryOp.php", {operation: "remove", name: albumName}, function(r) {
if (r.status == "success") {
- $("#gallery_album_box[title='"+albumName+"']").remove();
- Albums.remove(albumName);
+ $("#gallery_album_box[title='"+albumName+"']").remove();
+ Albums.remove(albumName);
} else {
alert("Error: " + r.cause);
}
@@ -58,7 +87,7 @@ function galleryRemove(albumName) {
}
function galleryRename(name) {
- var result = window.prompt("Input new gallery name", "");
+ var result = window.prompt("Input new gallery name", name);
if (result) {
if (Albums.find(result)) {
alert("Album named '" + result + "' already exists");
diff --git a/apps/gallery/js/albums.js b/apps/gallery/js/albums.js
index ae7d1fac500..546aadba49f 100644
--- a/apps/gallery/js/albums.js
+++ b/apps/gallery/js/albums.js
@@ -12,13 +12,9 @@ Albums={
// album with the same name wont be insered,
// and false will be returned
// true on success
- add: function(album_name, num, bgPath) {
- for (var a in Albums.albums) {
- if (a.name == album_name) {
- return false;
- }
- }
- Albums.albums.push({name: album_name, numOfCovers: num, backgroundPath: bgPath});
+ add: function(album_name, num) {
+ if (Albums.albums[album_name] != undefined) return false;
+ Albums.albums[album_name] = {name: album_name, numOfCovers: num};
return true;
},
// remove element with given name
@@ -40,19 +36,7 @@ Albums={
// return element which match given name
// of undefined if such element do not exist
find: function(name) {
- var i = -1, tmp = 0;
- for (var k in Albums.albums) {
- var a = Albums.albums[k];
- if (a.name == name) {
- i = tmp;
- break;
- }
- tmp++;
- }
- if (i != -1) {
- return Albums.albums[i];
- }
- return undefined;
+ return Albums.albums[name];
},
// displays gallery in linear representation
// on given element, and apply default styles for gallery
@@ -63,7 +47,7 @@ Albums={
var local = $(displayTemplate.replace(/\*NAME\*/g, a.name));
$("#gallery_album_cover", local).css('background-repeat', 'no-repeat');
$("#gallery_album_cover", local).css('background-position', '0');
- $("#gallery_album_cover", local).css('background-image','url("ajax/getCovers.php?album_name='+a.name+'")');
+ $("#gallery_album_cover", local).css('background-image','url("ajax/galleryOp.php?operation=get_covers&albumname='+a.name+'")');
local.mouseover(function(e) {
$("#gallery_control_overlay", this).css('visibility','visible');
});
diff --git a/apps/gallery/l10n/de.php b/apps/gallery/l10n/de.php
new file mode 100644
index 00000000000..4ca5c83249c
--- /dev/null
+++ b/apps/gallery/l10n/de.php
@@ -0,0 +1,5 @@
+<?php $TRANSLATIONS = array(
+ "Gallery" => "Galerie",
+ "Back" => "Zurück"
+);
+?>
diff --git a/apps/gallery/l10n/pl.php b/apps/gallery/l10n/pl.php
new file mode 100644
index 00000000000..d0c51c0f814
--- /dev/null
+++ b/apps/gallery/l10n/pl.php
@@ -0,0 +1,6 @@
+<?php $TRANSLATIONS = array(
+ "Gallery" => "Galeria",
+ "Rescan" => "Przeskanuj",
+ "Back" => "Wróć"
+);
+?>
diff --git a/apps/gallery/lib/album.php b/apps/gallery/lib/album.php
index a94eff3acd7..72653c8de15 100644
--- a/apps/gallery/lib/album.php
+++ b/apps/gallery/lib/album.php
@@ -42,6 +42,21 @@ class OC_Gallery_Album {
$stmt = OC_DB::prepare($sql);
return $stmt->execute($args);
}
+
+ public static function removeByPath($path, $owner) {
+ $album = self::find($owner, null, $path);
+ $album = $album->fetchRow();
+ self::remove($owner, $album['album_name']);
+ OC_Gallery_Photo::removeByAlbumId($album['album_id']);
+ // find and remove any gallery which might be stored lower in dir hierarchy
+ $path = $path.'/%';
+ $stmt = OC_DB::prepare('SELECT * FROM *PREFIX*gallery_albums WHERE album_path LIKE ? AND uid_owner = ?');
+ $result = $stmt->execute(array($path, $owner));
+ while (($album = $result->fetchRow())) {
+ OC_Gallery_Photo::removeByAlbumId($album['album_id']);
+ self::remove($owner, $album['album_name']);
+ }
+ }
public static function find($owner, $name=null, $path=null){
$sql = 'SELECT * FROM *PREFIX*gallery_albums WHERE uid_owner = ?';
@@ -58,6 +73,17 @@ class OC_Gallery_Album {
return $stmt->execute($args);
}
+ public static function changePath($oldname, $newname, $owner) {
+ $stmt = OC_DB::prepare('UPDATE OR IGNORE *PREFIX*gallery_albums SET album_path=? WHERE uid_owner=? AND album_path=?');
+ $stmt->execute(array($newname, $owner, $oldname));
+ }
+
+ public static function changeThumbnailPath($oldname, $newname) {
+ require_once('../../../lib/base.php');
+ $thumbpath = OC::$CONFIG_DATADIRECTORY.'/../gallery/';
+ rename($thumbpath.$oldname.'.png', $thumbpath.$newname.'.png');
+ }
+
}
?>
diff --git a/apps/gallery/lib/hooks_handlers.php b/apps/gallery/lib/hooks_handlers.php
index 65f3faaeeaf..7248e67f0a2 100644
--- a/apps/gallery/lib/hooks_handlers.php
+++ b/apps/gallery/lib/hooks_handlers.php
@@ -21,9 +21,9 @@
*
*/
-OC_Hook::connect("OC_Filesystem", "post_write", "OC_Gallery_Hooks_Handlers", "addPhotoFromPath");
-OC_Hook::connect("OC_Filesystem", "delete", "OC_Gallery_Hooks_Handlers", "removePhoto");
-OC_Hook::connect("OC_Filesystem", "post_rename", "OC_Gallery_Hooks_Handlers", "renamePhoto");
+OC_Hook::connect(OC_Filesystem::CLASSNAME, OC_Filesystem::signal_post_write, "OC_Gallery_Hooks_Handlers", "addPhotoFromPath");
+OC_Hook::connect(OC_Filesystem::CLASSNAME, OC_Filesystem::signal_delete, "OC_Gallery_Hooks_Handlers", "removePhoto");
+OC_Hook::connect(OC_Filesystem::CLASSNAME, OC_Filesystem::signal_post_rename, "OC_Gallery_Hooks_Handlers", "renamePhoto");
require_once(OC::$CLASSPATH['OC_Gallery_Album']);
require_once(OC::$CLASSPATH['OC_Gallery_Photo']);
@@ -34,8 +34,19 @@ class OC_Gallery_Hooks_Handlers {
private static function isPhoto($filename) {
OC_Log::write(self::$APP_TAG, "Checking file ".$filename." with mimetype ".OC_Filesystem::getMimeType($filename), OC_Log::DEBUG);
if (substr(OC_Filesystem::getMimeType($filename), 0, 6) == "image/")
- return 1;
- return 0;
+ return true;
+ return false;
+ }
+
+ private static function directoryContainsPhotos($dirpath) {
+ $dirhandle = opendir(OC::$CONFIG_DATADIRECTORY.$dirpath);
+ if ($dirhandle != FALSE) {
+ while (($filename = readdir($dirhandle)) != FALSE) {
+ if ($filename[0] == '.') continue;
+ if (self::isPhoto($dirpath.'/'.$filename)) return true;
+ }
+ }
+ return false;
}
private static function createAlbum($path) {
@@ -50,8 +61,10 @@ class OC_Gallery_Hooks_Handlers {
}
public static function addPhotoFromPath($params) {
- if (!self::isPhoto($params['path'])) return;
- $fullpath = $params['path'];
+ $fullpath = $params[OC_Filesystem::signal_param_path];
+
+ if (!self::isPhoto($fullpath)) return;
+
OC_Log::write(self::$APP_TAG, 'Adding file with path '. $fullpath, OC_Log::DEBUG);
$path = substr($fullpath, 0, strrpos($fullpath, '/'));
if ($path == '') $path = '/';
@@ -71,47 +84,56 @@ class OC_Gallery_Hooks_Handlers {
}
public static function removePhoto($params) {
- $path = $params['path'];
- if (!self::isPhoto($path)) return;
- OC_Gallery_Photo::removeByPath($path);
+ $path = $params[OC_Filesystem::signal_param_path];
+ if (OC_Filesystem::is_dir($path) && self::directoryContainsPhotos($path)) {
+ OC_Gallery_Album::removeByPath($path, OC_User::getUser());
+ } elseif (self::isPhoto($path)) {
+ OC_Gallery_Photo::removeByPath($path);
+ }
}
public static function renamePhoto($params) {
- $olddir = substr($params['oldpath'], 0, strrpos($params['oldpath'], '/'));
- $newdir = substr($params['newpath'], 0, strrpos($params['newpath'], '/'));
- if ($olddir == '') $olddir = '/';
- if ($newdir == '') $newdir = '/';
- if (!self::isPhoto($params['newpath'])) return;
- OC_Log::write(self::$APP_TAG, 'Moving photo from '.$params['oldpath'].' to '.$params['newpath'], OC_Log::DEBUG);
- $album;
- $newAlbumId;
- $oldAlbumId;
- if ($olddir == $newdir) {
- // album changing is not needed
- $album = OC_Gallery_Album::find(OC_User::getUser(), null, $olddir);
- if ($album->numRows() == 0) {
- $album = self::createAlbum($newdir);
- }
- $album = $album->fetchRow();
- $newAlbumId = $oldAlbumId = $album['album_id'];
- } else {
- $newalbum = OC_Gallery_Album::find(OC_User::getUser(), null, $newdir);
- $oldalbum = OC_Gallery_Album::find(OC_User::getUser(), null, $olddir);
-
- if ($newalbum->numRows() == 0) {
- $newalbum = self::createAlbum($newdir);
- }
- $newalbum = $newalbum->fetchRow();
- if ($oldalbum->numRows() == 0) {
- OC_Gallery_Photo::create($newalbum['album_id'], $params['newpath']);
- return;
- }
- $oldalbum = $oldalbum->fetchRow();
- $newAlbumId = $newalbum['album_id'];
- $oldAlbumId = $oldalbum['album_id'];
+ $oldpath = $params[OC_Filesystem::signal_param_oldpath];
+ $newpath = $params[OC_Filesystem::signal_param_newpath];
+ if (OC_Filesystem::is_dir($newpath) && self::directoryContainsPhotos($newpath)) {
+ OC_Gallery_Album::changePath($oldpath, $newpath, OC_User::getUser());
+ } elseif (!self::isPhoto($newpath)) {
+ $olddir = substr($oldpath, 0, strrpos($oldpath, '/'));
+ $newdir = substr($newpath, 0, strrpos($newpath, '/'));
+ if ($olddir == '') $olddir = '/';
+ if ($newdir == '') $newdir = '/';
+ if (!self::isPhoto($newpath)) return;
+ OC_Log::write(self::$APP_TAG, 'Moving photo from '.$oldpath.' to '.$newpath, OC_Log::DEBUG);
+ $album;
+ $newAlbumId;
+ $oldAlbumId;
+ if ($olddir == $newdir) {
+ // album changing is not needed
+ $album = OC_Gallery_Album::find(OC_User::getUser(), null, $olddir);
+ if ($album->numRows() == 0) {
+ $album = self::createAlbum($newdir);
+ }
+ $album = $album->fetchRow();
+ $newAlbumId = $oldAlbumId = $album['album_id'];
+ } else {
+ $newalbum = OC_Gallery_Album::find(OC_User::getUser(), null, $newdir);
+ $oldalbum = OC_Gallery_Album::find(OC_User::getUser(), null, $olddir);
+
+ if ($newalbum->numRows() == 0) {
+ $newalbum = self::createAlbum($newdir);
+ }
+ $newalbum = $newalbum->fetchRow();
+ if ($oldalbum->numRows() == 0) {
+ OC_Gallery_Photo::create($newalbum['album_id'], $newpath);
+ return;
+ }
+ $oldalbum = $oldalbum->fetchRow();
+ $newAlbumId = $newalbum['album_id'];
+ $oldAlbumId = $oldalbum['album_id'];
+ }
+ OC_Gallery_Photo::changePath($oldAlbumId, $newAlbumId, $oldpath, $newpath);
}
- OC_Gallery_Photo::changePath($oldAlbumId, $newAlbumId, $params['oldpath'], $params['newpath']);
}
}
diff --git a/apps/gallery/lib/photo.php b/apps/gallery/lib/photo.php
index 23887098e0f..14b0c4b2a07 100644
--- a/apps/gallery/lib/photo.php
+++ b/apps/gallery/lib/photo.php
@@ -56,6 +56,11 @@ class OC_Gallery_Photo{
$stmt->execute(array($id));
}
+ public static function removeByAlbumId($albumid) {
+ $stmt = OC_DB::prepare('DELETE FROM *PREFIX*gallery_photos WHERE album_id = ?');
+ $stmt->execute(array($albumid));
+ }
+
public static function changePath($oldAlbumId, $newAlbumId, $oldpath, $newpath) {
$stmt = OC_DB::prepare("UPDATE *PREFIX*gallery_photos SET file_path = ?, album_id = ? WHERE album_id = ? and file_path = ?");
$stmt->execute(array($newpath, $newAlbumId, $oldAlbumId, $oldpath));
diff --git a/apps/gallery/lib/scanner.php b/apps/gallery/lib/scanner.php
index 3eba9260ac7..4ce38a99531 100644
--- a/apps/gallery/lib/scanner.php
+++ b/apps/gallery/lib/scanner.php
@@ -50,15 +50,14 @@ class OC_Gallery_Scanner {
while (($filename = readdir($dh)) !== false) {
$filepath = ($path[strlen($path)-1]=='/'?$path:$path.'/').$filename;
if (substr($filename, 0, 1) == '.') continue;
- if (OC_Filesystem::is_dir($filepath)) {
- self::scanDir($filepath, $albums);
- } elseif (self::isPhoto($path.'/'.$filename)) {
+ if (self::isPhoto($path.'/'.$filename)) {
$current_album['images'][] = $filepath;
}
}
}
$current_album['imagesCount'] = count($current_album['images']);
- $albums[] = $current_album;
+ $albums['imagesCount'] = $current_album['imagesCount'];
+ $albums['albumName'] = $current_album['name'];
$result = OC_Gallery_Album::find(OC_User::getUser(), $current_album['name']);
if ($result->numRows() == 0 && count($current_album['images'])) {
@@ -92,5 +91,23 @@ class OC_Gallery_Scanner {
return 1;
return 0;
}
+
+ public static function find_paths($path) {
+ $ret = array();
+ $dirres;
+ $addpath = FALSE;
+ if (($dirres = OC_Filesystem::opendir($path)) == FALSE) return $ret;
+
+ while (($file = readdir($dirres)) != FALSE) {
+ if ($file[0] == '.') continue;
+ if (OC_Filesystem::is_dir($path.$file))
+ $ret = array_merge($ret, self::find_paths($path.$file.'/'));
+ if (self::isPhoto($path.$file)) $addpath = TRUE;
+ }
+
+ if ($addpath) $ret[] = $path;
+
+ return $ret;
+ }
}
?>
diff --git a/apps/gallery/templates/index.php b/apps/gallery/templates/index.php
index 7c6e91a468e..eb6ebd1bb7b 100644
--- a/apps/gallery/templates/index.php
+++ b/apps/gallery/templates/index.php
@@ -2,11 +2,12 @@
OC_Util::addStyle('gallery', 'styles');
OC_Util::addScript('gallery', 'albums');
OC_Util::addScript('gallery', 'album_cover');
+$l = new OC_L10N('gallery');
?>
<div id="notification"><div id="gallery_notification_text">Creating thumbnails</div></div>
<div id="controls">
- <input type="button" value="Rescan" onclick="javascript:scanForAlbums();" />
+ <input type="button" value="<?php echo $l->t('Rescan');?>" onclick="javascript:scanForAlbums();" />
<br/>
</div>
<div id="gallery_list">
diff --git a/apps/gallery/templates/view_album.php b/apps/gallery/templates/view_album.php
index 4acc965269c..55a2ee09e4a 100644
--- a/apps/gallery/templates/view_album.php
+++ b/apps/gallery/templates/view_album.php
@@ -5,6 +5,7 @@ OC_Util::addScript('gallery', 'album_cover');
OC_Util::addScript('files_imageviewer', 'jquery.mousewheel-3.0.4.pack');
OC_Util::addScript('files_imageviewer', 'jquery.fancybox-1.3.4.pack');
OC_Util::addStyle( 'files_imageviewer', 'jquery.fancybox-1.3.4' );
+$l = new OC_L10N('gallery');
?>
<script type="text/javascript">
$(document).ready(function() {
@@ -15,7 +16,7 @@ OC_Util::addStyle( 'files_imageviewer', 'jquery.fancybox-1.3.4' );
</script>
<div id="controls">
- <a href="?"><input type="button" value="Back" /></a>
+ <a href="?"><input type="button" value="<?php echo $l->t('Back');?>" /></a>
<br/>
</div>
diff --git a/apps/media/css/music.css b/apps/media/css/music.css
index 41ade44a66f..bcd8cf9178b 100644
--- a/apps/media/css/music.css
+++ b/apps/media/css/music.css
@@ -8,7 +8,6 @@ a.jp-next { left:5em; }
div.jp-progress { position:absolute; overflow:hidden; top:.5em; left:8em; width:15em; height:1.2em; padding:0; }
div.jp-seek-bar { background:#eee; width:0; height:100%; cursor:pointer; }
div.jp-play-bar { background:#ccc; width:0; height:100%; }
-div.jp-seeking-bg { background:url("../img/pbar-ani.gif"); }
div.jp-current-time,div.jp-duration { position:absolute; font-size:.64em; font-style:oblique; top:0.9em; left:13.5em; }
div.jp-duration { display: none }
div.jp-current-song { left: 33em; position: absolute; top: 0.9em; }
@@ -20,8 +19,8 @@ div.jp-volume-bar-value { background:#ccc; width:0; height:0.4em; }
#collection { padding-top:1em; position:relative; width:100%; float:left; }
#collection li.album,#collection li.song { margin-left:3em; }
-#leftcontent img.remove { display:none; float:right; cursor:pointer; }
-#leftcontent li:hover img.remove { display:inline; }
+#leftcontent img.remove { display:none; float:right; cursor:pointer; opacity: 0; }
+#leftcontent li:hover img.remove { display:inline; opacity: .3; }
#leftcontent li div.label { float: left; width: 200px; overflow: hidden; text-overflow: ellipsis; }
#collection li button { float:right; }
#collection li,#playlist li { list-style-type:none; }
diff --git a/apps/media/js/collection.js b/apps/media/js/collection.js
index 576f567faef..6525df55c71 100644
--- a/apps/media/js/collection.js
+++ b/apps/media/js/collection.js
@@ -132,7 +132,7 @@ Collection={
},
showArtist:function(artist){
var tr=Collection.parent.find('tr[data-artist="'+artist+'"]');
- var nextRow=tr.next();
+ var lastRow=tr;
var artist=tr.data('artistData');
var first=true;
$.each(artist.albums,function(j,album){
@@ -185,9 +185,10 @@ Collection={
newRow.attr('data-artist',artist.name);
newRow.data('albumData',album);
if(!first){
- nextRow.before(newRow);
+ lastRow.after(newRow);
}
first=false;
+ lastRow=newRow;
});
});
tr.removeClass('collapsed');
@@ -215,11 +216,11 @@ Collection={
},
showAlbum:function(artist,album){
var tr = Collection.parent.find('tr[data-artist="'+artist+'"][data-album="'+album+'"]');
+ var lastRow=tr;
var albumData=tr.data('albumData');
tr.find('td.album a.expander').data('expanded',true);
tr.find('td.album a.expander').addClass('expanded');
tr.find('td.album a.expander').text('v');
- var nextRow=tr.next();
$.each(albumData.songs,function(i,song){
if(i>0){
var newRow=tr.clone();
@@ -230,9 +231,17 @@ Collection={
var newRow=tr;
}
newRow.find('td.title a').text(song.name);
+ newRow.find('td.title a').click(function(event){
+ event.preventDefault();
+ PlayList.add(song);
+ PlayList.play(0);
+ Collection.parent.find('tr').removeClass('active');
+ $('tr[data-title="'+song.name+'"]').addClass('active');
+ });
if(i>0){
- nextRow.before(newRow);
+ lastRow.after(newRow);
}
+ lastRow=newRow;
});
},
hideAlbum:function(artist,album){
diff --git a/apps/media/js/loader.js b/apps/media/js/loader.js
index dff4163897f..055f858ae16 100644
--- a/apps/media/js/loader.js
+++ b/apps/media/js/loader.js
@@ -52,10 +52,8 @@ $(document).ready(function() {
}
var oc_current_user=OC.currentUser;
if(typeof PlayList==='undefined'){
- if(typeof localStorage !== 'undefined' && localStorage){
- if(localStorage.getItem(oc_current_user+'oc_playlist_items') && localStorage.getItem(oc_current_user+'oc_playlist_items')!='[]' && localStorage.getItem(oc_current_user+'oc_playlist_active')!='true'){
- loadPlayer();
- }
+ if(OC.localStorage.getItem('playlist_items') && OC.localStorage.getItem('playlist_items').length && OC.localStorage.getItem('playlist_active')!=true){
+ loadPlayer();
}
}
}); \ No newline at end of file
diff --git a/apps/media/js/music.js b/apps/media/js/music.js
index bf082207829..3373cbac257 100644
--- a/apps/media/js/music.js
+++ b/apps/media/js/music.js
@@ -26,18 +26,25 @@ $(document).ready(function(){
button.tipsy({gravity:'n', fade:true, delayIn: 400, live:true});
}
Collection.display();
+
+ Collection.load(function(){
+ var urlVars=getUrlVars();
+ if(urlVars.artist){
+ var song=Collection.find(urlVars.artist,urlVars.album,urlVars.song);
+ PlayList.add(song);
+ PlayList.play(0);
+ }
+ })
});
function getUrlVars(){
- var vars = [], hash;
- var hashes = window.location.href.slice(window.location.href.indexOf('#') + 1).split('&');
- for(var i = 0; i < hashes.length; i++)
- {
+ var vars = {}, hash;
+ var hashes = window.location.hash.substr(1).split('&');
+ for(var i = 0; i < hashes.length; i++){
hash = hashes[i].split('=');
- vars.push(hash[0]);
- vars[hash[0]] = hash[1].replace(/\+/g,' ');
+ vars[hash[0]] = decodeURIComponent(hash[1]).replace(/\+/g,' ');
}
return vars;
}
diff --git a/apps/media/js/player.js b/apps/media/js/player.js
index 1f76356fd97..ad406830833 100644
--- a/apps/media/js/player.js
+++ b/apps/media/js/player.js
@@ -34,7 +34,7 @@ var PlayList={
if(PlayList.player){
if(PlayList.player.data('jPlayer').options.supplied!=items[index].type){//the the audio type changes we need to reinitialize jplayer
PlayList.player.jPlayer("play",time);
- localStorage.setItem(oc_current_user+'oc_playlist_time',time);
+ OC.localStorage.setItem('playlist_time',time);
PlayList.player.jPlayer("destroy");
// PlayList.save(); // so that the init don't lose the playlist
PlayList.init(items[index].type,null); // init calls load that calls play
@@ -64,9 +64,8 @@ var PlayList={
}
}
}else{
- localStorage.setItem(oc_current_user+'oc_playlist_time',time);
- localStorage.setItem(oc_current_user+'oc_playlist_playing','true');
-// PlayList.save(); // so that the init don't lose the playlist
+ OC.localStorage.setItem('playlist_time',time);
+ OC.localStorage.setItem('playlist_playing',true);
PlayList.init(items[index].type,null); // init calls load that calls play
}
}
@@ -92,11 +91,11 @@ var PlayList={
$(PlayList.player).jPlayer({
ended:PlayList.next,
pause:function(){
- localStorage.setItem(oc_current_user+'oc_playlist_playing','false');
+ OC.localStorage.setItem('playlist_playing',false);
document.title = "ownCloud";
},
play:function(event){
- localStorage.setItem(oc_current_user+'oc_playlist_playing','true');
+ OC.localStorage.setItem('playlist_playing',true);
document.title = "\u25b8 " + event.jPlayer.status.media.name + " - " + event.jPlayer.status.media.artist + " - ownCloud";
},
supplied:type,
@@ -161,46 +160,42 @@ var PlayList={
}
},
save:function(){
- if(typeof localStorage !== 'undefined' && localStorage){
- localStorage.setItem(oc_current_user+'oc_playlist_items',JSON.stringify(PlayList.items));
- localStorage.setItem(oc_current_user+'oc_playlist_current',PlayList.current);
- if(PlayList.player) {
- if(PlayList.player.data('jPlayer')) {
- var time=Math.round(PlayList.player.data('jPlayer').status.currentTime);
- localStorage.setItem(oc_current_user+'oc_playlist_time',time);
- var volume=PlayList.player.data('jPlayer').options.volume*100;
- localStorage.setItem(oc_current_user+'oc_playlist_volume',volume);
- }
+ OC.localStorage.setItem('playlist_items',PlayList.items);
+ OC.localStorage.setItem('playlist_current',PlayList.current);
+ if(PlayList.player) {
+ if(PlayList.player.data('jPlayer')) {
+ var time=Math.round(PlayList.player.data('jPlayer').status.currentTime);
+ OC.localStorage.setItem('playlist_time',time);
+ var volume=PlayList.player.data('jPlayer').options.volume*100;
+ OC.localStorage.setItem('playlist_volume',volume);
}
- localStorage.setItem(oc_current_user+'oc_playlist_active','true');
}
+ OC.localStorage.setItem('playlist_active',true);
},
load:function(){
- if(typeof localStorage !== 'undefined' && localStorage){
- PlayList.active=true;
- localStorage.setItem(oc_current_user+'oc_playlist_active','true');
- if(localStorage.hasOwnProperty(oc_current_user+'oc_playlist_items')){
- PlayList.items=JSON.parse(localStorage.getItem(oc_current_user+'oc_playlist_items'));
- if(PlayList.items.length>0){
- PlayList.current=parseInt(localStorage.getItem(oc_current_user+'oc_playlist_current'));
- var time=parseInt(localStorage.getItem(oc_current_user+'oc_playlist_time'));
- if(localStorage.hasOwnProperty(oc_current_user+'oc_playlist_volume')){
- var volume=localStorage.getItem(oc_current_user+'oc_playlist_volume');
- PlayList.volume=volume/100;
- $('.jp-volume-bar-value').css('width',volume+'%');
- if(PlayList.player.data('jPlayer')){
- PlayList.player.jPlayer("option",'volume',volume/100);
- }
- }
- if(JSON.parse(localStorage.getItem(oc_current_user+'oc_playlist_playing'))){
- PlayList.play(null,time);
- }else{
- PlayList.play(null,time,function(){
- PlayList.player.jPlayer("pause");
- });
+ PlayList.active=true;
+ OC.localStorage.setItem('playlist_active',true);
+ if(OC.localStorage.hasItem('playlist_items')){
+ PlayList.items=OC.localStorage.getItem('playlist_items');
+ if(PlayList.items && PlayList.items.length>0){
+ PlayList.current=OC.localStorage.getItem('playlist_current');
+ var time=OC.localStorage.getItem('playlist_time');
+ if(OC.localStorage.hasItem('playlist_volume')){
+ var volume=OC.localStorage.getItem('playlist_volume');
+ PlayList.volume=volume/100;
+ $('.jp-volume-bar-value').css('width',volume+'%');
+ if(PlayList.player.data('jPlayer')){
+ PlayList.player.jPlayer("option",'volume',volume/100);
}
- PlayList.render();
}
+ if(OC.localStorage.getItem('playlist_playing')){
+ PlayList.play(null,time);
+ }else{
+ PlayList.play(null,time,function(){
+ PlayList.player.jPlayer("pause");
+ });
+ }
+ PlayList.render();
}
}
}
@@ -210,7 +205,7 @@ $(document).ready(function(){
$(window).bind('beforeunload', function (){
PlayList.save();
if(PlayList.active){
- localStorage.setItem(oc_current_user+'oc_playlist_active','false');
+ OC.localStorage.setItem('playlist_active',false);
}
});
diff --git a/apps/media/l10n/ar.php b/apps/media/l10n/ar.php
new file mode 100644
index 00000000000..a335f36a1f2
--- /dev/null
+++ b/apps/media/l10n/ar.php
@@ -0,0 +1,13 @@
+<?php $TRANSLATIONS = array(
+"Music" => "الموسيقى",
+"Play" => "إلعب",
+"Pause" => "تجميد",
+"Previous" => "السابق",
+"Next" => "التالي",
+"Mute" => "إلغاء الصوت",
+"Unmute" => "تشغيل الصوت",
+"Rescan Collection" => "إعادة البحث عن ملفات الموسيقى",
+"Artist" => "الفنان",
+"Album" => "الألبوم",
+"Title" => "العنوان"
+);
diff --git a/apps/media/l10n/bg_BG.php b/apps/media/l10n/bg_BG.php
index 411ab0a8956..1b71b26a165 100644
--- a/apps/media/l10n/bg_BG.php
+++ b/apps/media/l10n/bg_BG.php
@@ -6,7 +6,6 @@
"Next" => "Следваща",
"Mute" => "Отнеми",
"Unmute" => "Върни",
-"Songs scanned" => "Сканирани песни",
"Rescan Collection" => "Повторно сканиране",
"Artist" => "Артист",
"Album" => "Албум",
diff --git a/apps/media/l10n/ca.php b/apps/media/l10n/ca.php
index f0e24d8514d..6c0a1855f3d 100644
--- a/apps/media/l10n/ca.php
+++ b/apps/media/l10n/ca.php
@@ -6,8 +6,7 @@
"Next" => "Següent",
"Mute" => "Mut",
"Unmute" => "Activa el so",
-"Songs scanned" => "Cançons escanejades",
-"Rescan Collection" => "Escaneja de nou la col·lecció",
+"Rescan Collection" => "Explora de nou la col·lecció",
"Artist" => "Artista",
"Album" => "Àlbum",
"Title" => "Títol"
diff --git a/apps/media/l10n/cs_CZ.php b/apps/media/l10n/cs_CZ.php
index 46b3a7e0940..074b44c03b5 100644
--- a/apps/media/l10n/cs_CZ.php
+++ b/apps/media/l10n/cs_CZ.php
@@ -1,12 +1,11 @@
<?php $TRANSLATIONS = array(
-"Music" => "hudba",
+"Music" => "Hudba",
"Play" => "Přehrát",
"Pause" => "Pauza",
"Previous" => "Předchozí",
"Next" => "Další",
"Mute" => "Ztišit",
"Unmute" => "Zesílit",
-"Songs scanned" => "Skladby jsou prohledány",
"Rescan Collection" => "Znovu prohledat ",
"Artist" => "Umělec",
"Album" => "Album",
diff --git a/apps/media/l10n/da.php b/apps/media/l10n/da.php
index 64cdc59ded5..776081842c3 100644
--- a/apps/media/l10n/da.php
+++ b/apps/media/l10n/da.php
@@ -1,7 +1,11 @@
<?php $TRANSLATIONS = array(
"Music" => "Musik",
+"Play" => "Afspil",
"Pause" => "Pause",
-"Songs scanned" => "Sange skannet",
+"Previous" => "Forrige",
+"Next" => "Næste",
+"Mute" => "Lydløs",
+"Unmute" => "Lyd til",
"Rescan Collection" => "Genskan Samling",
"Artist" => "Kunstner",
"Album" => "Album",
diff --git a/apps/media/l10n/de.php b/apps/media/l10n/de.php
index 7a87f6dcb35..021a7e9bfe4 100644
--- a/apps/media/l10n/de.php
+++ b/apps/media/l10n/de.php
@@ -1,8 +1,12 @@
<?php $TRANSLATIONS = array(
"Music" => "Musik",
+"Play" => "Abspielen",
"Pause" => "Pause",
-"Songs scanned" => "Lieder gescannt",
-"Rescan Collection" => "Sammlung scannen",
+"Previous" => "Vorheriges",
+"Next" => "Nächstes",
+"Mute" => "Ton aus",
+"Unmute" => "Ton an",
+"Rescan Collection" => "Sammlung noch einmal scannen",
"Artist" => "Künstler",
"Album" => "Album",
"Title" => "Titel"
diff --git a/apps/media/l10n/el.php b/apps/media/l10n/el.php
index 6d4b781b78f..9996180c03e 100644
--- a/apps/media/l10n/el.php
+++ b/apps/media/l10n/el.php
@@ -6,7 +6,6 @@
"Next" => "Επόμενο",
"Mute" => "Σίγαση",
"Unmute" => "Επαναφορά ήχου",
-"Songs scanned" => "Σαρωμένα τραγούγια",
"Rescan Collection" => "Επανασάρωση συλλογής",
"Artist" => "Καλλιτέχνης",
"Album" => "Άλμπουμ",
diff --git a/apps/media/l10n/eo.php b/apps/media/l10n/eo.php
new file mode 100644
index 00000000000..a572c15cb4c
--- /dev/null
+++ b/apps/media/l10n/eo.php
@@ -0,0 +1,13 @@
+<?php $TRANSLATIONS = array(
+"Music" => "Muziko",
+"Play" => "Ludi",
+"Pause" => "Paŭzi",
+"Previous" => "Maljena",
+"Next" => "Jena",
+"Mute" => "Silentigi",
+"Unmute" => "Malsilentigi",
+"Rescan Collection" => "Reskani la aron",
+"Artist" => "Verkinto",
+"Album" => "Albumo",
+"Title" => "Titolo"
+);
diff --git a/apps/media/l10n/es.php b/apps/media/l10n/es.php
index b97fb0bf157..8d654fd36cd 100644
--- a/apps/media/l10n/es.php
+++ b/apps/media/l10n/es.php
@@ -6,7 +6,6 @@
"Next" => "Siguiente",
"Mute" => "Silenciar",
"Unmute" => "Sonar",
-"Songs scanned" => "Canciones encontradas",
"Rescan Collection" => "Buscar música nueva",
"Artist" => "Artista",
"Album" => "Álbum",
diff --git a/apps/media/l10n/et_EE.php b/apps/media/l10n/et_EE.php
index c516ca64f26..4133cb84a98 100644
--- a/apps/media/l10n/et_EE.php
+++ b/apps/media/l10n/et_EE.php
@@ -6,7 +6,6 @@
"Next" => "Järgmine",
"Mute" => "Vaikseks",
"Unmute" => "Hääl tagasi",
-"Songs scanned" => "Skännitud lood",
"Rescan Collection" => "Skänni kollekttsiooni uuesti",
"Artist" => "Esitaja",
"Album" => "Album",
diff --git a/apps/media/l10n/eu.php b/apps/media/l10n/eu.php
new file mode 100644
index 00000000000..d30e3519161
--- /dev/null
+++ b/apps/media/l10n/eu.php
@@ -0,0 +1,13 @@
+<?php $TRANSLATIONS = array(
+"Music" => "Musika",
+"Play" => "Erreproduzitu",
+"Pause" => "Pausarazi",
+"Previous" => "Aurrekoa",
+"Next" => "Hurrengoa",
+"Mute" => "Mututu",
+"Unmute" => "Ez Mututu",
+"Rescan Collection" => "Bireskaneatu Bilduma",
+"Artist" => "Artista",
+"Album" => "Albuma",
+"Title" => "Izenburua"
+);
diff --git a/apps/media/l10n/fr.php b/apps/media/l10n/fr.php
index 3e4e0f19283..c96e84d73fd 100644
--- a/apps/media/l10n/fr.php
+++ b/apps/media/l10n/fr.php
@@ -1,7 +1,11 @@
<?php $TRANSLATIONS = array(
"Music" => "Musique",
+"Play" => "Play",
"Pause" => "Pause",
-"Songs scanned" => "Pistes scannées",
+"Previous" => "Précédent",
+"Next" => "Suivant",
+"Mute" => "Muet",
+"Unmute" => "Audible",
"Rescan Collection" => "Réanalyser la Collection",
"Artist" => "Artiste",
"Album" => "Album",
diff --git a/apps/media/l10n/he.php b/apps/media/l10n/he.php
new file mode 100644
index 00000000000..772bfb90281
--- /dev/null
+++ b/apps/media/l10n/he.php
@@ -0,0 +1,13 @@
+<?php $TRANSLATIONS = array(
+"Music" => "מוזיקה",
+"Play" => "נגן",
+"Pause" => "השהה",
+"Previous" => "קודם",
+"Next" => "הבא",
+"Mute" => "השתק",
+"Unmute" => "בטל השתקה",
+"Rescan Collection" => "סריקת אוסף מחדש",
+"Artist" => "מבצע",
+"Album" => "אלבום",
+"Title" => "כותרת"
+);
diff --git a/apps/media/l10n/hr.php b/apps/media/l10n/hr.php
new file mode 100644
index 00000000000..bab149743cf
--- /dev/null
+++ b/apps/media/l10n/hr.php
@@ -0,0 +1,13 @@
+<?php $TRANSLATIONS = array(
+"Music" => "Glazba",
+"Play" => "Reprodukcija",
+"Pause" => "Pauza",
+"Previous" => "Prethodna",
+"Next" => "Sljedeća",
+"Mute" => "Utišaj zvuk",
+"Unmute" => "Uključi zvuk",
+"Rescan Collection" => "Ponovi skeniranje kolekcije",
+"Artist" => "Izvođač",
+"Album" => "Album",
+"Title" => "Naslov"
+);
diff --git a/apps/media/l10n/hu_HU.php b/apps/media/l10n/hu_HU.php
new file mode 100644
index 00000000000..299e0af0287
--- /dev/null
+++ b/apps/media/l10n/hu_HU.php
@@ -0,0 +1,13 @@
+<?php $TRANSLATIONS = array(
+"Music" => "Zene",
+"Play" => "Lejátszás",
+"Pause" => "Szünet",
+"Previous" => "Előző",
+"Next" => "Következő",
+"Mute" => "Némítás",
+"Unmute" => "Némítás megszüntetése",
+"Rescan Collection" => "Gyűjtemény újraolvasása",
+"Artist" => "Előadó",
+"Album" => "Album",
+"Title" => "Cím"
+);
diff --git a/apps/media/l10n/ia.php b/apps/media/l10n/ia.php
new file mode 100644
index 00000000000..597b36e10fa
--- /dev/null
+++ b/apps/media/l10n/ia.php
@@ -0,0 +1,13 @@
+<?php $TRANSLATIONS = array(
+"Music" => "Musica",
+"Play" => "Reproducer",
+"Pause" => "Pausa",
+"Previous" => "Previe",
+"Next" => "Proxime",
+"Mute" => "Mute",
+"Unmute" => "Con sono",
+"Rescan Collection" => "Rescannar collection",
+"Artist" => "Artista",
+"Album" => "Album",
+"Title" => "Titulo"
+);
diff --git a/apps/media/l10n/id.php b/apps/media/l10n/id.php
index 7127f85fbf0..52b0bae0eea 100644
--- a/apps/media/l10n/id.php
+++ b/apps/media/l10n/id.php
@@ -1,7 +1,11 @@
<?php $TRANSLATIONS = array(
"Music" => "Musik",
+"Play" => "Mainkan",
"Pause" => "Jeda",
-"Songs scanned" => "Lagu-lagu yang telah dipindai",
+"Previous" => "Sebelumnya",
+"Next" => "Selanjutnya",
+"Mute" => "Nonaktifkan suara",
+"Unmute" => "Aktifkan suara",
"Rescan Collection" => "Pindai ulang Koleksi",
"Artist" => "Artis",
"Album" => "Album",
diff --git a/apps/media/l10n/it.php b/apps/media/l10n/it.php
index f0d9c606e74..d4bad14a4bb 100644
--- a/apps/media/l10n/it.php
+++ b/apps/media/l10n/it.php
@@ -6,8 +6,7 @@
"Next" => "Successiva",
"Mute" => "Disattiva audio",
"Unmute" => "Riattiva audio",
-"Songs scanned" => "Canzoni analizzate",
-"Rescan Collection" => "Rianalizza colezione",
+"Rescan Collection" => "Rianalizza collezione",
"Artist" => "Artista",
"Album" => "Album",
"Title" => "Titolo"
diff --git a/apps/media/l10n/ja_JP.php b/apps/media/l10n/ja_JP.php
new file mode 100644
index 00000000000..395ebe792eb
--- /dev/null
+++ b/apps/media/l10n/ja_JP.php
@@ -0,0 +1,13 @@
+<?php $TRANSLATIONS = array(
+"Music" => "ミュージック",
+"Play" => "再生",
+"Pause" => "一時停止",
+"Previous" => "前",
+"Next" => "次",
+"Mute" => "ミュート",
+"Unmute" => "ミュート解除",
+"Rescan Collection" => "コレクションを再読み込みする",
+"Artist" => "アーティスト",
+"Album" => "アルバム",
+"Title" => "曲名"
+);
diff --git a/apps/media/l10n/lb.php b/apps/media/l10n/lb.php
index 2c127cf83ed..4a2727fcb11 100644
--- a/apps/media/l10n/lb.php
+++ b/apps/media/l10n/lb.php
@@ -6,7 +6,6 @@
"Next" => "Weider",
"Mute" => "Toun ausmaachen",
"Unmute" => "Toun umaachen",
-"Songs scanned" => "Lidder gescannt",
"Rescan Collection" => "Kollektioun nei scannen",
"Artist" => "Artist",
"Album" => "Album",
diff --git a/apps/media/l10n/lt_LT.php b/apps/media/l10n/lt_LT.php
new file mode 100644
index 00000000000..1761ffdc3b2
--- /dev/null
+++ b/apps/media/l10n/lt_LT.php
@@ -0,0 +1,13 @@
+<?php $TRANSLATIONS = array(
+"Music" => "Muzika",
+"Play" => "Groti",
+"Pause" => "Pristabdyti",
+"Previous" => "Atgal",
+"Next" => "Kitas",
+"Mute" => "Nutildyti",
+"Unmute" => "Įjungti garsą",
+"Rescan Collection" => "Atnaujinti kolekciją",
+"Artist" => "Atlikėjas",
+"Album" => "Albumas",
+"Title" => "Pavadinimas"
+);
diff --git a/apps/media/l10n/ms_MY.php b/apps/media/l10n/ms_MY.php
index 43cc47c81d7..aaa1c3edfb9 100644
--- a/apps/media/l10n/ms_MY.php
+++ b/apps/media/l10n/ms_MY.php
@@ -6,7 +6,6 @@
"Next" => "Seterus",
"Mute" => "Bisu",
"Unmute" => "Nyahbisu",
-"Songs scanned" => "Lagu telah diimbas",
"Rescan Collection" => "Imbas semula koleksi",
"Artist" => "Artis",
"Album" => "Album",
diff --git a/apps/media/l10n/nb_NO.php b/apps/media/l10n/nb_NO.php
index 7afe796bb2c..dbed1526b76 100644
--- a/apps/media/l10n/nb_NO.php
+++ b/apps/media/l10n/nb_NO.php
@@ -6,7 +6,6 @@
"Next" => "Neste",
"Mute" => "Demp",
"Unmute" => "Skru på lyd",
-"Songs scanned" => "Sanger skannet",
"Rescan Collection" => "Skan samling på nytt",
"Artist" => "Artist",
"Album" => "Album",
diff --git a/apps/media/l10n/nl.php b/apps/media/l10n/nl.php
index 7ae0a761af0..705bf2a613c 100644
--- a/apps/media/l10n/nl.php
+++ b/apps/media/l10n/nl.php
@@ -1,7 +1,11 @@
<?php $TRANSLATIONS = array(
"Music" => "Muziek",
-"Pause" => "Pauze",
-"Songs scanned" => "nummers gescanned",
+"Play" => "Afspelen",
+"Pause" => "Pauzeer",
+"Previous" => "Vorige",
+"Next" => "Volgende",
+"Mute" => "Dempen",
+"Unmute" => "Dempen uit",
"Rescan Collection" => "Collectie opnieuw scannen",
"Artist" => "Artiest",
"Album" => "Album",
diff --git a/apps/media/l10n/nn_NO.php b/apps/media/l10n/nn_NO.php
new file mode 100644
index 00000000000..2579c7b6ba0
--- /dev/null
+++ b/apps/media/l10n/nn_NO.php
@@ -0,0 +1,13 @@
+<?php $TRANSLATIONS = array(
+"Music" => "Musikk",
+"Play" => "Spel",
+"Pause" => "Pause",
+"Previous" => "Førre",
+"Next" => "Neste",
+"Mute" => "Demp",
+"Unmute" => "Skru på lyd",
+"Rescan Collection" => "Skann samlinga på nytt",
+"Artist" => "Artist",
+"Album" => "Album",
+"Title" => "Tittel"
+);
diff --git a/apps/media/l10n/pl.php b/apps/media/l10n/pl.php
index bb74d6d578a..3612d714eca 100644
--- a/apps/media/l10n/pl.php
+++ b/apps/media/l10n/pl.php
@@ -1,7 +1,11 @@
<?php $TRANSLATIONS = array(
"Music" => "Muzyka",
+"Play" => "Odtwarzaj",
"Pause" => "Zatrzymaj",
-"Songs scanned" => "Przeskanowane utwory",
+"Previous" => "Poprzedni",
+"Next" => "Następny",
+"Mute" => "Wycisz",
+"Unmute" => "Włącz",
"Rescan Collection" => "Przeskanuj kolekcję",
"Artist" => "Artysta",
"Album" => "Album",
diff --git a/apps/media/l10n/pt_BR.php b/apps/media/l10n/pt_BR.php
index ac5b1c22d7d..6a1289cfa83 100644
--- a/apps/media/l10n/pt_BR.php
+++ b/apps/media/l10n/pt_BR.php
@@ -6,7 +6,6 @@
"Next" => "Próximo",
"Mute" => "Mudo",
"Unmute" => "Não Mudo",
-"Songs scanned" => "Músicas encontradas",
"Rescan Collection" => "Atualizar a Coleção",
"Artist" => "Artista",
"Album" => "Álbum",
diff --git a/apps/media/l10n/ro.php b/apps/media/l10n/ro.php
index a185a958f71..17711d61dc9 100644
--- a/apps/media/l10n/ro.php
+++ b/apps/media/l10n/ro.php
@@ -6,7 +6,6 @@
"Next" => "Următor",
"Mute" => "Fără sonor",
"Unmute" => "Cu sonor",
-"Songs scanned" => "Melodii scanate",
"Rescan Collection" => "Rescanează colecția",
"Artist" => "Artist",
"Album" => "Album",
diff --git a/apps/media/l10n/ru.php b/apps/media/l10n/ru.php
index d0934a73363..5426332a1b0 100644
--- a/apps/media/l10n/ru.php
+++ b/apps/media/l10n/ru.php
@@ -6,7 +6,6 @@
"Next" => "Следующий",
"Mute" => "Отключить звук",
"Unmute" => "Включить звук",
-"Songs scanned" => "Песен просканировано",
"Rescan Collection" => "Пересканировать коллекцию",
"Artist" => "Исполнитель",
"Album" => "Альбом",
diff --git a/apps/media/l10n/sk_SK.php b/apps/media/l10n/sk_SK.php
new file mode 100644
index 00000000000..05f52d76d88
--- /dev/null
+++ b/apps/media/l10n/sk_SK.php
@@ -0,0 +1,13 @@
+<?php $TRANSLATIONS = array(
+"Music" => "Hudba",
+"Play" => "Prehrať",
+"Pause" => "Pauza",
+"Previous" => "Predchádzajúce",
+"Next" => "Ďalšie",
+"Mute" => "Stlmiť",
+"Unmute" => "Nahlas",
+"Rescan Collection" => "Znovu skenovať Zbierku",
+"Artist" => "Umelec",
+"Album" => "Album",
+"Title" => "Názov"
+);
diff --git a/apps/media/l10n/sl.php b/apps/media/l10n/sl.php
new file mode 100644
index 00000000000..e7c0dd0c57b
--- /dev/null
+++ b/apps/media/l10n/sl.php
@@ -0,0 +1,13 @@
+<?php $TRANSLATIONS = array(
+"Music" => "Glasba",
+"Play" => "Predvajaj",
+"Pause" => "Pavza",
+"Previous" => "Prejšnja",
+"Next" => "Naslednja",
+"Mute" => "Izključi zvok",
+"Unmute" => "Vključi zvok",
+"Rescan Collection" => "Skeniraj zbirko",
+"Artist" => "Izvajalec",
+"Album" => "Album",
+"Title" => "Naslov"
+);
diff --git a/apps/media/l10n/sr.php b/apps/media/l10n/sr.php
index 7440bf43019..dff0daf4358 100644
--- a/apps/media/l10n/sr.php
+++ b/apps/media/l10n/sr.php
@@ -6,7 +6,6 @@
"Next" => "Следећа",
"Mute" => "Искључи звук",
"Unmute" => "Укључи звук",
-"Songs scanned" => "Претражених песама",
"Rescan Collection" => "Поново претражи збирку",
"Artist" => "Извођач",
"Album" => "Албум",
diff --git a/apps/media/l10n/sr@latin.php b/apps/media/l10n/sr@latin.php
index fecdb0a5a74..6476898387b 100644
--- a/apps/media/l10n/sr@latin.php
+++ b/apps/media/l10n/sr@latin.php
@@ -6,7 +6,6 @@
"Next" => "Sledeća",
"Mute" => "Isključi zvuk",
"Unmute" => "Uključi zvuk",
-"Songs scanned" => "Pretraženih pesama",
"Rescan Collection" => "Ponovo pretraži zbirku",
"Artist" => "Izvođač",
"Album" => "Album",
diff --git a/apps/media/l10n/sv.php b/apps/media/l10n/sv.php
index f20fb2c6a57..75670a48515 100644
--- a/apps/media/l10n/sv.php
+++ b/apps/media/l10n/sv.php
@@ -6,7 +6,6 @@
"Next" => "Nästa",
"Mute" => "Ljudlös",
"Unmute" => "Ljud på",
-"Songs scanned" => "Skannade låtar",
"Rescan Collection" => "Sök igenom samlingen",
"Artist" => "Artist",
"Album" => "Album",
diff --git a/apps/media/l10n/tr.php b/apps/media/l10n/tr.php
new file mode 100644
index 00000000000..1eaf98145ac
--- /dev/null
+++ b/apps/media/l10n/tr.php
@@ -0,0 +1,13 @@
+<?php $TRANSLATIONS = array(
+"Music" => "Müzik",
+"Play" => "Oynat",
+"Pause" => "Beklet",
+"Previous" => "Önceki",
+"Next" => "Sonraki",
+"Mute" => "Sesi kapat",
+"Unmute" => "Sesi aç",
+"Rescan Collection" => "Koleksiyonu Tara",
+"Artist" => "Sanatç",
+"Album" => "Albüm",
+"Title" => "Başlık"
+);
diff --git a/apps/media/l10n/zh_CN.php b/apps/media/l10n/zh_CN.php
index 4747dfd30e7..0b24cf3fe0d 100644
--- a/apps/media/l10n/zh_CN.php
+++ b/apps/media/l10n/zh_CN.php
@@ -6,7 +6,6 @@
"Next" => "后一首",
"Mute" => "静音",
"Unmute" => "取消静音",
-"Songs scanned" => "歌曲已扫描",
"Rescan Collection" => "重新扫描收藏",
"Artist" => "艺术家",
"Album" => "专辑",
diff --git a/apps/media/lib_collection.php b/apps/media/lib_collection.php
index 1240f1de2f0..d8dda1212e4 100644
--- a/apps/media/lib_collection.php
+++ b/apps/media/lib_collection.php
@@ -121,14 +121,19 @@ class OC_MEDIA_COLLECTION{
* @return array the list of artists found
*/
static public function getArtists($search='%',$exact=false){
+ $uid=self::$uid;
+ if(empty($uid)){
+ $uid=self::$uid=$_SESSION['user_id'];
+ }
if(!$exact and $search!='%'){
$search="%$search%";
}elseif($search==''){
$search='%';
}
- $query=OC_DB::prepare("SELECT DISTINCT *PREFIX*media_artists.artist_name AS artist_name , *PREFIX*media_artists.artist_id AS artist_id FROM *PREFIX*media_artists
- INNER JOIN *PREFIX*media_songs ON *PREFIX*media_artists.artist_id=*PREFIX*media_songs.song_artist WHERE artist_name LIKE ? AND *PREFIX*media_songs.song_user=? ORDER BY artist_name");
- return $query->execute(array($search,self::$uid))->fetchAll();
+ $query=OC_DB::prepare("SELECT DISTINCT artist_name, artist_id FROM *PREFIX*media_artists
+ INNER JOIN *PREFIX*media_songs ON artist_id=song_artist WHERE artist_name LIKE ? AND song_user=? ORDER BY artist_name");
+ $result=$query->execute(array($search,self::$uid));
+ return $result->fetchAll();
}
/**
@@ -159,20 +164,25 @@ class OC_MEDIA_COLLECTION{
* @return array the list of albums found
*/
static public function getAlbums($artist=0,$search='%',$exact=false){
- $cmd="SELECT DISTINCT *PREFIX*media_albums.album_name AS album_name , *PREFIX*media_albums.album_artist AS album_artist , *PREFIX*media_albums.album_id AS album_id
- FROM *PREFIX*media_albums INNER JOIN *PREFIX*media_songs ON *PREFIX*media_albums.album_id=*PREFIX*media_songs.song_album WHERE *PREFIX*media_songs.song_user=? ORDER BY album_name";
+ $uid=self::$uid;
+ if(empty($uid)){
+ $uid=self::$uid=$_SESSION['user_id'];
+ }
+ $cmd="SELECT DISTINCT album_name, album_artist, album_id
+ FROM *PREFIX*media_albums INNER JOIN *PREFIX*media_songs ON album_id=song_album WHERE song_user=? ";
$params=array(self::$uid);
if($artist!=0){
- $cmd.="AND *PREFIX*media_albums.album_artist = ? ";
+ $cmd.="AND album_artist = ? ";
array_push($params,$artist);
}
if($search!='%'){
- $cmd.="AND *PREFIX*media_albums.album_name LIKE ? ";
+ $cmd.="AND album_name LIKE ? ";
if(!$exact){
$search="%$search%";
}
array_push($params,$search);
}
+ $cmd.=' ORDER BY album_name';
$query=OC_DB::prepare($cmd);
return $query->execute($params)->fetchAll();
}
diff --git a/apps/media/templates/player.php b/apps/media/templates/player.php
index 295f33ab9e0..146c743250e 100644
--- a/apps/media/templates/player.php
+++ b/apps/media/templates/player.php
@@ -6,7 +6,7 @@ if(!isset($_)){//allow the template to be loaded standalone
exit;
}
?>
-Music
+<?php echo $l->t('Music');?>
<div class='player-controls' id="playercontrols">
<div class="player" id="jp-player"></div>
<ul class="jp-controls">
diff --git a/core/css/jquery-ui-1.8.14.custom.css b/core/css/jquery-ui-1.8.16.custom.css
index 887e4b5e57b..add1c6af08c 100644..100755
--- a/core/css/jquery-ui-1.8.14.custom.css
+++ b/core/css/jquery-ui-1.8.16.custom.css
@@ -1,5 +1,5 @@
/*
- * jQuery UI CSS Framework 1.8.14
+ * jQuery UI CSS Framework 1.8.16
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
@@ -33,9 +33,6 @@
/* states and images */
.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
-/* states and images */
-.ui-icon { width: 16px; height: 16px; }
-.ui-icon-closethick { background-image: url(../img/actions/delete.png); }
/* Misc visuals
----------------------------------*/
@@ -45,7 +42,7 @@
/*
- * jQuery UI CSS Framework 1.8.14
+ * jQuery UI CSS Framework 1.8.16
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
@@ -53,40 +50,43 @@
*
* http://docs.jquery.com/UI/Theming/API
*
- * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
+ * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault="Lucida%20Grande",%20Arial,%20Verdana,%20sans-serif&fwDefault=bold&fsDefault=1em&cornerRadius=4px&bgColorHeader=1d2d44&bgTextureHeader=01_flat.png&bgImgOpacityHeader=35&borderColorHeader=1d2d44&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f8f8f8&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=ddd&fcDefault=555&iconColorDefault=1d2d44&bgColorHover=ffffff&bgTextureHover=01_flat.png&bgImgOpacityHover=100&borderColorHover=ddd&fcHover=333&iconColorHover=1d2d44&bgColorActive=f8f8f8&bgTextureActive=02_glass.png&bgImgOpacityActive=100&borderColorActive=1d2d44&fcActive=1d2d44&iconColorActive=1d2d44&bgColorHighlight=f8f8f8&bgTextureHighlight=04_highlight_hard.png&bgImgOpacityHighlight=100&borderColorHighlight=ddd&fcHighlight=555&iconColorHighlight=ffffff&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
*/
/* Component containers
----------------------------------*/
-.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; }
+.ui-widget { font-family: \\\"Lucida Grande\\\", Arial, Verdana, sans-serif; font-size: 1em; }
.ui-widget .ui-widget { font-size: 1em; }
-.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; }
-.ui-widget-content { border: 1px solid #dddddd; background: #eeeeee 50% top repeat-x; color: #333333; }
+.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: \\\"Lucida Grande\\\", Arial, Verdana, sans-serif; font-size: 1em; }
+.ui-widget-content { border: 1px solid #dddddd; background: #eeeeee; color: #333333; }
.ui-widget-content a { color: #333333; }
-.ui-widget-header { border: 1px solid #e78f08; background: #f6a828 50% 50% repeat-x; color: #ffffff; font-weight: bold; }
+.ui-widget-header { border: 1px solid #1d2d44; background: #1d2d44; color: #ffffff; font-weight: bold; }
.ui-widget-header a { color: #ffffff; }
/* Interaction states
----------------------------------*/
-.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 50% 50% repeat-x; font-weight: bold; color: #1c94c4; }
-.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; }
-.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce 50% 50% repeat-x; font-weight: bold; color: #c77405; }
-.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; }
-.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #fbd850; background: #ffffff 50% 50% repeat-x; font-weight: bold; color: #eb8f00; }
-.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; text-decoration: none; }
+.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #ddd; background: #f8f8f8; font-weight: bold; color: #555; }
+.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555; text-decoration: none; }
+.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #ddd; background: #ffffff; font-weight: bold; color: #333; }
+.ui-state-hover a, .ui-state-hover a:hover { color: #333; text-decoration: none; }
+.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #1d2d44; background: #f8f8f8; font-weight: bold; color: #1d2d44; }
+.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #1d2d44; text-decoration: none; }
.ui-widget :active { outline: none; }
/* Interaction Cues
----------------------------------*/
-.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fed22f; background: #ffe45c 50% top repeat-x; color: #363636; }
-.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
-.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 50% 50% repeat; color: #ffffff; }
-.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; }
-.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; }
-.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
-.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
-.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
+.ui-state-disabled { cursor: default !important; }
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
+
+/* states and images */
+.ui-icon { width: 16px; height: 16px; }
+.ui-icon-closethick { background-image: url(../img/actions/delete.png); }
/* Misc visuals
@@ -99,9 +99,9 @@
.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; -khtml-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
/* Overlays */
-.ui-widget-overlay { background: #666666 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); }
-.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -khtml-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/*
- * jQuery UI Resizable 1.8.14
+.ui-widget-overlay { background: #666666; opacity: .50;filter:Alpha(Opacity=50); }
+.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -khtml-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/*
+ * jQuery UI Resizable 1.8.16
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
@@ -120,7 +120,7 @@
.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*
- * jQuery UI Selectable 1.8.14
+ * jQuery UI Selectable 1.8.16
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
@@ -130,26 +130,7 @@
*/
.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
/*
- * jQuery UI Accordion 1.8.14
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Accordion#theming
- */
-/* IE/Win - Fix animation bug - #4615 */
-.ui-accordion { width: 100%; }
-.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
-.ui-accordion .ui-accordion-li-fix { display: inline; }
-.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
-.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }
-.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
-.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
-.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
-.ui-accordion .ui-accordion-content-active { display: block; }
-/*
- * jQuery UI Autocomplete 1.8.14
+ * jQuery UI Autocomplete 1.8.16
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
@@ -163,7 +144,7 @@
* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
/*
- * jQuery UI Menu 1.8.14
+ * jQuery UI Menu 1.8.16
*
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
@@ -202,7 +183,7 @@
margin: -1px;
}
/*
- * jQuery UI Button 1.8.14
+ * jQuery UI Button 1.8.16
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
@@ -240,7 +221,7 @@ input.ui-button { padding: .4em 1em; }
/* workarounds */
button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
/*
- * jQuery UI Dialog 1.8.14
+ * jQuery UI Dialog 1.8.16
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
@@ -251,7 +232,7 @@ button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra pad
.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; }
.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; }
-.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
+.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; background-color: #EEE;}
.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
@@ -261,7 +242,7 @@ button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra pad
.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
.ui-draggable .ui-dialog-titlebar { cursor: move; }
/*
- * jQuery UI Slider 1.8.14
+ * jQuery UI Slider 1.8.16
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
@@ -284,7 +265,7 @@ button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra pad
.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
.ui-slider-vertical .ui-slider-range-max { top: 0; }/*
- * jQuery UI Tabs 1.8.14
+ * jQuery UI Tabs 1.8.16
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
@@ -302,7 +283,7 @@ button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra pad
.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
.ui-tabs .ui-tabs-hide { display: none !important; }
/*
- * jQuery UI Datepicker 1.8.14
+ * jQuery UI Datepicker 1.8.16
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
@@ -369,7 +350,7 @@ button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra pad
width: 200px; /*must have*/
height: 200px; /*must have*/
}/*
- * jQuery UI Progressbar 1.8.14
+ * jQuery UI Progressbar 1.8.16
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
@@ -378,4 +359,4 @@ button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra pad
* http://docs.jquery.com/UI/Progressbar#theming
*/
.ui-progressbar { height:2em; text-align: left; }
-.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
+.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; } \ No newline at end of file
diff --git a/core/css/multiselect.css b/core/css/multiselect.css
index ee426351769..1202ea18427 100644
--- a/core/css/multiselect.css
+++ b/core/css/multiselect.css
@@ -1,4 +1,5 @@
ul.multiselectoptions { z-index:49; position:absolute; background-color:#fff; padding-top:.5em; border:1px solid #ddd; border-top:none; -moz-border-radius-bottomleft:.5em; -webkit-border-bottom-left-radius:.5em; border-bottom-left-radius:.5em; -moz-border-radius-bottomright:.5em; -webkit-border-bottom-right-radius:.5em; border-bottom-right-radius:.5em; -moz-box-shadow:0 1px 1px #ddd; -webkit-box-shadow:0 1px 1px #ddd; box-shadow:0 1px 1px #ddd; }
+ul.multiselectoptions>li{ white-space:nowrap; overflow: hidden; }
div.multiselect { padding-right:.6em; display:inline; position:relative; display:inline-block; vertical-align: bottom; }
div.multiselect.active { background-color:#fff; border-bottom:none; border-bottom-left-radius:0; border-bottom-right-radius:0; z-index:50; position:relative }
div.multiselect>span:first-child { margin-right:2em; float:left; }
diff --git a/core/css/styles.css b/core/css/styles.css
index d1c648383c0..53af8b383e3 100644
--- a/core/css/styles.css
+++ b/core/css/styles.css
@@ -57,7 +57,7 @@ input[type="submit"].highlight{ background:#ffc100; border:1px solid #db0; text-
#controls .button { display:inline-block; }
#content { margin:3.5em 0 0 12.5em; }
#leftcontent, .leftcontent { position:fixed; overflow: auto; top:6.4em; width:20em; background:#f8f8f8; border-right:1px solid #ddd; }
-#leftcontent li, .leftcontent li { padding:.3em .8em; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; -webkit-transition:background-color 500ms; -moz-transition:background-color 500ms; -o-transition:background-color 500ms; transition:background-color 500ms; }
+#leftcontent li, .leftcontent li { background:#f8f8f8; padding:.3em .8em; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; -webkit-transition:background-color 500ms; -moz-transition:background-color 500ms; -o-transition:background-color 500ms; transition:background-color 500ms; }
#leftcontent li:hover, #leftcontent li:active, #leftcontent li.active, .leftcontent li:hover, .leftcontent li:active, .leftcontent li.active { background:#eee; }
#rightcontent, .rightcontent { position:absolute; top:6.4em; left:33em; }
@@ -106,6 +106,7 @@ label.infield { cursor: text !important; }
#notification { z-index:101; cursor:pointer; background-color:#fc4; border:0; padding:0 .7em .3em; display:none; position:fixed; left:50%; top:0; -moz-border-radius-bottomleft:1em; -webkit-border-bottom-left-radius:1em; border-bottom-left-radius:1em; -moz-border-radius-bottomright:1em; -webkit-border-bottom-right-radius:1em; border-bottom-right-radius:1em; }
.action, .selectedActions a, #logout { opacity:.3; -webkit-transition:opacity 500ms; -moz-transition:opacity 500ms; -o-transition:opacity 500ms; transition:opacity 500ms; }
+.action { width: 16px; height: 16px; }
.action:hover, .selectedActions a:hover, #logout:hover { opacity:1; }
table:not(.nostyle) tr { -webkit-transition:background-color 500ms; -moz-transition:background-color 500ms; -o-transition:background-color 500ms; transition:background-color 500ms; }
@@ -125,4 +126,5 @@ div.jp-play-bar, div.jp-seek-bar { padding:0; }
li.error { width:640px; margin:4em auto; padding:1em 1em 1em 4em; background:#ffe .8em .8em no-repeat; color: #FF3B3B; border:1px solid #ccc; -moz-border-radius:10px; -webkit-border-radius:10px; border-radius:10px; }
.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { overflow: hidden; text-overflow: ellipsis; }
-.hint { background-image: url('/core/img/actions/info.png'); background-repeat:no-repeat; color: #777777; padding-left: 25px; background-position: 0 0.3em;} \ No newline at end of file
+.hint { background-image: url('/core/img/actions/info.png'); background-repeat:no-repeat; color: #777777; padding-left: 25px; background-position: 0 0.3em;}
+.separator { display: inline; border-left: 1px solid #d3d3d3; border-right: 1px solid #fff; height: 10px; width:0px; margin: 4px; } \ No newline at end of file
diff --git a/core/img/filetypes/vcf.png b/core/img/filetypes/text-vcard.png
index c02f315d207..c02f315d207 100644
--- a/core/img/filetypes/vcf.png
+++ b/core/img/filetypes/text-vcard.png
Binary files differ
diff --git a/core/js/jquery-ui-1.8.14.custom.min.js b/core/js/jquery-ui-1.8.16.custom.min.js
index f9e4f1e8400..eefefa8579d 100644..100755
--- a/core/js/jquery-ui-1.8.14.custom.min.js
+++ b/core/js/jquery-ui-1.8.16.custom.min.js
@@ -1,5 +1,5 @@
/*!
- * jQuery UI 1.8.14
+ * jQuery UI 1.8.16
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
@@ -7,16 +7,17 @@
*
* http://docs.jquery.com/UI
*/
-(function(c,j){function k(a,b){var d=a.nodeName.toLowerCase();if("area"===d){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&l(a)}return(/input|select|textarea|button|object/.test(d)?!a.disabled:"a"==d?a.href||b:b)&&l(a)}function l(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.14",
-keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=this;setTimeout(function(){c(d).focus();
-b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,
-"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",
-function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,m,n){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(m)g-=parseFloat(c.curCSS(f,"border"+this+"Width",true))||0;if(n)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight,outerWidth:c.fn.outerWidth,
-outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c(this).css(h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c(this).css(h,d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){return k(a,!isNaN(c.attr(a,"tabindex")))},tabbable:function(a){var b=c.attr(a,"tabindex"),d=isNaN(b);
-return(d||b>=0)&&k(a,!d)}});c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e=
-0;e<b.length;e++)a.options[b[e][0]]&&b[e][1].apply(a.element,d)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(a,b){if(c(a).css("overflow")==="hidden")return false;b=b&&b==="left"?"scrollLeft":"scrollTop";var d=false;if(a[b]>0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a<b+d},isOver:function(a,b,d,e,h,i){return c.ui.isOverAxis(a,d,h)&&c.ui.isOverAxis(b,e,i)}})}})(jQuery);
+(function(c,j){function k(a,b){var d=a.nodeName.toLowerCase();if("area"===d){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&l(a)}return(/input|select|textarea|button|object/.test(d)?!a.disabled:"a"==d?a.href||b:b)&&l(a)}function l(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.16",
+keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({propAttr:c.fn.prop||c.fn.attr,_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=
+this;setTimeout(function(){c(d).focus();b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,
+"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart":
+"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,m,n){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(m)g-=parseFloat(c.curCSS(f,"border"+this+"Width",true))||0;if(n)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight,
+outerWidth:c.fn.outerWidth,outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c(this).css(h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c(this).css(h,d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){return k(a,!isNaN(c.attr(a,"tabindex")))},tabbable:function(a){var b=c.attr(a,
+"tabindex"),d=isNaN(b);return(d||b>=0)&&k(a,!d)}});c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&
+a.element[0].parentNode)for(var e=0;e<b.length;e++)a.options[b[e][0]]&&b[e][1].apply(a.element,d)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(a,b){if(c(a).css("overflow")==="hidden")return false;b=b&&b==="left"?"scrollLeft":"scrollTop";var d=false;if(a[b]>0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a<b+d},isOver:function(a,b,d,e,h,i){return c.ui.isOverAxis(a,d,h)&&
+c.ui.isOverAxis(b,e,i)}})}})(jQuery);
;/*!
- * jQuery UI Widget 1.8.14
+ * jQuery UI Widget 1.8.16
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
@@ -24,14 +25,14 @@ return(d||b>=0)&&k(a,!d)}});c(function(){var a=document.body,b=a.appendChild(b=d
*
* http://docs.jquery.com/UI/Widget
*/
-(function(b,j){if(b.cleanData){var k=b.cleanData;b.cleanData=function(a){for(var c=0,d;(d=a[c])!=null;c++)b(d).triggerHandler("remove");k(a)}}else{var l=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add([this]).each(function(){b(this).triggerHandler("remove")});return l.call(b(this),a,c)})}}b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=function(h){return!!b.data(h,
-a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend(true,{},c.options);b[e][a].prototype=b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):d;if(e&&d.charAt(0)==="_")return h;
-e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==j){h=i;return false}}):this.each(function(){var g=b.data(this,a);g?g.option(d||{})._init():b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){b.data(c,this.widgetName,this);this.element=b(c);this.options=b.extend(true,{},this.options,
-this._getCreateOptions(),a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},
-widget:function(){return this.element},option:function(a,c){var d=a;if(arguments.length===0)return b.extend({},this.options);if(typeof a==="string"){if(c===j)return this.options[a];d={};d[a]=c}this._setOptions(d);return this},_setOptions:function(a){var c=this;b.each(a,function(d,e){c._setOption(d,e)});return this},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",c);return this},
-enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a=b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery);
+(function(b,j){if(b.cleanData){var k=b.cleanData;b.cleanData=function(a){for(var c=0,d;(d=a[c])!=null;c++)try{b(d).triggerHandler("remove")}catch(e){}k(a)}}else{var l=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(d){}});return l.call(b(this),a,c)})}}b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=
+function(h){return!!b.data(h,a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend(true,{},c.options);b[e][a].prototype=b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):
+d;if(e&&d.charAt(0)==="_")return h;e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==j){h=i;return false}}):this.each(function(){var g=b.data(this,a);g?g.option(d||{})._init():b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){b.data(c,this.widgetName,this);this.element=b(c);this.options=
+b.extend(true,{},this.options,this._getCreateOptions(),a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+
+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(a,c){var d=a;if(arguments.length===0)return b.extend({},this.options);if(typeof a==="string"){if(c===j)return this.options[a];d={};d[a]=c}this._setOptions(d);return this},_setOptions:function(a){var c=this;b.each(a,function(d,e){c._setOption(d,e)});return this},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",
+c);return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a=b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery);
;/*!
- * jQuery UI Mouse 1.8.14
+ * jQuery UI Mouse 1.8.16
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
@@ -42,13 +43,13 @@ enable:function(){return this._setOption("disabled",false)},disable:function(){r
* Depends:
* jquery.ui.widget.js
*/
-(function(b){var d=false;b(document).mousedown(function(){d=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var a=this;this.element.bind("mousedown."+this.widgetName,function(c){return a._mouseDown(c)}).bind("click."+this.widgetName,function(c){if(true===b.data(c.target,a.widgetName+".preventClickEvent")){b.removeData(c.target,a.widgetName+".preventClickEvent");c.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+
-this.widgetName)},_mouseDown:function(a){if(!d){this._mouseStarted&&this._mouseUp(a);this._mouseDownEvent=a;var c=this,f=a.which==1,g=typeof this.options.cancel=="string"?b(a.target).closest(this.options.cancel).length:false;if(!f||g||!this._mouseCapture(a))return true;this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet)this._mouseDelayTimer=setTimeout(function(){c.mouseDelayMet=true},this.options.delay);if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a)){this._mouseStarted=this._mouseStart(a)!==
-false;if(!this._mouseStarted){a.preventDefault();return true}}true===b.data(a.target,this.widgetName+".preventClickEvent")&&b.removeData(a.target,this.widgetName+".preventClickEvent");this._mouseMoveDelegate=function(e){return c._mouseMove(e)};this._mouseUpDelegate=function(e){return c._mouseUp(e)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);a.preventDefault();return d=true}},_mouseMove:function(a){if(b.browser.msie&&
+(function(b){var d=false;b(document).mouseup(function(){d=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var a=this;this.element.bind("mousedown."+this.widgetName,function(c){return a._mouseDown(c)}).bind("click."+this.widgetName,function(c){if(true===b.data(c.target,a.widgetName+".preventClickEvent")){b.removeData(c.target,a.widgetName+".preventClickEvent");c.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+
+this.widgetName)},_mouseDown:function(a){if(!d){this._mouseStarted&&this._mouseUp(a);this._mouseDownEvent=a;var c=this,f=a.which==1,g=typeof this.options.cancel=="string"&&a.target.nodeName?b(a.target).closest(this.options.cancel).length:false;if(!f||g||!this._mouseCapture(a))return true;this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet)this._mouseDelayTimer=setTimeout(function(){c.mouseDelayMet=true},this.options.delay);if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a)){this._mouseStarted=
+this._mouseStart(a)!==false;if(!this._mouseStarted){a.preventDefault();return true}}true===b.data(a.target,this.widgetName+".preventClickEvent")&&b.removeData(a.target,this.widgetName+".preventClickEvent");this._mouseMoveDelegate=function(e){return c._mouseMove(e)};this._mouseUpDelegate=function(e){return c._mouseUp(e)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);a.preventDefault();return d=true}},_mouseMove:function(a){if(b.browser.msie&&
!(document.documentMode>=9)&&!a.button)return this._mouseUp(a);if(this._mouseStarted){this._mouseDrag(a);return a.preventDefault()}if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,a)!==false)?this._mouseDrag(a):this._mouseUp(a);return!this._mouseStarted},_mouseUp:function(a){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=
false;a.target==this._mouseDownEvent.target&&b.data(a.target,this.widgetName+".preventClickEvent",true);this._mouseStop(a)}return false},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery);
;/*
- * jQuery UI Position 1.8.14
+ * jQuery UI Position 1.8.16
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
@@ -64,7 +65,7 @@ d>0?b.left-d:Math.max(b.left-a.collisionPosition.left,b.left)},top:function(b,a)
a.collisionPosition.left<0?g+e+h:d>0?g+e+h:0}},top:function(b,a){if(a.at[1]!=="center"){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();var g=a.my[1]==="top"?-a.elemHeight:a.my[1]==="bottom"?a.elemHeight:0,e=a.at[1]==="top"?a.targetHeight:-a.targetHeight,h=-2*a.offset[1];b.top+=a.collisionPosition.top<0?g+e+h:d>0?g+e+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(b,a){if(/static/.test(c.curCSS(b,"position")))b.style.position="relative";var d=c(b),
g=d.offset(),e=parseInt(c.curCSS(b,"top",true),10)||0,h=parseInt(c.curCSS(b,"left",true),10)||0;g={top:a.top-g.top+e,left:a.left-g.left+h};"using"in a?a.using.call(b,g):d.css(g)};c.fn.offset=function(b){var a=this[0];if(!a||!a.ownerDocument)return null;if(b)return this.each(function(){c.offset.setOffset(this,b)});return u.call(this)}}})(jQuery);
;/*
- * jQuery UI Draggable 1.8.14
+ * jQuery UI Draggable 1.8.16
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
@@ -79,8 +80,8 @@ g=d.offset(),e=parseInt(c.curCSS(b,"top",true),10)||0,h=parseInt(c.curCSS(b,"lef
*/
(function(d){d.widget("ui.draggable",d.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper==
"original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(a){var b=
-this.options;if(this.helper||b.disabled||d(a.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(a);if(!this.handle)return false;d(b.iframeFix===true?"iframe":b.iframeFix).each(function(){d('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(d(this).offset()).appendTo("body")});return true},_mouseStart:function(a){var b=this.options;this.helper=
-this._createHelper(a);this._cacheHelperProportions();if(d.ui.ddmanager)d.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});
+this.options;if(this.helper||b.disabled||d(a.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(a);if(!this.handle)return false;if(b.iframeFix)d(b.iframeFix===true?"iframe":b.iframeFix).each(function(){d('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(d(this).offset()).appendTo("body")});return true},_mouseStart:function(a){var b=this.options;
+this.helper=this._createHelper(a);this._cacheHelperProportions();if(d.ui.ddmanager)d.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});
this.originalPosition=this.position=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);b.containment&&this._setContainment();if(this._trigger("start",a)===false){this._clear();return false}this._cacheHelperProportions();d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(a,true);d.ui.ddmanager&&d.ui.ddmanager.dragStart(this,a);return true},
_mouseDrag:function(a,b){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!b){b=this._uiHash();if(this._trigger("drag",a,b)===false){this._mouseUp({});return false}this.position=b.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);return false},_mouseStop:function(a){var b=
false;if(d.ui.ddmanager&&!this.options.dropBehaviour)b=d.ui.ddmanager.drop(this,a);if(this.dropped){b=this.dropped;this.dropped=false}if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return false;if(this.options.revert=="invalid"&&!b||this.options.revert=="valid"&&b||this.options.revert===true||d.isFunction(this.options.revert)&&this.options.revert.call(this.element,b)){var c=this;d(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,
@@ -98,7 +99,7 @@ this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&d.browser
if(a.pageY-this.offset.click.top<g[1])h=g[1]+this.offset.click.top;if(a.pageX-this.offset.click.left>g[2])e=g[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>g[3])h=g[3]+this.offset.click.top}if(b.grid){h=b.grid[1]?this.originalPageY+Math.round((h-this.originalPageY)/b.grid[1])*b.grid[1]:this.originalPageY;h=g?!(h-this.offset.click.top<g[1]||h-this.offset.click.top>g[3])?h:!(h-this.offset.click.top<g[1])?h-b.grid[1]:h+b.grid[1]:h;e=b.grid[0]?this.originalPageX+Math.round((e-this.originalPageX)/
b.grid[0])*b.grid[0]:this.originalPageX;e=g?!(e-this.offset.click.left<g[0]||e-this.offset.click.left>g[2])?e:!(e-this.offset.click.left<g[0])?e-b.grid[0]:e+b.grid[0]:e}}return{top:h-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop()),left:e-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&d.browser.version<
526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove();this.helper=null;this.cancelHelperRemoval=false},_trigger:function(a,b,c){c=c||this._uiHash();d.ui.plugin.call(this,a,[b,c]);if(a=="drag")this.positionAbs=this._convertPositionTo("absolute");return d.Widget.prototype._trigger.call(this,a,b,
-c)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}});d.extend(d.ui.draggable,{version:"1.8.14"});d.ui.plugin.add("draggable","connectToSortable",{start:function(a,b){var c=d(this).data("draggable"),f=c.options,e=d.extend({},b,{item:c.element});c.sortables=[];d(f.connectToSortable).each(function(){var h=d.data(this,"sortable");if(h&&!h.options.disabled){c.sortables.push({instance:h,shouldRevert:h.options.revert});
+c)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}});d.extend(d.ui.draggable,{version:"1.8.16"});d.ui.plugin.add("draggable","connectToSortable",{start:function(a,b){var c=d(this).data("draggable"),f=c.options,e=d.extend({},b,{item:c.element});c.sortables=[];d(f.connectToSortable).each(function(){var h=d.data(this,"sortable");if(h&&!h.options.disabled){c.sortables.push({instance:h,shouldRevert:h.options.revert});
h.refreshPositions();h._trigger("activate",a,e)}})},stop:function(a,b){var c=d(this).data("draggable"),f=d.extend({},b,{item:c.element});d.each(c.sortables,function(){if(this.instance.isOver){this.instance.isOver=0;c.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert)this.instance.options.revert=true;this.instance._mouseStop(a);this.instance.options.helper=this.instance.options._helper;c.options.helper=="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})}else{this.instance.cancelHelperRemoval=
false;this.instance._trigger("deactivate",a,f)}})},drag:function(a,b){var c=d(this).data("draggable"),f=this;d.each(c.sortables,function(){this.instance.positionAbs=c.positionAbs;this.instance.helperProportions=c.helperProportions;this.instance.offset.click=c.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=1;this.instance.currentItem=d(f).clone().removeAttr("id").appendTo(this.instance.element).data("sortable-item",true);
this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return b.helper[0]};a.target=this.instance.currentItem[0];this.instance._mouseCapture(a,true);this.instance._mouseStart(a,true,true);this.instance.offset.click.top=c.offset.click.top;this.instance.offset.click.left=c.offset.click.left;this.instance.offset.parent.left-=c.offset.parent.left-this.instance.offset.parent.left;this.instance.offset.parent.top-=c.offset.parent.top-this.instance.offset.parent.top;
@@ -114,7 +115,7 @@ p||q||r||s;if(f.snapMode!="outer"){p=Math.abs(k-n)<=e;q=Math.abs(m-o)<=e;r=Math.
(p||q||r||s||t))c.options.snap.snap&&c.options.snap.snap.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[i].item}));c.snapElements[i].snapping=p||q||r||s||t}else{c.snapElements[i].snapping&&c.options.snap.release&&c.options.snap.release.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[i].item}));c.snapElements[i].snapping=false}}}});d.ui.plugin.add("draggable","stack",{start:function(){var a=d(this).data("draggable").options;a=d.makeArray(d(a.stack)).sort(function(c,f){return(parseInt(d(c).css("zIndex"),
10)||0)-(parseInt(d(f).css("zIndex"),10)||0)});if(a.length){var b=parseInt(a[0].style.zIndex)||0;d(a).each(function(c){this.style.zIndex=b+c});this[0].style.zIndex=b+a.length}}});d.ui.plugin.add("draggable","zIndex",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("zIndex"))b._zIndex=a.css("zIndex");a.css("zIndex",b.zIndex)},stop:function(a,b){a=d(this).data("draggable").options;a._zIndex&&d(b.helper).css("zIndex",a._zIndex)}})})(jQuery);
;/*
- * jQuery UI Droppable 1.8.14
+ * jQuery UI Droppable 1.8.16
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
@@ -133,15 +134,15 @@ a.addClasses&&this.element.addClass("ui-droppable")},destroy:function(){for(var
this.element.addClass(this.options.activeClass);b&&this._trigger("activate",a,this.ui(b))},_deactivate:function(a){var b=d.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass);b&&this._trigger("deactivate",a,this.ui(b))},_over:function(a){var b=d.ui.ddmanager.current;if(!(!b||(b.currentItem||b.element)[0]==this.element[0]))if(this.accept.call(this.element[0],b.currentItem||b.element)){this.options.hoverClass&&this.element.addClass(this.options.hoverClass);
this._trigger("over",a,this.ui(b))}},_out:function(a){var b=d.ui.ddmanager.current;if(!(!b||(b.currentItem||b.element)[0]==this.element[0]))if(this.accept.call(this.element[0],b.currentItem||b.element)){this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("out",a,this.ui(b))}},_drop:function(a,b){var c=b||d.ui.ddmanager.current;if(!c||(c.currentItem||c.element)[0]==this.element[0])return false;var e=false;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var g=
d.data(this,"droppable");if(g.options.greedy&&!g.options.disabled&&g.options.scope==c.options.scope&&g.accept.call(g.element[0],c.currentItem||c.element)&&d.ui.intersect(c,d.extend(g,{offset:g.element.offset()}),g.options.tolerance)){e=true;return false}});if(e)return false;if(this.accept.call(this.element[0],c.currentItem||c.element)){this.options.activeClass&&this.element.removeClass(this.options.activeClass);this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("drop",
-a,this.ui(c));return this.element}return false},ui:function(a){return{draggable:a.currentItem||a.element,helper:a.helper,position:a.position,offset:a.positionAbs}}});d.extend(d.ui.droppable,{version:"1.8.14"});d.ui.intersect=function(a,b,c){if(!b.offset)return false;var e=(a.positionAbs||a.position.absolute).left,g=e+a.helperProportions.width,f=(a.positionAbs||a.position.absolute).top,h=f+a.helperProportions.height,i=b.offset.left,k=i+b.proportions.width,j=b.offset.top,l=j+b.proportions.height;
+a,this.ui(c));return this.element}return false},ui:function(a){return{draggable:a.currentItem||a.element,helper:a.helper,position:a.position,offset:a.positionAbs}}});d.extend(d.ui.droppable,{version:"1.8.16"});d.ui.intersect=function(a,b,c){if(!b.offset)return false;var e=(a.positionAbs||a.position.absolute).left,g=e+a.helperProportions.width,f=(a.positionAbs||a.position.absolute).top,h=f+a.helperProportions.height,i=b.offset.left,k=i+b.proportions.width,j=b.offset.top,l=j+b.proportions.height;
switch(c){case "fit":return i<=e&&g<=k&&j<=f&&h<=l;case "intersect":return i<e+a.helperProportions.width/2&&g-a.helperProportions.width/2<k&&j<f+a.helperProportions.height/2&&h-a.helperProportions.height/2<l;case "pointer":return d.ui.isOver((a.positionAbs||a.position.absolute).top+(a.clickOffset||a.offset.click).top,(a.positionAbs||a.position.absolute).left+(a.clickOffset||a.offset.click).left,j,i,b.proportions.height,b.proportions.width);case "touch":return(f>=j&&f<=l||h>=j&&h<=l||f<j&&h>l)&&(e>=
i&&e<=k||g>=i&&g<=k||e<i&&g>k);default:return false}};d.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(a,b){var c=d.ui.ddmanager.droppables[a.options.scope]||[],e=b?b.type:null,g=(a.currentItem||a.element).find(":data(droppable)").andSelf(),f=0;a:for(;f<c.length;f++)if(!(c[f].options.disabled||a&&!c[f].accept.call(c[f].element[0],a.currentItem||a.element))){for(var h=0;h<g.length;h++)if(g[h]==c[f].element[0]){c[f].proportions.height=0;continue a}c[f].visible=c[f].element.css("display")!=
"none";if(c[f].visible){e=="mousedown"&&c[f]._activate.call(c[f],b);c[f].offset=c[f].element.offset();c[f].proportions={width:c[f].element[0].offsetWidth,height:c[f].element[0].offsetHeight}}}},drop:function(a,b){var c=false;d.each(d.ui.ddmanager.droppables[a.options.scope]||[],function(){if(this.options){if(!this.options.disabled&&this.visible&&d.ui.intersect(a,this,this.options.tolerance))c=c||this._drop.call(this,b);if(!this.options.disabled&&this.visible&&this.accept.call(this.element[0],a.currentItem||
-a.element)){this.isout=1;this.isover=0;this._deactivate.call(this,b)}}});return c},dragStart:function(a,b){a.element.parentsUntil("body").bind("scroll.droppable",function(){a.options.refreshPositions||d.ui.ddmanager.prepareOffsets(a,b)})},drag:function(a,b){a.options.refreshPositions&&d.ui.ddmanager.prepareOffsets(a,b);d.each(d.ui.ddmanager.droppables[a.options.scope]||[],function(){if(!(this.options.disabled||this.greedyChild||!this.visible)){var c=d.ui.intersect(a,this,this.options.tolerance);if(c=
-!c&&this.isover==1?"isout":c&&this.isover==0?"isover":null){var e;if(this.options.greedy){var g=this.element.parents(":data(droppable):eq(0)");if(g.length){e=d.data(g[0],"droppable");e.greedyChild=c=="isover"?1:0}}if(e&&c=="isover"){e.isover=0;e.isout=1;e._out.call(e,b)}this[c]=1;this[c=="isout"?"isover":"isout"]=0;this[c=="isover"?"_over":"_out"].call(this,b);if(e&&c=="isout"){e.isout=0;e.isover=1;e._over.call(e,b)}}}})},dragStop:function(a,b){a.element.parentsUntil("body").unbind("scroll.droppable");
+a.element)){this.isout=1;this.isover=0;this._deactivate.call(this,b)}}});return c},dragStart:function(a,b){a.element.parents(":not(body,html)").bind("scroll.droppable",function(){a.options.refreshPositions||d.ui.ddmanager.prepareOffsets(a,b)})},drag:function(a,b){a.options.refreshPositions&&d.ui.ddmanager.prepareOffsets(a,b);d.each(d.ui.ddmanager.droppables[a.options.scope]||[],function(){if(!(this.options.disabled||this.greedyChild||!this.visible)){var c=d.ui.intersect(a,this,this.options.tolerance);
+if(c=!c&&this.isover==1?"isout":c&&this.isover==0?"isover":null){var e;if(this.options.greedy){var g=this.element.parents(":data(droppable):eq(0)");if(g.length){e=d.data(g[0],"droppable");e.greedyChild=c=="isover"?1:0}}if(e&&c=="isover"){e.isover=0;e.isout=1;e._out.call(e,b)}this[c]=1;this[c=="isout"?"isover":"isout"]=0;this[c=="isover"?"_over":"_out"].call(this,b);if(e&&c=="isout"){e.isout=0;e.isover=1;e._over.call(e,b)}}}})},dragStop:function(a,b){a.element.parents(":not(body,html)").unbind("scroll.droppable");
a.options.refreshPositions||d.ui.ddmanager.prepareOffsets(a,b)}}})(jQuery);
;/*
- * jQuery UI Resizable 1.8.14
+ * jQuery UI Resizable 1.8.16
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
@@ -175,7 +176,7 @@ null;return b},_proportionallyResize:function(){if(this._proportionallyResizeEle
0;h=parseInt(f[h],10)||0;return g+h})}e.browser.msie&&(e(b).is(":hidden")||e(b).parents(":hidden").length)||c.css({height:b.height()-this.borderDif[0]-this.borderDif[2]||0,width:b.width()-this.borderDif[1]-this.borderDif[3]||0})}},_renderProxy:function(){var b=this.options;this.elementOffset=this.element.offset();if(this._helper){this.helper=this.helper||e('<div style="overflow:hidden;"></div>');var a=e.browser.msie&&e.browser.version<7,c=a?1:0;a=a?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+
a,height:this.element.outerHeight()+a,position:"absolute",left:this.elementOffset.left-c+"px",top:this.elementOffset.top-c+"px",zIndex:++b.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(b,a){return{width:this.originalSize.width+a}},w:function(b,a){return{left:this.originalPosition.left+a,width:this.originalSize.width-a}},n:function(b,a,c){return{top:this.originalPosition.top+c,height:this.originalSize.height-c}},s:function(b,a,c){return{height:this.originalSize.height+
c}},se:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},sw:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,a,c]))},ne:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},nw:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,a,c]))}},_propagate:function(b,a){e.ui.plugin.call(this,b,[a,this.ui()]);
-b!="resize"&&this._trigger(b,a,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});e.extend(e.ui.resizable,{version:"1.8.14"});e.ui.plugin.add("resizable","alsoResize",{start:function(){var b=e(this).data("resizable").options,a=function(c){e(c).each(function(){var d=e(this);d.data("resizable-alsoresize",{width:parseInt(d.width(),
+b!="resize"&&this._trigger(b,a,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});e.extend(e.ui.resizable,{version:"1.8.16"});e.ui.plugin.add("resizable","alsoResize",{start:function(){var b=e(this).data("resizable").options,a=function(c){e(c).each(function(){var d=e(this);d.data("resizable-alsoresize",{width:parseInt(d.width(),
10),height:parseInt(d.height(),10),left:parseInt(d.css("left"),10),top:parseInt(d.css("top"),10),position:d.css("position")})})};if(typeof b.alsoResize=="object"&&!b.alsoResize.parentNode)if(b.alsoResize.length){b.alsoResize=b.alsoResize[0];a(b.alsoResize)}else e.each(b.alsoResize,function(c){a(c)});else a(b.alsoResize)},resize:function(b,a){var c=e(this).data("resizable");b=c.options;var d=c.originalSize,f=c.originalPosition,g={height:c.size.height-d.height||0,width:c.size.width-d.width||0,top:c.position.top-
f.top||0,left:c.position.left-f.left||0},h=function(i,j){e(i).each(function(){var l=e(this),q=e(this).data("resizable-alsoresize"),p={},r=j&&j.length?j:l.parents(a.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(r,function(n,o){if((n=(q[o]||0)+(g[o]||0))&&n>=0)p[o]=n||null});if(e.browser.opera&&/relative/.test(l.css("position"))){c._revertToRelativePosition=true;l.css({position:"absolute",top:"auto",left:"auto"})}l.css(p)})};typeof b.alsoResize=="object"&&!b.alsoResize.nodeType?
e.each(b.alsoResize,function(i,j){h(i,j)}):h(b.alsoResize)},stop:function(){var b=e(this).data("resizable"),a=b.options,c=function(d){e(d).each(function(){var f=e(this);f.css({position:f.data("resizable-alsoresize").position})})};if(b._revertToRelativePosition){b._revertToRelativePosition=false;typeof a.alsoResize=="object"&&!a.alsoResize.nodeType?e.each(a.alsoResize,function(d){c(d)}):c(a.alsoResize)}e(this).removeData("resizable-alsoresize")}});e.ui.plugin.add("resizable","animate",{stop:function(b){var a=
@@ -190,7 +191,7 @@ display:"block",position:"relative",height:c.height,width:c.width,margin:0,left:
e(this).data("resizable"),a=b.options,c=b.size,d=b.originalSize,f=b.originalPosition,g=b.axis;a.grid=typeof a.grid=="number"?[a.grid,a.grid]:a.grid;var h=Math.round((c.width-d.width)/(a.grid[0]||1))*(a.grid[0]||1);a=Math.round((c.height-d.height)/(a.grid[1]||1))*(a.grid[1]||1);if(/^(se|s|e)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a}else if(/^(ne)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}else{if(/^(sw)$/.test(g)){b.size.width=d.width+h;b.size.height=
d.height+a}else{b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}b.position.left=f.left-h}}});var m=function(b){return parseInt(b,10)||0},k=function(b){return!isNaN(parseInt(b,10))}})(jQuery);
;/*
- * jQuery UI Selectable 1.8.14
+ * jQuery UI Selectable 1.8.16
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
@@ -210,9 +211,9 @@ c,{unselecting:b.element})}});e(c.target).parents().andSelf().each(function(){va
this.options,b=this.opos[0],g=this.opos[1],h=c.pageX,i=c.pageY;if(b>h){var j=h;h=b;b=j}if(g>i){j=i;i=g;g=j}this.helper.css({left:b,top:g,width:h-b,height:i-g});this.selectees.each(function(){var a=e.data(this,"selectable-item");if(!(!a||a.element==f.element[0])){var k=false;if(d.tolerance=="touch")k=!(a.left>h||a.right<b||a.top>i||a.bottom<g);else if(d.tolerance=="fit")k=a.left>b&&a.right<h&&a.top>g&&a.bottom<i;if(k){if(a.selected){a.$element.removeClass("ui-selected");a.selected=false}if(a.unselecting){a.$element.removeClass("ui-unselecting");
a.unselecting=false}if(!a.selecting){a.$element.addClass("ui-selecting");a.selecting=true;f._trigger("selecting",c,{selecting:a.element})}}else{if(a.selecting)if(c.metaKey&&a.startselected){a.$element.removeClass("ui-selecting");a.selecting=false;a.$element.addClass("ui-selected");a.selected=true}else{a.$element.removeClass("ui-selecting");a.selecting=false;if(a.startselected){a.$element.addClass("ui-unselecting");a.unselecting=true}f._trigger("unselecting",c,{unselecting:a.element})}if(a.selected)if(!c.metaKey&&
!a.startselected){a.$element.removeClass("ui-selected");a.selected=false;a.$element.addClass("ui-unselecting");a.unselecting=true;f._trigger("unselecting",c,{unselecting:a.element})}}}});return false}},_mouseStop:function(c){var f=this;this.dragged=false;e(".ui-unselecting",this.element[0]).each(function(){var d=e.data(this,"selectable-item");d.$element.removeClass("ui-unselecting");d.unselecting=false;d.startselected=false;f._trigger("unselected",c,{unselected:d.element})});e(".ui-selecting",this.element[0]).each(function(){var d=
-e.data(this,"selectable-item");d.$element.removeClass("ui-selecting").addClass("ui-selected");d.selecting=false;d.selected=true;d.startselected=true;f._trigger("selected",c,{selected:d.element})});this._trigger("stop",c);this.helper.remove();return false}});e.extend(e.ui.selectable,{version:"1.8.14"})})(jQuery);
+e.data(this,"selectable-item");d.$element.removeClass("ui-selecting").addClass("ui-selected");d.selecting=false;d.selected=true;d.startselected=true;f._trigger("selected",c,{selected:d.element})});this._trigger("stop",c);this.helper.remove();return false}});e.extend(e.ui.selectable,{version:"1.8.16"})})(jQuery);
;/*
- * jQuery UI Sortable 1.8.14
+ * jQuery UI Sortable 1.8.16
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
@@ -270,39 +271,9 @@ this.direction=="down"?b.item[0]:b.item[0].nextSibling);this.counter=this.counte
f,this._uiHash())});for(e=this.containers.length-1;e>=0;e--)if(d.ui.contains(this.containers[e].element[0],this.currentItem[0])&&!b){c.push(function(f){return function(g){f._trigger("receive",g,this._uiHash(this))}}.call(this,this.containers[e]));c.push(function(f){return function(g){f._trigger("update",g,this._uiHash(this))}}.call(this,this.containers[e]))}}for(e=this.containers.length-1;e>=0;e--){b||c.push(function(f){return function(g){f._trigger("deactivate",g,this._uiHash(this))}}.call(this,
this.containers[e]));if(this.containers[e].containerCache.over){c.push(function(f){return function(g){f._trigger("out",g,this._uiHash(this))}}.call(this,this.containers[e]));this.containers[e].containerCache.over=0}}this._storedCursor&&d("body").css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity",this._storedOpacity);if(this._storedZIndex)this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex);this.dragging=false;if(this.cancelHelperRemoval){if(!b){this._trigger("beforeStop",
a,this._uiHash());for(e=0;e<c.length;e++)c[e].call(this,a);this._trigger("stop",a,this._uiHash())}return false}b||this._trigger("beforeStop",a,this._uiHash());this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.helper[0]!=this.currentItem[0]&&this.helper.remove();this.helper=null;if(!b){for(e=0;e<c.length;e++)c[e].call(this,a);this._trigger("stop",a,this._uiHash())}this.fromOutside=false;return true},_trigger:function(){d.Widget.prototype._trigger.apply(this,arguments)===false&&this.cancel()},
-_uiHash:function(a){var b=a||this;return{helper:b.helper,placeholder:b.placeholder||d([]),position:b.position,originalPosition:b.originalPosition,offset:b.positionAbs,item:b.currentItem,sender:a?a.element:null}}});d.extend(d.ui.sortable,{version:"1.8.14"})})(jQuery);
+_uiHash:function(a){var b=a||this;return{helper:b.helper,placeholder:b.placeholder||d([]),position:b.position,originalPosition:b.originalPosition,offset:b.positionAbs,item:b.currentItem,sender:a?a.element:null}}});d.extend(d.ui.sortable,{version:"1.8.16"})})(jQuery);
;/*
- * jQuery UI Accordion 1.8.14
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Accordion
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.widget.js
- */
-(function(c){c.widget("ui.accordion",{options:{active:0,animated:"slide",autoHeight:true,clearStyle:false,collapsible:false,event:"click",fillSpace:false,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:false,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}},_create:function(){var a=this,b=a.options;a.running=0;a.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix");
-a.headers=a.element.find(b.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){b.disabled||c(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){b.disabled||c(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){b.disabled||c(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){b.disabled||c(this).removeClass("ui-state-focus")});a.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");
-if(b.navigation){var d=a.element.find("a").filter(b.navigationFilter).eq(0);if(d.length){var h=d.closest(".ui-accordion-header");a.active=h.length?h:d.closest(".ui-accordion-content").prev()}}a.active=a._findActive(a.active||b.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");a.active.next().addClass("ui-accordion-content-active");a._createIcons();a.resize();a.element.attr("role","tablist");a.headers.attr("role","tab").bind("keydown.accordion",
-function(f){return a._keydown(f)}).next().attr("role","tabpanel");a.headers.not(a.active||"").attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).next().hide();a.active.length?a.active.attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}):a.headers.eq(0).attr("tabIndex",0);c.browser.safari||a.headers.find("a").attr("tabIndex",-1);b.event&&a.headers.bind(b.event.split(" ").join(".accordion ")+".accordion",function(f){a._clickHandler.call(a,f,this);f.preventDefault()})},_createIcons:function(){var a=
-this.options;if(a.icons){c("<span></span>").addClass("ui-icon "+a.icons.header).prependTo(this.headers);this.active.children(".ui-icon").toggleClass(a.icons.header).toggleClass(a.icons.headerSelected);this.element.addClass("ui-accordion-icons")}},_destroyIcons:function(){this.headers.children(".ui-icon").remove();this.element.removeClass("ui-accordion-icons")},destroy:function(){var a=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role");this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("tabIndex");
-this.headers.find("a").removeAttr("tabIndex");this._destroyIcons();var b=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");if(a.autoHeight||a.fillHeight)b.css("height","");return c.Widget.prototype.destroy.call(this)},_setOption:function(a,b){c.Widget.prototype._setOption.apply(this,arguments);a=="active"&&this.activate(b);if(a=="icons"){this._destroyIcons();
-b&&this._createIcons()}if(a=="disabled")this.headers.add(this.headers.next())[b?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(a){if(!(this.options.disabled||a.altKey||a.ctrlKey)){var b=c.ui.keyCode,d=this.headers.length,h=this.headers.index(a.target),f=false;switch(a.keyCode){case b.RIGHT:case b.DOWN:f=this.headers[(h+1)%d];break;case b.LEFT:case b.UP:f=this.headers[(h-1+d)%d];break;case b.SPACE:case b.ENTER:this._clickHandler({target:a.target},a.target);
-a.preventDefault()}if(f){c(a.target).attr("tabIndex",-1);c(f).attr("tabIndex",0);f.focus();return false}return true}},resize:function(){var a=this.options,b;if(a.fillSpace){if(c.browser.msie){var d=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}b=this.element.parent().height();c.browser.msie&&this.element.parent().css("overflow",d);this.headers.each(function(){b-=c(this).outerHeight(true)});this.headers.next().each(function(){c(this).height(Math.max(0,b-c(this).innerHeight()+
-c(this).height()))}).css("overflow","auto")}else if(a.autoHeight){b=0;this.headers.next().each(function(){b=Math.max(b,c(this).height("").height())}).height(b)}return this},activate:function(a){this.options.active=a;a=this._findActive(a)[0];this._clickHandler({target:a},a);return this},_findActive:function(a){return a?typeof a==="number"?this.headers.filter(":eq("+a+")"):this.headers.not(this.headers.not(a)):a===false?c([]):this.headers.filter(":eq(0)")},_clickHandler:function(a,b){var d=this.options;
-if(!d.disabled)if(a.target){a=c(a.currentTarget||b);b=a[0]===this.active[0];d.active=d.collapsible&&b?false:this.headers.index(a);if(!(this.running||!d.collapsible&&b)){var h=this.active;j=a.next();g=this.active.next();e={options:d,newHeader:b&&d.collapsible?c([]):a,oldHeader:this.active,newContent:b&&d.collapsible?c([]):j,oldContent:g};var f=this.headers.index(this.active[0])>this.headers.index(a[0]);this.active=b?c([]):a;this._toggle(j,g,e,b,f);h.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);
-if(!b){a.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected);a.next().addClass("ui-accordion-content-active")}}}else if(d.collapsible){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);this.active.next().addClass("ui-accordion-content-active");var g=this.active.next(),
-e={options:d,newHeader:c([]),oldHeader:d.active,newContent:c([]),oldContent:g},j=this.active=c([]);this._toggle(j,g,e)}},_toggle:function(a,b,d,h,f){var g=this,e=g.options;g.toShow=a;g.toHide=b;g.data=d;var j=function(){if(g)return g._completed.apply(g,arguments)};g._trigger("changestart",null,g.data);g.running=b.size()===0?a.size():b.size();if(e.animated){d={};d=e.collapsible&&h?{toShow:c([]),toHide:b,complete:j,down:f,autoHeight:e.autoHeight||e.fillSpace}:{toShow:a,toHide:b,complete:j,down:f,autoHeight:e.autoHeight||
-e.fillSpace};if(!e.proxied)e.proxied=e.animated;if(!e.proxiedDuration)e.proxiedDuration=e.duration;e.animated=c.isFunction(e.proxied)?e.proxied(d):e.proxied;e.duration=c.isFunction(e.proxiedDuration)?e.proxiedDuration(d):e.proxiedDuration;h=c.ui.accordion.animations;var i=e.duration,k=e.animated;if(k&&!h[k]&&!c.easing[k])k="slide";h[k]||(h[k]=function(l){this.slide(l,{easing:k,duration:i||700})});h[k](d)}else{if(e.collapsible&&h)a.toggle();else{b.hide();a.show()}j(true)}b.prev().attr({"aria-expanded":"false",
-"aria-selected":"false",tabIndex:-1}).blur();a.prev().attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}).focus()},_completed:function(a){this.running=a?0:--this.running;if(!this.running){this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""});this.toHide.removeClass("ui-accordion-content-active");if(this.toHide.length)this.toHide.parent()[0].className=this.toHide.parent()[0].className;this._trigger("change",null,this.data)}}});c.extend(c.ui.accordion,{version:"1.8.14",
-animations:{slide:function(a,b){a=c.extend({easing:"swing",duration:300},a,b);if(a.toHide.size())if(a.toShow.size()){var d=a.toShow.css("overflow"),h=0,f={},g={},e;b=a.toShow;e=b[0].style.width;b.width(parseInt(b.parent().width(),10)-parseInt(b.css("paddingLeft"),10)-parseInt(b.css("paddingRight"),10)-(parseInt(b.css("borderLeftWidth"),10)||0)-(parseInt(b.css("borderRightWidth"),10)||0));c.each(["height","paddingTop","paddingBottom"],function(j,i){g[i]="hide";j=(""+c.css(a.toShow[0],i)).match(/^([\d+-.]+)(.*)$/);
-f[i]={value:j[1],unit:j[2]||"px"}});a.toShow.css({height:0,overflow:"hidden"}).show();a.toHide.filter(":hidden").each(a.complete).end().filter(":visible").animate(g,{step:function(j,i){if(i.prop=="height")h=i.end-i.start===0?0:(i.now-i.start)/(i.end-i.start);a.toShow[0].style[i.prop]=h*f[i.prop].value+f[i.prop].unit},duration:a.duration,easing:a.easing,complete:function(){a.autoHeight||a.toShow.css("height","");a.toShow.css({width:e,overflow:d});a.complete()}})}else a.toHide.animate({height:"hide",
-paddingTop:"hide",paddingBottom:"hide"},a);else a.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},a)},bounceslide:function(a){this.slide(a,{easing:a.down?"easeOutBounce":"swing",duration:a.down?1E3:200})}}})})(jQuery);
-;/*
- * jQuery UI Autocomplete 1.8.14
+ * jQuery UI Autocomplete 1.8.16
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
@@ -315,7 +286,7 @@ paddingTop:"hide",paddingBottom:"hide"},a);else a.toShow.animate({height:"show",
* jquery.ui.widget.js
* jquery.ui.position.js
*/
-(function(d){var e=0;d.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:false,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var a=this,b=this.element[0].ownerDocument,g;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(c){if(!(a.options.disabled||a.element.attr("readonly"))){g=
+(function(d){var e=0;d.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:false,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var a=this,b=this.element[0].ownerDocument,g;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(c){if(!(a.options.disabled||a.element.propAttr("readOnly"))){g=
false;var f=d.ui.keyCode;switch(c.keyCode){case f.PAGE_UP:a._move("previousPage",c);break;case f.PAGE_DOWN:a._move("nextPage",c);break;case f.UP:a._move("previous",c);c.preventDefault();break;case f.DOWN:a._move("next",c);c.preventDefault();break;case f.ENTER:case f.NUMPAD_ENTER:if(a.menu.active){g=true;c.preventDefault()}case f.TAB:if(!a.menu.active)return;a.menu.select(c);break;case f.ESCAPE:a.element.val(a.term);a.close(c);break;default:clearTimeout(a.searching);a.searching=setTimeout(function(){if(a.term!=
a.element.val()){a.selectedItem=null;a.search(null,c)}},a.options.delay);break}}}).bind("keypress.autocomplete",function(c){if(g){g=false;c.preventDefault()}}).bind("focus.autocomplete",function(){if(!a.options.disabled){a.selectedItem=null;a.previous=a.element.val()}}).bind("blur.autocomplete",function(c){if(!a.options.disabled){clearTimeout(a.searching);a.closing=setTimeout(function(){a.close(c);a._change(c)},150)}});this._initSource();this.response=function(){return a._response.apply(a,arguments)};
this.menu=d("<ul></ul>").addClass("ui-autocomplete").appendTo(d(this.options.appendTo||"body",b)[0]).mousedown(function(c){var f=a.menu.element[0];d(c.target).closest(".ui-menu-item").length||setTimeout(function(){d(document).one("mousedown",function(h){h.target!==a.element[0]&&h.target!==f&&!d.ui.contains(f,h.target)&&a.close()})},1);setTimeout(function(){clearTimeout(a.closing)},13)}).menu({focus:function(c,f){f=f.item.data("item.autocomplete");false!==a._trigger("focus",c,{item:f})&&/^key/.test(c.originalEvent.type)&&
@@ -334,7 +305,7 @@ this.element.children(a))},nextPage:function(e){if(this.hasScroll())if(!this.act
this.last()?":first":":last"))},previousPage:function(e){if(this.hasScroll())if(!this.active||this.first())this.activate(e,this.element.children(".ui-menu-item:last"));else{var a=this.active.offset().top,b=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var g=d(this).offset().top-a+b-d(this).height();return g<10&&g>-10});result.length||(result=this.element.children(".ui-menu-item:first"));this.activate(e,result)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active||
this.first()?":last":":first"))},hasScroll:function(){return this.element.height()<this.element[d.fn.prop?"prop":"attr"]("scrollHeight")},select:function(e){this._trigger("selected",e,{item:this.active})}})})(jQuery);
;/*
- * jQuery UI Button 1.8.14
+ * jQuery UI Button 1.8.16
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
@@ -347,21 +318,21 @@ this.first()?":last":":first"))},hasScroll:function(){return this.element.height
* jquery.ui.widget.js
*/
(function(b){var h,i,j,g,l=function(){var a=b(this).find(":ui-button");setTimeout(function(){a.button("refresh")},1)},k=function(a){var c=a.name,e=a.form,f=b([]);if(c)f=e?b(e).find("[name='"+c+"']"):b("[name='"+c+"']",a.ownerDocument).filter(function(){return!this.form});return f};b.widget("ui.button",{options:{disabled:null,text:true,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset.button").bind("reset.button",l);if(typeof this.options.disabled!==
-"boolean")this.options.disabled=this.element.attr("disabled");this._determineButtonType();this.hasTitle=!!this.buttonElement.attr("title");var a=this,c=this.options,e=this.type==="checkbox"||this.type==="radio",f="ui-state-hover"+(!e?" ui-state-active":"");if(c.label===null)c.label=this.buttonElement.html();if(this.element.is(":disabled"))c.disabled=true;this.buttonElement.addClass("ui-button ui-widget ui-state-default ui-corner-all").attr("role","button").bind("mouseenter.button",function(){if(!c.disabled){b(this).addClass("ui-state-hover");
+"boolean")this.options.disabled=this.element.propAttr("disabled");this._determineButtonType();this.hasTitle=!!this.buttonElement.attr("title");var a=this,c=this.options,e=this.type==="checkbox"||this.type==="radio",f="ui-state-hover"+(!e?" ui-state-active":"");if(c.label===null)c.label=this.buttonElement.html();if(this.element.is(":disabled"))c.disabled=true;this.buttonElement.addClass("ui-button ui-widget ui-state-default ui-corner-all").attr("role","button").bind("mouseenter.button",function(){if(!c.disabled){b(this).addClass("ui-state-hover");
this===h&&b(this).addClass("ui-state-active")}}).bind("mouseleave.button",function(){c.disabled||b(this).removeClass(f)}).bind("click.button",function(d){if(c.disabled){d.preventDefault();d.stopImmediatePropagation()}});this.element.bind("focus.button",function(){a.buttonElement.addClass("ui-state-focus")}).bind("blur.button",function(){a.buttonElement.removeClass("ui-state-focus")});if(e){this.element.bind("change.button",function(){g||a.refresh()});this.buttonElement.bind("mousedown.button",function(d){if(!c.disabled){g=
-false;i=d.pageX;j=d.pageY}}).bind("mouseup.button",function(d){if(!c.disabled)if(i!==d.pageX||j!==d.pageY)g=true})}if(this.type==="checkbox")this.buttonElement.bind("click.button",function(){if(c.disabled||g)return false;b(this).toggleClass("ui-state-active");a.buttonElement.attr("aria-pressed",a.element[0].checked)});else if(this.type==="radio")this.buttonElement.bind("click.button",function(){if(c.disabled||g)return false;b(this).addClass("ui-state-active");a.buttonElement.attr("aria-pressed",true);
-var d=a.element[0];k(d).not(d).map(function(){return b(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed",false)});else{this.buttonElement.bind("mousedown.button",function(){if(c.disabled)return false;b(this).addClass("ui-state-active");h=this;b(document).one("mouseup",function(){h=null})}).bind("mouseup.button",function(){if(c.disabled)return false;b(this).removeClass("ui-state-active")}).bind("keydown.button",function(d){if(c.disabled)return false;if(d.keyCode==b.ui.keyCode.SPACE||
+false;i=d.pageX;j=d.pageY}}).bind("mouseup.button",function(d){if(!c.disabled)if(i!==d.pageX||j!==d.pageY)g=true})}if(this.type==="checkbox")this.buttonElement.bind("click.button",function(){if(c.disabled||g)return false;b(this).toggleClass("ui-state-active");a.buttonElement.attr("aria-pressed",a.element[0].checked)});else if(this.type==="radio")this.buttonElement.bind("click.button",function(){if(c.disabled||g)return false;b(this).addClass("ui-state-active");a.buttonElement.attr("aria-pressed","true");
+var d=a.element[0];k(d).not(d).map(function(){return b(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed","false")});else{this.buttonElement.bind("mousedown.button",function(){if(c.disabled)return false;b(this).addClass("ui-state-active");h=this;b(document).one("mouseup",function(){h=null})}).bind("mouseup.button",function(){if(c.disabled)return false;b(this).removeClass("ui-state-active")}).bind("keydown.button",function(d){if(c.disabled)return false;if(d.keyCode==b.ui.keyCode.SPACE||
d.keyCode==b.ui.keyCode.ENTER)b(this).addClass("ui-state-active")}).bind("keyup.button",function(){b(this).removeClass("ui-state-active")});this.buttonElement.is("a")&&this.buttonElement.keyup(function(d){d.keyCode===b.ui.keyCode.SPACE&&b(this).click()})}this._setOption("disabled",c.disabled);this._resetButton()},_determineButtonType:function(){this.type=this.element.is(":checkbox")?"checkbox":this.element.is(":radio")?"radio":this.element.is("input")?"input":"button";if(this.type==="checkbox"||this.type===
-"radio"){var a=this.element.parents().filter(":last"),c="label[for="+this.element.attr("id")+"]";this.buttonElement=a.find(c);if(!this.buttonElement.length){a=a.length?a.siblings():this.element.siblings();this.buttonElement=a.filter(c);if(!this.buttonElement.length)this.buttonElement=a.find(c)}this.element.addClass("ui-helper-hidden-accessible");(a=this.element.is(":checked"))&&this.buttonElement.addClass("ui-state-active");this.buttonElement.attr("aria-pressed",a)}else this.buttonElement=this.element},
+"radio"){var a=this.element.parents().filter(":last"),c="label[for='"+this.element.attr("id")+"']";this.buttonElement=a.find(c);if(!this.buttonElement.length){a=a.length?a.siblings():this.element.siblings();this.buttonElement=a.filter(c);if(!this.buttonElement.length)this.buttonElement=a.find(c)}this.element.addClass("ui-helper-hidden-accessible");(a=this.element.is(":checked"))&&this.buttonElement.addClass("ui-state-active");this.buttonElement.attr("aria-pressed",a)}else this.buttonElement=this.element},
widget:function(){return this.buttonElement},destroy:function(){this.element.removeClass("ui-helper-hidden-accessible");this.buttonElement.removeClass("ui-button ui-widget ui-state-default ui-corner-all ui-state-hover ui-state-active ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only").removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html());this.hasTitle||this.buttonElement.removeAttr("title");
-b.Widget.prototype.destroy.call(this)},_setOption:function(a,c){b.Widget.prototype._setOption.apply(this,arguments);if(a==="disabled")c?this.element.attr("disabled",true):this.element.removeAttr("disabled");else this._resetButton()},refresh:function(){var a=this.element.is(":disabled");a!==this.options.disabled&&this._setOption("disabled",a);if(this.type==="radio")k(this.element[0]).each(function(){b(this).is(":checked")?b(this).button("widget").addClass("ui-state-active").attr("aria-pressed",true):
-b(this).button("widget").removeClass("ui-state-active").attr("aria-pressed",false)});else if(this.type==="checkbox")this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed",true):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed",false)},_resetButton:function(){if(this.type==="input")this.options.label&&this.element.val(this.options.label);else{var a=this.buttonElement.removeClass("ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only"),
+b.Widget.prototype.destroy.call(this)},_setOption:function(a,c){b.Widget.prototype._setOption.apply(this,arguments);if(a==="disabled")c?this.element.propAttr("disabled",true):this.element.propAttr("disabled",false);else this._resetButton()},refresh:function(){var a=this.element.is(":disabled");a!==this.options.disabled&&this._setOption("disabled",a);if(this.type==="radio")k(this.element[0]).each(function(){b(this).is(":checked")?b(this).button("widget").addClass("ui-state-active").attr("aria-pressed",
+"true"):b(this).button("widget").removeClass("ui-state-active").attr("aria-pressed","false")});else if(this.type==="checkbox")this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed","true"):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed","false")},_resetButton:function(){if(this.type==="input")this.options.label&&this.element.val(this.options.label);else{var a=this.buttonElement.removeClass("ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only"),
c=b("<span></span>").addClass("ui-button-text").html(this.options.label).appendTo(a.empty()).text(),e=this.options.icons,f=e.primary&&e.secondary,d=[];if(e.primary||e.secondary){if(this.options.text)d.push("ui-button-text-icon"+(f?"s":e.primary?"-primary":"-secondary"));e.primary&&a.prepend("<span class='ui-button-icon-primary ui-icon "+e.primary+"'></span>");e.secondary&&a.append("<span class='ui-button-icon-secondary ui-icon "+e.secondary+"'></span>");if(!this.options.text){d.push(f?"ui-button-icons-only":
"ui-button-icon-only");this.hasTitle||a.attr("title",c)}}else d.push("ui-button-text-only");a.addClass(d.join(" "))}}});b.widget("ui.buttonset",{options:{items:":button, :submit, :reset, :checkbox, :radio, a, :data(button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(a,c){a==="disabled"&&this.buttons.button("option",a,c);b.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){var a=this.element.css("direction")===
"ltr";this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return b(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(a?"ui-corner-left":"ui-corner-right").end().filter(":last").addClass(a?"ui-corner-right":"ui-corner-left").end().end()},destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return b(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy");
b.Widget.prototype.destroy.call(this)}})})(jQuery);
;/*
- * jQuery UI Dialog 1.8.14
+ * jQuery UI Dialog 1.8.16
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
@@ -380,12 +351,12 @@ b.Widget.prototype.destroy.call(this)}})})(jQuery);
*/
(function(c,l){var m={buttons:true,height:true,maxHeight:true,maxWidth:true,minHeight:true,minWidth:true,width:true},n={maxHeight:true,maxWidth:true,minHeight:true,minWidth:true},o=c.attrFn||{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true,click:true};c.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,
position:{my:"center",at:"center",collision:"fit",using:function(a){var b=c(this).css(a).offset().top;b<0&&c(this).css("top",a.top-b)}},resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title");if(typeof this.originalTitle!=="string")this.originalTitle="";this.options.title=this.options.title||this.originalTitle;var a=this,b=a.options,d=b.title||"&#160;",e=c.ui.dialog.getTitleId(a.element),g=(a.uiDialog=c("<div></div>")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+
-b.dialogClass).css({zIndex:b.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(i){if(b.closeOnEscape&&i.keyCode&&i.keyCode===c.ui.keyCode.ESCAPE){a.close(i);i.preventDefault()}}).attr({role:"dialog","aria-labelledby":e}).mousedown(function(i){a.moveToTop(false,i)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g);var f=(a.uiDialogTitlebar=c("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g),
+b.dialogClass).css({zIndex:b.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(i){if(b.closeOnEscape&&!i.isDefaultPrevented()&&i.keyCode&&i.keyCode===c.ui.keyCode.ESCAPE){a.close(i);i.preventDefault()}}).attr({role:"dialog","aria-labelledby":e}).mousedown(function(i){a.moveToTop(false,i)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g);var f=(a.uiDialogTitlebar=c("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g),
h=c('<a href="#"></a>').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){h.addClass("ui-state-hover")},function(){h.removeClass("ui-state-hover")}).focus(function(){h.addClass("ui-state-focus")}).blur(function(){h.removeClass("ui-state-focus")}).click(function(i){a.close(i);return false}).appendTo(f);(a.uiDialogTitlebarCloseText=c("<span></span>")).addClass("ui-icon ui-icon-closethick").text(b.closeText).appendTo(h);c("<span></span>").addClass("ui-dialog-title").attr("id",
e).html(d).prependTo(f);if(c.isFunction(b.beforeclose)&&!c.isFunction(b.beforeClose))b.beforeClose=b.beforeclose;f.find("*").add(f).disableSelection();b.draggable&&c.fn.draggable&&a._makeDraggable();b.resizable&&c.fn.resizable&&a._makeResizable();a._createButtons(b.buttons);a._isOpen=false;c.fn.bgiframe&&g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy();a.uiDialog.hide();a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");
a.uiDialog.remove();a.originalTitle&&a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(a){var b=this,d,e;if(false!==b._trigger("beforeClose",a)){b.overlay&&b.overlay.destroy();b.uiDialog.unbind("keypress.ui-dialog");b._isOpen=false;if(b.options.hide)b.uiDialog.hide(b.options.hide,function(){b._trigger("close",a)});else{b.uiDialog.hide();b._trigger("close",a)}c.ui.dialog.overlay.resize();if(b.options.modal){d=0;c(".ui-dialog").each(function(){if(this!==
-b.uiDialog[0]){e=c(this).css("z-index");isNaN(e)||(d=Math.max(d,e))}});c.ui.dialog.maxZ=d}return b}},isOpen:function(){return this._isOpen},moveToTop:function(a,b){var d=this,e=d.options;if(e.modal&&!a||!e.stack&&!e.modal)return d._trigger("focus",b);if(e.zIndex>c.ui.dialog.maxZ)c.ui.dialog.maxZ=e.zIndex;if(d.overlay){c.ui.dialog.maxZ+=1;d.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=c.ui.dialog.maxZ)}a={scrollTop:d.element.attr("scrollTop"),scrollLeft:d.element.attr("scrollLeft")};c.ui.dialog.maxZ+=
-1;d.uiDialog.css("z-index",c.ui.dialog.maxZ);d.element.attr(a);d._trigger("focus",b);return d},open:function(){if(!this._isOpen){var a=this,b=a.options,d=a.uiDialog;a.overlay=b.modal?new c.ui.dialog.overlay(a):null;a._size();a._position(b.position);d.show(b.show);a.moveToTop(true);b.modal&&d.bind("keypress.ui-dialog",function(e){if(e.keyCode===c.ui.keyCode.TAB){var g=c(":tabbable",this),f=g.filter(":first");g=g.filter(":last");if(e.target===g[0]&&!e.shiftKey){f.focus(1);return false}else if(e.target===
+b.uiDialog[0]){e=c(this).css("z-index");isNaN(e)||(d=Math.max(d,e))}});c.ui.dialog.maxZ=d}return b}},isOpen:function(){return this._isOpen},moveToTop:function(a,b){var d=this,e=d.options;if(e.modal&&!a||!e.stack&&!e.modal)return d._trigger("focus",b);if(e.zIndex>c.ui.dialog.maxZ)c.ui.dialog.maxZ=e.zIndex;if(d.overlay){c.ui.dialog.maxZ+=1;d.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=c.ui.dialog.maxZ)}a={scrollTop:d.element.scrollTop(),scrollLeft:d.element.scrollLeft()};c.ui.dialog.maxZ+=1;
+d.uiDialog.css("z-index",c.ui.dialog.maxZ);d.element.attr(a);d._trigger("focus",b);return d},open:function(){if(!this._isOpen){var a=this,b=a.options,d=a.uiDialog;a.overlay=b.modal?new c.ui.dialog.overlay(a):null;a._size();a._position(b.position);d.show(b.show);a.moveToTop(true);b.modal&&d.bind("keypress.ui-dialog",function(e){if(e.keyCode===c.ui.keyCode.TAB){var g=c(":tabbable",this),f=g.filter(":first");g=g.filter(":last");if(e.target===g[0]&&!e.shiftKey){f.focus(1);return false}else if(e.target===
f[0]&&e.shiftKey){g.focus(1);return false}}});c(a.element.find(":tabbable").get().concat(d.find(".ui-dialog-buttonpane :tabbable").get().concat(d.get()))).eq(0).focus();a._isOpen=true;a._trigger("open");return a}},_createButtons:function(a){var b=this,d=false,e=c("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),g=c("<div></div>").addClass("ui-dialog-buttonset").appendTo(e);b.uiDialog.find(".ui-dialog-buttonpane").remove();typeof a==="object"&&a!==null&&c.each(a,
function(){return!(d=true)});if(d){c.each(a,function(f,h){h=c.isFunction(h)?{click:h,text:f}:h;var i=c('<button type="button"></button>').click(function(){h.click.apply(b.element[0],arguments)}).appendTo(g);c.each(h,function(j,k){if(j!=="click")j in o?i[j](k):i.attr(j,k)});c.fn.button&&i.button()});e.appendTo(b.uiDialog)}},_makeDraggable:function(){function a(f){return{position:f.position,offset:f.offset}}var b=this,d=b.options,e=c(document),g;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",
handle:".ui-dialog-titlebar",containment:"document",start:function(f,h){g=d.height==="auto"?"auto":c(this).height();c(this).height(c(this).height()).addClass("ui-dialog-dragging");b._trigger("dragStart",f,a(h))},drag:function(f,h){b._trigger("drag",f,a(h))},stop:function(f,h){d.position=[h.position.left-e.scrollLeft(),h.position.top-e.scrollTop()];c(this).removeClass("ui-dialog-dragging").height(g);b._trigger("dragStop",f,a(h));c.ui.dialog.overlay.resize()}})},_makeResizable:function(a){function b(f){return{originalPosition:f.originalPosition,
@@ -395,13 +366,13 @@ f,b(h))},stop:function(f,h){c(this).removeClass("ui-dialog-resizing");e.height=c
if(g in m)e=true;if(g in n)d[g]=f});e&&this._size();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",d)},_setOption:function(a,b){var d=this,e=d.uiDialog;switch(a){case "beforeclose":a="beforeClose";break;case "buttons":d._createButtons(b);break;case "closeText":d.uiDialogTitlebarCloseText.text(""+b);break;case "dialogClass":e.removeClass(d.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b);break;case "disabled":b?e.addClass("ui-dialog-disabled"):
e.removeClass("ui-dialog-disabled");break;case "draggable":var g=e.is(":data(draggable)");g&&!b&&e.draggable("destroy");!g&&b&&d._makeDraggable();break;case "position":d._position(b);break;case "resizable":(g=e.is(":data(resizable)"))&&!b&&e.resizable("destroy");g&&typeof b==="string"&&e.resizable("option","handles",b);!g&&b!==false&&d._makeResizable(b);break;case "title":c(".ui-dialog-title",d.uiDialogTitlebar).html(""+(b||"&#160;"));break}c.Widget.prototype._setOption.apply(d,arguments)},_size:function(){var a=
this.options,b,d,e=this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0});if(a.minWidth>a.width)a.width=a.minWidth;b=this.uiDialog.css({height:"auto",width:a.width}).height();d=Math.max(0,a.minHeight-b);if(a.height==="auto")if(c.support.minHeight)this.element.css({minHeight:d,height:"auto"});else{this.uiDialog.show();a=this.element.css("height","auto").height();e||this.uiDialog.hide();this.element.height(Math.max(a,d))}else this.element.height(Math.max(a.height-
-b,0));this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}});c.extend(c.ui.dialog,{version:"1.8.14",uuid:0,maxZ:0,getTitleId:function(a){a=a.attr("id");if(!a){this.uuid+=1;a=this.uuid}return"ui-dialog-title-"+a},overlay:function(a){this.$el=c.ui.dialog.overlay.create(a)}});c.extend(c.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "),
-create:function(a){if(this.instances.length===0){setTimeout(function(){c.ui.dialog.overlay.instances.length&&c(document).bind(c.ui.dialog.overlay.events,function(d){if(c(d.target).zIndex()<c.ui.dialog.overlay.maxZ)return false})},1);c(document).bind("keydown.dialog-overlay",function(d){if(a.options.closeOnEscape&&d.keyCode&&d.keyCode===c.ui.keyCode.ESCAPE){a.close(d);d.preventDefault()}});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var b=(this.oldInstances.pop()||c("<div></div>").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),
-height:this.height()});c.fn.bgiframe&&b.bgiframe();this.instances.push(b);return b},destroy:function(a){var b=c.inArray(a,this.instances);b!=-1&&this.oldInstances.push(this.instances.splice(b,1)[0]);this.instances.length===0&&c([document,window]).unbind(".dialog-overlay");a.remove();var d=0;c.each(this.instances,function(){d=Math.max(d,this.css("z-index"))});this.maxZ=d},height:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);
-b=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return a<b?c(window).height()+"px":a+"px"}else return c(document).height()+"px"},width:function(){var a,b;if(c.browser.msie){a=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth);b=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);return a<b?c(window).width()+"px":a+"px"}else return c(document).width()+"px"},resize:function(){var a=c([]);c.each(c.ui.dialog.overlay.instances,function(){a=
-a.add(this)});a.css({width:0,height:0}).css({width:c.ui.dialog.overlay.width(),height:c.ui.dialog.overlay.height()})}});c.extend(c.ui.dialog.overlay.prototype,{destroy:function(){c.ui.dialog.overlay.destroy(this.$el)}})})(jQuery);
+b,0));this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}});c.extend(c.ui.dialog,{version:"1.8.16",uuid:0,maxZ:0,getTitleId:function(a){a=a.attr("id");if(!a){this.uuid+=1;a=this.uuid}return"ui-dialog-title-"+a},overlay:function(a){this.$el=c.ui.dialog.overlay.create(a)}});c.extend(c.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "),
+create:function(a){if(this.instances.length===0){setTimeout(function(){c.ui.dialog.overlay.instances.length&&c(document).bind(c.ui.dialog.overlay.events,function(d){if(c(d.target).zIndex()<c.ui.dialog.overlay.maxZ)return false})},1);c(document).bind("keydown.dialog-overlay",function(d){if(a.options.closeOnEscape&&!d.isDefaultPrevented()&&d.keyCode&&d.keyCode===c.ui.keyCode.ESCAPE){a.close(d);d.preventDefault()}});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var b=(this.oldInstances.pop()||
+c("<div></div>").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),height:this.height()});c.fn.bgiframe&&b.bgiframe();this.instances.push(b);return b},destroy:function(a){var b=c.inArray(a,this.instances);b!=-1&&this.oldInstances.push(this.instances.splice(b,1)[0]);this.instances.length===0&&c([document,window]).unbind(".dialog-overlay");a.remove();var d=0;c.each(this.instances,function(){d=Math.max(d,this.css("z-index"))});this.maxZ=d},height:function(){var a,b;if(c.browser.msie&&
+c.browser.version<7){a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);b=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return a<b?c(window).height()+"px":a+"px"}else return c(document).height()+"px"},width:function(){var a,b;if(c.browser.msie){a=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth);b=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);return a<b?c(window).width()+"px":a+"px"}else return c(document).width()+
+"px"},resize:function(){var a=c([]);c.each(c.ui.dialog.overlay.instances,function(){a=a.add(this)});a.css({width:0,height:0}).css({width:c.ui.dialog.overlay.width(),height:c.ui.dialog.overlay.height()})}});c.extend(c.ui.dialog.overlay.prototype,{destroy:function(){c.ui.dialog.overlay.destroy(this.$el)}})})(jQuery);
;/*
- * jQuery UI Slider 1.8.14
+ * jQuery UI Slider 1.8.16
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
@@ -414,27 +385,27 @@ a.add(this)});a.css({width:0,height:0}).css({width:c.ui.dialog.overlay.width(),h
* jquery.ui.mouse.js
* jquery.ui.widget.js
*/
-(function(d){d.widget("ui.slider",d.ui.mouse,{widgetEventPrefix:"slide",options:{animate:false,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null},_create:function(){var b=this,a=this.options,c=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),f=a.values&&a.values.length||1,e=[];this._mouseSliding=this._keySliding=false;this._animateOff=true;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider ui-slider-"+
-this.orientation+" ui-widget ui-widget-content ui-corner-all"+(a.disabled?" ui-slider-disabled ui-disabled":""));this.range=d([]);if(a.range){if(a.range===true){if(!a.values)a.values=[this._valueMin(),this._valueMin()];if(a.values.length&&a.values.length!==2)a.values=[a.values[0],a.values[0]]}this.range=d("<div></div>").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(a.range==="min"||a.range==="max"?" ui-slider-range-"+a.range:""))}for(var j=c.length;j<f;j+=1)e.push("<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>");
-this.handles=c.add(d(e.join("")).appendTo(b.element));this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(g){g.preventDefault()}).hover(function(){a.disabled||d(this).addClass("ui-state-hover")},function(){d(this).removeClass("ui-state-hover")}).focus(function(){if(a.disabled)d(this).blur();else{d(".ui-slider .ui-state-focus").removeClass("ui-state-focus");d(this).addClass("ui-state-focus")}}).blur(function(){d(this).removeClass("ui-state-focus")});this.handles.each(function(g){d(this).data("index.ui-slider-handle",
-g)});this.handles.keydown(function(g){var k=true,l=d(this).data("index.ui-slider-handle"),i,h,m;if(!b.options.disabled){switch(g.keyCode){case d.ui.keyCode.HOME:case d.ui.keyCode.END:case d.ui.keyCode.PAGE_UP:case d.ui.keyCode.PAGE_DOWN:case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:k=false;if(!b._keySliding){b._keySliding=true;d(this).addClass("ui-state-active");i=b._start(g,l);if(i===false)return}break}m=b.options.step;i=b.options.values&&b.options.values.length?
-(h=b.values(l)):(h=b.value());switch(g.keyCode){case d.ui.keyCode.HOME:h=b._valueMin();break;case d.ui.keyCode.END:h=b._valueMax();break;case d.ui.keyCode.PAGE_UP:h=b._trimAlignValue(i+(b._valueMax()-b._valueMin())/5);break;case d.ui.keyCode.PAGE_DOWN:h=b._trimAlignValue(i-(b._valueMax()-b._valueMin())/5);break;case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:if(i===b._valueMax())return;h=b._trimAlignValue(i+m);break;case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:if(i===b._valueMin())return;h=b._trimAlignValue(i-
-m);break}b._slide(g,l,h);return k}}).keyup(function(g){var k=d(this).data("index.ui-slider-handle");if(b._keySliding){b._keySliding=false;b._stop(g,k);b._change(g,k);d(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");this._mouseDestroy();
-return this},_mouseCapture:function(b){var a=this.options,c,f,e,j,g;if(a.disabled)return false;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();c=this._normValueFromMouse({x:b.pageX,y:b.pageY});f=this._valueMax()-this._valueMin()+1;j=this;this.handles.each(function(k){var l=Math.abs(c-j.values(k));if(f>l){f=l;e=d(this);g=k}});if(a.range===true&&this.values(1)===a.min){g+=1;e=d(this.handles[g])}if(this._start(b,g)===false)return false;
-this._mouseSliding=true;j._handleIndex=g;e.addClass("ui-state-active").focus();a=e.offset();this._clickOffset=!d(b.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:b.pageX-a.left-e.width()/2,top:b.pageY-a.top-e.height()/2-(parseInt(e.css("borderTopWidth"),10)||0)-(parseInt(e.css("borderBottomWidth"),10)||0)+(parseInt(e.css("marginTop"),10)||0)};this.handles.hasClass("ui-state-hover")||this._slide(b,g,c);return this._animateOff=true},_mouseStart:function(){return true},_mouseDrag:function(b){var a=
-this._normValueFromMouse({x:b.pageX,y:b.pageY});this._slide(b,this._handleIndex,a);return false},_mouseStop:function(b){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(b,this._handleIndex);this._change(b,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=false},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(b){var a;if(this.orientation==="horizontal"){a=
-this.elementSize.width;b=b.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{a=this.elementSize.height;b=b.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}a=b/a;if(a>1)a=1;if(a<0)a=0;if(this.orientation==="vertical")a=1-a;b=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+a*b)},_start:function(b,a){var c={handle:this.handles[a],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(a);
-c.values=this.values()}return this._trigger("start",b,c)},_slide:function(b,a,c){var f;if(this.options.values&&this.options.values.length){f=this.values(a?0:1);if(this.options.values.length===2&&this.options.range===true&&(a===0&&c>f||a===1&&c<f))c=f;if(c!==this.values(a)){f=this.values();f[a]=c;b=this._trigger("slide",b,{handle:this.handles[a],value:c,values:f});this.values(a?0:1);b!==false&&this.values(a,c,true)}}else if(c!==this.value()){b=this._trigger("slide",b,{handle:this.handles[a],value:c});
-b!==false&&this.value(c)}},_stop:function(b,a){var c={handle:this.handles[a],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(a);c.values=this.values()}this._trigger("stop",b,c)},_change:function(b,a){if(!this._keySliding&&!this._mouseSliding){var c={handle:this.handles[a],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(a);c.values=this.values()}this._trigger("change",b,c)}},value:function(b){if(arguments.length){this.options.value=
-this._trimAlignValue(b);this._refreshValue();this._change(null,0)}else return this._value()},values:function(b,a){var c,f,e;if(arguments.length>1){this.options.values[b]=this._trimAlignValue(a);this._refreshValue();this._change(null,b)}else if(arguments.length)if(d.isArray(arguments[0])){c=this.options.values;f=arguments[0];for(e=0;e<c.length;e+=1){c[e]=this._trimAlignValue(f[e]);this._change(null,e)}this._refreshValue()}else return this.options.values&&this.options.values.length?this._values(b):
-this.value();else return this._values()},_setOption:function(b,a){var c,f=0;if(d.isArray(this.options.values))f=this.options.values.length;d.Widget.prototype._setOption.apply(this,arguments);switch(b){case "disabled":if(a){this.handles.filter(".ui-state-focus").blur();this.handles.removeClass("ui-state-hover");this.handles.attr("disabled","disabled");this.element.addClass("ui-disabled")}else{this.handles.removeAttr("disabled");this.element.removeClass("ui-disabled")}break;case "orientation":this._detectOrientation();
-this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);this._refreshValue();break;case "value":this._animateOff=true;this._refreshValue();this._change(null,0);this._animateOff=false;break;case "values":this._animateOff=true;this._refreshValue();for(c=0;c<f;c+=1)this._change(null,c);this._animateOff=false;break}},_value:function(){var b=this.options.value;return b=this._trimAlignValue(b)},_values:function(b){var a,c;if(arguments.length){a=this.options.values[b];
-return a=this._trimAlignValue(a)}else{a=this.options.values.slice();for(c=0;c<a.length;c+=1)a[c]=this._trimAlignValue(a[c]);return a}},_trimAlignValue:function(b){if(b<=this._valueMin())return this._valueMin();if(b>=this._valueMax())return this._valueMax();var a=this.options.step>0?this.options.step:1,c=(b-this._valueMin())%a;alignValue=b-c;if(Math.abs(c)*2>=a)alignValue+=c>0?a:-a;return parseFloat(alignValue.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},
-_refreshValue:function(){var b=this.options.range,a=this.options,c=this,f=!this._animateOff?a.animate:false,e,j={},g,k,l,i;if(this.options.values&&this.options.values.length)this.handles.each(function(h){e=(c.values(h)-c._valueMin())/(c._valueMax()-c._valueMin())*100;j[c.orientation==="horizontal"?"left":"bottom"]=e+"%";d(this).stop(1,1)[f?"animate":"css"](j,a.animate);if(c.options.range===true)if(c.orientation==="horizontal"){if(h===0)c.range.stop(1,1)[f?"animate":"css"]({left:e+"%"},a.animate);
-if(h===1)c.range[f?"animate":"css"]({width:e-g+"%"},{queue:false,duration:a.animate})}else{if(h===0)c.range.stop(1,1)[f?"animate":"css"]({bottom:e+"%"},a.animate);if(h===1)c.range[f?"animate":"css"]({height:e-g+"%"},{queue:false,duration:a.animate})}g=e});else{k=this.value();l=this._valueMin();i=this._valueMax();e=i!==l?(k-l)/(i-l)*100:0;j[c.orientation==="horizontal"?"left":"bottom"]=e+"%";this.handle.stop(1,1)[f?"animate":"css"](j,a.animate);if(b==="min"&&this.orientation==="horizontal")this.range.stop(1,
-1)[f?"animate":"css"]({width:e+"%"},a.animate);if(b==="max"&&this.orientation==="horizontal")this.range[f?"animate":"css"]({width:100-e+"%"},{queue:false,duration:a.animate});if(b==="min"&&this.orientation==="vertical")this.range.stop(1,1)[f?"animate":"css"]({height:e+"%"},a.animate);if(b==="max"&&this.orientation==="vertical")this.range[f?"animate":"css"]({height:100-e+"%"},{queue:false,duration:a.animate})}}});d.extend(d.ui.slider,{version:"1.8.14"})})(jQuery);
+(function(d){d.widget("ui.slider",d.ui.mouse,{widgetEventPrefix:"slide",options:{animate:false,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null},_create:function(){var a=this,b=this.options,c=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),f=b.values&&b.values.length||1,e=[];this._mouseSliding=this._keySliding=false;this._animateOff=true;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider ui-slider-"+
+this.orientation+" ui-widget ui-widget-content ui-corner-all"+(b.disabled?" ui-slider-disabled ui-disabled":""));this.range=d([]);if(b.range){if(b.range===true){if(!b.values)b.values=[this._valueMin(),this._valueMin()];if(b.values.length&&b.values.length!==2)b.values=[b.values[0],b.values[0]]}this.range=d("<div></div>").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(b.range==="min"||b.range==="max"?" ui-slider-range-"+b.range:""))}for(var j=c.length;j<f;j+=1)e.push("<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>");
+this.handles=c.add(d(e.join("")).appendTo(a.element));this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(g){g.preventDefault()}).hover(function(){b.disabled||d(this).addClass("ui-state-hover")},function(){d(this).removeClass("ui-state-hover")}).focus(function(){if(b.disabled)d(this).blur();else{d(".ui-slider .ui-state-focus").removeClass("ui-state-focus");d(this).addClass("ui-state-focus")}}).blur(function(){d(this).removeClass("ui-state-focus")});this.handles.each(function(g){d(this).data("index.ui-slider-handle",
+g)});this.handles.keydown(function(g){var k=true,l=d(this).data("index.ui-slider-handle"),i,h,m;if(!a.options.disabled){switch(g.keyCode){case d.ui.keyCode.HOME:case d.ui.keyCode.END:case d.ui.keyCode.PAGE_UP:case d.ui.keyCode.PAGE_DOWN:case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:k=false;if(!a._keySliding){a._keySliding=true;d(this).addClass("ui-state-active");i=a._start(g,l);if(i===false)return}break}m=a.options.step;i=a.options.values&&a.options.values.length?
+(h=a.values(l)):(h=a.value());switch(g.keyCode){case d.ui.keyCode.HOME:h=a._valueMin();break;case d.ui.keyCode.END:h=a._valueMax();break;case d.ui.keyCode.PAGE_UP:h=a._trimAlignValue(i+(a._valueMax()-a._valueMin())/5);break;case d.ui.keyCode.PAGE_DOWN:h=a._trimAlignValue(i-(a._valueMax()-a._valueMin())/5);break;case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:if(i===a._valueMax())return;h=a._trimAlignValue(i+m);break;case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:if(i===a._valueMin())return;h=a._trimAlignValue(i-
+m);break}a._slide(g,l,h);return k}}).keyup(function(g){var k=d(this).data("index.ui-slider-handle");if(a._keySliding){a._keySliding=false;a._stop(g,k);a._change(g,k);d(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");this._mouseDestroy();
+return this},_mouseCapture:function(a){var b=this.options,c,f,e,j,g;if(b.disabled)return false;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();c=this._normValueFromMouse({x:a.pageX,y:a.pageY});f=this._valueMax()-this._valueMin()+1;j=this;this.handles.each(function(k){var l=Math.abs(c-j.values(k));if(f>l){f=l;e=d(this);g=k}});if(b.range===true&&this.values(1)===b.min){g+=1;e=d(this.handles[g])}if(this._start(a,g)===false)return false;
+this._mouseSliding=true;j._handleIndex=g;e.addClass("ui-state-active").focus();b=e.offset();this._clickOffset=!d(a.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:a.pageX-b.left-e.width()/2,top:a.pageY-b.top-e.height()/2-(parseInt(e.css("borderTopWidth"),10)||0)-(parseInt(e.css("borderBottomWidth"),10)||0)+(parseInt(e.css("marginTop"),10)||0)};this.handles.hasClass("ui-state-hover")||this._slide(a,g,c);return this._animateOff=true},_mouseStart:function(){return true},_mouseDrag:function(a){var b=
+this._normValueFromMouse({x:a.pageX,y:a.pageY});this._slide(a,this._handleIndex,b);return false},_mouseStop:function(a){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(a,this._handleIndex);this._change(a,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=false},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(a){var b;if(this.orientation==="horizontal"){b=
+this.elementSize.width;a=a.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{b=this.elementSize.height;a=a.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}b=a/b;if(b>1)b=1;if(b<0)b=0;if(this.orientation==="vertical")b=1-b;a=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+b*a)},_start:function(a,b){var c={handle:this.handles[b],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(b);
+c.values=this.values()}return this._trigger("start",a,c)},_slide:function(a,b,c){var f;if(this.options.values&&this.options.values.length){f=this.values(b?0:1);if(this.options.values.length===2&&this.options.range===true&&(b===0&&c>f||b===1&&c<f))c=f;if(c!==this.values(b)){f=this.values();f[b]=c;a=this._trigger("slide",a,{handle:this.handles[b],value:c,values:f});this.values(b?0:1);a!==false&&this.values(b,c,true)}}else if(c!==this.value()){a=this._trigger("slide",a,{handle:this.handles[b],value:c});
+a!==false&&this.value(c)}},_stop:function(a,b){var c={handle:this.handles[b],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(b);c.values=this.values()}this._trigger("stop",a,c)},_change:function(a,b){if(!this._keySliding&&!this._mouseSliding){var c={handle:this.handles[b],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(b);c.values=this.values()}this._trigger("change",a,c)}},value:function(a){if(arguments.length){this.options.value=
+this._trimAlignValue(a);this._refreshValue();this._change(null,0)}else return this._value()},values:function(a,b){var c,f,e;if(arguments.length>1){this.options.values[a]=this._trimAlignValue(b);this._refreshValue();this._change(null,a)}else if(arguments.length)if(d.isArray(arguments[0])){c=this.options.values;f=arguments[0];for(e=0;e<c.length;e+=1){c[e]=this._trimAlignValue(f[e]);this._change(null,e)}this._refreshValue()}else return this.options.values&&this.options.values.length?this._values(a):
+this.value();else return this._values()},_setOption:function(a,b){var c,f=0;if(d.isArray(this.options.values))f=this.options.values.length;d.Widget.prototype._setOption.apply(this,arguments);switch(a){case "disabled":if(b){this.handles.filter(".ui-state-focus").blur();this.handles.removeClass("ui-state-hover");this.handles.propAttr("disabled",true);this.element.addClass("ui-disabled")}else{this.handles.propAttr("disabled",false);this.element.removeClass("ui-disabled")}break;case "orientation":this._detectOrientation();
+this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);this._refreshValue();break;case "value":this._animateOff=true;this._refreshValue();this._change(null,0);this._animateOff=false;break;case "values":this._animateOff=true;this._refreshValue();for(c=0;c<f;c+=1)this._change(null,c);this._animateOff=false;break}},_value:function(){var a=this.options.value;return a=this._trimAlignValue(a)},_values:function(a){var b,c;if(arguments.length){b=this.options.values[a];
+return b=this._trimAlignValue(b)}else{b=this.options.values.slice();for(c=0;c<b.length;c+=1)b[c]=this._trimAlignValue(b[c]);return b}},_trimAlignValue:function(a){if(a<=this._valueMin())return this._valueMin();if(a>=this._valueMax())return this._valueMax();var b=this.options.step>0?this.options.step:1,c=(a-this._valueMin())%b;a=a-c;if(Math.abs(c)*2>=b)a+=c>0?b:-b;return parseFloat(a.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var a=
+this.options.range,b=this.options,c=this,f=!this._animateOff?b.animate:false,e,j={},g,k,l,i;if(this.options.values&&this.options.values.length)this.handles.each(function(h){e=(c.values(h)-c._valueMin())/(c._valueMax()-c._valueMin())*100;j[c.orientation==="horizontal"?"left":"bottom"]=e+"%";d(this).stop(1,1)[f?"animate":"css"](j,b.animate);if(c.options.range===true)if(c.orientation==="horizontal"){if(h===0)c.range.stop(1,1)[f?"animate":"css"]({left:e+"%"},b.animate);if(h===1)c.range[f?"animate":"css"]({width:e-
+g+"%"},{queue:false,duration:b.animate})}else{if(h===0)c.range.stop(1,1)[f?"animate":"css"]({bottom:e+"%"},b.animate);if(h===1)c.range[f?"animate":"css"]({height:e-g+"%"},{queue:false,duration:b.animate})}g=e});else{k=this.value();l=this._valueMin();i=this._valueMax();e=i!==l?(k-l)/(i-l)*100:0;j[c.orientation==="horizontal"?"left":"bottom"]=e+"%";this.handle.stop(1,1)[f?"animate":"css"](j,b.animate);if(a==="min"&&this.orientation==="horizontal")this.range.stop(1,1)[f?"animate":"css"]({width:e+"%"},
+b.animate);if(a==="max"&&this.orientation==="horizontal")this.range[f?"animate":"css"]({width:100-e+"%"},{queue:false,duration:b.animate});if(a==="min"&&this.orientation==="vertical")this.range.stop(1,1)[f?"animate":"css"]({height:e+"%"},b.animate);if(a==="max"&&this.orientation==="vertical")this.range[f?"animate":"css"]({height:100-e+"%"},{queue:false,duration:b.animate})}}});d.extend(d.ui.slider,{version:"1.8.16"})})(jQuery);
;/*
- * jQuery UI Tabs 1.8.14
+ * jQuery UI Tabs 1.8.16
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
@@ -466,10 +437,10 @@ if(a.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(b+(b+1<this
this._ui(this.anchors[b],this.panels[b]));return this}},disable:function(b){b=this._getIndex(b);var e=this.options;if(b!=e.selected){this.lis.eq(b).addClass("ui-state-disabled");e.disabled.push(b);e.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[b],this.panels[b]))}return this},select:function(b){b=this._getIndex(b);if(b==-1)if(this.options.collapsible&&this.options.selected!=-1)b=this.options.selected;else return this;this.anchors.eq(b).trigger(this.options.event+".tabs");return this},
load:function(b){b=this._getIndex(b);var e=this,a=this.options,c=this.anchors.eq(b)[0],h=d.data(c,"load.tabs");this.abort();if(!h||this.element.queue("tabs").length!==0&&d.data(c,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(b).addClass("ui-state-processing");if(a.spinner){var j=d("span",c);j.data("label.tabs",j.html()).html(a.spinner)}this.xhr=d.ajax(d.extend({},a.ajaxOptions,{url:h,success:function(k,n){e.element.find(e._sanitizeSelector(c.hash)).html(k);e._cleanup();a.cache&&d.data(c,
"cache.tabs",true);e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.success(k,n)}catch(m){}},error:function(k,n){e._cleanup();e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.error(k,n,b,c)}catch(m){}}}));e.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this},
-url:function(b,e){this.anchors.eq(b).removeData("cache.tabs").data("load.tabs",e);return this},length:function(){return this.anchors.length}});d.extend(d.ui.tabs,{version:"1.8.14"});d.extend(d.ui.tabs.prototype,{rotation:null,rotate:function(b,e){var a=this,c=this.options,h=a._rotate||(a._rotate=function(j){clearTimeout(a.rotation);a.rotation=setTimeout(function(){var k=c.selected;a.select(++k<a.anchors.length?k:0)},b);j&&j.stopPropagation()});e=a._unrotate||(a._unrotate=!e?function(j){j.clientX&&
+url:function(b,e){this.anchors.eq(b).removeData("cache.tabs").data("load.tabs",e);return this},length:function(){return this.anchors.length}});d.extend(d.ui.tabs,{version:"1.8.16"});d.extend(d.ui.tabs.prototype,{rotation:null,rotate:function(b,e){var a=this,c=this.options,h=a._rotate||(a._rotate=function(j){clearTimeout(a.rotation);a.rotation=setTimeout(function(){var k=c.selected;a.select(++k<a.anchors.length?k:0)},b);j&&j.stopPropagation()});e=a._unrotate||(a._unrotate=!e?function(j){j.clientX&&
a.rotate(null)}:function(){t=c.selected;h()});if(b){this.element.bind("tabsshow",h);this.anchors.bind(c.event+".tabs",e);h()}else{clearTimeout(a.rotation);this.element.unbind("tabsshow",h);this.anchors.unbind(c.event+".tabs",e);delete this._rotate;delete this._unrotate}return this}})})(jQuery);
;/*
- * jQuery UI Datepicker 1.8.14
+ * jQuery UI Datepicker 1.8.16
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
@@ -483,76 +454,76 @@ a.rotate(null)}:function(){t=c.selected;h()});if(b){this.element.bind("tabsshow"
(function(d,C){function M(){this.debug=false;this._curInst=null;this._keyEvent=false;this._disabledInputs=[];this._inDialog=this._datepickerShowing=false;this._mainDivId="ui-datepicker-div";this._inlineClass="ui-datepicker-inline";this._appendClass="ui-datepicker-append";this._triggerClass="ui-datepicker-trigger";this._dialogClass="ui-datepicker-dialog";this._disableClass="ui-datepicker-disabled";this._unselectableClass="ui-datepicker-unselectable";this._currentClass="ui-datepicker-current-day";this._dayOverClass=
"ui-datepicker-days-cell-over";this.regional=[];this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su",
"Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:false,showMonthAfterYear:false,yearSuffix:""};this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:false,hideIfNoPrevNext:false,navigationAsDateFormat:false,gotoCurrent:false,changeMonth:false,changeYear:false,yearRange:"c-10:c+10",showOtherMonths:false,selectOtherMonths:false,showWeek:false,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",
-minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:true,showButtonPanel:false,autoSize:false};d.extend(this._defaults,this.regional[""]);this.dpDiv=N(d('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}function N(a){return a.bind("mouseout",function(b){b=
-d(b.target).closest("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a");b.length&&b.removeClass("ui-state-hover ui-datepicker-prev-hover ui-datepicker-next-hover")}).bind("mouseover",function(b){b=d(b.target).closest("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a");if(!(d.datepicker._isDisabledDatepicker(J.inline?a.parent()[0]:J.input[0])||!b.length)){b.parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");b.addClass("ui-state-hover");
-b.hasClass("ui-datepicker-prev")&&b.addClass("ui-datepicker-prev-hover");b.hasClass("ui-datepicker-next")&&b.addClass("ui-datepicker-next-hover")}})}function H(a,b){d.extend(a,b);for(var c in b)if(b[c]==null||b[c]==C)a[c]=b[c];return a}d.extend(d.ui,{datepicker:{version:"1.8.14"}});var A=(new Date).getTime(),J;d.extend(M.prototype,{markerClassName:"hasDatepicker",maxRows:4,log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(a){H(this._defaults,
-a||{});return this},_attachDatepicker:function(a,b){var c=null;for(var e in this._defaults){var f=a.getAttribute("date:"+e);if(f){c=c||{};try{c[e]=eval(f)}catch(h){c[e]=f}}}e=a.nodeName.toLowerCase();f=e=="div"||e=="span";if(!a.id){this.uuid+=1;a.id="dp"+this.uuid}var i=this._newInst(d(a),f);i.settings=d.extend({},b||{},c||{});if(e=="input")this._connectDatepicker(a,i);else f&&this._inlineDatepicker(a,i)},_newInst:function(a,b){return{id:a[0].id.replace(/([^A-Za-z0-9_-])/g,"\\\\$1"),input:a,selectedDay:0,
-selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:b,dpDiv:!b?this.dpDiv:N(d('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}},_connectDatepicker:function(a,b){var c=d(a);b.append=d([]);b.trigger=d([]);if(!c.hasClass(this.markerClassName)){this._attachments(c,b);c.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",function(e,f,h){b.settings[f]=
-h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});this._autoSize(b);d.data(a,"datepicker",b)}},_attachments:function(a,b){var c=this._get(b,"appendText"),e=this._get(b,"isRTL");b.append&&b.append.remove();if(c){b.append=d('<span class="'+this._appendClass+'">'+c+"</span>");a[e?"before":"after"](b.append)}a.unbind("focus",this._showDatepicker);b.trigger&&b.trigger.remove();c=this._get(b,"showOn");if(c=="focus"||c=="both")a.focus(this._showDatepicker);if(c=="button"||c=="both"){c=
-this._get(b,"buttonText");var f=this._get(b,"buttonImage");b.trigger=d(this._get(b,"buttonImageOnly")?d("<img/>").addClass(this._triggerClass).attr({src:f,alt:c,title:c}):d('<button type="button"></button>').addClass(this._triggerClass).html(f==""?c:d("<img/>").attr({src:f,alt:c,title:c})));a[e?"before":"after"](b.trigger);b.trigger.click(function(){d.datepicker._datepickerShowing&&d.datepicker._lastInput==a[0]?d.datepicker._hideDatepicker():d.datepicker._showDatepicker(a[0]);return false})}},_autoSize:function(a){if(this._get(a,
-"autoSize")&&!a.inline){var b=new Date(2009,11,20),c=this._get(a,"dateFormat");if(c.match(/[DM]/)){var e=function(f){for(var h=0,i=0,g=0;g<f.length;g++)if(f[g].length>h){h=f[g].length;i=g}return i};b.setMonth(e(this._get(a,c.match(/MM/)?"monthNames":"monthNamesShort")));b.setDate(e(this._get(a,c.match(/DD/)?"dayNames":"dayNamesShort"))+20-b.getDay())}a.input.attr("size",this._formatDate(a,b).length)}},_inlineDatepicker:function(a,b){var c=d(a);if(!c.hasClass(this.markerClassName)){c.addClass(this.markerClassName).append(b.dpDiv).bind("setData.datepicker",
-function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});d.data(a,"datepicker",b);this._setDate(b,this._getDefaultDate(b),true);this._updateDatepicker(b);this._updateAlternate(b);b.dpDiv.show()}},_dialogDatepicker:function(a,b,c,e,f){a=this._dialogInst;if(!a){this.uuid+=1;this._dialogInput=d('<input type="text" id="'+("dp"+this.uuid)+'" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>');this._dialogInput.keydown(this._doKeyDown);d("body").append(this._dialogInput);
-a=this._dialogInst=this._newInst(this._dialogInput,false);a.settings={};d.data(this._dialogInput[0],"datepicker",a)}H(a.settings,e||{});b=b&&b.constructor==Date?this._formatDate(a,b):b;this._dialogInput.val(b);this._pos=f?f.length?f:[f.pageX,f.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left",
-this._pos[0]+20+"px").css("top",this._pos[1]+"px");a.settings.onSelect=c;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);d.blockUI&&d.blockUI(this.dpDiv);d.data(this._dialogInput[0],"datepicker",a);return this},_destroyDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();d.removeData(a,"datepicker");if(e=="input"){c.append.remove();c.trigger.remove();b.removeClass(this.markerClassName).unbind("focus",
-this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)}else if(e=="div"||e=="span")b.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=false;c.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(e=="div"||e=="span"){b=
-b.children("."+this._inlineClass);b.children().removeClass("ui-state-disabled");b.find("select.ui-datepicker-month, select.ui-datepicker-year").removeAttr("disabled")}this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f})}},_disableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=true;c.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",
-cursor:"default"})}else if(e=="div"||e=="span"){b=b.children("."+this._inlineClass);b.children().addClass("ui-state-disabled");b.find("select.ui-datepicker-month, select.ui-datepicker-year").attr("disabled","disabled")}this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f});this._disabledInputs[this._disabledInputs.length]=a}},_isDisabledDatepicker:function(a){if(!a)return false;for(var b=0;b<this._disabledInputs.length;b++)if(this._disabledInputs[b]==a)return true;return false},
-_getInst:function(a){try{return d.data(a,"datepicker")}catch(b){throw"Missing instance data for this datepicker";}},_optionDatepicker:function(a,b,c){var e=this._getInst(a);if(arguments.length==2&&typeof b=="string")return b=="defaults"?d.extend({},d.datepicker._defaults):e?b=="all"?d.extend({},e.settings):this._get(e,b):null;var f=b||{};if(typeof b=="string"){f={};f[b]=c}if(e){this._curInst==e&&this._hideDatepicker();var h=this._getDateDatepicker(a,true),i=this._getMinMaxDate(e,"min"),g=this._getMinMaxDate(e,
-"max");H(e.settings,f);if(i!==null&&f.dateFormat!==C&&f.minDate===C)e.settings.minDate=this._formatDate(e,i);if(g!==null&&f.dateFormat!==C&&f.maxDate===C)e.settings.maxDate=this._formatDate(e,g);this._attachments(d(a),e);this._autoSize(e);this._setDate(e,h);this._updateAlternate(e);this._updateDatepicker(e)}},_changeDatepicker:function(a,b,c){this._optionDatepicker(a,b,c)},_refreshDatepicker:function(a){(a=this._getInst(a))&&this._updateDatepicker(a)},_setDateDatepicker:function(a,b){if(a=this._getInst(a)){this._setDate(a,
-b);this._updateDatepicker(a);this._updateAlternate(a)}},_getDateDatepicker:function(a,b){(a=this._getInst(a))&&!a.inline&&this._setDateFromField(a,b);return a?this._getDate(a):null},_doKeyDown:function(a){var b=d.datepicker._getInst(a.target),c=true,e=b.dpDiv.is(".ui-datepicker-rtl");b._keyEvent=true;if(d.datepicker._datepickerShowing)switch(a.keyCode){case 9:d.datepicker._hideDatepicker();c=false;break;case 13:c=d("td."+d.datepicker._dayOverClass+":not(."+d.datepicker._currentClass+")",b.dpDiv);
-c[0]?d.datepicker._selectDay(a.target,b.selectedMonth,b.selectedYear,c[0]):d.datepicker._hideDatepicker();return false;case 27:d.datepicker._hideDatepicker();break;case 33:d.datepicker._adjustDate(a.target,a.ctrlKey?-d.datepicker._get(b,"stepBigMonths"):-d.datepicker._get(b,"stepMonths"),"M");break;case 34:d.datepicker._adjustDate(a.target,a.ctrlKey?+d.datepicker._get(b,"stepBigMonths"):+d.datepicker._get(b,"stepMonths"),"M");break;case 35:if(a.ctrlKey||a.metaKey)d.datepicker._clearDate(a.target);
-c=a.ctrlKey||a.metaKey;break;case 36:if(a.ctrlKey||a.metaKey)d.datepicker._gotoToday(a.target);c=a.ctrlKey||a.metaKey;break;case 37:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,e?+1:-1,"D");c=a.ctrlKey||a.metaKey;if(a.originalEvent.altKey)d.datepicker._adjustDate(a.target,a.ctrlKey?-d.datepicker._get(b,"stepBigMonths"):-d.datepicker._get(b,"stepMonths"),"M");break;case 38:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,-7,"D");c=a.ctrlKey||a.metaKey;break;case 39:if(a.ctrlKey||
-a.metaKey)d.datepicker._adjustDate(a.target,e?-1:+1,"D");c=a.ctrlKey||a.metaKey;if(a.originalEvent.altKey)d.datepicker._adjustDate(a.target,a.ctrlKey?+d.datepicker._get(b,"stepBigMonths"):+d.datepicker._get(b,"stepMonths"),"M");break;case 40:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,+7,"D");c=a.ctrlKey||a.metaKey;break;default:c=false}else if(a.keyCode==36&&a.ctrlKey)d.datepicker._showDatepicker(this);else c=false;if(c){a.preventDefault();a.stopPropagation()}},_doKeyPress:function(a){var b=
-d.datepicker._getInst(a.target);if(d.datepicker._get(b,"constrainInput")){b=d.datepicker._possibleChars(d.datepicker._get(b,"dateFormat"));var c=String.fromCharCode(a.charCode==C?a.keyCode:a.charCode);return a.ctrlKey||a.metaKey||c<" "||!b||b.indexOf(c)>-1}},_doKeyUp:function(a){a=d.datepicker._getInst(a.target);if(a.input.val()!=a.lastVal)try{if(d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),a.input?a.input.val():null,d.datepicker._getFormatConfig(a))){d.datepicker._setDateFromField(a);
-d.datepicker._updateAlternate(a);d.datepicker._updateDatepicker(a)}}catch(b){d.datepicker.log(b)}return true},_showDatepicker:function(a){a=a.target||a;if(a.nodeName.toLowerCase()!="input")a=d("input",a.parentNode)[0];if(!(d.datepicker._isDisabledDatepicker(a)||d.datepicker._lastInput==a)){var b=d.datepicker._getInst(a);if(d.datepicker._curInst&&d.datepicker._curInst!=b){d.datepicker._datepickerShowing&&d.datepicker._triggerOnClose(d.datepicker._curInst);d.datepicker._curInst.dpDiv.stop(true,true)}var c=
-d.datepicker._get(b,"beforeShow");H(b.settings,c?c.apply(a,[a,b]):{});b.lastVal=null;d.datepicker._lastInput=a;d.datepicker._setDateFromField(b);if(d.datepicker._inDialog)a.value="";if(!d.datepicker._pos){d.datepicker._pos=d.datepicker._findPos(a);d.datepicker._pos[1]+=a.offsetHeight}var e=false;d(a).parents().each(function(){e|=d(this).css("position")=="fixed";return!e});if(e&&d.browser.opera){d.datepicker._pos[0]-=document.documentElement.scrollLeft;d.datepicker._pos[1]-=document.documentElement.scrollTop}c=
-{left:d.datepicker._pos[0],top:d.datepicker._pos[1]};d.datepicker._pos=null;b.dpDiv.empty();b.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});d.datepicker._updateDatepicker(b);c=d.datepicker._checkOffset(b,c,e);b.dpDiv.css({position:d.datepicker._inDialog&&d.blockUI?"static":e?"fixed":"absolute",display:"none",left:c.left+"px",top:c.top+"px"});if(!b.inline){c=d.datepicker._get(b,"showAnim");var f=d.datepicker._get(b,"duration"),h=function(){var i=b.dpDiv.find("iframe.ui-datepicker-cover");
-if(i.length){var g=d.datepicker._getBorders(b.dpDiv);i.css({left:-g[0],top:-g[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()})}};b.dpDiv.zIndex(d(a).zIndex()+1);d.datepicker._datepickerShowing=true;d.effects&&d.effects[c]?b.dpDiv.show(c,d.datepicker._get(b,"showOptions"),f,h):b.dpDiv[c||"show"](c?f:null,h);if(!c||!f)h();b.input.is(":visible")&&!b.input.is(":disabled")&&b.input.focus();d.datepicker._curInst=b}}},_updateDatepicker:function(a){this.maxRows=4;var b=d.datepicker._getBorders(a.dpDiv);
-J=a;a.dpDiv.empty().append(this._generateHTML(a));var c=a.dpDiv.find("iframe.ui-datepicker-cover");c.length&&c.css({left:-b[0],top:-b[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()});a.dpDiv.find("."+this._dayOverClass+" a").mouseover();b=this._getNumberOfMonths(a);c=b[1];a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");c>1&&a.dpDiv.addClass("ui-datepicker-multi-"+c).css("width",17*c+"em");a.dpDiv[(b[0]!=1||b[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");
-a.dpDiv[(this._get(a,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");a==d.datepicker._curInst&&d.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&&!a.input.is(":disabled")&&a.input[0]!=document.activeElement&&a.input.focus();if(a.yearshtml){var e=a.yearshtml;setTimeout(function(){e===a.yearshtml&&a.yearshtml&&a.dpDiv.find("select.ui-datepicker-year:first").replaceWith(a.yearshtml);e=a.yearshtml=null},0)}},_getBorders:function(a){var b=function(c){return{thin:1,medium:2,thick:3}[c]||
-c};return[parseFloat(b(a.css("border-left-width"))),parseFloat(b(a.css("border-top-width")))]},_checkOffset:function(a,b,c){var e=a.dpDiv.outerWidth(),f=a.dpDiv.outerHeight(),h=a.input?a.input.outerWidth():0,i=a.input?a.input.outerHeight():0,g=document.documentElement.clientWidth+d(document).scrollLeft(),j=document.documentElement.clientHeight+d(document).scrollTop();b.left-=this._get(a,"isRTL")?e-h:0;b.left-=c&&b.left==a.input.offset().left?d(document).scrollLeft():0;b.top-=c&&b.top==a.input.offset().top+
-i?d(document).scrollTop():0;b.left-=Math.min(b.left,b.left+e>g&&g>e?Math.abs(b.left+e-g):0);b.top-=Math.min(b.top,b.top+f>j&&j>f?Math.abs(f+i):0);return b},_findPos:function(a){for(var b=this._get(this._getInst(a),"isRTL");a&&(a.type=="hidden"||a.nodeType!=1||d.expr.filters.hidden(a));)a=a[b?"previousSibling":"nextSibling"];a=d(a).offset();return[a.left,a.top]},_triggerOnClose:function(a){var b=this._get(a,"onClose");if(b)b.apply(a.input?a.input[0]:null,[a.input?a.input.val():"",a])},_hideDatepicker:function(a){var b=
-this._curInst;if(!(!b||a&&b!=d.data(a,"datepicker")))if(this._datepickerShowing){a=this._get(b,"showAnim");var c=this._get(b,"duration"),e=function(){d.datepicker._tidyDialog(b);this._curInst=null};d.effects&&d.effects[a]?b.dpDiv.hide(a,d.datepicker._get(b,"showOptions"),c,e):b.dpDiv[a=="slideDown"?"slideUp":a=="fadeIn"?"fadeOut":"hide"](a?c:null,e);a||e();d.datepicker._triggerOnClose(b);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",
-left:"0",top:"-100px"});if(d.blockUI){d.unblockUI();d("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(a){if(d.datepicker._curInst){a=d(a.target);a[0].id!=d.datepicker._mainDivId&&a.parents("#"+d.datepicker._mainDivId).length==0&&!a.hasClass(d.datepicker.markerClassName)&&!a.hasClass(d.datepicker._triggerClass)&&d.datepicker._datepickerShowing&&!(d.datepicker._inDialog&&
-d.blockUI)&&d.datepicker._hideDatepicker()}},_adjustDate:function(a,b,c){a=d(a);var e=this._getInst(a[0]);if(!this._isDisabledDatepicker(a[0])){this._adjustInstDate(e,b+(c=="M"?this._get(e,"showCurrentAtPos"):0),c);this._updateDatepicker(e)}},_gotoToday:function(a){a=d(a);var b=this._getInst(a[0]);if(this._get(b,"gotoCurrent")&&b.currentDay){b.selectedDay=b.currentDay;b.drawMonth=b.selectedMonth=b.currentMonth;b.drawYear=b.selectedYear=b.currentYear}else{var c=new Date;b.selectedDay=c.getDate();b.drawMonth=
-b.selectedMonth=c.getMonth();b.drawYear=b.selectedYear=c.getFullYear()}this._notifyChange(b);this._adjustDate(a)},_selectMonthYear:function(a,b,c){a=d(a);var e=this._getInst(a[0]);e._selectingMonthYear=false;e["selected"+(c=="M"?"Month":"Year")]=e["draw"+(c=="M"?"Month":"Year")]=parseInt(b.options[b.selectedIndex].value,10);this._notifyChange(e);this._adjustDate(a)},_clickMonthYear:function(a){var b=this._getInst(d(a)[0]);b.input&&b._selectingMonthYear&&setTimeout(function(){b.input.focus()},0);b._selectingMonthYear=
-!b._selectingMonthYear},_selectDay:function(a,b,c,e){var f=d(a);if(!(d(e).hasClass(this._unselectableClass)||this._isDisabledDatepicker(f[0]))){f=this._getInst(f[0]);f.selectedDay=f.currentDay=d("a",e).html();f.selectedMonth=f.currentMonth=b;f.selectedYear=f.currentYear=c;this._selectDate(a,this._formatDate(f,f.currentDay,f.currentMonth,f.currentYear))}},_clearDate:function(a){a=d(a);this._getInst(a[0]);this._selectDate(a,"")},_selectDate:function(a,b){a=this._getInst(d(a)[0]);b=b!=null?b:this._formatDate(a);
-a.input&&a.input.val(b);this._updateAlternate(a);var c=this._get(a,"onSelect");if(c)c.apply(a.input?a.input[0]:null,[b,a]);else a.input&&a.input.trigger("change");if(a.inline)this._updateDatepicker(a);else{this._hideDatepicker();this._lastInput=a.input[0];typeof a.input[0]!="object"&&a.input.focus();this._lastInput=null}},_updateAlternate:function(a){var b=this._get(a,"altField");if(b){var c=this._get(a,"altFormat")||this._get(a,"dateFormat"),e=this._getDate(a),f=this.formatDate(c,e,this._getFormatConfig(a));
-d(b).each(function(){d(this).val(f)})}},noWeekends:function(a){a=a.getDay();return[a>0&&a<6,""]},iso8601Week:function(a){a=new Date(a.getTime());a.setDate(a.getDate()+4-(a.getDay()||7));var b=a.getTime();a.setMonth(0);a.setDate(1);return Math.floor(Math.round((b-a)/864E5)/7)+1},parseDate:function(a,b,c){if(a==null||b==null)throw"Invalid arguments";b=typeof b=="object"?b.toString():b+"";if(b=="")return null;var e=(c?c.shortYearCutoff:null)||this._defaults.shortYearCutoff;e=typeof e!="string"?e:(new Date).getFullYear()%
-100+parseInt(e,10);for(var f=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,h=(c?c.dayNames:null)||this._defaults.dayNames,i=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,g=(c?c.monthNames:null)||this._defaults.monthNames,j=c=-1,l=-1,u=-1,k=false,o=function(p){(p=B+1<a.length&&a.charAt(B+1)==p)&&B++;return p},m=function(p){var D=o(p);p=new RegExp("^\\d{1,"+(p=="@"?14:p=="!"?20:p=="y"&&D?4:p=="o"?3:2)+"}");p=b.substring(q).match(p);if(!p)throw"Missing number at position "+q;q+=
-p[0].length;return parseInt(p[0],10)},n=function(p,D,K){p=d.map(o(p)?K:D,function(w,x){return[[x,w]]}).sort(function(w,x){return-(w[1].length-x[1].length)});var E=-1;d.each(p,function(w,x){w=x[1];if(b.substr(q,w.length).toLowerCase()==w.toLowerCase()){E=x[0];q+=w.length;return false}});if(E!=-1)return E+1;else throw"Unknown name at position "+q;},s=function(){if(b.charAt(q)!=a.charAt(B))throw"Unexpected literal at position "+q;q++},q=0,B=0;B<a.length;B++)if(k)if(a.charAt(B)=="'"&&!o("'"))k=false;
-else s();else switch(a.charAt(B)){case "d":l=m("d");break;case "D":n("D",f,h);break;case "o":u=m("o");break;case "m":j=m("m");break;case "M":j=n("M",i,g);break;case "y":c=m("y");break;case "@":var v=new Date(m("@"));c=v.getFullYear();j=v.getMonth()+1;l=v.getDate();break;case "!":v=new Date((m("!")-this._ticksTo1970)/1E4);c=v.getFullYear();j=v.getMonth()+1;l=v.getDate();break;case "'":if(o("'"))s();else k=true;break;default:s()}if(q<b.length)throw"Extra/unparsed characters found in date: "+b.substring(q);
-if(c==-1)c=(new Date).getFullYear();else if(c<100)c+=(new Date).getFullYear()-(new Date).getFullYear()%100+(c<=e?0:-100);if(u>-1){j=1;l=u;do{e=this._getDaysInMonth(c,j-1);if(l<=e)break;j++;l-=e}while(1)}v=this._daylightSavingAdjust(new Date(c,j-1,l));if(v.getFullYear()!=c||v.getMonth()+1!=j||v.getDate()!=l)throw"Invalid date";return v},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",
-TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1E7,formatDate:function(a,b,c){if(!b)return"";var e=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,f=(c?c.dayNames:null)||this._defaults.dayNames,h=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort;c=(c?c.monthNames:null)||this._defaults.monthNames;var i=function(o){(o=k+1<a.length&&a.charAt(k+1)==o)&&k++;return o},g=function(o,m,n){m=""+m;if(i(o))for(;m.length<
-n;)m="0"+m;return m},j=function(o,m,n,s){return i(o)?s[m]:n[m]},l="",u=false;if(b)for(var k=0;k<a.length;k++)if(u)if(a.charAt(k)=="'"&&!i("'"))u=false;else l+=a.charAt(k);else switch(a.charAt(k)){case "d":l+=g("d",b.getDate(),2);break;case "D":l+=j("D",b.getDay(),e,f);break;case "o":l+=g("o",Math.round(((new Date(b.getFullYear(),b.getMonth(),b.getDate())).getTime()-(new Date(b.getFullYear(),0,0)).getTime())/864E5),3);break;case "m":l+=g("m",b.getMonth()+1,2);break;case "M":l+=j("M",b.getMonth(),h,
-c);break;case "y":l+=i("y")?b.getFullYear():(b.getYear()%100<10?"0":"")+b.getYear()%100;break;case "@":l+=b.getTime();break;case "!":l+=b.getTime()*1E4+this._ticksTo1970;break;case "'":if(i("'"))l+="'";else u=true;break;default:l+=a.charAt(k)}return l},_possibleChars:function(a){for(var b="",c=false,e=function(h){(h=f+1<a.length&&a.charAt(f+1)==h)&&f++;return h},f=0;f<a.length;f++)if(c)if(a.charAt(f)=="'"&&!e("'"))c=false;else b+=a.charAt(f);else switch(a.charAt(f)){case "d":case "m":case "y":case "@":b+=
-"0123456789";break;case "D":case "M":return null;case "'":if(e("'"))b+="'";else c=true;break;default:b+=a.charAt(f)}return b},_get:function(a,b){return a.settings[b]!==C?a.settings[b]:this._defaults[b]},_setDateFromField:function(a,b){if(a.input.val()!=a.lastVal){var c=this._get(a,"dateFormat"),e=a.lastVal=a.input?a.input.val():null,f,h;f=h=this._getDefaultDate(a);var i=this._getFormatConfig(a);try{f=this.parseDate(c,e,i)||h}catch(g){this.log(g);e=b?"":e}a.selectedDay=f.getDate();a.drawMonth=a.selectedMonth=
-f.getMonth();a.drawYear=a.selectedYear=f.getFullYear();a.currentDay=e?f.getDate():0;a.currentMonth=e?f.getMonth():0;a.currentYear=e?f.getFullYear():0;this._adjustInstDate(a)}},_getDefaultDate:function(a){return this._restrictMinMax(a,this._determineDate(a,this._get(a,"defaultDate"),new Date))},_determineDate:function(a,b,c){var e=function(h){var i=new Date;i.setDate(i.getDate()+h);return i},f=function(h){try{return d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),h,d.datepicker._getFormatConfig(a))}catch(i){}var g=
-(h.toLowerCase().match(/^c/)?d.datepicker._getDate(a):null)||new Date,j=g.getFullYear(),l=g.getMonth();g=g.getDate();for(var u=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,k=u.exec(h);k;){switch(k[2]||"d"){case "d":case "D":g+=parseInt(k[1],10);break;case "w":case "W":g+=parseInt(k[1],10)*7;break;case "m":case "M":l+=parseInt(k[1],10);g=Math.min(g,d.datepicker._getDaysInMonth(j,l));break;case "y":case "Y":j+=parseInt(k[1],10);g=Math.min(g,d.datepicker._getDaysInMonth(j,l));break}k=u.exec(h)}return new Date(j,
-l,g)};if(b=(b=b==null||b===""?c:typeof b=="string"?f(b):typeof b=="number"?isNaN(b)?c:e(b):new Date(b.getTime()))&&b.toString()=="Invalid Date"?c:b){b.setHours(0);b.setMinutes(0);b.setSeconds(0);b.setMilliseconds(0)}return this._daylightSavingAdjust(b)},_daylightSavingAdjust:function(a){if(!a)return null;a.setHours(a.getHours()>12?a.getHours()+2:0);return a},_setDate:function(a,b,c){var e=!b,f=a.selectedMonth,h=a.selectedYear;b=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay=
-a.currentDay=b.getDate();a.drawMonth=a.selectedMonth=a.currentMonth=b.getMonth();a.drawYear=a.selectedYear=a.currentYear=b.getFullYear();if((f!=a.selectedMonth||h!=a.selectedYear)&&!c)this._notifyChange(a);this._adjustInstDate(a);if(a.input)a.input.val(e?"":this._formatDate(a))},_getDate:function(a){return!a.currentYear||a.input&&a.input.val()==""?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay))},_generateHTML:function(a){var b=new Date;b=this._daylightSavingAdjust(new Date(b.getFullYear(),
-b.getMonth(),b.getDate()));var c=this._get(a,"isRTL"),e=this._get(a,"showButtonPanel"),f=this._get(a,"hideIfNoPrevNext"),h=this._get(a,"navigationAsDateFormat"),i=this._getNumberOfMonths(a),g=this._get(a,"showCurrentAtPos"),j=this._get(a,"stepMonths"),l=i[0]!=1||i[1]!=1,u=this._daylightSavingAdjust(!a.currentDay?new Date(9999,9,9):new Date(a.currentYear,a.currentMonth,a.currentDay)),k=this._getMinMaxDate(a,"min"),o=this._getMinMaxDate(a,"max");g=a.drawMonth-g;var m=a.drawYear;if(g<0){g+=12;m--}if(o){var n=
-this._daylightSavingAdjust(new Date(o.getFullYear(),o.getMonth()-i[0]*i[1]+1,o.getDate()));for(n=k&&n<k?k:n;this._daylightSavingAdjust(new Date(m,g,1))>n;){g--;if(g<0){g=11;m--}}}a.drawMonth=g;a.drawYear=m;n=this._get(a,"prevText");n=!h?n:this.formatDate(n,this._daylightSavingAdjust(new Date(m,g-j,1)),this._getFormatConfig(a));n=this._canAdjustMonth(a,-1,m,g)?'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery_'+A+".datepicker._adjustDate('#"+a.id+"', -"+j+", 'M');\" title=\""+n+'"><span class="ui-icon ui-icon-circle-triangle-'+
-(c?"e":"w")+'">'+n+"</span></a>":f?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+n+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+n+"</span></a>";var s=this._get(a,"nextText");s=!h?s:this.formatDate(s,this._daylightSavingAdjust(new Date(m,g+j,1)),this._getFormatConfig(a));f=this._canAdjustMonth(a,+1,m,g)?'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery_'+A+".datepicker._adjustDate('#"+a.id+"', +"+j+", 'M');\" title=\""+s+'"><span class="ui-icon ui-icon-circle-triangle-'+
-(c?"w":"e")+'">'+s+"</span></a>":f?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+s+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+s+"</span></a>";j=this._get(a,"currentText");s=this._get(a,"gotoCurrent")&&a.currentDay?u:b;j=!h?j:this.formatDate(j,s,this._getFormatConfig(a));h=!a.inline?'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery_'+A+'.datepicker._hideDatepicker();">'+this._get(a,
-"closeText")+"</button>":"";e=e?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(c?h:"")+(this._isInRange(a,s)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery_'+A+".datepicker._gotoToday('#"+a.id+"');\">"+j+"</button>":"")+(c?"":h)+"</div>":"";h=parseInt(this._get(a,"firstDay"),10);h=isNaN(h)?0:h;j=this._get(a,"showWeek");s=this._get(a,"dayNames");this._get(a,"dayNamesShort");var q=this._get(a,"dayNamesMin"),B=
-this._get(a,"monthNames"),v=this._get(a,"monthNamesShort"),p=this._get(a,"beforeShowDay"),D=this._get(a,"showOtherMonths"),K=this._get(a,"selectOtherMonths");this._get(a,"calculateWeek");for(var E=this._getDefaultDate(a),w="",x=0;x<i[0];x++){var O="";this.maxRows=4;for(var G=0;G<i[1];G++){var P=this._daylightSavingAdjust(new Date(m,g,a.selectedDay)),t=" ui-corner-all",y="";if(l){y+='<div class="ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=" ui-datepicker-group-first";t=" ui-corner-"+(c?"right":
-"left");break;case i[1]-1:y+=" ui-datepicker-group-last";t=" ui-corner-"+(c?"left":"right");break;default:y+=" ui-datepicker-group-middle";t="";break}y+='">'}y+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+t+'">'+(/all|left/.test(t)&&x==0?c?f:n:"")+(/all|right/.test(t)&&x==0?c?n:f:"")+this._generateMonthYearHeader(a,g,m,k,o,x>0||G>0,B,v)+'</div><table class="ui-datepicker-calendar"><thead><tr>';var z=j?'<th class="ui-datepicker-week-col">'+this._get(a,"weekHeader")+"</th>":
-"";for(t=0;t<7;t++){var r=(t+h)%7;z+="<th"+((t+h+6)%7>=5?' class="ui-datepicker-week-end"':"")+'><span title="'+s[r]+'">'+q[r]+"</span></th>"}y+=z+"</tr></thead><tbody>";z=this._getDaysInMonth(m,g);if(m==a.selectedYear&&g==a.selectedMonth)a.selectedDay=Math.min(a.selectedDay,z);t=(this._getFirstDayOfMonth(m,g)-h+7)%7;z=Math.ceil((t+z)/7);this.maxRows=z=l?this.maxRows>z?this.maxRows:z:z;r=this._daylightSavingAdjust(new Date(m,g,1-t));for(var Q=0;Q<z;Q++){y+="<tr>";var R=!j?"":'<td class="ui-datepicker-week-col">'+
-this._get(a,"calculateWeek")(r)+"</td>";for(t=0;t<7;t++){var I=p?p.apply(a.input?a.input[0]:null,[r]):[true,""],F=r.getMonth()!=g,L=F&&!K||!I[0]||k&&r<k||o&&r>o;R+='<td class="'+((t+h+6)%7>=5?" ui-datepicker-week-end":"")+(F?" ui-datepicker-other-month":"")+(r.getTime()==P.getTime()&&g==a.selectedMonth&&a._keyEvent||E.getTime()==r.getTime()&&E.getTime()==P.getTime()?" "+this._dayOverClass:"")+(L?" "+this._unselectableClass+" ui-state-disabled":"")+(F&&!D?"":" "+I[1]+(r.getTime()==u.getTime()?" "+
-this._currentClass:"")+(r.getTime()==b.getTime()?" ui-datepicker-today":""))+'"'+((!F||D)&&I[2]?' title="'+I[2]+'"':"")+(L?"":' onclick="DP_jQuery_'+A+".datepicker._selectDay('#"+a.id+"',"+r.getMonth()+","+r.getFullYear()+', this);return false;"')+">"+(F&&!D?"&#xa0;":L?'<span class="ui-state-default">'+r.getDate()+"</span>":'<a class="ui-state-default'+(r.getTime()==b.getTime()?" ui-state-highlight":"")+(r.getTime()==u.getTime()?" ui-state-active":"")+(F?" ui-priority-secondary":"")+'" href="#">'+
-r.getDate()+"</a>")+"</td>";r.setDate(r.getDate()+1);r=this._daylightSavingAdjust(r)}y+=R+"</tr>"}g++;if(g>11){g=0;m++}y+="</tbody></table>"+(l?"</div>"+(i[0]>0&&G==i[1]-1?'<div class="ui-datepicker-row-break"></div>':""):"");O+=y}w+=O}w+=e+(d.browser.msie&&parseInt(d.browser.version,10)<7&&!a.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':"");a._keyEvent=false;return w},_generateMonthYearHeader:function(a,b,c,e,f,h,i,g){var j=this._get(a,"changeMonth"),
-l=this._get(a,"changeYear"),u=this._get(a,"showMonthAfterYear"),k='<div class="ui-datepicker-title">',o="";if(h||!j)o+='<span class="ui-datepicker-month">'+i[b]+"</span>";else{i=e&&e.getFullYear()==c;var m=f&&f.getFullYear()==c;o+='<select class="ui-datepicker-month" onchange="DP_jQuery_'+A+".datepicker._selectMonthYear('#"+a.id+"', this, 'M');\" onclick=\"DP_jQuery_"+A+".datepicker._clickMonthYear('#"+a.id+"');\">";for(var n=0;n<12;n++)if((!i||n>=e.getMonth())&&(!m||n<=f.getMonth()))o+='<option value="'+
-n+'"'+(n==b?' selected="selected"':"")+">"+g[n]+"</option>";o+="</select>"}u||(k+=o+(h||!(j&&l)?"&#xa0;":""));if(!a.yearshtml){a.yearshtml="";if(h||!l)k+='<span class="ui-datepicker-year">'+c+"</span>";else{g=this._get(a,"yearRange").split(":");var s=(new Date).getFullYear();i=function(q){q=q.match(/c[+-].*/)?c+parseInt(q.substring(1),10):q.match(/[+-].*/)?s+parseInt(q,10):parseInt(q,10);return isNaN(q)?s:q};b=i(g[0]);g=Math.max(b,i(g[1]||""));b=e?Math.max(b,e.getFullYear()):b;g=f?Math.min(g,f.getFullYear()):
-g;for(a.yearshtml+='<select class="ui-datepicker-year" onchange="DP_jQuery_'+A+".datepicker._selectMonthYear('#"+a.id+"', this, 'Y');\" onclick=\"DP_jQuery_"+A+".datepicker._clickMonthYear('#"+a.id+"');\">";b<=g;b++)a.yearshtml+='<option value="'+b+'"'+(b==c?' selected="selected"':"")+">"+b+"</option>";a.yearshtml+="</select>";k+=a.yearshtml;a.yearshtml=null}}k+=this._get(a,"yearSuffix");if(u)k+=(h||!(j&&l)?"&#xa0;":"")+o;k+="</div>";return k},_adjustInstDate:function(a,b,c){var e=a.drawYear+(c==
-"Y"?b:0),f=a.drawMonth+(c=="M"?b:0);b=Math.min(a.selectedDay,this._getDaysInMonth(e,f))+(c=="D"?b:0);e=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(e,f,b)));a.selectedDay=e.getDate();a.drawMonth=a.selectedMonth=e.getMonth();a.drawYear=a.selectedYear=e.getFullYear();if(c=="M"||c=="Y")this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");b=c&&b<c?c:b;return b=a&&b>a?a:b},_notifyChange:function(a){var b=this._get(a,"onChangeMonthYear");
-if(b)b.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){a=this._get(a,"numberOfMonths");return a==null?[1,1]:typeof a=="number"?[1,a]:a},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-this._daylightSavingAdjust(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,e){var f=this._getNumberOfMonths(a);
-c=this._daylightSavingAdjust(new Date(c,e+(b<0?b:f[0]*f[1]),1));b<0&&c.setDate(this._getDaysInMonth(c.getFullYear(),c.getMonth()));return this._isInRange(a,c)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!a||b.getTime()<=a.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!="string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a,
-"dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,e){if(!b){a.currentDay=a.selectedDay;a.currentMonth=a.selectedMonth;a.currentYear=a.selectedYear}b=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(e,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),b,this._getFormatConfig(a))}});d.fn.datepicker=
-function(a){if(!this.length)return this;if(!d.datepicker.initialized){d(document).mousedown(d.datepicker._checkExternalClick).find("body").append(d.datepicker.dpDiv);d.datepicker.initialized=true}var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget"))return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));if(a=="option"&&arguments.length==2&&typeof arguments[1]=="string")return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,
-[this[0]].concat(b));return this.each(function(){typeof a=="string"?d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this].concat(b)):d.datepicker._attachDatepicker(this,a)})};d.datepicker=new M;d.datepicker.initialized=false;d.datepicker.uuid=(new Date).getTime();d.datepicker.version="1.8.14";window["DP_jQuery_"+A]=d})(jQuery);
+minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:true,showButtonPanel:false,autoSize:false,disabled:false};d.extend(this._defaults,this.regional[""]);this.dpDiv=N(d('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}function N(a){return a.bind("mouseout",
+function(b){b=d(b.target).closest("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a");b.length&&b.removeClass("ui-state-hover ui-datepicker-prev-hover ui-datepicker-next-hover")}).bind("mouseover",function(b){b=d(b.target).closest("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a");if(!(d.datepicker._isDisabledDatepicker(J.inline?a.parent()[0]:J.input[0])||!b.length)){b.parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");
+b.addClass("ui-state-hover");b.hasClass("ui-datepicker-prev")&&b.addClass("ui-datepicker-prev-hover");b.hasClass("ui-datepicker-next")&&b.addClass("ui-datepicker-next-hover")}})}function H(a,b){d.extend(a,b);for(var c in b)if(b[c]==null||b[c]==C)a[c]=b[c];return a}d.extend(d.ui,{datepicker:{version:"1.8.16"}});var B=(new Date).getTime(),J;d.extend(M.prototype,{markerClassName:"hasDatepicker",maxRows:4,log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv},
+setDefaults:function(a){H(this._defaults,a||{});return this},_attachDatepicker:function(a,b){var c=null;for(var e in this._defaults){var f=a.getAttribute("date:"+e);if(f){c=c||{};try{c[e]=eval(f)}catch(h){c[e]=f}}}e=a.nodeName.toLowerCase();f=e=="div"||e=="span";if(!a.id){this.uuid+=1;a.id="dp"+this.uuid}var i=this._newInst(d(a),f);i.settings=d.extend({},b||{},c||{});if(e=="input")this._connectDatepicker(a,i);else f&&this._inlineDatepicker(a,i)},_newInst:function(a,b){return{id:a[0].id.replace(/([^A-Za-z0-9_-])/g,
+"\\\\$1"),input:a,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:b,dpDiv:!b?this.dpDiv:N(d('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}},_connectDatepicker:function(a,b){var c=d(a);b.append=d([]);b.trigger=d([]);if(!c.hasClass(this.markerClassName)){this._attachments(c,b);c.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",
+function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});this._autoSize(b);d.data(a,"datepicker",b);b.settings.disabled&&this._disableDatepicker(a)}},_attachments:function(a,b){var c=this._get(b,"appendText"),e=this._get(b,"isRTL");b.append&&b.append.remove();if(c){b.append=d('<span class="'+this._appendClass+'">'+c+"</span>");a[e?"before":"after"](b.append)}a.unbind("focus",this._showDatepicker);b.trigger&&b.trigger.remove();c=this._get(b,"showOn");if(c==
+"focus"||c=="both")a.focus(this._showDatepicker);if(c=="button"||c=="both"){c=this._get(b,"buttonText");var f=this._get(b,"buttonImage");b.trigger=d(this._get(b,"buttonImageOnly")?d("<img/>").addClass(this._triggerClass).attr({src:f,alt:c,title:c}):d('<button type="button"></button>').addClass(this._triggerClass).html(f==""?c:d("<img/>").attr({src:f,alt:c,title:c})));a[e?"before":"after"](b.trigger);b.trigger.click(function(){d.datepicker._datepickerShowing&&d.datepicker._lastInput==a[0]?d.datepicker._hideDatepicker():
+d.datepicker._showDatepicker(a[0]);return false})}},_autoSize:function(a){if(this._get(a,"autoSize")&&!a.inline){var b=new Date(2009,11,20),c=this._get(a,"dateFormat");if(c.match(/[DM]/)){var e=function(f){for(var h=0,i=0,g=0;g<f.length;g++)if(f[g].length>h){h=f[g].length;i=g}return i};b.setMonth(e(this._get(a,c.match(/MM/)?"monthNames":"monthNamesShort")));b.setDate(e(this._get(a,c.match(/DD/)?"dayNames":"dayNamesShort"))+20-b.getDay())}a.input.attr("size",this._formatDate(a,b).length)}},_inlineDatepicker:function(a,
+b){var c=d(a);if(!c.hasClass(this.markerClassName)){c.addClass(this.markerClassName).append(b.dpDiv).bind("setData.datepicker",function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});d.data(a,"datepicker",b);this._setDate(b,this._getDefaultDate(b),true);this._updateDatepicker(b);this._updateAlternate(b);b.settings.disabled&&this._disableDatepicker(a);b.dpDiv.css("display","block")}},_dialogDatepicker:function(a,b,c,e,f){a=this._dialogInst;if(!a){this.uuid+=
+1;this._dialogInput=d('<input type="text" id="'+("dp"+this.uuid)+'" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>');this._dialogInput.keydown(this._doKeyDown);d("body").append(this._dialogInput);a=this._dialogInst=this._newInst(this._dialogInput,false);a.settings={};d.data(this._dialogInput[0],"datepicker",a)}H(a.settings,e||{});b=b&&b.constructor==Date?this._formatDate(a,b):b;this._dialogInput.val(b);this._pos=f?f.length?f:[f.pageX,f.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/
+2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px");a.settings.onSelect=c;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);d.blockUI&&d.blockUI(this.dpDiv);d.data(this._dialogInput[0],"datepicker",a);return this},_destroyDatepicker:function(a){var b=
+d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();d.removeData(a,"datepicker");if(e=="input"){c.append.remove();c.trigger.remove();b.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)}else if(e=="div"||e=="span")b.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=
+a.nodeName.toLowerCase();if(e=="input"){a.disabled=false;c.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(e=="div"||e=="span"){b=b.children("."+this._inlineClass);b.children().removeClass("ui-state-disabled");b.find("select.ui-datepicker-month, select.ui-datepicker-year").removeAttr("disabled")}this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f})}},_disableDatepicker:function(a){var b=d(a),c=d.data(a,
+"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=true;c.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else if(e=="div"||e=="span"){b=b.children("."+this._inlineClass);b.children().addClass("ui-state-disabled");b.find("select.ui-datepicker-month, select.ui-datepicker-year").attr("disabled","disabled")}this._disabledInputs=d.map(this._disabledInputs,function(f){return f==
+a?null:f});this._disabledInputs[this._disabledInputs.length]=a}},_isDisabledDatepicker:function(a){if(!a)return false;for(var b=0;b<this._disabledInputs.length;b++)if(this._disabledInputs[b]==a)return true;return false},_getInst:function(a){try{return d.data(a,"datepicker")}catch(b){throw"Missing instance data for this datepicker";}},_optionDatepicker:function(a,b,c){var e=this._getInst(a);if(arguments.length==2&&typeof b=="string")return b=="defaults"?d.extend({},d.datepicker._defaults):e?b=="all"?
+d.extend({},e.settings):this._get(e,b):null;var f=b||{};if(typeof b=="string"){f={};f[b]=c}if(e){this._curInst==e&&this._hideDatepicker();var h=this._getDateDatepicker(a,true),i=this._getMinMaxDate(e,"min"),g=this._getMinMaxDate(e,"max");H(e.settings,f);if(i!==null&&f.dateFormat!==C&&f.minDate===C)e.settings.minDate=this._formatDate(e,i);if(g!==null&&f.dateFormat!==C&&f.maxDate===C)e.settings.maxDate=this._formatDate(e,g);this._attachments(d(a),e);this._autoSize(e);this._setDate(e,h);this._updateAlternate(e);
+this._updateDatepicker(e)}},_changeDatepicker:function(a,b,c){this._optionDatepicker(a,b,c)},_refreshDatepicker:function(a){(a=this._getInst(a))&&this._updateDatepicker(a)},_setDateDatepicker:function(a,b){if(a=this._getInst(a)){this._setDate(a,b);this._updateDatepicker(a);this._updateAlternate(a)}},_getDateDatepicker:function(a,b){(a=this._getInst(a))&&!a.inline&&this._setDateFromField(a,b);return a?this._getDate(a):null},_doKeyDown:function(a){var b=d.datepicker._getInst(a.target),c=true,e=b.dpDiv.is(".ui-datepicker-rtl");
+b._keyEvent=true;if(d.datepicker._datepickerShowing)switch(a.keyCode){case 9:d.datepicker._hideDatepicker();c=false;break;case 13:c=d("td."+d.datepicker._dayOverClass+":not(."+d.datepicker._currentClass+")",b.dpDiv);c[0]&&d.datepicker._selectDay(a.target,b.selectedMonth,b.selectedYear,c[0]);if(a=d.datepicker._get(b,"onSelect")){c=d.datepicker._formatDate(b);a.apply(b.input?b.input[0]:null,[c,b])}else d.datepicker._hideDatepicker();return false;case 27:d.datepicker._hideDatepicker();break;case 33:d.datepicker._adjustDate(a.target,
+a.ctrlKey?-d.datepicker._get(b,"stepBigMonths"):-d.datepicker._get(b,"stepMonths"),"M");break;case 34:d.datepicker._adjustDate(a.target,a.ctrlKey?+d.datepicker._get(b,"stepBigMonths"):+d.datepicker._get(b,"stepMonths"),"M");break;case 35:if(a.ctrlKey||a.metaKey)d.datepicker._clearDate(a.target);c=a.ctrlKey||a.metaKey;break;case 36:if(a.ctrlKey||a.metaKey)d.datepicker._gotoToday(a.target);c=a.ctrlKey||a.metaKey;break;case 37:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,e?+1:-1,"D");c=
+a.ctrlKey||a.metaKey;if(a.originalEvent.altKey)d.datepicker._adjustDate(a.target,a.ctrlKey?-d.datepicker._get(b,"stepBigMonths"):-d.datepicker._get(b,"stepMonths"),"M");break;case 38:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,-7,"D");c=a.ctrlKey||a.metaKey;break;case 39:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,e?-1:+1,"D");c=a.ctrlKey||a.metaKey;if(a.originalEvent.altKey)d.datepicker._adjustDate(a.target,a.ctrlKey?+d.datepicker._get(b,"stepBigMonths"):+d.datepicker._get(b,
+"stepMonths"),"M");break;case 40:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,+7,"D");c=a.ctrlKey||a.metaKey;break;default:c=false}else if(a.keyCode==36&&a.ctrlKey)d.datepicker._showDatepicker(this);else c=false;if(c){a.preventDefault();a.stopPropagation()}},_doKeyPress:function(a){var b=d.datepicker._getInst(a.target);if(d.datepicker._get(b,"constrainInput")){b=d.datepicker._possibleChars(d.datepicker._get(b,"dateFormat"));var c=String.fromCharCode(a.charCode==C?a.keyCode:a.charCode);
+return a.ctrlKey||a.metaKey||c<" "||!b||b.indexOf(c)>-1}},_doKeyUp:function(a){a=d.datepicker._getInst(a.target);if(a.input.val()!=a.lastVal)try{if(d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),a.input?a.input.val():null,d.datepicker._getFormatConfig(a))){d.datepicker._setDateFromField(a);d.datepicker._updateAlternate(a);d.datepicker._updateDatepicker(a)}}catch(b){d.datepicker.log(b)}return true},_showDatepicker:function(a){a=a.target||a;if(a.nodeName.toLowerCase()!="input")a=d("input",
+a.parentNode)[0];if(!(d.datepicker._isDisabledDatepicker(a)||d.datepicker._lastInput==a)){var b=d.datepicker._getInst(a);if(d.datepicker._curInst&&d.datepicker._curInst!=b){d.datepicker._datepickerShowing&&d.datepicker._triggerOnClose(d.datepicker._curInst);d.datepicker._curInst.dpDiv.stop(true,true)}var c=d.datepicker._get(b,"beforeShow");c=c?c.apply(a,[a,b]):{};if(c!==false){H(b.settings,c);b.lastVal=null;d.datepicker._lastInput=a;d.datepicker._setDateFromField(b);if(d.datepicker._inDialog)a.value=
+"";if(!d.datepicker._pos){d.datepicker._pos=d.datepicker._findPos(a);d.datepicker._pos[1]+=a.offsetHeight}var e=false;d(a).parents().each(function(){e|=d(this).css("position")=="fixed";return!e});if(e&&d.browser.opera){d.datepicker._pos[0]-=document.documentElement.scrollLeft;d.datepicker._pos[1]-=document.documentElement.scrollTop}c={left:d.datepicker._pos[0],top:d.datepicker._pos[1]};d.datepicker._pos=null;b.dpDiv.empty();b.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});d.datepicker._updateDatepicker(b);
+c=d.datepicker._checkOffset(b,c,e);b.dpDiv.css({position:d.datepicker._inDialog&&d.blockUI?"static":e?"fixed":"absolute",display:"none",left:c.left+"px",top:c.top+"px"});if(!b.inline){c=d.datepicker._get(b,"showAnim");var f=d.datepicker._get(b,"duration"),h=function(){var i=b.dpDiv.find("iframe.ui-datepicker-cover");if(i.length){var g=d.datepicker._getBorders(b.dpDiv);i.css({left:-g[0],top:-g[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()})}};b.dpDiv.zIndex(d(a).zIndex()+1);d.datepicker._datepickerShowing=
+true;d.effects&&d.effects[c]?b.dpDiv.show(c,d.datepicker._get(b,"showOptions"),f,h):b.dpDiv[c||"show"](c?f:null,h);if(!c||!f)h();b.input.is(":visible")&&!b.input.is(":disabled")&&b.input.focus();d.datepicker._curInst=b}}}},_updateDatepicker:function(a){this.maxRows=4;var b=d.datepicker._getBorders(a.dpDiv);J=a;a.dpDiv.empty().append(this._generateHTML(a));var c=a.dpDiv.find("iframe.ui-datepicker-cover");c.length&&c.css({left:-b[0],top:-b[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()});
+a.dpDiv.find("."+this._dayOverClass+" a").mouseover();b=this._getNumberOfMonths(a);c=b[1];a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");c>1&&a.dpDiv.addClass("ui-datepicker-multi-"+c).css("width",17*c+"em");a.dpDiv[(b[0]!=1||b[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");a.dpDiv[(this._get(a,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");a==d.datepicker._curInst&&d.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&&
+!a.input.is(":disabled")&&a.input[0]!=document.activeElement&&a.input.focus();if(a.yearshtml){var e=a.yearshtml;setTimeout(function(){e===a.yearshtml&&a.yearshtml&&a.dpDiv.find("select.ui-datepicker-year:first").replaceWith(a.yearshtml);e=a.yearshtml=null},0)}},_getBorders:function(a){var b=function(c){return{thin:1,medium:2,thick:3}[c]||c};return[parseFloat(b(a.css("border-left-width"))),parseFloat(b(a.css("border-top-width")))]},_checkOffset:function(a,b,c){var e=a.dpDiv.outerWidth(),f=a.dpDiv.outerHeight(),
+h=a.input?a.input.outerWidth():0,i=a.input?a.input.outerHeight():0,g=document.documentElement.clientWidth+d(document).scrollLeft(),j=document.documentElement.clientHeight+d(document).scrollTop();b.left-=this._get(a,"isRTL")?e-h:0;b.left-=c&&b.left==a.input.offset().left?d(document).scrollLeft():0;b.top-=c&&b.top==a.input.offset().top+i?d(document).scrollTop():0;b.left-=Math.min(b.left,b.left+e>g&&g>e?Math.abs(b.left+e-g):0);b.top-=Math.min(b.top,b.top+f>j&&j>f?Math.abs(f+i):0);return b},_findPos:function(a){for(var b=
+this._get(this._getInst(a),"isRTL");a&&(a.type=="hidden"||a.nodeType!=1||d.expr.filters.hidden(a));)a=a[b?"previousSibling":"nextSibling"];a=d(a).offset();return[a.left,a.top]},_triggerOnClose:function(a){var b=this._get(a,"onClose");if(b)b.apply(a.input?a.input[0]:null,[a.input?a.input.val():"",a])},_hideDatepicker:function(a){var b=this._curInst;if(!(!b||a&&b!=d.data(a,"datepicker")))if(this._datepickerShowing){a=this._get(b,"showAnim");var c=this._get(b,"duration"),e=function(){d.datepicker._tidyDialog(b);
+this._curInst=null};d.effects&&d.effects[a]?b.dpDiv.hide(a,d.datepicker._get(b,"showOptions"),c,e):b.dpDiv[a=="slideDown"?"slideUp":a=="fadeIn"?"fadeOut":"hide"](a?c:null,e);a||e();d.datepicker._triggerOnClose(b);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if(d.blockUI){d.unblockUI();d("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},
+_checkExternalClick:function(a){if(d.datepicker._curInst){a=d(a.target);a[0].id!=d.datepicker._mainDivId&&a.parents("#"+d.datepicker._mainDivId).length==0&&!a.hasClass(d.datepicker.markerClassName)&&!a.hasClass(d.datepicker._triggerClass)&&d.datepicker._datepickerShowing&&!(d.datepicker._inDialog&&d.blockUI)&&d.datepicker._hideDatepicker()}},_adjustDate:function(a,b,c){a=d(a);var e=this._getInst(a[0]);if(!this._isDisabledDatepicker(a[0])){this._adjustInstDate(e,b+(c=="M"?this._get(e,"showCurrentAtPos"):
+0),c);this._updateDatepicker(e)}},_gotoToday:function(a){a=d(a);var b=this._getInst(a[0]);if(this._get(b,"gotoCurrent")&&b.currentDay){b.selectedDay=b.currentDay;b.drawMonth=b.selectedMonth=b.currentMonth;b.drawYear=b.selectedYear=b.currentYear}else{var c=new Date;b.selectedDay=c.getDate();b.drawMonth=b.selectedMonth=c.getMonth();b.drawYear=b.selectedYear=c.getFullYear()}this._notifyChange(b);this._adjustDate(a)},_selectMonthYear:function(a,b,c){a=d(a);var e=this._getInst(a[0]);e["selected"+(c=="M"?
+"Month":"Year")]=e["draw"+(c=="M"?"Month":"Year")]=parseInt(b.options[b.selectedIndex].value,10);this._notifyChange(e);this._adjustDate(a)},_selectDay:function(a,b,c,e){var f=d(a);if(!(d(e).hasClass(this._unselectableClass)||this._isDisabledDatepicker(f[0]))){f=this._getInst(f[0]);f.selectedDay=f.currentDay=d("a",e).html();f.selectedMonth=f.currentMonth=b;f.selectedYear=f.currentYear=c;this._selectDate(a,this._formatDate(f,f.currentDay,f.currentMonth,f.currentYear))}},_clearDate:function(a){a=d(a);
+this._getInst(a[0]);this._selectDate(a,"")},_selectDate:function(a,b){a=this._getInst(d(a)[0]);b=b!=null?b:this._formatDate(a);a.input&&a.input.val(b);this._updateAlternate(a);var c=this._get(a,"onSelect");if(c)c.apply(a.input?a.input[0]:null,[b,a]);else a.input&&a.input.trigger("change");if(a.inline)this._updateDatepicker(a);else{this._hideDatepicker();this._lastInput=a.input[0];typeof a.input[0]!="object"&&a.input.focus();this._lastInput=null}},_updateAlternate:function(a){var b=this._get(a,"altField");
+if(b){var c=this._get(a,"altFormat")||this._get(a,"dateFormat"),e=this._getDate(a),f=this.formatDate(c,e,this._getFormatConfig(a));d(b).each(function(){d(this).val(f)})}},noWeekends:function(a){a=a.getDay();return[a>0&&a<6,""]},iso8601Week:function(a){a=new Date(a.getTime());a.setDate(a.getDate()+4-(a.getDay()||7));var b=a.getTime();a.setMonth(0);a.setDate(1);return Math.floor(Math.round((b-a)/864E5)/7)+1},parseDate:function(a,b,c){if(a==null||b==null)throw"Invalid arguments";b=typeof b=="object"?
+b.toString():b+"";if(b=="")return null;var e=(c?c.shortYearCutoff:null)||this._defaults.shortYearCutoff;e=typeof e!="string"?e:(new Date).getFullYear()%100+parseInt(e,10);for(var f=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,h=(c?c.dayNames:null)||this._defaults.dayNames,i=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,g=(c?c.monthNames:null)||this._defaults.monthNames,j=c=-1,l=-1,u=-1,k=false,o=function(p){(p=A+1<a.length&&a.charAt(A+1)==p)&&A++;return p},m=function(p){var D=
+o(p);p=new RegExp("^\\d{1,"+(p=="@"?14:p=="!"?20:p=="y"&&D?4:p=="o"?3:2)+"}");p=b.substring(q).match(p);if(!p)throw"Missing number at position "+q;q+=p[0].length;return parseInt(p[0],10)},n=function(p,D,K){p=d.map(o(p)?K:D,function(w,x){return[[x,w]]}).sort(function(w,x){return-(w[1].length-x[1].length)});var E=-1;d.each(p,function(w,x){w=x[1];if(b.substr(q,w.length).toLowerCase()==w.toLowerCase()){E=x[0];q+=w.length;return false}});if(E!=-1)return E+1;else throw"Unknown name at position "+q;},s=
+function(){if(b.charAt(q)!=a.charAt(A))throw"Unexpected literal at position "+q;q++},q=0,A=0;A<a.length;A++)if(k)if(a.charAt(A)=="'"&&!o("'"))k=false;else s();else switch(a.charAt(A)){case "d":l=m("d");break;case "D":n("D",f,h);break;case "o":u=m("o");break;case "m":j=m("m");break;case "M":j=n("M",i,g);break;case "y":c=m("y");break;case "@":var v=new Date(m("@"));c=v.getFullYear();j=v.getMonth()+1;l=v.getDate();break;case "!":v=new Date((m("!")-this._ticksTo1970)/1E4);c=v.getFullYear();j=v.getMonth()+
+1;l=v.getDate();break;case "'":if(o("'"))s();else k=true;break;default:s()}if(q<b.length)throw"Extra/unparsed characters found in date: "+b.substring(q);if(c==-1)c=(new Date).getFullYear();else if(c<100)c+=(new Date).getFullYear()-(new Date).getFullYear()%100+(c<=e?0:-100);if(u>-1){j=1;l=u;do{e=this._getDaysInMonth(c,j-1);if(l<=e)break;j++;l-=e}while(1)}v=this._daylightSavingAdjust(new Date(c,j-1,l));if(v.getFullYear()!=c||v.getMonth()+1!=j||v.getDate()!=l)throw"Invalid date";return v},ATOM:"yy-mm-dd",
+COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1E7,formatDate:function(a,b,c){if(!b)return"";var e=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,f=(c?c.dayNames:null)||this._defaults.dayNames,h=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort;c=(c?c.monthNames:
+null)||this._defaults.monthNames;var i=function(o){(o=k+1<a.length&&a.charAt(k+1)==o)&&k++;return o},g=function(o,m,n){m=""+m;if(i(o))for(;m.length<n;)m="0"+m;return m},j=function(o,m,n,s){return i(o)?s[m]:n[m]},l="",u=false;if(b)for(var k=0;k<a.length;k++)if(u)if(a.charAt(k)=="'"&&!i("'"))u=false;else l+=a.charAt(k);else switch(a.charAt(k)){case "d":l+=g("d",b.getDate(),2);break;case "D":l+=j("D",b.getDay(),e,f);break;case "o":l+=g("o",Math.round(((new Date(b.getFullYear(),b.getMonth(),b.getDate())).getTime()-
+(new Date(b.getFullYear(),0,0)).getTime())/864E5),3);break;case "m":l+=g("m",b.getMonth()+1,2);break;case "M":l+=j("M",b.getMonth(),h,c);break;case "y":l+=i("y")?b.getFullYear():(b.getYear()%100<10?"0":"")+b.getYear()%100;break;case "@":l+=b.getTime();break;case "!":l+=b.getTime()*1E4+this._ticksTo1970;break;case "'":if(i("'"))l+="'";else u=true;break;default:l+=a.charAt(k)}return l},_possibleChars:function(a){for(var b="",c=false,e=function(h){(h=f+1<a.length&&a.charAt(f+1)==h)&&f++;return h},f=
+0;f<a.length;f++)if(c)if(a.charAt(f)=="'"&&!e("'"))c=false;else b+=a.charAt(f);else switch(a.charAt(f)){case "d":case "m":case "y":case "@":b+="0123456789";break;case "D":case "M":return null;case "'":if(e("'"))b+="'";else c=true;break;default:b+=a.charAt(f)}return b},_get:function(a,b){return a.settings[b]!==C?a.settings[b]:this._defaults[b]},_setDateFromField:function(a,b){if(a.input.val()!=a.lastVal){var c=this._get(a,"dateFormat"),e=a.lastVal=a.input?a.input.val():null,f,h;f=h=this._getDefaultDate(a);
+var i=this._getFormatConfig(a);try{f=this.parseDate(c,e,i)||h}catch(g){this.log(g);e=b?"":e}a.selectedDay=f.getDate();a.drawMonth=a.selectedMonth=f.getMonth();a.drawYear=a.selectedYear=f.getFullYear();a.currentDay=e?f.getDate():0;a.currentMonth=e?f.getMonth():0;a.currentYear=e?f.getFullYear():0;this._adjustInstDate(a)}},_getDefaultDate:function(a){return this._restrictMinMax(a,this._determineDate(a,this._get(a,"defaultDate"),new Date))},_determineDate:function(a,b,c){var e=function(h){var i=new Date;
+i.setDate(i.getDate()+h);return i},f=function(h){try{return d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),h,d.datepicker._getFormatConfig(a))}catch(i){}var g=(h.toLowerCase().match(/^c/)?d.datepicker._getDate(a):null)||new Date,j=g.getFullYear(),l=g.getMonth();g=g.getDate();for(var u=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,k=u.exec(h);k;){switch(k[2]||"d"){case "d":case "D":g+=parseInt(k[1],10);break;case "w":case "W":g+=parseInt(k[1],10)*7;break;case "m":case "M":l+=parseInt(k[1],10);g=
+Math.min(g,d.datepicker._getDaysInMonth(j,l));break;case "y":case "Y":j+=parseInt(k[1],10);g=Math.min(g,d.datepicker._getDaysInMonth(j,l));break}k=u.exec(h)}return new Date(j,l,g)};if(b=(b=b==null||b===""?c:typeof b=="string"?f(b):typeof b=="number"?isNaN(b)?c:e(b):new Date(b.getTime()))&&b.toString()=="Invalid Date"?c:b){b.setHours(0);b.setMinutes(0);b.setSeconds(0);b.setMilliseconds(0)}return this._daylightSavingAdjust(b)},_daylightSavingAdjust:function(a){if(!a)return null;a.setHours(a.getHours()>
+12?a.getHours()+2:0);return a},_setDate:function(a,b,c){var e=!b,f=a.selectedMonth,h=a.selectedYear;b=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay=a.currentDay=b.getDate();a.drawMonth=a.selectedMonth=a.currentMonth=b.getMonth();a.drawYear=a.selectedYear=a.currentYear=b.getFullYear();if((f!=a.selectedMonth||h!=a.selectedYear)&&!c)this._notifyChange(a);this._adjustInstDate(a);if(a.input)a.input.val(e?"":this._formatDate(a))},_getDate:function(a){return!a.currentYear||a.input&&
+a.input.val()==""?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay))},_generateHTML:function(a){var b=new Date;b=this._daylightSavingAdjust(new Date(b.getFullYear(),b.getMonth(),b.getDate()));var c=this._get(a,"isRTL"),e=this._get(a,"showButtonPanel"),f=this._get(a,"hideIfNoPrevNext"),h=this._get(a,"navigationAsDateFormat"),i=this._getNumberOfMonths(a),g=this._get(a,"showCurrentAtPos"),j=this._get(a,"stepMonths"),l=i[0]!=1||i[1]!=1,u=this._daylightSavingAdjust(!a.currentDay?
+new Date(9999,9,9):new Date(a.currentYear,a.currentMonth,a.currentDay)),k=this._getMinMaxDate(a,"min"),o=this._getMinMaxDate(a,"max");g=a.drawMonth-g;var m=a.drawYear;if(g<0){g+=12;m--}if(o){var n=this._daylightSavingAdjust(new Date(o.getFullYear(),o.getMonth()-i[0]*i[1]+1,o.getDate()));for(n=k&&n<k?k:n;this._daylightSavingAdjust(new Date(m,g,1))>n;){g--;if(g<0){g=11;m--}}}a.drawMonth=g;a.drawYear=m;n=this._get(a,"prevText");n=!h?n:this.formatDate(n,this._daylightSavingAdjust(new Date(m,g-j,1)),this._getFormatConfig(a));
+n=this._canAdjustMonth(a,-1,m,g)?'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery_'+B+".datepicker._adjustDate('#"+a.id+"', -"+j+", 'M');\" title=\""+n+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+n+"</span></a>":f?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+n+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+n+"</span></a>";var s=this._get(a,"nextText");s=!h?s:this.formatDate(s,this._daylightSavingAdjust(new Date(m,
+g+j,1)),this._getFormatConfig(a));f=this._canAdjustMonth(a,+1,m,g)?'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery_'+B+".datepicker._adjustDate('#"+a.id+"', +"+j+", 'M');\" title=\""+s+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+s+"</span></a>":f?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+s+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+s+"</span></a>";j=this._get(a,"currentText");s=this._get(a,"gotoCurrent")&&
+a.currentDay?u:b;j=!h?j:this.formatDate(j,s,this._getFormatConfig(a));h=!a.inline?'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery_'+B+'.datepicker._hideDatepicker();">'+this._get(a,"closeText")+"</button>":"";e=e?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(c?h:"")+(this._isInRange(a,s)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery_'+
+B+".datepicker._gotoToday('#"+a.id+"');\">"+j+"</button>":"")+(c?"":h)+"</div>":"";h=parseInt(this._get(a,"firstDay"),10);h=isNaN(h)?0:h;j=this._get(a,"showWeek");s=this._get(a,"dayNames");this._get(a,"dayNamesShort");var q=this._get(a,"dayNamesMin"),A=this._get(a,"monthNames"),v=this._get(a,"monthNamesShort"),p=this._get(a,"beforeShowDay"),D=this._get(a,"showOtherMonths"),K=this._get(a,"selectOtherMonths");this._get(a,"calculateWeek");for(var E=this._getDefaultDate(a),w="",x=0;x<i[0];x++){var O=
+"";this.maxRows=4;for(var G=0;G<i[1];G++){var P=this._daylightSavingAdjust(new Date(m,g,a.selectedDay)),t=" ui-corner-all",y="";if(l){y+='<div class="ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=" ui-datepicker-group-first";t=" ui-corner-"+(c?"right":"left");break;case i[1]-1:y+=" ui-datepicker-group-last";t=" ui-corner-"+(c?"left":"right");break;default:y+=" ui-datepicker-group-middle";t="";break}y+='">'}y+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+t+'">'+(/all|left/.test(t)&&
+x==0?c?f:n:"")+(/all|right/.test(t)&&x==0?c?n:f:"")+this._generateMonthYearHeader(a,g,m,k,o,x>0||G>0,A,v)+'</div><table class="ui-datepicker-calendar"><thead><tr>';var z=j?'<th class="ui-datepicker-week-col">'+this._get(a,"weekHeader")+"</th>":"";for(t=0;t<7;t++){var r=(t+h)%7;z+="<th"+((t+h+6)%7>=5?' class="ui-datepicker-week-end"':"")+'><span title="'+s[r]+'">'+q[r]+"</span></th>"}y+=z+"</tr></thead><tbody>";z=this._getDaysInMonth(m,g);if(m==a.selectedYear&&g==a.selectedMonth)a.selectedDay=Math.min(a.selectedDay,
+z);t=(this._getFirstDayOfMonth(m,g)-h+7)%7;z=Math.ceil((t+z)/7);this.maxRows=z=l?this.maxRows>z?this.maxRows:z:z;r=this._daylightSavingAdjust(new Date(m,g,1-t));for(var Q=0;Q<z;Q++){y+="<tr>";var R=!j?"":'<td class="ui-datepicker-week-col">'+this._get(a,"calculateWeek")(r)+"</td>";for(t=0;t<7;t++){var I=p?p.apply(a.input?a.input[0]:null,[r]):[true,""],F=r.getMonth()!=g,L=F&&!K||!I[0]||k&&r<k||o&&r>o;R+='<td class="'+((t+h+6)%7>=5?" ui-datepicker-week-end":"")+(F?" ui-datepicker-other-month":"")+(r.getTime()==
+P.getTime()&&g==a.selectedMonth&&a._keyEvent||E.getTime()==r.getTime()&&E.getTime()==P.getTime()?" "+this._dayOverClass:"")+(L?" "+this._unselectableClass+" ui-state-disabled":"")+(F&&!D?"":" "+I[1]+(r.getTime()==u.getTime()?" "+this._currentClass:"")+(r.getTime()==b.getTime()?" ui-datepicker-today":""))+'"'+((!F||D)&&I[2]?' title="'+I[2]+'"':"")+(L?"":' onclick="DP_jQuery_'+B+".datepicker._selectDay('#"+a.id+"',"+r.getMonth()+","+r.getFullYear()+', this);return false;"')+">"+(F&&!D?"&#xa0;":L?'<span class="ui-state-default">'+
+r.getDate()+"</span>":'<a class="ui-state-default'+(r.getTime()==b.getTime()?" ui-state-highlight":"")+(r.getTime()==u.getTime()?" ui-state-active":"")+(F?" ui-priority-secondary":"")+'" href="#">'+r.getDate()+"</a>")+"</td>";r.setDate(r.getDate()+1);r=this._daylightSavingAdjust(r)}y+=R+"</tr>"}g++;if(g>11){g=0;m++}y+="</tbody></table>"+(l?"</div>"+(i[0]>0&&G==i[1]-1?'<div class="ui-datepicker-row-break"></div>':""):"");O+=y}w+=O}w+=e+(d.browser.msie&&parseInt(d.browser.version,10)<7&&!a.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':
+"");a._keyEvent=false;return w},_generateMonthYearHeader:function(a,b,c,e,f,h,i,g){var j=this._get(a,"changeMonth"),l=this._get(a,"changeYear"),u=this._get(a,"showMonthAfterYear"),k='<div class="ui-datepicker-title">',o="";if(h||!j)o+='<span class="ui-datepicker-month">'+i[b]+"</span>";else{i=e&&e.getFullYear()==c;var m=f&&f.getFullYear()==c;o+='<select class="ui-datepicker-month" onchange="DP_jQuery_'+B+".datepicker._selectMonthYear('#"+a.id+"', this, 'M');\" >";for(var n=0;n<12;n++)if((!i||n>=e.getMonth())&&
+(!m||n<=f.getMonth()))o+='<option value="'+n+'"'+(n==b?' selected="selected"':"")+">"+g[n]+"</option>";o+="</select>"}u||(k+=o+(h||!(j&&l)?"&#xa0;":""));if(!a.yearshtml){a.yearshtml="";if(h||!l)k+='<span class="ui-datepicker-year">'+c+"</span>";else{g=this._get(a,"yearRange").split(":");var s=(new Date).getFullYear();i=function(q){q=q.match(/c[+-].*/)?c+parseInt(q.substring(1),10):q.match(/[+-].*/)?s+parseInt(q,10):parseInt(q,10);return isNaN(q)?s:q};b=i(g[0]);g=Math.max(b,i(g[1]||""));b=e?Math.max(b,
+e.getFullYear()):b;g=f?Math.min(g,f.getFullYear()):g;for(a.yearshtml+='<select class="ui-datepicker-year" onchange="DP_jQuery_'+B+".datepicker._selectMonthYear('#"+a.id+"', this, 'Y');\" >";b<=g;b++)a.yearshtml+='<option value="'+b+'"'+(b==c?' selected="selected"':"")+">"+b+"</option>";a.yearshtml+="</select>";k+=a.yearshtml;a.yearshtml=null}}k+=this._get(a,"yearSuffix");if(u)k+=(h||!(j&&l)?"&#xa0;":"")+o;k+="</div>";return k},_adjustInstDate:function(a,b,c){var e=a.drawYear+(c=="Y"?b:0),f=a.drawMonth+
+(c=="M"?b:0);b=Math.min(a.selectedDay,this._getDaysInMonth(e,f))+(c=="D"?b:0);e=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(e,f,b)));a.selectedDay=e.getDate();a.drawMonth=a.selectedMonth=e.getMonth();a.drawYear=a.selectedYear=e.getFullYear();if(c=="M"||c=="Y")this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");b=c&&b<c?c:b;return b=a&&b>a?a:b},_notifyChange:function(a){var b=this._get(a,"onChangeMonthYear");if(b)b.apply(a.input?
+a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){a=this._get(a,"numberOfMonths");return a==null?[1,1]:typeof a=="number"?[1,a]:a},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-this._daylightSavingAdjust(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,e){var f=this._getNumberOfMonths(a);c=this._daylightSavingAdjust(new Date(c,
+e+(b<0?b:f[0]*f[1]),1));b<0&&c.setDate(this._getDaysInMonth(c.getFullYear(),c.getMonth()));return this._isInRange(a,c)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!a||b.getTime()<=a.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!="string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a,"dayNamesShort"),dayNames:this._get(a,
+"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,e){if(!b){a.currentDay=a.selectedDay;a.currentMonth=a.selectedMonth;a.currentYear=a.selectedYear}b=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(e,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),b,this._getFormatConfig(a))}});d.fn.datepicker=function(a){if(!this.length)return this;
+if(!d.datepicker.initialized){d(document).mousedown(d.datepicker._checkExternalClick).find("body").append(d.datepicker.dpDiv);d.datepicker.initialized=true}var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget"))return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));if(a=="option"&&arguments.length==2&&typeof arguments[1]=="string")return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));return this.each(function(){typeof a==
+"string"?d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this].concat(b)):d.datepicker._attachDatepicker(this,a)})};d.datepicker=new M;d.datepicker.initialized=false;d.datepicker.uuid=(new Date).getTime();d.datepicker.version="1.8.16";window["DP_jQuery_"+B]=d})(jQuery);
;/*
- * jQuery UI Progressbar 1.8.14
+ * jQuery UI Progressbar 1.8.16
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
@@ -566,9 +537,9 @@ function(a){if(!this.length)return this;if(!d.datepicker.initialized){d(document
*/
(function(b,d){b.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()});this.valueDiv=b("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element);this.oldValue=this._value();this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow");
this.valueDiv.remove();b.Widget.prototype.destroy.apply(this,arguments)},value:function(a){if(a===d)return this._value();this._setOption("value",a);return this},_setOption:function(a,c){if(a==="value"){this.options.value=c;this._refreshValue();this._value()===this.options.max&&this._trigger("complete")}b.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;if(typeof a!=="number")a=0;return Math.min(this.options.max,Math.max(this.min,a))},_percentage:function(){return 100*
-this._value()/this.options.max},_refreshValue:function(){var a=this.value(),c=this._percentage();if(this.oldValue!==a){this.oldValue=a;this._trigger("change")}this.valueDiv.toggle(a>this.min).toggleClass("ui-corner-right",a===this.options.max).width(c.toFixed(0)+"%");this.element.attr("aria-valuenow",a)}});b.extend(b.ui.progressbar,{version:"1.8.14"})})(jQuery);
+this._value()/this.options.max},_refreshValue:function(){var a=this.value(),c=this._percentage();if(this.oldValue!==a){this.oldValue=a;this._trigger("change")}this.valueDiv.toggle(a>this.min).toggleClass("ui-corner-right",a===this.options.max).width(c.toFixed(0)+"%");this.element.attr("aria-valuenow",a)}});b.extend(b.ui.progressbar,{version:"1.8.16"})})(jQuery);
;/*
- * jQuery UI Effects 1.8.14
+ * jQuery UI Effects 1.8.16
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
@@ -585,20 +556,21 @@ a;b=null;a=c;c=a.effect}if(f.isFunction(a)){d=a;b=null;a={}}if(typeof a=="number
211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},q=["add","remove","toggle"],t={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};f.effects.animateClass=function(c,a,b,
d){if(f.isFunction(b)){d=b;b=null}return this.queue(function(){var e=f(this),g=e.attr("style")||" ",h=p(o.call(this)),r,v=e.attr("class");f.each(q,function(w,i){c[i]&&e[i+"Class"](c[i])});r=p(o.call(this));e.attr("class",v);e.animate(u(h,r),{queue:false,duration:a,easing:b,complete:function(){f.each(q,function(w,i){c[i]&&e[i+"Class"](c[i])});if(typeof e.attr("style")=="object"){e.attr("style").cssText="";e.attr("style").cssText=g}else e.attr("style",g);d&&d.apply(this,arguments);f.dequeue(this)}})})};
f.fn.extend({_addClass:f.fn.addClass,addClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{add:c},a,b,d]):this._addClass(c)},_removeClass:f.fn.removeClass,removeClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{remove:c},a,b,d]):this._removeClass(c)},_toggleClass:f.fn.toggleClass,toggleClass:function(c,a,b,d,e){return typeof a=="boolean"||a===j?b?f.effects.animateClass.apply(this,[a?{add:c}:{remove:c},b,d,e]):this._toggleClass(c,a):f.effects.animateClass.apply(this,
-[{toggle:c},a,b,d])},switchClass:function(c,a,b,d,e){return f.effects.animateClass.apply(this,[{add:a,remove:c},b,d,e])}});f.extend(f.effects,{version:"1.8.14",save:function(c,a){for(var b=0;b<a.length;b++)a[b]!==null&&c.data("ec.storage."+a[b],c[0].style[a[b]])},restore:function(c,a){for(var b=0;b<a.length;b++)a[b]!==null&&c.css(a[b],c.data("ec.storage."+a[b]))},setMode:function(c,a){if(a=="toggle")a=c.is(":hidden")?"show":"hide";return a},getBaseline:function(c,a){var b;switch(c[0]){case "top":b=
-0;break;case "middle":b=0.5;break;case "bottom":b=1;break;default:b=c[0]/a.height}switch(c[1]){case "left":c=0;break;case "center":c=0.5;break;case "right":c=1;break;default:c=c[1]/a.width}return{x:c,y:b}},createWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent();var a={width:c.outerWidth(true),height:c.outerHeight(true),"float":c.css("float")},b=f("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0});
-c.wrap(b);b=c.parent();if(c.css("position")=="static"){b.css({position:"relative"});c.css({position:"relative"})}else{f.extend(a,{position:c.css("position"),zIndex:c.css("z-index")});f.each(["top","left","bottom","right"],function(d,e){a[e]=c.css(e);if(isNaN(parseInt(a[e],10)))a[e]="auto"});c.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}return b.css(a).show()},removeWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent().replaceWith(c);return c},setTransition:function(c,
-a,b,d){d=d||{};f.each(a,function(e,g){unit=c.cssUnit(g);if(unit[0]>0)d[g]=unit[0]*b+unit[1]});return d}});f.fn.extend({effect:function(c){var a=k.apply(this,arguments),b={options:a[1],duration:a[2],callback:a[3]};a=b.options.mode;var d=f.effects[c];if(f.fx.off||!d)return a?this[a](b.duration,b.callback):this.each(function(){b.callback&&b.callback.call(this)});return d.call(this,b)},_show:f.fn.show,show:function(c){if(l(c))return this._show.apply(this,arguments);else{var a=k.apply(this,arguments);
-a[1].mode="show";return this.effect.apply(this,a)}},_hide:f.fn.hide,hide:function(c){if(l(c))return this._hide.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="hide";return this.effect.apply(this,a)}},__toggle:f.fn.toggle,toggle:function(c){if(l(c)||typeof c==="boolean"||f.isFunction(c))return this.__toggle.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="toggle";return this.effect.apply(this,a)}},cssUnit:function(c){var a=this.css(c),b=[];f.each(["em","px","%",
-"pt"],function(d,e){if(a.indexOf(e)>0)b=[parseFloat(a),e]});return b}});f.easing.jswing=f.easing.swing;f.extend(f.easing,{def:"easeOutQuad",swing:function(c,a,b,d,e){return f.easing[f.easing.def](c,a,b,d,e)},easeInQuad:function(c,a,b,d,e){return d*(a/=e)*a+b},easeOutQuad:function(c,a,b,d,e){return-d*(a/=e)*(a-2)+b},easeInOutQuad:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a+b;return-d/2*(--a*(a-2)-1)+b},easeInCubic:function(c,a,b,d,e){return d*(a/=e)*a*a+b},easeOutCubic:function(c,a,b,d,e){return d*
-((a=a/e-1)*a*a+1)+b},easeInOutCubic:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a+b;return d/2*((a-=2)*a*a+2)+b},easeInQuart:function(c,a,b,d,e){return d*(a/=e)*a*a*a+b},easeOutQuart:function(c,a,b,d,e){return-d*((a=a/e-1)*a*a*a-1)+b},easeInOutQuart:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a+b;return-d/2*((a-=2)*a*a*a-2)+b},easeInQuint:function(c,a,b,d,e){return d*(a/=e)*a*a*a*a+b},easeOutQuint:function(c,a,b,d,e){return d*((a=a/e-1)*a*a*a*a+1)+b},easeInOutQuint:function(c,a,b,d,e){if((a/=
-e/2)<1)return d/2*a*a*a*a*a+b;return d/2*((a-=2)*a*a*a*a+2)+b},easeInSine:function(c,a,b,d,e){return-d*Math.cos(a/e*(Math.PI/2))+d+b},easeOutSine:function(c,a,b,d,e){return d*Math.sin(a/e*(Math.PI/2))+b},easeInOutSine:function(c,a,b,d,e){return-d/2*(Math.cos(Math.PI*a/e)-1)+b},easeInExpo:function(c,a,b,d,e){return a==0?b:d*Math.pow(2,10*(a/e-1))+b},easeOutExpo:function(c,a,b,d,e){return a==e?b+d:d*(-Math.pow(2,-10*a/e)+1)+b},easeInOutExpo:function(c,a,b,d,e){if(a==0)return b;if(a==e)return b+d;if((a/=
-e/2)<1)return d/2*Math.pow(2,10*(a-1))+b;return d/2*(-Math.pow(2,-10*--a)+2)+b},easeInCirc:function(c,a,b,d,e){return-d*(Math.sqrt(1-(a/=e)*a)-1)+b},easeOutCirc:function(c,a,b,d,e){return d*Math.sqrt(1-(a=a/e-1)*a)+b},easeInOutCirc:function(c,a,b,d,e){if((a/=e/2)<1)return-d/2*(Math.sqrt(1-a*a)-1)+b;return d/2*(Math.sqrt(1-(a-=2)*a)+1)+b},easeInElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/
-h);return-(h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g))+b},easeOutElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);return h*Math.pow(2,-10*a)*Math.sin((a*e-c)*2*Math.PI/g)+d+b},easeInOutElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e/2)==2)return b+d;g||(g=e*0.3*1.5);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);if(a<1)return-0.5*
-h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)+b;return h*Math.pow(2,-10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)*0.5+d+b},easeInBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;return d*(a/=e)*a*((g+1)*a-g)+b},easeOutBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;return d*((a=a/e-1)*a*((g+1)*a+g)+1)+b},easeInOutBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;if((a/=e/2)<1)return d/2*a*a*(((g*=1.525)+1)*a-g)+b;return d/2*((a-=2)*a*(((g*=1.525)+1)*a+g)+2)+b},easeInBounce:function(c,a,b,d,e){return d-f.easing.easeOutBounce(c,
-e-a,0,d,e)+b},easeOutBounce:function(c,a,b,d,e){return(a/=e)<1/2.75?d*7.5625*a*a+b:a<2/2.75?d*(7.5625*(a-=1.5/2.75)*a+0.75)+b:a<2.5/2.75?d*(7.5625*(a-=2.25/2.75)*a+0.9375)+b:d*(7.5625*(a-=2.625/2.75)*a+0.984375)+b},easeInOutBounce:function(c,a,b,d,e){if(a<e/2)return f.easing.easeInBounce(c,a*2,0,d,e)*0.5+b;return f.easing.easeOutBounce(c,a*2-e,0,d,e)*0.5+d*0.5+b}})}(jQuery);
+[{toggle:c},a,b,d])},switchClass:function(c,a,b,d,e){return f.effects.animateClass.apply(this,[{add:a,remove:c},b,d,e])}});f.extend(f.effects,{version:"1.8.16",save:function(c,a){for(var b=0;b<a.length;b++)a[b]!==null&&c.data("ec.storage."+a[b],c[0].style[a[b]])},restore:function(c,a){for(var b=0;b<a.length;b++)a[b]!==null&&c.css(a[b],c.data("ec.storage."+a[b]))},setMode:function(c,a){if(a=="toggle")a=c.is(":hidden")?"show":"hide";return a},getBaseline:function(c,a){var b;switch(c[0]){case "top":b=
+0;break;case "middle":b=0.5;break;case "bottom":b=1;break;default:b=c[0]/a.height}switch(c[1]){case "left":c=0;break;case "center":c=0.5;break;case "right":c=1;break;default:c=c[1]/a.width}return{x:c,y:b}},createWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent();var a={width:c.outerWidth(true),height:c.outerHeight(true),"float":c.css("float")},b=f("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),
+d=document.activeElement;c.wrap(b);if(c[0]===d||f.contains(c[0],d))f(d).focus();b=c.parent();if(c.css("position")=="static"){b.css({position:"relative"});c.css({position:"relative"})}else{f.extend(a,{position:c.css("position"),zIndex:c.css("z-index")});f.each(["top","left","bottom","right"],function(e,g){a[g]=c.css(g);if(isNaN(parseInt(a[g],10)))a[g]="auto"});c.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}return b.css(a).show()},removeWrapper:function(c){var a,b=document.activeElement;
+if(c.parent().is(".ui-effects-wrapper")){a=c.parent().replaceWith(c);if(c[0]===b||f.contains(c[0],b))f(b).focus();return a}return c},setTransition:function(c,a,b,d){d=d||{};f.each(a,function(e,g){unit=c.cssUnit(g);if(unit[0]>0)d[g]=unit[0]*b+unit[1]});return d}});f.fn.extend({effect:function(c){var a=k.apply(this,arguments),b={options:a[1],duration:a[2],callback:a[3]};a=b.options.mode;var d=f.effects[c];if(f.fx.off||!d)return a?this[a](b.duration,b.callback):this.each(function(){b.callback&&b.callback.call(this)});
+return d.call(this,b)},_show:f.fn.show,show:function(c){if(l(c))return this._show.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="show";return this.effect.apply(this,a)}},_hide:f.fn.hide,hide:function(c){if(l(c))return this._hide.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="hide";return this.effect.apply(this,a)}},__toggle:f.fn.toggle,toggle:function(c){if(l(c)||typeof c==="boolean"||f.isFunction(c))return this.__toggle.apply(this,arguments);else{var a=k.apply(this,
+arguments);a[1].mode="toggle";return this.effect.apply(this,a)}},cssUnit:function(c){var a=this.css(c),b=[];f.each(["em","px","%","pt"],function(d,e){if(a.indexOf(e)>0)b=[parseFloat(a),e]});return b}});f.easing.jswing=f.easing.swing;f.extend(f.easing,{def:"easeOutQuad",swing:function(c,a,b,d,e){return f.easing[f.easing.def](c,a,b,d,e)},easeInQuad:function(c,a,b,d,e){return d*(a/=e)*a+b},easeOutQuad:function(c,a,b,d,e){return-d*(a/=e)*(a-2)+b},easeInOutQuad:function(c,a,b,d,e){if((a/=e/2)<1)return d/
+2*a*a+b;return-d/2*(--a*(a-2)-1)+b},easeInCubic:function(c,a,b,d,e){return d*(a/=e)*a*a+b},easeOutCubic:function(c,a,b,d,e){return d*((a=a/e-1)*a*a+1)+b},easeInOutCubic:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a+b;return d/2*((a-=2)*a*a+2)+b},easeInQuart:function(c,a,b,d,e){return d*(a/=e)*a*a*a+b},easeOutQuart:function(c,a,b,d,e){return-d*((a=a/e-1)*a*a*a-1)+b},easeInOutQuart:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a+b;return-d/2*((a-=2)*a*a*a-2)+b},easeInQuint:function(c,a,b,
+d,e){return d*(a/=e)*a*a*a*a+b},easeOutQuint:function(c,a,b,d,e){return d*((a=a/e-1)*a*a*a*a+1)+b},easeInOutQuint:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a*a+b;return d/2*((a-=2)*a*a*a*a+2)+b},easeInSine:function(c,a,b,d,e){return-d*Math.cos(a/e*(Math.PI/2))+d+b},easeOutSine:function(c,a,b,d,e){return d*Math.sin(a/e*(Math.PI/2))+b},easeInOutSine:function(c,a,b,d,e){return-d/2*(Math.cos(Math.PI*a/e)-1)+b},easeInExpo:function(c,a,b,d,e){return a==0?b:d*Math.pow(2,10*(a/e-1))+b},easeOutExpo:function(c,
+a,b,d,e){return a==e?b+d:d*(-Math.pow(2,-10*a/e)+1)+b},easeInOutExpo:function(c,a,b,d,e){if(a==0)return b;if(a==e)return b+d;if((a/=e/2)<1)return d/2*Math.pow(2,10*(a-1))+b;return d/2*(-Math.pow(2,-10*--a)+2)+b},easeInCirc:function(c,a,b,d,e){return-d*(Math.sqrt(1-(a/=e)*a)-1)+b},easeOutCirc:function(c,a,b,d,e){return d*Math.sqrt(1-(a=a/e-1)*a)+b},easeInOutCirc:function(c,a,b,d,e){if((a/=e/2)<1)return-d/2*(Math.sqrt(1-a*a)-1)+b;return d/2*(Math.sqrt(1-(a-=2)*a)+1)+b},easeInElastic:function(c,a,b,
+d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);return-(h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g))+b},easeOutElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);return h*Math.pow(2,-10*a)*Math.sin((a*e-c)*2*Math.PI/g)+d+b},easeInOutElastic:function(c,a,b,d,e){c=1.70158;var g=
+0,h=d;if(a==0)return b;if((a/=e/2)==2)return b+d;g||(g=e*0.3*1.5);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);if(a<1)return-0.5*h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)+b;return h*Math.pow(2,-10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)*0.5+d+b},easeInBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;return d*(a/=e)*a*((g+1)*a-g)+b},easeOutBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;return d*((a=a/e-1)*a*((g+1)*a+g)+1)+b},easeInOutBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;
+if((a/=e/2)<1)return d/2*a*a*(((g*=1.525)+1)*a-g)+b;return d/2*((a-=2)*a*(((g*=1.525)+1)*a+g)+2)+b},easeInBounce:function(c,a,b,d,e){return d-f.easing.easeOutBounce(c,e-a,0,d,e)+b},easeOutBounce:function(c,a,b,d,e){return(a/=e)<1/2.75?d*7.5625*a*a+b:a<2/2.75?d*(7.5625*(a-=1.5/2.75)*a+0.75)+b:a<2.5/2.75?d*(7.5625*(a-=2.25/2.75)*a+0.9375)+b:d*(7.5625*(a-=2.625/2.75)*a+0.984375)+b},easeInOutBounce:function(c,a,b,d,e){if(a<e/2)return f.easing.easeInBounce(c,a*2,0,d,e)*0.5+b;return f.easing.easeOutBounce(c,
+a*2-e,0,d,e)*0.5+d*0.5+b}})}(jQuery);
;/*
- * jQuery UI Effects Blind 1.8.14
+ * jQuery UI Effects Blind 1.8.16
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
@@ -612,7 +584,7 @@ e-a,0,d,e)+b},easeOutBounce:function(c,a,b,d,e){return(a/=e)<1/2.75?d*7.5625*a*a
(function(b){b.effects.blind=function(c){return this.queue(function(){var a=b(this),g=["position","top","bottom","left","right"],f=b.effects.setMode(a,c.options.mode||"hide"),d=c.options.direction||"vertical";b.effects.save(a,g);a.show();var e=b.effects.createWrapper(a).css({overflow:"hidden"}),h=d=="vertical"?"height":"width";d=d=="vertical"?e.height():e.width();f=="show"&&e.css(h,0);var i={};i[h]=f=="show"?d:0;e.animate(i,c.duration,c.options.easing,function(){f=="hide"&&a.hide();b.effects.restore(a,
g);b.effects.removeWrapper(a);c.callback&&c.callback.apply(a[0],arguments);a.dequeue()})})}})(jQuery);
;/*
- * jQuery UI Effects Bounce 1.8.14
+ * jQuery UI Effects Bounce 1.8.16
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
@@ -627,7 +599,7 @@ g);b.effects.removeWrapper(a);c.callback&&c.callback.apply(a[0],arguments);a.deq
3);if(h=="show")a.css("opacity",0).css(f,d=="pos"?-c:c);if(h=="hide")c/=m*2;h!="hide"&&m--;if(h=="show"){var g={opacity:1};g[f]=(d=="pos"?"+=":"-=")+c;a.animate(g,i/2,b.options.easing);c/=2;m--}for(g=0;g<m;g++){var j={},k={};j[f]=(d=="pos"?"-=":"+=")+c;k[f]=(d=="pos"?"+=":"-=")+c;a.animate(j,i/2,b.options.easing).animate(k,i/2,b.options.easing);c=h=="hide"?c*2:c/2}if(h=="hide"){g={opacity:0};g[f]=(d=="pos"?"-=":"+=")+c;a.animate(g,i/2,b.options.easing,function(){a.hide();e.effects.restore(a,l);e.effects.removeWrapper(a);
b.callback&&b.callback.apply(this,arguments)})}else{j={};k={};j[f]=(d=="pos"?"-=":"+=")+c;k[f]=(d=="pos"?"+=":"-=")+c;a.animate(j,i/2,b.options.easing).animate(k,i/2,b.options.easing,function(){e.effects.restore(a,l);e.effects.removeWrapper(a);b.callback&&b.callback.apply(this,arguments)})}a.queue("fx",function(){a.dequeue()});a.dequeue()})}})(jQuery);
;/*
- * jQuery UI Effects Clip 1.8.14
+ * jQuery UI Effects Clip 1.8.16
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
@@ -641,7 +613,7 @@ b.callback&&b.callback.apply(this,arguments)})}else{j={};k={};j[f]=(d=="pos"?"-=
(function(b){b.effects.clip=function(e){return this.queue(function(){var a=b(this),i=["position","top","bottom","left","right","height","width"],f=b.effects.setMode(a,e.options.mode||"hide"),c=e.options.direction||"vertical";b.effects.save(a,i);a.show();var d=b.effects.createWrapper(a).css({overflow:"hidden"});d=a[0].tagName=="IMG"?d:a;var g={size:c=="vertical"?"height":"width",position:c=="vertical"?"top":"left"};c=c=="vertical"?d.height():d.width();if(f=="show"){d.css(g.size,0);d.css(g.position,
c/2)}var h={};h[g.size]=f=="show"?c:0;h[g.position]=f=="show"?0:c/2;d.animate(h,{queue:false,duration:e.duration,easing:e.options.easing,complete:function(){f=="hide"&&a.hide();b.effects.restore(a,i);b.effects.removeWrapper(a);e.callback&&e.callback.apply(a[0],arguments);a.dequeue()}})})}})(jQuery);
;/*
- * jQuery UI Effects Drop 1.8.14
+ * jQuery UI Effects Drop 1.8.16
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
@@ -655,7 +627,7 @@ c/2)}var h={};h[g.size]=f=="show"?c:0;h[g.position]=f=="show"?0:c/2;d.animate(h,
(function(c){c.effects.drop=function(d){return this.queue(function(){var a=c(this),h=["position","top","bottom","left","right","opacity"],e=c.effects.setMode(a,d.options.mode||"hide"),b=d.options.direction||"left";c.effects.save(a,h);a.show();c.effects.createWrapper(a);var f=b=="up"||b=="down"?"top":"left";b=b=="up"||b=="left"?"pos":"neg";var g=d.options.distance||(f=="top"?a.outerHeight({margin:true})/2:a.outerWidth({margin:true})/2);if(e=="show")a.css("opacity",0).css(f,b=="pos"?-g:g);var i={opacity:e==
"show"?1:0};i[f]=(e=="show"?b=="pos"?"+=":"-=":b=="pos"?"-=":"+=")+g;a.animate(i,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){e=="hide"&&a.hide();c.effects.restore(a,h);c.effects.removeWrapper(a);d.callback&&d.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
;/*
- * jQuery UI Effects Explode 1.8.14
+ * jQuery UI Effects Explode 1.8.16
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
@@ -670,7 +642,7 @@ c/2)}var h={};h[g.size]=f=="show"?c:0;h[g.position]=f=="show"?0:c/2;d.animate(h,
0;f<d;f++)b.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-f*(h/d),top:-e*(i/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:h/d,height:i/c,left:g.left+f*(h/d)+(a.options.mode=="show"?(f-Math.floor(d/2))*(h/d):0),top:g.top+e*(i/c)+(a.options.mode=="show"?(e-Math.floor(c/2))*(i/c):0),opacity:a.options.mode=="show"?0:1}).animate({left:g.left+f*(h/d)+(a.options.mode=="show"?0:(f-Math.floor(d/2))*(h/d)),top:g.top+
e*(i/c)+(a.options.mode=="show"?0:(e-Math.floor(c/2))*(i/c)),opacity:a.options.mode=="show"?1:0},a.duration||500);setTimeout(function(){a.options.mode=="show"?b.css({visibility:"visible"}):b.css({visibility:"visible"}).hide();a.callback&&a.callback.apply(b[0]);b.dequeue();j("div.ui-effects-explode").remove()},a.duration||500)})}})(jQuery);
;/*
- * jQuery UI Effects Fade 1.8.14
+ * jQuery UI Effects Fade 1.8.16
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
@@ -683,7 +655,7 @@ e*(i/c)+(a.options.mode=="show"?0:(e-Math.floor(c/2))*(i/c)),opacity:a.options.m
*/
(function(b){b.effects.fade=function(a){return this.queue(function(){var c=b(this),d=b.effects.setMode(c,a.options.mode||"hide");c.animate({opacity:d},{queue:false,duration:a.duration,easing:a.options.easing,complete:function(){a.callback&&a.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery);
;/*
- * jQuery UI Effects Fold 1.8.14
+ * jQuery UI Effects Fold 1.8.16
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
@@ -697,7 +669,7 @@ e*(i/c)+(a.options.mode=="show"?0:(e-Math.floor(c/2))*(i/c)),opacity:a.options.m
(function(c){c.effects.fold=function(a){return this.queue(function(){var b=c(this),j=["position","top","bottom","left","right"],d=c.effects.setMode(b,a.options.mode||"hide"),g=a.options.size||15,h=!!a.options.horizFirst,k=a.duration?a.duration/2:c.fx.speeds._default/2;c.effects.save(b,j);b.show();var e=c.effects.createWrapper(b).css({overflow:"hidden"}),f=d=="show"!=h,l=f?["width","height"]:["height","width"];f=f?[e.width(),e.height()]:[e.height(),e.width()];var i=/([0-9]+)%/.exec(g);if(i)g=parseInt(i[1],
10)/100*f[d=="hide"?0:1];if(d=="show")e.css(h?{height:0,width:g}:{height:g,width:0});h={};i={};h[l[0]]=d=="show"?f[0]:g;i[l[1]]=d=="show"?f[1]:0;e.animate(h,k,a.options.easing).animate(i,k,a.options.easing,function(){d=="hide"&&b.hide();c.effects.restore(b,j);c.effects.removeWrapper(b);a.callback&&a.callback.apply(b[0],arguments);b.dequeue()})})}})(jQuery);
;/*
- * jQuery UI Effects Highlight 1.8.14
+ * jQuery UI Effects Highlight 1.8.16
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
@@ -711,7 +683,7 @@ e*(i/c)+(a.options.mode=="show"?0:(e-Math.floor(c/2))*(i/c)),opacity:a.options.m
(function(b){b.effects.highlight=function(c){return this.queue(function(){var a=b(this),e=["backgroundImage","backgroundColor","opacity"],d=b.effects.setMode(a,c.options.mode||"show"),f={backgroundColor:a.css("backgroundColor")};if(d=="hide")f.opacity=0;b.effects.save(a,e);a.show().css({backgroundImage:"none",backgroundColor:c.options.color||"#ffff99"}).animate(f,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){d=="hide"&&a.hide();b.effects.restore(a,e);d=="show"&&!b.support.opacity&&
this.style.removeAttribute("filter");c.callback&&c.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
;/*
- * jQuery UI Effects Pulsate 1.8.14
+ * jQuery UI Effects Pulsate 1.8.16
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
@@ -725,7 +697,7 @@ this.style.removeAttribute("filter");c.callback&&c.callback.apply(this,arguments
(function(d){d.effects.pulsate=function(a){return this.queue(function(){var b=d(this),c=d.effects.setMode(b,a.options.mode||"show");times=(a.options.times||5)*2-1;duration=a.duration?a.duration/2:d.fx.speeds._default/2;isVisible=b.is(":visible");animateTo=0;if(!isVisible){b.css("opacity",0).show();animateTo=1}if(c=="hide"&&isVisible||c=="show"&&!isVisible)times--;for(c=0;c<times;c++){b.animate({opacity:animateTo},duration,a.options.easing);animateTo=(animateTo+1)%2}b.animate({opacity:animateTo},duration,
a.options.easing,function(){animateTo==0&&b.hide();a.callback&&a.callback.apply(this,arguments)});b.queue("fx",function(){b.dequeue()}).dequeue()})}})(jQuery);
;/*
- * jQuery UI Effects Scale 1.8.14
+ * jQuery UI Effects Scale 1.8.16
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
@@ -745,7 +717,7 @@ a.css("overflow","hidden").css(a.from);if(m=="content"||m=="both"){f=f.concat(["
child.to=c.effects.setTransition(child,f,d.to.y,child.to)}if(d.from.x!=d.to.x){child.from=c.effects.setTransition(child,k,d.from.x,child.from);child.to=c.effects.setTransition(child,k,d.to.x,child.to)}child.css(child.from);child.animate(child.to,b.duration,b.options.easing,function(){n&&c.effects.restore(child,h)})})}a.animate(a.to,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){a.to.opacity===0&&a.css("opacity",a.from.opacity);p=="hide"&&a.hide();c.effects.restore(a,
n?e:g);c.effects.removeWrapper(a);b.callback&&b.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
;/*
- * jQuery UI Effects Shake 1.8.14
+ * jQuery UI Effects Shake 1.8.16
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
@@ -759,7 +731,7 @@ n?e:g);c.effects.removeWrapper(a);b.callback&&b.callback.apply(this,arguments);a
(function(d){d.effects.shake=function(a){return this.queue(function(){var b=d(this),j=["position","top","bottom","left","right"];d.effects.setMode(b,a.options.mode||"effect");var c=a.options.direction||"left",e=a.options.distance||20,l=a.options.times||3,f=a.duration||a.options.duration||140;d.effects.save(b,j);b.show();d.effects.createWrapper(b);var g=c=="up"||c=="down"?"top":"left",h=c=="up"||c=="left"?"pos":"neg";c={};var i={},k={};c[g]=(h=="pos"?"-=":"+=")+e;i[g]=(h=="pos"?"+=":"-=")+e*2;k[g]=
(h=="pos"?"-=":"+=")+e*2;b.animate(c,f,a.options.easing);for(e=1;e<l;e++)b.animate(i,f,a.options.easing).animate(k,f,a.options.easing);b.animate(i,f,a.options.easing).animate(c,f/2,a.options.easing,function(){d.effects.restore(b,j);d.effects.removeWrapper(b);a.callback&&a.callback.apply(this,arguments)});b.queue("fx",function(){b.dequeue()});b.dequeue()})}})(jQuery);
;/*
- * jQuery UI Effects Slide 1.8.14
+ * jQuery UI Effects Slide 1.8.16
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
@@ -773,7 +745,7 @@ n?e:g);c.effects.removeWrapper(a);b.callback&&b.callback.apply(this,arguments);a
(function(c){c.effects.slide=function(d){return this.queue(function(){var a=c(this),h=["position","top","bottom","left","right"],f=c.effects.setMode(a,d.options.mode||"show"),b=d.options.direction||"left";c.effects.save(a,h);a.show();c.effects.createWrapper(a).css({overflow:"hidden"});var g=b=="up"||b=="down"?"top":"left";b=b=="up"||b=="left"?"pos":"neg";var e=d.options.distance||(g=="top"?a.outerHeight({margin:true}):a.outerWidth({margin:true}));if(f=="show")a.css(g,b=="pos"?isNaN(e)?"-"+e:-e:e);
var i={};i[g]=(f=="show"?b=="pos"?"+=":"-=":b=="pos"?"-=":"+=")+e;a.animate(i,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){f=="hide"&&a.hide();c.effects.restore(a,h);c.effects.removeWrapper(a);d.callback&&d.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
;/*
- * jQuery UI Effects Transfer 1.8.14
+ * jQuery UI Effects Transfer 1.8.16
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
diff --git a/core/js/js.js b/core/js/js.js
index 5846d289880..c6cde3cea95 100644
--- a/core/js/js.js
+++ b/core/js/js.js
@@ -6,10 +6,14 @@
*/
function t(app,text){
if( !( app in t.cache )){
-
- $.post( OC.filePath('core','ajax','translations.php'), {'app': app}, function(jsondata){
- t.cache[app] = jsondata.data;
- });
+ $.ajax(OC.filePath('core','ajax','translations.php'),{
+ async:false,//todo a proper sollution for this without sync ajax calls
+ data:{'app': app},
+ type:'POST',
+ success:function(jsondata){
+ t.cache[app] = jsondata.data;
+ },
+ })
// Bad answer ...
if( !( app in t.cache )){
@@ -130,6 +134,35 @@ OC.search.lastResults={};
OC.addStyle.loaded=[];
OC.addScript.loaded=[];
+if(typeof localStorage !='undefined'){
+ //user and instance awere localstorage
+ OC.localStorage={
+ namespace:'oc_'+OC.currentUser+'_'+OC.webroot+'_',
+ hasItem:function(name){
+ return OC.localStorage.getItem(name)!=null;
+ },
+ setItem:function(name,item){
+ return localStorage.setItem(OC.localStorage.namespace+name,JSON.stringify(item));
+ },
+ getItem:function(name){
+ return JSON.parse(localStorage.getItem(OC.localStorage.namespace+name));
+ }
+ }
+}else{
+ //dummy localstorage
+ OC.localStorage={
+ hasItem:function(name){
+ return false;
+ },
+ setItem:function(name,item){
+ return false;
+ },
+ getItem:function(name){
+ return null;
+ }
+ }
+}
+
/**
* implement Array.filter for browsers without native support
*/
@@ -191,11 +224,13 @@ SVGSupport.checkMimeType=function(){
$.each(headerParts,function(i,text){
if(text){
var parts=text.split(':',2);
- var value=parts[1].trim();
- if(value[0]=='"'){
- value=value.substr(1,value.length-2);
+ if(parts.length==2){
+ var value=parts[1].trim();
+ if(value[0]=='"'){
+ value=value.substr(1,value.length-2);
+ }
+ headers[parts[0]]=value;
}
- headers[parts[0]]=value;
}
});
if(headers["Content-Type"]!='image/svg+xml'){
@@ -408,3 +443,5 @@ if (!Array.prototype.map){
$.fn.filterAttr = function(attr_name, attr_value) {
return this.filter(function() { return $(this).attr(attr_name) === attr_value; });
};
+
+
diff --git a/core/js/multiselect.js b/core/js/multiselect.js
index 26380824047..96fc09a0759 100644
--- a/core/js/multiselect.js
+++ b/core/js/multiselect.js
@@ -9,23 +9,26 @@
'checked':[],
'oncheck':false,
'onuncheck':false,
+ 'minWidth': 'default;',
};
- $.extend(settings,options);
+ $.extend(settings,options);
var button=$('<div class="multiselect button"><span>'+settings.title+'</span><span>▾</span></div>');
- if(settings.checked.length>0){
- button.children('span').first().text(settings.checked.join(', '));
- }
var span=$('<span/>');
span.append(button);
button.data('id',multiSelectId);
button.selectedItems=[];
this.hide();
this.before(span);
- settings.minWidth=button.width();
+ if(settings.minWidth=='default'){
+ settings.minWidth=button.width();
+ }
button.css('min-width',settings.minWidth);
settings.minOuterWidth=button.outerWidth()-2;
button.data('settings',settings);
-
+ if(settings.checked.length>0){
+ button.children('span').first().text(settings.checked.join(', '));
+ }
+
button.click(function(event){
var button=$(this);
if(button.parent().children('ul').length>0){
@@ -58,22 +61,22 @@
input.change(function(){
var groupname=$(this).next().text();
if($(this).is(':checked')){
- settings.checked.push(groupname);
if(settings.oncheck){
if(settings.oncheck(groupname)===false){
$(this).attr('checked', false);
return;
}
}
+ settings.checked.push(groupname);
}else{
var index=settings.checked.indexOf(groupname);
- settings.checked.splice(index,1);
if(settings.onuncheck){
if(settings.onuncheck(groupname)===false){
$(this).attr('checked',true);
return;
}
}
+ settings.checked.splice(index,1);
}
var oldWidth=button.width();
if(settings.checked.length>0){
@@ -83,13 +86,14 @@
}
var newOuterWidth=Math.max((button.outerWidth()-2),settings.minOuterWidth)+'px';
var newWidth=Math.max(button.width(),settings.minWidth);
+ var pos=button.position();
button.css('height',button.height());
button.css('white-space','nowrap');
button.css('width',oldWidth);
button.animate({'width':newWidth},undefined,undefined,function(){
button.css('width','');
});
- list.animate({'width':newOuterWidth});
+ list.animate({'width':newOuterWidth,'left':pos.left+3});
});
var li=$('<li></li>');
li.append(input).append(label);
diff --git a/core/l10n/ar.php b/core/l10n/ar.php
new file mode 100644
index 00000000000..02b8bcda2ca
--- /dev/null
+++ b/core/l10n/ar.php
@@ -0,0 +1,34 @@
+<?php $TRANSLATIONS = array(
+"You will receive a link to reset your password via Email." => "سوف نرسل لك بريد يحتوي على وصلة لتجديد كلمة السر.",
+"Requested" => "تم طلب",
+"Login failed!" => "محاولة دخول فاشلة!",
+"Username" => "إسم المستخدم",
+"Request reset" => "طلب تعديل",
+"Your password was reset" => "لقد تم تعديل كلمة السر",
+"New password" => "كلمة سر جديدة",
+"Reset password" => "تعديل كلمة السر",
+"Personal" => "خصوصيات",
+"Users" => "المستخدم",
+"Apps" => "التطبيقات",
+"Admin" => "مستخدم رئيسي",
+"Help" => "المساعدة",
+"Cloud not found" => "لم يتم إيجاد",
+"Create an <strong>admin account</strong>" => "أضف </strong>مستخدم رئيسي <strong>",
+"Password" => "كلمة السر",
+"Advanced" => "خيارات متقدمة",
+"Data folder" => "مجلد المعلومات",
+"Configure the database" => "أسس قاعدة البيانات",
+"will be used" => "سيتم استخدمه",
+"Database user" => "مستخدم قاعدة البيانات",
+"Database password" => "كلمة سر مستخدم قاعدة البيانات",
+"Database name" => "إسم قاعدة البيانات",
+"Database host" => "خادم قاعدة البيانات",
+"Finish setup" => "انهاء التعديلات",
+"Log out" => "الخروج",
+"Settings" => "تعديلات",
+"Lost your password?" => "هل نسيت كلمة السر؟",
+"remember" => "تذكر",
+"You are logged out." => "تم الخروج بنجاح.",
+"prev" => "السابق",
+"next" => "التالي"
+);
diff --git a/core/l10n/bg_BG.php b/core/l10n/bg_BG.php
index 6bf25e5598b..46047a35350 100644
--- a/core/l10n/bg_BG.php
+++ b/core/l10n/bg_BG.php
@@ -1,4 +1,12 @@
<?php $TRANSLATIONS = array(
+"You will receive a link to reset your password via Email." => "Ще получите връзка за нулиране на паролата Ви.",
+"Requested" => "Заявено",
+"Login failed!" => "Входа пропадна!",
+"Username" => "Потребител",
+"Request reset" => "Нулиране на заявка",
+"Your password was reset" => "Вашата парола е нулирана",
+"New password" => "Нова парола",
+"Reset password" => "Нулиране на парола",
"Personal" => "Лични",
"Users" => "Потребители",
"Apps" => "Програми",
@@ -6,31 +14,21 @@
"Help" => "Помощ",
"Cloud not found" => "облакът не намерен",
"Create an <strong>admin account</strong>" => "Създаване на <strong>админ профил</strong>",
-"Username" => "Потребител",
"Password" => "Парола",
+"Advanced" => "Разширено",
+"Data folder" => "Директория за данни",
"Configure the database" => "Конфигуриране на базата",
"will be used" => "ще се ползва",
"Database user" => "Потребител за базата",
"Database password" => "Парола за базата",
"Database name" => "Име на базата",
-"Advanced" => "Разширено",
"Database host" => "Хост за базата",
-"Data folder" => "Директория за данни",
"Finish setup" => "Завършване на настройките",
-"gives you freedom and control over your own data" => "дава Ви свобода и контрол на Вашите лични данни",
"Log out" => "Изход",
"Settings" => "Настройки",
"Lost your password?" => "Забравена парола?",
"remember" => "запомни",
"You are logged out." => "Вие излязохте.",
-"You will receive a link to reset your password via Email." => "Ще получите връзка за да нулирате паролата си.",
-"Requested" => "Заявено",
-"Login failed!" => "Входа пропадна!",
-"Username or Email" => "Потребителско име или Email",
-"Request reset" => "Заявка за нулиране",
"prev" => "пред.",
-"next" => "следващо",
-"Your password was reset" => "Вашата парола е нулирана",
-"New password" => "Нова парола",
-"Reset password" => "Нулиране на парола"
+"next" => "следващо"
);
diff --git a/core/l10n/ca.php b/core/l10n/ca.php
index 3ecd041ad01..bb121cd4f77 100644
--- a/core/l10n/ca.php
+++ b/core/l10n/ca.php
@@ -1,36 +1,39 @@
<?php $TRANSLATIONS = array(
+"Owncloud password reset" => "Restableix la contrasenya d'Owncloud",
+"Use the following link to reset your password: {link}" => "Useu l'enllaç següent per restablir la contrasenya: {enllaç}",
+"You will receive a link to reset your password via Email." => "Rebreu un enllaç al correu electrònic per reiniciar la contrasenya.",
+"Requested" => "Sol·licitat",
+"Login failed!" => "No s'ha pogut iniciar la sessió",
+"Username" => "Nom d'usuari",
+"Request reset" => "Sol·licita reinicialització",
+"Your password was reset" => "La vostra contrasenya s'ha reinicialitzat",
+"To login page" => "A la pàgina d'inici de sessió",
+"New password" => "Contrasenya nova",
+"Reset password" => "Reinicialitza la contrasenya",
"Personal" => "Personal",
"Users" => "Usuaris",
"Apps" => "Aplicacions",
"Admin" => "Administrador",
"Help" => "Ajuda",
-"Cloud not found" => "No s'ha trobat el núvol",
+"Cloud not found" => "No s'ha trobat al núvol",
"Create an <strong>admin account</strong>" => "Crea un <strong>compte d'administrador</strong>",
-"Username" => "Nom d'usuari",
"Password" => "Contrasenya",
+"Advanced" => "Avançat",
+"Data folder" => "Carpeta de dades",
"Configure the database" => "Configura la base de dades",
"will be used" => "s'usarà",
"Database user" => "Usuari de la base de dades",
"Database password" => "Contrasenya de la base de dades",
"Database name" => "Nom de la base de dades",
-"Advanced" => "Avançat",
"Database host" => "Ordinador central de la base de dades",
-"Data folder" => "Carpeta de dades",
"Finish setup" => "Acaba la configuració",
-"gives you freedom and control over your own data" => "us dóna llibertat i control sobre les seves dades",
+"web services under your control" => "serveis web controlats per vós",
"Log out" => "Sortir",
"Settings" => "Arranjament",
"Lost your password?" => "Heu perdut la contrasenya?",
"remember" => "recorda'm",
+"Log in" => "Inici de sessió",
"You are logged out." => "Heu tancat la sessió.",
-"You will receive a link to reset your password via Email." => "Rebreu un enllaç per correu electrònic per restablir la contrasenya",
-"Requested" => "Sol·licitat",
-"Login failed!" => "L'inici de sessió ha fallat!",
-"Username or Email" => "Nom d'usuari o correu electrònic",
-"Request reset" => "Sol.licitud de restabliment",
"prev" => "anterior",
-"next" => "següent",
-"Your password was reset" => "La vostra contrasenya s'ha restablert",
-"New password" => "Nova contrasenya",
-"Reset password" => "Restabliment de la contrasenya"
+"next" => "següent"
);
diff --git a/core/l10n/cs_CZ.php b/core/l10n/cs_CZ.php
index 08a90ba4a0f..b3e57981a6d 100644
--- a/core/l10n/cs_CZ.php
+++ b/core/l10n/cs_CZ.php
@@ -1,4 +1,15 @@
<?php $TRANSLATIONS = array(
+"Owncloud password reset" => "Reset hesla Owncloud",
+"Use the following link to reset your password: {link}" => "Heslo vyresetujete použitím následujícího odkazu: {link}",
+"You will receive a link to reset your password via Email." => "Bude Vám zaslán odkaz pro obnovu hesla",
+"Requested" => "Požadováno",
+"Login failed!" => "Přihlášení selhalo",
+"Username" => "Uživatelské jméno",
+"Request reset" => "Vyžádat obnovu",
+"Your password was reset" => "Vaše heslo bylo obnoveno",
+"To login page" => "Na stránku přihlášení",
+"New password" => "Nové heslo",
+"Reset password" => "Obnovit heslo",
"Personal" => "Osobní",
"Users" => "Uživatelé",
"Apps" => "Aplikace",
@@ -6,21 +17,23 @@
"Help" => "Nápověda",
"Cloud not found" => "Cloud nebyl nalezen",
"Create an <strong>admin account</strong>" => "Vytvořit <strong>účet správce</strong>",
-"Username" => "Uživatelské jméno",
"Password" => "Heslo",
+"Advanced" => "Rozšířené volby",
+"Data folder" => "Datový adresář",
"Configure the database" => "Konfigurace databáze",
"will be used" => "bude použito",
"Database user" => "Uživatel databáze",
"Database password" => "Heslo k databázi",
"Database name" => "Název databáze",
-"Advanced" => "Rozšířené volby",
-"Data folder" => "Datový adresář",
+"Database host" => "Hostitel databáze",
"Finish setup" => "Dokončit instalaci",
+"web services under your control" => "webové služby pod Vaší kontrolou",
"Log out" => "Odhlásit se",
"Settings" => "Nastavení",
+"Lost your password?" => "Zapomenuté heslo?",
"remember" => "zapamatovat si",
+"Log in" => "Login",
"You are logged out." => "Jste odhlášeni.",
-"Login failed!" => "Přihlášení se nezdařilo!",
"prev" => "zpět",
"next" => "vpřed"
);
diff --git a/core/l10n/da.php b/core/l10n/da.php
index 5c1ca0dc211..97ebb27baca 100644
--- a/core/l10n/da.php
+++ b/core/l10n/da.php
@@ -1,36 +1,39 @@
<?php $TRANSLATIONS = array(
+"Owncloud password reset" => "Nulstil adgangskode til Owncloud",
+"Use the following link to reset your password: {link}" => "Anvend følgende link til at nulstille din adgangskode: {link}",
+"You will receive a link to reset your password via Email." => "Du vil modtage et link til at nulstille dit kodeord via email.",
+"Requested" => "Forespugt",
+"Login failed!" => "Login fejlede!",
+"Username" => "Brugernavn",
+"Request reset" => "Anmod om nulstilling",
+"Your password was reset" => "Dit kodeord blev nulstillet",
+"To login page" => "Til login-side",
+"New password" => "Nyt kodeord",
+"Reset password" => "Nulstil kodeord",
"Personal" => "Personlig",
"Users" => "Brugere",
"Apps" => "Apps",
"Admin" => "Admin",
"Help" => "Hjælp",
"Cloud not found" => "Sky ikke fundet",
-"Create an <strong>admin account</strong>" => "Lav en <strong>administrator konto</strong>",
-"Username" => "Brugernavn",
+"Create an <strong>admin account</strong>" => "Opret en <strong>administratorkonto</strong>",
"Password" => "Kodeord",
+"Advanced" => "Avanceret",
+"Data folder" => "Datamappe",
"Configure the database" => "Konfigurer databasen",
"will be used" => "vil blive brugt",
-"Database user" => "Database-bruger",
-"Database password" => "Database-kodeord",
-"Database name" => "Database-navn",
-"Advanced" => "Avanceret",
-"Database host" => "Database host",
-"Data folder" => "Data mappe",
-"Finish setup" => "Afslut installation",
-"gives you freedom and control over your own data" => "giver dig frihed og kontrol over dine egne data",
+"Database user" => "Databasebruger",
+"Database password" => "Databasekodeord",
+"Database name" => "Navn på database",
+"Database host" => "Databasehost",
+"Finish setup" => "Afslut opsætning",
+"web services under your control" => "Webtjenester under din kontrol",
"Log out" => "Log ud",
"Settings" => "Indstillinger",
"Lost your password?" => "Mistet dit kodeord?",
"remember" => "husk",
-"You are logged out." => "Du er nu logget ud",
-"You will receive a link to reset your password via Email." => "Du vil modtage et link til at nulstille din adgangskode via e-mail.",
-"Requested" => "Anmodet",
-"Login failed!" => "Login mislykkedes!",
-"Username or Email" => "Brugernavn eller E-mail",
-"Request reset" => "Anmod om nulstilling",
+"Log in" => "Log ind",
+"You are logged out." => "Du er nu logget ud.",
"prev" => "forrige",
-"next" => "næste",
-"Your password was reset" => "Din adgangskode blev nulstillet",
-"New password" => "Ny adgangskode",
-"Reset password" => "Nulstil adgangskode"
+"next" => "næste"
);
diff --git a/core/l10n/de.php b/core/l10n/de.php
index 0b5a0e13cea..0bbfa406fad 100644
--- a/core/l10n/de.php
+++ b/core/l10n/de.php
@@ -1,4 +1,12 @@
<?php $TRANSLATIONS = array(
+"You will receive a link to reset your password via Email." => "Sie erhalten einen Link, um Ihr Passwort per E-Mail zurückzusetzen.",
+"Requested" => "Angefragt",
+"Login failed!" => "Login fehlgeschlagen!",
+"Username" => "Nutzername",
+"Request reset" => "Anfrage zurückgesetzt",
+"Your password was reset" => "Ihr Passwort wurde zurückgesetzt.",
+"New password" => "Neues Passwort",
+"Reset password" => "Passwort zurücksetzen",
"Personal" => "Persönlich",
"Users" => "Nutzer",
"Apps" => "Anwendungen",
@@ -6,31 +14,21 @@
"Help" => "Hilfe",
"Cloud not found" => "Cloud nicht verfügbar",
"Create an <strong>admin account</strong>" => "<strong>Admin-Konto</strong> anlegen",
-"Username" => "Nutzername",
"Password" => "Passwort",
+"Advanced" => "Erweitert",
+"Data folder" => "Datenverzeichnis",
"Configure the database" => "Datenbank einrichten",
"will be used" => "wird genutzt",
"Database user" => "Datenbanknutzer",
"Database password" => "Datenbankpasswort",
"Database name" => "Datenbankname",
-"Advanced" => "Erweitert",
"Database host" => "Datenbank-Host",
-"Data folder" => "Datenverzeichnis",
"Finish setup" => "Installation abschließen",
-"gives you freedom and control over your own data" => "gibt dir Freiheit und Kontrolle über deine eigenen Daten",
"Log out" => "Abmelden",
"Settings" => "Einstellungen",
"Lost your password?" => "Passwort vergessen?",
"remember" => "merken",
"You are logged out." => "Abgemeldet",
-"You will receive a link to reset your password via Email." => "Du wirst per Email einen Link zum Zurücksetzen deines Passworts erhalten.",
-"Requested" => "zurückgesetzt",
-"Login failed!" => "Anmeldung fehlgeschlagen!",
-"Username or Email" => "Nutzername oder Email",
-"Request reset" => "Zurücksetzen",
"prev" => "Zurück",
-"next" => "Weiter",
-"Your password was reset" => "Dein Passwort wurde zurückgesetzt.",
-"New password" => "Neues Passwort",
-"Reset password" => "Zurücksetzen"
+"next" => "Weiter"
);
diff --git a/core/l10n/el.php b/core/l10n/el.php
index c75227f8aad..b1330684e5e 100644
--- a/core/l10n/el.php
+++ b/core/l10n/el.php
@@ -1,4 +1,15 @@
<?php $TRANSLATIONS = array(
+"Owncloud password reset" => "Επανέκδοση κωδικού για το Qwncloud",
+"Use the following link to reset your password: {link}" => "Χρησιμοποιήστε τον ακόλουθο σύνδεσμο για να επανεκδόσετε τον κωδικό: {link}",
+"You will receive a link to reset your password via Email." => "Θα λάβετε ένα σύνδεσμο για να επαναφέρετε τον κωδικό πρόσβασής σας μέσω ηλεκτρονικού ταχυδρομείου.",
+"Requested" => "Ζητήθησαν",
+"Login failed!" => "Η σύνδεση απέτυχε!",
+"Username" => "Όνομα Χρήστη",
+"Request reset" => "Επαναφορά αίτησης",
+"Your password was reset" => "Ο κωδικός πρόσβασής σας επαναφέρθηκε",
+"To login page" => "Σελίδα εισόδου",
+"New password" => "Νέος κωδικός",
+"Reset password" => "Επαναφορά κωδικού πρόσβασης",
"Personal" => "Προσωπικά",
"Users" => "Χρήστες",
"Apps" => "Εφαρμογές",
@@ -6,31 +17,23 @@
"Help" => "Βοήθεια",
"Cloud not found" => "Δεν βρέθηκε σύννεφο",
"Create an <strong>admin account</strong>" => "Δημιουργήστε έναν <strong>λογαριασμό διαχειριστή</strong>",
-"Username" => "Όνομα Χρήστη",
"Password" => "Κωδικός",
+"Advanced" => "Για προχωρημένους",
+"Data folder" => "Φάκελος δεδομένων",
"Configure the database" => "Διαμόρφωση της βάσης δεδομένων",
"will be used" => "θα χρησιμοποιηθούν",
"Database user" => "Χρήστης της βάσης δεδομένων",
"Database password" => "Κωδικός πρόσβασης βάσης δεδομένων",
"Database name" => "Όνομα βάσης δεδομένων",
-"Advanced" => "Για προχωρημένους",
"Database host" => "Διακομιστής βάσης δεδομένων",
-"Data folder" => "Φάκελος δεδομένων",
"Finish setup" => "Ολοκλήρωση εγκατάστασης",
-"gives you freedom and control over your own data" => "σας δίνει την ελευθερία και τον έλεγχο επί των δικών σας δεδομένων",
+"web services under your control" => "Υπηρεσίες web υπό τον έλεγχό σας",
"Log out" => "Αποσύνδεση",
"Settings" => "Ρυθμίσεις",
"Lost your password?" => "Ξεχάσατε τον κωδικό σας;",
"remember" => "να με θυμάσαι",
+"Log in" => "Είσοδος",
"You are logged out." => "Έχετε αποσυνδεθεί.",
-"You will receive a link to reset your password via Email." => "Θα λάβετε ένα σύνδεσμο για να επαναφέρετε τον κωδικό πρόσβασής σας, μέσω ηλεκτρονικού ταχυδρομείου.",
-"Requested" => "Αιτήθησαν",
-"Login failed!" => "Η σύνδεση απέτυχε!",
-"Username or Email" => "Όνομα Χρήστη ή Email",
-"Request reset" => "Επαναφοράς αίτησης",
"prev" => "προηγούμενο",
-"next" => "επόμενο",
-"Your password was reset" => "Έγινε επαναφορά του κωδικού πρόσβασής σας",
-"New password" => "Νέος κωδικός",
-"Reset password" => "Επαναφορά κωδικού πρόσβασης"
+"next" => "επόμενο"
);
diff --git a/core/l10n/eo.php b/core/l10n/eo.php
new file mode 100644
index 00000000000..9719ab39c19
--- /dev/null
+++ b/core/l10n/eo.php
@@ -0,0 +1,34 @@
+<?php $TRANSLATIONS = array(
+"You will receive a link to reset your password via Email." => "Vi ricevos ligilon retpoŝte por rekomencigi vian pasvorton.",
+"Requested" => "Petita",
+"Login failed!" => "Ensaluto malsukcesis!",
+"Username" => "Uzantonomo",
+"Request reset" => "Peti rekomencigon",
+"Your password was reset" => "Via pasvorto rekomencis",
+"New password" => "Nova pasvorto",
+"Reset password" => "Rekomenci la pasvorton",
+"Personal" => "Persona",
+"Users" => "Uzantoj",
+"Apps" => "Aplikaĵoj",
+"Admin" => "Administranto",
+"Help" => "Helpo",
+"Cloud not found" => "La nubo ne estas trovita",
+"Create an <strong>admin account</strong>" => "Krei <strong>administran konton</strong>",
+"Password" => "Pasvorto",
+"Advanced" => "Porsperta",
+"Data folder" => "Datuma dosierujo",
+"Configure the database" => "Agordi la datumbazon",
+"will be used" => "estos uzata",
+"Database user" => "Datumbaza uzanto",
+"Database password" => "Datumbaza pasvorto",
+"Database name" => "Datumbaza nomo",
+"Database host" => "Datumbaza gastigo",
+"Finish setup" => "Fini la instalon",
+"Log out" => "Elsaluti",
+"Settings" => "Agordo",
+"Lost your password?" => "Ĉu vi perdis vian pasvorton?",
+"remember" => "memori",
+"You are logged out." => "Vi elsalutis.",
+"prev" => "maljena",
+"next" => "jena"
+);
diff --git a/core/l10n/es.php b/core/l10n/es.php
index e997a17002f..4ce42a645e2 100644
--- a/core/l10n/es.php
+++ b/core/l10n/es.php
@@ -1,4 +1,15 @@
<?php $TRANSLATIONS = array(
+"Owncloud password reset" => "Restablecer contraseña de ownCloud",
+"Use the following link to reset your password: {link}" => "Utiliza el siguiente enlace para restablecer tu contraseña: {link}",
+"You will receive a link to reset your password via Email." => "Recibirás un enlace por correo electrónico para restablecer tu contraseña",
+"Requested" => "Pedido",
+"Login failed!" => "¡Fallo al iniciar sesión!",
+"Username" => "Nombre de usuario",
+"Request reset" => "Solicitar restablecimiento",
+"Your password was reset" => "Tu contraseña se ha restablecido",
+"To login page" => "A la página de inicio de sesión",
+"New password" => "Nueva contraseña",
+"Reset password" => "Restablecer contraseña",
"Personal" => "Personal",
"Users" => "Usuarios",
"Apps" => "Aplicaciones",
@@ -6,31 +17,23 @@
"Help" => "Ayuda",
"Cloud not found" => "No se encontró la nube",
"Create an <strong>admin account</strong>" => "Crea una <strong>cuenta de administrador</strong>",
-"Username" => "Nombre de usuario",
"Password" => "Contraseña",
+"Advanced" => "Avanzado",
+"Data folder" => "Directorio de almacenamiento",
"Configure the database" => "Configurar la base de datos",
"will be used" => "serán utilizados",
"Database user" => "Usuario de la base de datos",
"Database password" => "Contraseña de la base de datos",
"Database name" => "Nombre de la base de datos",
-"Advanced" => "Avanzado",
"Database host" => "Host de la base de datos",
-"Data folder" => "Directorio de almacenamiento",
"Finish setup" => "Completar la instalación",
-"gives you freedom and control over your own data" => "te da la libertad y el control sobre tus propios datos",
+"web services under your control" => "servicios web bajo tu control",
"Log out" => "Salir",
"Settings" => "Ajustes",
"Lost your password?" => "¿Has perdido tu contraseña?",
"remember" => "recuérdame",
+"Log in" => "Entrar",
"You are logged out." => "Has cerrado sesión.",
-"You will receive a link to reset your password via Email." => "Recibirás un link para restablecer tu contraseña vía Email.",
-"Requested" => "Solicitado",
-"Login failed!" => "¡No se pudo iniciar sesión!",
-"Username or Email" => "Nombre de usuario o Email",
-"Request reset" => "Solicitar restablecimiento",
"prev" => "anterior",
-"next" => "siguiente",
-"Your password was reset" => "Tu contraseña se ha restablecido",
-"New password" => "Nueva contraseña",
-"Reset password" => "Restablecer contraseña"
+"next" => "siguiente"
);
diff --git a/core/l10n/et_EE.php b/core/l10n/et_EE.php
index 84d05d17ba7..ba70a6a0c42 100644
--- a/core/l10n/et_EE.php
+++ b/core/l10n/et_EE.php
@@ -1,4 +1,12 @@
<?php $TRANSLATIONS = array(
+"You will receive a link to reset your password via Email." => "Sinu parooli taastamise link saadetakse sulle e-postile.",
+"Requested" => "Kohustuslik",
+"Login failed!" => "Sisselogimine ebaõnnestus!",
+"Username" => "Kasutajanimi",
+"Request reset" => "Päringu taastamine",
+"Your password was reset" => "Sinu parool on taastatud",
+"New password" => "Uus parool",
+"Reset password" => "Nulli parool",
"Personal" => "isiklik",
"Users" => "Kasutajad",
"Apps" => "Programmid",
@@ -6,31 +14,21 @@
"Help" => "Abiinfo",
"Cloud not found" => "Pilve ei leitud",
"Create an <strong>admin account</strong>" => "Loo <strong>admini konto</strong>",
-"Username" => "Kasutajanimi",
"Password" => "Parool",
+"Advanced" => "Lisavalikud",
+"Data folder" => "Andmete kaust",
"Configure the database" => "Seadista andmebaasi",
"will be used" => "kasutatakse",
"Database user" => "Andmebaasi kasutaja",
"Database password" => "Andmebaasi parool",
"Database name" => "Andmebasi nimi",
-"Advanced" => "Lisavalikud",
"Database host" => "Andmebaasi host",
-"Data folder" => "Andmete kaust",
"Finish setup" => "Lõpeta seadistamine",
-"gives you freedom and control over your own data" => "Annab sulle vabaduse ja kontrolli sinu enda andmete üle",
"Log out" => "Logi välja",
"Settings" => "Seaded",
"Lost your password?" => "Kaotasid oma parooli?",
"remember" => "pea meeles",
"You are logged out." => "Sa oled välja loginud",
-"You will receive a link to reset your password via Email." => "Sulle saadetakse e-postile link, millelt sa saad oma parooli taastada.",
-"Requested" => "Kohustuslik",
-"Login failed!" => "Sisselogimine ebaõnnestus",
-"Username or Email" => "Kasutajanimi või e-post",
-"Request reset" => "Palu taastamist",
"prev" => "eelm",
-"next" => "järgm",
-"Your password was reset" => "Sinu parool on taastatud",
-"New password" => "Uus parool",
-"Reset password" => "Nulli parool"
+"next" => "järgm"
);
diff --git a/core/l10n/eu.php b/core/l10n/eu.php
new file mode 100644
index 00000000000..bc1993c024c
--- /dev/null
+++ b/core/l10n/eu.php
@@ -0,0 +1,34 @@
+<?php $TRANSLATIONS = array(
+"You will receive a link to reset your password via Email." => "Zure pashitza berrezartzeko lotura bat jasoko duzu Epostaren bidez.",
+"Requested" => "Eskatuta",
+"Login failed!" => "Saio hasierak huts egin du!",
+"Username" => "Erabiltzaile izena",
+"Request reset" => "Eskaera berrezarri da",
+"Your password was reset" => "Zure pasahitza berrezarri da",
+"New password" => "Pasahitz berria",
+"Reset password" => "Berrezarri pasahitza",
+"Personal" => "Pertsonala",
+"Users" => "Erabiltzaileak",
+"Apps" => "Aplikazioak",
+"Admin" => "Kudeatzailea",
+"Help" => "Laguntza",
+"Cloud not found" => "Ez da hodeia aurkitu",
+"Create an <strong>admin account</strong>" => "Sortu <strong>kudeatzaile kontu<strong> bat",
+"Password" => "Pasahitza",
+"Advanced" => "Aurreratua",
+"Data folder" => "Datuen karpeta",
+"Configure the database" => "Konfiguratu datu basea",
+"will be used" => "erabiliko da",
+"Database user" => "Datubasearen erabiltzailea",
+"Database password" => "Datubasearen pasahitza",
+"Database name" => "Datubasearen izena",
+"Database host" => "Datubasearen hostalaria",
+"Finish setup" => "Bukatu konfigurazioa",
+"Log out" => "Saioa bukatu",
+"Settings" => "Ezarpenak",
+"Lost your password?" => "Galdu duzu pasahitza?",
+"remember" => "gogoratu",
+"You are logged out." => "Zure saioa bukatu da.",
+"prev" => "aurrekoa",
+"next" => "hurrengoa"
+);
diff --git a/core/l10n/fr.php b/core/l10n/fr.php
index 15e7846efbb..64215442d89 100644
--- a/core/l10n/fr.php
+++ b/core/l10n/fr.php
@@ -1,4 +1,15 @@
<?php $TRANSLATIONS = array(
+"Owncloud password reset" => "Réinitialisation de votre mot de passe Owncloud",
+"Use the following link to reset your password: {link}" => "Utilisez le lien suivant pour réinitialiser votre mot de passe : {link}",
+"You will receive a link to reset your password via Email." => "Vous allez recevoir un e-mail contenant un lien pour réinitialiser votre mot de passe",
+"Requested" => "Demande envoyée",
+"Login failed!" => "Nom d'utilisateur ou e-mail invalide",
+"Username" => "Nom d'utilisateur",
+"Request reset" => "Demander la réinitialisation",
+"Your password was reset" => "Votre mot de passe a été réinitialisé",
+"To login page" => "Retour à la page d'authentification",
+"New password" => "Nouveau mot de passe",
+"Reset password" => "Réinitialiser le mot de passe",
"Personal" => "Personnels",
"Users" => "Utilisateurs",
"Apps" => "Applications",
@@ -6,31 +17,23 @@
"Help" => "Aide",
"Cloud not found" => "Introuvable",
"Create an <strong>admin account</strong>" => "Créer un <strong>compte administrateur</strong>",
-"Username" => "Nom d'utilisateur",
"Password" => "Mot de passe",
+"Advanced" => "Avancé",
+"Data folder" => "Répertoire des données",
"Configure the database" => "Configurer la base de données",
"will be used" => "sera utilisé",
"Database user" => "Utilisateur de la base de données",
"Database password" => "Mot de passe de la base de données",
"Database name" => "Nom de la base de données",
-"Advanced" => "Avancé",
"Database host" => "Serveur de la base de données",
-"Data folder" => "Répertoire des données",
"Finish setup" => "Terminer l'installation",
-"gives you freedom and control over your own data" => "vous donne la liberté et le contrôle de vos propres données",
+"web services under your control" => "services web sous votre contrôle",
"Log out" => "Se déconnecter",
"Settings" => "Paramètres",
"Lost your password?" => "Mot de passe perdu ?",
"remember" => "se souvenir de moi",
+"Log in" => "Connexion",
"You are logged out." => "Vous êtes désormais déconnecté.",
-"You will receive a link to reset your password via Email." => "Vous allez recevoir un lien par email qui vous permettra de réinitialiser votre mot de passe.",
-"Requested" => "Nécessaire",
-"Login failed!" => "Échec de la connexion !",
-"Username or Email" => "Nom d'utilisateur ou Email",
-"Request reset" => "Demande de réinitialisation",
"prev" => "précédent",
-"next" => "suivant",
-"Your password was reset" => "Votre mot de passe a été réinitialisé",
-"New password" => "Nouveau mot de passe",
-"Reset password" => "Réinitialisation du mot de passe"
+"next" => "suivant"
);
diff --git a/core/l10n/he.php b/core/l10n/he.php
new file mode 100644
index 00000000000..f91d283118e
--- /dev/null
+++ b/core/l10n/he.php
@@ -0,0 +1,34 @@
+<?php $TRANSLATIONS = array(
+"You will receive a link to reset your password via Email." => "יישלח לתיבת הדוא״ל שלך קישור לאיפוס הססמה.",
+"Requested" => "נדרש",
+"Login failed!" => "הכניסה נכשלה!",
+"Username" => "שם משתמש",
+"Request reset" => "בקשת איפוס",
+"Your password was reset" => "הססמה שלך אופסה",
+"New password" => "ססמה חדשה",
+"Reset password" => "איפוס ססמה",
+"Personal" => "אישי",
+"Users" => "משתמשים",
+"Apps" => "יישומים",
+"Admin" => "מנהל",
+"Help" => "עזרה",
+"Cloud not found" => "ענן לא נמצא",
+"Create an <strong>admin account</strong>" => "יצירת <strong>חשבון מנהל</strong>",
+"Password" => "ססמה",
+"Advanced" => "מתקדם",
+"Data folder" => "תיקיית נתונים",
+"Configure the database" => "הגדרת מסד הנתונים",
+"will be used" => "ינוצלו",
+"Database user" => "שם משתמש במסד הנתונים",
+"Database password" => "ססמת מסד הנתונים",
+"Database name" => "שם מסד הנתונים",
+"Database host" => "שרת בסיס נתונים",
+"Finish setup" => "סיום התקנה",
+"Log out" => "התנתקות",
+"Settings" => "הגדרות",
+"Lost your password?" => "שכחת את ססמתך?",
+"remember" => "שמירת הססמה",
+"You are logged out." => "אינך מחובר.",
+"prev" => "קודם",
+"next" => "הבא"
+);
diff --git a/core/l10n/hr.php b/core/l10n/hr.php
new file mode 100644
index 00000000000..f129ca70608
--- /dev/null
+++ b/core/l10n/hr.php
@@ -0,0 +1,34 @@
+<?php $TRANSLATIONS = array(
+"You will receive a link to reset your password via Email." => "Primit ćete link kako biste poništili zaporku putem e-maila.",
+"Requested" => "Zahtijevano",
+"Login failed!" => "Prijava nije uspjela!",
+"Username" => "Korisničko ime",
+"Request reset" => "Zahtjev za resetiranjem",
+"Your password was reset" => "Vaša lozinka je resetirana",
+"New password" => "nova lozinka",
+"Reset password" => "poništavanje lozinke",
+"Personal" => "Osobno",
+"Users" => "korisnici",
+"Apps" => "aplikacije",
+"Admin" => "administrator",
+"Help" => "pomoć",
+"Cloud not found" => "Cloud nije pronađen",
+"Create an <strong>admin account</strong>" => "stvoriti <strong>Administratorski račun</strong>",
+"Password" => "Lozinka",
+"Advanced" => "Dodatno",
+"Data folder" => "Mapa baze podataka",
+"Configure the database" => "konfigurirati baze podataka",
+"will be used" => "će se koristiti",
+"Database user" => "korisnik baze podataka",
+"Database password" => "lozinka baze podataka",
+"Database name" => "ime baze podataka",
+"Database host" => "Poslužitelj baze podataka",
+"Finish setup" => "završiti postavljanje",
+"Log out" => "odjaviti",
+"Settings" => "postavke",
+"Lost your password?" => "Izgubili ste lozinku?",
+"remember" => "zapamtiti",
+"You are logged out." => "Vi ste odjavljeni.",
+"prev" => "prethodan",
+"next" => "sljedeći"
+);
diff --git a/core/l10n/hu_HU.php b/core/l10n/hu_HU.php
new file mode 100644
index 00000000000..9a7d2bc5395
--- /dev/null
+++ b/core/l10n/hu_HU.php
@@ -0,0 +1,33 @@
+<?php $TRANSLATIONS = array(
+"You will receive a link to reset your password via Email." => "Egy e-mailben kap értesítést a jelszóváltoztatás módjáról.",
+"Requested" => "Kért",
+"Login failed!" => "Belépés sikertelen!",
+"Username" => "Felhasználói név",
+"Your password was reset" => "Jelszó megváltoztatásra került",
+"New password" => "Új jelszó",
+"Reset password" => "Jelszó beállítás",
+"Personal" => "Személyes",
+"Users" => "Felhasználók",
+"Apps" => "Alkalmazások",
+"Admin" => "Adminisztráció",
+"Help" => "Súgó",
+"Cloud not found" => "Nem talált felhő",
+"Create an <strong>admin account</strong>" => "<strong>Adminisztrációs fiók</strong> létrehozása",
+"Password" => "Jelszó",
+"Advanced" => "Fejlett",
+"Data folder" => "Adat könyvtár",
+"Configure the database" => "Adatbázis konfigurálása",
+"will be used" => "használva lesz",
+"Database user" => "Adatbázis felhasználó",
+"Database password" => "Adatbázis jelszó",
+"Database name" => "Adatbázis név",
+"Database host" => "Adatbázis szerver",
+"Finish setup" => "Beállítások befejezése",
+"Log out" => "Kilépés",
+"Settings" => "Beállítások",
+"Lost your password?" => "Elfelejtett jelszó?",
+"remember" => "emlékezni",
+"You are logged out." => "Kilépés sikerült.",
+"prev" => "Előző",
+"next" => "Következő"
+);
diff --git a/core/l10n/ia.php b/core/l10n/ia.php
new file mode 100644
index 00000000000..2d41601d69a
--- /dev/null
+++ b/core/l10n/ia.php
@@ -0,0 +1,27 @@
+<?php $TRANSLATIONS = array(
+"Requested" => "Requestate",
+"Login failed!" => "Initio de session fallate!",
+"Username" => "Nomine de usator",
+"Request reset" => "Requestar reinitialisation",
+"Your password was reset" => "Tu contrasigno esseva reinitialisate",
+"New password" => "Nove contrasigno",
+"Reset password" => "Reinitialisar contrasigno",
+"Users" => "Usatores",
+"Apps" => "Applicationes",
+"Help" => "Adjuta",
+"Cloud not found" => "Nube non trovate",
+"Create an <strong>admin account</strong>" => "Crear un <strong>conto de administration</strong>",
+"Password" => "Contrasigno",
+"Advanced" => "Avantiate",
+"Data folder" => "Dossier de datos",
+"Configure the database" => "Configurar le base de datos",
+"will be used" => "essera usate",
+"Database user" => "Usator de base de datos",
+"Database password" => "Contrasigno de base de datos",
+"Database name" => "Nomine de base de datos",
+"Log out" => "Clauder le session",
+"Settings" => "Configurationes",
+"remember" => "memora",
+"prev" => "prev",
+"next" => "prox"
+);
diff --git a/core/l10n/id.php b/core/l10n/id.php
index 56221fafb96..eb20a4209c5 100644
--- a/core/l10n/id.php
+++ b/core/l10n/id.php
@@ -1,4 +1,5 @@
<?php $TRANSLATIONS = array(
+"Username" => "Username",
"Personal" => "Pribadi",
"Users" => "Pengguna",
"Apps" => "Aplikasi",
@@ -6,31 +7,21 @@
"Help" => "Bantuan",
"Cloud not found" => "Cloud tidak ditemukan",
"Create an <strong>admin account</strong>" => "Buat sebuah <strong>akun admin</strong>",
-"Username" => "Username",
"Password" => "Password",
+"Advanced" => "Tingkat Lanjut",
+"Data folder" => "Folder data",
"Configure the database" => "Konfigurasi database",
"will be used" => "akan digunakan",
"Database user" => "Pengguna database",
"Database password" => "Password database",
"Database name" => "Nama database",
-"Advanced" => "Tingkat Lanjut",
"Database host" => "Host database",
-"Data folder" => "Folder data",
"Finish setup" => "Selesaikan instalasi",
-"gives you freedom and control over your own data" => "memberikan anda kebebasan dan kendali atas data anda sendiri",
"Log out" => "Keluar",
"Settings" => "Setelan",
"Lost your password?" => "Lupa password anda?",
"remember" => "selalu login",
"You are logged out." => "Anda telah keluar.",
-"You will receive a link to reset your password via Email." => "Anda akan menerima tautan untuk menset ulang password anda via Email.",
-"Requested" => "Telah diminta",
-"Login failed!" => "Gagal masuk!",
-"Username or Email" => "Nama Pengguna atau Email",
-"Request reset" => "Meminta set ulang",
"prev" => "sebelum",
-"next" => "selanjutnya",
-"Your password was reset" => "Password anda telah diset ulang",
-"New password" => "Password Baru",
-"Reset password" => "Set Ulang Password"
+"next" => "selanjutnya"
);
diff --git a/core/l10n/it.php b/core/l10n/it.php
index 1d743fa87ed..1a63e7ea36e 100644
--- a/core/l10n/it.php
+++ b/core/l10n/it.php
@@ -1,36 +1,39 @@
<?php $TRANSLATIONS = array(
+"Owncloud password reset" => "Azzera la password di Owncloud",
+"Use the following link to reset your password: {link}" => "Usa il link seguente per azzerare la password: {link}",
+"You will receive a link to reset your password via Email." => "Riceverai un link per resettare la tua password via Email",
+"Requested" => "Richiesto",
+"Login failed!" => "Login fallito!",
+"Username" => "Nome utente",
+"Request reset" => "Richiesta di ripristino",
+"Your password was reset" => "La password è stata reimpostata",
+"To login page" => "Alla pagina di ingresso",
+"New password" => "Nuova password",
+"Reset password" => "Reimposta password",
"Personal" => "Personale",
"Users" => "Utenti",
"Apps" => "Applicazioni",
"Admin" => "Admin",
"Help" => "Aiuto",
"Cloud not found" => "Cloud non trovata",
-"Create an <strong>admin account</strong>" => "Crea un &lt;strong&gt;account amministratore&lt;/strong&gt;",
-"Username" => "Nome utente",
+"Create an <strong>admin account</strong>" => "Crea un <strong>account amministratore</strong>",
"Password" => "Password",
+"Advanced" => "Opzioni avanzate",
+"Data folder" => "Cartella dati",
"Configure the database" => "Configura il database",
"will be used" => "sarà usato",
"Database user" => "Utente database",
"Database password" => "Password database",
"Database name" => "Nome database",
-"Advanced" => "Opzioni avanzate",
"Database host" => "Host del database",
-"Data folder" => "Cartella dati",
"Finish setup" => "Termina",
-"gives you freedom and control over your own data" => "Libertà e controllo dei propri dati",
+"web services under your control" => "Servizi web nelle tue mani",
"Log out" => "Log out",
"Settings" => "Impostazioni",
"Lost your password?" => "Password persa?",
"remember" => "ricorda",
+"Log in" => "Entra",
"You are logged out." => "Sei uscito.",
-"You will receive a link to reset your password via Email." => "Riceverai via email un link per il reset della tua password",
-"Requested" => "Richiesto",
-"Login failed!" => "Login fallito!",
-"Username or Email" => "Username o email",
-"Request reset" => "Reset richiesta",
"prev" => "precedente",
-"next" => "successivo",
-"Your password was reset" => "tua password è stata resettata",
-"New password" => "Nuova password",
-"Reset password" => "Reset password"
+"next" => "successivo"
);
diff --git a/core/l10n/ja_JP.php b/core/l10n/ja_JP.php
new file mode 100644
index 00000000000..ae2b47253cc
--- /dev/null
+++ b/core/l10n/ja_JP.php
@@ -0,0 +1,34 @@
+<?php $TRANSLATIONS = array(
+"You will receive a link to reset your password via Email." => "パスワードをリセットするリンクがメールで届きます。",
+"Requested" => "送信されました",
+"Login failed!" => "ログインに失敗しました。",
+"Username" => "ユーザ名",
+"Request reset" => "リセットを要求する。",
+"Your password was reset" => "あなたのパスワードはリセットされました。",
+"New password" => "新しいパスワードを入力",
+"Reset password" => "パスワードをリセット",
+"Personal" => "個人設定",
+"Users" => "ユーザ",
+"Apps" => "アプリ",
+"Admin" => "管理者",
+"Help" => "ヘルプ",
+"Cloud not found" => "見つけられません",
+"Create an <strong>admin account</strong>" => "<strong>管理者アカウント</strong>を作成してください",
+"Password" => "パスワード",
+"Advanced" => "詳細設定",
+"Data folder" => "データフォルダ",
+"Configure the database" => "データベースを設定してください",
+"will be used" => "が使用されます",
+"Database user" => "データベースのユーザ名",
+"Database password" => "データベースのパスワード",
+"Database name" => "データベース名",
+"Database host" => "データベースのホスト名",
+"Finish setup" => "セットアップを完了します",
+"Log out" => "ログアウト",
+"Settings" => "設定",
+"Lost your password?" => "パスワードがわからなくなりましたか?",
+"remember" => "パスワードを記憶する",
+"You are logged out." => "ログアウトしました。",
+"prev" => "前",
+"next" => "次"
+);
diff --git a/core/l10n/lb.php b/core/l10n/lb.php
index 40bd86d6a3a..d663b6dc424 100644
--- a/core/l10n/lb.php
+++ b/core/l10n/lb.php
@@ -1,4 +1,12 @@
<?php $TRANSLATIONS = array(
+"You will receive a link to reset your password via Email." => "Du kriss en Link fir däin Passwuert nei ze setzen via Email geschéckt.",
+"Requested" => "Gefrot",
+"Login failed!" => "Falschen Login!",
+"Username" => "Benotzernumm",
+"Request reset" => "Reset ufroen",
+"Your password was reset" => "Dän Passwuert ass zeréck gesat gin",
+"New password" => "Neit Passwuert",
+"Reset password" => "Passwuert zeréck setzen",
"Personal" => "Perséinlech",
"Users" => "Benotzer",
"Apps" => "Applicatiounen",
@@ -6,31 +14,21 @@
"Help" => "Hëllef",
"Cloud not found" => "Cloud net fonnt",
"Create an <strong>admin account</strong>" => "En <strong>Admin Account</strong> uleeën",
-"Username" => "Benotzernumm",
"Password" => "Passwuert",
+"Advanced" => "Erweidert",
+"Data folder" => "Daten Dossier",
"Configure the database" => "Datebank konfiguréieren",
"will be used" => "wärt benotzt ginn",
"Database user" => "Datebank Benotzer",
"Database password" => "Datebank Passwuert",
"Database name" => "Datebank Numm",
-"Advanced" => "Erweidert",
"Database host" => "Datebank Server",
-"Data folder" => "Daten Dossier",
"Finish setup" => "Installatioun ofschléissen",
-"gives you freedom and control over your own data" => "gëtt dir Fräiheet an Kontroll iwwert deng eegen Daten",
"Log out" => "Ausloggen",
"Settings" => "Astellungen",
"Lost your password?" => "Passwuert vergiess?",
"remember" => "verhalen",
"You are logged out." => "Du bass ausgeloggt.",
-"You will receive a link to reset your password via Email." => "Du kriss per E-mail en Link geschéckt fir däin Passwuert nei ze setzen.",
-"Requested" => "Verlaangt",
-"Login failed!" => "Aloggen feelgeschloen!",
-"Username or Email" => "Benotzernumm oder E-Mail",
-"Request reset" => "Reset ufroen",
"prev" => "zeréck",
-"next" => "weider",
-"Your password was reset" => "Dän Passwuert ass nei gesat ginn",
-"New password" => "Neit Passwuert",
-"Reset password" => "Passwuert nei setzen"
+"next" => "weider"
);
diff --git a/core/l10n/lt_LT.php b/core/l10n/lt_LT.php
new file mode 100644
index 00000000000..0d5306321c2
--- /dev/null
+++ b/core/l10n/lt_LT.php
@@ -0,0 +1,33 @@
+<?php $TRANSLATIONS = array(
+"You will receive a link to reset your password via Email." => "Elektroniniu paštu gausite nuorodą, su kuria galėsite iš naujo nustatyti slaptažodį.",
+"Requested" => "Užklausta",
+"Login failed!" => "Prisijungti nepavyko!",
+"Username" => "Prisijungimo vardas",
+"Request reset" => "Prašyti nustatymo iš najo",
+"Your password was reset" => "Jūsų slaptažodis buvo nustatytas iš naujo",
+"New password" => "Naujas slaptažodis",
+"Reset password" => "Atkurti slaptažodį",
+"Personal" => "Asmeniniai",
+"Users" => "Vartotojai",
+"Apps" => "Programos",
+"Admin" => "Administravimas",
+"Help" => "Pagalba",
+"Cloud not found" => "Negalima rasti",
+"Create an <strong>admin account</strong>" => "Sukurti <strong>administratoriaus paskyrą</strong>",
+"Password" => "Slaptažodis",
+"Data folder" => "Duomenų katalogas",
+"Configure the database" => "Nustatyti duomenų bazę",
+"will be used" => "bus naudojama",
+"Database user" => "Duomenų bazės vartotojas",
+"Database password" => "Duomenų bazės slaptažodis",
+"Database name" => "Duomenų bazės pavadinimas",
+"Database host" => "Duomenų bazės serveris",
+"Finish setup" => "Baigti diegimą",
+"Log out" => "Atsijungti",
+"Settings" => "Nustatymai",
+"Lost your password?" => "Pamiršote slaptažodį?",
+"remember" => "prisiminti",
+"You are logged out." => "Jūs atsijungėte.",
+"prev" => "atgal",
+"next" => "kitas"
+);
diff --git a/core/l10n/ms_MY.php b/core/l10n/ms_MY.php
index e7551a30bb8..b2e68c53658 100644
--- a/core/l10n/ms_MY.php
+++ b/core/l10n/ms_MY.php
@@ -1,4 +1,5 @@
<?php $TRANSLATIONS = array(
+"Username" => "Nama pengguna",
"Personal" => "Peribadi",
"Users" => "Pengguna",
"Apps" => "Aplikasi",
@@ -6,31 +7,21 @@
"Help" => "Bantuan",
"Cloud not found" => "Awan tidak dijumpai",
"Create an <strong>admin account</strong>" => "buat <strong>akaun admin</strong>",
-"Username" => "Nama pengguna",
"Password" => "Kata laluan",
+"Advanced" => "Maju",
+"Data folder" => "Fail data",
"Configure the database" => "Konfigurasi pangkalan data",
"will be used" => "akan digunakan",
"Database user" => "Nama pengguna pangkalan data",
"Database password" => "Kata laluan pangkalan data",
"Database name" => "Nama pangkalan data",
-"Advanced" => "Maju",
"Database host" => "Hos pangkalan data",
-"Data folder" => "Fail data",
"Finish setup" => "Setup selesai",
-"gives you freedom and control over your own data" => "memberikan anda kebebasan dan kendalian keatas data anda",
"Log out" => "Log keluar",
"Settings" => "Tetapan",
"Lost your password?" => "Hilang kata laluan?",
"remember" => "ingat",
"You are logged out." => "Anda telah log keluar.",
-"You will receive a link to reset your password via Email." => "Anda akan menerima link untuk menetapkan semula kata laluan anda melalui emel",
-"Requested" => "diminta",
-"Login failed!" => "Log in gagal!",
-"Username or Email" => "Nama pengguna atau Emel",
-"Request reset" => "Minta set semula",
"prev" => "sebelum",
-"next" => "seterus",
-"Your password was reset" => "Kata laluan anda diset semula",
-"New password" => "Kata laluan baru",
-"Reset password" => "Set semula kata laluan"
+"next" => "seterus"
);
diff --git a/core/l10n/nb_NO.php b/core/l10n/nb_NO.php
index 07b176e4985..e276d570f69 100644
--- a/core/l10n/nb_NO.php
+++ b/core/l10n/nb_NO.php
@@ -1,4 +1,5 @@
<?php $TRANSLATIONS = array(
+"Username" => "Brukernavn",
"Personal" => "Personlig",
"Users" => "Brukere",
"Apps" => "Apper",
@@ -6,21 +7,19 @@
"Help" => "Hjelp",
"Cloud not found" => "Sky ikke funnet",
"Create an <strong>admin account</strong>" => "opprett en <strong>administrator-konto</strong>",
-"Username" => "Brukernavn",
"Password" => "Passord",
+"Advanced" => "Avansert",
+"Data folder" => "Datamappe",
"Configure the database" => "Konfigurer databasen",
"will be used" => "vil bli brukt",
"Database user" => "Databasebruker",
"Database password" => "Databasepassord",
"Database name" => "Databasenavn",
-"Advanced" => "Avansert",
-"Data folder" => "Datamappe",
"Finish setup" => "Fullfør oppsetting",
"Log out" => "Logg ut",
"Settings" => "Innstillinger",
"remember" => "husk",
"You are logged out." => "Du er logget ut",
-"Login failed!" => "Klarte ikke å logge inn!",
"prev" => "forrige",
"next" => "neste"
);
diff --git a/core/l10n/nl.php b/core/l10n/nl.php
index 98ad267ff51..3d444c92604 100644
--- a/core/l10n/nl.php
+++ b/core/l10n/nl.php
@@ -1,4 +1,15 @@
<?php $TRANSLATIONS = array(
+"Owncloud password reset" => "reset je Owncloud wachtwoord",
+"Use the following link to reset your password: {link}" => "Gebruik de volgende link om je wachtwoord te resetten: {link}",
+"You will receive a link to reset your password via Email." => "U ontvangt een link om je wachtwoord opnieuw in te stellen via e-mail.",
+"Requested" => "Gevraagd",
+"Login failed!" => "Login mislukt!",
+"Username" => "Gebruikersnaam",
+"Request reset" => "Resetaanvraag",
+"Your password was reset" => "Je wachtwoord is geweizigd",
+"To login page" => "Naar de login-pagina",
+"New password" => "Nieuw wachtwoord",
+"Reset password" => "Reset wachtwoord",
"Personal" => "Persoonlijk",
"Users" => "Gebruikers",
"Apps" => "Apps",
@@ -6,31 +17,23 @@
"Help" => "Help",
"Cloud not found" => "Cloud niet gevonden",
"Create an <strong>admin account</strong>" => "Maak een <strong>beheerdersaccount</strong> aan",
-"Username" => "Gebruikersnaam",
"Password" => "Wachtwoord",
+"Advanced" => "Geavanceerd",
+"Data folder" => "Gegevensmap",
"Configure the database" => "Configureer de databank",
"will be used" => "zal gebruikt worden",
"Database user" => "Gebruiker databank",
"Database password" => "Wachtwoord databank",
"Database name" => "Naam databank",
-"Advanced" => "Geavanceerd",
"Database host" => "Database server",
-"Data folder" => "Gegevensmap",
"Finish setup" => "Installatie afronden",
-"gives you freedom and control over your own data" => "geeft u vrijheid en controle over uw eigen data",
+"web services under your control" => "webdiensten die je beheerst",
"Log out" => "Afmelden",
"Settings" => "Instellingen",
"Lost your password?" => "Uw wachtwoord vergeten?",
"remember" => "onthoud gegevens",
+"Log in" => "Meld je aan",
"You are logged out." => "U bent afgemeld.",
-"You will receive a link to reset your password via Email." => "U ontvangt een link om uw wachtwoord te wijzigen via Email",
-"Requested" => "Aangevraagd",
-"Login failed!" => "Aanmelden mislukt!",
-"Username or Email" => "Gebruikersnaam of Email",
-"Request reset" => "Wachtwoordreset aanvragen",
"prev" => "vorige",
-"next" => "volgende",
-"Your password was reset" => "Uw wachtwoord is opnieuw ingesteld",
-"New password" => "Nieuw wachtwoord",
-"Reset password" => "Reset wachtwoord"
+"next" => "volgende"
);
diff --git a/core/l10n/nn_NO.php b/core/l10n/nn_NO.php
new file mode 100644
index 00000000000..c62302b3bc4
--- /dev/null
+++ b/core/l10n/nn_NO.php
@@ -0,0 +1,34 @@
+<?php $TRANSLATIONS = array(
+"You will receive a link to reset your password via Email." => "Du vil få ei lenkje for å nullstilla passordet via epost.",
+"Requested" => "Førespurt",
+"Login failed!" => "Feil ved innlogging!",
+"Username" => "Brukarnamn",
+"Request reset" => "Be om nullstilling",
+"Your password was reset" => "Passordet ditt er nullstilt",
+"New password" => "Nytt passord",
+"Reset password" => "Nullstill passord",
+"Personal" => "Personleg",
+"Users" => "Brukarar",
+"Apps" => "Applikasjonar",
+"Admin" => "Administrer",
+"Help" => "Hjelp",
+"Cloud not found" => "Fann ikkje skyen",
+"Create an <strong>admin account</strong>" => "Lag ein <strong>admin-konto</strong>",
+"Password" => "Passord",
+"Advanced" => "Avansert",
+"Data folder" => "Datamappe",
+"Configure the database" => "Konfigurer databasen",
+"will be used" => "vil bli nytta",
+"Database user" => "Databasebrukar",
+"Database password" => "Databasepassord",
+"Database name" => "Databasenamn",
+"Database host" => "Databasetenar",
+"Finish setup" => "Fullfør oppsettet",
+"Log out" => "Logg ut",
+"Settings" => "Innstillingar",
+"Lost your password?" => "Gløymt passordet?",
+"remember" => "hugs",
+"You are logged out." => "Du er logga ut.",
+"prev" => "førre",
+"next" => "neste"
+);
diff --git a/core/l10n/pl.php b/core/l10n/pl.php
index b4d9fbe9248..d06bbf22154 100644
--- a/core/l10n/pl.php
+++ b/core/l10n/pl.php
@@ -1,4 +1,15 @@
<?php $TRANSLATIONS = array(
+"Owncloud password reset" => "Resetowani hasła",
+"Use the following link to reset your password: {link}" => "Użyj tego linku do zresetowania hasła: {link}",
+"You will receive a link to reset your password via Email." => "Otrzymasz link do resetowania hasła poprzez e-mail.",
+"Requested" => "Żądane",
+"Login failed!" => "Logowanie nie powiodło się!",
+"Username" => "Użytkownik",
+"Request reset" => "Żądanie resetowania",
+"Your password was reset" => "Twoje hasło zostało zresetowane",
+"To login page" => "Do strony logowania",
+"New password" => "Nowe hasło",
+"Reset password" => "Zresetuj hasło",
"Personal" => "Ustawienia osobiste",
"Users" => "Użytkownicy",
"Apps" => "Aplikacje",
@@ -6,31 +17,23 @@
"Help" => "Pomoc",
"Cloud not found" => "Konta nie znaleziono ",
"Create an <strong>admin account</strong>" => "Stwórz jako <strong>konto administratora</strong>",
-"Username" => "Użytkownik",
"Password" => "Hasło",
+"Advanced" => "Zaawansowane",
+"Data folder" => "Katalog danych",
"Configure the database" => "Konfiguracja bazy danych",
"will be used" => "zostanie użyte",
"Database user" => "Użytkownik bazy danych",
"Database password" => "Hasło do bazy danych",
"Database name" => "Nazwa bazy danych",
-"Advanced" => "Zaawansowane",
"Database host" => "Host bazy danych",
-"Data folder" => "Katalog danych",
"Finish setup" => "Zakończ instalację",
-"gives you freedom and control over your own data" => "zapewnia Ci wolność i kontrolę nad własnymi danymi",
+"web services under your control" => "usługi internetowe twoją pod kontrolą",
"Log out" => "Wyloguj się",
"Settings" => "Ustawienia",
"Lost your password?" => "Nie pamiętasz hasła?",
"remember" => "zapamiętaj",
+"Log in" => "Zaloguj się",
"You are logged out." => "Zostałeś wylogowany.",
-"You will receive a link to reset your password via Email." => "Otrzymasz link do resetowania hasła poprzez e-mail.",
-"Requested" => "Żądane",
-"Login failed!" => "Nie udało się zalogować!",
-"Username or Email" => "Użytkownik lub email",
-"Request reset" => "Zresetuj hasło",
"prev" => "wstecz",
-"next" => "dalej",
-"Your password was reset" => "Twoje hasło zostało zresetowane",
-"New password" => "Nowe hasło",
-"Reset password" => "Zresetuj hasło"
+"next" => "dalej"
);
diff --git a/core/l10n/pt_BR.php b/core/l10n/pt_BR.php
index 229d60f65c4..4f1a31ae3e7 100644
--- a/core/l10n/pt_BR.php
+++ b/core/l10n/pt_BR.php
@@ -1,4 +1,12 @@
<?php $TRANSLATIONS = array(
+"You will receive a link to reset your password via Email." => "Você receberá um link para redefinir sua senha via e-mail.",
+"Requested" => "Solicitado",
+"Login failed!" => "Falha ao fazer o login!",
+"Username" => "Nome de Usuário",
+"Request reset" => "Pedido de reposição",
+"Your password was reset" => "Sua senha foi mudada",
+"New password" => "Nova senha",
+"Reset password" => "Mudar senha",
"Personal" => "Pessoal",
"Users" => "Usuários",
"Apps" => "Apps",
@@ -6,31 +14,21 @@
"Help" => "Ajuda",
"Cloud not found" => "Cloud não encontrado",
"Create an <strong>admin account</strong>" => "Criar uma <strong>conta</strong> de <strong>administrador</strong>",
-"Username" => "Nome de Usuário",
"Password" => "Senha",
+"Advanced" => "Avançado",
+"Data folder" => "Pasta de dados",
"Configure the database" => "Configurar o banco de dados",
"will be used" => "será usado",
"Database user" => "Usuário de banco de dados",
"Database password" => "Senha do banco de dados",
"Database name" => "Nome do banco de dados",
-"Advanced" => "Avançado",
"Database host" => "Banco de dados do host",
-"Data folder" => "Pasta de dados",
"Finish setup" => "Concluir configuração",
-"gives you freedom and control over your own data" => "proporciona liberdade e controle sobre seus próprios dados",
"Log out" => "Sair",
"Settings" => "Configurações",
"Lost your password?" => "Esqueçeu sua senha?",
"remember" => "lembrete",
"You are logged out." => "Você está desconectado.",
-"You will receive a link to reset your password via Email." => "Você receberá um link para redefinir sua senha via e-mail.",
-"Requested" => "Solicitado",
-"Login failed!" => "Login sem sucesso",
-"Username or Email" => "Nome de usuário ou e-mail",
-"Request reset" => "Pedido de troca",
"prev" => "anterior",
-"next" => "próximo",
-"Your password was reset" => "Sua senha foi trocada",
-"New password" => "Nova senha",
-"Reset password" => "Toca de senha"
+"next" => "próximo"
);
diff --git a/core/l10n/pt_PT.php b/core/l10n/pt_PT.php
new file mode 100644
index 00000000000..e41152bcbbc
--- /dev/null
+++ b/core/l10n/pt_PT.php
@@ -0,0 +1,3 @@
+<?php $TRANSLATIONS = array(
+"Advanced" => "Avançado"
+);
diff --git a/core/l10n/ro.php b/core/l10n/ro.php
index 8440c44d1d8..7a8b289de5a 100644
--- a/core/l10n/ro.php
+++ b/core/l10n/ro.php
@@ -1,4 +1,15 @@
<?php $TRANSLATIONS = array(
+"Owncloud password reset" => "Resetare parolă Owncloud",
+"Use the following link to reset your password: {link}" => "Folosiți următorul link pentru a reseta parola: {link}",
+"You will receive a link to reset your password via Email." => "Veți primi la adresa de email un link prin care veți putea reseta parola",
+"Requested" => "Cerută",
+"Login failed!" => "Autentificare eșuată",
+"Username" => "Utilizator",
+"Request reset" => "Cerere trimisă",
+"Your password was reset" => "Parola a fost resetată",
+"To login page" => "Spre pagina de login",
+"New password" => "Noua parolă",
+"Reset password" => "Resetează parola",
"Personal" => "Personal",
"Users" => "Utilizatori",
"Apps" => "Aplicații",
@@ -6,31 +17,23 @@
"Help" => "Ajutor",
"Cloud not found" => "Nu s-a găsit",
"Create an <strong>admin account</strong>" => "Crează un <strong>cont de administrator</strong>",
-"Username" => "Utilizator",
"Password" => "Parola",
+"Advanced" => "Avansat",
+"Data folder" => "Directorul cu date",
"Configure the database" => "Configurează baza de date",
"will be used" => "vor fi folosite",
"Database user" => "Utilizatorul bazei de date",
"Database password" => "Parola bazei de date",
"Database name" => "Numele bazei de date",
-"Advanced" => "Avansat",
"Database host" => "Baza de date",
-"Data folder" => "Directorul cu date",
"Finish setup" => "Finalizează instalarea",
-"gives you freedom and control over your own data" => "îți oferă libertatea de a-ți controla datele",
+"web services under your control" => "Servicii web sub controlul tău",
"Log out" => "Ieșire",
"Settings" => "Setări",
"Lost your password?" => "Ai uitat parola?",
"remember" => "ține minte",
+"Log in" => "Autentificare",
"You are logged out." => "Ai ieșit",
-"You will receive a link to reset your password via Email." => "Vei primi prin email un link pentru resetarea parolei",
-"Requested" => "Cerută",
-"Login failed!" => "Autentificare eșuată!",
-"Username or Email" => "Utilizator sau email",
-"Request reset" => "Cere schimbarea parolei",
"prev" => "precedentul",
-"next" => "următorul",
-"Your password was reset" => "Parola a fost schimbată",
-"New password" => "Parola nouă",
-"Reset password" => "Schimbă parola"
+"next" => "următorul"
);
diff --git a/core/l10n/ru.php b/core/l10n/ru.php
index 45f0f4aef9d..12dd26a3507 100644
--- a/core/l10n/ru.php
+++ b/core/l10n/ru.php
@@ -1,4 +1,12 @@
<?php $TRANSLATIONS = array(
+"You will receive a link to reset your password via Email." => "На ваш адрес Email выслана ссылка для сброса пароля.",
+"Requested" => "Запрошено",
+"Login failed!" => "Не удалось войти!",
+"Username" => "Имя пользователя",
+"Request reset" => "Запросить сброс",
+"Your password was reset" => "Ваш пароль был сброшен",
+"New password" => "Новый пароль",
+"Reset password" => "Сбросить пароль",
"Personal" => "Личное",
"Users" => "Пользователи",
"Apps" => "Приложения",
@@ -6,31 +14,21 @@
"Help" => "Помощь",
"Cloud not found" => "Облако не найдено",
"Create an <strong>admin account</strong>" => "Создать <strong>учётную запись администратора</strong>",
-"Username" => "Имя пользователя",
"Password" => "Пароль",
+"Advanced" => "Дополнительно",
+"Data folder" => "Директория с данными",
"Configure the database" => "Настройка базы данных",
"will be used" => "будет использовано",
"Database user" => "Имя пользователя для базы данных",
"Database password" => "Пароль для базы данных",
"Database name" => "Название базы данных",
-"Advanced" => "Дополнительно",
"Database host" => "Хост базы данных",
-"Data folder" => "Директория с данными",
"Finish setup" => "Завершить установку",
-"gives you freedom and control over your own data" => "даёт Вам свободу и контроль над Вашими данными",
"Log out" => "Выйти",
"Settings" => "Настройки",
"Lost your password?" => "Забыли пароль?",
"remember" => "запомнить",
"You are logged out." => "Вы вышли.",
-"You will receive a link to reset your password via Email." => "Вы получите ссылку для сброса пароля на Ваш e-mail.",
-"Requested" => "Запрошено",
-"Login failed!" => "Войти не удалось!",
-"Username or Email" => "Имя пользователя или e-mail",
-"Request reset" => "Запросить сброс",
"prev" => "пред",
-"next" => "след",
-"Your password was reset" => "Пароль был сброшен",
-"New password" => "Новый пароль",
-"Reset password" => "Сбросить пароль"
+"next" => "след"
);
diff --git a/core/l10n/sk_SK.php b/core/l10n/sk_SK.php
new file mode 100644
index 00000000000..43d8ca7d5e0
--- /dev/null
+++ b/core/l10n/sk_SK.php
@@ -0,0 +1,34 @@
+<?php $TRANSLATIONS = array(
+"You will receive a link to reset your password via Email." => "Odkaz pre obnovenie hesla obdržíte E-mailom.",
+"Requested" => "Požiadané",
+"Login failed!" => "Prihlásenie zlyhalo!",
+"Username" => "Prihlasovacie meno",
+"Request reset" => "Požiadať o obnovenie",
+"Your password was reset" => "Vaše heslo bolo obnovené",
+"New password" => "Nové heslo",
+"Reset password" => "Obnova hesla",
+"Personal" => "Osobné",
+"Users" => "Používatelia",
+"Apps" => "Aplikácie",
+"Admin" => "Administrácia",
+"Help" => "Pomoc",
+"Cloud not found" => "Nedokážem nájsť",
+"Create an <strong>admin account</strong>" => "Vytvoriť <strong>administrátorský účet</strong>",
+"Password" => "Heslo",
+"Advanced" => "Pokročilé",
+"Data folder" => "Priečinok dát",
+"Configure the database" => "Nastaviť databázu",
+"will be used" => "bude použité",
+"Database user" => "Hostiteľ databázy",
+"Database password" => "Heslo databázy",
+"Database name" => "Meno databázy",
+"Database host" => "Server databázy",
+"Finish setup" => "Dokončiť inštaláciu",
+"Log out" => "Odhlásiť",
+"Settings" => "Nastavenia",
+"Lost your password?" => "Zabudli ste heslo?",
+"remember" => "zapamätať",
+"You are logged out." => "Ste odhlásený.",
+"prev" => "späť",
+"next" => "ďalej"
+);
diff --git a/core/l10n/sl.php b/core/l10n/sl.php
new file mode 100644
index 00000000000..62d5412a22a
--- /dev/null
+++ b/core/l10n/sl.php
@@ -0,0 +1,34 @@
+<?php $TRANSLATIONS = array(
+"You will receive a link to reset your password via Email." => "Preko email sporočila boste prejeli povezavo s katero lahko ponovno nastavite geslo",
+"Requested" => "Zahtevano",
+"Login failed!" => "Prijava ni Uspela!",
+"Username" => "Uporabniško Ime",
+"Request reset" => "Zahtevaj ponastavitev",
+"Your password was reset" => "Vaše geslo je bilo ponastavljeno",
+"New password" => "novo geslo",
+"Reset password" => "Ponastavi Geslo",
+"Personal" => "Osebno",
+"Users" => "Uporabniki",
+"Apps" => "Apps",
+"Admin" => "Admin",
+"Help" => "Pomoč",
+"Cloud not found" => "Ni najdeno",
+"Create an <strong>admin account</strong>" => "Ustvari <strong>admin račun</strong>",
+"Password" => "Geslo",
+"Advanced" => "Napredno",
+"Data folder" => "Data Mapa",
+"Configure the database" => "Nastavi Podatkovno Bazo",
+"will be used" => "Bo uporabljeno",
+"Database user" => "Podatkovna Baza Uporabnik",
+"Database password" => "Podatkovna Baza Geslo",
+"Database name" => "Ime Podatkovne Baze",
+"Database host" => "Database host",
+"Finish setup" => "Končaj instalacijo",
+"Log out" => "Odjava",
+"Settings" => "Nastavitve",
+"Lost your password?" => "Ste pozabili vaše geslo?",
+"remember" => "zapomni",
+"You are logged out." => "Odjavljeni ste",
+"prev" => "nazaj",
+"next" => "naprej"
+);
diff --git a/core/l10n/sr.php b/core/l10n/sr.php
index 0fd43c7b0a4..667a7b054c3 100644
--- a/core/l10n/sr.php
+++ b/core/l10n/sr.php
@@ -1,4 +1,12 @@
<?php $TRANSLATIONS = array(
+"You will receive a link to reset your password via Email." => "Добићете везу за ресетовање лозинке путем е-поште.",
+"Requested" => "Захтевано",
+"Login failed!" => "Несупела пријава!",
+"Username" => "Корисничко име",
+"Request reset" => "Захтевај ресетовање",
+"Your password was reset" => "Ваша лозинка је ресетована",
+"New password" => "Нова лозинка",
+"Reset password" => "Ресетуј лозинку",
"Personal" => "Лична",
"Users" => "Корисници",
"Apps" => "Програми",
@@ -6,31 +14,21 @@
"Help" => "Помоћ",
"Cloud not found" => "Облак није нађен",
"Create an <strong>admin account</strong>" => "Направи <strong>административни налог</strong>",
-"Username" => "Корисничко име",
"Password" => "Лозинка",
+"Advanced" => "Напредно",
+"Data folder" => "Фацикла података",
"Configure the database" => "Подешавање базе",
"will be used" => "ће бити коришћен",
"Database user" => "Корисник базе",
"Database password" => "Лозинка базе",
"Database name" => "Име базе",
-"Advanced" => "Напредно",
"Database host" => "Домаћин базе",
-"Data folder" => "Фацикла података",
"Finish setup" => "Заврши подешавање",
-"gives you freedom and control over your own data" => "вам даје слободу и контролу над вашим подацима",
"Log out" => "Одјава",
"Settings" => "Подешавања",
"Lost your password?" => "Изгубили сте лозинку?",
"remember" => "упамти",
"You are logged out." => "Одјављени сте.",
-"You will receive a link to reset your password via Email." => "Добићете везу за ресетовање лозинке путем е-поште.",
-"Requested" => "Захтев послат",
-"Login failed!" => "Неуспешно пријављивање!",
-"Username or Email" => "Корисничко име или адреса е-поште",
-"Request reset" => "Захтев за ресетовање",
"prev" => "претходно",
-"next" => "следеће",
-"Your password was reset" => "Ваша лозинка је ресетована",
-"New password" => "Нова лозинка",
-"Reset password" => "Ресетуј лозинку"
+"next" => "следеће"
);
diff --git a/core/l10n/sr@latin.php b/core/l10n/sr@latin.php
index f8565f6ee4e..e240de011ee 100644
--- a/core/l10n/sr@latin.php
+++ b/core/l10n/sr@latin.php
@@ -1,4 +1,12 @@
<?php $TRANSLATIONS = array(
+"You will receive a link to reset your password via Email." => "Dobićete vezu za resetovanje lozinke putem e-pošte.",
+"Requested" => "Zahtevano",
+"Login failed!" => "Nesupela prijava!",
+"Username" => "Korisničko ime",
+"Request reset" => "Zahtevaj resetovanje",
+"Your password was reset" => "Vaša lozinka je resetovana",
+"New password" => "Nova lozinka",
+"Reset password" => "Resetuj lozinku",
"Personal" => "Lična",
"Users" => "Korisnici",
"Apps" => "Programi",
@@ -6,31 +14,21 @@
"Help" => "Pomoć",
"Cloud not found" => "Oblak nije nađen",
"Create an <strong>admin account</strong>" => "Napravi <strong>administrativni nalog</strong>",
-"Username" => "Korisničko ime",
"Password" => "Lozinka",
+"Advanced" => "Napredno",
+"Data folder" => "Facikla podataka",
"Configure the database" => "Podešavanje baze",
"will be used" => "će biti korišćen",
"Database user" => "Korisnik baze",
"Database password" => "Lozinka baze",
"Database name" => "Ime baze",
-"Advanced" => "Napredno",
"Database host" => "Domaćin baze",
-"Data folder" => "Facikla podataka",
"Finish setup" => "Završi podešavanje",
-"gives you freedom and control over your own data" => "vam daje slobodu i kontrolu nad vašim podacima",
"Log out" => "Odjava",
"Settings" => "Podešavanja",
"Lost your password?" => "Izgubili ste lozinku?",
"remember" => "upamti",
"You are logged out." => "Odjavljeni ste.",
-"You will receive a link to reset your password via Email." => "Dobićete vezu za resetovanje lozinke putem e-pošte.",
-"Requested" => "Zahtev poslat",
-"Login failed!" => "Neuspešno prijavljivanje!",
-"Username or Email" => "Korisničko ime ili adresa e-pošte",
-"Request reset" => "Zahtev za resetovanje",
"prev" => "prethodno",
-"next" => "sledeće",
-"Your password was reset" => "Vaša lozinka je resetovana",
-"New password" => "Nova lozinka",
-"Reset password" => "Resetuj lozinku"
+"next" => "sledeće"
);
diff --git a/core/l10n/sv.php b/core/l10n/sv.php
index d7e1c240378..2b4bb2b9511 100644
--- a/core/l10n/sv.php
+++ b/core/l10n/sv.php
@@ -1,4 +1,12 @@
<?php $TRANSLATIONS = array(
+"You will receive a link to reset your password via Email." => "Du får en länk att återställa ditt lösenord via e-post.",
+"Requested" => "Begärd",
+"Login failed!" => "Inloggning misslyckades!",
+"Username" => "Användarnamn",
+"Request reset" => "Begär återställning",
+"Your password was reset" => "Ditt lösenord har återställts",
+"New password" => "Nytt lösenord",
+"Reset password" => "Återställ lösenordet",
"Personal" => "Personlig",
"Users" => "Användare",
"Apps" => "Program",
@@ -6,31 +14,21 @@
"Help" => "Hjälp",
"Cloud not found" => "Hittade inget moln",
"Create an <strong>admin account</strong>" => "Skapa ett <strong>administratörskonto</strong>",
-"Username" => "Användarnamn",
"Password" => "Lösenord",
+"Advanced" => "Avancerat",
+"Data folder" => "Datamapp",
"Configure the database" => "Konfigurera databasen",
"will be used" => "kommer att användas",
"Database user" => "Databas-användare",
"Database password" => "Lösenord för databasen",
"Database name" => "Databasens namn",
-"Advanced" => "Avancerat",
"Database host" => "Databasserver",
-"Data folder" => "Datamapp",
"Finish setup" => "Avsluta installation",
-"gives you freedom and control over your own data" => "ger dig frihet och kontroll över din egen data",
"Log out" => "Logga ut",
"Settings" => "Inställningar",
-"Lost your password?" => "Tappat bort ditt lösenord?",
+"Lost your password?" => "Glömt ditt lösenord?",
"remember" => "kom ihåg",
"You are logged out." => "Du är utloggad",
-"You will receive a link to reset your password via Email." => "Du kommer få en länk, via e-post, där du kan återställ ditt lösenord",
-"Requested" => "Begärd",
-"Login failed!" => "Inloggning misslyckades!",
-"Username or Email" => "Användarnamn eller e-post",
-"Request reset" => "Begär återställning",
"prev" => "föregående",
-"next" => "nästa",
-"Your password was reset" => "Ditt lösenord har återställts",
-"New password" => "Nytt lösenord",
-"Reset password" => "Återställ lösenord"
+"next" => "nästa"
);
diff --git a/core/l10n/tr.php b/core/l10n/tr.php
new file mode 100644
index 00000000000..100fa9960cb
--- /dev/null
+++ b/core/l10n/tr.php
@@ -0,0 +1,34 @@
+<?php $TRANSLATIONS = array(
+"You will receive a link to reset your password via Email." => "Parolanızı sıfırlamak için bir bağlantı Eposta olarak gönderilecek.",
+"Requested" => "İstendi",
+"Login failed!" => "Giriş başarısız!",
+"Username" => "Kullanıcı adı",
+"Request reset" => "Sıfırlama iste",
+"Your password was reset" => "Parolanız sıfırlandı",
+"New password" => "Yeni parola",
+"Reset password" => "Parolayı sıfırla",
+"Personal" => "Kişisel",
+"Users" => "Kullanıcılar",
+"Apps" => "Uygulamalar",
+"Admin" => "Yönetici",
+"Help" => "Yardı",
+"Cloud not found" => "Bulut bulunamadı",
+"Create an <strong>admin account</strong>" => "Bir <strong>yönetici hesabı</strong> oluşturun",
+"Password" => "Parola",
+"Advanced" => "Gelişmiş",
+"Data folder" => "Veri klasörü",
+"Configure the database" => "Veritabanını ayarla",
+"will be used" => "kullanılacak",
+"Database user" => "Veritabanı kullanıcı adı",
+"Database password" => "Veritabanı parolası",
+"Database name" => "Veritabanı adı",
+"Database host" => "Veritabanı sunucusu",
+"Finish setup" => "Kurulumu tamamla",
+"Log out" => "Çıkış yap",
+"Settings" => "Ayarlar",
+"Lost your password?" => "Parolanızı mı unuttunuz?",
+"remember" => "hatırla",
+"You are logged out." => "Çıkış yaptınız.",
+"prev" => "önceki",
+"next" => "sonraki"
+);
diff --git a/core/l10n/zh_CN.php b/core/l10n/zh_CN.php
index 4c9f197346c..8ab1419fed2 100644
--- a/core/l10n/zh_CN.php
+++ b/core/l10n/zh_CN.php
@@ -1,4 +1,12 @@
<?php $TRANSLATIONS = array(
+"You will receive a link to reset your password via Email." => "您将会收到包含可以重置密码链接的邮件。",
+"Requested" => "已请求",
+"Login failed!" => "登录失败!",
+"Username" => "用户名",
+"Request reset" => "请求重置",
+"Your password was reset" => "您的密码已重置",
+"New password" => "新密码",
+"Reset password" => "重置密码",
"Personal" => "个人",
"Users" => "用户",
"Apps" => "应用",
@@ -6,31 +14,21 @@
"Help" => "帮助",
"Cloud not found" => "未找到云",
"Create an <strong>admin account</strong>" => "创建<strong>管理员账号</strong>",
-"Username" => "用户名",
"Password" => "密码",
+"Advanced" => "高级",
+"Data folder" => "数据目录",
"Configure the database" => "配置数据库",
"will be used" => "将被使用",
"Database user" => "数据库用户",
"Database password" => "数据库密码",
"Database name" => "数据库名",
-"Advanced" => "高级",
"Database host" => "数据库主机",
-"Data folder" => "数据目录",
"Finish setup" => "安装完成",
-"gives you freedom and control over your own data" => "自由掌控您的数据",
"Log out" => "注销",
"Settings" => "设置",
"Lost your password?" => "忘记密码?",
"remember" => "记住",
"You are logged out." => "您已注销。",
-"You will receive a link to reset your password via Email." => "您将通过邮件收到一个用于重置密码的链接",
-"Requested" => "请求已发送",
-"Login failed!" => "登陆失败!",
-"Username or Email" => "用户名或电子邮件",
-"Request reset" => "请求重置",
"prev" => "上一页",
-"next" => "下一页",
-"Your password was reset" => "您的密码已重置",
-"New password" => "新密码",
-"Reset password" => "重置密码"
+"next" => "下一页"
);
diff --git a/files/ajax/delete.php b/files/ajax/delete.php
index 48df5862db2..1725201fdd9 100644
--- a/files/ajax/delete.php
+++ b/files/ajax/delete.php
@@ -6,8 +6,8 @@ require_once('../../lib/base.php');
OC_JSON::checkLoggedIn();
// Get data
-$dir = $_GET["dir"];
-$files = isset($_GET["file"]) ? $_GET["file"] : $_GET["files"];
+$dir = stripslashes($_GET["dir"]);
+$files = isset($_GET["file"]) ? stripslashes($_GET["file"]) : stripslashes($_GET["files"]);
$files = explode(';', $files);
$filesWithError = '';
diff --git a/files/ajax/move.php b/files/ajax/move.php
index 3517901c6cf..9af3f80208f 100644
--- a/files/ajax/move.php
+++ b/files/ajax/move.php
@@ -6,9 +6,9 @@ require_once('../../lib/base.php');
OC_JSON::checkLoggedIn();
// Get data
-$dir = $_GET["dir"];
-$file = $_GET["file"];
-$target = $_GET["target"];
+$dir = stripslashes($_GET["dir"]);
+$file = stripslashes($_GET["file"]);
+$target = stripslashes($_GET["target"]);
if(OC_Files::move($dir,$file,$target,$file)){
diff --git a/files/ajax/newfile.php b/files/ajax/newfile.php
index 5c4f49a3675..afc444bc0ac 100644
--- a/files/ajax/newfile.php
+++ b/files/ajax/newfile.php
@@ -6,8 +6,8 @@ require_once('../../lib/base.php');
OC_JSON::checkLoggedIn();
// Get the params
-$dir = isset( $_GET['dir'] ) ? $_GET['dir'] : '';
-$filename = isset( $_GET['filename'] ) ? $_GET['filename'] : '';
+$dir = isset( $_GET['dir'] ) ? stripslashes($_GET['dir']) : '';
+$filename = isset( $_GET['filename'] ) ? stripslashes($_GET['filename']) : '';
$content = isset( $_GET['content'] ) ? $_GET['content'] : '';
if($filename == '') {
@@ -24,4 +24,4 @@ if(OC_Files::newFile($dir, $filename, 'file')) {
}
-OC_JSON::error(array("data" => array( "message" => "Error when creating the file" ))); \ No newline at end of file
+OC_JSON::error(array("data" => array( "message" => "Error when creating the file" )));
diff --git a/files/ajax/newfolder.php b/files/ajax/newfolder.php
index d244fb7be19..6db045c4e17 100644
--- a/files/ajax/newfolder.php
+++ b/files/ajax/newfolder.php
@@ -6,15 +6,15 @@ require_once('../../lib/base.php');
OC_JSON::checkLoggedIn();
// Get the params
-$dir = isset( $_GET['dir'] ) ? $_GET['dir'] : '';
-$foldername = isset( $_GET['foldername'] ) ? $_GET['foldername'] : '';
+$dir = isset( $_GET['dir'] ) ? stripslashes($_GET['dir']) : '';
+$foldername = isset( $_GET['foldername'] ) ? stripslashes($_GET['foldername']) : '';
if(trim($foldername) == '') {
OC_JSON::error(array("data" => array( "message" => "Empty Foldername" )));
exit();
}
-if(OC_Files::newFile($dir, $foldername, 'dir')) {
+if(OC_Files::newFile($dir, stripslashes($foldername), 'dir')) {
OC_JSON::success(array("data" => array()));
exit();
}
diff --git a/files/ajax/rename.php b/files/ajax/rename.php
index 87ffbc3ada0..a51b36635b3 100644
--- a/files/ajax/rename.php
+++ b/files/ajax/rename.php
@@ -6,9 +6,9 @@ require_once('../../lib/base.php');
OC_JSON::checkLoggedIn();
// Get data
-$dir = $_GET["dir"];
-$file = $_GET["file"];
-$newname = $_GET["newname"];
+$dir = stripslashes($_GET["dir"]);
+$file = stripslashes($_GET["file"]);
+$newname = stripslashes($_GET["newname"]);
// Delete
if( OC_Files::move( $dir, $file, $dir, $newname )) {
diff --git a/files/css/files.css b/files/css/files.css
index 39f0b9fe780..5238c6a7f7b 100644
--- a/files/css/files.css
+++ b/files/css/files.css
@@ -36,6 +36,7 @@
#emptyfolder { position:absolute; margin:10em 0 0 10em; font-size:1.5em; font-weight:bold; color:#888; text-shadow:#fff 0 1px 0; }
table { position:relative; top:37px; width:100%; }
tbody tr:hover, tbody tr:active, tbody tr.selected { background-color:#f8f8f8; height:1em; }
+tbody tr { background-color:#fff; }
tbody tr.selected { background-color:#eee; }
tbody a { color:#000; }
span.extention, td.date { color:#999; }
@@ -69,10 +70,11 @@ table thead.fixed { height:2em; }
#select_all { float:left; margin:.3em 0.6em 0 .5em; }
#uploadsize-message,#delete-confirm { display:none; }
.selectedActions a,#fileList a.action { float:right; display:inline; margin:0 .5em; padding:.3em .3em 0 .3em !important; }
+a.action>img{ max-height:16px; max-width:16px; }
.selectedActions { display:none; }
/* add breadcrumb divider to the File item in navigation panel */
#navigation>ul>li:first-child { background:url('../../core/img/breadcrumb-start.svg') no-repeat 12.5em 0px; width:12.5em; padding-right:1em; position:fixed; }
#navigation>ul>li:first-child+li { padding-top:2.9em; }
-#scanning-message{ top:40%; left:40%; position:absolute; display:none } \ No newline at end of file
+#scanning-message{ top:40%; left:40%; position:absolute; display:none }
diff --git a/files/index.php b/files/index.php
index fc69a42bec6..fbf7a4901a1 100644
--- a/files/index.php
+++ b/files/index.php
@@ -29,9 +29,6 @@ require_once('../lib/base.php');
OC_Util::checkLoggedIn();
// Load the files we need
-OC_Util::addStyle( 'files_texteditor', 'style' );
-OC_Util::addScript( 'files_texteditor', 'editor');
-OC_Util::addScript( 'files_texteditor', 'aceeditor/ace');
OC_Util::addStyle( "files", "files" );
OC_Util::addScript( "files", "files" );
OC_Util::addScript( 'files', 'filelist' );
@@ -41,7 +38,7 @@ if(!isset($_SESSION['timezone'])){
}
OC_App::setActiveNavigationEntry( "files_index" );
// Load the files
-$dir = isset( $_GET['dir'] ) ? $_GET['dir'] : '';
+$dir = isset( $_GET['dir'] ) ? stripslashes($_GET['dir']) : '';
// Redirect if directory does not exist
if(!OC_Filesystem::is_dir($dir)) {
header("Location: ".$_SERVER['PHP_SELF']."");
diff --git a/files/js/fileactions.js b/files/js/fileactions.js
index 6f0729e43b6..b5dd3982803 100644
--- a/files/js/fileactions.js
+++ b/files/js/fileactions.js
@@ -66,7 +66,7 @@ FileActions={
if(img.call){
img=img(file);
}
- var html='<a href="#" title="'+name+'" class="action" />';
+ var html='<a href="#" title="'+name+'" class="action" style="display:none" />';
var element=$(html);
if(img){
element.append($('<img src="'+img+'"/>'));
@@ -80,6 +80,7 @@ FileActions={
FileActions.hide();
action(currentFile);
});
+ element.hide();
parent.children('a.name').append(element);
}
}
@@ -88,7 +89,7 @@ FileActions={
if(img.call){
img=img(file);
}
- var html='<a href="#" title="Delete" class="action" />';
+ var html='<a href="#" title="Delete" class="action" style="display:none" />';
var element=$(html);
if(img){
element.append($('<img src="'+img+'"/>'));
@@ -102,10 +103,13 @@ FileActions={
FileActions.hide();
action(currentFile);
});
+ element.hide();
parent.parent().children().last().append(element);
}
- $('#fileList .action').hide();
- $('#fileList .action').fadeIn(200);
+ $('#fileList .action').css('-o-transition-property','none');//temporarly disable
+ $('#fileList .action').fadeIn(200,function(){
+ $('#fileList .action').css('-o-transition-property','opacity');
+ });
return false;
},
hide:function(){
diff --git a/files/js/files.js b/files/js/files.js
index b500ecfed70..649f193aa2d 100644
--- a/files/js/files.js
+++ b/files/js/files.js
@@ -12,7 +12,7 @@ $(document).ready(function() {
//drag/drop of files
$('#fileList tr td.filename').draggable(dragOptions);
- $('#fileList tr[data-type="dir"] td.filename').droppable(folderDropOptions);
+ $('#fileList tr[data-type="dir"][data-write="true"] td.filename').droppable(folderDropOptions);
$('div.crumb').droppable(crumbDropOptions);
$('ul#apps>li:first-child').data('dir','');
$('ul#apps>li:first-child').droppable(crumbDropOptions);
@@ -71,8 +71,8 @@ $(document).ready(function() {
} else {
var filename=$(this).parent().parent().attr('data-file');
var tr=$('tr').filterAttr('data-file',filename);
- var renaming=tr.data('renaming')
- if(!renaming && !FileList.isLoading(filename)){
+ var renaming=tr.data('renaming');
+ if(!renaming && !FileList.isLoading(filename)){
var mime=$(this).parent().parent().data('mime');
var type=$(this).parent().parent().data('type');
var action=FileActions.getDefault(mime,type);
diff --git a/files/l10n/ar.php b/files/l10n/ar.php
new file mode 100644
index 00000000000..afdc0a89201
--- /dev/null
+++ b/files/l10n/ar.php
@@ -0,0 +1,19 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "تم ترفيع الملفات بنجاح.",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "حجم الملف الذي تريد ترفيعه أعلى مما upload_max_filesize يسمح به في ملف php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "حجم الملف الذي تريد ترفيعه أعلى مما MAX_FILE_SIZE يسمح به في واجهة ال HTML.",
+"The uploaded file was only partially uploaded" => "تم ترفيع جزء من الملفات الذي تريد ترفيعها فقط",
+"No file was uploaded" => "لم يتم ترفيع أي من الملفات",
+"Missing a temporary folder" => "المجلد المؤقت غير موجود",
+"Files" => "الملفات",
+"Maximum upload size" => "الحد الأقصى لحجم الملفات التي يمكن رفعها",
+"Upload" => "إرفع",
+"Nothing in here. Upload something!" => "لا يوجد شيء هنا. إرفع بعض الملفات!",
+"Name" => "الاسم",
+"Download" => "تحميل",
+"Size" => "حجم",
+"Modified" => "معدل",
+"Delete" => "محذوف",
+"Upload too large" => "حجم الترفيع أعلى من المسموح",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "حجم الملفات التي تريد ترفيعها أعلى من المسموح على الخادم."
+);
diff --git a/files/l10n/bg_BG.php b/files/l10n/bg_BG.php
index db5a095c2cb..027a7698203 100644
--- a/files/l10n/bg_BG.php
+++ b/files/l10n/bg_BG.php
@@ -1,8 +1,13 @@
<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Файлът е качен успешно",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Файлът който се опитвате да качите, надвишава зададените стойности в upload_max_filesize в PHP.INI",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Файлът който се опитвате да качите надвишава стойностите в MAX_FILE_SIZE в HTML формата.",
+"The uploaded file was only partially uploaded" => "Файлът е качен частично",
+"No file was uploaded" => "Фахлът не бе качен",
+"Missing a temporary folder" => "Липсва временната папка",
"Files" => "Файлове",
"Maximum upload size" => "Макс. размер за качване",
"Upload" => "Качване",
-"New Folder" => "Нова папка",
"Nothing in here. Upload something!" => "Няма нищо, качете нещо!",
"Name" => "Име",
"Download" => "Изтегляне",
diff --git a/files/l10n/ca.php b/files/l10n/ca.php
index 8515ab35f27..b85b36f5c02 100644
--- a/files/l10n/ca.php
+++ b/files/l10n/ca.php
@@ -1,14 +1,23 @@
<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "El fitxer s'ha pujat correctament",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "El fitxer de pujada excedeix la directiva upload_max_filesize establerta a php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "El fitxer de pujada excedeix la directiva MAX_FILE_SIZE especificada al formulari HTML",
+"The uploaded file was only partially uploaded" => "El fitxer només s'ha pujat parcialment",
+"No file was uploaded" => "El fitxer no s'ha pujat",
+"Missing a temporary folder" => "S'ha perdut un fitxer temporal",
"Files" => "Fitxers",
"Maximum upload size" => "Mida màxima de pujada",
+"New" => "Nou",
+"Text file" => "Fitxer de text",
+"Folder" => "Carpeta",
+"From the web" => "Des de la web",
"Upload" => "Puja",
-"New Folder" => "Carpeta nova",
"Nothing in here. Upload something!" => "Res per aquí. Pugeu alguna cosa!",
"Name" => "Nom",
-"Download" => "Descarrega",
+"Download" => "Baixa",
"Size" => "Mida",
"Modified" => "Modificat",
"Delete" => "Esborra",
"Upload too large" => "La pujada és massa gran",
-"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Els fitxers que esteu intentant pujar excedeixen la mida màxima de pujada d'aquest servidor"
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Els fitxers que esteu intentant pujar excedeixen la mida màxima de pujada del servidor"
);
diff --git a/files/l10n/cs_CZ.php b/files/l10n/cs_CZ.php
index c5430deaeb6..5d26b26604a 100644
--- a/files/l10n/cs_CZ.php
+++ b/files/l10n/cs_CZ.php
@@ -1,8 +1,17 @@
<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Soubor byl odeslán úspěšně",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Odeslaný soubor přesáhl velikostí parametr upload_max_filesize v php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Odeslaný soubor přesáhl velikostí parametr MAX_FILE_SIZE specifikovaný v HTML formuláři",
+"The uploaded file was only partially uploaded" => "Soubor byl odeslán pouze částečně",
+"No file was uploaded" => "Soubor nebyl odeslán",
+"Missing a temporary folder" => "Chybí adresář pro sočasné soubory",
"Files" => "Soubory",
"Maximum upload size" => "Maximální velikost ukládaných souborů",
+"New" => "Nový",
+"Text file" => "Textový soubor",
+"Folder" => "Adresář",
+"From the web" => "Z webu",
"Upload" => "Uložit",
-"New Folder" => "Nový adresář",
"Nothing in here. Upload something!" => "Žádný obsah. Uložte si něco!",
"Name" => "Název",
"Download" => "Stáhnout",
diff --git a/files/l10n/da.php b/files/l10n/da.php
index bc909a92331..f86a98d44c1 100644
--- a/files/l10n/da.php
+++ b/files/l10n/da.php
@@ -1,8 +1,17 @@
<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Der er ingen fejl, filen blev uploadet med success",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Den uploadede fil overskrider upload_max_filesize direktivet i php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Den uploadede fil overskrider MAX_FILE_SIZE -direktivet som er specificeret i HTML-formularen",
+"The uploaded file was only partially uploaded" => "Den uploadede file blev kun delvist uploadet",
+"No file was uploaded" => "Ingen fil blev uploadet",
+"Missing a temporary folder" => "Mangler en midlertidig mappe",
"Files" => "Filer",
"Maximum upload size" => "Maksimal upload-størrelse",
+"New" => "Ny",
+"Text file" => "Tekstfil",
+"Folder" => "Mappe",
+"From the web" => "Fra nettet",
"Upload" => "Upload",
-"New Folder" => "Ny Mappe",
"Nothing in here. Upload something!" => "Her er tomt. Upload noget!",
"Name" => "Navn",
"Download" => "Download",
@@ -10,5 +19,5 @@
"Modified" => "Ændret",
"Delete" => "Slet",
"Upload too large" => "Upload for stor",
-"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Filerne du prøver at uploade er større end den maksimale størrelse for fil-upload på denne server."
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Filerne, du prøver at uploade, er større end den maksimale størrelse for fil-upload på denne server."
);
diff --git a/files/l10n/de.php b/files/l10n/de.php
index 0259dd02e84..ed76de649ab 100644
--- a/files/l10n/de.php
+++ b/files/l10n/de.php
@@ -1,8 +1,15 @@
<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Datei hochgeladen.",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Die hochgeladene Datei ist zu groß.",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Die hochgeladene Datei ist zu groß.",
+"The uploaded file was only partially uploaded" => "Die Datei wurde nur teilweise hochgeladen.",
+"No file was uploaded" => "Es wurde keine Datei hochgeladen.",
+"Missing a temporary folder" => "Temporärer Ordner fehlt.",
"Files" => "Dateien",
"Maximum upload size" => "Maximale Größe",
+"Text file" => "Text Datei",
+"Folder" => "Ordner",
"Upload" => "Hochladen",
-"New Folder" => "Neuer Ordner",
"Nothing in here. Upload something!" => "Alles leer. Lad’ was hoch!",
"Name" => "Name",
"Download" => "Herunterladen",
diff --git a/files/l10n/el.php b/files/l10n/el.php
index 14b95e69ca6..27a80fcc98c 100644
--- a/files/l10n/el.php
+++ b/files/l10n/el.php
@@ -1,8 +1,17 @@
<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Δεν υπάρχει λάθος, το αρχείο που μεταφορτώθηκε επιτυχώς",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Το αρχείο που μεταφορτώθηκε υπερβαίνει την οδηγία μέγιστου επιτρεπτού μεγέθους \"upload_max_filesize\" του php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Το αρχείο υπερβαίνει την οδηγία μέγιστου επιτρεπτού μεγέθους \"MAX_FILE_SIZE\" που έχει οριστεί στην html φόρμα",
+"The uploaded file was only partially uploaded" => "Το αρχείο μεταφορώθηκε μόνο εν μέρει",
+"No file was uploaded" => "Το αρχείο δεν μεταφορτώθηκε",
+"Missing a temporary folder" => "Λείπει ένας προσωρινός φάκελος",
"Files" => "Αρχεία",
"Maximum upload size" => "Μέγιστο μέγεθος μεταφόρτωσης",
+"New" => "Νέο",
+"Text file" => "Αρχείο κειμένου",
+"Folder" => "Φάκελος",
+"From the web" => "Από τον ιστό",
"Upload" => "Μεταφόρτωση",
-"New Folder" => "Νέος φάκελος",
"Nothing in here. Upload something!" => "Δεν υπάρχει τίποτα εδώ. Ανέβασε κάτι!",
"Name" => "Όνομα",
"Download" => "Λήψη",
diff --git a/files/l10n/eo.php b/files/l10n/eo.php
new file mode 100644
index 00000000000..42dc4f1280e
--- /dev/null
+++ b/files/l10n/eo.php
@@ -0,0 +1,19 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Ne estas eraro, la dosiero alŝutiĝis sukcese",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "La dosiero alŝutita superas la regulon upload_max_filesize el php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "La dosiero alŝutita superas laregulon MAX_FILE_SIZE, kiu estas difinita en la HTML-formularo",
+"The uploaded file was only partially uploaded" => "La alŝutita dosiero nur parte alŝutiĝis",
+"No file was uploaded" => "Neniu dosiero estas alŝutita",
+"Missing a temporary folder" => "Mankas tempa dosierujo",
+"Files" => "Dosieroj",
+"Maximum upload size" => "Maksimuma alŝutogrando",
+"Upload" => "Alŝuti",
+"Nothing in here. Upload something!" => "Nenio estas ĉi tie. Alŝutu ion!",
+"Name" => "Nomo",
+"Download" => "Elŝuti",
+"Size" => "Grando",
+"Modified" => "Modifita",
+"Delete" => "Forigi",
+"Upload too large" => "Elŝuto tro larĝa",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "La dosieroj, kiujn vi provas alŝuti, transpasas la maksimuman grandon por dosieralŝutoj en ĉi tiu servilo."
+);
diff --git a/files/l10n/es.php b/files/l10n/es.php
index 28dc17af761..11665ac3c32 100644
--- a/files/l10n/es.php
+++ b/files/l10n/es.php
@@ -1,8 +1,17 @@
<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "No hubo ningún error, el archivo se subió con éxito",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "El archivo que intentas subir sobrepasa el tamaño definido por la variable upload_max_filesize en php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "El archivo que intentas subir sobrepasa el tamaño definido por la variable MAX_FILE_SIZE especificada en el formulario HTML",
+"The uploaded file was only partially uploaded" => "El archivo que intentas subir solo se subió parcialmente",
+"No file was uploaded" => "No se subió ningún archivo",
+"Missing a temporary folder" => "Falta un directorio temporal",
"Files" => "Archivos",
"Maximum upload size" => "Tamaño máximo de subida",
+"New" => "Nuevo",
+"Text file" => "Archivo de texto",
+"Folder" => "Carpeta",
+"From the web" => "Desde la web",
"Upload" => "Subir",
-"New Folder" => "Crear Carpeta",
"Nothing in here. Upload something!" => "Aquí no hay nada. ¡Sube algo!",
"Name" => "Nombre",
"Download" => "Descargar",
diff --git a/files/l10n/et_EE.php b/files/l10n/et_EE.php
index 29c44dac106..c8604b14dd0 100644
--- a/files/l10n/et_EE.php
+++ b/files/l10n/et_EE.php
@@ -1,8 +1,13 @@
<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Ühtegi viga pole, fail on üles laetud",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Üles laetud faili suurus ületab php.ini määratud upload_max_filesize suuruse",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Üles laetud faili suurus ületab HTML vormis määratud upload_max_filesize suuruse",
+"The uploaded file was only partially uploaded" => "Fail laeti üles ainult osaliselt",
+"No file was uploaded" => "Ühtegi faili ei laetud üles",
+"Missing a temporary folder" => "Ajutiste failide kaust puudub",
"Files" => "Failid",
"Maximum upload size" => "Maksimaalne üleslaadimise suurus",
"Upload" => "Lae üles",
-"New Folder" => "Uus kaust",
"Nothing in here. Upload something!" => "Siin pole midagi. Lae midagi üles!",
"Name" => "Nimi",
"Download" => "Lae alla",
diff --git a/files/l10n/eu.php b/files/l10n/eu.php
new file mode 100644
index 00000000000..b9873e6c3fa
--- /dev/null
+++ b/files/l10n/eu.php
@@ -0,0 +1,19 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Ez da arazorik izan, fitxategia ongi igo da",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Igotako fitxategiaren tamaina php.ini-ko upload_max_filesize direktiban adierazitakoa baino handiagoa da",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Igotako fitxategiaren tamaina HTML inprimakiko MAX_FILESIZE direktiban adierazitakoa baino handiagoa da",
+"The uploaded file was only partially uploaded" => "Igotako fitxategiaren zati bat baino gehiago ez da igo",
+"No file was uploaded" => "Ez da fitxategirik igo",
+"Missing a temporary folder" => "Aldi baterako karpeta falta da",
+"Files" => "Fitxategiak",
+"Maximum upload size" => "Igo daitekeen gehienezko tamaina",
+"Upload" => "Igo",
+"Nothing in here. Upload something!" => "Ez dago ezer. Igo zerbait!",
+"Name" => "Izena",
+"Download" => "Deskargatu",
+"Size" => "Tamaina",
+"Modified" => "Aldatuta",
+"Delete" => "Ezabatu",
+"Upload too large" => "Igotakoa handiegia da",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Igotzen saiatzen ari zaren fitxategiak zerbitzari honek igotzeko onartzen duena baino handiagoak dira."
+);
diff --git a/files/l10n/fr.php b/files/l10n/fr.php
index fa58f073d66..cf90223a06a 100644
--- a/files/l10n/fr.php
+++ b/files/l10n/fr.php
@@ -1,8 +1,17 @@
<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Aucune erreur, le fichier a été téléversé avec succès",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Le fichier téléversé excède la valeur de upload_max_filesize spécifiée dans php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Le fichier téléversé excède la valeur de MAX_FILE_SIZE spécifiée dans le formulaire HTML",
+"The uploaded file was only partially uploaded" => "Le fichier n'a été que partiellement téléversé",
+"No file was uploaded" => "Aucun fichier n'a été téléversé",
+"Missing a temporary folder" => "Il manque un répertoire temporaire",
"Files" => "Fichiers",
"Maximum upload size" => "Taille max. d'envoi",
+"New" => "Nouveau",
+"Text file" => "Fichier texte",
+"Folder" => "Dossier",
+"From the web" => "Depuis le web",
"Upload" => "Envoyer",
-"New Folder" => "Nouveau dossier",
"Nothing in here. Upload something!" => "Il n'y a rien ici ! Envoyez donc quelque chose :)",
"Name" => "Nom",
"Download" => "Téléchargement",
diff --git a/files/l10n/he.php b/files/l10n/he.php
new file mode 100644
index 00000000000..79ae1edb7a5
--- /dev/null
+++ b/files/l10n/he.php
@@ -0,0 +1,19 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "לא אירעה תקלה, הקבצים הועלו בהצלחה",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "הקובץ שהועלה חרג מההנחיה upload_max_filesize בקובץ php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "הקובץ שהועלה חרג מההנחיה MAX_FILE_SIZE שצוינה בטופס ה־HTML",
+"The uploaded file was only partially uploaded" => "הקובץ שהועלה הועלה בצורה חלקית",
+"No file was uploaded" => "לא הועלו קבצים",
+"Missing a temporary folder" => "תיקייה זמנית חסרה",
+"Files" => "קבצים",
+"Maximum upload size" => "גודל העלאה מקסימלי",
+"Upload" => "העלאה",
+"Nothing in here. Upload something!" => "אין כאן שום דבר. אולי ברצונך להעלות משהו?",
+"Name" => "שם",
+"Download" => "הורדה",
+"Size" => "גודל",
+"Modified" => "זמן שינוי",
+"Delete" => "מחיקה",
+"Upload too large" => "העלאה גדולה מידי",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "הקבצים שניסית להעלות חרגו מהגודל המקסימלי להעלאת קבצים על שרת זה."
+);
diff --git a/files/l10n/hr.php b/files/l10n/hr.php
new file mode 100644
index 00000000000..670e87f6557
--- /dev/null
+++ b/files/l10n/hr.php
@@ -0,0 +1,19 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Datoteka je poslana uspješno i bez pogrešaka",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Poslana datoteka izlazi iz okvira upload_max_size direktive postavljene u php.ini konfiguracijskoj datoteci",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Poslana datoteka izlazi iz okvira MAX_FILE_SIZE direktive postavljene u HTML obrascu",
+"The uploaded file was only partially uploaded" => "Datoteka je poslana samo djelomično",
+"No file was uploaded" => "Ni jedna datoteka nije poslana",
+"Missing a temporary folder" => "Nedostaje privremena mapa",
+"Files" => "Datoteke",
+"Maximum upload size" => "Maksimalna veličina prijenosa",
+"Upload" => "Pošalji",
+"Nothing in here. Upload something!" => "Nema ničega u ovoj mapi. Pošalji nešto!",
+"Name" => "Naziv",
+"Download" => "Preuzmi",
+"Size" => "Veličina",
+"Modified" => "Zadnja promjena",
+"Delete" => "Briši",
+"Upload too large" => "Prijenos je preobiman",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Datoteke koje pokušavate prenijeti prelaze maksimalnu veličinu za prijenos datoteka na ovom poslužitelju."
+);
diff --git a/files/l10n/hu_HU.php b/files/l10n/hu_HU.php
new file mode 100644
index 00000000000..a176ffce647
--- /dev/null
+++ b/files/l10n/hu_HU.php
@@ -0,0 +1,19 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Nincs hiba, a fájl sikeresen feltöltve.",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "A feltöltött file meghaladja az upload_max_filesize direktívát a php.ini-ben.",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "A feltöltött fájl meghaladja a MAX_FILE_SIZE direktívát ami meghatározott a HTML form-ban.",
+"The uploaded file was only partially uploaded" => "Az eredeti fájl csak részlegesen van feltöltve.",
+"No file was uploaded" => "Nem lett fájl feltöltve.",
+"Missing a temporary folder" => "Hiányzik az ideiglenes könyvtár",
+"Files" => "Fájlok",
+"Maximum upload size" => "Maximális feltölthető fájlméret",
+"Upload" => "Feltöltés",
+"Nothing in here. Upload something!" => "Töltsön fel egy fájlt.",
+"Name" => "Név",
+"Download" => "Letöltés",
+"Size" => "Méret",
+"Modified" => "Módosítva",
+"Delete" => "Törlés",
+"Upload too large" => "Feltöltés túl nagy",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "A fájlokat amit próbálsz feltölteni meghaladta a legnagyobb fájlméretet ezen a szerveren."
+);
diff --git a/files/l10n/ia.php b/files/l10n/ia.php
new file mode 100644
index 00000000000..852fb8794ac
--- /dev/null
+++ b/files/l10n/ia.php
@@ -0,0 +1,14 @@
+<?php $TRANSLATIONS = array(
+"The uploaded file was only partially uploaded" => "Le file incargate solmente esseva incargate partialmente",
+"No file was uploaded" => "Nulle file esseva incargate",
+"Files" => "Files",
+"Maximum upload size" => "Dimension maxime de incargamento",
+"Upload" => "Incargar",
+"Nothing in here. Upload something!" => "Nihil hic. Incarga alcun cosa!",
+"Name" => "Nomine",
+"Download" => "Discargar",
+"Size" => "Dimension",
+"Modified" => "Modificate",
+"Delete" => "Deler",
+"Upload too large" => "Incargamento troppo longe"
+);
diff --git a/files/l10n/id.php b/files/l10n/id.php
index feb5c6d8631..902eeeb4ec2 100644
--- a/files/l10n/id.php
+++ b/files/l10n/id.php
@@ -2,7 +2,6 @@
"Files" => "Berkas",
"Maximum upload size" => "Ukuran unggah maksimum",
"Upload" => "Unggah",
-"New Folder" => "Folder Baru",
"Nothing in here. Upload something!" => "Tidak ada apa-apa di sini. Unggah sesuatu!",
"Name" => "Nama",
"Download" => "Unduh",
diff --git a/files/l10n/it.php b/files/l10n/it.php
index 4c958924ceb..919ff0b5aae 100644
--- a/files/l10n/it.php
+++ b/files/l10n/it.php
@@ -1,8 +1,17 @@
<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Non ci sono errori, file caricato con successo",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Il file caricato supera il valore upload_max_filesize in php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Il file caricato supera il valore MAX_FILE_SIZE definito nel form HTML",
+"The uploaded file was only partially uploaded" => "Il file è stato parzialmente caricato",
+"No file was uploaded" => "Nessun file è stato caricato",
+"Missing a temporary folder" => "Cartella temporanea mancante",
"Files" => "File",
"Maximum upload size" => "Dimensione massima upload",
+"New" => "Nuovo",
+"Text file" => "File di testo",
+"Folder" => "Cartella",
+"From the web" => "Dal web",
"Upload" => "Carica",
-"New Folder" => "Nuova Cartella",
"Nothing in here. Upload something!" => "Non c'è niente qui. Carica qualcosa!",
"Name" => "Nome",
"Download" => "Scarica",
diff --git a/files/l10n/ja_JP.php b/files/l10n/ja_JP.php
new file mode 100644
index 00000000000..d41e7e119a2
--- /dev/null
+++ b/files/l10n/ja_JP.php
@@ -0,0 +1,19 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "エラーはありません。ファイルのアップロードは成功しました。",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "アップロードされたファイルはphp.iniのupload_max_filesizeに設定されたサイズを超えています",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "アップロードされたファイルはHTMLのフォームに設定されたMAX_FILE_SIZEに設定されたサイズを超えています",
+"The uploaded file was only partially uploaded" => "ファイルは一部分しかアップロードされませんでした",
+"No file was uploaded" => "ファイルはアップロードされませんでした",
+"Missing a temporary folder" => "テンポラリフォルダが見つかりません",
+"Files" => "ファイル",
+"Maximum upload size" => "最大アップロードサイズ",
+"Upload" => "アップロード",
+"Nothing in here. Upload something!" => "ここには何もありません。何かアップロードしてください。",
+"Name" => "名前",
+"Download" => "ダウンロード",
+"Size" => "サイズ",
+"Modified" => "更新日時",
+"Delete" => "削除",
+"Upload too large" => "ファイルサイズが大きすぎます",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "アップロードしようとしているファイルはサーバで規定された最大サイズを超えています"
+);
diff --git a/files/l10n/lb.php b/files/l10n/lb.php
index 3f8a4af0bd9..43956fcd63e 100644
--- a/files/l10n/lb.php
+++ b/files/l10n/lb.php
@@ -1,8 +1,13 @@
<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Keen Feeler, Datei ass komplett ropgelueden ginn",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Déi ropgelueden Datei ass méi grouss wei d'upload_max_filesize Eegenschaft an der php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Déi ropgelueden Datei ass méi grouss wei d'MAX_FILE_SIZE Eegenschaft déi an der HTML form uginn ass",
+"The uploaded file was only partially uploaded" => "Déi ropgelueden Datei ass nëmmen hallef ropgelueden ginn",
+"No file was uploaded" => "Et ass keng Datei ropgelueden ginn",
+"Missing a temporary folder" => "Et feelt en temporären Dossier",
"Files" => "Dateien",
"Maximum upload size" => "Maximum Upload Gréisst ",
"Upload" => "Eroplueden",
-"New Folder" => "Neien Dossier",
"Nothing in here. Upload something!" => "Hei ass näischt. Lued eppes rop!",
"Name" => "Numm",
"Download" => "Eroflueden",
diff --git a/files/l10n/lt_LT.php b/files/l10n/lt_LT.php
new file mode 100644
index 00000000000..1bec35e0f8c
--- /dev/null
+++ b/files/l10n/lt_LT.php
@@ -0,0 +1,19 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Klaidų nėra, failas įkeltas sėkmingai",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Įkeliamo failo dydis viršija upload_max_filesize parametrą php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Įkeliamo failo dydis viršija MAX_FILE_SIZE parametrą, kuris yra nustatytas HTML formoje",
+"The uploaded file was only partially uploaded" => "Failas buvo įkeltas tik dalinai",
+"No file was uploaded" => "Nebuvo įkeltas nė vienas failas",
+"Missing a temporary folder" => "Nėra laikinojo katalogo",
+"Files" => "Failai",
+"Maximum upload size" => "Maksimalus failo dydis",
+"Upload" => "Įkelti",
+"Nothing in here. Upload something!" => "Čia tuščia. Įkelkite ką nors!",
+"Name" => "Pavadinimas",
+"Download" => "Atsisiųsti",
+"Size" => "Dydis",
+"Modified" => "Pakeista",
+"Delete" => "Ištrinti",
+"Upload too large" => "Įkėlimui failas per didelis",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Bandomų įkelti failų dydis viršija maksimalų leidžiamą šiame serveryje"
+);
diff --git a/files/l10n/ms_MY.php b/files/l10n/ms_MY.php
index 3b654cccdaf..038ffd521a0 100644
--- a/files/l10n/ms_MY.php
+++ b/files/l10n/ms_MY.php
@@ -2,7 +2,6 @@
"Files" => "fail",
"Maximum upload size" => "Saiz maksimum muat naik",
"Upload" => "Muat naik",
-"New Folder" => "Folder baru",
"Nothing in here. Upload something!" => "Tiada apa-apa di sini. Muat naik sesuatu!",
"Name" => "Nama ",
"Download" => "Muat turun",
diff --git a/files/l10n/nb_NO.php b/files/l10n/nb_NO.php
index 49c6c158f47..c4ef4989a58 100644
--- a/files/l10n/nb_NO.php
+++ b/files/l10n/nb_NO.php
@@ -2,7 +2,6 @@
"Files" => "Filer",
"Maximum upload size" => "Maksimum opplastingsstørrelse",
"Upload" => "Last opp",
-"New Folder" => "Ny mappe",
"Nothing in here. Upload something!" => "Ingenting her. Last opp noe!",
"Name" => "Navn",
"Download" => "Last ned",
diff --git a/files/l10n/nl.php b/files/l10n/nl.php
index c474d9a4ca2..36b4695a476 100644
--- a/files/l10n/nl.php
+++ b/files/l10n/nl.php
@@ -1,8 +1,17 @@
<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Geen fout opgetreden, bestand successvol geupload.",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Het geüploade bestand is groter dan de upload_max_filesize instelling in php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Het geüploade bestand is groter dan de MAX_FILE_SIZE richtlijn die is opgegeven in de HTML-formulier",
+"The uploaded file was only partially uploaded" => "Het bestand is slechts gedeeltelijk geupload",
+"No file was uploaded" => "Geen bestand geüpload",
+"Missing a temporary folder" => "Een tijdelijke map mist",
"Files" => "Bestanden",
"Maximum upload size" => "Maximale bestandsgrootte voor uploads",
+"New" => "Nieuw",
+"Text file" => "Tekstbestand",
+"Folder" => "Map",
+"From the web" => "Van het internet",
"Upload" => "Upload",
-"New Folder" => "Nieuwe map",
"Nothing in here. Upload something!" => "Er bevindt zich hier niets. Upload een bestand!",
"Name" => "Naam",
"Download" => "Download",
diff --git a/files/l10n/nn_NO.php b/files/l10n/nn_NO.php
new file mode 100644
index 00000000000..34f2f6be960
--- /dev/null
+++ b/files/l10n/nn_NO.php
@@ -0,0 +1,19 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Ingen feil, fila vart lasta opp",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Den opplasta fila er større enn variabelen upload_max_filesize i php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Den opplasta fila er større enn variabelen MAX_FILE_SIZE i HTML-skjemaet",
+"The uploaded file was only partially uploaded" => "Fila vart berre delvis lasta opp",
+"No file was uploaded" => "Ingen filer vart lasta opp",
+"Missing a temporary folder" => "Manglar ei mellombels mappe",
+"Files" => "Filer",
+"Maximum upload size" => "Maksimal opplastingsstorleik",
+"Upload" => "Last opp",
+"Nothing in here. Upload something!" => "Ingenting her. Last noko opp!",
+"Name" => "Namn",
+"Download" => "Last ned",
+"Size" => "Storleik",
+"Modified" => "Endra",
+"Delete" => "Slett",
+"Upload too large" => "For stor opplasting",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Filene du prøver å laste opp er større enn maksgrensa til denne tenaren."
+);
diff --git a/files/l10n/pl.php b/files/l10n/pl.php
index 6cd60267fc8..d110f52ab1d 100644
--- a/files/l10n/pl.php
+++ b/files/l10n/pl.php
@@ -1,8 +1,17 @@
<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Brak błędu, plik przesłany z sukcesem",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Przesłany plik przekracza ustawienie upload_max_filesize w pliku php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Przesłany plik przekracza MAX_FILE_SIZE ustawienia, które zostało określono w formularzu HTML",
+"The uploaded file was only partially uploaded" => "Plik został przesłany tylko częściowo.",
+"No file was uploaded" => "Żaden plik nie został przesłany",
+"Missing a temporary folder" => "Brakuje folderu tymczasowego",
"Files" => "Pliki",
"Maximum upload size" => "Maksymalna wielkość przesyłanego pliku",
+"New" => "Nowy",
+"Text file" => "Plik tekstowy",
+"Folder" => "Katalog",
+"From the web" => "Z Internetu",
"Upload" => "Prześlij",
-"New Folder" => "Nowy katalog",
"Nothing in here. Upload something!" => "Nic tu nie ma. Prześlij jakieś pliki!",
"Name" => "Nazwa",
"Download" => "Ściąganie",
diff --git a/files/l10n/pt_BR.php b/files/l10n/pt_BR.php
index efaefe51655..57b1af2ae6d 100644
--- a/files/l10n/pt_BR.php
+++ b/files/l10n/pt_BR.php
@@ -1,8 +1,13 @@
<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Não houve nenhum erro, o arquivo foi transferido com sucesso",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "O tamanho do arquivo excede o limed especifiicado em upload_max_filesize no php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "O arquivo carregado excede o MAX_FILE_SIZE que foi especificado no formulário HTML",
+"The uploaded file was only partially uploaded" => "O arquivo foi transferido parcialmente",
+"No file was uploaded" => "Nenhum arquivo foi transferido",
+"Missing a temporary folder" => "Pasta temporária não encontrada",
"Files" => "Arquivos",
"Maximum upload size" => "Tamanho máximo para carregar",
"Upload" => "Carregar",
-"New Folder" => "Nova Pasta",
"Nothing in here. Upload something!" => "Nada aqui.Carregar alguma coisa!",
"Name" => "Nome",
"Download" => "Baixar",
diff --git a/files/l10n/ro.php b/files/l10n/ro.php
index a54b011d109..9d8d6e2d5df 100644
--- a/files/l10n/ro.php
+++ b/files/l10n/ro.php
@@ -1,8 +1,17 @@
<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Nu am întâmpinat nici eroare, fișierul a fost încărcat cu success",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Fișierul are o dimensiune mai mare decât cea specificată în variabila upload_max_filesize din php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Fișierul are o dimensiune mai mare decât variabile MAX_FILE_SIZE specificată în formularul HTML",
+"The uploaded file was only partially uploaded" => "Fișierul a fost încărcat doar parțial",
+"No file was uploaded" => "Nu a fost încărcat nici un fișier",
+"Missing a temporary folder" => "Lipsă folder temporar",
"Files" => "Fișiere",
"Maximum upload size" => "Dimensiunea maximă",
+"New" => "Nou",
+"Text file" => "Fișier text",
+"Folder" => "Dosar",
+"From the web" => "De pe internet",
"Upload" => "Încarcă",
-"New Folder" => "Director nou",
"Nothing in here. Upload something!" => "Nici un fișier, încarcă ceva!",
"Name" => "Nume",
"Download" => "Descarcă",
diff --git a/files/l10n/ru.php b/files/l10n/ru.php
index ff1c05ce8ee..a77e6e370b4 100644
--- a/files/l10n/ru.php
+++ b/files/l10n/ru.php
@@ -1,8 +1,13 @@
<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Файл успешно загружен",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Файл превышает допустимые размеры (описаны как upload_max_filesize в php.ini)",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Файл превышает размер MAX_FILE_SIZE, указаный в HTML-форме",
+"The uploaded file was only partially uploaded" => "Файл был частично загружен",
+"No file was uploaded" => "Файл не был загружен",
+"Missing a temporary folder" => "Невозможно найти временную директорию",
"Files" => "Файлы",
"Maximum upload size" => "Максимальный размер файла",
"Upload" => "Закачать",
-"New Folder" => "Новая папка",
"Nothing in here. Upload something!" => "Здесь ничего нет. Закачайте что-нибудь!",
"Name" => "Название",
"Download" => "Скачать",
diff --git a/files/l10n/sk_SK.php b/files/l10n/sk_SK.php
new file mode 100644
index 00000000000..840d924fbee
--- /dev/null
+++ b/files/l10n/sk_SK.php
@@ -0,0 +1,19 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Nenastala žiadna chyba, súbor bol úspešne nahraný",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Nahraný súbor presiahol direktívu upload_max_filesize v php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Nahrávaný súbor presiahol MAX_FILE_SIZE direktívu, ktorá bola špecifikovaná v HTML formulári",
+"The uploaded file was only partially uploaded" => "Nahrávaný súbor bol iba čiastočne nahraný",
+"No file was uploaded" => "Žiaden súbor nebol nahraný",
+"Missing a temporary folder" => "Chýbajúci dočasný priečinok",
+"Files" => "Súbory",
+"Maximum upload size" => "Maximálna veľkosť nahratia",
+"Upload" => "Nahrať",
+"Nothing in here. Upload something!" => "Nič tu nie je. Nahrakte niečo!",
+"Name" => "Meno",
+"Download" => "Stiahnuť",
+"Size" => "Veľkosť",
+"Modified" => "Upravené",
+"Delete" => "Odstrániť",
+"Upload too large" => "Nahrávanie príliš veľké",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Súbory ktoré sa snažíte nahrať presahujú maximálnu veľkosť pre nahratie súborov na tento server."
+);
diff --git a/files/l10n/sl.php b/files/l10n/sl.php
new file mode 100644
index 00000000000..5a09e0fe20b
--- /dev/null
+++ b/files/l10n/sl.php
@@ -0,0 +1,19 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "datoteka je bila naložena uspešno.",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Velikost željene naložene datoteke je prevelika. (upload_max_filesize - php.ini) Kontaktirajte Administratorja.",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Velikost željene naložene datoteke je prevelika. (MAX_FILE_SIZE - html formi) Kontaktirajte Administratorja.",
+"The uploaded file was only partially uploaded" => "Datoteka je bila le delno naložena.",
+"No file was uploaded" => "Naloženih ni bilo nič Datotek.",
+"Missing a temporary folder" => "Ni potrebne začasne datoteke. (temporary folder)",
+"Files" => "Datoteke",
+"Maximum upload size" => "Maksimalna velikost",
+"Upload" => "Naloži gor",
+"Nothing in here. Upload something!" => "Naloženih še ni bilo nič datotek.",
+"Name" => "Ime",
+"Download" => "Naloži dol",
+"Size" => "Velikost",
+"Modified" => "Urejeno",
+"Delete" => "Izbriši",
+"Upload too large" => "Nalaganje ni mogoče, ker je preveliko.",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Datoteke ki jih želiš naložiti presegajo maksimalno velikost na tem strežniku. Kontaktirajte Administratorja."
+);
diff --git a/files/l10n/sr.php b/files/l10n/sr.php
index 445387ffa2f..9c5dbae2a23 100644
--- a/files/l10n/sr.php
+++ b/files/l10n/sr.php
@@ -1,8 +1,13 @@
<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Нема грешке, фајл је успешно послат",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Послати фајл превазилази директиву upload_max_filesize из ",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Послати фајл превазилази директиву MAX_FILE_SIZE која је наведена у ХТМЛ форми",
+"The uploaded file was only partially uploaded" => "Послати фајл је само делимично отпремљен!",
+"No file was uploaded" => "Ниједан фајл није послат",
+"Missing a temporary folder" => "Недостаје привремена фасцикла",
"Files" => "Фајлови",
"Maximum upload size" => "Максимална величина пошиљке",
"Upload" => "Пошаљи",
-"New Folder" => "Нова фасцикла",
"Nothing in here. Upload something!" => "Овде нема ничег. Пошаљите нешто!",
"Name" => "Име",
"Download" => "Преузми",
diff --git a/files/l10n/sr@latin.php b/files/l10n/sr@latin.php
index 3cc0ee0f150..1b5addbc571 100644
--- a/files/l10n/sr@latin.php
+++ b/files/l10n/sr@latin.php
@@ -1,8 +1,13 @@
<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Nema greške, fajl je uspešno poslat",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Poslati fajl prevazilazi direktivu upload_max_filesize iz ",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Poslati fajl prevazilazi direktivu MAX_FILE_SIZE koja je navedena u HTML formi",
+"The uploaded file was only partially uploaded" => "Poslati fajl je samo delimično otpremljen!",
+"No file was uploaded" => "Nijedan fajl nije poslat",
+"Missing a temporary folder" => "Nedostaje privremena fascikla",
"Files" => "Fajlovi",
"Maximum upload size" => "Maksimalna veličina pošiljke",
"Upload" => "Pošalji",
-"New Folder" => "Nova fascikla",
"Nothing in here. Upload something!" => "Ovde nema ničeg. Pošaljite nešto!",
"Name" => "Ime",
"Download" => "Preuzmi",
diff --git a/files/l10n/sv.php b/files/l10n/sv.php
index dd1ac479366..dfd32f3f5c2 100644
--- a/files/l10n/sv.php
+++ b/files/l10n/sv.php
@@ -1,14 +1,19 @@
<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Inga fel uppstod. Filen laddades upp utan problem",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Den uppladdade filen överskrider upload_max_filesize direktivet i php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Den uppladdade filen överstiger MAX_FILE_SIZE direktivet som anges i HTML-formulär",
+"The uploaded file was only partially uploaded" => "Den uppladdade filen var endast delvist uppladdad",
+"No file was uploaded" => "Ingen fil blev uppladdad",
+"Missing a temporary folder" => "Saknar en tillfällig mapp",
"Files" => "Filer",
"Maximum upload size" => "Maximal storlek att lägga upp",
-"Upload" => "Lägg upp",
-"New Folder" => "Ny katalog",
-"Nothing in here. Upload something!" => "Ingenting här. Lägg upp något!",
+"Upload" => "Ladda upp",
+"Nothing in here. Upload something!" => "Ingenting här. Ladda upp något!",
"Name" => "Namn",
"Download" => "Ladda ned",
"Size" => "Storlek",
"Modified" => "Ändrad",
"Delete" => "Ta bort",
-"Upload too large" => "För stor överföring",
-"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Filerna du försöker lägga upp överstiger den maximala storleken för filöverföringar på servern."
+"Upload too large" => "För stor uppladdning",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Filerna du försöker ladda upp överstiger den maximala storleken för filöverföringar på servern."
);
diff --git a/files/l10n/tr.php b/files/l10n/tr.php
new file mode 100644
index 00000000000..5fc46056175
--- /dev/null
+++ b/files/l10n/tr.php
@@ -0,0 +1,19 @@
+<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "Bir hata yok, dosya başarıyla yüklendi",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Yüklenen dosya php.ini de belirtilen upload_max_filesize sınırını aşıyor",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Yüklenen dosya HTML formundaki MAX_FILE_SIZE sınırını aşıyor",
+"The uploaded file was only partially uploaded" => "Yüklenen dosyanın sadece bir kısmı yüklendi",
+"No file was uploaded" => "Hiç dosya yüklenmedi",
+"Missing a temporary folder" => "Geçici bir klasör eksik",
+"Files" => "Dosyalar",
+"Maximum upload size" => "Maksimum yükleme boyutu",
+"Upload" => "Yükle",
+"Nothing in here. Upload something!" => "Burada hiçbir şey yok. Birşeyler yükleyin!",
+"Name" => "Ad",
+"Download" => "İndir",
+"Size" => "Boyut",
+"Modified" => "Değiştirilme",
+"Delete" => "Sil",
+"Upload too large" => "Yüklemeniz çok büyük",
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Yüklemeye çalıştığınız dosyalar bu sunucudaki maksimum yükleme boyutunu aşıyor."
+);
diff --git a/files/l10n/zh_CN.php b/files/l10n/zh_CN.php
index abb2f9db232..a4d7283df87 100644
--- a/files/l10n/zh_CN.php
+++ b/files/l10n/zh_CN.php
@@ -1,8 +1,13 @@
<?php $TRANSLATIONS = array(
+"There is no error, the file uploaded with success" => "没有发生错误,文件上传成功。",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "上传的文件大小超过了php.ini 中指定的upload_max_filesize",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "上传的文件超过了在HTML 表单中指定的MAX_FILE_SIZE",
+"The uploaded file was only partially uploaded" => "只上传了文件的一部分",
+"No file was uploaded" => "文件没有上传",
+"Missing a temporary folder" => "缺少临时目录",
"Files" => "文件",
"Maximum upload size" => "最大上传大小",
"Upload" => "上传",
-"New Folder" => "新建文件夹",
"Nothing in here. Upload something!" => "这里还什么都没有。上传些东西吧!",
"Name" => "名称",
"Download" => "下载",
diff --git a/files/templates/index.php b/files/templates/index.php
index 595e8803353..92c579c2442 100644
--- a/files/templates/index.php
+++ b/files/templates/index.php
@@ -25,6 +25,8 @@
</div>
</div>
<div id="file_action_panel"></div>
+ <?php else:?>
+ <input type="hidden" name="dir" value="<?php echo $_['dir'] ?>" id="dir">
<?php endif;?>
</div>
<div id='notification'></div>
diff --git a/files/templates/part.list.php b/files/templates/part.list.php
index fdcd7d6f8a7..92b6f37d8e7 100644
--- a/files/templates/part.list.php
+++ b/files/templates/part.list.php
@@ -1,4 +1,5 @@
<?php foreach($_['files'] as $file):
+ $write = ($file['writeable']) ? 'true' : 'false';
$simple_file_size = simple_file_size($file['size']);
$simple_size_color = intval(200-$file['size']/(1024*1024)*2); // the bigger the file, the darker the shade of grey; megabytes*2
if($simple_size_color<0) $simple_size_color = 0;
@@ -9,7 +10,7 @@
$name = str_replace('%2F','/', $name);
$directory = str_replace('+','%20',urlencode($file['directory']));
$directory = str_replace('%2F','/', $directory); ?>
- <tr data-file="<?php echo $name;?>" data-type="<?php echo ($file['type'] == 'dir')?'dir':'file'?>" data-mime="<?php echo $file['mimetype']?>" data-size='<?php echo $file['size'];?>'>
+ <tr data-file="<?php echo $name;?>" data-type="<?php echo ($file['type'] == 'dir')?'dir':'file'?>" data-mime="<?php echo $file['mimetype']?>" data-size='<?php echo $file['size'];?>' data-write='<?php echo $write;?>'>
<td class="filename svg" style="background-image:url(<?php if($file['type'] == 'dir') echo mimetype_icon('dir'); else echo mimetype_icon($file['mimetype']); ?>)">
<?php if(!isset($_['readonly']) || !$_['readonly']) { ?><input type="checkbox" /><?php } ?>
<a class="name" href="<?php if($file['type'] == 'dir') echo $_['baseURL'].$directory.'/'.$name; else echo $_['downloadURL'].$directory.'/'.$name; ?>" title="">
diff --git a/l10n/.tx/config b/l10n/.tx/config
new file mode 100644
index 00000000000..3a0c6c28dc6
--- /dev/null
+++ b/l10n/.tx/config
@@ -0,0 +1,38 @@
+[main]
+host = https://www.transifex.net
+
+[owncloud.core]
+file_filter = <lang>/core.po
+source_file = templates/core.pot
+source_lang = en
+
+[owncloud.calendar]
+file_filter = <lang>/calendar.po
+source_file = templates/calendar.pot
+source_lang = en
+
+[owncloud.contacts]
+file_filter = <lang>/contacts.po
+source_file = templates/contacts.pot
+source_lang = en
+
+[owncloud.files]
+file_filter = <lang>/files.po
+source_file = templates/files.pot
+source_lang = en
+
+[owncloud.media]
+file_filter = <lang>/media.po
+source_file = templates/media.pot
+source_lang = en
+
+[owncloud.settings]
+file_filter = <lang>/settings.po
+source_file = templates/settings.pot
+source_lang = en
+
+[owncloud.gallery]
+file_filter = <lang>/gallery.po
+source_file = templates/gallery.pot
+source_lang = en
+
diff --git a/l10n/ar/calendar.po b/l10n/ar/calendar.po
new file mode 100644
index 00000000000..ae7fed1101f
--- /dev/null
+++ b/l10n/ar/calendar.po
@@ -0,0 +1,637 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <tarek.taha@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Arabic (http://www.transifex.net/projects/p/owncloud/team/ar/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ar\n"
+"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5\n"
+
+#: ajax/guesstimezone.php:42
+msgid "New Timezone:"
+msgstr ""
+
+#: ajax/settimezone.php:22
+msgid "Timezone changed"
+msgstr "تم تغيير المنطقة الزمنية"
+
+#: ajax/settimezone.php:24
+msgid "Invalid request"
+msgstr "طلب غير مفهوم"
+
+#: appinfo/app.php:20 templates/calendar.php:13
+#: templates/part.eventform.php:20
+msgid "Calendar"
+msgstr "الجدول الزمني"
+
+#: lib/app.php:19
+msgid "Wrong calendar"
+msgstr "جدول زمني خاطئ"
+
+#: lib/app.php:60 lib/object.php:332
+msgid "Birthday"
+msgstr "عيد ميلاد"
+
+#: lib/app.php:61 lib/object.php:333
+msgid "Business"
+msgstr "عمل"
+
+#: lib/app.php:62 lib/object.php:334
+msgid "Call"
+msgstr "إتصال"
+
+#: lib/app.php:63 lib/object.php:335
+msgid "Clients"
+msgstr "الزبائن"
+
+#: lib/app.php:64 lib/object.php:336
+msgid "Deliverer"
+msgstr "المرسل"
+
+#: lib/app.php:65 lib/object.php:337
+msgid "Holidays"
+msgstr "عطلة"
+
+#: lib/app.php:66 lib/object.php:338
+msgid "Ideas"
+msgstr "أفكار"
+
+#: lib/app.php:67 lib/object.php:339
+msgid "Journey"
+msgstr "رحلة"
+
+#: lib/app.php:68 lib/object.php:340
+msgid "Jubilee"
+msgstr "يوبيل"
+
+#: lib/app.php:69 lib/object.php:341
+msgid "Meeting"
+msgstr "إجتماع"
+
+#: lib/app.php:70 lib/object.php:342
+msgid "Other"
+msgstr "شيء آخر"
+
+#: lib/app.php:71 lib/object.php:343
+msgid "Personal"
+msgstr "شخصي"
+
+#: lib/app.php:72 lib/object.php:344
+msgid "Projects"
+msgstr "مشاريع"
+
+#: lib/app.php:73 lib/object.php:345
+msgid "Questions"
+msgstr "اسئلة"
+
+#: lib/app.php:74 lib/object.php:346
+msgid "Work"
+msgstr "العمل"
+
+#: lib/object.php:353
+msgid "Does not repeat"
+msgstr "لا يعاد"
+
+#: lib/object.php:354
+msgid "Daily"
+msgstr "يومي"
+
+#: lib/object.php:355
+msgid "Weekly"
+msgstr "أسبوعي"
+
+#: lib/object.php:356
+msgid "Every Weekday"
+msgstr "كل نهاية الأسبوع"
+
+#: lib/object.php:357
+msgid "Bi-Weekly"
+msgstr "كل اسبوعين"
+
+#: lib/object.php:358
+msgid "Monthly"
+msgstr "شهري"
+
+#: lib/object.php:359
+msgid "Yearly"
+msgstr "سنوي"
+
+#: lib/object.php:366
+msgid "never"
+msgstr ""
+
+#: lib/object.php:367
+msgid "by occurrences"
+msgstr ""
+
+#: lib/object.php:368
+msgid "by date"
+msgstr ""
+
+#: lib/object.php:375
+msgid "by monthday"
+msgstr ""
+
+#: lib/object.php:376
+msgid "by weekday"
+msgstr ""
+
+#: lib/object.php:383 templates/lAfix.php:3
+msgid "Monday"
+msgstr ""
+
+#: lib/object.php:384 templates/lAfix.php:4
+msgid "Tuesday"
+msgstr ""
+
+#: lib/object.php:385 templates/lAfix.php:5
+msgid "Wednesday"
+msgstr ""
+
+#: lib/object.php:386 templates/lAfix.php:6
+msgid "Thursday"
+msgstr ""
+
+#: lib/object.php:387 templates/lAfix.php:7
+msgid "Friday"
+msgstr ""
+
+#: lib/object.php:388 templates/lAfix.php:8
+msgid "Saturday"
+msgstr ""
+
+#: lib/object.php:389 templates/lAfix.php:2
+msgid "Sunday"
+msgstr ""
+
+#: lib/object.php:396
+msgid "events week of month"
+msgstr ""
+
+#: lib/object.php:397
+msgid "first"
+msgstr ""
+
+#: lib/object.php:398
+msgid "second"
+msgstr ""
+
+#: lib/object.php:399
+msgid "third"
+msgstr ""
+
+#: lib/object.php:400
+msgid "fourth"
+msgstr ""
+
+#: lib/object.php:401
+msgid "fifth"
+msgstr ""
+
+#: lib/object.php:402
+msgid "last"
+msgstr ""
+
+#: lib/object.php:424 templates/lAfix.php:16
+msgid "January"
+msgstr ""
+
+#: lib/object.php:425 templates/lAfix.php:17
+msgid "February"
+msgstr ""
+
+#: lib/object.php:426 templates/lAfix.php:18
+msgid "March"
+msgstr ""
+
+#: lib/object.php:427 templates/lAfix.php:19
+msgid "April"
+msgstr ""
+
+#: lib/object.php:428 templates/lAfix.php:20
+msgid "May"
+msgstr ""
+
+#: lib/object.php:429 templates/lAfix.php:21
+msgid "June"
+msgstr ""
+
+#: lib/object.php:430 templates/lAfix.php:22
+msgid "July"
+msgstr ""
+
+#: lib/object.php:431 templates/lAfix.php:23
+msgid "August"
+msgstr ""
+
+#: lib/object.php:432 templates/lAfix.php:24
+msgid "September"
+msgstr ""
+
+#: lib/object.php:433 templates/lAfix.php:25
+msgid "October"
+msgstr ""
+
+#: lib/object.php:434 templates/lAfix.php:26
+msgid "November"
+msgstr ""
+
+#: lib/object.php:435 templates/lAfix.php:27
+msgid "December"
+msgstr ""
+
+#: lib/object.php:441
+msgid "by events date"
+msgstr ""
+
+#: lib/object.php:442
+msgid "by yearday(s)"
+msgstr ""
+
+#: lib/object.php:443
+msgid "by weeknumber(s)"
+msgstr ""
+
+#: lib/object.php:444
+msgid "by day and month"
+msgstr ""
+
+#: lib/object.php:467
+msgid "Not an array"
+msgstr "ليس صفيف"
+
+#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+msgid "Date"
+msgstr ""
+
+#: lib/search.php:40
+msgid "Cal."
+msgstr ""
+
+#: templates/calendar.php:10
+msgid "All day"
+msgstr "كل النهار"
+
+#: templates/calendar.php:11
+msgid "Missing fields"
+msgstr "خانات خالية من المعلومات"
+
+#: templates/calendar.php:12 templates/part.eventform.php:3
+msgid "Title"
+msgstr "عنوان"
+
+#: templates/calendar.php:14
+msgid "From Date"
+msgstr "من تاريخ"
+
+#: templates/calendar.php:15
+msgid "From Time"
+msgstr "إلى تاريخ"
+
+#: templates/calendar.php:16
+msgid "To Date"
+msgstr "إلى يوم"
+
+#: templates/calendar.php:17
+msgid "To Time"
+msgstr "إلى وقت"
+
+#: templates/calendar.php:18
+msgid "The event ends before it starts"
+msgstr "هذا الحدث ينتهي قبل أن يبدأ"
+
+#: templates/calendar.php:19
+msgid "There was a database fail"
+msgstr "خطأ في قاعدة البيانات"
+
+#: templates/calendar.php:52
+msgid "Week"
+msgstr "إسبوع"
+
+#: templates/calendar.php:53
+msgid "Month"
+msgstr "شهر"
+
+#: templates/calendar.php:54
+msgid "List"
+msgstr "قائمة"
+
+#: templates/calendar.php:59
+msgid "Today"
+msgstr "اليوم"
+
+#: templates/calendar.php:60
+msgid "Calendars"
+msgstr "الجداول الزمنية"
+
+#: templates/calendar.php:78
+msgid "There was a fail, while parsing the file."
+msgstr "لم يتم قراءة الملف بنجاح."
+
+#: templates/lAfix.php:9
+msgid "Sun."
+msgstr ""
+
+#: templates/lAfix.php:10
+msgid "Mon."
+msgstr ""
+
+#: templates/lAfix.php:11
+msgid "Tue."
+msgstr ""
+
+#: templates/lAfix.php:12
+msgid "Wed."
+msgstr ""
+
+#: templates/lAfix.php:13
+msgid "Thu."
+msgstr ""
+
+#: templates/lAfix.php:14
+msgid "Fri."
+msgstr ""
+
+#: templates/lAfix.php:15
+msgid "Sat."
+msgstr ""
+
+#: templates/lAfix.php:28
+msgid "Jan."
+msgstr ""
+
+#: templates/lAfix.php:29
+msgid "Feb."
+msgstr ""
+
+#: templates/lAfix.php:30
+msgid "Mar."
+msgstr ""
+
+#: templates/lAfix.php:31
+msgid "Apr."
+msgstr ""
+
+#: templates/lAfix.php:32
+msgid "May."
+msgstr ""
+
+#: templates/lAfix.php:33
+msgid "Jun."
+msgstr ""
+
+#: templates/lAfix.php:34
+msgid "Jul."
+msgstr ""
+
+#: templates/lAfix.php:35
+msgid "Aug."
+msgstr ""
+
+#: templates/lAfix.php:36
+msgid "Sep."
+msgstr ""
+
+#: templates/lAfix.php:37
+msgid "Oct."
+msgstr ""
+
+#: templates/lAfix.php:38
+msgid "Nov."
+msgstr ""
+
+#: templates/lAfix.php:39
+msgid "Dec."
+msgstr ""
+
+#: templates/part.choosecalendar.php:1
+msgid "Choose active calendars"
+msgstr "إختر الجدول الزمني الرئيسي"
+
+#: templates/part.choosecalendar.php:15
+msgid "New Calendar"
+msgstr "جدول زمني جديد"
+
+#: templates/part.choosecalendar.php:20
+#: templates/part.choosecalendar.rowfields.php:4
+msgid "CalDav Link"
+msgstr "وصلة CalDav"
+
+#: templates/part.choosecalendar.rowfields.php:4
+msgid "Download"
+msgstr "تحميل"
+
+#: templates/part.choosecalendar.rowfields.php:4
+msgid "Edit"
+msgstr "تعديل"
+
+#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.editevent.php:9
+msgid "Delete"
+msgstr "حذف"
+
+#: templates/part.editcalendar.php:9
+msgid "New calendar"
+msgstr "جدول زمني جديد"
+
+#: templates/part.editcalendar.php:9
+msgid "Edit calendar"
+msgstr "عادل الجدول الزمني"
+
+#: templates/part.editcalendar.php:12
+msgid "Displayname"
+msgstr "الاسم المرئي"
+
+#: templates/part.editcalendar.php:23
+msgid "Active"
+msgstr "حالي"
+
+#: templates/part.editcalendar.php:29
+msgid "Calendar color"
+msgstr "لون الجدول الزمني"
+
+#: templates/part.editcalendar.php:42
+msgid "Save"
+msgstr "إحفظ"
+
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
+#: templates/part.newevent.php:6
+msgid "Submit"
+msgstr "أرسل"
+
+#: templates/part.editcalendar.php:43
+msgid "Cancel"
+msgstr "إلغاء"
+
+#: templates/part.editevent.php:1
+msgid "Edit an event"
+msgstr "عادل حدث"
+
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr "تصدير المعلومات"
+
+#: templates/part.eventform.php:5
+msgid "Title of the Event"
+msgstr "عنوان الحدث"
+
+#: templates/part.eventform.php:11
+msgid "Category"
+msgstr "فئة"
+
+#: templates/part.eventform.php:13
+msgid "Select category"
+msgstr "اختر الفئة"
+
+#: templates/part.eventform.php:37
+msgid "All Day Event"
+msgstr "حدث في يوم كامل"
+
+#: templates/part.eventform.php:41
+msgid "From"
+msgstr "من"
+
+#: templates/part.eventform.php:49
+msgid "To"
+msgstr "إلى"
+
+#: templates/part.eventform.php:57
+msgid "Advanced options"
+msgstr "خيارات متقدمة"
+
+#: templates/part.eventform.php:61
+msgid "Repeat"
+msgstr "إعادة"
+
+#: templates/part.eventform.php:68
+msgid "Advanced"
+msgstr ""
+
+#: templates/part.eventform.php:112
+msgid "Select weekdays"
+msgstr ""
+
+#: templates/part.eventform.php:125 templates/part.eventform.php:138
+msgid "Select days"
+msgstr ""
+
+#: templates/part.eventform.php:130
+msgid "and the events day of year."
+msgstr ""
+
+#: templates/part.eventform.php:143
+msgid "and the events day of month."
+msgstr ""
+
+#: templates/part.eventform.php:151
+msgid "Select months"
+msgstr ""
+
+#: templates/part.eventform.php:164
+msgid "Select weeks"
+msgstr ""
+
+#: templates/part.eventform.php:169
+msgid "and the events week of year."
+msgstr ""
+
+#: templates/part.eventform.php:175
+msgid "Interval"
+msgstr ""
+
+#: templates/part.eventform.php:181
+msgid "End"
+msgstr ""
+
+#: templates/part.eventform.php:193
+msgid "occurrences"
+msgstr ""
+
+#: templates/part.eventform.php:208
+msgid "Location"
+msgstr "مكان"
+
+#: templates/part.eventform.php:210
+msgid "Location of the Event"
+msgstr "مكان الحدث"
+
+#: templates/part.eventform.php:216
+msgid "Description"
+msgstr "مواصفات"
+
+#: templates/part.eventform.php:218
+msgid "Description of the Event"
+msgstr "وصف الحدث"
+
+#: templates/part.import.php:1
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the calendar"
+msgstr "الرجاء إختر الجدول الزمني"
+
+#: templates/part.import.php:10
+msgid "create a new calendar"
+msgstr ""
+
+#: templates/part.import.php:15
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import"
+msgstr "إدخال"
+
+#: templates/part.import.php:20
+msgid "Importing calendar"
+msgstr ""
+
+#: templates/part.import.php:23
+msgid "Calendar imported successfully"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Close Dialog"
+msgstr ""
+
+#: templates/part.newevent.php:1
+msgid "Create a new event"
+msgstr "إضافة حدث جديد"
+
+#: templates/settings.php:13
+msgid "Timezone"
+msgstr "المنطقة الزمنية"
+
+#: templates/settings.php:30
+msgid "Check always for changes of the timezone"
+msgstr ""
+
+#: templates/settings.php:32
+msgid "Timeformat"
+msgstr "شكل الوقت"
+
+#: templates/settings.php:34
+msgid "24h"
+msgstr "24 ساعة"
+
+#: templates/settings.php:35
+msgid "12h"
+msgstr "12 ساعة"
+
+#: templates/settings.php:41
+msgid "Calendar CalDAV syncing address:"
+msgstr "عنوان لتحديث ال CalDAV الجدول الزمني"
+
+
diff --git a/l10n/ar/contacts.po b/l10n/ar/contacts.po
new file mode 100644
index 00000000000..1a01a858a48
--- /dev/null
+++ b/l10n/ar/contacts.po
@@ -0,0 +1,290 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <tarek.taha@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Arabic (http://www.transifex.net/projects/p/owncloud/team/ar/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ar\n"
+"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5\n"
+
+#: ajax/activation.php:17 ajax/updateaddressbook.php:26
+msgid "Error (de)activating addressbook."
+msgstr ""
+
+#: ajax/addcard.php:79
+msgid "There was an error adding the contact."
+msgstr ""
+
+#: ajax/addproperty.php:39
+msgid "Cannot add empty property."
+msgstr ""
+
+#: ajax/addproperty.php:51
+msgid "At least one of the address fields has to be filled out."
+msgstr ""
+
+#: ajax/addproperty.php:77
+msgid "Error adding contact property."
+msgstr ""
+
+#: ajax/createaddressbook.php:20
+msgid "Error adding addressbook."
+msgstr ""
+
+#: ajax/createaddressbook.php:26
+msgid "Error activating addressbook."
+msgstr ""
+
+#: ajax/deleteproperty.php:40
+msgid "Error deleting contact property."
+msgstr ""
+
+#: ajax/setproperty.php:79
+msgid "Error updating contact property."
+msgstr ""
+
+#: ajax/updateaddressbook.php:20
+msgid "Error updating addressbook."
+msgstr ""
+
+#: appinfo/app.php:21 templates/settings.php:3
+msgid "Contacts"
+msgstr ""
+
+#: lib/app.php:42
+msgid "This is not your addressbook."
+msgstr "هذا ليس دفتر عناوينك."
+
+#: lib/app.php:51 photo.php:34
+msgid "Contact could not be found."
+msgstr "لم يتم العثور على الشخص."
+
+#: lib/app.php:79
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "المعلومات الموجودة في ال vCard غير صحيحة. الرجاء إعادة تحديث الصفحة."
+
+#: lib/app.php:91 templates/part.addcardform.php:54
+#: templates/part.property.php:45 templates/part.setpropertyform.php:7
+msgid "Address"
+msgstr "عنوان"
+
+#: lib/app.php:92 templates/part.addcardform.php:43
+msgid "Telephone"
+msgstr "الهاتف"
+
+#: lib/app.php:93 templates/part.addcardform.php:37
+#: templates/part.property.php:16 templates/part.setpropertyform.php:51
+msgid "Email"
+msgstr "البريد الالكتروني"
+
+#: lib/app.php:94 templates/part.addcardform.php:27
+#: templates/part.property.php:9 templates/part.setpropertyform.php:54
+msgid "Organization"
+msgstr "المؤسسة"
+
+#: lib/app.php:106 lib/app.php:113
+msgid "Work"
+msgstr "الوظيفة"
+
+#: lib/app.php:107 lib/app.php:111
+msgid "Home"
+msgstr "البيت"
+
+#: lib/app.php:112
+msgid "Mobile"
+msgstr "الهاتف المحمول"
+
+#: lib/app.php:114
+msgid "Text"
+msgstr "معلومات إضافية"
+
+#: lib/app.php:115
+msgid "Voice"
+msgstr "صوت"
+
+#: lib/app.php:116
+msgid "Fax"
+msgstr "الفاكس"
+
+#: lib/app.php:117
+msgid "Video"
+msgstr "الفيديو"
+
+#: lib/app.php:118
+msgid "Pager"
+msgstr "الرنان"
+
+#: lib/search.php:22
+msgid "Contact"
+msgstr ""
+
+#: photo.php:40
+msgid "This is not your contact."
+msgstr ".هذا ليس من معارفي"
+
+#: photo.php:48
+msgid "This card is not RFC compatible."
+msgstr "هذا الكرت ليس متلائم مع نظام ال RFC."
+
+#: photo.php:85
+msgid "This card does not contain a photo."
+msgstr "لا يحتوي هذا الكرت على صورة."
+
+#: templates/index.php:6
+msgid "Add Contact"
+msgstr "أضف شخص "
+
+#: templates/index.php:7
+msgid "Addressbooks"
+msgstr ""
+
+#: templates/part.addcardform.php:8
+msgid "Addressbook"
+msgstr ""
+
+#: templates/part.addcardform.php:21
+msgid "Name"
+msgstr "الاسم"
+
+#: templates/part.addcardform.php:57 templates/part.details.php:43
+#: templates/part.details.php:79 templates/part.setpropertyform.php:10
+#: templates/part.setpropertyform.php:47
+msgid "Type"
+msgstr ""
+
+#: templates/part.addcardform.php:65 templates/part.details.php:49
+#: templates/part.setpropertyform.php:16
+msgid "PO Box"
+msgstr "العنوان البريدي"
+
+#: templates/part.addcardform.php:72 templates/part.details.php:53
+#: templates/part.setpropertyform.php:20
+msgid "Extended"
+msgstr "إضافة"
+
+#: templates/part.addcardform.php:78 templates/part.details.php:57
+#: templates/part.setpropertyform.php:24
+msgid "Street"
+msgstr "شارع"
+
+#: templates/part.addcardform.php:84 templates/part.details.php:61
+#: templates/part.setpropertyform.php:28
+msgid "City"
+msgstr "المدينة"
+
+#: templates/part.addcardform.php:90 templates/part.details.php:65
+#: templates/part.setpropertyform.php:32
+msgid "Region"
+msgstr "المنطقة"
+
+#: templates/part.addcardform.php:96 templates/part.details.php:69
+#: templates/part.setpropertyform.php:36
+msgid "Zipcode"
+msgstr "رقم المنطقة"
+
+#: templates/part.addcardform.php:102 templates/part.details.php:73
+#: templates/part.setpropertyform.php:40
+msgid "Country"
+msgstr "البلد"
+
+#: templates/part.addcardform.php:109
+msgid "Create Contact"
+msgstr "أضف شخص "
+
+#: templates/part.chooseaddressbook.php:1
+msgid "Choose active Address Books"
+msgstr ""
+
+#: templates/part.chooseaddressbook.php:16
+msgid "New Address Book"
+msgstr ""
+
+#: templates/part.chooseaddressbook.php:21
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "CardDav Link"
+msgstr ""
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Download"
+msgstr ""
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Edit"
+msgstr "تعديل"
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Delete"
+msgstr "حذف"
+
+#: templates/part.details.php:3
+msgid "Download contact"
+msgstr ""
+
+#: templates/part.details.php:4
+msgid "Delete contact"
+msgstr ""
+
+#: templates/part.details.php:34
+msgid "Add"
+msgstr ""
+
+#: templates/part.editaddressbook.php:9
+msgid "New Addressbook"
+msgstr ""
+
+#: templates/part.editaddressbook.php:9
+msgid "Edit Addressbook"
+msgstr ""
+
+#: templates/part.editaddressbook.php:12
+msgid "Displayname"
+msgstr ""
+
+#: templates/part.editaddressbook.php:23
+msgid "Active"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Save"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Submit"
+msgstr ""
+
+#: templates/part.editaddressbook.php:30
+msgid "Cancel"
+msgstr ""
+
+#: templates/part.property.php:3
+msgid "Birthday"
+msgstr "تاريخ الميلاد"
+
+#: templates/part.property.php:23
+msgid "Preferred"
+msgstr ""
+
+#: templates/part.property.php:23 templates/part.setpropertyform.php:45
+msgid "Phone"
+msgstr "الهاتف"
+
+#: templates/part.setpropertyform.php:57
+msgid "Update"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "CardDAV syncing address:"
+msgstr ""
+
+
diff --git a/l10n/ar/core.po b/l10n/ar/core.po
new file mode 100644
index 00000000000..058ad6fbd7f
--- /dev/null
+++ b/l10n/ar/core.po
@@ -0,0 +1,171 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <tarek.taha@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Arabic (http://www.transifex.net/projects/p/owncloud/team/ar/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ar\n"
+"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5\n"
+
+#: lostpassword/index.php:24
+msgid "Owncloud password reset"
+msgstr ""
+
+#: lostpassword/templates/email.php:1
+msgid "Use the following link to reset your password: {link}"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr "سوف نرسل لك بريد يحتوي على وصلة لتجديد كلمة السر."
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Requested"
+msgstr "تم طلب"
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr "محاولة دخول فاشلة!"
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:22
+#: templates/login.php:8
+msgid "Username"
+msgstr "إسم المستخدم"
+
+#: lostpassword/templates/lostpassword.php:14
+msgid "Request reset"
+msgstr "طلب تعديل"
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr "لقد تم تعديل كلمة السر"
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr "كلمة سر جديدة"
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr "تعديل كلمة السر"
+
+#: strings.php:5
+msgid "Personal"
+msgstr "خصوصيات"
+
+#: strings.php:6
+msgid "Users"
+msgstr "المستخدم"
+
+#: strings.php:7
+msgid "Apps"
+msgstr "التطبيقات"
+
+#: strings.php:8
+msgid "Admin"
+msgstr "مستخدم رئيسي"
+
+#: strings.php:9
+msgid "Help"
+msgstr "المساعدة"
+
+#: templates/404.php:12
+msgid "Cloud not found"
+msgstr "لم يتم إيجاد"
+
+#: templates/installation.php:20
+msgid "Create an <strong>admin account</strong>"
+msgstr "أضف </strong>مستخدم رئيسي <strong>"
+
+#: templates/installation.php:26 templates/login.php:12
+msgid "Password"
+msgstr "كلمة السر"
+
+#: templates/installation.php:32
+msgid "Advanced"
+msgstr "خيارات متقدمة"
+
+#: templates/installation.php:34
+msgid "Data folder"
+msgstr "مجلد المعلومات"
+
+#: templates/installation.php:41
+msgid "Configure the database"
+msgstr "أسس قاعدة البيانات"
+
+#: templates/installation.php:46 templates/installation.php:57
+#: templates/installation.php:67
+msgid "will be used"
+msgstr "سيتم استخدمه"
+
+#: templates/installation.php:79
+msgid "Database user"
+msgstr "مستخدم قاعدة البيانات"
+
+#: templates/installation.php:83
+msgid "Database password"
+msgstr "كلمة سر مستخدم قاعدة البيانات"
+
+#: templates/installation.php:87
+msgid "Database name"
+msgstr "إسم قاعدة البيانات"
+
+#: templates/installation.php:93
+msgid "Database host"
+msgstr "خادم قاعدة البيانات"
+
+#: templates/installation.php:98
+msgid "Finish setup"
+msgstr "انهاء التعديلات"
+
+#: templates/layout.guest.php:35
+msgid "web services under your control"
+msgstr ""
+
+#: templates/layout.user.php:34
+msgid "Log out"
+msgstr "الخروج"
+
+#: templates/layout.user.php:46 templates/layout.user.php:47
+msgid "Settings"
+msgstr "تعديلات"
+
+#: templates/login.php:5
+msgid "Lost your password?"
+msgstr "هل نسيت كلمة السر؟"
+
+#: templates/login.php:15
+msgid "remember"
+msgstr "تذكر"
+
+#: templates/login.php:16
+msgid "Log in"
+msgstr ""
+
+#: templates/logout.php:1
+msgid "You are logged out."
+msgstr "تم الخروج بنجاح."
+
+#: templates/part.pagenavi.php:3
+msgid "prev"
+msgstr "السابق"
+
+#: templates/part.pagenavi.php:20
+msgid "next"
+msgstr "التالي"
+
+
diff --git a/l10n/ar/files.po b/l10n/ar/files.po
new file mode 100644
index 00000000000..d557d0039c8
--- /dev/null
+++ b/l10n/ar/files.po
@@ -0,0 +1,112 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <tarek.taha@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Arabic (http://www.transifex.net/projects/p/owncloud/team/ar/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ar\n"
+"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5\n"
+
+#: ajax/upload.php:19
+msgid "There is no error, the file uploaded with success"
+msgstr "تم ترفيع الملفات بنجاح."
+
+#: ajax/upload.php:20
+msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
+msgstr ""
+"حجم الملف الذي تريد ترفيعه أعلى مما upload_max_filesize يسمح به في ملف "
+"php.ini"
+
+#: ajax/upload.php:21
+msgid ""
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
+"the HTML form"
+msgstr ""
+"حجم الملف الذي تريد ترفيعه أعلى مما MAX_FILE_SIZE يسمح به في واجهة ال HTML."
+
+#: ajax/upload.php:22
+msgid "The uploaded file was only partially uploaded"
+msgstr "تم ترفيع جزء من الملفات الذي تريد ترفيعها فقط"
+
+#: ajax/upload.php:23
+msgid "No file was uploaded"
+msgstr "لم يتم ترفيع أي من الملفات"
+
+#: ajax/upload.php:24
+msgid "Missing a temporary folder"
+msgstr "المجلد المؤقت غير موجود"
+
+#: appinfo/app.php:8
+msgid "Files"
+msgstr "الملفات"
+
+#: templates/admin.php:5
+msgid "Maximum upload size"
+msgstr "الحد الأقصى لحجم الملفات التي يمكن رفعها"
+
+#: templates/index.php:7
+msgid "New"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Text file"
+msgstr ""
+
+#: templates/index.php:11
+msgid "Folder"
+msgstr ""
+
+#: templates/index.php:12
+msgid "From the web"
+msgstr ""
+
+#: templates/index.php:22
+msgid "Upload"
+msgstr "إرفع"
+
+#: templates/index.php:35
+msgid "Nothing in here. Upload something!"
+msgstr "لا يوجد شيء هنا. إرفع بعض الملفات!"
+
+#: templates/index.php:43
+msgid "Name"
+msgstr "الاسم"
+
+#: templates/index.php:45
+msgid "Download"
+msgstr "تحميل"
+
+#: templates/index.php:49
+msgid "Size"
+msgstr "حجم"
+
+#: templates/index.php:50
+msgid "Modified"
+msgstr "معدل"
+
+#: templates/index.php:50
+msgid "Delete"
+msgstr "محذوف"
+
+#: templates/index.php:58
+msgid "Upload too large"
+msgstr "حجم الترفيع أعلى من المسموح"
+
+#: templates/index.php:60
+msgid ""
+"The files you are trying to upload exceed the maximum size for file uploads "
+"on this server."
+msgstr "حجم الملفات التي تريد ترفيعها أعلى من المسموح على الخادم."
+
+
diff --git a/l10n/ar/gallery.po b/l10n/ar/gallery.po
new file mode 100644
index 00000000000..71c534aaeb8
--- /dev/null
+++ b/l10n/ar/gallery.po
@@ -0,0 +1,32 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:48+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Arabic (http://www.transifex.net/projects/p/owncloud/team/ar/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ar\n"
+"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5\n"
+
+#: appinfo/app.php:41
+msgid "Gallery"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Rescan"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+
diff --git a/l10n/ar/media.po b/l10n/ar/media.po
new file mode 100644
index 00000000000..7438bf29e3f
--- /dev/null
+++ b/l10n/ar/media.po
@@ -0,0 +1,65 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <tarek.taha@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Arabic (http://www.transifex.net/projects/p/owncloud/team/ar/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ar\n"
+"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5\n"
+
+#: appinfo/app.php:32
+msgid "Music"
+msgstr "الموسيقى"
+
+#: templates/music.php:3 templates/player.php:13
+msgid "Play"
+msgstr "إلعب"
+
+#: templates/music.php:4 templates/music.php:26 templates/player.php:14
+msgid "Pause"
+msgstr "تجميد"
+
+#: templates/music.php:5
+msgid "Previous"
+msgstr "السابق"
+
+#: templates/music.php:6 templates/player.php:15
+msgid "Next"
+msgstr "التالي"
+
+#: templates/music.php:7
+msgid "Mute"
+msgstr "إلغاء الصوت"
+
+#: templates/music.php:8
+msgid "Unmute"
+msgstr "تشغيل الصوت"
+
+#: templates/music.php:25
+msgid "Rescan Collection"
+msgstr "إعادة البحث عن ملفات الموسيقى"
+
+#: templates/music.php:37
+msgid "Artist"
+msgstr "الفنان"
+
+#: templates/music.php:38
+msgid "Album"
+msgstr "الألبوم"
+
+#: templates/music.php:39
+msgid "Title"
+msgstr "العنوان"
+
+
diff --git a/l10n/ar/settings.po b/l10n/ar/settings.po
new file mode 100644
index 00000000000..ed62562f685
--- /dev/null
+++ b/l10n/ar/settings.po
@@ -0,0 +1,153 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <tarek.taha@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Arabic (http://www.transifex.net/projects/p/owncloud/team/ar/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ar\n"
+"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5\n"
+
+#: ajax/lostpassword.php:14
+msgid "email Changed"
+msgstr ""
+
+#: ajax/lostpassword.php:16 ajax/openid.php:17 ajax/setlanguage.php:16
+msgid "Invalid request"
+msgstr "طلبك غير مفهوم"
+
+#: ajax/openid.php:15
+msgid "OpenID Changed"
+msgstr "تم تغيير ال OpenID"
+
+#: ajax/setlanguage.php:14
+msgid "Language changed"
+msgstr "تم تغيير اللغة"
+
+#: templates/admin.php:13
+msgid "Log level"
+msgstr ""
+
+#: templates/apps.php:8
+msgid "Add your application"
+msgstr "أضف تطبيقاتك"
+
+#: templates/apps.php:21
+msgid "Select an App"
+msgstr "إختر تطبيقاً"
+
+#: templates/apps.php:23
+msgid "-licensed"
+msgstr "-مسجل"
+
+#: templates/apps.php:23
+msgid "by"
+msgstr "من قبل"
+
+#: templates/help.php:8
+msgid "Ask a question"
+msgstr "إسأل سؤال"
+
+#: templates/help.php:20
+msgid "Problems connecting to help database."
+msgstr "الاتصال بقاعدة بيانات المساعدة لم يتم بنجاح"
+
+#: templates/help.php:21
+msgid "Go there manually."
+msgstr "إذهب هنالك بنفسك"
+
+#: templates/help.php:29
+msgid "Answer"
+msgstr "الجواب"
+
+#: templates/personal.php:8
+msgid "You use"
+msgstr "أنت تستخدم"
+
+#: templates/personal.php:8
+msgid "of the available"
+msgstr "من الموجود"
+
+#: templates/personal.php:13
+msgid "Your password got changed"
+msgstr "لقد تم تغيير كلمات السر"
+
+#: templates/personal.php:14
+msgid "Unable to change your password"
+msgstr "لم يتم تعديل كلمة السر بنجاح"
+
+#: templates/personal.php:15
+msgid "Current password"
+msgstr "كلمات السر الحالية"
+
+#: templates/personal.php:16
+msgid "New password"
+msgstr "كلمات سر جديدة"
+
+#: templates/personal.php:17
+msgid "show"
+msgstr "أظهر"
+
+#: templates/personal.php:18
+msgid "Change password"
+msgstr "عدل كلمة السر"
+
+#: templates/personal.php:24
+msgid "Email"
+msgstr ""
+
+#: templates/personal.php:25
+msgid "Your email address"
+msgstr ""
+
+#: templates/personal.php:26
+msgid "Fill in an email address to enable password recovery"
+msgstr ""
+
+#: templates/personal.php:32 templates/personal.php:33
+msgid "Language"
+msgstr "اللغة"
+
+#: templates/personal.php:38
+msgid "Help translate"
+msgstr ""
+
+#: templates/personal.php:45
+msgid "use this address to connect to your ownCloud in your file manager"
+msgstr "إستخدم هذا العنوان للإتصال ب ownCloud داخل نظام الملفات "
+
+#: templates/users.php:15 templates/users.php:30
+msgid "Name"
+msgstr "الاسم"
+
+#: templates/users.php:16 templates/users.php:31
+msgid "Password"
+msgstr "كلمات السر"
+
+#: templates/users.php:17 templates/users.php:32 templates/users.php:46
+msgid "Groups"
+msgstr "مجموعات"
+
+#: templates/users.php:23
+msgid "Create"
+msgstr "انشئ"
+
+#: templates/users.php:33
+msgid "Quota"
+msgstr ""
+
+#: templates/users.php:58
+msgid "Delete"
+msgstr "حذف"
+
+
diff --git a/l10n/bg_BG/calendar.po b/l10n/bg_BG/calendar.po
index 7369aa68358..9da48896a4c 100644
--- a/l10n/bg_BG/calendar.po
+++ b/l10n/bg_BG/calendar.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Bulgarian (Bulgaria) (http://www.transifex.net/projects/p/owncloud/team/bg_BG/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,321 +18,403 @@ msgstr ""
"Language: bg_BG\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/createcalendar.php:18 ajax/settimezone.php:19
-#: ajax/updatecalendar.php:18
-msgid "Authentication error"
-msgstr "Проблем с идентификацията"
-
-#: ajax/editeventform.php:25
-msgid "Wrong calendar"
+#: ajax/guesstimezone.php:42
+msgid "New Timezone:"
msgstr ""
-#: ajax/settimezone.php:27
+#: ajax/settimezone.php:22
msgid "Timezone changed"
msgstr "Часовата зона е сменена"
-#: ajax/settimezone.php:29
+#: ajax/settimezone.php:24
msgid "Invalid request"
msgstr "Невалидна заявка"
-#: appinfo/app.php:19 templates/part.eventform.php:27
-#: templates/part.eventinfo.php:18
+#: appinfo/app.php:20 templates/calendar.php:13
+#: templates/part.eventform.php:20
msgid "Calendar"
msgstr "Календар"
-#: lib/object.php:292
+#: lib/app.php:19
+msgid "Wrong calendar"
+msgstr ""
+
+#: lib/app.php:60 lib/object.php:332
msgid "Birthday"
msgstr ""
-#: lib/object.php:293
+#: lib/app.php:61 lib/object.php:333
msgid "Business"
msgstr ""
-#: lib/object.php:294
+#: lib/app.php:62 lib/object.php:334
msgid "Call"
msgstr ""
-#: lib/object.php:295
+#: lib/app.php:63 lib/object.php:335
msgid "Clients"
msgstr ""
-#: lib/object.php:296
+#: lib/app.php:64 lib/object.php:336
msgid "Deliverer"
msgstr ""
-#: lib/object.php:297
+#: lib/app.php:65 lib/object.php:337
msgid "Holidays"
msgstr ""
-#: lib/object.php:298
+#: lib/app.php:66 lib/object.php:338
msgid "Ideas"
msgstr ""
-#: lib/object.php:299
+#: lib/app.php:67 lib/object.php:339
msgid "Journey"
msgstr ""
-#: lib/object.php:300
+#: lib/app.php:68 lib/object.php:340
msgid "Jubilee"
msgstr ""
-#: lib/object.php:301
+#: lib/app.php:69 lib/object.php:341
msgid "Meeting"
msgstr ""
-#: lib/object.php:302
+#: lib/app.php:70 lib/object.php:342
msgid "Other"
msgstr ""
-#: lib/object.php:303
+#: lib/app.php:71 lib/object.php:343
msgid "Personal"
msgstr ""
-#: lib/object.php:304
+#: lib/app.php:72 lib/object.php:344
msgid "Projects"
msgstr ""
-#: lib/object.php:305
+#: lib/app.php:73 lib/object.php:345
msgid "Questions"
msgstr ""
-#: lib/object.php:306
+#: lib/app.php:74 lib/object.php:346
msgid "Work"
msgstr ""
-#: lib/object.php:313
+#: lib/object.php:353
msgid "Does not repeat"
msgstr "Не се повтаря"
-#: lib/object.php:314
+#: lib/object.php:354
msgid "Daily"
msgstr "Дневно"
-#: lib/object.php:315
+#: lib/object.php:355
msgid "Weekly"
msgstr "Седмично"
-#: lib/object.php:316
+#: lib/object.php:356
msgid "Every Weekday"
msgstr "Всеки делничен ден"
-#: lib/object.php:317
+#: lib/object.php:357
msgid "Bi-Weekly"
msgstr "Двуседмично"
-#: lib/object.php:318
+#: lib/object.php:358
msgid "Monthly"
msgstr "Месечно"
-#: lib/object.php:319
+#: lib/object.php:359
msgid "Yearly"
msgstr "Годишно"
-#: lib/object.php:337
-msgid "Not an array"
+#: lib/object.php:366
+msgid "never"
msgstr ""
-#: templates/calendar.php:3
-msgid "All day"
-msgstr "Всички дни"
+#: lib/object.php:367
+msgid "by occurrences"
+msgstr ""
-#: templates/calendar.php:32
-msgid "Sunday"
-msgstr "Неделя"
+#: lib/object.php:368
+msgid "by date"
+msgstr ""
+
+#: lib/object.php:375
+msgid "by monthday"
+msgstr ""
+
+#: lib/object.php:376
+msgid "by weekday"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:383 templates/lAfix.php:3
msgid "Monday"
-msgstr "Понеделник"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:384 templates/lAfix.php:4
msgid "Tuesday"
-msgstr "Вторник"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:385 templates/lAfix.php:5
msgid "Wednesday"
-msgstr "Сряда"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:386 templates/lAfix.php:6
msgid "Thursday"
-msgstr "Четвъртък"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:387 templates/lAfix.php:7
msgid "Friday"
-msgstr "Петък"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:388 templates/lAfix.php:8
msgid "Saturday"
-msgstr "Събота"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Sun."
-msgstr "Нед."
+#: lib/object.php:389 templates/lAfix.php:2
+msgid "Sunday"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Mon."
-msgstr "Пон."
+#: lib/object.php:396
+msgid "events week of month"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Tue."
-msgstr "Втр."
+#: lib/object.php:397
+msgid "first"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Wed."
-msgstr "Сря."
+#: lib/object.php:398
+msgid "second"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Thu."
-msgstr "Чет."
+#: lib/object.php:399
+msgid "third"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Fri."
-msgstr "Пет."
+#: lib/object.php:400
+msgid "fourth"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Sat."
-msgstr "Съб."
+#: lib/object.php:401
+msgid "fifth"
+msgstr ""
+
+#: lib/object.php:402
+msgid "last"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:424 templates/lAfix.php:16
msgid "January"
-msgstr "Януари"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:425 templates/lAfix.php:17
msgid "February"
-msgstr "Февруари"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:426 templates/lAfix.php:18
msgid "March"
-msgstr "Март"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:427 templates/lAfix.php:19
msgid "April"
-msgstr "Април"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:428 templates/lAfix.php:20
msgid "May"
-msgstr "Май"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:429 templates/lAfix.php:21
msgid "June"
-msgstr "Юни"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:430 templates/lAfix.php:22
msgid "July"
-msgstr "Юли"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:431 templates/lAfix.php:23
msgid "August"
-msgstr "Август"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:432 templates/lAfix.php:24
msgid "September"
-msgstr "Септември"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:433 templates/lAfix.php:25
msgid "October"
-msgstr "Октомври"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:434 templates/lAfix.php:26
msgid "November"
-msgstr "Ноември"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:435 templates/lAfix.php:27
msgid "December"
-msgstr "Декември"
-
-#: templates/calendar.php:35
-msgid "Jan."
-msgstr "Ян."
+msgstr ""
-#: templates/calendar.php:35
-msgid "Feb."
-msgstr "Фв."
+#: lib/object.php:441
+msgid "by events date"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Mar."
-msgstr "Март"
+#: lib/object.php:442
+msgid "by yearday(s)"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Apr."
-msgstr "Апр."
+#: lib/object.php:443
+msgid "by weeknumber(s)"
+msgstr ""
-#: templates/calendar.php:35
-msgid "May."
+#: lib/object.php:444
+msgid "by day and month"
msgstr ""
-#: templates/calendar.php:35
-msgid "Jun."
-msgstr "Юни"
+#: lib/object.php:467
+msgid "Not an array"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Jul."
-msgstr "Юли"
+#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+msgid "Date"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Aug."
-msgstr "Авг."
+#: lib/search.php:40
+msgid "Cal."
+msgstr ""
-#: templates/calendar.php:35
-msgid "Sep."
-msgstr "Сеп."
+#: templates/calendar.php:10
+msgid "All day"
+msgstr "Всички дни"
-#: templates/calendar.php:35
-msgid "Oct."
-msgstr "Окт."
+#: templates/calendar.php:11
+msgid "Missing fields"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Nov."
-msgstr "Ное."
+#: templates/calendar.php:12 templates/part.eventform.php:3
+msgid "Title"
+msgstr "Заглавие"
-#: templates/calendar.php:35
-msgid "Dec."
-msgstr "Дек."
+#: templates/calendar.php:14
+msgid "From Date"
+msgstr ""
-#: templates/calendar.php:36 templates/calendar.php:50
-#: templates/calendar.php:116
-msgid "Week"
-msgstr "Седмица"
+#: templates/calendar.php:15
+msgid "From Time"
+msgstr ""
-#: templates/calendar.php:37 templates/calendar.php:51
-msgid "Weeks"
-msgstr "Седмици"
+#: templates/calendar.php:16
+msgid "To Date"
+msgstr ""
-#: templates/calendar.php:38
-msgid "More before {startdate}"
+#: templates/calendar.php:17
+msgid "To Time"
msgstr ""
-#: templates/calendar.php:39
-msgid "More after {enddate}"
+#: templates/calendar.php:18
+msgid "The event ends before it starts"
msgstr ""
-#: templates/calendar.php:49
-msgid "Day"
-msgstr "Ден"
+#: templates/calendar.php:19
+msgid "There was a database fail"
+msgstr ""
#: templates/calendar.php:52
+msgid "Week"
+msgstr "Седмица"
+
+#: templates/calendar.php:53
msgid "Month"
msgstr "Месец"
-#: templates/calendar.php:53
+#: templates/calendar.php:54
msgid "List"
msgstr ""
-#: templates/calendar.php:58
+#: templates/calendar.php:59
msgid "Today"
msgstr "Днес"
-#: templates/calendar.php:59
+#: templates/calendar.php:60
msgid "Calendars"
msgstr "Календари"
-#: templates/calendar.php:76 templates/calendar.php:94
-msgid "Time"
-msgstr "Час"
-
-#: templates/calendar.php:169
+#: templates/calendar.php:78
msgid "There was a fail, while parsing the file."
msgstr "Възникна проблем с разлистването на файла."
+#: templates/lAfix.php:9
+msgid "Sun."
+msgstr ""
+
+#: templates/lAfix.php:10
+msgid "Mon."
+msgstr ""
+
+#: templates/lAfix.php:11
+msgid "Tue."
+msgstr ""
+
+#: templates/lAfix.php:12
+msgid "Wed."
+msgstr ""
+
+#: templates/lAfix.php:13
+msgid "Thu."
+msgstr ""
+
+#: templates/lAfix.php:14
+msgid "Fri."
+msgstr ""
+
+#: templates/lAfix.php:15
+msgid "Sat."
+msgstr ""
+
+#: templates/lAfix.php:28
+msgid "Jan."
+msgstr ""
+
+#: templates/lAfix.php:29
+msgid "Feb."
+msgstr ""
+
+#: templates/lAfix.php:30
+msgid "Mar."
+msgstr ""
+
+#: templates/lAfix.php:31
+msgid "Apr."
+msgstr ""
+
+#: templates/lAfix.php:32
+msgid "May."
+msgstr ""
+
+#: templates/lAfix.php:33
+msgid "Jun."
+msgstr ""
+
+#: templates/lAfix.php:34
+msgid "Jul."
+msgstr ""
+
+#: templates/lAfix.php:35
+msgid "Aug."
+msgstr ""
+
+#: templates/lAfix.php:36
+msgid "Sep."
+msgstr ""
+
+#: templates/lAfix.php:37
+msgid "Oct."
+msgstr ""
+
+#: templates/lAfix.php:38
+msgid "Nov."
+msgstr ""
+
+#: templates/lAfix.php:39
+msgid "Dec."
+msgstr ""
+
#: templates/part.choosecalendar.php:1
msgid "Choose active calendars"
msgstr "Изберете активен календар"
@@ -351,12 +433,11 @@ msgid "Download"
msgstr "Изтегляне"
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.eventinfo.php:64
msgid "Edit"
msgstr "Промяна"
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.editevent.php:8
+#: templates/part.editevent.php:9
msgid "Delete"
msgstr ""
@@ -376,90 +457,181 @@ msgstr "Екранно име"
msgid "Active"
msgstr "Активен"
-#: templates/part.editcalendar.php:29 templates/part.eventform.php:88
-#: templates/part.eventinfo.php:58
-msgid "Description"
-msgstr "Описание"
-
-#: templates/part.editcalendar.php:35
+#: templates/part.editcalendar.php:29
msgid "Calendar color"
msgstr "Цвят на календара"
-#: templates/part.editcalendar.php:41
+#: templates/part.editcalendar.php:42
msgid "Save"
msgstr ""
-#: templates/part.editcalendar.php:41 templates/part.editevent.php:7
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
#: templates/part.newevent.php:6
msgid "Submit"
msgstr "Продължи"
-#: templates/part.editcalendar.php:42
+#: templates/part.editcalendar.php:43
msgid "Cancel"
msgstr ""
-#: templates/part.editevent.php:1 templates/part.eventinfo.php:1
+#: templates/part.editevent.php:1
msgid "Edit an event"
msgstr "Промяна на събитие"
-#: templates/part.eventform.php:3 templates/part.eventinfo.php:4
-msgid "Title"
-msgstr "Заглавие"
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr ""
#: templates/part.eventform.php:5
msgid "Title of the Event"
msgstr "Наименование"
-#: templates/part.eventform.php:9 templates/part.eventinfo.php:9
-msgid "Location"
-msgstr "Локация"
-
#: templates/part.eventform.php:11
-msgid "Location of the Event"
-msgstr "Локация"
-
-#: templates/part.eventform.php:17 templates/part.eventinfo.php:16
msgid "Category"
msgstr "Категория"
-#: templates/part.eventform.php:19
+#: templates/part.eventform.php:13
msgid "Select category"
msgstr ""
-#: templates/part.eventform.php:45 templates/part.eventinfo.php:28
+#: templates/part.eventform.php:37
msgid "All Day Event"
msgstr "Целодневно събитие"
-#: templates/part.eventform.php:49 templates/part.eventinfo.php:31
+#: templates/part.eventform.php:41
msgid "From"
msgstr "От"
-#: templates/part.eventform.php:57 templates/part.eventinfo.php:38
+#: templates/part.eventform.php:49
msgid "To"
msgstr "До"
-#: templates/part.eventform.php:65 templates/part.eventinfo.php:44
+#: templates/part.eventform.php:57
+msgid "Advanced options"
+msgstr ""
+
+#: templates/part.eventform.php:61
msgid "Repeat"
msgstr "Повтори"
-#: templates/part.eventform.php:81 templates/part.eventinfo.php:51
-msgid "Attendees"
-msgstr "Присъстващи"
+#: templates/part.eventform.php:68
+msgid "Advanced"
+msgstr ""
+
+#: templates/part.eventform.php:112
+msgid "Select weekdays"
+msgstr ""
+
+#: templates/part.eventform.php:125 templates/part.eventform.php:138
+msgid "Select days"
+msgstr ""
+
+#: templates/part.eventform.php:130
+msgid "and the events day of year."
+msgstr ""
+
+#: templates/part.eventform.php:143
+msgid "and the events day of month."
+msgstr ""
+
+#: templates/part.eventform.php:151
+msgid "Select months"
+msgstr ""
+
+#: templates/part.eventform.php:164
+msgid "Select weeks"
+msgstr ""
+
+#: templates/part.eventform.php:169
+msgid "and the events week of year."
+msgstr ""
+
+#: templates/part.eventform.php:175
+msgid "Interval"
+msgstr ""
+
+#: templates/part.eventform.php:181
+msgid "End"
+msgstr ""
+
+#: templates/part.eventform.php:193
+msgid "occurrences"
+msgstr ""
+
+#: templates/part.eventform.php:208
+msgid "Location"
+msgstr "Локация"
+
+#: templates/part.eventform.php:210
+msgid "Location of the Event"
+msgstr "Локация"
+
+#: templates/part.eventform.php:216
+msgid "Description"
+msgstr "Описание"
-#: templates/part.eventform.php:89
+#: templates/part.eventform.php:218
msgid "Description of the Event"
msgstr "Описание"
-#: templates/part.eventinfo.php:63
-msgid "Close"
-msgstr "Затвори"
+#: templates/part.import.php:1
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the calendar"
+msgstr ""
+
+#: templates/part.import.php:10
+msgid "create a new calendar"
+msgstr ""
+
+#: templates/part.import.php:15
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import"
+msgstr ""
+
+#: templates/part.import.php:20
+msgid "Importing calendar"
+msgstr ""
+
+#: templates/part.import.php:23
+msgid "Calendar imported successfully"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Close Dialog"
+msgstr ""
#: templates/part.newevent.php:1
msgid "Create a new event"
msgstr "Ново събитие"
-#: templates/settings.php:11
+#: templates/settings.php:13
msgid "Timezone"
msgstr "Часова зона"
+#: templates/settings.php:30
+msgid "Check always for changes of the timezone"
+msgstr ""
+
+#: templates/settings.php:32
+msgid "Timeformat"
+msgstr ""
+
+#: templates/settings.php:34
+msgid "24h"
+msgstr ""
+
+#: templates/settings.php:35
+msgid "12h"
+msgstr ""
+
+#: templates/settings.php:41
+msgid "Calendar CalDAV syncing address:"
+msgstr ""
+
diff --git a/l10n/bg_BG/contacts.po b/l10n/bg_BG/contacts.po
index 4b6ca8fc510..35a16c1e213 100644
--- a/l10n/bg_BG/contacts.po
+++ b/l10n/bg_BG/contacts.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 20:10+0200\n"
-"PO-Revision-Date: 2011-09-23 18:10+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Bulgarian (Bulgaria) (http://www.transifex.net/projects/p/owncloud/team/bg_BG/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,164 +17,273 @@ msgstr ""
"Language: bg_BG\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/addcard.php:31 ajax/addproperty.php:31 ajax/deletebook.php:32
-#: ajax/deletecard.php:32 ajax/deleteproperty.php:34 ajax/getdetails.php:32
-#: ajax/setproperty.php:32 ajax/showaddcard.php:30 ajax/showaddproperty.php:31
-#: ajax/showsetproperty.php:32 photo.php:32
-msgid "You need to log in."
+#: ajax/activation.php:17 ajax/updateaddressbook.php:26
+msgid "Error (de)activating addressbook."
msgstr ""
-#: ajax/addcard.php:37
-msgid "This is not your addressbook."
+#: ajax/addcard.php:79
+msgid "There was an error adding the contact."
msgstr ""
-#: ajax/addproperty.php:37 ajax/deletecard.php:39 ajax/deleteproperty.php:41
-#: ajax/getdetails.php:39 ajax/setproperty.php:38 ajax/showaddproperty.php:37
-#: ajax/showsetproperty.php:38 photo.php:39
-msgid "Contact could not be found."
+#: ajax/addproperty.php:39
+msgid "Cannot add empty property."
msgstr ""
-#: ajax/addproperty.php:43 ajax/deletebook.php:38 ajax/deletecard.php:45
-#: ajax/deleteproperty.php:47 ajax/getdetails.php:45 ajax/setproperty.php:44
-#: ajax/showaddproperty.php:43 ajax/showsetproperty.php:44 photo.php:45
-msgid "This is not your contact."
+#: ajax/addproperty.php:51
+msgid "At least one of the address fields has to be filled out."
msgstr ""
-#: ajax/addproperty.php:50 ajax/deleteproperty.php:54 ajax/getdetails.php:52
-#: ajax/setproperty.php:51 ajax/showsetproperty.php:51
-msgid "vCard could not be read."
+#: ajax/addproperty.php:77
+msgid "Error adding contact property."
msgstr ""
-#: ajax/deleteproperty.php:65 ajax/setproperty.php:62
-#: ajax/showsetproperty.php:62
-msgid "Information about vCard is incorrect. Please reload the page."
+#: ajax/createaddressbook.php:20
+msgid "Error adding addressbook."
msgstr ""
-#: photo.php:53
-msgid "This card is not RFC compatible."
+#: ajax/createaddressbook.php:26
+msgid "Error activating addressbook."
msgstr ""
-#: photo.php:90
-msgid "This card does not contain a photo."
+#: ajax/deleteproperty.php:40
+msgid "Error deleting contact property."
msgstr ""
-#: templates/index.php:8
-msgid "Add Contact"
+#: ajax/setproperty.php:79
+msgid "Error updating contact property."
msgstr ""
-#: templates/part.addcardform.php:5
-msgid "Group"
+#: ajax/updateaddressbook.php:20
+msgid "Error updating addressbook."
msgstr ""
-#: templates/part.addcardform.php:12 templates/part.property.php:3
-msgid "Name"
+#: appinfo/app.php:21 templates/settings.php:3
+msgid "Contacts"
msgstr ""
-#: templates/part.addcardform.php:14
-msgid "Create Contact"
+#: lib/app.php:42
+msgid "This is not your addressbook."
+msgstr ""
+
+#: lib/app.php:51 photo.php:34
+msgid "Contact could not be found."
+msgstr ""
+
+#: lib/app.php:79
+msgid "Information about vCard is incorrect. Please reload the page."
msgstr ""
-#: templates/part.addpropertyform.php:4 templates/part.property.php:40
+#: lib/app.php:91 templates/part.addcardform.php:54
+#: templates/part.property.php:45 templates/part.setpropertyform.php:7
msgid "Address"
msgstr ""
-#: templates/part.addpropertyform.php:5
+#: lib/app.php:92 templates/part.addcardform.php:43
msgid "Telephone"
msgstr ""
-#: templates/part.addpropertyform.php:6 templates/part.property.php:22
+#: lib/app.php:93 templates/part.addcardform.php:37
+#: templates/part.property.php:16 templates/part.setpropertyform.php:51
msgid "Email"
msgstr ""
-#: templates/part.addpropertyform.php:7 templates/part.property.php:15
+#: lib/app.php:94 templates/part.addcardform.php:27
+#: templates/part.property.php:9 templates/part.setpropertyform.php:54
msgid "Organization"
msgstr ""
-#: templates/part.addpropertyform.php:17 templates/part.addpropertyform.php:32
+#: lib/app.php:106 lib/app.php:113
msgid "Work"
msgstr ""
-#: templates/part.addpropertyform.php:18 templates/part.addpropertyform.php:30
+#: lib/app.php:107 lib/app.php:111
msgid "Home"
msgstr ""
-#: templates/part.addpropertyform.php:20 templates/part.property.php:48
-#: templates/part.setpropertyform.php:5
+#: lib/app.php:112
+msgid "Mobile"
+msgstr ""
+
+#: lib/app.php:114
+msgid "Text"
+msgstr ""
+
+#: lib/app.php:115
+msgid "Voice"
+msgstr ""
+
+#: lib/app.php:116
+msgid "Fax"
+msgstr ""
+
+#: lib/app.php:117
+msgid "Video"
+msgstr ""
+
+#: lib/app.php:118
+msgid "Pager"
+msgstr ""
+
+#: lib/search.php:22
+msgid "Contact"
+msgstr ""
+
+#: photo.php:40
+msgid "This is not your contact."
+msgstr ""
+
+#: photo.php:48
+msgid "This card is not RFC compatible."
+msgstr ""
+
+#: photo.php:85
+msgid "This card does not contain a photo."
+msgstr ""
+
+#: templates/index.php:6
+msgid "Add Contact"
+msgstr ""
+
+#: templates/index.php:7
+msgid "Addressbooks"
+msgstr ""
+
+#: templates/part.addcardform.php:8
+msgid "Addressbook"
+msgstr ""
+
+#: templates/part.addcardform.php:21
+msgid "Name"
+msgstr ""
+
+#: templates/part.addcardform.php:57 templates/part.details.php:43
+#: templates/part.details.php:79 templates/part.setpropertyform.php:10
+#: templates/part.setpropertyform.php:47
+msgid "Type"
+msgstr ""
+
+#: templates/part.addcardform.php:65 templates/part.details.php:49
+#: templates/part.setpropertyform.php:16
msgid "PO Box"
msgstr ""
-#: templates/part.addpropertyform.php:21 templates/part.property.php:51
-#: templates/part.setpropertyform.php:6
+#: templates/part.addcardform.php:72 templates/part.details.php:53
+#: templates/part.setpropertyform.php:20
msgid "Extended"
msgstr ""
-#: templates/part.addpropertyform.php:22 templates/part.property.php:54
-#: templates/part.setpropertyform.php:7
+#: templates/part.addcardform.php:78 templates/part.details.php:57
+#: templates/part.setpropertyform.php:24
msgid "Street"
msgstr ""
-#: templates/part.addpropertyform.php:23 templates/part.property.php:57
-#: templates/part.setpropertyform.php:8
+#: templates/part.addcardform.php:84 templates/part.details.php:61
+#: templates/part.setpropertyform.php:28
msgid "City"
msgstr ""
-#: templates/part.addpropertyform.php:24 templates/part.property.php:60
-#: templates/part.setpropertyform.php:9
+#: templates/part.addcardform.php:90 templates/part.details.php:65
+#: templates/part.setpropertyform.php:32
msgid "Region"
msgstr ""
-#: templates/part.addpropertyform.php:25 templates/part.property.php:63
-#: templates/part.setpropertyform.php:10
+#: templates/part.addcardform.php:96 templates/part.details.php:69
+#: templates/part.setpropertyform.php:36
msgid "Zipcode"
msgstr ""
-#: templates/part.addpropertyform.php:26 templates/part.property.php:66
-#: templates/part.setpropertyform.php:11
+#: templates/part.addcardform.php:102 templates/part.details.php:73
+#: templates/part.setpropertyform.php:40
msgid "Country"
msgstr ""
-#: templates/part.addpropertyform.php:31
-msgid "Mobile"
+#: templates/part.addcardform.php:109
+msgid "Create Contact"
msgstr ""
-#: templates/part.addpropertyform.php:33
-msgid "Text"
+#: templates/part.chooseaddressbook.php:1
+msgid "Choose active Address Books"
msgstr ""
-#: templates/part.addpropertyform.php:34
-msgid "Voice"
+#: templates/part.chooseaddressbook.php:16
+msgid "New Address Book"
msgstr ""
-#: templates/part.addpropertyform.php:35
-msgid "Fax"
+#: templates/part.chooseaddressbook.php:21
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "CardDav Link"
msgstr ""
-#: templates/part.addpropertyform.php:36
-msgid "Video"
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Download"
msgstr ""
-#: templates/part.addpropertyform.php:37
-msgid "Pager"
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Edit"
msgstr ""
-#: templates/part.details.php:33
+#: templates/part.chooseaddressbook.rowfields.php:5
msgid "Delete"
msgstr ""
+#: templates/part.details.php:3
+msgid "Download contact"
+msgstr ""
+
+#: templates/part.details.php:4
+msgid "Delete contact"
+msgstr ""
+
#: templates/part.details.php:34
-msgid "Add Property"
+msgid "Add"
+msgstr ""
+
+#: templates/part.editaddressbook.php:9
+msgid "New Addressbook"
+msgstr ""
+
+#: templates/part.editaddressbook.php:9
+msgid "Edit Addressbook"
+msgstr ""
+
+#: templates/part.editaddressbook.php:12
+msgid "Displayname"
+msgstr ""
+
+#: templates/part.editaddressbook.php:23
+msgid "Active"
msgstr ""
-#: templates/part.property.php:9
+#: templates/part.editaddressbook.php:29
+msgid "Save"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Submit"
+msgstr ""
+
+#: templates/part.editaddressbook.php:30
+msgid "Cancel"
+msgstr ""
+
+#: templates/part.property.php:3
msgid "Birthday"
msgstr ""
-#: templates/part.property.php:29
+#: templates/part.property.php:23
+msgid "Preferred"
+msgstr ""
+
+#: templates/part.property.php:23 templates/part.setpropertyform.php:45
msgid "Phone"
msgstr ""
-#: templates/part.setpropertyform.php:17
-msgid "Edit"
+#: templates/part.setpropertyform.php:57
+msgid "Update"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "CardDAV syncing address:"
msgstr ""
diff --git a/l10n/bg_BG/core.po b/l10n/bg_BG/core.po
index f23044c9878..c7db7403c9f 100644
--- a/l10n/bg_BG/core.po
+++ b/l10n/bg_BG/core.po
@@ -10,9 +10,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 18:17+0200\n"
-"PO-Revision-Date: 2011-09-06 19:20+0000\n"
-"Last-Translator: adin <adn.adin@gmail.com>\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Bulgarian (Bulgaria) (http://www.transifex.net/projects/p/owncloud/team/bg_BG/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -20,6 +20,51 @@ msgstr ""
"Language: bg_BG\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+#: lostpassword/index.php:24
+msgid "Owncloud password reset"
+msgstr ""
+
+#: lostpassword/templates/email.php:1
+msgid "Use the following link to reset your password: {link}"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr "Ще получите връзка за нулиране на паролата Ви."
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Requested"
+msgstr "Заявено"
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr "Входа пропадна!"
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:22
+#: templates/login.php:8
+msgid "Username"
+msgstr "Потребител"
+
+#: lostpassword/templates/lostpassword.php:14
+msgid "Request reset"
+msgstr "Нулиране на заявка"
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr "Вашата парола е нулирана"
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr "Нова парола"
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr "Нулиране на парола"
+
#: strings.php:5
msgid "Personal"
msgstr "Лични"
@@ -48,54 +93,50 @@ msgstr "облакът не намерен"
msgid "Create an <strong>admin account</strong>"
msgstr "Създаване на <strong>админ профил</strong>"
-#: templates/installation.php:21
-msgid "Username"
-msgstr "Потребител"
-
-#: templates/installation.php:22
+#: templates/installation.php:26 templates/login.php:12
msgid "Password"
msgstr "Парола"
-#: templates/installation.php:27
+#: templates/installation.php:32
+msgid "Advanced"
+msgstr "Разширено"
+
+#: templates/installation.php:34
+msgid "Data folder"
+msgstr "Директория за данни"
+
+#: templates/installation.php:41
msgid "Configure the database"
msgstr "Конфигуриране на базата"
-#: templates/installation.php:32 templates/installation.php:43
-#: templates/installation.php:53
+#: templates/installation.php:46 templates/installation.php:57
+#: templates/installation.php:67
msgid "will be used"
msgstr "ще се ползва"
-#: templates/installation.php:64
+#: templates/installation.php:79
msgid "Database user"
msgstr "Потребител за базата"
-#: templates/installation.php:65
+#: templates/installation.php:83
msgid "Database password"
msgstr "Парола за базата"
-#: templates/installation.php:66
+#: templates/installation.php:87
msgid "Database name"
msgstr "Име на базата"
-#: templates/installation.php:72
-msgid "Advanced"
-msgstr "Разширено"
-
-#: templates/installation.php:75
+#: templates/installation.php:93
msgid "Database host"
msgstr "Хост за базата"
-#: templates/installation.php:76
-msgid "Data folder"
-msgstr "Директория за данни"
-
-#: templates/installation.php:79
+#: templates/installation.php:98
msgid "Finish setup"
msgstr "Завършване на настройките"
#: templates/layout.guest.php:35
-msgid "gives you freedom and control over your own data"
-msgstr "дава Ви свобода и контрол на Вашите лични данни"
+msgid "web services under your control"
+msgstr ""
#: templates/layout.user.php:34
msgid "Log out"
@@ -105,38 +146,22 @@ msgstr "Изход"
msgid "Settings"
msgstr "Настройки"
-#: templates/login.php:4
+#: templates/login.php:5
msgid "Lost your password?"
msgstr "Забравена парола?"
-#: templates/login.php:9 templates/login.php:13
+#: templates/login.php:15
msgid "remember"
msgstr "запомни"
+#: templates/login.php:16
+msgid "Log in"
+msgstr ""
+
#: templates/logout.php:1
msgid "You are logged out."
msgstr "Вие излязохте."
-#: templates/lostpassword.php:3
-msgid "You will receive a link to reset your password via Email."
-msgstr "Ще получите връзка за да нулирате паролата си."
-
-#: templates/lostpassword.php:5
-msgid "Requested"
-msgstr "Заявено"
-
-#: templates/lostpassword.php:8
-msgid "Login failed!"
-msgstr "Входа пропадна!"
-
-#: templates/lostpassword.php:10
-msgid "Username or Email"
-msgstr "Потребителско име или Email"
-
-#: templates/lostpassword.php:11
-msgid "Request reset"
-msgstr "Заявка за нулиране"
-
#: templates/part.pagenavi.php:3
msgid "prev"
msgstr "пред."
@@ -145,16 +170,4 @@ msgstr "пред."
msgid "next"
msgstr "следващо"
-#: templates/resetpassword.php:4
-msgid "Your password was reset"
-msgstr "Вашата парола е нулирана"
-
-#: templates/resetpassword.php:6
-msgid "New password"
-msgstr "Нова парола"
-
-#: templates/resetpassword.php:7
-msgid "Reset password"
-msgstr "Нулиране на парола"
-
diff --git a/l10n/bg_BG/files.po b/l10n/bg_BG/files.po
index 475f6dc3fae..3ed53c3a4b0 100644
--- a/l10n/bg_BG/files.po
+++ b/l10n/bg_BG/files.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Bulgarian (Bulgaria) (http://www.transifex.net/projects/p/owncloud/team/bg_BG/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,33 +18,37 @@ msgstr ""
"Language: bg_BG\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/upload.php:24
+#: ajax/upload.php:19
msgid "There is no error, the file uploaded with success"
-msgstr ""
+msgstr "Файлът е качен успешно"
-#: ajax/upload.php:25
+#: ajax/upload.php:20
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr ""
+"Файлът който се опитвате да качите, надвишава зададените стойности в "
+"upload_max_filesize в PHP.INI"
-#: ajax/upload.php:26
+#: ajax/upload.php:21
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
+"Файлът който се опитвате да качите надвишава стойностите в MAX_FILE_SIZE в "
+"HTML формата."
-#: ajax/upload.php:27
+#: ajax/upload.php:22
msgid "The uploaded file was only partially uploaded"
-msgstr ""
+msgstr "Файлът е качен частично"
-#: ajax/upload.php:28
+#: ajax/upload.php:23
msgid "No file was uploaded"
-msgstr ""
+msgstr "Фахлът не бе качен"
-#: ajax/upload.php:29
+#: ajax/upload.php:24
msgid "Missing a temporary folder"
-msgstr ""
+msgstr "Липсва временната папка"
-#: appinfo/app.php:7
+#: appinfo/app.php:8
msgid "Files"
msgstr "Файлове"
@@ -52,43 +56,55 @@ msgstr "Файлове"
msgid "Maximum upload size"
msgstr "Макс. размер за качване"
+#: templates/index.php:7
+msgid "New"
+msgstr ""
+
#: templates/index.php:10
+msgid "Text file"
+msgstr ""
+
+#: templates/index.php:11
+msgid "Folder"
+msgstr ""
+
+#: templates/index.php:12
+msgid "From the web"
+msgstr ""
+
+#: templates/index.php:22
msgid "Upload"
msgstr "Качване"
-#: templates/index.php:17
-msgid "New Folder"
-msgstr "Нова папка"
-
-#: templates/index.php:31
+#: templates/index.php:35
msgid "Nothing in here. Upload something!"
msgstr "Няма нищо, качете нещо!"
-#: templates/index.php:39
+#: templates/index.php:43
msgid "Name"
msgstr "Име"
-#: templates/index.php:41
+#: templates/index.php:45
msgid "Download"
msgstr "Изтегляне"
-#: templates/index.php:45
+#: templates/index.php:49
msgid "Size"
msgstr "Размер"
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Modified"
msgstr "Променено"
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Delete"
msgstr "Изтриване"
-#: templates/index.php:54
+#: templates/index.php:58
msgid "Upload too large"
msgstr "Файлът е прекалено голям"
-#: templates/index.php:56
+#: templates/index.php:60
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
diff --git a/l10n/bg_BG/gallery.po b/l10n/bg_BG/gallery.po
new file mode 100644
index 00000000000..e52c69a7719
--- /dev/null
+++ b/l10n/bg_BG/gallery.po
@@ -0,0 +1,32 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:48+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Bulgarian (Bulgaria) (http://www.transifex.net/projects/p/owncloud/team/bg_BG/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: bg_BG\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:41
+msgid "Gallery"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Rescan"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+
diff --git a/l10n/bg_BG/media.po b/l10n/bg_BG/media.po
index e8fa24bbe50..b06ecc85d90 100644
--- a/l10n/bg_BG/media.po
+++ b/l10n/bg_BG/media.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 18:17+0200\n"
-"PO-Revision-Date: 2011-09-06 08:43+0000\n"
-"Last-Translator: ep98 <ilivanov@gmail.com>\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Bulgarian (Bulgaria) (http://www.transifex.net/projects/p/owncloud/team/bg_BG/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,15 +18,15 @@ msgstr ""
"Language: bg_BG\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: appinfo/app.php:31
+#: appinfo/app.php:32
msgid "Music"
msgstr "Музика"
-#: templates/music.php:3
+#: templates/music.php:3 templates/player.php:13
msgid "Play"
msgstr "Пусни"
-#: templates/music.php:4 templates/music.php:30
+#: templates/music.php:4 templates/music.php:26 templates/player.php:14
msgid "Pause"
msgstr "Пауза"
@@ -34,7 +34,7 @@ msgstr "Пауза"
msgid "Previous"
msgstr "Предишна"
-#: templates/music.php:6
+#: templates/music.php:6 templates/player.php:15
msgid "Next"
msgstr "Следваща"
@@ -46,11 +46,7 @@ msgstr "Отнеми"
msgid "Unmute"
msgstr "Върни"
-#: templates/music.php:28
-msgid "Songs scanned"
-msgstr "Сканирани песни"
-
-#: templates/music.php:29
+#: templates/music.php:25
msgid "Rescan Collection"
msgstr "Повторно сканиране"
diff --git a/l10n/bg_BG/settings.po b/l10n/bg_BG/settings.po
index 9f23a84787f..c5a72e79d81 100644
--- a/l10n/bg_BG/settings.po
+++ b/l10n/bg_BG/settings.po
@@ -9,9 +9,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 18:17+0200\n"
-"PO-Revision-Date: 2011-09-06 19:21+0000\n"
-"Last-Translator: adin <adn.adin@gmail.com>\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Bulgarian (Bulgaria) (http://www.transifex.net/projects/p/owncloud/team/bg_BG/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,22 +19,26 @@ msgstr ""
"Language: bg_BG\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/openid.php:13 ajax/setlanguage.php:13
-msgid "Authentication error"
-msgstr "Проблем с идентификацията"
-
-#: ajax/openid.php:21
-msgid "OpenID Changed"
-msgstr "OpenID е сменено"
+#: ajax/lostpassword.php:14
+msgid "email Changed"
+msgstr ""
-#: ajax/openid.php:23 ajax/setlanguage.php:23
+#: ajax/lostpassword.php:16 ajax/openid.php:17 ajax/setlanguage.php:16
msgid "Invalid request"
msgstr "Невалидна заявка"
-#: ajax/setlanguage.php:21
+#: ajax/openid.php:15
+msgid "OpenID Changed"
+msgstr "OpenID е сменено"
+
+#: ajax/setlanguage.php:14
msgid "Language changed"
msgstr "Езика е сменен"
+#: templates/admin.php:13
+msgid "Log level"
+msgstr ""
+
#: templates/apps.php:8
msgid "Add your application"
msgstr "Добавете Ваша програма"
@@ -55,15 +59,15 @@ msgstr "от"
msgid "Ask a question"
msgstr "Задайте въпрос"
-#: templates/help.php:17
+#: templates/help.php:20
msgid "Problems connecting to help database."
msgstr "Проблеми при свързване с помощната база"
-#: templates/help.php:18
+#: templates/help.php:21
msgid "Go there manually."
msgstr "Отидете ръчно."
-#: templates/help.php:26
+#: templates/help.php:29
msgid "Answer"
msgstr "Отговор"
@@ -99,35 +103,51 @@ msgstr "показва"
msgid "Change password"
msgstr "Промяна на парола"
-#: templates/personal.php:24 templates/personal.php:25
+#: templates/personal.php:24
+msgid "Email"
+msgstr ""
+
+#: templates/personal.php:25
+msgid "Your email address"
+msgstr ""
+
+#: templates/personal.php:26
+msgid "Fill in an email address to enable password recovery"
+msgstr ""
+
+#: templates/personal.php:32 templates/personal.php:33
msgid "Language"
msgstr "Език"
-#: templates/personal.php:30
-msgid "Help translating"
-msgstr "Помогнете с превода"
+#: templates/personal.php:38
+msgid "Help translate"
+msgstr ""
-#: templates/personal.php:37
+#: templates/personal.php:45
msgid "use this address to connect to your ownCloud in your file manager"
msgstr "ползвай този адрес за връзка с Вашия ownCloud във файловия мениджър"
-#: templates/users.php:16
+#: templates/users.php:15 templates/users.php:30
msgid "Name"
msgstr "Име"
-#: templates/users.php:17
+#: templates/users.php:16 templates/users.php:31
msgid "Password"
msgstr "Парола"
-#: templates/users.php:18 templates/users.php:36
+#: templates/users.php:17 templates/users.php:32 templates/users.php:46
msgid "Groups"
msgstr "Групи"
-#: templates/users.php:24
+#: templates/users.php:23
msgid "Create"
msgstr "Ново"
-#: templates/users.php:48
+#: templates/users.php:33
+msgid "Quota"
+msgstr ""
+
+#: templates/users.php:58
msgid "Delete"
msgstr "Изтриване"
diff --git a/l10n/ca/calendar.po b/l10n/ca/calendar.po
index f535d8d1170..a91a65cac49 100644
--- a/l10n/ca/calendar.po
+++ b/l10n/ca/calendar.po
@@ -3,14 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# <rcalvoi@yahoo.com>, 2011.
+# <rcalvoi@yahoo.com>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Catalan (http://www.transifex.net/projects/p/owncloud/team/ca/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,351 +18,432 @@ msgstr ""
"Language: ca\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/createcalendar.php:18 ajax/settimezone.php:19
-#: ajax/updatecalendar.php:18
-msgid "Authentication error"
-msgstr "Error d'autenticació"
+#: ajax/guesstimezone.php:42
+msgid "New Timezone:"
+msgstr "Nova zona horària:"
-#: ajax/editeventform.php:25
-msgid "Wrong calendar"
-msgstr ""
-
-#: ajax/settimezone.php:27
+#: ajax/settimezone.php:22
msgid "Timezone changed"
msgstr "La zona horària ha canviat"
-#: ajax/settimezone.php:29
+#: ajax/settimezone.php:24
msgid "Invalid request"
msgstr "Sol.licitud no vàlida"
-#: appinfo/app.php:19 templates/part.eventform.php:27
-#: templates/part.eventinfo.php:18
+#: appinfo/app.php:20 templates/calendar.php:13
+#: templates/part.eventform.php:20
msgid "Calendar"
msgstr "Calendari"
-#: lib/object.php:292
+#: lib/app.php:19
+msgid "Wrong calendar"
+msgstr "Calendari erroni"
+
+#: lib/app.php:60 lib/object.php:332
msgid "Birthday"
-msgstr ""
+msgstr "Aniversari"
-#: lib/object.php:293
+#: lib/app.php:61 lib/object.php:333
msgid "Business"
-msgstr ""
+msgstr "Feina"
-#: lib/object.php:294
+#: lib/app.php:62 lib/object.php:334
msgid "Call"
-msgstr ""
+msgstr "Trucada"
-#: lib/object.php:295
+#: lib/app.php:63 lib/object.php:335
msgid "Clients"
-msgstr ""
+msgstr "Clients"
-#: lib/object.php:296
+#: lib/app.php:64 lib/object.php:336
msgid "Deliverer"
-msgstr ""
+msgstr "Remitent"
-#: lib/object.php:297
+#: lib/app.php:65 lib/object.php:337
msgid "Holidays"
-msgstr ""
+msgstr "Vacances"
-#: lib/object.php:298
+#: lib/app.php:66 lib/object.php:338
msgid "Ideas"
-msgstr ""
+msgstr "Idees"
-#: lib/object.php:299
+#: lib/app.php:67 lib/object.php:339
msgid "Journey"
-msgstr ""
+msgstr "Viatge"
-#: lib/object.php:300
+#: lib/app.php:68 lib/object.php:340
msgid "Jubilee"
-msgstr ""
+msgstr "Sant"
-#: lib/object.php:301
+#: lib/app.php:69 lib/object.php:341
msgid "Meeting"
-msgstr ""
+msgstr "Reunió"
-#: lib/object.php:302
+#: lib/app.php:70 lib/object.php:342
msgid "Other"
-msgstr ""
+msgstr "Altres"
-#: lib/object.php:303
+#: lib/app.php:71 lib/object.php:343
msgid "Personal"
-msgstr ""
+msgstr "Personal"
-#: lib/object.php:304
+#: lib/app.php:72 lib/object.php:344
msgid "Projects"
-msgstr ""
+msgstr "Projectes"
-#: lib/object.php:305
+#: lib/app.php:73 lib/object.php:345
msgid "Questions"
-msgstr ""
+msgstr "Preguntes"
-#: lib/object.php:306
+#: lib/app.php:74 lib/object.php:346
msgid "Work"
-msgstr ""
+msgstr "Feina"
-#: lib/object.php:313
+#: lib/object.php:353
msgid "Does not repeat"
msgstr "No es repeteix"
-#: lib/object.php:314
+#: lib/object.php:354
msgid "Daily"
msgstr "Diari"
-#: lib/object.php:315
+#: lib/object.php:355
msgid "Weekly"
msgstr "Mensual"
-#: lib/object.php:316
+#: lib/object.php:356
msgid "Every Weekday"
msgstr "Cada setmana"
-#: lib/object.php:317
+#: lib/object.php:357
msgid "Bi-Weekly"
msgstr "Bisetmanalment"
-#: lib/object.php:318
+#: lib/object.php:358
msgid "Monthly"
msgstr "Mensualment"
-#: lib/object.php:319
+#: lib/object.php:359
msgid "Yearly"
msgstr "Cada any"
-#: lib/object.php:337
-msgid "Not an array"
-msgstr ""
+#: lib/object.php:366
+msgid "never"
+msgstr "mai"
-#: templates/calendar.php:3
-msgid "All day"
-msgstr "Tot el dia"
+#: lib/object.php:367
+msgid "by occurrences"
+msgstr "per aparicions"
-#: templates/calendar.php:32
-msgid "Sunday"
-msgstr "Diumenge"
+#: lib/object.php:368
+msgid "by date"
+msgstr "per data"
+
+#: lib/object.php:375
+msgid "by monthday"
+msgstr "per dia del mes"
-#: templates/calendar.php:32
+#: lib/object.php:376
+msgid "by weekday"
+msgstr "per dia de la setmana"
+
+#: lib/object.php:383 templates/lAfix.php:3
msgid "Monday"
msgstr "Dilluns"
-#: templates/calendar.php:32
+#: lib/object.php:384 templates/lAfix.php:4
msgid "Tuesday"
msgstr "Dimarts"
-#: templates/calendar.php:32
+#: lib/object.php:385 templates/lAfix.php:5
msgid "Wednesday"
msgstr "Dimecres"
-#: templates/calendar.php:32
+#: lib/object.php:386 templates/lAfix.php:6
msgid "Thursday"
msgstr "Dijous"
-#: templates/calendar.php:32
+#: lib/object.php:387 templates/lAfix.php:7
msgid "Friday"
msgstr "Divendres"
-#: templates/calendar.php:32
+#: lib/object.php:388 templates/lAfix.php:8
msgid "Saturday"
msgstr "Dissabte"
-#: templates/calendar.php:33
-msgid "Sun."
-msgstr "dg."
+#: lib/object.php:389 templates/lAfix.php:2
+msgid "Sunday"
+msgstr "Diumenge"
-#: templates/calendar.php:33
-msgid "Mon."
-msgstr "dl."
+#: lib/object.php:396
+msgid "events week of month"
+msgstr "esdeveniments la setmana del mes"
-#: templates/calendar.php:33
-msgid "Tue."
-msgstr "dm."
+#: lib/object.php:397
+msgid "first"
+msgstr "primer"
-#: templates/calendar.php:33
-msgid "Wed."
-msgstr "dc."
+#: lib/object.php:398
+msgid "second"
+msgstr "segon"
-#: templates/calendar.php:33
-msgid "Thu."
-msgstr "dj."
+#: lib/object.php:399
+msgid "third"
+msgstr "tercer"
-#: templates/calendar.php:33
-msgid "Fri."
-msgstr "dv."
+#: lib/object.php:400
+msgid "fourth"
+msgstr "quart"
-#: templates/calendar.php:33
-msgid "Sat."
-msgstr "ds."
+#: lib/object.php:401
+msgid "fifth"
+msgstr "cinquè"
+
+#: lib/object.php:402
+msgid "last"
+msgstr "últim"
-#: templates/calendar.php:34
+#: lib/object.php:424 templates/lAfix.php:16
msgid "January"
msgstr "Gener"
-#: templates/calendar.php:34
+#: lib/object.php:425 templates/lAfix.php:17
msgid "February"
msgstr "Febrer"
-#: templates/calendar.php:34
+#: lib/object.php:426 templates/lAfix.php:18
msgid "March"
msgstr "Març"
-#: templates/calendar.php:34
+#: lib/object.php:427 templates/lAfix.php:19
msgid "April"
msgstr "Abril"
-#: templates/calendar.php:34
+#: lib/object.php:428 templates/lAfix.php:20
msgid "May"
msgstr "Maig"
-#: templates/calendar.php:34
+#: lib/object.php:429 templates/lAfix.php:21
msgid "June"
msgstr "Juny"
-#: templates/calendar.php:34
+#: lib/object.php:430 templates/lAfix.php:22
msgid "July"
msgstr "Juliol"
-#: templates/calendar.php:34
+#: lib/object.php:431 templates/lAfix.php:23
msgid "August"
msgstr "Agost"
-#: templates/calendar.php:34
+#: lib/object.php:432 templates/lAfix.php:24
msgid "September"
msgstr "Setembre"
-#: templates/calendar.php:34
+#: lib/object.php:433 templates/lAfix.php:25
msgid "October"
msgstr "Octubre"
-#: templates/calendar.php:34
+#: lib/object.php:434 templates/lAfix.php:26
msgid "November"
msgstr "Novembre"
-#: templates/calendar.php:34
+#: lib/object.php:435 templates/lAfix.php:27
msgid "December"
msgstr "Desembre"
-#: templates/calendar.php:35
+#: lib/object.php:441
+msgid "by events date"
+msgstr "per data d'esdeveniments"
+
+#: lib/object.php:442
+msgid "by yearday(s)"
+msgstr "per ahir(s)"
+
+#: lib/object.php:443
+msgid "by weeknumber(s)"
+msgstr "per número(s) de la setmana"
+
+#: lib/object.php:444
+msgid "by day and month"
+msgstr "per dia del mes"
+
+#: lib/object.php:467
+msgid "Not an array"
+msgstr "No és una sèrie"
+
+#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+msgid "Date"
+msgstr "Data"
+
+#: lib/search.php:40
+msgid "Cal."
+msgstr "Cal."
+
+#: templates/calendar.php:10
+msgid "All day"
+msgstr "Tot el dia"
+
+#: templates/calendar.php:11
+msgid "Missing fields"
+msgstr "Els camps que falten"
+
+#: templates/calendar.php:12 templates/part.eventform.php:3
+msgid "Title"
+msgstr "Títol"
+
+#: templates/calendar.php:14
+msgid "From Date"
+msgstr "Des de la data"
+
+#: templates/calendar.php:15
+msgid "From Time"
+msgstr "Des de l'hora"
+
+#: templates/calendar.php:16
+msgid "To Date"
+msgstr "Fins a la data"
+
+#: templates/calendar.php:17
+msgid "To Time"
+msgstr "Fins a l'hora"
+
+#: templates/calendar.php:18
+msgid "The event ends before it starts"
+msgstr "L'esdeveniment acaba abans que comenci"
+
+#: templates/calendar.php:19
+msgid "There was a database fail"
+msgstr "Hi ha un error de base de dades"
+
+#: templates/calendar.php:52
+msgid "Week"
+msgstr "Setmana"
+
+#: templates/calendar.php:53
+msgid "Month"
+msgstr "Mes"
+
+#: templates/calendar.php:54
+msgid "List"
+msgstr "Llista"
+
+#: templates/calendar.php:59
+msgid "Today"
+msgstr "Avui"
+
+#: templates/calendar.php:60
+msgid "Calendars"
+msgstr "Calendaris"
+
+#: templates/calendar.php:78
+msgid "There was a fail, while parsing the file."
+msgstr "S'ha produït un error en analitzar el fitxer."
+
+#: templates/lAfix.php:9
+msgid "Sun."
+msgstr "dg."
+
+#: templates/lAfix.php:10
+msgid "Mon."
+msgstr "dl."
+
+#: templates/lAfix.php:11
+msgid "Tue."
+msgstr "dt."
+
+#: templates/lAfix.php:12
+msgid "Wed."
+msgstr "dc."
+
+#: templates/lAfix.php:13
+msgid "Thu."
+msgstr "dj."
+
+#: templates/lAfix.php:14
+msgid "Fri."
+msgstr "dv."
+
+#: templates/lAfix.php:15
+msgid "Sat."
+msgstr "ds."
+
+#: templates/lAfix.php:28
msgid "Jan."
msgstr "gen."
-#: templates/calendar.php:35
+#: templates/lAfix.php:29
msgid "Feb."
msgstr "febr."
-#: templates/calendar.php:35
+#: templates/lAfix.php:30
msgid "Mar."
msgstr "març"
-#: templates/calendar.php:35
+#: templates/lAfix.php:31
msgid "Apr."
msgstr "abr."
-#: templates/calendar.php:35
+#: templates/lAfix.php:32
msgid "May."
-msgstr ""
+msgstr "maig"
-#: templates/calendar.php:35
+#: templates/lAfix.php:33
msgid "Jun."
msgstr "juny"
-#: templates/calendar.php:35
+#: templates/lAfix.php:34
msgid "Jul."
msgstr "jul."
-#: templates/calendar.php:35
+#: templates/lAfix.php:35
msgid "Aug."
msgstr "ag."
-#: templates/calendar.php:35
+#: templates/lAfix.php:36
msgid "Sep."
msgstr "set."
-#: templates/calendar.php:35
+#: templates/lAfix.php:37
msgid "Oct."
msgstr "oct."
-#: templates/calendar.php:35
+#: templates/lAfix.php:38
msgid "Nov."
msgstr "nov."
-#: templates/calendar.php:35
+#: templates/lAfix.php:39
msgid "Dec."
msgstr "des."
-#: templates/calendar.php:36 templates/calendar.php:50
-#: templates/calendar.php:116
-msgid "Week"
-msgstr "Setmana"
-
-#: templates/calendar.php:37 templates/calendar.php:51
-msgid "Weeks"
-msgstr "Setmanes"
-
-#: templates/calendar.php:38
-msgid "More before {startdate}"
-msgstr ""
-
-#: templates/calendar.php:39
-msgid "More after {enddate}"
-msgstr ""
-
-#: templates/calendar.php:49
-msgid "Day"
-msgstr "Dia"
-
-#: templates/calendar.php:52
-msgid "Month"
-msgstr "Mes"
-
-#: templates/calendar.php:53
-msgid "List"
-msgstr ""
-
-#: templates/calendar.php:58
-msgid "Today"
-msgstr "Avui"
-
-#: templates/calendar.php:59
-msgid "Calendars"
-msgstr "Calendaris"
-
-#: templates/calendar.php:76 templates/calendar.php:94
-msgid "Time"
-msgstr "Hora"
-
-#: templates/calendar.php:169
-msgid "There was a fail, while parsing the file."
-msgstr "S'ha produït un error en analitzar el fitxer."
-
#: templates/part.choosecalendar.php:1
msgid "Choose active calendars"
msgstr "Seleccioneu calendaris actius"
#: templates/part.choosecalendar.php:15
msgid "New Calendar"
-msgstr ""
+msgstr "Calendari nou"
#: templates/part.choosecalendar.php:20
#: templates/part.choosecalendar.rowfields.php:4
msgid "CalDav Link"
-msgstr ""
+msgstr "Enllaç CalDav"
#: templates/part.choosecalendar.rowfields.php:4
msgid "Download"
msgstr "Baixa"
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.eventinfo.php:64
msgid "Edit"
msgstr "Edita"
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.editevent.php:8
+#: templates/part.editevent.php:9
msgid "Delete"
-msgstr ""
+msgstr "Esborra"
#: templates/part.editcalendar.php:9
msgid "New calendar"
-msgstr ""
+msgstr "Calendari nou"
#: templates/part.editcalendar.php:9
msgid "Edit calendar"
@@ -376,90 +457,181 @@ msgstr "Mostra el nom"
msgid "Active"
msgstr "Actiu"
-#: templates/part.editcalendar.php:29 templates/part.eventform.php:88
-#: templates/part.eventinfo.php:58
-msgid "Description"
-msgstr "Descripció"
-
-#: templates/part.editcalendar.php:35
+#: templates/part.editcalendar.php:29
msgid "Calendar color"
msgstr "Color del calendari"
-#: templates/part.editcalendar.php:41
+#: templates/part.editcalendar.php:42
msgid "Save"
-msgstr ""
+msgstr "Desa"
-#: templates/part.editcalendar.php:41 templates/part.editevent.php:7
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
#: templates/part.newevent.php:6
msgid "Submit"
-msgstr "Tramet"
+msgstr "Envia"
-#: templates/part.editcalendar.php:42
+#: templates/part.editcalendar.php:43
msgid "Cancel"
-msgstr ""
+msgstr "Cancel·la"
-#: templates/part.editevent.php:1 templates/part.eventinfo.php:1
+#: templates/part.editevent.php:1
msgid "Edit an event"
msgstr "Edició d'un esdeveniment"
-#: templates/part.eventform.php:3 templates/part.eventinfo.php:4
-msgid "Title"
-msgstr "Títol"
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr "Exporta"
#: templates/part.eventform.php:5
msgid "Title of the Event"
msgstr "Títol de l'esdeveniment"
-#: templates/part.eventform.php:9 templates/part.eventinfo.php:9
-msgid "Location"
-msgstr "Ubicació"
-
#: templates/part.eventform.php:11
-msgid "Location of the Event"
-msgstr "Ubicació de l'esdeveniment"
-
-#: templates/part.eventform.php:17 templates/part.eventinfo.php:16
msgid "Category"
msgstr "Categoria"
-#: templates/part.eventform.php:19
+#: templates/part.eventform.php:13
msgid "Select category"
-msgstr ""
+msgstr "Seleccioneu categoria"
-#: templates/part.eventform.php:45 templates/part.eventinfo.php:28
+#: templates/part.eventform.php:37
msgid "All Day Event"
msgstr "Esdeveniment de tot el dia"
-#: templates/part.eventform.php:49 templates/part.eventinfo.php:31
+#: templates/part.eventform.php:41
msgid "From"
msgstr "Des de"
-#: templates/part.eventform.php:57 templates/part.eventinfo.php:38
+#: templates/part.eventform.php:49
msgid "To"
msgstr "Fins a"
-#: templates/part.eventform.php:65 templates/part.eventinfo.php:44
+#: templates/part.eventform.php:57
+msgid "Advanced options"
+msgstr "Opcions avançades"
+
+#: templates/part.eventform.php:61
msgid "Repeat"
-msgstr "Repeteix"
+msgstr "Repetició"
+
+#: templates/part.eventform.php:68
+msgid "Advanced"
+msgstr "Avançat"
+
+#: templates/part.eventform.php:112
+msgid "Select weekdays"
+msgstr "Dies de la setmana seleccionats"
+
+#: templates/part.eventform.php:125 templates/part.eventform.php:138
+msgid "Select days"
+msgstr "Seleccionar dies"
+
+#: templates/part.eventform.php:130
+msgid "and the events day of year."
+msgstr "i dies d'esdeveniment de l'any."
+
+#: templates/part.eventform.php:143
+msgid "and the events day of month."
+msgstr "i dies d'esdeveniment del mes."
+
+#: templates/part.eventform.php:151
+msgid "Select months"
+msgstr "Seleccionar mesos"
+
+#: templates/part.eventform.php:164
+msgid "Select weeks"
+msgstr "Seleccionar setmanes"
+
+#: templates/part.eventform.php:169
+msgid "and the events week of year."
+msgstr "i setmanes d'esdeveniment de l'any."
+
+#: templates/part.eventform.php:175
+msgid "Interval"
+msgstr "Interval"
+
+#: templates/part.eventform.php:181
+msgid "End"
+msgstr "Final"
+
+#: templates/part.eventform.php:193
+msgid "occurrences"
+msgstr "aparicions"
+
+#: templates/part.eventform.php:208
+msgid "Location"
+msgstr "Ubicació"
+
+#: templates/part.eventform.php:210
+msgid "Location of the Event"
+msgstr "Ubicació de l'esdeveniment"
-#: templates/part.eventform.php:81 templates/part.eventinfo.php:51
-msgid "Attendees"
-msgstr "Assistents"
+#: templates/part.eventform.php:216
+msgid "Description"
+msgstr "Descripció"
-#: templates/part.eventform.php:89
+#: templates/part.eventform.php:218
msgid "Description of the Event"
msgstr "Descripció de l'esdeveniment"
-#: templates/part.eventinfo.php:63
-msgid "Close"
-msgstr "Tanca"
+#: templates/part.import.php:1
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the calendar"
+msgstr "Escolliu el calendari"
+
+#: templates/part.import.php:10
+msgid "create a new calendar"
+msgstr ""
+
+#: templates/part.import.php:15
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import"
+msgstr "Importa"
+
+#: templates/part.import.php:20
+msgid "Importing calendar"
+msgstr ""
+
+#: templates/part.import.php:23
+msgid "Calendar imported successfully"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Close Dialog"
+msgstr ""
#: templates/part.newevent.php:1
msgid "Create a new event"
msgstr "Crea un nou esdeveniment"
-#: templates/settings.php:11
+#: templates/settings.php:13
msgid "Timezone"
msgstr "Zona horària"
+#: templates/settings.php:30
+msgid "Check always for changes of the timezone"
+msgstr "Comprova sempre en els canvis de zona horària"
+
+#: templates/settings.php:32
+msgid "Timeformat"
+msgstr "Format de temps"
+
+#: templates/settings.php:34
+msgid "24h"
+msgstr "24"
+
+#: templates/settings.php:35
+msgid "12h"
+msgstr "12h"
+
+#: templates/settings.php:41
+msgid "Calendar CalDAV syncing address:"
+msgstr "Adreça de sincronització del calendari CalDAV:"
+
diff --git a/l10n/ca/contacts.po b/l10n/ca/contacts.po
index a9a23483bc3..28a7aa018f8 100644
--- a/l10n/ca/contacts.po
+++ b/l10n/ca/contacts.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <rcalvoi@yahoo.com>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 20:10+0200\n"
-"PO-Revision-Date: 2011-09-23 18:11+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Catalan (http://www.transifex.net/projects/p/owncloud/team/ca/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,164 +18,273 @@ msgstr ""
"Language: ca\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/addcard.php:31 ajax/addproperty.php:31 ajax/deletebook.php:32
-#: ajax/deletecard.php:32 ajax/deleteproperty.php:34 ajax/getdetails.php:32
-#: ajax/setproperty.php:32 ajax/showaddcard.php:30 ajax/showaddproperty.php:31
-#: ajax/showsetproperty.php:32 photo.php:32
-msgid "You need to log in."
+#: ajax/activation.php:17 ajax/updateaddressbook.php:26
+msgid "Error (de)activating addressbook."
msgstr ""
-#: ajax/addcard.php:37
-msgid "This is not your addressbook."
+#: ajax/addcard.php:79
+msgid "There was an error adding the contact."
msgstr ""
-#: ajax/addproperty.php:37 ajax/deletecard.php:39 ajax/deleteproperty.php:41
-#: ajax/getdetails.php:39 ajax/setproperty.php:38 ajax/showaddproperty.php:37
-#: ajax/showsetproperty.php:38 photo.php:39
-msgid "Contact could not be found."
+#: ajax/addproperty.php:39
+msgid "Cannot add empty property."
msgstr ""
-#: ajax/addproperty.php:43 ajax/deletebook.php:38 ajax/deletecard.php:45
-#: ajax/deleteproperty.php:47 ajax/getdetails.php:45 ajax/setproperty.php:44
-#: ajax/showaddproperty.php:43 ajax/showsetproperty.php:44 photo.php:45
-msgid "This is not your contact."
+#: ajax/addproperty.php:51
+msgid "At least one of the address fields has to be filled out."
msgstr ""
-#: ajax/addproperty.php:50 ajax/deleteproperty.php:54 ajax/getdetails.php:52
-#: ajax/setproperty.php:51 ajax/showsetproperty.php:51
-msgid "vCard could not be read."
+#: ajax/addproperty.php:77
+msgid "Error adding contact property."
msgstr ""
-#: ajax/deleteproperty.php:65 ajax/setproperty.php:62
-#: ajax/showsetproperty.php:62
-msgid "Information about vCard is incorrect. Please reload the page."
+#: ajax/createaddressbook.php:20
+msgid "Error adding addressbook."
msgstr ""
-#: photo.php:53
-msgid "This card is not RFC compatible."
+#: ajax/createaddressbook.php:26
+msgid "Error activating addressbook."
msgstr ""
-#: photo.php:90
-msgid "This card does not contain a photo."
+#: ajax/deleteproperty.php:40
+msgid "Error deleting contact property."
msgstr ""
-#: templates/index.php:8
-msgid "Add Contact"
+#: ajax/setproperty.php:79
+msgid "Error updating contact property."
msgstr ""
-#: templates/part.addcardform.php:5
-msgid "Group"
+#: ajax/updateaddressbook.php:20
+msgid "Error updating addressbook."
msgstr ""
-#: templates/part.addcardform.php:12 templates/part.property.php:3
-msgid "Name"
+#: appinfo/app.php:21 templates/settings.php:3
+msgid "Contacts"
msgstr ""
-#: templates/part.addcardform.php:14
-msgid "Create Contact"
-msgstr ""
+#: lib/app.php:42
+msgid "This is not your addressbook."
+msgstr "Aquesta no és la vostra llibreta d'adreces"
-#: templates/part.addpropertyform.php:4 templates/part.property.php:40
+#: lib/app.php:51 photo.php:34
+msgid "Contact could not be found."
+msgstr "No s'ha trobat el contacte."
+
+#: lib/app.php:79
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "La informació de la vCard és incorrecta. Carregueu la pàgina de nou."
+
+#: lib/app.php:91 templates/part.addcardform.php:54
+#: templates/part.property.php:45 templates/part.setpropertyform.php:7
msgid "Address"
-msgstr ""
+msgstr "Adreça"
-#: templates/part.addpropertyform.php:5
+#: lib/app.php:92 templates/part.addcardform.php:43
msgid "Telephone"
-msgstr ""
+msgstr "Telèfon"
-#: templates/part.addpropertyform.php:6 templates/part.property.php:22
+#: lib/app.php:93 templates/part.addcardform.php:37
+#: templates/part.property.php:16 templates/part.setpropertyform.php:51
msgid "Email"
-msgstr ""
+msgstr "Correu electrònic"
-#: templates/part.addpropertyform.php:7 templates/part.property.php:15
+#: lib/app.php:94 templates/part.addcardform.php:27
+#: templates/part.property.php:9 templates/part.setpropertyform.php:54
msgid "Organization"
-msgstr ""
+msgstr "Organització"
-#: templates/part.addpropertyform.php:17 templates/part.addpropertyform.php:32
+#: lib/app.php:106 lib/app.php:113
msgid "Work"
-msgstr ""
+msgstr "Feina"
-#: templates/part.addpropertyform.php:18 templates/part.addpropertyform.php:30
+#: lib/app.php:107 lib/app.php:111
msgid "Home"
+msgstr "Casa"
+
+#: lib/app.php:112
+msgid "Mobile"
+msgstr "Mòbil"
+
+#: lib/app.php:114
+msgid "Text"
+msgstr "Text"
+
+#: lib/app.php:115
+msgid "Voice"
+msgstr "Veu"
+
+#: lib/app.php:116
+msgid "Fax"
+msgstr "Fax"
+
+#: lib/app.php:117
+msgid "Video"
+msgstr "Vídeo"
+
+#: lib/app.php:118
+msgid "Pager"
+msgstr "Paginador"
+
+#: lib/search.php:22
+msgid "Contact"
msgstr ""
-#: templates/part.addpropertyform.php:20 templates/part.property.php:48
-#: templates/part.setpropertyform.php:5
-msgid "PO Box"
+#: photo.php:40
+msgid "This is not your contact."
+msgstr "Aquest contacte no és vostre."
+
+#: photo.php:48
+msgid "This card is not RFC compatible."
+msgstr "Aquesta targeta no és compatible amb RFC."
+
+#: photo.php:85
+msgid "This card does not contain a photo."
+msgstr "Aquesta targeta no conté foto."
+
+#: templates/index.php:6
+msgid "Add Contact"
+msgstr "Afegiu un contacte"
+
+#: templates/index.php:7
+msgid "Addressbooks"
msgstr ""
-#: templates/part.addpropertyform.php:21 templates/part.property.php:51
-#: templates/part.setpropertyform.php:6
-msgid "Extended"
+#: templates/part.addcardform.php:8
+msgid "Addressbook"
msgstr ""
-#: templates/part.addpropertyform.php:22 templates/part.property.php:54
-#: templates/part.setpropertyform.php:7
+#: templates/part.addcardform.php:21
+msgid "Name"
+msgstr "Nom"
+
+#: templates/part.addcardform.php:57 templates/part.details.php:43
+#: templates/part.details.php:79 templates/part.setpropertyform.php:10
+#: templates/part.setpropertyform.php:47
+msgid "Type"
+msgstr "Tipus"
+
+#: templates/part.addcardform.php:65 templates/part.details.php:49
+#: templates/part.setpropertyform.php:16
+msgid "PO Box"
+msgstr "Adreça Postal"
+
+#: templates/part.addcardform.php:72 templates/part.details.php:53
+#: templates/part.setpropertyform.php:20
+msgid "Extended"
+msgstr "Addicional"
+
+#: templates/part.addcardform.php:78 templates/part.details.php:57
+#: templates/part.setpropertyform.php:24
msgid "Street"
-msgstr ""
+msgstr "Carrer"
-#: templates/part.addpropertyform.php:23 templates/part.property.php:57
-#: templates/part.setpropertyform.php:8
+#: templates/part.addcardform.php:84 templates/part.details.php:61
+#: templates/part.setpropertyform.php:28
msgid "City"
-msgstr ""
+msgstr "Ciutat"
-#: templates/part.addpropertyform.php:24 templates/part.property.php:60
-#: templates/part.setpropertyform.php:9
+#: templates/part.addcardform.php:90 templates/part.details.php:65
+#: templates/part.setpropertyform.php:32
msgid "Region"
-msgstr ""
+msgstr "Comarca"
-#: templates/part.addpropertyform.php:25 templates/part.property.php:63
-#: templates/part.setpropertyform.php:10
+#: templates/part.addcardform.php:96 templates/part.details.php:69
+#: templates/part.setpropertyform.php:36
msgid "Zipcode"
-msgstr ""
+msgstr "Codi postal"
-#: templates/part.addpropertyform.php:26 templates/part.property.php:66
-#: templates/part.setpropertyform.php:11
+#: templates/part.addcardform.php:102 templates/part.details.php:73
+#: templates/part.setpropertyform.php:40
msgid "Country"
-msgstr ""
+msgstr "País"
-#: templates/part.addpropertyform.php:31
-msgid "Mobile"
-msgstr ""
+#: templates/part.addcardform.php:109
+msgid "Create Contact"
+msgstr "Crea un contacte"
-#: templates/part.addpropertyform.php:33
-msgid "Text"
-msgstr ""
+#: templates/part.chooseaddressbook.php:1
+msgid "Choose active Address Books"
+msgstr "Escolliu una llibreda d'adreces activa"
-#: templates/part.addpropertyform.php:34
-msgid "Voice"
-msgstr ""
+#: templates/part.chooseaddressbook.php:16
+msgid "New Address Book"
+msgstr "Nova llibreta d'adreces"
-#: templates/part.addpropertyform.php:35
-msgid "Fax"
-msgstr ""
+#: templates/part.chooseaddressbook.php:21
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "CardDav Link"
+msgstr "Enllaç CardDav"
-#: templates/part.addpropertyform.php:36
-msgid "Video"
-msgstr ""
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Download"
+msgstr "Baixa"
-#: templates/part.addpropertyform.php:37
-msgid "Pager"
-msgstr ""
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Edit"
+msgstr "Edita"
-#: templates/part.details.php:33
+#: templates/part.chooseaddressbook.rowfields.php:5
msgid "Delete"
+msgstr "Elimina"
+
+#: templates/part.details.php:3
+msgid "Download contact"
msgstr ""
+#: templates/part.details.php:4
+msgid "Delete contact"
+msgstr "Elimina el contacte"
+
#: templates/part.details.php:34
-msgid "Add Property"
+msgid "Add"
+msgstr "Afegeix"
+
+#: templates/part.editaddressbook.php:9
+msgid "New Addressbook"
msgstr ""
-#: templates/part.property.php:9
-msgid "Birthday"
+#: templates/part.editaddressbook.php:9
+msgid "Edit Addressbook"
msgstr ""
-#: templates/part.property.php:29
+#: templates/part.editaddressbook.php:12
+msgid "Displayname"
+msgstr "Nom a mostrar"
+
+#: templates/part.editaddressbook.php:23
+msgid "Active"
+msgstr "Actiu"
+
+#: templates/part.editaddressbook.php:29
+msgid "Save"
+msgstr "Desa"
+
+#: templates/part.editaddressbook.php:29
+msgid "Submit"
+msgstr "Envia"
+
+#: templates/part.editaddressbook.php:30
+msgid "Cancel"
+msgstr "Cancel·la"
+
+#: templates/part.property.php:3
+msgid "Birthday"
+msgstr "Aniversari"
+
+#: templates/part.property.php:23
+msgid "Preferred"
+msgstr "Preferit"
+
+#: templates/part.property.php:23 templates/part.setpropertyform.php:45
msgid "Phone"
-msgstr ""
+msgstr "Telèfon"
-#: templates/part.setpropertyform.php:17
-msgid "Edit"
+#: templates/part.setpropertyform.php:57
+msgid "Update"
+msgstr "Actualitza"
+
+#: templates/settings.php:4
+msgid "CardDAV syncing address:"
msgstr ""
diff --git a/l10n/ca/core.po b/l10n/ca/core.po
index cfbd4678f9f..adce94682bf 100644
--- a/l10n/ca/core.po
+++ b/l10n/ca/core.po
@@ -3,13 +3,13 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# <rcalvoi@yahoo.com>, 2011.
+# <rcalvoi@yahoo.com>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 18:17+0200\n"
-"PO-Revision-Date: 2011-09-05 13:54+0000\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-11 08:41+0000\n"
"Last-Translator: rogerc <rcalvoi@yahoo.com>\n"
"Language-Team: Catalan (http://www.transifex.net/projects/p/owncloud/team/ca/)\n"
"MIME-Version: 1.0\n"
@@ -18,6 +18,51 @@ msgstr ""
"Language: ca\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+#: lostpassword/index.php:24
+msgid "Owncloud password reset"
+msgstr "Restableix la contrasenya d'Owncloud"
+
+#: lostpassword/templates/email.php:1
+msgid "Use the following link to reset your password: {link}"
+msgstr "Useu l'enllaç següent per restablir la contrasenya: {enllaç}"
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr "Rebreu un enllaç al correu electrònic per reiniciar la contrasenya."
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Requested"
+msgstr "Sol·licitat"
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr "No s'ha pogut iniciar la sessió"
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:22
+#: templates/login.php:8
+msgid "Username"
+msgstr "Nom d'usuari"
+
+#: lostpassword/templates/lostpassword.php:14
+msgid "Request reset"
+msgstr "Sol·licita reinicialització"
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr "La vostra contrasenya s'ha reinicialitzat"
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr "A la pàgina d'inici de sessió"
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr "Contrasenya nova"
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr "Reinicialitza la contrasenya"
+
#: strings.php:5
msgid "Personal"
msgstr "Personal"
@@ -40,60 +85,56 @@ msgstr "Ajuda"
#: templates/404.php:12
msgid "Cloud not found"
-msgstr "No s'ha trobat el núvol"
+msgstr "No s'ha trobat al núvol"
#: templates/installation.php:20
msgid "Create an <strong>admin account</strong>"
msgstr "Crea un <strong>compte d'administrador</strong>"
-#: templates/installation.php:21
-msgid "Username"
-msgstr "Nom d'usuari"
-
-#: templates/installation.php:22
+#: templates/installation.php:26 templates/login.php:12
msgid "Password"
msgstr "Contrasenya"
-#: templates/installation.php:27
+#: templates/installation.php:32
+msgid "Advanced"
+msgstr "Avançat"
+
+#: templates/installation.php:34
+msgid "Data folder"
+msgstr "Carpeta de dades"
+
+#: templates/installation.php:41
msgid "Configure the database"
msgstr "Configura la base de dades"
-#: templates/installation.php:32 templates/installation.php:43
-#: templates/installation.php:53
+#: templates/installation.php:46 templates/installation.php:57
+#: templates/installation.php:67
msgid "will be used"
msgstr "s'usarà"
-#: templates/installation.php:64
+#: templates/installation.php:79
msgid "Database user"
msgstr "Usuari de la base de dades"
-#: templates/installation.php:65
+#: templates/installation.php:83
msgid "Database password"
msgstr "Contrasenya de la base de dades"
-#: templates/installation.php:66
+#: templates/installation.php:87
msgid "Database name"
msgstr "Nom de la base de dades"
-#: templates/installation.php:72
-msgid "Advanced"
-msgstr "Avançat"
-
-#: templates/installation.php:75
+#: templates/installation.php:93
msgid "Database host"
msgstr "Ordinador central de la base de dades"
-#: templates/installation.php:76
-msgid "Data folder"
-msgstr "Carpeta de dades"
-
-#: templates/installation.php:79
+#: templates/installation.php:98
msgid "Finish setup"
msgstr "Acaba la configuració"
#: templates/layout.guest.php:35
-msgid "gives you freedom and control over your own data"
-msgstr "us dóna llibertat i control sobre les seves dades"
+msgid "web services under your control"
+msgstr "serveis web controlats per vós"
#: templates/layout.user.php:34
msgid "Log out"
@@ -103,38 +144,22 @@ msgstr "Sortir"
msgid "Settings"
msgstr "Arranjament"
-#: templates/login.php:4
+#: templates/login.php:5
msgid "Lost your password?"
msgstr "Heu perdut la contrasenya?"
-#: templates/login.php:9 templates/login.php:13
+#: templates/login.php:15
msgid "remember"
msgstr "recorda'm"
+#: templates/login.php:16
+msgid "Log in"
+msgstr "Inici de sessió"
+
#: templates/logout.php:1
msgid "You are logged out."
msgstr "Heu tancat la sessió."
-#: templates/lostpassword.php:3
-msgid "You will receive a link to reset your password via Email."
-msgstr "Rebreu un enllaç per correu electrònic per restablir la contrasenya"
-
-#: templates/lostpassword.php:5
-msgid "Requested"
-msgstr "Sol·licitat"
-
-#: templates/lostpassword.php:8
-msgid "Login failed!"
-msgstr "L'inici de sessió ha fallat!"
-
-#: templates/lostpassword.php:10
-msgid "Username or Email"
-msgstr "Nom d'usuari o correu electrònic"
-
-#: templates/lostpassword.php:11
-msgid "Request reset"
-msgstr "Sol.licitud de restabliment"
-
#: templates/part.pagenavi.php:3
msgid "prev"
msgstr "anterior"
@@ -143,16 +168,4 @@ msgstr "anterior"
msgid "next"
msgstr "següent"
-#: templates/resetpassword.php:4
-msgid "Your password was reset"
-msgstr "La vostra contrasenya s'ha restablert"
-
-#: templates/resetpassword.php:6
-msgid "New password"
-msgstr "Nova contrasenya"
-
-#: templates/resetpassword.php:7
-msgid "Reset password"
-msgstr "Restabliment de la contrasenya"
-
diff --git a/l10n/ca/files.po b/l10n/ca/files.po
index faf3ca5063e..5fe59dd672a 100644
--- a/l10n/ca/files.po
+++ b/l10n/ca/files.po
@@ -3,14 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# <rcalvoi@yahoo.com>, 2011.
+# <rcalvoi@yahoo.com>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-11 08:48+0000\n"
+"Last-Translator: rogerc <rcalvoi@yahoo.com>\n"
"Language-Team: Catalan (http://www.transifex.net/projects/p/owncloud/team/ca/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,33 +18,37 @@ msgstr ""
"Language: ca\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/upload.php:24
+#: ajax/upload.php:19
msgid "There is no error, the file uploaded with success"
-msgstr ""
+msgstr "El fitxer s'ha pujat correctament"
-#: ajax/upload.php:25
+#: ajax/upload.php:20
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr ""
+"El fitxer de pujada excedeix la directiva upload_max_filesize establerta a "
+"php.ini"
-#: ajax/upload.php:26
+#: ajax/upload.php:21
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
+"El fitxer de pujada excedeix la directiva MAX_FILE_SIZE especificada al "
+"formulari HTML"
-#: ajax/upload.php:27
+#: ajax/upload.php:22
msgid "The uploaded file was only partially uploaded"
-msgstr ""
+msgstr "El fitxer només s'ha pujat parcialment"
-#: ajax/upload.php:28
+#: ajax/upload.php:23
msgid "No file was uploaded"
-msgstr ""
+msgstr "El fitxer no s'ha pujat"
-#: ajax/upload.php:29
+#: ajax/upload.php:24
msgid "Missing a temporary folder"
-msgstr ""
+msgstr "S'ha perdut un fitxer temporal"
-#: appinfo/app.php:7
+#: appinfo/app.php:8
msgid "Files"
msgstr "Fitxers"
@@ -52,48 +56,60 @@ msgstr "Fitxers"
msgid "Maximum upload size"
msgstr "Mida màxima de pujada"
+#: templates/index.php:7
+msgid "New"
+msgstr "Nou"
+
#: templates/index.php:10
+msgid "Text file"
+msgstr "Fitxer de text"
+
+#: templates/index.php:11
+msgid "Folder"
+msgstr "Carpeta"
+
+#: templates/index.php:12
+msgid "From the web"
+msgstr "Des de la web"
+
+#: templates/index.php:22
msgid "Upload"
msgstr "Puja"
-#: templates/index.php:17
-msgid "New Folder"
-msgstr "Carpeta nova"
-
-#: templates/index.php:31
+#: templates/index.php:35
msgid "Nothing in here. Upload something!"
msgstr "Res per aquí. Pugeu alguna cosa!"
-#: templates/index.php:39
+#: templates/index.php:43
msgid "Name"
msgstr "Nom"
-#: templates/index.php:41
+#: templates/index.php:45
msgid "Download"
-msgstr "Descarrega"
+msgstr "Baixa"
-#: templates/index.php:45
+#: templates/index.php:49
msgid "Size"
msgstr "Mida"
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Modified"
msgstr "Modificat"
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Delete"
msgstr "Esborra"
-#: templates/index.php:54
+#: templates/index.php:58
msgid "Upload too large"
msgstr "La pujada és massa gran"
-#: templates/index.php:56
+#: templates/index.php:60
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr ""
"Els fitxers que esteu intentant pujar excedeixen la mida màxima de pujada "
-"d'aquest servidor"
+"del servidor"
diff --git a/l10n/ca/gallery.po b/l10n/ca/gallery.po
new file mode 100644
index 00000000000..b2c6ad5819a
--- /dev/null
+++ b/l10n/ca/gallery.po
@@ -0,0 +1,32 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:48+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Catalan (http://www.transifex.net/projects/p/owncloud/team/ca/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ca\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:41
+msgid "Gallery"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Rescan"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+
diff --git a/l10n/ca/media.po b/l10n/ca/media.po
index b0754f01964..7f400afcfd1 100644
--- a/l10n/ca/media.po
+++ b/l10n/ca/media.po
@@ -2,14 +2,15 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
+# Translators:
# <rcalvoi@yahoo.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
-"Report-Msgid-Bugs-To: http://bugs.kde.org/buglist.cgi?product=owncloud\n"
-"POT-Creation-Date: 2011-08-23 11:09+0200\n"
-"PO-Revision-Date: 2011-08-21 10:56+0000\n"
-"Last-Translator: rogerc <rcalvoi@yahoo.com>\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Catalan (http://www.transifex.net/projects/p/owncloud/team/ca/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,15 +18,15 @@ msgstr ""
"Language: ca\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: appinfo/app.php:31
+#: appinfo/app.php:32
msgid "Music"
msgstr "Música"
-#: templates/music.php:3
+#: templates/music.php:3 templates/player.php:13
msgid "Play"
msgstr "Reprodueix"
-#: templates/music.php:4 templates/music.php:30
+#: templates/music.php:4 templates/music.php:26 templates/player.php:14
msgid "Pause"
msgstr "Pausa"
@@ -33,7 +34,7 @@ msgstr "Pausa"
msgid "Previous"
msgstr "Anterior"
-#: templates/music.php:6
+#: templates/music.php:6 templates/player.php:15
msgid "Next"
msgstr "Següent"
@@ -45,13 +46,9 @@ msgstr "Mut"
msgid "Unmute"
msgstr "Activa el so"
-#: templates/music.php:28
-msgid "Songs scanned"
-msgstr "Cançons escanejades"
-
-#: templates/music.php:29
+#: templates/music.php:25
msgid "Rescan Collection"
-msgstr "Escaneja de nou la col·lecció"
+msgstr "Explora de nou la col·lecció"
#: templates/music.php:37
msgid "Artist"
diff --git a/l10n/ca/settings.po b/l10n/ca/settings.po
index e976e434c85..9467158bd2f 100644
--- a/l10n/ca/settings.po
+++ b/l10n/ca/settings.po
@@ -2,13 +2,14 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
-# <rcalvoi@yahoo.com>, 2011.
+# Translators:
+# <rcalvoi@yahoo.com>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
-"Report-Msgid-Bugs-To: http://bugs.kde.org/buglist.cgi?product=owncloud\n"
-"POT-Creation-Date: 2011-08-28 01:11+0200\n"
-"PO-Revision-Date: 2011-08-23 15:33+0000\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-11 09:47+0000\n"
"Last-Translator: rogerc <rcalvoi@yahoo.com>\n"
"Language-Team: Catalan (http://www.transifex.net/projects/p/owncloud/team/ca/)\n"
"MIME-Version: 1.0\n"
@@ -17,29 +18,33 @@ msgstr ""
"Language: ca\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/openid.php:13 ajax/setlanguage.php:13
-msgid "Authentication error"
-msgstr "Error d'autenticació"
+#: ajax/lostpassword.php:14
+msgid "email Changed"
+msgstr "el correu electrònic ha canviat"
-#: ajax/openid.php:21
-msgid "OpenID Changed"
-msgstr "OpenID ha canviat"
-
-#: ajax/openid.php:23 ajax/setlanguage.php:23
+#: ajax/lostpassword.php:16 ajax/openid.php:17 ajax/setlanguage.php:16
msgid "Invalid request"
msgstr "Sol.licitud no vàlida"
-#: ajax/setlanguage.php:21
+#: ajax/openid.php:15
+msgid "OpenID Changed"
+msgstr "OpenID ha canviat"
+
+#: ajax/setlanguage.php:14
msgid "Language changed"
msgstr "S'ha canviat l'idioma"
+#: templates/admin.php:13
+msgid "Log level"
+msgstr "Nivell de registres"
+
#: templates/apps.php:8
msgid "Add your application"
msgstr "Afegir una aplicació"
#: templates/apps.php:21
msgid "Select an App"
-msgstr "Sel·leccioneu una aplicació"
+msgstr "Seleccioneu una aplicació"
#: templates/apps.php:23
msgid "-licensed"
@@ -47,21 +52,21 @@ msgstr "- amb llicència"
#: templates/apps.php:23
msgid "by"
-msgstr "per"
+msgstr "de"
#: templates/help.php:8
msgid "Ask a question"
msgstr "Feu una pregunta"
-#: templates/help.php:17
+#: templates/help.php:20
msgid "Problems connecting to help database."
-msgstr "Problemes per connectar-se a la base de dades d'ajuda."
+msgstr "Problemes per connectar amb la base de dades d'ajuda."
-#: templates/help.php:18
+#: templates/help.php:21
msgid "Go there manually."
msgstr "Vés-hi manualment."
-#: templates/help.php:26
+#: templates/help.php:29
msgid "Answer"
msgstr "Resposta"
@@ -77,9 +82,13 @@ msgstr "del disponible"
msgid "Your password got changed"
msgstr "La contrasenya ha canviat"
+#: templates/personal.php:14
+msgid "Unable to change your password"
+msgstr "No s'ha pogut canviar la contrasenya"
+
#: templates/personal.php:15
msgid "Current password"
-msgstr "contrasenya actual"
+msgstr "Contrasenya actual"
#: templates/personal.php:16
msgid "New password"
@@ -91,38 +100,54 @@ msgstr "mostra"
#: templates/personal.php:18
msgid "Change password"
-msgstr "canvia la contrasenya"
+msgstr "Canvia la contrasenya"
#: templates/personal.php:24
+msgid "Email"
+msgstr "Correu electrònic"
+
+#: templates/personal.php:25
+msgid "Your email address"
+msgstr "Correu electrònic"
+
+#: templates/personal.php:26
+msgid "Fill in an email address to enable password recovery"
+msgstr "Ompliu el correu electrònic per activar la recuperació de contrasenya"
+
+#: templates/personal.php:32 templates/personal.php:33
msgid "Language"
msgstr "Idioma"
-#: templates/personal.php:30
-msgid "Help translating"
-msgstr "Ajudeu amb la traducció"
+#: templates/personal.php:38
+msgid "Help translate"
+msgstr "Ajudeu-nos amb la traducció"
-#: templates/personal.php:36
+#: templates/personal.php:45
msgid "use this address to connect to your ownCloud in your file manager"
msgstr ""
"useu aquesta adreça per connectar-vos a ownCloud des del gestor de fitxers"
-#: templates/users.php:16
+#: templates/users.php:15 templates/users.php:30
msgid "Name"
msgstr "Nom"
-#: templates/users.php:17
+#: templates/users.php:16 templates/users.php:31
msgid "Password"
msgstr "Contrasenya"
-#: templates/users.php:18 templates/users.php:36
+#: templates/users.php:17 templates/users.php:32 templates/users.php:46
msgid "Groups"
msgstr "Grups"
-#: templates/users.php:24
+#: templates/users.php:23
msgid "Create"
msgstr "Crea"
-#: templates/users.php:48
+#: templates/users.php:33
+msgid "Quota"
+msgstr "Quota"
+
+#: templates/users.php:58
msgid "Delete"
msgstr "Esborra"
diff --git a/l10n/cs_CZ/calendar.po b/l10n/cs_CZ/calendar.po
index 071b0bde711..fc658fb75fa 100644
--- a/l10n/cs_CZ/calendar.po
+++ b/l10n/cs_CZ/calendar.po
@@ -3,13 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Jan Krejci <krejca85@gmail.com>, 2011, 2012.
+# Martin <fireball@atlas.cz>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Czech (Czech Republic) (http://www.transifex.net/projects/p/owncloud/team/cs_CZ/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,448 +19,620 @@ msgstr ""
"Language: cs_CZ\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n"
-#: ajax/createcalendar.php:18 ajax/settimezone.php:19
-#: ajax/updatecalendar.php:18
-msgid "Authentication error"
-msgstr ""
-
-#: ajax/editeventform.php:25
-msgid "Wrong calendar"
-msgstr ""
+#: ajax/guesstimezone.php:42
+msgid "New Timezone:"
+msgstr "Nová časová zóna:"
-#: ajax/settimezone.php:27
+#: ajax/settimezone.php:22
msgid "Timezone changed"
-msgstr ""
+msgstr "Časová zóna byla změněna"
-#: ajax/settimezone.php:29
+#: ajax/settimezone.php:24
msgid "Invalid request"
-msgstr ""
+msgstr "Chybný požadavek"
-#: appinfo/app.php:19 templates/part.eventform.php:27
-#: templates/part.eventinfo.php:18
+#: appinfo/app.php:20 templates/calendar.php:13
+#: templates/part.eventform.php:20
msgid "Calendar"
-msgstr ""
+msgstr "Kalendář"
-#: lib/object.php:292
+#: lib/app.php:19
+msgid "Wrong calendar"
+msgstr "Nesprávný kalendář"
+
+#: lib/app.php:60 lib/object.php:332
msgid "Birthday"
-msgstr ""
+msgstr "Narozeniny"
-#: lib/object.php:293
+#: lib/app.php:61 lib/object.php:333
msgid "Business"
-msgstr ""
+msgstr "Pracovní"
-#: lib/object.php:294
+#: lib/app.php:62 lib/object.php:334
msgid "Call"
-msgstr ""
+msgstr "Volat"
-#: lib/object.php:295
+#: lib/app.php:63 lib/object.php:335
msgid "Clients"
-msgstr ""
+msgstr "Klienti"
-#: lib/object.php:296
+#: lib/app.php:64 lib/object.php:336
msgid "Deliverer"
-msgstr ""
+msgstr "Doručovatel"
-#: lib/object.php:297
+#: lib/app.php:65 lib/object.php:337
msgid "Holidays"
-msgstr ""
+msgstr "Prázdniny"
-#: lib/object.php:298
+#: lib/app.php:66 lib/object.php:338
msgid "Ideas"
-msgstr ""
+msgstr "Nápady"
-#: lib/object.php:299
+#: lib/app.php:67 lib/object.php:339
msgid "Journey"
-msgstr ""
+msgstr "Cesta"
-#: lib/object.php:300
+#: lib/app.php:68 lib/object.php:340
msgid "Jubilee"
-msgstr ""
+msgstr "Jubileum"
-#: lib/object.php:301
+#: lib/app.php:69 lib/object.php:341
msgid "Meeting"
-msgstr ""
+msgstr "Schůzka"
-#: lib/object.php:302
+#: lib/app.php:70 lib/object.php:342
msgid "Other"
-msgstr ""
+msgstr "Další"
-#: lib/object.php:303
+#: lib/app.php:71 lib/object.php:343
msgid "Personal"
-msgstr ""
+msgstr "Osobní"
-#: lib/object.php:304
+#: lib/app.php:72 lib/object.php:344
msgid "Projects"
-msgstr ""
+msgstr "Projekty"
-#: lib/object.php:305
+#: lib/app.php:73 lib/object.php:345
msgid "Questions"
-msgstr ""
+msgstr "Dotazy"
-#: lib/object.php:306
+#: lib/app.php:74 lib/object.php:346
msgid "Work"
-msgstr ""
+msgstr "Práce"
-#: lib/object.php:313
+#: lib/object.php:353
msgid "Does not repeat"
-msgstr ""
+msgstr "Neopakuje se"
-#: lib/object.php:314
+#: lib/object.php:354
msgid "Daily"
-msgstr ""
+msgstr "Denně"
-#: lib/object.php:315
+#: lib/object.php:355
msgid "Weekly"
-msgstr ""
+msgstr "Týdně"
-#: lib/object.php:316
+#: lib/object.php:356
msgid "Every Weekday"
-msgstr ""
+msgstr "Každý všední den"
-#: lib/object.php:317
+#: lib/object.php:357
msgid "Bi-Weekly"
-msgstr ""
+msgstr "Jednou za dva týdny"
-#: lib/object.php:318
+#: lib/object.php:358
msgid "Monthly"
-msgstr ""
+msgstr "Měsíčně"
-#: lib/object.php:319
+#: lib/object.php:359
msgid "Yearly"
-msgstr ""
+msgstr "Ročně"
-#: lib/object.php:337
-msgid "Not an array"
-msgstr ""
+#: lib/object.php:366
+msgid "never"
+msgstr "nikdy"
-#: templates/calendar.php:3
-msgid "All day"
-msgstr ""
+#: lib/object.php:367
+msgid "by occurrences"
+msgstr "podle výskytu"
-#: templates/calendar.php:32
-msgid "Sunday"
-msgstr ""
+#: lib/object.php:368
+msgid "by date"
+msgstr "podle data"
+
+#: lib/object.php:375
+msgid "by monthday"
+msgstr "podle dne v měsíci"
-#: templates/calendar.php:32
+#: lib/object.php:376
+msgid "by weekday"
+msgstr "podle dne v týdnu"
+
+#: lib/object.php:383 templates/lAfix.php:3
msgid "Monday"
-msgstr ""
+msgstr "Pondělí"
-#: templates/calendar.php:32
+#: lib/object.php:384 templates/lAfix.php:4
msgid "Tuesday"
-msgstr ""
+msgstr "Úterý"
-#: templates/calendar.php:32
+#: lib/object.php:385 templates/lAfix.php:5
msgid "Wednesday"
-msgstr ""
+msgstr "Středa"
-#: templates/calendar.php:32
+#: lib/object.php:386 templates/lAfix.php:6
msgid "Thursday"
-msgstr ""
+msgstr "Čtvrtek"
-#: templates/calendar.php:32
+#: lib/object.php:387 templates/lAfix.php:7
msgid "Friday"
-msgstr ""
+msgstr "Pátek"
-#: templates/calendar.php:32
+#: lib/object.php:388 templates/lAfix.php:8
msgid "Saturday"
-msgstr ""
+msgstr "Sobota"
-#: templates/calendar.php:33
-msgid "Sun."
-msgstr ""
+#: lib/object.php:389 templates/lAfix.php:2
+msgid "Sunday"
+msgstr "Neděle"
-#: templates/calendar.php:33
-msgid "Mon."
-msgstr ""
+#: lib/object.php:396
+msgid "events week of month"
+msgstr "týdenní události v měsíci"
-#: templates/calendar.php:33
-msgid "Tue."
-msgstr ""
+#: lib/object.php:397
+msgid "first"
+msgstr "první"
-#: templates/calendar.php:33
-msgid "Wed."
-msgstr ""
+#: lib/object.php:398
+msgid "second"
+msgstr "druhý"
-#: templates/calendar.php:33
-msgid "Thu."
-msgstr ""
+#: lib/object.php:399
+msgid "third"
+msgstr "třetí"
-#: templates/calendar.php:33
-msgid "Fri."
-msgstr ""
+#: lib/object.php:400
+msgid "fourth"
+msgstr "čtvrtý"
-#: templates/calendar.php:33
-msgid "Sat."
-msgstr ""
+#: lib/object.php:401
+msgid "fifth"
+msgstr "pátý"
+
+#: lib/object.php:402
+msgid "last"
+msgstr "poslední"
-#: templates/calendar.php:34
+#: lib/object.php:424 templates/lAfix.php:16
msgid "January"
-msgstr ""
+msgstr "Leden"
-#: templates/calendar.php:34
+#: lib/object.php:425 templates/lAfix.php:17
msgid "February"
-msgstr ""
+msgstr "Únor"
-#: templates/calendar.php:34
+#: lib/object.php:426 templates/lAfix.php:18
msgid "March"
-msgstr ""
+msgstr "Břeyen"
-#: templates/calendar.php:34
+#: lib/object.php:427 templates/lAfix.php:19
msgid "April"
-msgstr ""
+msgstr "Duben"
-#: templates/calendar.php:34
+#: lib/object.php:428 templates/lAfix.php:20
msgid "May"
-msgstr ""
+msgstr "Květen"
-#: templates/calendar.php:34
+#: lib/object.php:429 templates/lAfix.php:21
msgid "June"
-msgstr ""
+msgstr "Červen"
-#: templates/calendar.php:34
+#: lib/object.php:430 templates/lAfix.php:22
msgid "July"
-msgstr ""
+msgstr "Červenec"
-#: templates/calendar.php:34
+#: lib/object.php:431 templates/lAfix.php:23
msgid "August"
-msgstr ""
+msgstr "Srpen"
-#: templates/calendar.php:34
+#: lib/object.php:432 templates/lAfix.php:24
msgid "September"
-msgstr ""
+msgstr "Září"
-#: templates/calendar.php:34
+#: lib/object.php:433 templates/lAfix.php:25
msgid "October"
-msgstr ""
+msgstr "Říjen"
-#: templates/calendar.php:34
+#: lib/object.php:434 templates/lAfix.php:26
msgid "November"
-msgstr ""
+msgstr "Listopad"
-#: templates/calendar.php:34
+#: lib/object.php:435 templates/lAfix.php:27
msgid "December"
-msgstr ""
+msgstr "Prosinec"
-#: templates/calendar.php:35
-msgid "Jan."
-msgstr ""
+#: lib/object.php:441
+msgid "by events date"
+msgstr "podle data události"
-#: templates/calendar.php:35
-msgid "Feb."
-msgstr ""
-
-#: templates/calendar.php:35
-msgid "Mar."
-msgstr ""
+#: lib/object.php:442
+msgid "by yearday(s)"
+msgstr "po dni (dnech)"
-#: templates/calendar.php:35
-msgid "Apr."
-msgstr ""
+#: lib/object.php:443
+msgid "by weeknumber(s)"
+msgstr "podle čísel týdnů"
-#: templates/calendar.php:35
-msgid "May."
-msgstr ""
+#: lib/object.php:444
+msgid "by day and month"
+msgstr "podle dne a měsíce"
-#: templates/calendar.php:35
-msgid "Jun."
-msgstr ""
+#: lib/object.php:467
+msgid "Not an array"
+msgstr "Není zařazeno"
-#: templates/calendar.php:35
-msgid "Jul."
-msgstr ""
+#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+msgid "Date"
+msgstr "Datum"
-#: templates/calendar.php:35
-msgid "Aug."
-msgstr ""
+#: lib/search.php:40
+msgid "Cal."
+msgstr "Kal."
-#: templates/calendar.php:35
-msgid "Sep."
-msgstr ""
+#: templates/calendar.php:10
+msgid "All day"
+msgstr "Celý den"
-#: templates/calendar.php:35
-msgid "Oct."
-msgstr ""
+#: templates/calendar.php:11
+msgid "Missing fields"
+msgstr "Chybějící pole"
-#: templates/calendar.php:35
-msgid "Nov."
-msgstr ""
+#: templates/calendar.php:12 templates/part.eventform.php:3
+msgid "Title"
+msgstr "Název"
-#: templates/calendar.php:35
-msgid "Dec."
-msgstr ""
+#: templates/calendar.php:14
+msgid "From Date"
+msgstr "Od data"
-#: templates/calendar.php:36 templates/calendar.php:50
-#: templates/calendar.php:116
-msgid "Week"
-msgstr ""
+#: templates/calendar.php:15
+msgid "From Time"
+msgstr "Od"
-#: templates/calendar.php:37 templates/calendar.php:51
-msgid "Weeks"
-msgstr ""
+#: templates/calendar.php:16
+msgid "To Date"
+msgstr "Do data"
-#: templates/calendar.php:38
-msgid "More before {startdate}"
-msgstr ""
+#: templates/calendar.php:17
+msgid "To Time"
+msgstr "Do"
-#: templates/calendar.php:39
-msgid "More after {enddate}"
-msgstr ""
+#: templates/calendar.php:18
+msgid "The event ends before it starts"
+msgstr "Akce končí před zahájením"
-#: templates/calendar.php:49
-msgid "Day"
-msgstr ""
+#: templates/calendar.php:19
+msgid "There was a database fail"
+msgstr "Chyba v databázi"
#: templates/calendar.php:52
-msgid "Month"
-msgstr ""
+msgid "Week"
+msgstr "týden"
#: templates/calendar.php:53
+msgid "Month"
+msgstr "měsíc"
+
+#: templates/calendar.php:54
msgid "List"
-msgstr ""
+msgstr "Seznam"
-#: templates/calendar.php:58
+#: templates/calendar.php:59
msgid "Today"
-msgstr ""
+msgstr "dnes"
-#: templates/calendar.php:59
+#: templates/calendar.php:60
msgid "Calendars"
-msgstr ""
-
-#: templates/calendar.php:76 templates/calendar.php:94
-msgid "Time"
-msgstr ""
+msgstr "Kalendáře"
-#: templates/calendar.php:169
+#: templates/calendar.php:78
msgid "There was a fail, while parsing the file."
-msgstr ""
+msgstr "Chyba při převodu souboru"
+
+#: templates/lAfix.php:9
+msgid "Sun."
+msgstr "Ne"
+
+#: templates/lAfix.php:10
+msgid "Mon."
+msgstr "Po"
+
+#: templates/lAfix.php:11
+msgid "Tue."
+msgstr "Út"
+
+#: templates/lAfix.php:12
+msgid "Wed."
+msgstr "St"
+
+#: templates/lAfix.php:13
+msgid "Thu."
+msgstr "Čt"
+
+#: templates/lAfix.php:14
+msgid "Fri."
+msgstr "Pá"
+
+#: templates/lAfix.php:15
+msgid "Sat."
+msgstr "So"
+
+#: templates/lAfix.php:28
+msgid "Jan."
+msgstr "Led."
+
+#: templates/lAfix.php:29
+msgid "Feb."
+msgstr "Úno."
+
+#: templates/lAfix.php:30
+msgid "Mar."
+msgstr "Bře."
+
+#: templates/lAfix.php:31
+msgid "Apr."
+msgstr "Dub."
+
+#: templates/lAfix.php:32
+msgid "May."
+msgstr "Kvě."
+
+#: templates/lAfix.php:33
+msgid "Jun."
+msgstr "Čer."
+
+#: templates/lAfix.php:34
+msgid "Jul."
+msgstr "Čec."
+
+#: templates/lAfix.php:35
+msgid "Aug."
+msgstr "Srp."
+
+#: templates/lAfix.php:36
+msgid "Sep."
+msgstr "Zář."
+
+#: templates/lAfix.php:37
+msgid "Oct."
+msgstr "Říj."
+
+#: templates/lAfix.php:38
+msgid "Nov."
+msgstr "Lis."
+
+#: templates/lAfix.php:39
+msgid "Dec."
+msgstr "Pro."
#: templates/part.choosecalendar.php:1
msgid "Choose active calendars"
-msgstr ""
+msgstr "Vybrat aktivní kalendář"
#: templates/part.choosecalendar.php:15
msgid "New Calendar"
-msgstr ""
+msgstr "Nový kalendář"
#: templates/part.choosecalendar.php:20
#: templates/part.choosecalendar.rowfields.php:4
msgid "CalDav Link"
-msgstr ""
+msgstr "Odkaz CalDav"
#: templates/part.choosecalendar.rowfields.php:4
msgid "Download"
-msgstr ""
+msgstr "Stáhnout"
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.eventinfo.php:64
msgid "Edit"
-msgstr ""
+msgstr "Editovat"
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.editevent.php:8
+#: templates/part.editevent.php:9
msgid "Delete"
-msgstr ""
+msgstr "Odstranit"
#: templates/part.editcalendar.php:9
msgid "New calendar"
-msgstr ""
+msgstr "Nový kalendář"
#: templates/part.editcalendar.php:9
msgid "Edit calendar"
-msgstr ""
+msgstr "Editovat kalendář"
#: templates/part.editcalendar.php:12
msgid "Displayname"
-msgstr ""
+msgstr "Zobrazené jméno"
#: templates/part.editcalendar.php:23
msgid "Active"
-msgstr ""
-
-#: templates/part.editcalendar.php:29 templates/part.eventform.php:88
-#: templates/part.eventinfo.php:58
-msgid "Description"
-msgstr ""
+msgstr "Aktivní"
-#: templates/part.editcalendar.php:35
+#: templates/part.editcalendar.php:29
msgid "Calendar color"
-msgstr ""
+msgstr "Barva kalendáře"
-#: templates/part.editcalendar.php:41
+#: templates/part.editcalendar.php:42
msgid "Save"
-msgstr ""
+msgstr "Uložit"
-#: templates/part.editcalendar.php:41 templates/part.editevent.php:7
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
#: templates/part.newevent.php:6
msgid "Submit"
-msgstr ""
+msgstr "Potvrdit"
-#: templates/part.editcalendar.php:42
+#: templates/part.editcalendar.php:43
msgid "Cancel"
-msgstr ""
+msgstr "Storno"
-#: templates/part.editevent.php:1 templates/part.eventinfo.php:1
+#: templates/part.editevent.php:1
msgid "Edit an event"
-msgstr ""
+msgstr "Editovat událost"
-#: templates/part.eventform.php:3 templates/part.eventinfo.php:4
-msgid "Title"
-msgstr ""
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr "Export"
#: templates/part.eventform.php:5
msgid "Title of the Event"
-msgstr ""
-
-#: templates/part.eventform.php:9 templates/part.eventinfo.php:9
-msgid "Location"
-msgstr ""
+msgstr "Název události"
#: templates/part.eventform.php:11
-msgid "Location of the Event"
-msgstr ""
-
-#: templates/part.eventform.php:17 templates/part.eventinfo.php:16
msgid "Category"
-msgstr ""
+msgstr "Kategorie"
-#: templates/part.eventform.php:19
+#: templates/part.eventform.php:13
msgid "Select category"
-msgstr ""
+msgstr "Vyberte kategorii"
-#: templates/part.eventform.php:45 templates/part.eventinfo.php:28
+#: templates/part.eventform.php:37
msgid "All Day Event"
-msgstr ""
+msgstr "Celodenní událost"
-#: templates/part.eventform.php:49 templates/part.eventinfo.php:31
+#: templates/part.eventform.php:41
msgid "From"
-msgstr ""
+msgstr "od"
-#: templates/part.eventform.php:57 templates/part.eventinfo.php:38
+#: templates/part.eventform.php:49
msgid "To"
-msgstr ""
+msgstr "do"
-#: templates/part.eventform.php:65 templates/part.eventinfo.php:44
+#: templates/part.eventform.php:57
+msgid "Advanced options"
+msgstr "Pokročilé volby"
+
+#: templates/part.eventform.php:61
msgid "Repeat"
+msgstr "Opakovat"
+
+#: templates/part.eventform.php:68
+msgid "Advanced"
+msgstr "Pokročilé"
+
+#: templates/part.eventform.php:112
+msgid "Select weekdays"
+msgstr "Vybrat dny v týdnu"
+
+#: templates/part.eventform.php:125 templates/part.eventform.php:138
+msgid "Select days"
+msgstr "Vybrat dny"
+
+#: templates/part.eventform.php:130
+msgid "and the events day of year."
+msgstr "a denní události v roce"
+
+#: templates/part.eventform.php:143
+msgid "and the events day of month."
+msgstr "a denní události v měsíci"
+
+#: templates/part.eventform.php:151
+msgid "Select months"
+msgstr "Vybrat měsíce"
+
+#: templates/part.eventform.php:164
+msgid "Select weeks"
+msgstr "Vybrat týdny"
+
+#: templates/part.eventform.php:169
+msgid "and the events week of year."
+msgstr "a týden s událostmi v roce"
+
+#: templates/part.eventform.php:175
+msgid "Interval"
+msgstr "Interval"
+
+#: templates/part.eventform.php:181
+msgid "End"
+msgstr "Konec"
+
+#: templates/part.eventform.php:193
+msgid "occurrences"
+msgstr "výskyty"
+
+#: templates/part.eventform.php:208
+msgid "Location"
+msgstr "Umístění"
+
+#: templates/part.eventform.php:210
+msgid "Location of the Event"
+msgstr "Místo konání události"
+
+#: templates/part.eventform.php:216
+msgid "Description"
+msgstr "Popis"
+
+#: templates/part.eventform.php:218
+msgid "Description of the Event"
+msgstr "Popis události"
+
+#: templates/part.import.php:1
+msgid "Import a calendar file"
msgstr ""
-#: templates/part.eventform.php:81 templates/part.eventinfo.php:51
-msgid "Attendees"
+#: templates/part.import.php:6
+msgid "Please choose the calendar"
+msgstr "Zvolte prosím kalendář"
+
+#: templates/part.import.php:10
+msgid "create a new calendar"
msgstr ""
-#: templates/part.eventform.php:89
-msgid "Description of the Event"
+#: templates/part.import.php:15
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import"
+msgstr "Import"
+
+#: templates/part.import.php:20
+msgid "Importing calendar"
+msgstr ""
+
+#: templates/part.import.php:23
+msgid "Calendar imported successfully"
msgstr ""
-#: templates/part.eventinfo.php:63
-msgid "Close"
+#: templates/part.import.php:24
+msgid "Close Dialog"
msgstr ""
#: templates/part.newevent.php:1
msgid "Create a new event"
-msgstr ""
+msgstr "Vytvořit novou událost"
-#: templates/settings.php:11
+#: templates/settings.php:13
msgid "Timezone"
-msgstr ""
+msgstr "Časové pásmo"
+
+#: templates/settings.php:30
+msgid "Check always for changes of the timezone"
+msgstr "Zkontrolujte vždy změny časového pásma"
+
+#: templates/settings.php:32
+msgid "Timeformat"
+msgstr "Formát času"
+
+#: templates/settings.php:34
+msgid "24h"
+msgstr "24h"
+
+#: templates/settings.php:35
+msgid "12h"
+msgstr "12h"
+
+#: templates/settings.php:41
+msgid "Calendar CalDAV syncing address:"
+msgstr "Adresa pro synchronizaci kalendáře CalDAV:"
diff --git a/l10n/cs_CZ/contacts.po b/l10n/cs_CZ/contacts.po
index 76af9f7e5ca..8470cde9daa 100644
--- a/l10n/cs_CZ/contacts.po
+++ b/l10n/cs_CZ/contacts.po
@@ -3,13 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Jan Krejci <krejca85@gmail.com>, 2011.
+# Martin <fireball@atlas.cz>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 20:10+0200\n"
-"PO-Revision-Date: 2011-09-23 18:11+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Czech (Czech Republic) (http://www.transifex.net/projects/p/owncloud/team/cs_CZ/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,164 +19,273 @@ msgstr ""
"Language: cs_CZ\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n"
-#: ajax/addcard.php:31 ajax/addproperty.php:31 ajax/deletebook.php:32
-#: ajax/deletecard.php:32 ajax/deleteproperty.php:34 ajax/getdetails.php:32
-#: ajax/setproperty.php:32 ajax/showaddcard.php:30 ajax/showaddproperty.php:31
-#: ajax/showsetproperty.php:32 photo.php:32
-msgid "You need to log in."
+#: ajax/activation.php:17 ajax/updateaddressbook.php:26
+msgid "Error (de)activating addressbook."
msgstr ""
-#: ajax/addcard.php:37
-msgid "This is not your addressbook."
+#: ajax/addcard.php:79
+msgid "There was an error adding the contact."
msgstr ""
-#: ajax/addproperty.php:37 ajax/deletecard.php:39 ajax/deleteproperty.php:41
-#: ajax/getdetails.php:39 ajax/setproperty.php:38 ajax/showaddproperty.php:37
-#: ajax/showsetproperty.php:38 photo.php:39
-msgid "Contact could not be found."
+#: ajax/addproperty.php:39
+msgid "Cannot add empty property."
msgstr ""
-#: ajax/addproperty.php:43 ajax/deletebook.php:38 ajax/deletecard.php:45
-#: ajax/deleteproperty.php:47 ajax/getdetails.php:45 ajax/setproperty.php:44
-#: ajax/showaddproperty.php:43 ajax/showsetproperty.php:44 photo.php:45
-msgid "This is not your contact."
+#: ajax/addproperty.php:51
+msgid "At least one of the address fields has to be filled out."
msgstr ""
-#: ajax/addproperty.php:50 ajax/deleteproperty.php:54 ajax/getdetails.php:52
-#: ajax/setproperty.php:51 ajax/showsetproperty.php:51
-msgid "vCard could not be read."
+#: ajax/addproperty.php:77
+msgid "Error adding contact property."
msgstr ""
-#: ajax/deleteproperty.php:65 ajax/setproperty.php:62
-#: ajax/showsetproperty.php:62
-msgid "Information about vCard is incorrect. Please reload the page."
+#: ajax/createaddressbook.php:20
+msgid "Error adding addressbook."
msgstr ""
-#: photo.php:53
-msgid "This card is not RFC compatible."
+#: ajax/createaddressbook.php:26
+msgid "Error activating addressbook."
msgstr ""
-#: photo.php:90
-msgid "This card does not contain a photo."
+#: ajax/deleteproperty.php:40
+msgid "Error deleting contact property."
msgstr ""
-#: templates/index.php:8
-msgid "Add Contact"
+#: ajax/setproperty.php:79
+msgid "Error updating contact property."
msgstr ""
-#: templates/part.addcardform.php:5
-msgid "Group"
+#: ajax/updateaddressbook.php:20
+msgid "Error updating addressbook."
msgstr ""
-#: templates/part.addcardform.php:12 templates/part.property.php:3
-msgid "Name"
+#: appinfo/app.php:21 templates/settings.php:3
+msgid "Contacts"
msgstr ""
-#: templates/part.addcardform.php:14
-msgid "Create Contact"
-msgstr ""
+#: lib/app.php:42
+msgid "This is not your addressbook."
+msgstr "Toto není Váš adresář."
-#: templates/part.addpropertyform.php:4 templates/part.property.php:40
+#: lib/app.php:51 photo.php:34
+msgid "Contact could not be found."
+msgstr "Kontakt nebyl nalezen."
+
+#: lib/app.php:79
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "Informace o vCard je nesprávná. Obnovte stránku, prosím."
+
+#: lib/app.php:91 templates/part.addcardform.php:54
+#: templates/part.property.php:45 templates/part.setpropertyform.php:7
msgid "Address"
-msgstr ""
+msgstr "Adresa"
-#: templates/part.addpropertyform.php:5
+#: lib/app.php:92 templates/part.addcardform.php:43
msgid "Telephone"
-msgstr ""
+msgstr "Telefon"
-#: templates/part.addpropertyform.php:6 templates/part.property.php:22
+#: lib/app.php:93 templates/part.addcardform.php:37
+#: templates/part.property.php:16 templates/part.setpropertyform.php:51
msgid "Email"
-msgstr ""
+msgstr "Email"
-#: templates/part.addpropertyform.php:7 templates/part.property.php:15
+#: lib/app.php:94 templates/part.addcardform.php:27
+#: templates/part.property.php:9 templates/part.setpropertyform.php:54
msgid "Organization"
-msgstr ""
+msgstr "Organizace"
-#: templates/part.addpropertyform.php:17 templates/part.addpropertyform.php:32
+#: lib/app.php:106 lib/app.php:113
msgid "Work"
-msgstr ""
+msgstr "Pracovní"
-#: templates/part.addpropertyform.php:18 templates/part.addpropertyform.php:30
+#: lib/app.php:107 lib/app.php:111
msgid "Home"
+msgstr "Domácí"
+
+#: lib/app.php:112
+msgid "Mobile"
+msgstr "Mobil"
+
+#: lib/app.php:114
+msgid "Text"
+msgstr "Text"
+
+#: lib/app.php:115
+msgid "Voice"
+msgstr "Hlas"
+
+#: lib/app.php:116
+msgid "Fax"
+msgstr "Fax"
+
+#: lib/app.php:117
+msgid "Video"
+msgstr "Video"
+
+#: lib/app.php:118
+msgid "Pager"
+msgstr "Pager"
+
+#: lib/search.php:22
+msgid "Contact"
msgstr ""
-#: templates/part.addpropertyform.php:20 templates/part.property.php:48
-#: templates/part.setpropertyform.php:5
-msgid "PO Box"
+#: photo.php:40
+msgid "This is not your contact."
+msgstr "Toto není Váš kontakt."
+
+#: photo.php:48
+msgid "This card is not RFC compatible."
+msgstr "Tato karta není kompatibilní s RFC."
+
+#: photo.php:85
+msgid "This card does not contain a photo."
+msgstr "Tato karta neobsahuje foto"
+
+#: templates/index.php:6
+msgid "Add Contact"
+msgstr "Přidat kontakt"
+
+#: templates/index.php:7
+msgid "Addressbooks"
msgstr ""
-#: templates/part.addpropertyform.php:21 templates/part.property.php:51
-#: templates/part.setpropertyform.php:6
-msgid "Extended"
+#: templates/part.addcardform.php:8
+msgid "Addressbook"
msgstr ""
-#: templates/part.addpropertyform.php:22 templates/part.property.php:54
-#: templates/part.setpropertyform.php:7
+#: templates/part.addcardform.php:21
+msgid "Name"
+msgstr "Jméno"
+
+#: templates/part.addcardform.php:57 templates/part.details.php:43
+#: templates/part.details.php:79 templates/part.setpropertyform.php:10
+#: templates/part.setpropertyform.php:47
+msgid "Type"
+msgstr "Typ"
+
+#: templates/part.addcardform.php:65 templates/part.details.php:49
+#: templates/part.setpropertyform.php:16
+msgid "PO Box"
+msgstr "PO box"
+
+#: templates/part.addcardform.php:72 templates/part.details.php:53
+#: templates/part.setpropertyform.php:20
+msgid "Extended"
+msgstr "Rozšířené"
+
+#: templates/part.addcardform.php:78 templates/part.details.php:57
+#: templates/part.setpropertyform.php:24
msgid "Street"
-msgstr ""
+msgstr "Ulice"
-#: templates/part.addpropertyform.php:23 templates/part.property.php:57
-#: templates/part.setpropertyform.php:8
+#: templates/part.addcardform.php:84 templates/part.details.php:61
+#: templates/part.setpropertyform.php:28
msgid "City"
-msgstr ""
+msgstr "Město"
-#: templates/part.addpropertyform.php:24 templates/part.property.php:60
-#: templates/part.setpropertyform.php:9
+#: templates/part.addcardform.php:90 templates/part.details.php:65
+#: templates/part.setpropertyform.php:32
msgid "Region"
-msgstr ""
+msgstr "Kraj"
-#: templates/part.addpropertyform.php:25 templates/part.property.php:63
-#: templates/part.setpropertyform.php:10
+#: templates/part.addcardform.php:96 templates/part.details.php:69
+#: templates/part.setpropertyform.php:36
msgid "Zipcode"
-msgstr ""
+msgstr "PSČ"
-#: templates/part.addpropertyform.php:26 templates/part.property.php:66
-#: templates/part.setpropertyform.php:11
+#: templates/part.addcardform.php:102 templates/part.details.php:73
+#: templates/part.setpropertyform.php:40
msgid "Country"
-msgstr ""
+msgstr "Země"
-#: templates/part.addpropertyform.php:31
-msgid "Mobile"
-msgstr ""
+#: templates/part.addcardform.php:109
+msgid "Create Contact"
+msgstr "Vytvořit kontakt"
-#: templates/part.addpropertyform.php:33
-msgid "Text"
-msgstr ""
+#: templates/part.chooseaddressbook.php:1
+msgid "Choose active Address Books"
+msgstr "Zvolte aktivní adresář"
-#: templates/part.addpropertyform.php:34
-msgid "Voice"
-msgstr ""
+#: templates/part.chooseaddressbook.php:16
+msgid "New Address Book"
+msgstr "Nový adresář"
-#: templates/part.addpropertyform.php:35
-msgid "Fax"
-msgstr ""
+#: templates/part.chooseaddressbook.php:21
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "CardDav Link"
+msgstr "Odkaz CardDav"
-#: templates/part.addpropertyform.php:36
-msgid "Video"
-msgstr ""
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Download"
+msgstr "Stažení"
-#: templates/part.addpropertyform.php:37
-msgid "Pager"
-msgstr ""
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Edit"
+msgstr "Editovat"
-#: templates/part.details.php:33
+#: templates/part.chooseaddressbook.rowfields.php:5
msgid "Delete"
+msgstr "Odstranit"
+
+#: templates/part.details.php:3
+msgid "Download contact"
msgstr ""
+#: templates/part.details.php:4
+msgid "Delete contact"
+msgstr "Odstranit kontakt"
+
#: templates/part.details.php:34
-msgid "Add Property"
+msgid "Add"
+msgstr "Přidat"
+
+#: templates/part.editaddressbook.php:9
+msgid "New Addressbook"
msgstr ""
-#: templates/part.property.php:9
-msgid "Birthday"
+#: templates/part.editaddressbook.php:9
+msgid "Edit Addressbook"
msgstr ""
-#: templates/part.property.php:29
+#: templates/part.editaddressbook.php:12
+msgid "Displayname"
+msgstr "Zobrazené jméno"
+
+#: templates/part.editaddressbook.php:23
+msgid "Active"
+msgstr "Aktivní"
+
+#: templates/part.editaddressbook.php:29
+msgid "Save"
+msgstr "Uložit"
+
+#: templates/part.editaddressbook.php:29
+msgid "Submit"
+msgstr "Potvrdit"
+
+#: templates/part.editaddressbook.php:30
+msgid "Cancel"
+msgstr "Storno"
+
+#: templates/part.property.php:3
+msgid "Birthday"
+msgstr "Narozeniny"
+
+#: templates/part.property.php:23
+msgid "Preferred"
+msgstr "Preferovaný"
+
+#: templates/part.property.php:23 templates/part.setpropertyform.php:45
msgid "Phone"
-msgstr ""
+msgstr "Telefon"
-#: templates/part.setpropertyform.php:17
-msgid "Edit"
+#: templates/part.setpropertyform.php:57
+msgid "Update"
+msgstr "Aktualizovat"
+
+#: templates/settings.php:4
+msgid "CardDAV syncing address:"
msgstr ""
diff --git a/l10n/cs_CZ/core.po b/l10n/cs_CZ/core.po
index f13d48f0b08..d395875fb84 100644
--- a/l10n/cs_CZ/core.po
+++ b/l10n/cs_CZ/core.po
@@ -2,14 +2,16 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
-# Martin <fireball@atlas.cz>, 2011.
+# Translators:
+# Jan Krejci <krejca85@gmail.com>, 2011.
+# Martin <fireball@atlas.cz>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-04 18:14+0200\n"
-"PO-Revision-Date: 2011-09-04 16:14+0000\n"
-"Last-Translator: JanCBorchardt <JanCBorchardt@fsfe.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-11 11:30+0000\n"
+"Last-Translator: Martin <fireball@atlas.cz>\n"
"Language-Team: Czech (Czech Republic) (http://www.transifex.net/projects/p/owncloud/team/cs_CZ/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,6 +19,51 @@ msgstr ""
"Language: cs_CZ\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n"
+#: lostpassword/index.php:24
+msgid "Owncloud password reset"
+msgstr "Reset hesla Owncloud"
+
+#: lostpassword/templates/email.php:1
+msgid "Use the following link to reset your password: {link}"
+msgstr "Heslo vyresetujete použitím následujícího odkazu: {link}"
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr "Bude Vám zaslán odkaz pro obnovu hesla"
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Requested"
+msgstr "Požadováno"
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr "Přihlášení selhalo"
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:22
+#: templates/login.php:8
+msgid "Username"
+msgstr "Uživatelské jméno"
+
+#: lostpassword/templates/lostpassword.php:14
+msgid "Request reset"
+msgstr "Vyžádat obnovu"
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr "Vaše heslo bylo obnoveno"
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr "Na stránku přihlášení"
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr "Nové heslo"
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr "Obnovit heslo"
+
#: strings.php:5
msgid "Personal"
msgstr "Osobní"
@@ -45,54 +92,50 @@ msgstr "Cloud nebyl nalezen"
msgid "Create an <strong>admin account</strong>"
msgstr "Vytvořit <strong>účet správce</strong>"
-#: templates/installation.php:21
-msgid "Username"
-msgstr "Uživatelské jméno"
-
-#: templates/installation.php:22
+#: templates/installation.php:26 templates/login.php:12
msgid "Password"
msgstr "Heslo"
-#: templates/installation.php:27
+#: templates/installation.php:32
+msgid "Advanced"
+msgstr "Rozšířené volby"
+
+#: templates/installation.php:34
+msgid "Data folder"
+msgstr "Datový adresář"
+
+#: templates/installation.php:41
msgid "Configure the database"
msgstr "Konfigurace databáze"
-#: templates/installation.php:32 templates/installation.php:43
-#: templates/installation.php:53
+#: templates/installation.php:46 templates/installation.php:57
+#: templates/installation.php:67
msgid "will be used"
msgstr "bude použito"
-#: templates/installation.php:64
+#: templates/installation.php:79
msgid "Database user"
msgstr "Uživatel databáze"
-#: templates/installation.php:65
+#: templates/installation.php:83
msgid "Database password"
msgstr "Heslo k databázi"
-#: templates/installation.php:66
+#: templates/installation.php:87
msgid "Database name"
msgstr "Název databáze"
-#: templates/installation.php:72
-msgid "Advanced"
-msgstr "Rozšířené volby"
-
-#: templates/installation.php:75
+#: templates/installation.php:93
msgid "Database host"
-msgstr ""
-
-#: templates/installation.php:76
-msgid "Data folder"
-msgstr "Datový adresář"
+msgstr "Hostitel databáze"
-#: templates/installation.php:79
+#: templates/installation.php:98
msgid "Finish setup"
msgstr "Dokončit instalaci"
#: templates/layout.guest.php:35
-msgid "gives you freedom and control over your own data"
-msgstr ""
+msgid "web services under your control"
+msgstr "webové služby pod Vaší kontrolou"
#: templates/layout.user.php:34
msgid "Log out"
@@ -102,38 +145,22 @@ msgstr "Odhlásit se"
msgid "Settings"
msgstr "Nastavení"
-#: templates/login.php:4
+#: templates/login.php:5
msgid "Lost your password?"
-msgstr ""
+msgstr "Zapomenuté heslo?"
-#: templates/login.php:9 templates/login.php:13
+#: templates/login.php:15
msgid "remember"
msgstr "zapamatovat si"
+#: templates/login.php:16
+msgid "Log in"
+msgstr "Login"
+
#: templates/logout.php:1
msgid "You are logged out."
msgstr "Jste odhlášeni."
-#: templates/lostpassword.php:3
-msgid "You will receive a link to reset your password via Email."
-msgstr ""
-
-#: templates/lostpassword.php:5
-msgid "Requested"
-msgstr ""
-
-#: templates/lostpassword.php:8
-msgid "Login failed!"
-msgstr "Přihlášení se nezdařilo!"
-
-#: templates/lostpassword.php:10
-msgid "Username or Email"
-msgstr ""
-
-#: templates/lostpassword.php:11
-msgid "Request reset"
-msgstr ""
-
#: templates/part.pagenavi.php:3
msgid "prev"
msgstr "zpět"
@@ -142,16 +169,4 @@ msgstr "zpět"
msgid "next"
msgstr "vpřed"
-#: templates/resetpassword.php:4
-msgid "Your password was reset"
-msgstr ""
-
-#: templates/resetpassword.php:6
-msgid "New password"
-msgstr ""
-
-#: templates/resetpassword.php:7
-msgid "Reset password"
-msgstr ""
-
diff --git a/l10n/cs_CZ/files.po b/l10n/cs_CZ/files.po
index 6dc49c6a5d5..6c775ed9703 100644
--- a/l10n/cs_CZ/files.po
+++ b/l10n/cs_CZ/files.po
@@ -3,14 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Martin <fireball@atlas.cz>, 2011.
+# Martin <fireball@atlas.cz>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-11 11:31+0000\n"
+"Last-Translator: Martin <fireball@atlas.cz>\n"
"Language-Team: Czech (Czech Republic) (http://www.transifex.net/projects/p/owncloud/team/cs_CZ/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,33 +18,36 @@ msgstr ""
"Language: cs_CZ\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n"
-#: ajax/upload.php:24
+#: ajax/upload.php:19
msgid "There is no error, the file uploaded with success"
-msgstr ""
+msgstr "Soubor byl odeslán úspěšně"
-#: ajax/upload.php:25
+#: ajax/upload.php:20
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr ""
+"Odeslaný soubor přesáhl velikostí parametr upload_max_filesize v php.ini"
-#: ajax/upload.php:26
+#: ajax/upload.php:21
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
+"Odeslaný soubor přesáhl velikostí parametr MAX_FILE_SIZE specifikovaný v "
+"HTML formuláři"
-#: ajax/upload.php:27
+#: ajax/upload.php:22
msgid "The uploaded file was only partially uploaded"
-msgstr ""
+msgstr "Soubor byl odeslán pouze částečně"
-#: ajax/upload.php:28
+#: ajax/upload.php:23
msgid "No file was uploaded"
-msgstr ""
+msgstr "Soubor nebyl odeslán"
-#: ajax/upload.php:29
+#: ajax/upload.php:24
msgid "Missing a temporary folder"
-msgstr ""
+msgstr "Chybí adresář pro sočasné soubory"
-#: appinfo/app.php:7
+#: appinfo/app.php:8
msgid "Files"
msgstr "Soubory"
@@ -52,43 +55,55 @@ msgstr "Soubory"
msgid "Maximum upload size"
msgstr "Maximální velikost ukládaných souborů"
+#: templates/index.php:7
+msgid "New"
+msgstr "Nový"
+
#: templates/index.php:10
+msgid "Text file"
+msgstr "Textový soubor"
+
+#: templates/index.php:11
+msgid "Folder"
+msgstr "Adresář"
+
+#: templates/index.php:12
+msgid "From the web"
+msgstr "Z webu"
+
+#: templates/index.php:22
msgid "Upload"
msgstr "Uložit"
-#: templates/index.php:17
-msgid "New Folder"
-msgstr "Nový adresář"
-
-#: templates/index.php:31
+#: templates/index.php:35
msgid "Nothing in here. Upload something!"
msgstr "Žádný obsah. Uložte si něco!"
-#: templates/index.php:39
+#: templates/index.php:43
msgid "Name"
msgstr "Název"
-#: templates/index.php:41
+#: templates/index.php:45
msgid "Download"
msgstr "Stáhnout"
-#: templates/index.php:45
+#: templates/index.php:49
msgid "Size"
msgstr "Velikost"
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Modified"
msgstr "Změněno"
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Delete"
msgstr "Vymazat"
-#: templates/index.php:54
+#: templates/index.php:58
msgid "Upload too large"
msgstr "Příliš velký soubor"
-#: templates/index.php:56
+#: templates/index.php:60
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
diff --git a/l10n/cs_CZ/gallery.po b/l10n/cs_CZ/gallery.po
new file mode 100644
index 00000000000..0f3acea06ec
--- /dev/null
+++ b/l10n/cs_CZ/gallery.po
@@ -0,0 +1,32 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:48+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Czech (Czech Republic) (http://www.transifex.net/projects/p/owncloud/team/cs_CZ/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: cs_CZ\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n"
+
+#: appinfo/app.php:41
+msgid "Gallery"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Rescan"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+
diff --git a/l10n/cs_CZ/media.po b/l10n/cs_CZ/media.po
index f27aab19c88..896bb88c3f7 100644
--- a/l10n/cs_CZ/media.po
+++ b/l10n/cs_CZ/media.po
@@ -2,14 +2,16 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
+# Translators:
+# Jan Krejci <krejca85@gmail.com>, 2011.
# Martin <fireball@atlas.cz>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
-"Report-Msgid-Bugs-To: http://bugs.kde.org/buglist.cgi?product=owncloud\n"
-"POT-Creation-Date: 2011-09-03 14:50+0200\n"
-"PO-Revision-Date: 2011-09-01 14:09+0000\n"
-"Last-Translator: Fireball <fireball@atlas.cz>\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Czech (Czech Republic) (http://www.transifex.net/projects/p/owncloud/team/cs_CZ/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,15 +19,15 @@ msgstr ""
"Language: cs_CZ\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n"
-#: appinfo/app.php:31
+#: appinfo/app.php:32
msgid "Music"
-msgstr "hudba"
+msgstr "Hudba"
-#: templates/music.php:3
+#: templates/music.php:3 templates/player.php:13
msgid "Play"
msgstr "Přehrát"
-#: templates/music.php:4 templates/music.php:30
+#: templates/music.php:4 templates/music.php:26 templates/player.php:14
msgid "Pause"
msgstr "Pauza"
@@ -33,7 +35,7 @@ msgstr "Pauza"
msgid "Previous"
msgstr "Předchozí"
-#: templates/music.php:6
+#: templates/music.php:6 templates/player.php:15
msgid "Next"
msgstr "Další"
@@ -45,11 +47,7 @@ msgstr "Ztišit"
msgid "Unmute"
msgstr "Zesílit"
-#: templates/music.php:28
-msgid "Songs scanned"
-msgstr "Skladby jsou prohledány"
-
-#: templates/music.php:29
+#: templates/music.php:25
msgid "Rescan Collection"
msgstr "Znovu prohledat "
diff --git a/l10n/cs_CZ/settings.po b/l10n/cs_CZ/settings.po
index f9863f56d18..0787bfd9ebd 100644
--- a/l10n/cs_CZ/settings.po
+++ b/l10n/cs_CZ/settings.po
@@ -2,14 +2,16 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
-# Martin <fireball@atlas.cz>, 2011.
+# Translators:
+# Jan Krejci <krejca85@gmail.com>, 2011.
+# Martin <fireball@atlas.cz>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
-"Report-Msgid-Bugs-To: http://bugs.kde.org/buglist.cgi?product=owncloud\n"
-"POT-Creation-Date: 2011-09-03 14:50+0200\n"
-"PO-Revision-Date: 2011-09-01 14:15+0000\n"
-"Last-Translator: Fireball <fireball@atlas.cz>\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-11 11:33+0000\n"
+"Last-Translator: Martin <fireball@atlas.cz>\n"
"Language-Team: Czech (Czech Republic) (http://www.transifex.net/projects/p/owncloud/team/cs_CZ/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,22 +19,26 @@ msgstr ""
"Language: cs_CZ\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n"
-#: ajax/openid.php:13 ajax/setlanguage.php:13
-msgid "Authentication error"
-msgstr "Chyba při ověření"
+#: ajax/lostpassword.php:14
+msgid "email Changed"
+msgstr "email změněn"
-#: ajax/openid.php:21
-msgid "OpenID Changed"
-msgstr "OpenID změněn"
-
-#: ajax/openid.php:23 ajax/setlanguage.php:23
+#: ajax/lostpassword.php:16 ajax/openid.php:17 ajax/setlanguage.php:16
msgid "Invalid request"
msgstr "Chybný dotaz"
-#: ajax/setlanguage.php:21
+#: ajax/openid.php:15
+msgid "OpenID Changed"
+msgstr "OpenID změněn"
+
+#: ajax/setlanguage.php:14
msgid "Language changed"
msgstr "Jazyk byl změněn"
+#: templates/admin.php:13
+msgid "Log level"
+msgstr "Úroveň logu"
+
#: templates/apps.php:8
msgid "Add your application"
msgstr "Přidejte svou aplikaci"
@@ -53,15 +59,15 @@ msgstr "podle"
msgid "Ask a question"
msgstr "Zeptat se"
-#: templates/help.php:17
+#: templates/help.php:20
msgid "Problems connecting to help database."
msgstr "Problémy s připojením k databázi s nápovědou."
-#: templates/help.php:18
+#: templates/help.php:21
msgid "Go there manually."
msgstr "Přejít ručně."
-#: templates/help.php:26
+#: templates/help.php:29
msgid "Answer"
msgstr "Odpověď"
@@ -97,36 +103,52 @@ msgstr "zobrazit"
msgid "Change password"
msgstr "Změnit heslo"
-#: templates/personal.php:24 templates/personal.php:25
+#: templates/personal.php:24
+msgid "Email"
+msgstr "Email"
+
+#: templates/personal.php:25
+msgid "Your email address"
+msgstr "Vaše email adresa"
+
+#: templates/personal.php:26
+msgid "Fill in an email address to enable password recovery"
+msgstr "Pro povolení změny hesla vyplňte email adresu"
+
+#: templates/personal.php:32 templates/personal.php:33
msgid "Language"
msgstr "Jazyk"
-#: templates/personal.php:30
-msgid "Help translating"
-msgstr "Pomozte s překladem"
+#: templates/personal.php:38
+msgid "Help translate"
+msgstr "Pomoc s překladem"
-#: templates/personal.php:36
+#: templates/personal.php:45
msgid "use this address to connect to your ownCloud in your file manager"
msgstr ""
"tuto adresu použijte pro připojení k ownCloud ve Vašem správci souborů"
-#: templates/users.php:16
+#: templates/users.php:15 templates/users.php:30
msgid "Name"
msgstr "Jméno"
-#: templates/users.php:17
+#: templates/users.php:16 templates/users.php:31
msgid "Password"
msgstr "Heslo"
-#: templates/users.php:18 templates/users.php:36
+#: templates/users.php:17 templates/users.php:32 templates/users.php:46
msgid "Groups"
msgstr "Skupiny"
-#: templates/users.php:24
+#: templates/users.php:23
msgid "Create"
msgstr "Vytvořit"
-#: templates/users.php:48
+#: templates/users.php:33
+msgid "Quota"
+msgstr "Kvóta"
+
+#: templates/users.php:58
msgid "Delete"
msgstr "Vymazat"
diff --git a/l10n/da/calendar.po b/l10n/da/calendar.po
index f78c8d1a810..607272c5aea 100644
--- a/l10n/da/calendar.po
+++ b/l10n/da/calendar.po
@@ -4,14 +4,15 @@
#
# Translators:
# <mikkelbjerglarsen@gmail.com>, 2011.
+# Morten Juhl-Johansen Zölde-Fejér <morten@writtenandread.net>, 2011, 2012.
# Pascal d'Hermilly <pascal@dhermilly.dk>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Danish (http://www.transifex.net/projects/p/owncloud/team/da/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,324 +20,406 @@ msgstr ""
"Language: da\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/createcalendar.php:18 ajax/settimezone.php:19
-#: ajax/updatecalendar.php:18
-msgid "Authentication error"
-msgstr "Godkendelsesfejl"
+#: ajax/guesstimezone.php:42
+msgid "New Timezone:"
+msgstr "Ny tidszone:"
-#: ajax/editeventform.php:25
-msgid "Wrong calendar"
-msgstr "Forkert kalender"
-
-#: ajax/settimezone.php:27
+#: ajax/settimezone.php:22
msgid "Timezone changed"
msgstr "Tidszone ændret"
-#: ajax/settimezone.php:29
+#: ajax/settimezone.php:24
msgid "Invalid request"
msgstr "Ugyldig forespørgsel"
-#: appinfo/app.php:19 templates/part.eventform.php:27
-#: templates/part.eventinfo.php:18
+#: appinfo/app.php:20 templates/calendar.php:13
+#: templates/part.eventform.php:20
msgid "Calendar"
msgstr "Kalender"
-#: lib/object.php:292
+#: lib/app.php:19
+msgid "Wrong calendar"
+msgstr "Forkert kalender"
+
+#: lib/app.php:60 lib/object.php:332
msgid "Birthday"
msgstr "Fødselsdag"
-#: lib/object.php:293
+#: lib/app.php:61 lib/object.php:333
msgid "Business"
msgstr "Forretning"
-#: lib/object.php:294
+#: lib/app.php:62 lib/object.php:334
msgid "Call"
msgstr "Ring"
-#: lib/object.php:295
+#: lib/app.php:63 lib/object.php:335
msgid "Clients"
msgstr "Kunder"
-#: lib/object.php:296
+#: lib/app.php:64 lib/object.php:336
msgid "Deliverer"
-msgstr ""
+msgstr "Leverance"
-#: lib/object.php:297
+#: lib/app.php:65 lib/object.php:337
msgid "Holidays"
msgstr "Helligdage"
-#: lib/object.php:298
+#: lib/app.php:66 lib/object.php:338
msgid "Ideas"
msgstr "Ideér"
-#: lib/object.php:299
+#: lib/app.php:67 lib/object.php:339
msgid "Journey"
msgstr "Rejse"
-#: lib/object.php:300
+#: lib/app.php:68 lib/object.php:340
msgid "Jubilee"
msgstr "Jubilæum"
-#: lib/object.php:301
+#: lib/app.php:69 lib/object.php:341
msgid "Meeting"
msgstr "Møde"
-#: lib/object.php:302
+#: lib/app.php:70 lib/object.php:342
msgid "Other"
msgstr "Andet"
-#: lib/object.php:303
+#: lib/app.php:71 lib/object.php:343
msgid "Personal"
msgstr "Privat"
-#: lib/object.php:304
+#: lib/app.php:72 lib/object.php:344
msgid "Projects"
msgstr "Projekter"
-#: lib/object.php:305
+#: lib/app.php:73 lib/object.php:345
msgid "Questions"
msgstr "Spørgsmål"
-#: lib/object.php:306
+#: lib/app.php:74 lib/object.php:346
msgid "Work"
msgstr "Arbejde"
-#: lib/object.php:313
+#: lib/object.php:353
msgid "Does not repeat"
msgstr "Gentages ikke"
-#: lib/object.php:314
+#: lib/object.php:354
msgid "Daily"
msgstr "Daglig"
-#: lib/object.php:315
+#: lib/object.php:355
msgid "Weekly"
msgstr "Ugentlig"
-#: lib/object.php:316
+#: lib/object.php:356
msgid "Every Weekday"
msgstr "Alle hverdage"
-#: lib/object.php:317
+#: lib/object.php:357
msgid "Bi-Weekly"
-msgstr "Bi-Ugentligt"
+msgstr "Hver anden uge"
-#: lib/object.php:318
+#: lib/object.php:358
msgid "Monthly"
-msgstr "Månedlige"
+msgstr "Månedlig"
-#: lib/object.php:319
+#: lib/object.php:359
msgid "Yearly"
msgstr "Årlig"
-#: lib/object.php:337
-msgid "Not an array"
-msgstr ""
+#: lib/object.php:366
+msgid "never"
+msgstr "aldrig"
-#: templates/calendar.php:3
-msgid "All day"
-msgstr "Hele dagen"
+#: lib/object.php:367
+msgid "by occurrences"
+msgstr "efter forekomster"
-#: templates/calendar.php:32
-msgid "Sunday"
-msgstr "Søndag"
+#: lib/object.php:368
+msgid "by date"
+msgstr "efter dato"
+
+#: lib/object.php:375
+msgid "by monthday"
+msgstr "efter dag i måneden"
+
+#: lib/object.php:376
+msgid "by weekday"
+msgstr "efter ugedag"
-#: templates/calendar.php:32
+#: lib/object.php:383 templates/lAfix.php:3
msgid "Monday"
msgstr "Mandag"
-#: templates/calendar.php:32
+#: lib/object.php:384 templates/lAfix.php:4
msgid "Tuesday"
msgstr "Tirsdag"
-#: templates/calendar.php:32
+#: lib/object.php:385 templates/lAfix.php:5
msgid "Wednesday"
msgstr "Onsdag"
-#: templates/calendar.php:32
+#: lib/object.php:386 templates/lAfix.php:6
msgid "Thursday"
msgstr "Torsdag"
-#: templates/calendar.php:32
+#: lib/object.php:387 templates/lAfix.php:7
msgid "Friday"
msgstr "Fredag"
-#: templates/calendar.php:32
+#: lib/object.php:388 templates/lAfix.php:8
msgid "Saturday"
msgstr "Lørdag"
-#: templates/calendar.php:33
-msgid "Sun."
-msgstr "Søn."
+#: lib/object.php:389 templates/lAfix.php:2
+msgid "Sunday"
+msgstr "øndag"
-#: templates/calendar.php:33
-msgid "Mon."
-msgstr "Man."
+#: lib/object.php:396
+msgid "events week of month"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Tue."
-msgstr "Tir."
+#: lib/object.php:397
+msgid "first"
+msgstr "første"
-#: templates/calendar.php:33
-msgid "Wed."
-msgstr "Ons."
+#: lib/object.php:398
+msgid "second"
+msgstr "anden"
-#: templates/calendar.php:33
-msgid "Thu."
-msgstr "Tor."
+#: lib/object.php:399
+msgid "third"
+msgstr "tredje"
-#: templates/calendar.php:33
-msgid "Fri."
-msgstr "Fre."
+#: lib/object.php:400
+msgid "fourth"
+msgstr "fjerde"
-#: templates/calendar.php:33
-msgid "Sat."
-msgstr "Lør."
+#: lib/object.php:401
+msgid "fifth"
+msgstr "femte"
+
+#: lib/object.php:402
+msgid "last"
+msgstr "sidste"
-#: templates/calendar.php:34
+#: lib/object.php:424 templates/lAfix.php:16
msgid "January"
msgstr "Januar"
-#: templates/calendar.php:34
+#: lib/object.php:425 templates/lAfix.php:17
msgid "February"
msgstr "Februar"
-#: templates/calendar.php:34
+#: lib/object.php:426 templates/lAfix.php:18
msgid "March"
msgstr "Marts"
-#: templates/calendar.php:34
+#: lib/object.php:427 templates/lAfix.php:19
msgid "April"
msgstr "April"
-#: templates/calendar.php:34
+#: lib/object.php:428 templates/lAfix.php:20
msgid "May"
msgstr "Maj"
-#: templates/calendar.php:34
+#: lib/object.php:429 templates/lAfix.php:21
msgid "June"
msgstr "Juni"
-#: templates/calendar.php:34
+#: lib/object.php:430 templates/lAfix.php:22
msgid "July"
msgstr "Juli"
-#: templates/calendar.php:34
+#: lib/object.php:431 templates/lAfix.php:23
msgid "August"
msgstr "August"
-#: templates/calendar.php:34
+#: lib/object.php:432 templates/lAfix.php:24
msgid "September"
msgstr "September"
-#: templates/calendar.php:34
+#: lib/object.php:433 templates/lAfix.php:25
msgid "October"
msgstr "Oktober"
-#: templates/calendar.php:34
+#: lib/object.php:434 templates/lAfix.php:26
msgid "November"
msgstr "November"
-#: templates/calendar.php:34
+#: lib/object.php:435 templates/lAfix.php:27
msgid "December"
msgstr "December"
-#: templates/calendar.php:35
+#: lib/object.php:441
+msgid "by events date"
+msgstr "efter begivenheders dato"
+
+#: lib/object.php:442
+msgid "by yearday(s)"
+msgstr ""
+
+#: lib/object.php:443
+msgid "by weeknumber(s)"
+msgstr "efter ugenummer/-numre"
+
+#: lib/object.php:444
+msgid "by day and month"
+msgstr "efter dag og måned"
+
+#: lib/object.php:467
+msgid "Not an array"
+msgstr "Ikke en array"
+
+#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+msgid "Date"
+msgstr "Dato"
+
+#: lib/search.php:40
+msgid "Cal."
+msgstr "Kal."
+
+#: templates/calendar.php:10
+msgid "All day"
+msgstr "Hele dagen"
+
+#: templates/calendar.php:11
+msgid "Missing fields"
+msgstr "Manglende felter"
+
+#: templates/calendar.php:12 templates/part.eventform.php:3
+msgid "Title"
+msgstr "Titel"
+
+#: templates/calendar.php:14
+msgid "From Date"
+msgstr "Fra dato"
+
+#: templates/calendar.php:15
+msgid "From Time"
+msgstr "Fra tidspunkt"
+
+#: templates/calendar.php:16
+msgid "To Date"
+msgstr "Til dato"
+
+#: templates/calendar.php:17
+msgid "To Time"
+msgstr "Til tidspunkt"
+
+#: templates/calendar.php:18
+msgid "The event ends before it starts"
+msgstr "Begivenheden slutter, inden den begynder"
+
+#: templates/calendar.php:19
+msgid "There was a database fail"
+msgstr "Der var en fejl i databasen"
+
+#: templates/calendar.php:52
+msgid "Week"
+msgstr "Uge"
+
+#: templates/calendar.php:53
+msgid "Month"
+msgstr "Måned"
+
+#: templates/calendar.php:54
+msgid "List"
+msgstr "Liste"
+
+#: templates/calendar.php:59
+msgid "Today"
+msgstr "I dag"
+
+#: templates/calendar.php:60
+msgid "Calendars"
+msgstr "Kalendere"
+
+#: templates/calendar.php:78
+msgid "There was a fail, while parsing the file."
+msgstr "Der opstod en fejl under gennemlæsning af filen."
+
+#: templates/lAfix.php:9
+msgid "Sun."
+msgstr "Søn."
+
+#: templates/lAfix.php:10
+msgid "Mon."
+msgstr "Man."
+
+#: templates/lAfix.php:11
+msgid "Tue."
+msgstr "Tir."
+
+#: templates/lAfix.php:12
+msgid "Wed."
+msgstr "Ons."
+
+#: templates/lAfix.php:13
+msgid "Thu."
+msgstr "Tor."
+
+#: templates/lAfix.php:14
+msgid "Fri."
+msgstr "Fre."
+
+#: templates/lAfix.php:15
+msgid "Sat."
+msgstr "Lør."
+
+#: templates/lAfix.php:28
msgid "Jan."
msgstr "Jan."
-#: templates/calendar.php:35
+#: templates/lAfix.php:29
msgid "Feb."
msgstr "Feb."
-#: templates/calendar.php:35
+#: templates/lAfix.php:30
msgid "Mar."
msgstr "Mar."
-#: templates/calendar.php:35
+#: templates/lAfix.php:31
msgid "Apr."
msgstr "Apr."
-#: templates/calendar.php:35
+#: templates/lAfix.php:32
msgid "May."
msgstr "Maj."
-#: templates/calendar.php:35
+#: templates/lAfix.php:33
msgid "Jun."
msgstr "Jun."
-#: templates/calendar.php:35
+#: templates/lAfix.php:34
msgid "Jul."
msgstr "Jul."
-#: templates/calendar.php:35
+#: templates/lAfix.php:35
msgid "Aug."
msgstr "Aug."
-#: templates/calendar.php:35
+#: templates/lAfix.php:36
msgid "Sep."
-msgstr "Sep."
+msgstr "Sept."
-#: templates/calendar.php:35
+#: templates/lAfix.php:37
msgid "Oct."
-msgstr "Oct."
+msgstr "Okt."
-#: templates/calendar.php:35
+#: templates/lAfix.php:38
msgid "Nov."
msgstr "Nov."
-#: templates/calendar.php:35
+#: templates/lAfix.php:39
msgid "Dec."
msgstr "Dec."
-#: templates/calendar.php:36 templates/calendar.php:50
-#: templates/calendar.php:116
-msgid "Week"
-msgstr "Uge"
-
-#: templates/calendar.php:37 templates/calendar.php:51
-msgid "Weeks"
-msgstr "Uger"
-
-#: templates/calendar.php:38
-msgid "More before {startdate}"
-msgstr "Mere før {startdate}"
-
-#: templates/calendar.php:39
-msgid "More after {enddate}"
-msgstr "Mere efter {enddate}"
-
-#: templates/calendar.php:49
-msgid "Day"
-msgstr "Dag"
-
-#: templates/calendar.php:52
-msgid "Month"
-msgstr "Måned"
-
-#: templates/calendar.php:53
-msgid "List"
-msgstr "Liste"
-
-#: templates/calendar.php:58
-msgid "Today"
-msgstr "I dag"
-
-#: templates/calendar.php:59
-msgid "Calendars"
-msgstr "Kalendere"
-
-#: templates/calendar.php:76 templates/calendar.php:94
-msgid "Time"
-msgstr "Tid"
-
-#: templates/calendar.php:169
-msgid "There was a fail, while parsing the file."
-msgstr "Der opstod en fejl under gennemlæsning af filen."
-
#: templates/part.choosecalendar.php:1
msgid "Choose active calendars"
-msgstr "Vælg aktiv kalendere"
+msgstr "Vælg aktive kalendere"
#: templates/part.choosecalendar.php:15
msgid "New Calendar"
@@ -345,21 +428,20 @@ msgstr "Ny Kalender"
#: templates/part.choosecalendar.php:20
#: templates/part.choosecalendar.rowfields.php:4
msgid "CalDav Link"
-msgstr "CalDav Link"
+msgstr "CalDav-link"
#: templates/part.choosecalendar.rowfields.php:4
msgid "Download"
msgstr "Hent"
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.eventinfo.php:64
msgid "Edit"
msgstr "Rediger"
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.editevent.php:8
+#: templates/part.editevent.php:9
msgid "Delete"
-msgstr ""
+msgstr "Slet"
#: templates/part.editcalendar.php:9
msgid "New calendar"
@@ -371,96 +453,187 @@ msgstr "Rediger kalender"
#: templates/part.editcalendar.php:12
msgid "Displayname"
-msgstr "Visningsnavn"
+msgstr "Vist navn"
#: templates/part.editcalendar.php:23
msgid "Active"
msgstr "Aktiv"
-#: templates/part.editcalendar.php:29 templates/part.eventform.php:88
-#: templates/part.eventinfo.php:58
-msgid "Description"
-msgstr "Beskrivelse"
-
-#: templates/part.editcalendar.php:35
+#: templates/part.editcalendar.php:29
msgid "Calendar color"
-msgstr "Kalender farve"
+msgstr "Kalenderfarve"
-#: templates/part.editcalendar.php:41
+#: templates/part.editcalendar.php:42
msgid "Save"
msgstr "Gem"
-#: templates/part.editcalendar.php:41 templates/part.editevent.php:7
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
#: templates/part.newevent.php:6
msgid "Submit"
msgstr "Send"
-#: templates/part.editcalendar.php:42
+#: templates/part.editcalendar.php:43
msgid "Cancel"
-msgstr "Annullér"
+msgstr "Annuller"
-#: templates/part.editevent.php:1 templates/part.eventinfo.php:1
+#: templates/part.editevent.php:1
msgid "Edit an event"
msgstr "Redigér en begivenhed"
-#: templates/part.eventform.php:3 templates/part.eventinfo.php:4
-msgid "Title"
-msgstr "Titel"
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr "Eksporter"
#: templates/part.eventform.php:5
msgid "Title of the Event"
msgstr "Titel på begivenheden"
-#: templates/part.eventform.php:9 templates/part.eventinfo.php:9
-msgid "Location"
-msgstr "Sted"
-
#: templates/part.eventform.php:11
-msgid "Location of the Event"
-msgstr "Placering af begivenheden"
-
-#: templates/part.eventform.php:17 templates/part.eventinfo.php:16
msgid "Category"
msgstr "Kategori"
-#: templates/part.eventform.php:19
+#: templates/part.eventform.php:13
msgid "Select category"
msgstr "Vælg kategori"
-#: templates/part.eventform.php:45 templates/part.eventinfo.php:28
+#: templates/part.eventform.php:37
msgid "All Day Event"
msgstr "Heldagsarrangement"
-#: templates/part.eventform.php:49 templates/part.eventinfo.php:31
+#: templates/part.eventform.php:41
msgid "From"
msgstr "Fra"
-#: templates/part.eventform.php:57 templates/part.eventinfo.php:38
+#: templates/part.eventform.php:49
msgid "To"
msgstr "Til"
-#: templates/part.eventform.php:65 templates/part.eventinfo.php:44
+#: templates/part.eventform.php:57
+msgid "Advanced options"
+msgstr "Avancerede indstillinger"
+
+#: templates/part.eventform.php:61
msgid "Repeat"
msgstr "Gentag"
-#: templates/part.eventform.php:81 templates/part.eventinfo.php:51
-msgid "Attendees"
-msgstr "Deltagere"
+#: templates/part.eventform.php:68
+msgid "Advanced"
+msgstr "Avanceret"
+
+#: templates/part.eventform.php:112
+msgid "Select weekdays"
+msgstr "Vælg ugedage"
+
+#: templates/part.eventform.php:125 templates/part.eventform.php:138
+msgid "Select days"
+msgstr "Vælg dage"
+
+#: templates/part.eventform.php:130
+msgid "and the events day of year."
+msgstr ""
+
+#: templates/part.eventform.php:143
+msgid "and the events day of month."
+msgstr ""
+
+#: templates/part.eventform.php:151
+msgid "Select months"
+msgstr "Vælg måneder"
+
+#: templates/part.eventform.php:164
+msgid "Select weeks"
+msgstr "Vælg uger"
+
+#: templates/part.eventform.php:169
+msgid "and the events week of year."
+msgstr ""
+
+#: templates/part.eventform.php:175
+msgid "Interval"
+msgstr "Interval"
+
+#: templates/part.eventform.php:181
+msgid "End"
+msgstr "Afslutning"
+
+#: templates/part.eventform.php:193
+msgid "occurrences"
+msgstr "forekomster"
+
+#: templates/part.eventform.php:208
+msgid "Location"
+msgstr "Sted"
+
+#: templates/part.eventform.php:210
+msgid "Location of the Event"
+msgstr "Placering af begivenheden"
+
+#: templates/part.eventform.php:216
+msgid "Description"
+msgstr "Beskrivelse"
-#: templates/part.eventform.php:89
+#: templates/part.eventform.php:218
msgid "Description of the Event"
msgstr "Beskrivelse af begivenheden"
-#: templates/part.eventinfo.php:63
-msgid "Close"
-msgstr "Luk"
+#: templates/part.import.php:1
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the calendar"
+msgstr "Vælg venligst kalender"
+
+#: templates/part.import.php:10
+msgid "create a new calendar"
+msgstr ""
+
+#: templates/part.import.php:15
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import"
+msgstr "Importer"
+
+#: templates/part.import.php:20
+msgid "Importing calendar"
+msgstr ""
+
+#: templates/part.import.php:23
+msgid "Calendar imported successfully"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Close Dialog"
+msgstr ""
#: templates/part.newevent.php:1
msgid "Create a new event"
msgstr "Opret en ny begivenhed"
-#: templates/settings.php:11
+#: templates/settings.php:13
msgid "Timezone"
msgstr "Tidszone"
+#: templates/settings.php:30
+msgid "Check always for changes of the timezone"
+msgstr "Check altid efter ændringer i tidszone"
+
+#: templates/settings.php:32
+msgid "Timeformat"
+msgstr "Tidsformat"
+
+#: templates/settings.php:34
+msgid "24h"
+msgstr "24T"
+
+#: templates/settings.php:35
+msgid "12h"
+msgstr "12T"
+
+#: templates/settings.php:41
+msgid "Calendar CalDAV syncing address:"
+msgstr "Synkroniseringsadresse til CalDAV:"
+
diff --git a/l10n/da/contacts.po b/l10n/da/contacts.po
index c65bf62822a..7a69003bd97 100644
--- a/l10n/da/contacts.po
+++ b/l10n/da/contacts.po
@@ -3,14 +3,16 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <mikkelbjerglarsen@gmail.com>, 2011.
+# Morten Juhl-Johansen Zölde-Fejér <morten@writtenandread.net>, 2011, 2012.
# Pascal d'Hermilly <pascal@dhermilly.dk>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 20:41+0000\n"
-"Last-Translator: pascal_a <pascal@dhermilly.dk>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Danish (http://www.transifex.net/projects/p/owncloud/team/da/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,164 +20,273 @@ msgstr ""
"Language: da\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/addcard.php:31 ajax/addproperty.php:31 ajax/deletebook.php:32
-#: ajax/deletecard.php:32 ajax/deleteproperty.php:34 ajax/getdetails.php:32
-#: ajax/setproperty.php:32 ajax/showaddcard.php:30 ajax/showaddproperty.php:31
-#: ajax/showsetproperty.php:32 photo.php:32
-msgid "You need to log in."
-msgstr "Du skal logge ind."
+#: ajax/activation.php:17 ajax/updateaddressbook.php:26
+msgid "Error (de)activating addressbook."
+msgstr ""
-#: ajax/addcard.php:37
-msgid "This is not your addressbook."
-msgstr "Dette er ikke din adressebog."
+#: ajax/addcard.php:79
+msgid "There was an error adding the contact."
+msgstr ""
-#: ajax/addproperty.php:37 ajax/deletecard.php:39 ajax/deleteproperty.php:41
-#: ajax/getdetails.php:39 ajax/setproperty.php:38 ajax/showaddproperty.php:37
-#: ajax/showsetproperty.php:38 photo.php:39
-msgid "Contact could not be found."
-msgstr "Kontakt kunne ikke findes."
+#: ajax/addproperty.php:39
+msgid "Cannot add empty property."
+msgstr ""
-#: ajax/addproperty.php:43 ajax/deletebook.php:38 ajax/deletecard.php:45
-#: ajax/deleteproperty.php:47 ajax/getdetails.php:45 ajax/setproperty.php:44
-#: ajax/showaddproperty.php:43 ajax/showsetproperty.php:44 photo.php:45
-msgid "This is not your contact."
-msgstr "Dette er ikke din kontakt."
+#: ajax/addproperty.php:51
+msgid "At least one of the address fields has to be filled out."
+msgstr ""
-#: ajax/addproperty.php:50 ajax/deleteproperty.php:54 ajax/getdetails.php:52
-#: ajax/setproperty.php:51 ajax/showsetproperty.php:51
-msgid "vCard could not be read."
-msgstr "Kunne ikke læse vCard."
+#: ajax/addproperty.php:77
+msgid "Error adding contact property."
+msgstr ""
-#: ajax/deleteproperty.php:65 ajax/setproperty.php:62
-#: ajax/showsetproperty.php:62
-msgid "Information about vCard is incorrect. Please reload the page."
-msgstr "Informationen om vCard er forkert. Genindlæs siden."
+#: ajax/createaddressbook.php:20
+msgid "Error adding addressbook."
+msgstr ""
-#: photo.php:53
-msgid "This card is not RFC compatible."
-msgstr "Dette kort er ikke RFC-kompatibelt."
+#: ajax/createaddressbook.php:26
+msgid "Error activating addressbook."
+msgstr ""
-#: photo.php:90
-msgid "This card does not contain a photo."
-msgstr "Dette kort indeholder ikke et foto."
+#: ajax/deleteproperty.php:40
+msgid "Error deleting contact property."
+msgstr ""
-#: templates/index.php:8
-msgid "Add Contact"
-msgstr "Tilføj kontakt"
+#: ajax/setproperty.php:79
+msgid "Error updating contact property."
+msgstr ""
-#: templates/part.addcardform.php:5
-msgid "Group"
-msgstr "Gruppe"
+#: ajax/updateaddressbook.php:20
+msgid "Error updating addressbook."
+msgstr ""
-#: templates/part.addcardform.php:12 templates/part.property.php:3
-msgid "Name"
-msgstr "Navn"
+#: appinfo/app.php:21 templates/settings.php:3
+msgid "Contacts"
+msgstr ""
-#: templates/part.addcardform.php:14
-msgid "Create Contact"
-msgstr "Ny Kontakt"
+#: lib/app.php:42
+msgid "This is not your addressbook."
+msgstr "Dette er ikke din adressebog."
+
+#: lib/app.php:51 photo.php:34
+msgid "Contact could not be found."
+msgstr "Kontaktperson kunne ikke findes."
+
+#: lib/app.php:79
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "Informationen om vCard er forkert. Genindlæs siden."
-#: templates/part.addpropertyform.php:4 templates/part.property.php:40
+#: lib/app.php:91 templates/part.addcardform.php:54
+#: templates/part.property.php:45 templates/part.setpropertyform.php:7
msgid "Address"
msgstr "Adresse"
-#: templates/part.addpropertyform.php:5
+#: lib/app.php:92 templates/part.addcardform.php:43
msgid "Telephone"
msgstr "Telefon"
-#: templates/part.addpropertyform.php:6 templates/part.property.php:22
+#: lib/app.php:93 templates/part.addcardform.php:37
+#: templates/part.property.php:16 templates/part.setpropertyform.php:51
msgid "Email"
msgstr "Email"
-#: templates/part.addpropertyform.php:7 templates/part.property.php:15
+#: lib/app.php:94 templates/part.addcardform.php:27
+#: templates/part.property.php:9 templates/part.setpropertyform.php:54
msgid "Organization"
msgstr "Organisation"
-#: templates/part.addpropertyform.php:17 templates/part.addpropertyform.php:32
+#: lib/app.php:106 lib/app.php:113
msgid "Work"
msgstr "Arbejde"
-#: templates/part.addpropertyform.php:18 templates/part.addpropertyform.php:30
+#: lib/app.php:107 lib/app.php:111
msgid "Home"
-msgstr "Hjem"
+msgstr "Hjemme"
+
+#: lib/app.php:112
+msgid "Mobile"
+msgstr "Mobil"
+
+#: lib/app.php:114
+msgid "Text"
+msgstr "SMS"
+
+#: lib/app.php:115
+msgid "Voice"
+msgstr "Telefonsvarer"
+
+#: lib/app.php:116
+msgid "Fax"
+msgstr "Fax"
+
+#: lib/app.php:117
+msgid "Video"
+msgstr "Video"
+
+#: lib/app.php:118
+msgid "Pager"
+msgstr "Personsøger"
-#: templates/part.addpropertyform.php:20 templates/part.property.php:48
-#: templates/part.setpropertyform.php:5
+#: lib/search.php:22
+msgid "Contact"
+msgstr ""
+
+#: photo.php:40
+msgid "This is not your contact."
+msgstr "Dette er ikke din kontaktperson."
+
+#: photo.php:48
+msgid "This card is not RFC compatible."
+msgstr "Dette kort er ikke RFC-kompatibelt."
+
+#: photo.php:85
+msgid "This card does not contain a photo."
+msgstr "Dette kort indeholder ikke et foto."
+
+#: templates/index.php:6
+msgid "Add Contact"
+msgstr "Tilføj kontaktperson"
+
+#: templates/index.php:7
+msgid "Addressbooks"
+msgstr ""
+
+#: templates/part.addcardform.php:8
+msgid "Addressbook"
+msgstr ""
+
+#: templates/part.addcardform.php:21
+msgid "Name"
+msgstr "Navn"
+
+#: templates/part.addcardform.php:57 templates/part.details.php:43
+#: templates/part.details.php:79 templates/part.setpropertyform.php:10
+#: templates/part.setpropertyform.php:47
+msgid "Type"
+msgstr "Type"
+
+#: templates/part.addcardform.php:65 templates/part.details.php:49
+#: templates/part.setpropertyform.php:16
msgid "PO Box"
msgstr "Postboks"
-#: templates/part.addpropertyform.php:21 templates/part.property.php:51
-#: templates/part.setpropertyform.php:6
+#: templates/part.addcardform.php:72 templates/part.details.php:53
+#: templates/part.setpropertyform.php:20
msgid "Extended"
msgstr "Udvidet"
-#: templates/part.addpropertyform.php:22 templates/part.property.php:54
-#: templates/part.setpropertyform.php:7
+#: templates/part.addcardform.php:78 templates/part.details.php:57
+#: templates/part.setpropertyform.php:24
msgid "Street"
msgstr "Vej"
-#: templates/part.addpropertyform.php:23 templates/part.property.php:57
-#: templates/part.setpropertyform.php:8
+#: templates/part.addcardform.php:84 templates/part.details.php:61
+#: templates/part.setpropertyform.php:28
msgid "City"
msgstr "By"
-#: templates/part.addpropertyform.php:24 templates/part.property.php:60
-#: templates/part.setpropertyform.php:9
+#: templates/part.addcardform.php:90 templates/part.details.php:65
+#: templates/part.setpropertyform.php:32
msgid "Region"
msgstr "Region"
-#: templates/part.addpropertyform.php:25 templates/part.property.php:63
-#: templates/part.setpropertyform.php:10
+#: templates/part.addcardform.php:96 templates/part.details.php:69
+#: templates/part.setpropertyform.php:36
msgid "Zipcode"
msgstr "Postnummer"
-#: templates/part.addpropertyform.php:26 templates/part.property.php:66
-#: templates/part.setpropertyform.php:11
+#: templates/part.addcardform.php:102 templates/part.details.php:73
+#: templates/part.setpropertyform.php:40
msgid "Country"
msgstr "Land"
-#: templates/part.addpropertyform.php:31
-msgid "Mobile"
-msgstr "Mobil"
+#: templates/part.addcardform.php:109
+msgid "Create Contact"
+msgstr "Ny kontaktperson"
-#: templates/part.addpropertyform.php:33
-msgid "Text"
-msgstr "SMS"
+#: templates/part.chooseaddressbook.php:1
+msgid "Choose active Address Books"
+msgstr "Vælg aktive adressebøger"
-#: templates/part.addpropertyform.php:34
-msgid "Voice"
-msgstr "Telefonsvarer"
+#: templates/part.chooseaddressbook.php:16
+msgid "New Address Book"
+msgstr "Ny adressebog"
-#: templates/part.addpropertyform.php:35
-msgid "Fax"
-msgstr "Fax"
+#: templates/part.chooseaddressbook.php:21
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "CardDav Link"
+msgstr "CardDav-link"
-#: templates/part.addpropertyform.php:36
-msgid "Video"
-msgstr "Video"
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Download"
+msgstr "Download"
-#: templates/part.addpropertyform.php:37
-msgid "Pager"
-msgstr "Personsøger"
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Edit"
+msgstr "Rediger"
-#: templates/part.details.php:31
+#: templates/part.chooseaddressbook.rowfields.php:5
msgid "Delete"
msgstr "Slet"
-#: templates/part.details.php:32
-msgid "Add Property"
-msgstr "Tilføj Egenskab"
+#: templates/part.details.php:3
+msgid "Download contact"
+msgstr ""
+
+#: templates/part.details.php:4
+msgid "Delete contact"
+msgstr "Slet kontaktperson"
+
+#: templates/part.details.php:34
+msgid "Add"
+msgstr "Tilføj"
-#: templates/part.property.php:9
+#: templates/part.editaddressbook.php:9
+msgid "New Addressbook"
+msgstr ""
+
+#: templates/part.editaddressbook.php:9
+msgid "Edit Addressbook"
+msgstr ""
+
+#: templates/part.editaddressbook.php:12
+msgid "Displayname"
+msgstr "Vist navn"
+
+#: templates/part.editaddressbook.php:23
+msgid "Active"
+msgstr "Aktiv"
+
+#: templates/part.editaddressbook.php:29
+msgid "Save"
+msgstr "Gem"
+
+#: templates/part.editaddressbook.php:29
+msgid "Submit"
+msgstr "Gem"
+
+#: templates/part.editaddressbook.php:30
+msgid "Cancel"
+msgstr "Fortryd"
+
+#: templates/part.property.php:3
msgid "Birthday"
msgstr "Fødselsdag"
-#: templates/part.property.php:29
+#: templates/part.property.php:23
+msgid "Preferred"
+msgstr "Foretrukken"
+
+#: templates/part.property.php:23 templates/part.setpropertyform.php:45
msgid "Phone"
msgstr "Telefon"
-#: templates/part.setpropertyform.php:17
-msgid "Edit"
-msgstr "Redigér"
+#: templates/part.setpropertyform.php:57
+msgid "Update"
+msgstr "Opdater"
+
+#: templates/settings.php:4
+msgid "CardDAV syncing address:"
+msgstr ""
diff --git a/l10n/da/core.po b/l10n/da/core.po
index 90f79622ab2..f24a20c6b16 100644
--- a/l10n/da/core.po
+++ b/l10n/da/core.po
@@ -4,14 +4,15 @@
#
# Translators:
# <mikkelbjerglarsen@gmail.com>, 2011.
+# Morten Juhl-Johansen Zölde-Fejér <morten@writtenandread.net>, 2011, 2012.
# Pascal d'Hermilly <pascal@dhermilly.dk>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 18:17+0200\n"
-"PO-Revision-Date: 2011-09-14 07:41+0000\n"
-"Last-Translator: mikkel_ilu <mikkelbjerglarsen@gmail.com>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-13 22:14+0000\n"
+"Last-Translator: Morten Juhl-Johansen Zölde-Fejér <morten@writtenandread.net>\n"
"Language-Team: Danish (http://www.transifex.net/projects/p/owncloud/team/da/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,6 +20,51 @@ msgstr ""
"Language: da\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+#: lostpassword/index.php:24
+msgid "Owncloud password reset"
+msgstr "Nulstil adgangskode til Owncloud"
+
+#: lostpassword/templates/email.php:1
+msgid "Use the following link to reset your password: {link}"
+msgstr "Anvend følgende link til at nulstille din adgangskode: {link}"
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr "Du vil modtage et link til at nulstille dit kodeord via email."
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Requested"
+msgstr "Forespugt"
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr "Login fejlede!"
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:22
+#: templates/login.php:8
+msgid "Username"
+msgstr "Brugernavn"
+
+#: lostpassword/templates/lostpassword.php:14
+msgid "Request reset"
+msgstr "Anmod om nulstilling"
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr "Dit kodeord blev nulstillet"
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr "Til login-side"
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr "Nyt kodeord"
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr "Nulstil kodeord"
+
#: strings.php:5
msgid "Personal"
msgstr "Personlig"
@@ -45,56 +91,52 @@ msgstr "Sky ikke fundet"
#: templates/installation.php:20
msgid "Create an <strong>admin account</strong>"
-msgstr "Lav en <strong>administrator konto</strong>"
+msgstr "Opret en <strong>administratorkonto</strong>"
-#: templates/installation.php:21
-msgid "Username"
-msgstr "Brugernavn"
-
-#: templates/installation.php:22
+#: templates/installation.php:26 templates/login.php:12
msgid "Password"
msgstr "Kodeord"
-#: templates/installation.php:27
+#: templates/installation.php:32
+msgid "Advanced"
+msgstr "Avanceret"
+
+#: templates/installation.php:34
+msgid "Data folder"
+msgstr "Datamappe"
+
+#: templates/installation.php:41
msgid "Configure the database"
msgstr "Konfigurer databasen"
-#: templates/installation.php:32 templates/installation.php:43
-#: templates/installation.php:53
+#: templates/installation.php:46 templates/installation.php:57
+#: templates/installation.php:67
msgid "will be used"
msgstr "vil blive brugt"
-#: templates/installation.php:64
+#: templates/installation.php:79
msgid "Database user"
-msgstr "Database-bruger"
+msgstr "Databasebruger"
-#: templates/installation.php:65
+#: templates/installation.php:83
msgid "Database password"
-msgstr "Database-kodeord"
+msgstr "Databasekodeord"
-#: templates/installation.php:66
+#: templates/installation.php:87
msgid "Database name"
-msgstr "Database-navn"
+msgstr "Navn på database"
-#: templates/installation.php:72
-msgid "Advanced"
-msgstr "Avanceret"
-
-#: templates/installation.php:75
+#: templates/installation.php:93
msgid "Database host"
-msgstr "Database host"
+msgstr "Databasehost"
-#: templates/installation.php:76
-msgid "Data folder"
-msgstr "Data mappe"
-
-#: templates/installation.php:79
+#: templates/installation.php:98
msgid "Finish setup"
-msgstr "Afslut installation"
+msgstr "Afslut opsætning"
#: templates/layout.guest.php:35
-msgid "gives you freedom and control over your own data"
-msgstr "giver dig frihed og kontrol over dine egne data"
+msgid "web services under your control"
+msgstr "Webtjenester under din kontrol"
#: templates/layout.user.php:34
msgid "Log out"
@@ -104,37 +146,21 @@ msgstr "Log ud"
msgid "Settings"
msgstr "Indstillinger"
-#: templates/login.php:4
+#: templates/login.php:5
msgid "Lost your password?"
msgstr "Mistet dit kodeord?"
-#: templates/login.php:9 templates/login.php:13
+#: templates/login.php:15
msgid "remember"
msgstr "husk"
+#: templates/login.php:16
+msgid "Log in"
+msgstr "Log ind"
+
#: templates/logout.php:1
msgid "You are logged out."
-msgstr "Du er nu logget ud"
-
-#: templates/lostpassword.php:3
-msgid "You will receive a link to reset your password via Email."
-msgstr "Du vil modtage et link til at nulstille din adgangskode via e-mail."
-
-#: templates/lostpassword.php:5
-msgid "Requested"
-msgstr "Anmodet"
-
-#: templates/lostpassword.php:8
-msgid "Login failed!"
-msgstr "Login mislykkedes!"
-
-#: templates/lostpassword.php:10
-msgid "Username or Email"
-msgstr "Brugernavn eller E-mail"
-
-#: templates/lostpassword.php:11
-msgid "Request reset"
-msgstr "Anmod om nulstilling"
+msgstr "Du er nu logget ud."
#: templates/part.pagenavi.php:3
msgid "prev"
@@ -144,16 +170,4 @@ msgstr "forrige"
msgid "next"
msgstr "næste"
-#: templates/resetpassword.php:4
-msgid "Your password was reset"
-msgstr "Din adgangskode blev nulstillet"
-
-#: templates/resetpassword.php:6
-msgid "New password"
-msgstr "Ny adgangskode"
-
-#: templates/resetpassword.php:7
-msgid "Reset password"
-msgstr "Nulstil adgangskode"
-
diff --git a/l10n/da/files.po b/l10n/da/files.po
index ac9da46eefa..c7fc915834a 100644
--- a/l10n/da/files.po
+++ b/l10n/da/files.po
@@ -3,14 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Morten Juhl-Johansen Zölde-Fejér <morten@writtenandread.net>, 2011, 2012.
# Pascal d'Hermilly <pascal@dhermilly.dk>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-13 22:05+0000\n"
+"Last-Translator: Morten Juhl-Johansen Zölde-Fejér <morten@writtenandread.net>\n"
"Language-Team: Danish (http://www.transifex.net/projects/p/owncloud/team/da/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,33 +19,36 @@ msgstr ""
"Language: da\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/upload.php:24
+#: ajax/upload.php:19
msgid "There is no error, the file uploaded with success"
-msgstr ""
+msgstr "Der er ingen fejl, filen blev uploadet med success"
-#: ajax/upload.php:25
+#: ajax/upload.php:20
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr ""
+"Den uploadede fil overskrider upload_max_filesize direktivet i php.ini"
-#: ajax/upload.php:26
+#: ajax/upload.php:21
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
+"Den uploadede fil overskrider MAX_FILE_SIZE -direktivet som er specificeret "
+"i HTML-formularen"
-#: ajax/upload.php:27
+#: ajax/upload.php:22
msgid "The uploaded file was only partially uploaded"
-msgstr ""
+msgstr "Den uploadede file blev kun delvist uploadet"
-#: ajax/upload.php:28
+#: ajax/upload.php:23
msgid "No file was uploaded"
-msgstr ""
+msgstr "Ingen fil blev uploadet"
-#: ajax/upload.php:29
+#: ajax/upload.php:24
msgid "Missing a temporary folder"
-msgstr ""
+msgstr "Mangler en midlertidig mappe"
-#: appinfo/app.php:7
+#: appinfo/app.php:8
msgid "Files"
msgstr "Filer"
@@ -52,48 +56,60 @@ msgstr "Filer"
msgid "Maximum upload size"
msgstr "Maksimal upload-størrelse"
+#: templates/index.php:7
+msgid "New"
+msgstr "Ny"
+
#: templates/index.php:10
+msgid "Text file"
+msgstr "Tekstfil"
+
+#: templates/index.php:11
+msgid "Folder"
+msgstr "Mappe"
+
+#: templates/index.php:12
+msgid "From the web"
+msgstr "Fra nettet"
+
+#: templates/index.php:22
msgid "Upload"
msgstr "Upload"
-#: templates/index.php:17
-msgid "New Folder"
-msgstr "Ny Mappe"
-
-#: templates/index.php:31
+#: templates/index.php:35
msgid "Nothing in here. Upload something!"
msgstr "Her er tomt. Upload noget!"
-#: templates/index.php:39
+#: templates/index.php:43
msgid "Name"
msgstr "Navn"
-#: templates/index.php:41
+#: templates/index.php:45
msgid "Download"
msgstr "Download"
-#: templates/index.php:45
+#: templates/index.php:49
msgid "Size"
msgstr "Størrelse"
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Modified"
msgstr "Ændret"
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Delete"
msgstr "Slet"
-#: templates/index.php:54
+#: templates/index.php:58
msgid "Upload too large"
msgstr "Upload for stor"
-#: templates/index.php:56
+#: templates/index.php:60
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr ""
-"Filerne du prøver at uploade er større end den maksimale størrelse for fil-"
-"upload på denne server."
+"Filerne, du prøver at uploade, er større end den maksimale størrelse for "
+"fil-upload på denne server."
diff --git a/l10n/da/gallery.po b/l10n/da/gallery.po
new file mode 100644
index 00000000000..f763cf822d6
--- /dev/null
+++ b/l10n/da/gallery.po
@@ -0,0 +1,32 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:48+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Danish (http://www.transifex.net/projects/p/owncloud/team/da/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: da\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:41
+msgid "Gallery"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Rescan"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+
diff --git a/l10n/da/media.po b/l10n/da/media.po
index 7c12df9653a..b73d59a6cfd 100644
--- a/l10n/da/media.po
+++ b/l10n/da/media.po
@@ -2,14 +2,16 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
+# Translators:
+# Morten Juhl-Johansen Zölde-Fejér <morten@writtenandread.net>, 2011.
# Pascal d'Hermilly <pascal@dhermilly.dk>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
-"Report-Msgid-Bugs-To: http://bugs.kde.org/buglist.cgi?product=owncloud\n"
-"POT-Creation-Date: 2011-08-20 05:08+0200\n"
-"PO-Revision-Date: 2011-08-20 03:08+0000\n"
-"Last-Translator: JanCBorchardt <JanCBorchardt@fsfe.org>\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Danish (http://www.transifex.net/projects/p/owncloud/team/da/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,39 +19,35 @@ msgstr ""
"Language: da\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: appinfo/app.php:31
+#: appinfo/app.php:32
msgid "Music"
msgstr "Musik"
-#: templates/music.php:3
+#: templates/music.php:3 templates/player.php:13
msgid "Play"
-msgstr ""
+msgstr "Afspil"
-#: templates/music.php:4 templates/music.php:30
+#: templates/music.php:4 templates/music.php:26 templates/player.php:14
msgid "Pause"
msgstr "Pause"
#: templates/music.php:5
msgid "Previous"
-msgstr ""
+msgstr "Forrige"
-#: templates/music.php:6
+#: templates/music.php:6 templates/player.php:15
msgid "Next"
-msgstr ""
+msgstr "Næste"
#: templates/music.php:7
msgid "Mute"
-msgstr ""
+msgstr "Lydløs"
#: templates/music.php:8
msgid "Unmute"
-msgstr ""
-
-#: templates/music.php:28
-msgid "Songs scanned"
-msgstr "Sange skannet"
+msgstr "Lyd til"
-#: templates/music.php:29
+#: templates/music.php:25
msgid "Rescan Collection"
msgstr "Genskan Samling"
diff --git a/l10n/da/settings.po b/l10n/da/settings.po
index 7921a74708a..0882ebc94e7 100644
--- a/l10n/da/settings.po
+++ b/l10n/da/settings.po
@@ -2,14 +2,17 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
+# Translators:
+# <mikkelbjerglarsen@gmail.com>, 2011.
+# Morten Juhl-Johansen Zölde-Fejér <morten@writtenandread.net>, 2011, 2012.
# Pascal d'Hermilly <pascal@dhermilly.dk>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
-"Report-Msgid-Bugs-To: http://bugs.kde.org/buglist.cgi?product=owncloud\n"
-"POT-Creation-Date: 2011-08-28 01:11+0200\n"
-"PO-Revision-Date: 2011-08-26 13:49+0000\n"
-"Last-Translator: pascal_a <pascal@dhermilly.dk>\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-13 22:44+0000\n"
+"Last-Translator: Morten Juhl-Johansen Zölde-Fejér <morten@writtenandread.net>\n"
"Language-Team: Danish (http://www.transifex.net/projects/p/owncloud/team/da/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,22 +20,26 @@ msgstr ""
"Language: da\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/openid.php:13 ajax/setlanguage.php:13
-msgid "Authentication error"
-msgstr "Godkendelsesfejl"
+#: ajax/lostpassword.php:14
+msgid "email Changed"
+msgstr "email ændret"
-#: ajax/openid.php:21
-msgid "OpenID Changed"
-msgstr "OpenID ændret"
-
-#: ajax/openid.php:23 ajax/setlanguage.php:23
+#: ajax/lostpassword.php:16 ajax/openid.php:17 ajax/setlanguage.php:16
msgid "Invalid request"
msgstr "Ugyldig forespørgsel"
-#: ajax/setlanguage.php:21
+#: ajax/openid.php:15
+msgid "OpenID Changed"
+msgstr "OpenID ændret"
+
+#: ajax/setlanguage.php:14
msgid "Language changed"
msgstr "Sprog ændret"
+#: templates/admin.php:13
+msgid "Log level"
+msgstr "Log-niveau"
+
#: templates/apps.php:8
msgid "Add your application"
msgstr "Tilføj dit program"
@@ -53,15 +60,15 @@ msgstr "af"
msgid "Ask a question"
msgstr "Stil et spørgsmål"
-#: templates/help.php:17
+#: templates/help.php:20
msgid "Problems connecting to help database."
-msgstr "Problemer med at forbinde til hjælpe-databasen"
+msgstr "Problemer med at forbinde til hjælpe-databasen."
-#: templates/help.php:18
+#: templates/help.php:21
msgid "Go there manually."
msgstr "Gå derhen manuelt."
-#: templates/help.php:26
+#: templates/help.php:29
msgid "Answer"
msgstr "Svar"
@@ -77,6 +84,10 @@ msgstr "af det tilgængelige"
msgid "Your password got changed"
msgstr "Din adgangskode er blevet ændret"
+#: templates/personal.php:14
+msgid "Unable to change your password"
+msgstr "Ude af stand til at ændre dit kodeord"
+
#: templates/personal.php:15
msgid "Current password"
msgstr "Nuværende adgangskode"
@@ -91,37 +102,53 @@ msgstr "vis"
#: templates/personal.php:18
msgid "Change password"
-msgstr "Skift password"
+msgstr "Skift kodeord"
#: templates/personal.php:24
+msgid "Email"
+msgstr "Email"
+
+#: templates/personal.php:25
+msgid "Your email address"
+msgstr "Din emailadresse"
+
+#: templates/personal.php:26
+msgid "Fill in an email address to enable password recovery"
+msgstr "Indtast en emailadresse for at kunne få påmindelse om adgangskode"
+
+#: templates/personal.php:32 templates/personal.php:33
msgid "Language"
msgstr "Sprog"
-#: templates/personal.php:30
-msgid "Help translating"
-msgstr "Hjælp med at oversætte"
+#: templates/personal.php:38
+msgid "Help translate"
+msgstr "Hjælp med oversættelsen"
-#: templates/personal.php:36
+#: templates/personal.php:45
msgid "use this address to connect to your ownCloud in your file manager"
msgstr "benyt denne adresse til at forbinde til din ownCloud i din filbrowser"
-#: templates/users.php:16
+#: templates/users.php:15 templates/users.php:30
msgid "Name"
msgstr "Navn"
-#: templates/users.php:17
+#: templates/users.php:16 templates/users.php:31
msgid "Password"
msgstr "Kodeord"
-#: templates/users.php:18 templates/users.php:36
+#: templates/users.php:17 templates/users.php:32 templates/users.php:46
msgid "Groups"
msgstr "Grupper"
-#: templates/users.php:24
+#: templates/users.php:23
msgid "Create"
msgstr "Ny"
-#: templates/users.php:48
+#: templates/users.php:33
+msgid "Quota"
+msgstr "Kvote"
+
+#: templates/users.php:58
msgid "Delete"
msgstr "Slet"
diff --git a/l10n/de/calendar.po b/l10n/de/calendar.po
index a75ca864a1b..786f0329267 100644
--- a/l10n/de/calendar.po
+++ b/l10n/de/calendar.po
@@ -3,15 +3,17 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <admin@s-goecker.de>, 2011.
+# <georg.stefan.germany@googlemail.com>, 2011, 2012.
# Jan-Christoph Borchardt <JanCBorchardt@fsfe.org>, 2011.
# Jan-Christoph Borchardt <jan@unhosted.org>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: German (http://www.transifex.net/projects/p/owncloud/team/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,321 +21,403 @@ msgstr ""
"Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/createcalendar.php:18 ajax/settimezone.php:19
-#: ajax/updatecalendar.php:18
-msgid "Authentication error"
-msgstr "Anmeldefehler"
+#: ajax/guesstimezone.php:42
+msgid "New Timezone:"
+msgstr "Neue Zeitzone:"
-#: ajax/editeventform.php:25
-msgid "Wrong calendar"
-msgstr "Falscher Kalender"
-
-#: ajax/settimezone.php:27
+#: ajax/settimezone.php:22
msgid "Timezone changed"
msgstr "Zeitzone geändert"
-#: ajax/settimezone.php:29
+#: ajax/settimezone.php:24
msgid "Invalid request"
msgstr "Anfragefehler"
-#: appinfo/app.php:19 templates/part.eventform.php:27
-#: templates/part.eventinfo.php:18
+#: appinfo/app.php:20 templates/calendar.php:13
+#: templates/part.eventform.php:20
msgid "Calendar"
msgstr "Kalender"
-#: lib/object.php:292
+#: lib/app.php:19
+msgid "Wrong calendar"
+msgstr "Falscher Kalender"
+
+#: lib/app.php:60 lib/object.php:332
msgid "Birthday"
msgstr "Geburtstag"
-#: lib/object.php:293
+#: lib/app.php:61 lib/object.php:333
msgid "Business"
msgstr "Geschäftlich"
-#: lib/object.php:294
+#: lib/app.php:62 lib/object.php:334
msgid "Call"
msgstr "Anruf"
-#: lib/object.php:295
+#: lib/app.php:63 lib/object.php:335
msgid "Clients"
msgstr "Kunden"
-#: lib/object.php:296
+#: lib/app.php:64 lib/object.php:336
msgid "Deliverer"
msgstr "Lieferant"
-#: lib/object.php:297
+#: lib/app.php:65 lib/object.php:337
msgid "Holidays"
msgstr "Urlaub"
-#: lib/object.php:298
+#: lib/app.php:66 lib/object.php:338
msgid "Ideas"
msgstr "Ideen"
-#: lib/object.php:299
+#: lib/app.php:67 lib/object.php:339
msgid "Journey"
msgstr "Reise"
-#: lib/object.php:300
+#: lib/app.php:68 lib/object.php:340
msgid "Jubilee"
msgstr "Jubiläum"
-#: lib/object.php:301
+#: lib/app.php:69 lib/object.php:341
msgid "Meeting"
msgstr "Treffen"
-#: lib/object.php:302
+#: lib/app.php:70 lib/object.php:342
msgid "Other"
msgstr "Anderes"
-#: lib/object.php:303
+#: lib/app.php:71 lib/object.php:343
msgid "Personal"
msgstr "Persönlich"
-#: lib/object.php:304
+#: lib/app.php:72 lib/object.php:344
msgid "Projects"
msgstr "Projekte"
-#: lib/object.php:305
+#: lib/app.php:73 lib/object.php:345
msgid "Questions"
msgstr "Fragen"
-#: lib/object.php:306
+#: lib/app.php:74 lib/object.php:346
msgid "Work"
msgstr "Arbeit"
-#: lib/object.php:313
+#: lib/object.php:353
msgid "Does not repeat"
msgstr "einmalig"
-#: lib/object.php:314
+#: lib/object.php:354
msgid "Daily"
msgstr "täglich"
-#: lib/object.php:315
+#: lib/object.php:355
msgid "Weekly"
msgstr "wöchentlich"
-#: lib/object.php:316
+#: lib/object.php:356
msgid "Every Weekday"
msgstr "jeden Wochentag"
-#: lib/object.php:317
+#: lib/object.php:357
msgid "Bi-Weekly"
msgstr "jede zweite Woche"
-#: lib/object.php:318
+#: lib/object.php:358
msgid "Monthly"
msgstr "monatlich"
-#: lib/object.php:319
+#: lib/object.php:359
msgid "Yearly"
msgstr "jährlich"
-#: lib/object.php:337
-msgid "Not an array"
-msgstr "Kein Feld"
+#: lib/object.php:366
+msgid "never"
+msgstr "niemals"
-#: templates/calendar.php:3
-msgid "All day"
-msgstr "Ganztags"
+#: lib/object.php:367
+msgid "by occurrences"
+msgstr "nach Vorkommen"
-#: templates/calendar.php:32
-msgid "Sunday"
-msgstr "Sonntag"
+#: lib/object.php:368
+msgid "by date"
+msgstr "nach Datum"
+
+#: lib/object.php:375
+msgid "by monthday"
+msgstr "an einem Monatstag"
+
+#: lib/object.php:376
+msgid "by weekday"
+msgstr "an einem Wochentag"
-#: templates/calendar.php:32
+#: lib/object.php:383 templates/lAfix.php:3
msgid "Monday"
msgstr "Montag"
-#: templates/calendar.php:32
+#: lib/object.php:384 templates/lAfix.php:4
msgid "Tuesday"
msgstr "Dienstag"
-#: templates/calendar.php:32
+#: lib/object.php:385 templates/lAfix.php:5
msgid "Wednesday"
msgstr "Mittwoch"
-#: templates/calendar.php:32
+#: lib/object.php:386 templates/lAfix.php:6
msgid "Thursday"
msgstr "Donnerstag"
-#: templates/calendar.php:32
+#: lib/object.php:387 templates/lAfix.php:7
msgid "Friday"
msgstr "Freitag"
-#: templates/calendar.php:32
+#: lib/object.php:388 templates/lAfix.php:8
msgid "Saturday"
msgstr "Samstag"
-#: templates/calendar.php:33
-msgid "Sun."
-msgstr "Son."
+#: lib/object.php:389 templates/lAfix.php:2
+msgid "Sunday"
+msgstr "Sonntag"
-#: templates/calendar.php:33
-msgid "Mon."
-msgstr "Mon."
+#: lib/object.php:396
+msgid "events week of month"
+msgstr "Woche des Monats vom Termin"
-#: templates/calendar.php:33
-msgid "Tue."
-msgstr "Die."
+#: lib/object.php:397
+msgid "first"
+msgstr "erste"
-#: templates/calendar.php:33
-msgid "Wed."
-msgstr "Mit."
+#: lib/object.php:398
+msgid "second"
+msgstr "zweite"
-#: templates/calendar.php:33
-msgid "Thu."
-msgstr "Don."
+#: lib/object.php:399
+msgid "third"
+msgstr "dritte"
-#: templates/calendar.php:33
-msgid "Fri."
-msgstr "Fre."
+#: lib/object.php:400
+msgid "fourth"
+msgstr "vierte"
-#: templates/calendar.php:33
-msgid "Sat."
-msgstr "Sam."
+#: lib/object.php:401
+msgid "fifth"
+msgstr "fünfte"
+
+#: lib/object.php:402
+msgid "last"
+msgstr "letzte"
-#: templates/calendar.php:34
+#: lib/object.php:424 templates/lAfix.php:16
msgid "January"
msgstr "Januar"
-#: templates/calendar.php:34
+#: lib/object.php:425 templates/lAfix.php:17
msgid "February"
msgstr "Februar"
-#: templates/calendar.php:34
+#: lib/object.php:426 templates/lAfix.php:18
msgid "March"
msgstr "März"
-#: templates/calendar.php:34
+#: lib/object.php:427 templates/lAfix.php:19
msgid "April"
msgstr "April"
-#: templates/calendar.php:34
+#: lib/object.php:428 templates/lAfix.php:20
msgid "May"
msgstr "Mai"
-#: templates/calendar.php:34
+#: lib/object.php:429 templates/lAfix.php:21
msgid "June"
msgstr "Juni"
-#: templates/calendar.php:34
+#: lib/object.php:430 templates/lAfix.php:22
msgid "July"
msgstr "Juli"
-#: templates/calendar.php:34
+#: lib/object.php:431 templates/lAfix.php:23
msgid "August"
msgstr "August"
-#: templates/calendar.php:34
+#: lib/object.php:432 templates/lAfix.php:24
msgid "September"
msgstr "September"
-#: templates/calendar.php:34
+#: lib/object.php:433 templates/lAfix.php:25
msgid "October"
msgstr "Oktober"
-#: templates/calendar.php:34
+#: lib/object.php:434 templates/lAfix.php:26
msgid "November"
msgstr "November"
-#: templates/calendar.php:34
+#: lib/object.php:435 templates/lAfix.php:27
msgid "December"
msgstr "Dezember"
-#: templates/calendar.php:35
-msgid "Jan."
-msgstr "Jan."
-
-#: templates/calendar.php:35
-msgid "Feb."
-msgstr "Feb."
+#: lib/object.php:441
+msgid "by events date"
+msgstr "bei Tag des Termins"
-#: templates/calendar.php:35
-msgid "Mar."
-msgstr "Mär."
+#: lib/object.php:442
+msgid "by yearday(s)"
+msgstr "an einem Tag des Jahres"
-#: templates/calendar.php:35
-msgid "Apr."
-msgstr "Apr."
+#: lib/object.php:443
+msgid "by weeknumber(s)"
+msgstr "an einer Wochennummer"
-#: templates/calendar.php:35
-msgid "May."
-msgstr "Mai"
+#: lib/object.php:444
+msgid "by day and month"
+msgstr "an einer Tag und Monats Kombination"
-#: templates/calendar.php:35
-msgid "Jun."
-msgstr "Jun."
+#: lib/object.php:467
+msgid "Not an array"
+msgstr "Kein Feld"
-#: templates/calendar.php:35
-msgid "Jul."
-msgstr "Jul."
+#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+msgid "Date"
+msgstr "Datum"
-#: templates/calendar.php:35
-msgid "Aug."
-msgstr "Aug."
+#: lib/search.php:40
+msgid "Cal."
+msgstr "Kal."
-#: templates/calendar.php:35
-msgid "Sep."
-msgstr "Sep."
+#: templates/calendar.php:10
+msgid "All day"
+msgstr "Ganztags"
-#: templates/calendar.php:35
-msgid "Oct."
-msgstr "Okt."
+#: templates/calendar.php:11
+msgid "Missing fields"
+msgstr "fehlende Felder"
-#: templates/calendar.php:35
-msgid "Nov."
-msgstr "Nov."
+#: templates/calendar.php:12 templates/part.eventform.php:3
+msgid "Title"
+msgstr "Titel"
-#: templates/calendar.php:35
-msgid "Dec."
-msgstr "Dez."
+#: templates/calendar.php:14
+msgid "From Date"
+msgstr "Startdatum"
-#: templates/calendar.php:36 templates/calendar.php:50
-#: templates/calendar.php:116
-msgid "Week"
-msgstr "Woche"
+#: templates/calendar.php:15
+msgid "From Time"
+msgstr "Startzeit"
-#: templates/calendar.php:37 templates/calendar.php:51
-msgid "Weeks"
-msgstr "Wochen"
+#: templates/calendar.php:16
+msgid "To Date"
+msgstr "Enddatum"
-#: templates/calendar.php:38
-msgid "More before {startdate}"
-msgstr "Mehr vor {startdate}"
+#: templates/calendar.php:17
+msgid "To Time"
+msgstr "Endzeit"
-#: templates/calendar.php:39
-msgid "More after {enddate}"
-msgstr "Mehr nach {enddate}"
+#: templates/calendar.php:18
+msgid "The event ends before it starts"
+msgstr "Der Termin hört auf, bevor er angefangen hat."
-#: templates/calendar.php:49
-msgid "Day"
-msgstr "Tag"
+#: templates/calendar.php:19
+msgid "There was a database fail"
+msgstr "Datenbankfehler"
#: templates/calendar.php:52
+msgid "Week"
+msgstr "Woche"
+
+#: templates/calendar.php:53
msgid "Month"
msgstr "Monat"
-#: templates/calendar.php:53
+#: templates/calendar.php:54
msgid "List"
msgstr "Liste"
-#: templates/calendar.php:58
+#: templates/calendar.php:59
msgid "Today"
msgstr "Heute"
-#: templates/calendar.php:59
+#: templates/calendar.php:60
msgid "Calendars"
msgstr "Kalender"
-#: templates/calendar.php:76 templates/calendar.php:94
-msgid "Time"
-msgstr "Zeit"
-
-#: templates/calendar.php:169
+#: templates/calendar.php:78
msgid "There was a fail, while parsing the file."
msgstr "Fehler beim Einlesen der Datei."
+#: templates/lAfix.php:9
+msgid "Sun."
+msgstr ""
+
+#: templates/lAfix.php:10
+msgid "Mon."
+msgstr ""
+
+#: templates/lAfix.php:11
+msgid "Tue."
+msgstr ""
+
+#: templates/lAfix.php:12
+msgid "Wed."
+msgstr ""
+
+#: templates/lAfix.php:13
+msgid "Thu."
+msgstr ""
+
+#: templates/lAfix.php:14
+msgid "Fri."
+msgstr ""
+
+#: templates/lAfix.php:15
+msgid "Sat."
+msgstr ""
+
+#: templates/lAfix.php:28
+msgid "Jan."
+msgstr ""
+
+#: templates/lAfix.php:29
+msgid "Feb."
+msgstr ""
+
+#: templates/lAfix.php:30
+msgid "Mar."
+msgstr ""
+
+#: templates/lAfix.php:31
+msgid "Apr."
+msgstr ""
+
+#: templates/lAfix.php:32
+msgid "May."
+msgstr ""
+
+#: templates/lAfix.php:33
+msgid "Jun."
+msgstr ""
+
+#: templates/lAfix.php:34
+msgid "Jul."
+msgstr ""
+
+#: templates/lAfix.php:35
+msgid "Aug."
+msgstr ""
+
+#: templates/lAfix.php:36
+msgid "Sep."
+msgstr ""
+
+#: templates/lAfix.php:37
+msgid "Oct."
+msgstr ""
+
+#: templates/lAfix.php:38
+msgid "Nov."
+msgstr ""
+
+#: templates/lAfix.php:39
+msgid "Dec."
+msgstr ""
+
#: templates/part.choosecalendar.php:1
msgid "Choose active calendars"
msgstr "Aktive Kalender wählen"
@@ -352,14 +436,13 @@ msgid "Download"
msgstr "Herunterladen"
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.eventinfo.php:64
msgid "Edit"
msgstr "Bearbeiten"
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.editevent.php:8
+#: templates/part.editevent.php:9
msgid "Delete"
-msgstr ""
+msgstr "Löschen"
#: templates/part.editcalendar.php:9
msgid "New calendar"
@@ -377,90 +460,181 @@ msgstr "Anzeigename"
msgid "Active"
msgstr "Aktiv"
-#: templates/part.editcalendar.php:29 templates/part.eventform.php:88
-#: templates/part.eventinfo.php:58
-msgid "Description"
-msgstr "Beschreibung"
-
-#: templates/part.editcalendar.php:35
+#: templates/part.editcalendar.php:29
msgid "Calendar color"
msgstr "Kalenderfarbe"
-#: templates/part.editcalendar.php:41
+#: templates/part.editcalendar.php:42
msgid "Save"
msgstr "Speichern"
-#: templates/part.editcalendar.php:41 templates/part.editevent.php:7
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
#: templates/part.newevent.php:6
msgid "Submit"
msgstr "Bestätigen"
-#: templates/part.editcalendar.php:42
+#: templates/part.editcalendar.php:43
msgid "Cancel"
msgstr "Abbrechen"
-#: templates/part.editevent.php:1 templates/part.eventinfo.php:1
+#: templates/part.editevent.php:1
msgid "Edit an event"
msgstr "Ereignis bearbeiten"
-#: templates/part.eventform.php:3 templates/part.eventinfo.php:4
-msgid "Title"
-msgstr "Titel"
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr "Exportieren"
#: templates/part.eventform.php:5
msgid "Title of the Event"
msgstr "Name"
-#: templates/part.eventform.php:9 templates/part.eventinfo.php:9
-msgid "Location"
-msgstr "Ort"
-
#: templates/part.eventform.php:11
-msgid "Location of the Event"
-msgstr "Ort"
-
-#: templates/part.eventform.php:17 templates/part.eventinfo.php:16
msgid "Category"
msgstr "Kategorie"
-#: templates/part.eventform.php:19
+#: templates/part.eventform.php:13
msgid "Select category"
msgstr "Kategorie auswählen"
-#: templates/part.eventform.php:45 templates/part.eventinfo.php:28
+#: templates/part.eventform.php:37
msgid "All Day Event"
msgstr "Ganztägiges Ereignis"
-#: templates/part.eventform.php:49 templates/part.eventinfo.php:31
+#: templates/part.eventform.php:41
msgid "From"
msgstr "von"
-#: templates/part.eventform.php:57 templates/part.eventinfo.php:38
+#: templates/part.eventform.php:49
msgid "To"
msgstr "bis"
-#: templates/part.eventform.php:65 templates/part.eventinfo.php:44
+#: templates/part.eventform.php:57
+msgid "Advanced options"
+msgstr "Erweiterte Optionen"
+
+#: templates/part.eventform.php:61
msgid "Repeat"
msgstr "wiederholen"
-#: templates/part.eventform.php:81 templates/part.eventinfo.php:51
-msgid "Attendees"
-msgstr "Teilnehmer"
+#: templates/part.eventform.php:68
+msgid "Advanced"
+msgstr "Erweitert"
+
+#: templates/part.eventform.php:112
+msgid "Select weekdays"
+msgstr "Wochentage auswählen"
+
+#: templates/part.eventform.php:125 templates/part.eventform.php:138
+msgid "Select days"
+msgstr "Tage auswählen"
+
+#: templates/part.eventform.php:130
+msgid "and the events day of year."
+msgstr "und den Tag des Jahres vom Termin"
+
+#: templates/part.eventform.php:143
+msgid "and the events day of month."
+msgstr "und den Tag des Monats vom Termin"
+
+#: templates/part.eventform.php:151
+msgid "Select months"
+msgstr "Monate auswählen"
+
+#: templates/part.eventform.php:164
+msgid "Select weeks"
+msgstr "Wochen auswählen"
+
+#: templates/part.eventform.php:169
+msgid "and the events week of year."
+msgstr "und den Tag des Jahres vom Termin"
+
+#: templates/part.eventform.php:175
+msgid "Interval"
+msgstr "Intervall"
+
+#: templates/part.eventform.php:181
+msgid "End"
+msgstr "Ende"
+
+#: templates/part.eventform.php:193
+msgid "occurrences"
+msgstr "Vorkommen"
+
+#: templates/part.eventform.php:208
+msgid "Location"
+msgstr "Ort"
+
+#: templates/part.eventform.php:210
+msgid "Location of the Event"
+msgstr "Ort"
+
+#: templates/part.eventform.php:216
+msgid "Description"
+msgstr "Beschreibung"
-#: templates/part.eventform.php:89
+#: templates/part.eventform.php:218
msgid "Description of the Event"
msgstr "Beschreibung"
-#: templates/part.eventinfo.php:63
-msgid "Close"
-msgstr "Schließen"
+#: templates/part.import.php:1
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the calendar"
+msgstr "Bitte wählen Sie den Kalender."
+
+#: templates/part.import.php:10
+msgid "create a new calendar"
+msgstr ""
+
+#: templates/part.import.php:15
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import"
+msgstr "Importieren"
+
+#: templates/part.import.php:20
+msgid "Importing calendar"
+msgstr ""
+
+#: templates/part.import.php:23
+msgid "Calendar imported successfully"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Close Dialog"
+msgstr ""
#: templates/part.newevent.php:1
msgid "Create a new event"
msgstr "Neues Ereignis"
-#: templates/settings.php:11
+#: templates/settings.php:13
msgid "Timezone"
msgstr "Zeitzone"
+#: templates/settings.php:30
+msgid "Check always for changes of the timezone"
+msgstr "immer die Zeitzone überprüfen"
+
+#: templates/settings.php:32
+msgid "Timeformat"
+msgstr "Zeitformat"
+
+#: templates/settings.php:34
+msgid "24h"
+msgstr "24h"
+
+#: templates/settings.php:35
+msgid "12h"
+msgstr "12h"
+
+#: templates/settings.php:41
+msgid "Calendar CalDAV syncing address:"
+msgstr "Kalender CalDAV Synchronisationsadresse:"
+
diff --git a/l10n/de/contacts.po b/l10n/de/contacts.po
index 75f737b0135..97bc43aa3d5 100644
--- a/l10n/de/contacts.po
+++ b/l10n/de/contacts.po
@@ -3,14 +3,17 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <georg.stefan.germany@googlemail.com>, 2011.
# Jan-Christoph Borchardt <JanCBorchardt@fsfe.org>, 2011.
+# Jan-Christoph Borchardt <jan@unhosted.org>, 2011.
+# <nelsonfritsch@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 20:10+0200\n"
-"PO-Revision-Date: 2011-09-23 18:11+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: German (http://www.transifex.net/projects/p/owncloud/team/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,164 +21,274 @@ msgstr ""
"Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/addcard.php:31 ajax/addproperty.php:31 ajax/deletebook.php:32
-#: ajax/deletecard.php:32 ajax/deleteproperty.php:34 ajax/getdetails.php:32
-#: ajax/setproperty.php:32 ajax/showaddcard.php:30 ajax/showaddproperty.php:31
-#: ajax/showsetproperty.php:32 photo.php:32
-msgid "You need to log in."
+#: ajax/activation.php:17 ajax/updateaddressbook.php:26
+msgid "Error (de)activating addressbook."
msgstr ""
-#: ajax/addcard.php:37
-msgid "This is not your addressbook."
+#: ajax/addcard.php:79
+msgid "There was an error adding the contact."
msgstr ""
-#: ajax/addproperty.php:37 ajax/deletecard.php:39 ajax/deleteproperty.php:41
-#: ajax/getdetails.php:39 ajax/setproperty.php:38 ajax/showaddproperty.php:37
-#: ajax/showsetproperty.php:38 photo.php:39
-msgid "Contact could not be found."
+#: ajax/addproperty.php:39
+msgid "Cannot add empty property."
msgstr ""
-#: ajax/addproperty.php:43 ajax/deletebook.php:38 ajax/deletecard.php:45
-#: ajax/deleteproperty.php:47 ajax/getdetails.php:45 ajax/setproperty.php:44
-#: ajax/showaddproperty.php:43 ajax/showsetproperty.php:44 photo.php:45
-msgid "This is not your contact."
+#: ajax/addproperty.php:51
+msgid "At least one of the address fields has to be filled out."
msgstr ""
-#: ajax/addproperty.php:50 ajax/deleteproperty.php:54 ajax/getdetails.php:52
-#: ajax/setproperty.php:51 ajax/showsetproperty.php:51
-msgid "vCard could not be read."
+#: ajax/addproperty.php:77
+msgid "Error adding contact property."
msgstr ""
-#: ajax/deleteproperty.php:65 ajax/setproperty.php:62
-#: ajax/showsetproperty.php:62
-msgid "Information about vCard is incorrect. Please reload the page."
+#: ajax/createaddressbook.php:20
+msgid "Error adding addressbook."
msgstr ""
-#: photo.php:53
-msgid "This card is not RFC compatible."
+#: ajax/createaddressbook.php:26
+msgid "Error activating addressbook."
msgstr ""
-#: photo.php:90
-msgid "This card does not contain a photo."
+#: ajax/deleteproperty.php:40
+msgid "Error deleting contact property."
msgstr ""
-#: templates/index.php:8
-msgid "Add Contact"
+#: ajax/setproperty.php:79
+msgid "Error updating contact property."
msgstr ""
-#: templates/part.addcardform.php:5
-msgid "Group"
+#: ajax/updateaddressbook.php:20
+msgid "Error updating addressbook."
msgstr ""
-#: templates/part.addcardform.php:12 templates/part.property.php:3
-msgid "Name"
+#: appinfo/app.php:21 templates/settings.php:3
+msgid "Contacts"
msgstr ""
-#: templates/part.addcardform.php:14
-msgid "Create Contact"
+#: lib/app.php:42
+msgid "This is not your addressbook."
+msgstr "Dies ist nicht dein Adressbuch."
+
+#: lib/app.php:51 photo.php:34
+msgid "Contact could not be found."
+msgstr "Kontakt konnte nicht gefunden werden."
+
+#: lib/app.php:79
+msgid "Information about vCard is incorrect. Please reload the page."
msgstr ""
+"Die Information der vCard ist fehlerhaft. Bitte aktualisiere die Seite."
-#: templates/part.addpropertyform.php:4 templates/part.property.php:40
+#: lib/app.php:91 templates/part.addcardform.php:54
+#: templates/part.property.php:45 templates/part.setpropertyform.php:7
msgid "Address"
-msgstr ""
+msgstr "Adresse"
-#: templates/part.addpropertyform.php:5
+#: lib/app.php:92 templates/part.addcardform.php:43
msgid "Telephone"
-msgstr ""
+msgstr "Telefon"
-#: templates/part.addpropertyform.php:6 templates/part.property.php:22
+#: lib/app.php:93 templates/part.addcardform.php:37
+#: templates/part.property.php:16 templates/part.setpropertyform.php:51
msgid "Email"
-msgstr ""
+msgstr "Email"
-#: templates/part.addpropertyform.php:7 templates/part.property.php:15
+#: lib/app.php:94 templates/part.addcardform.php:27
+#: templates/part.property.php:9 templates/part.setpropertyform.php:54
msgid "Organization"
-msgstr ""
+msgstr "Organisation"
-#: templates/part.addpropertyform.php:17 templates/part.addpropertyform.php:32
+#: lib/app.php:106 lib/app.php:113
msgid "Work"
-msgstr ""
+msgstr "Arbeit"
-#: templates/part.addpropertyform.php:18 templates/part.addpropertyform.php:30
+#: lib/app.php:107 lib/app.php:111
msgid "Home"
+msgstr "Zuhause"
+
+#: lib/app.php:112
+msgid "Mobile"
+msgstr "Mobil"
+
+#: lib/app.php:114
+msgid "Text"
+msgstr "Text"
+
+#: lib/app.php:115
+msgid "Voice"
+msgstr "Anruf"
+
+#: lib/app.php:116
+msgid "Fax"
+msgstr "Fax"
+
+#: lib/app.php:117
+msgid "Video"
+msgstr "Video"
+
+#: lib/app.php:118
+msgid "Pager"
+msgstr "Pager"
+
+#: lib/search.php:22
+msgid "Contact"
msgstr ""
-#: templates/part.addpropertyform.php:20 templates/part.property.php:48
-#: templates/part.setpropertyform.php:5
-msgid "PO Box"
+#: photo.php:40
+msgid "This is not your contact."
+msgstr "Dies ist nicht dein Kontakt."
+
+#: photo.php:48
+msgid "This card is not RFC compatible."
+msgstr "Diese Karte ist nicht RFC-kompatibel."
+
+#: photo.php:85
+msgid "This card does not contain a photo."
+msgstr "Diese Karte enthält kein Foto."
+
+#: templates/index.php:6
+msgid "Add Contact"
+msgstr "Kontakt hinzufügen"
+
+#: templates/index.php:7
+msgid "Addressbooks"
msgstr ""
-#: templates/part.addpropertyform.php:21 templates/part.property.php:51
-#: templates/part.setpropertyform.php:6
-msgid "Extended"
+#: templates/part.addcardform.php:8
+msgid "Addressbook"
msgstr ""
-#: templates/part.addpropertyform.php:22 templates/part.property.php:54
-#: templates/part.setpropertyform.php:7
+#: templates/part.addcardform.php:21
+msgid "Name"
+msgstr "Name"
+
+#: templates/part.addcardform.php:57 templates/part.details.php:43
+#: templates/part.details.php:79 templates/part.setpropertyform.php:10
+#: templates/part.setpropertyform.php:47
+msgid "Type"
+msgstr "Typ"
+
+#: templates/part.addcardform.php:65 templates/part.details.php:49
+#: templates/part.setpropertyform.php:16
+msgid "PO Box"
+msgstr "Postfach"
+
+#: templates/part.addcardform.php:72 templates/part.details.php:53
+#: templates/part.setpropertyform.php:20
+msgid "Extended"
+msgstr "Erweitert"
+
+#: templates/part.addcardform.php:78 templates/part.details.php:57
+#: templates/part.setpropertyform.php:24
msgid "Street"
-msgstr ""
+msgstr "Straße"
-#: templates/part.addpropertyform.php:23 templates/part.property.php:57
-#: templates/part.setpropertyform.php:8
+#: templates/part.addcardform.php:84 templates/part.details.php:61
+#: templates/part.setpropertyform.php:28
msgid "City"
-msgstr ""
+msgstr "Stadt"
-#: templates/part.addpropertyform.php:24 templates/part.property.php:60
-#: templates/part.setpropertyform.php:9
+#: templates/part.addcardform.php:90 templates/part.details.php:65
+#: templates/part.setpropertyform.php:32
msgid "Region"
-msgstr ""
+msgstr "Region"
-#: templates/part.addpropertyform.php:25 templates/part.property.php:63
-#: templates/part.setpropertyform.php:10
+#: templates/part.addcardform.php:96 templates/part.details.php:69
+#: templates/part.setpropertyform.php:36
msgid "Zipcode"
-msgstr ""
+msgstr "Postleitzahl"
-#: templates/part.addpropertyform.php:26 templates/part.property.php:66
-#: templates/part.setpropertyform.php:11
+#: templates/part.addcardform.php:102 templates/part.details.php:73
+#: templates/part.setpropertyform.php:40
msgid "Country"
-msgstr ""
+msgstr "Land"
-#: templates/part.addpropertyform.php:31
-msgid "Mobile"
-msgstr "Mobil"
+#: templates/part.addcardform.php:109
+msgid "Create Contact"
+msgstr "Kontakt erstellen"
-#: templates/part.addpropertyform.php:33
-msgid "Text"
-msgstr "Text"
+#: templates/part.chooseaddressbook.php:1
+msgid "Choose active Address Books"
+msgstr "Aktive Adressbücher auswählen"
-#: templates/part.addpropertyform.php:34
-msgid "Voice"
-msgstr ""
+#: templates/part.chooseaddressbook.php:16
+msgid "New Address Book"
+msgstr "Neues Adressbuch"
-#: templates/part.addpropertyform.php:35
-msgid "Fax"
-msgstr "Fax"
+#: templates/part.chooseaddressbook.php:21
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "CardDav Link"
+msgstr "CardDav Link"
-#: templates/part.addpropertyform.php:36
-msgid "Video"
-msgstr "Video"
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Download"
+msgstr "Herunterladen"
-#: templates/part.addpropertyform.php:37
-msgid "Pager"
-msgstr "Pager"
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Edit"
+msgstr "Bearbeiten"
-#: templates/part.details.php:33
+#: templates/part.chooseaddressbook.rowfields.php:5
msgid "Delete"
+msgstr "Löschen"
+
+#: templates/part.details.php:3
+msgid "Download contact"
msgstr ""
+#: templates/part.details.php:4
+msgid "Delete contact"
+msgstr "Kontakt löschen"
+
#: templates/part.details.php:34
-msgid "Add Property"
+msgid "Add"
+msgstr "Hinzufügen"
+
+#: templates/part.editaddressbook.php:9
+msgid "New Addressbook"
+msgstr ""
+
+#: templates/part.editaddressbook.php:9
+msgid "Edit Addressbook"
msgstr ""
-#: templates/part.property.php:9
+#: templates/part.editaddressbook.php:12
+msgid "Displayname"
+msgstr "Anzeigename"
+
+#: templates/part.editaddressbook.php:23
+msgid "Active"
+msgstr "Aktiv"
+
+#: templates/part.editaddressbook.php:29
+msgid "Save"
+msgstr "Speichern"
+
+#: templates/part.editaddressbook.php:29
+msgid "Submit"
+msgstr "Eintragen"
+
+#: templates/part.editaddressbook.php:30
+msgid "Cancel"
+msgstr "Abbrechen"
+
+#: templates/part.property.php:3
msgid "Birthday"
msgstr "Geburtstag"
-#: templates/part.property.php:29
+#: templates/part.property.php:23
+msgid "Preferred"
+msgstr "Bevorzugt"
+
+#: templates/part.property.php:23 templates/part.setpropertyform.php:45
msgid "Phone"
-msgstr ""
+msgstr "Telefon"
-#: templates/part.setpropertyform.php:17
-msgid "Edit"
-msgstr "Bearbeiten"
+#: templates/part.setpropertyform.php:57
+msgid "Update"
+msgstr "Aktualisieren"
+
+#: templates/settings.php:4
+msgid "CardDAV syncing address:"
+msgstr ""
diff --git a/l10n/de/core.po b/l10n/de/core.po
index 893b8acc4a7..26675dbd954 100644
--- a/l10n/de/core.po
+++ b/l10n/de/core.po
@@ -3,6 +3,7 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <admin@s-goecker.de>, 2011.
# <alex.hotz@gmail.com>, 2011.
# <georg.stefan.germany@googlemail.com>, 2011.
# Jan-Christoph Borchardt <JanCBorchardt@fsfe.org>, 2011.
@@ -10,9 +11,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 18:17+0200\n"
-"PO-Revision-Date: 2011-09-07 22:59+0000\n"
-"Last-Translator: infinity8 <alex.hotz@gmail.com>\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: German (http://www.transifex.net/projects/p/owncloud/team/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -20,6 +21,51 @@ msgstr ""
"Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+#: lostpassword/index.php:24
+msgid "Owncloud password reset"
+msgstr ""
+
+#: lostpassword/templates/email.php:1
+msgid "Use the following link to reset your password: {link}"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr "Sie erhalten einen Link, um Ihr Passwort per E-Mail zurückzusetzen."
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Requested"
+msgstr "Angefragt"
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr "Login fehlgeschlagen!"
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:22
+#: templates/login.php:8
+msgid "Username"
+msgstr "Nutzername"
+
+#: lostpassword/templates/lostpassword.php:14
+msgid "Request reset"
+msgstr "Anfrage zurückgesetzt"
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr "Ihr Passwort wurde zurückgesetzt."
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr "Neues Passwort"
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr "Passwort zurücksetzen"
+
#: strings.php:5
msgid "Personal"
msgstr "Persönlich"
@@ -48,54 +94,50 @@ msgstr "Cloud nicht verfügbar"
msgid "Create an <strong>admin account</strong>"
msgstr "<strong>Admin-Konto</strong> anlegen"
-#: templates/installation.php:21
-msgid "Username"
-msgstr "Nutzername"
-
-#: templates/installation.php:22
+#: templates/installation.php:26 templates/login.php:12
msgid "Password"
msgstr "Passwort"
-#: templates/installation.php:27
+#: templates/installation.php:32
+msgid "Advanced"
+msgstr "Erweitert"
+
+#: templates/installation.php:34
+msgid "Data folder"
+msgstr "Datenverzeichnis"
+
+#: templates/installation.php:41
msgid "Configure the database"
msgstr "Datenbank einrichten"
-#: templates/installation.php:32 templates/installation.php:43
-#: templates/installation.php:53
+#: templates/installation.php:46 templates/installation.php:57
+#: templates/installation.php:67
msgid "will be used"
msgstr "wird genutzt"
-#: templates/installation.php:64
+#: templates/installation.php:79
msgid "Database user"
msgstr "Datenbanknutzer"
-#: templates/installation.php:65
+#: templates/installation.php:83
msgid "Database password"
msgstr "Datenbankpasswort"
-#: templates/installation.php:66
+#: templates/installation.php:87
msgid "Database name"
msgstr "Datenbankname"
-#: templates/installation.php:72
-msgid "Advanced"
-msgstr "Erweitert"
-
-#: templates/installation.php:75
+#: templates/installation.php:93
msgid "Database host"
msgstr "Datenbank-Host"
-#: templates/installation.php:76
-msgid "Data folder"
-msgstr "Datenverzeichnis"
-
-#: templates/installation.php:79
+#: templates/installation.php:98
msgid "Finish setup"
msgstr "Installation abschließen"
#: templates/layout.guest.php:35
-msgid "gives you freedom and control over your own data"
-msgstr "gibt dir Freiheit und Kontrolle über deine eigenen Daten"
+msgid "web services under your control"
+msgstr ""
#: templates/layout.user.php:34
msgid "Log out"
@@ -105,39 +147,22 @@ msgstr "Abmelden"
msgid "Settings"
msgstr "Einstellungen"
-#: templates/login.php:4
+#: templates/login.php:5
msgid "Lost your password?"
msgstr "Passwort vergessen?"
-#: templates/login.php:9 templates/login.php:13
+#: templates/login.php:15
msgid "remember"
msgstr "merken"
+#: templates/login.php:16
+msgid "Log in"
+msgstr ""
+
#: templates/logout.php:1
msgid "You are logged out."
msgstr "Abgemeldet"
-#: templates/lostpassword.php:3
-msgid "You will receive a link to reset your password via Email."
-msgstr ""
-"Du wirst per Email einen Link zum Zurücksetzen deines Passworts erhalten."
-
-#: templates/lostpassword.php:5
-msgid "Requested"
-msgstr "zurückgesetzt"
-
-#: templates/lostpassword.php:8
-msgid "Login failed!"
-msgstr "Anmeldung fehlgeschlagen!"
-
-#: templates/lostpassword.php:10
-msgid "Username or Email"
-msgstr "Nutzername oder Email"
-
-#: templates/lostpassword.php:11
-msgid "Request reset"
-msgstr "Zurücksetzen"
-
#: templates/part.pagenavi.php:3
msgid "prev"
msgstr "Zurück"
@@ -146,16 +171,4 @@ msgstr "Zurück"
msgid "next"
msgstr "Weiter"
-#: templates/resetpassword.php:4
-msgid "Your password was reset"
-msgstr "Dein Passwort wurde zurückgesetzt."
-
-#: templates/resetpassword.php:6
-msgid "New password"
-msgstr "Neues Passwort"
-
-#: templates/resetpassword.php:7
-msgid "Reset password"
-msgstr "Zurücksetzen"
-
diff --git a/l10n/de/files.po b/l10n/de/files.po
index b0d31fb286c..b9769babd01 100644
--- a/l10n/de/files.po
+++ b/l10n/de/files.po
@@ -4,13 +4,15 @@
#
# Translators:
# Jan-Christoph Borchardt <JanCBorchardt@fsfe.org>, 2011.
+# Jan-Christoph Borchardt <jan@unhosted.org>, 2011.
+# <nelsonfritsch@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-11 12:33+0000\n"
+"Last-Translator: piccobello <nelsonfritsch@gmail.com>\n"
"Language-Team: German (http://www.transifex.net/projects/p/owncloud/team/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,33 +20,33 @@ msgstr ""
"Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/upload.php:24
+#: ajax/upload.php:19
msgid "There is no error, the file uploaded with success"
-msgstr ""
+msgstr "Datei hochgeladen."
-#: ajax/upload.php:25
+#: ajax/upload.php:20
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
-msgstr ""
+msgstr "Die hochgeladene Datei ist zu groß."
-#: ajax/upload.php:26
+#: ajax/upload.php:21
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
-msgstr ""
+msgstr "Die hochgeladene Datei ist zu groß."
-#: ajax/upload.php:27
+#: ajax/upload.php:22
msgid "The uploaded file was only partially uploaded"
-msgstr ""
+msgstr "Die Datei wurde nur teilweise hochgeladen."
-#: ajax/upload.php:28
+#: ajax/upload.php:23
msgid "No file was uploaded"
-msgstr ""
+msgstr "Es wurde keine Datei hochgeladen."
-#: ajax/upload.php:29
+#: ajax/upload.php:24
msgid "Missing a temporary folder"
-msgstr ""
+msgstr "Temporärer Ordner fehlt."
-#: appinfo/app.php:7
+#: appinfo/app.php:8
msgid "Files"
msgstr "Dateien"
@@ -52,43 +54,55 @@ msgstr "Dateien"
msgid "Maximum upload size"
msgstr "Maximale Größe"
+#: templates/index.php:7
+msgid "New"
+msgstr ""
+
#: templates/index.php:10
+msgid "Text file"
+msgstr "Text Datei"
+
+#: templates/index.php:11
+msgid "Folder"
+msgstr "Ordner"
+
+#: templates/index.php:12
+msgid "From the web"
+msgstr ""
+
+#: templates/index.php:22
msgid "Upload"
msgstr "Hochladen"
-#: templates/index.php:17
-msgid "New Folder"
-msgstr "Neuer Ordner"
-
-#: templates/index.php:31
+#: templates/index.php:35
msgid "Nothing in here. Upload something!"
msgstr "Alles leer. Lad’ was hoch!"
-#: templates/index.php:39
+#: templates/index.php:43
msgid "Name"
msgstr "Name"
-#: templates/index.php:41
+#: templates/index.php:45
msgid "Download"
msgstr "Herunterladen"
-#: templates/index.php:45
+#: templates/index.php:49
msgid "Size"
msgstr "Größe"
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Modified"
msgstr "Bearbeitet"
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Delete"
msgstr "Löschen"
-#: templates/index.php:54
+#: templates/index.php:58
msgid "Upload too large"
msgstr "Upload zu groß"
-#: templates/index.php:56
+#: templates/index.php:60
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
diff --git a/l10n/de/gallery.po b/l10n/de/gallery.po
new file mode 100644
index 00000000000..64f9f997230
--- /dev/null
+++ b/l10n/de/gallery.po
@@ -0,0 +1,32 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:48+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: German (http://www.transifex.net/projects/p/owncloud/team/de/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: de\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:41
+msgid "Gallery"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Rescan"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+
diff --git a/l10n/de/media.po b/l10n/de/media.po
index 437d50939d7..6e4584a979d 100644
--- a/l10n/de/media.po
+++ b/l10n/de/media.po
@@ -2,14 +2,16 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
+# Translators:
+# <admin@s-goecker.de>, 2011.
# Jan-Christoph Borchardt <JanCBorchardt@fsfe.org>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
-"Report-Msgid-Bugs-To: http://bugs.kde.org/buglist.cgi?product=owncloud\n"
-"POT-Creation-Date: 2011-08-20 05:08+0200\n"
-"PO-Revision-Date: 2011-08-20 03:08+0000\n"
-"Last-Translator: JanCBorchardt <JanCBorchardt@fsfe.org>\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: German (http://www.transifex.net/projects/p/owncloud/team/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,41 +19,37 @@ msgstr ""
"Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: appinfo/app.php:31
+#: appinfo/app.php:32
msgid "Music"
msgstr "Musik"
-#: templates/music.php:3
+#: templates/music.php:3 templates/player.php:13
msgid "Play"
-msgstr ""
+msgstr "Abspielen"
-#: templates/music.php:4 templates/music.php:30
+#: templates/music.php:4 templates/music.php:26 templates/player.php:14
msgid "Pause"
msgstr "Pause"
#: templates/music.php:5
msgid "Previous"
-msgstr ""
+msgstr "Vorheriges"
-#: templates/music.php:6
+#: templates/music.php:6 templates/player.php:15
msgid "Next"
-msgstr ""
+msgstr "Nächstes"
#: templates/music.php:7
msgid "Mute"
-msgstr ""
+msgstr "Ton aus"
#: templates/music.php:8
msgid "Unmute"
-msgstr ""
-
-#: templates/music.php:28
-msgid "Songs scanned"
-msgstr "Lieder gescannt"
+msgstr "Ton an"
-#: templates/music.php:29
+#: templates/music.php:25
msgid "Rescan Collection"
-msgstr "Sammlung scannen"
+msgstr "Sammlung noch einmal scannen"
#: templates/music.php:37
msgid "Artist"
diff --git a/l10n/de/settings.po b/l10n/de/settings.po
index 2998d93e0f7..9db3b4cec9d 100644
--- a/l10n/de/settings.po
+++ b/l10n/de/settings.po
@@ -2,14 +2,17 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
+# Translators:
+# <admin@s-goecker.de>, 2011.
# Jan-Christoph Borchardt <JanCBorchardt@fsfe.org>, 2011.
+# <nelsonfritsch@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
-"Report-Msgid-Bugs-To: http://bugs.kde.org/buglist.cgi?product=owncloud\n"
-"POT-Creation-Date: 2011-08-28 01:13+0200\n"
-"PO-Revision-Date: 2011-08-27 23:13+0000\n"
-"Last-Translator: JanCBorchardt <JanCBorchardt@fsfe.org>\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-12 15:43+0000\n"
+"Last-Translator: piccobello <nelsonfritsch@gmail.com>\n"
"Language-Team: German (http://www.transifex.net/projects/p/owncloud/team/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,22 +20,26 @@ msgstr ""
"Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/openid.php:13 ajax/setlanguage.php:13
-msgid "Authentication error"
-msgstr "Berechtigungsfehler"
+#: ajax/lostpassword.php:14
+msgid "email Changed"
+msgstr "E-Mail wurde geändert"
-#: ajax/openid.php:21
-msgid "OpenID Changed"
-msgstr "OpenID geändert"
-
-#: ajax/openid.php:23 ajax/setlanguage.php:23
+#: ajax/lostpassword.php:16 ajax/openid.php:17 ajax/setlanguage.php:16
msgid "Invalid request"
msgstr "Ungültige Anfrage"
-#: ajax/setlanguage.php:21
+#: ajax/openid.php:15
+msgid "OpenID Changed"
+msgstr "OpenID geändert"
+
+#: ajax/setlanguage.php:14
msgid "Language changed"
msgstr "Sprache geändert"
+#: templates/admin.php:13
+msgid "Log level"
+msgstr ""
+
#: templates/apps.php:8
msgid "Add your application"
msgstr "Eigene Anwendung hinzufügen"
@@ -53,15 +60,15 @@ msgstr "von"
msgid "Ask a question"
msgstr "Stell eine Frage"
-#: templates/help.php:17
+#: templates/help.php:20
msgid "Problems connecting to help database."
msgstr "Probleme bei der Verbindung zur Hilfe-Datenbank."
-#: templates/help.php:18
+#: templates/help.php:21
msgid "Go there manually."
msgstr "Datenbank direkt besuchen."
-#: templates/help.php:26
+#: templates/help.php:29
msgid "Answer"
msgstr "Antwort"
@@ -79,7 +86,7 @@ msgstr "Dein Passwort wurde geändert"
#: templates/personal.php:14
msgid "Unable to change your password"
-msgstr ""
+msgstr "Passwort konnte nicht geändert werden"
#: templates/personal.php:15
msgid "Current password"
@@ -98,36 +105,54 @@ msgid "Change password"
msgstr "Passwort ändern"
#: templates/personal.php:24
+msgid "Email"
+msgstr "E-Mail"
+
+#: templates/personal.php:25
+msgid "Your email address"
+msgstr "Ihre E-Mail Adresse"
+
+#: templates/personal.php:26
+msgid "Fill in an email address to enable password recovery"
+msgstr ""
+"Tragen Sie eine E-Mail Adresse ein, um die Passwort-Wiederherstellung zu "
+"aktivieren"
+
+#: templates/personal.php:32 templates/personal.php:33
msgid "Language"
msgstr "Sprache"
-#: templates/personal.php:30
-msgid "Help translating"
-msgstr "Hilf bei der Übersetzung"
+#: templates/personal.php:38
+msgid "Help translate"
+msgstr "Helfen Sie bei der Übersetzung"
-#: templates/personal.php:36
+#: templates/personal.php:45
msgid "use this address to connect to your ownCloud in your file manager"
msgstr ""
"benutze diese Adresse, um deine ownCloud mit deinem Dateiverwalter zu "
"verbinden"
-#: templates/users.php:16
+#: templates/users.php:15 templates/users.php:30
msgid "Name"
msgstr "Name"
-#: templates/users.php:17
+#: templates/users.php:16 templates/users.php:31
msgid "Password"
msgstr "Passwort"
-#: templates/users.php:18 templates/users.php:36
+#: templates/users.php:17 templates/users.php:32 templates/users.php:46
msgid "Groups"
msgstr "Gruppen"
-#: templates/users.php:24
+#: templates/users.php:23
msgid "Create"
msgstr "Anlegen"
-#: templates/users.php:48
+#: templates/users.php:33
+msgid "Quota"
+msgstr ""
+
+#: templates/users.php:58
msgid "Delete"
msgstr "Löschen"
diff --git a/l10n/el/calendar.po b/l10n/el/calendar.po
index 15e4e959f34..dd0c8352f9b 100644
--- a/l10n/el/calendar.po
+++ b/l10n/el/calendar.po
@@ -3,14 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Petros Kyladitis <petros.kyladitis@gmail.com>, 2011.
+# <christosvas@in.gr>, 2011.
+# Petros Kyladitis <petros.kyladitis@gmail.com>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Greek (http://www.transifex.net/projects/p/owncloud/team/el/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,321 +19,403 @@ msgstr ""
"Language: el\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/createcalendar.php:18 ajax/settimezone.php:19
-#: ajax/updatecalendar.php:18
-msgid "Authentication error"
-msgstr "Σφάλμα ταυτοποίησης"
+#: ajax/guesstimezone.php:42
+msgid "New Timezone:"
+msgstr "Νέα ζώνη ώρας:"
-#: ajax/editeventform.php:25
-msgid "Wrong calendar"
-msgstr "Λάθος ημερολόγιο"
-
-#: ajax/settimezone.php:27
+#: ajax/settimezone.php:22
msgid "Timezone changed"
msgstr "Η ζώνη ώρας άλλαξε"
-#: ajax/settimezone.php:29
+#: ajax/settimezone.php:24
msgid "Invalid request"
msgstr "Μη έγκυρο αίτημα"
-#: appinfo/app.php:19 templates/part.eventform.php:27
-#: templates/part.eventinfo.php:18
+#: appinfo/app.php:20 templates/calendar.php:13
+#: templates/part.eventform.php:20
msgid "Calendar"
msgstr "Ημερολόγιο"
-#: lib/object.php:292
+#: lib/app.php:19
+msgid "Wrong calendar"
+msgstr "Λάθος ημερολόγιο"
+
+#: lib/app.php:60 lib/object.php:332
msgid "Birthday"
msgstr "Γενέθλια"
-#: lib/object.php:293
+#: lib/app.php:61 lib/object.php:333
msgid "Business"
msgstr "Επιχείρηση"
-#: lib/object.php:294
+#: lib/app.php:62 lib/object.php:334
msgid "Call"
msgstr "Κλήση"
-#: lib/object.php:295
+#: lib/app.php:63 lib/object.php:335
msgid "Clients"
msgstr "Πελάτες"
-#: lib/object.php:296
+#: lib/app.php:64 lib/object.php:336
msgid "Deliverer"
-msgstr ""
+msgstr "Παραδώσας"
-#: lib/object.php:297
+#: lib/app.php:65 lib/object.php:337
msgid "Holidays"
msgstr "Διακοπές"
-#: lib/object.php:298
+#: lib/app.php:66 lib/object.php:338
msgid "Ideas"
msgstr "Ιδέες"
-#: lib/object.php:299
+#: lib/app.php:67 lib/object.php:339
msgid "Journey"
msgstr "Ταξίδι"
-#: lib/object.php:300
+#: lib/app.php:68 lib/object.php:340
msgid "Jubilee"
-msgstr ""
+msgstr "Γιορτή"
-#: lib/object.php:301
+#: lib/app.php:69 lib/object.php:341
msgid "Meeting"
-msgstr ""
+msgstr "Συνάντηση"
-#: lib/object.php:302
+#: lib/app.php:70 lib/object.php:342
msgid "Other"
msgstr "Άλλο"
-#: lib/object.php:303
+#: lib/app.php:71 lib/object.php:343
msgid "Personal"
msgstr "Προσωπικό"
-#: lib/object.php:304
+#: lib/app.php:72 lib/object.php:344
msgid "Projects"
msgstr "Έργα"
-#: lib/object.php:305
+#: lib/app.php:73 lib/object.php:345
msgid "Questions"
msgstr "Ερωτήσεις"
-#: lib/object.php:306
+#: lib/app.php:74 lib/object.php:346
msgid "Work"
msgstr "Εργασία"
-#: lib/object.php:313
+#: lib/object.php:353
msgid "Does not repeat"
msgstr "Μη επαναλαμβανόμενο"
-#: lib/object.php:314
+#: lib/object.php:354
msgid "Daily"
msgstr "Καθημερινά"
-#: lib/object.php:315
+#: lib/object.php:355
msgid "Weekly"
msgstr "Εβδομαδιαία"
-#: lib/object.php:316
+#: lib/object.php:356
msgid "Every Weekday"
msgstr "Κάθε μέρα"
-#: lib/object.php:317
+#: lib/object.php:357
msgid "Bi-Weekly"
msgstr "Δύο φορές την εβδομάδα"
-#: lib/object.php:318
+#: lib/object.php:358
msgid "Monthly"
msgstr "Μηνιαία"
-#: lib/object.php:319
+#: lib/object.php:359
msgid "Yearly"
msgstr "Ετήσια"
-#: lib/object.php:337
-msgid "Not an array"
-msgstr "Δεν είναι μια σειρά"
+#: lib/object.php:366
+msgid "never"
+msgstr "ποτέ"
-#: templates/calendar.php:3
-msgid "All day"
-msgstr "Ολοήμερο"
+#: lib/object.php:367
+msgid "by occurrences"
+msgstr "κατά συχνότητα πρόσβασης"
-#: templates/calendar.php:32
-msgid "Sunday"
-msgstr "Κυριακή"
+#: lib/object.php:368
+msgid "by date"
+msgstr "κατά ημερομηνία"
+
+#: lib/object.php:375
+msgid "by monthday"
+msgstr "κατά ημέρα"
+
+#: lib/object.php:376
+msgid "by weekday"
+msgstr "κατά εβδομάδα"
-#: templates/calendar.php:32
+#: lib/object.php:383 templates/lAfix.php:3
msgid "Monday"
msgstr "Δευτέρα"
-#: templates/calendar.php:32
+#: lib/object.php:384 templates/lAfix.php:4
msgid "Tuesday"
msgstr "Τρίτη"
-#: templates/calendar.php:32
+#: lib/object.php:385 templates/lAfix.php:5
msgid "Wednesday"
msgstr "Τετάρτη"
-#: templates/calendar.php:32
+#: lib/object.php:386 templates/lAfix.php:6
msgid "Thursday"
msgstr "Πέμπτη"
-#: templates/calendar.php:32
+#: lib/object.php:387 templates/lAfix.php:7
msgid "Friday"
msgstr "Παρασκευή"
-#: templates/calendar.php:32
+#: lib/object.php:388 templates/lAfix.php:8
msgid "Saturday"
msgstr "Σάββατο"
-#: templates/calendar.php:33
-msgid "Sun."
-msgstr "Κυρ."
+#: lib/object.php:389 templates/lAfix.php:2
+msgid "Sunday"
+msgstr "Κυριακή"
-#: templates/calendar.php:33
-msgid "Mon."
-msgstr "Δευτ."
+#: lib/object.php:396
+msgid "events week of month"
+msgstr "συμβάντα της εβδομάδας του μήνα"
-#: templates/calendar.php:33
-msgid "Tue."
-msgstr "Τρ."
+#: lib/object.php:397
+msgid "first"
+msgstr "πρώτο"
-#: templates/calendar.php:33
-msgid "Wed."
-msgstr "Τετ."
+#: lib/object.php:398
+msgid "second"
+msgstr "δεύτερο"
-#: templates/calendar.php:33
-msgid "Thu."
-msgstr "Πέμ."
+#: lib/object.php:399
+msgid "third"
+msgstr "τρίτο"
-#: templates/calendar.php:33
-msgid "Fri."
-msgstr "Παρ."
+#: lib/object.php:400
+msgid "fourth"
+msgstr "τέταρτο"
-#: templates/calendar.php:33
-msgid "Sat."
-msgstr "Σάβ."
+#: lib/object.php:401
+msgid "fifth"
+msgstr "πέμπτο"
-#: templates/calendar.php:34
+#: lib/object.php:402
+msgid "last"
+msgstr "τελευταίο"
+
+#: lib/object.php:424 templates/lAfix.php:16
msgid "January"
msgstr "Ιανουάριος"
-#: templates/calendar.php:34
+#: lib/object.php:425 templates/lAfix.php:17
msgid "February"
msgstr "Φεβρουάριος"
-#: templates/calendar.php:34
+#: lib/object.php:426 templates/lAfix.php:18
msgid "March"
msgstr "Μάρτιος"
-#: templates/calendar.php:34
+#: lib/object.php:427 templates/lAfix.php:19
msgid "April"
msgstr "Απρίλιος"
-#: templates/calendar.php:34
+#: lib/object.php:428 templates/lAfix.php:20
msgid "May"
-msgstr "Μάιος"
+msgstr "Μάϊος"
-#: templates/calendar.php:34
+#: lib/object.php:429 templates/lAfix.php:21
msgid "June"
msgstr "Ιούνιος"
-#: templates/calendar.php:34
+#: lib/object.php:430 templates/lAfix.php:22
msgid "July"
msgstr "Ιούλιος"
-#: templates/calendar.php:34
+#: lib/object.php:431 templates/lAfix.php:23
msgid "August"
msgstr "Αύγουστος"
-#: templates/calendar.php:34
+#: lib/object.php:432 templates/lAfix.php:24
msgid "September"
msgstr "Σεπτέμβριος"
-#: templates/calendar.php:34
+#: lib/object.php:433 templates/lAfix.php:25
msgid "October"
msgstr "Οκτώβριος"
-#: templates/calendar.php:34
+#: lib/object.php:434 templates/lAfix.php:26
msgid "November"
msgstr "Νοέμβριος"
-#: templates/calendar.php:34
+#: lib/object.php:435 templates/lAfix.php:27
msgid "December"
msgstr "Δεκέμβριος"
-#: templates/calendar.php:35
+#: lib/object.php:441
+msgid "by events date"
+msgstr "κατά ημερομηνία συμβάντων"
+
+#: lib/object.php:442
+msgid "by yearday(s)"
+msgstr "κατά ημέρα(ες) του έτους"
+
+#: lib/object.php:443
+msgid "by weeknumber(s)"
+msgstr "κατά εβδομάδα(ες)"
+
+#: lib/object.php:444
+msgid "by day and month"
+msgstr "κατά ημέρα και μήνα"
+
+#: lib/object.php:467
+msgid "Not an array"
+msgstr "Δεν είναι μια σειρά"
+
+#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+msgid "Date"
+msgstr "Ημερομηνία"
+
+#: lib/search.php:40
+msgid "Cal."
+msgstr "Ημερ."
+
+#: templates/calendar.php:10
+msgid "All day"
+msgstr "Ολοήμερο"
+
+#: templates/calendar.php:11
+msgid "Missing fields"
+msgstr "Πεδία που λείπουν"
+
+#: templates/calendar.php:12 templates/part.eventform.php:3
+msgid "Title"
+msgstr "Τίτλος"
+
+#: templates/calendar.php:14
+msgid "From Date"
+msgstr "Από Ημερομηνία"
+
+#: templates/calendar.php:15
+msgid "From Time"
+msgstr "Από Ώρα"
+
+#: templates/calendar.php:16
+msgid "To Date"
+msgstr "Έως Ημερομηνία"
+
+#: templates/calendar.php:17
+msgid "To Time"
+msgstr "Έως Ώρα"
+
+#: templates/calendar.php:18
+msgid "The event ends before it starts"
+msgstr "Το γεγονός ολοκληρώνεται πριν από την έναρξή του"
+
+#: templates/calendar.php:19
+msgid "There was a database fail"
+msgstr "Υπήρξε σφάλμα στη βάση δεδομένων"
+
+#: templates/calendar.php:52
+msgid "Week"
+msgstr "Εβδομάδα"
+
+#: templates/calendar.php:53
+msgid "Month"
+msgstr "Μήνας"
+
+#: templates/calendar.php:54
+msgid "List"
+msgstr "Λίστα"
+
+#: templates/calendar.php:59
+msgid "Today"
+msgstr "Σήμερα"
+
+#: templates/calendar.php:60
+msgid "Calendars"
+msgstr "Ημερολόγια"
+
+#: templates/calendar.php:78
+msgid "There was a fail, while parsing the file."
+msgstr "Υπήρξε μια αποτυχία, κατά την αξιολόγηση του αρχείου."
+
+#: templates/lAfix.php:9
+msgid "Sun."
+msgstr "Κυρ."
+
+#: templates/lAfix.php:10
+msgid "Mon."
+msgstr "Δευτ."
+
+#: templates/lAfix.php:11
+msgid "Tue."
+msgstr "Τρι."
+
+#: templates/lAfix.php:12
+msgid "Wed."
+msgstr "Τετ."
+
+#: templates/lAfix.php:13
+msgid "Thu."
+msgstr "Πέμ."
+
+#: templates/lAfix.php:14
+msgid "Fri."
+msgstr "Παρ."
+
+#: templates/lAfix.php:15
+msgid "Sat."
+msgstr "Σαβ."
+
+#: templates/lAfix.php:28
msgid "Jan."
msgstr "Ιαν."
-#: templates/calendar.php:35
+#: templates/lAfix.php:29
msgid "Feb."
msgstr "Φεβ."
-#: templates/calendar.php:35
+#: templates/lAfix.php:30
msgid "Mar."
msgstr "Μαρ."
-#: templates/calendar.php:35
+#: templates/lAfix.php:31
msgid "Apr."
msgstr "Απρ."
-#: templates/calendar.php:35
+#: templates/lAfix.php:32
msgid "May."
-msgstr ""
+msgstr "Μάϊ."
-#: templates/calendar.php:35
+#: templates/lAfix.php:33
msgid "Jun."
-msgstr "Ιούν."
+msgstr "Ιον."
-#: templates/calendar.php:35
+#: templates/lAfix.php:34
msgid "Jul."
-msgstr "Ιούλ."
+msgstr "Ιολ."
-#: templates/calendar.php:35
+#: templates/lAfix.php:35
msgid "Aug."
msgstr "Αύγ."
-#: templates/calendar.php:35
+#: templates/lAfix.php:36
msgid "Sep."
msgstr "Σεπ."
-#: templates/calendar.php:35
+#: templates/lAfix.php:37
msgid "Oct."
msgstr "Οκτ."
-#: templates/calendar.php:35
+#: templates/lAfix.php:38
msgid "Nov."
-msgstr "Νοέ."
+msgstr "Νοε."
-#: templates/calendar.php:35
+#: templates/lAfix.php:39
msgid "Dec."
msgstr "Δεκ."
-#: templates/calendar.php:36 templates/calendar.php:50
-#: templates/calendar.php:116
-msgid "Week"
-msgstr "Εβδομάδα"
-
-#: templates/calendar.php:37 templates/calendar.php:51
-msgid "Weeks"
-msgstr "Εβδομάδες"
-
-#: templates/calendar.php:38
-msgid "More before {startdate}"
-msgstr ""
-
-#: templates/calendar.php:39
-msgid "More after {enddate}"
-msgstr ""
-
-#: templates/calendar.php:49
-msgid "Day"
-msgstr "Ημέρα"
-
-#: templates/calendar.php:52
-msgid "Month"
-msgstr "Μήνας"
-
-#: templates/calendar.php:53
-msgid "List"
-msgstr "Λίστα"
-
-#: templates/calendar.php:58
-msgid "Today"
-msgstr "Σήμερα"
-
-#: templates/calendar.php:59
-msgid "Calendars"
-msgstr "Ημερολόγια"
-
-#: templates/calendar.php:76 templates/calendar.php:94
-msgid "Time"
-msgstr "Ώρα"
-
-#: templates/calendar.php:169
-msgid "There was a fail, while parsing the file."
-msgstr "Υπήρχε μια αποτυχία, κατά την ανάλυση του αρχείου."
-
#: templates/part.choosecalendar.php:1
msgid "Choose active calendars"
msgstr "Επιλέξτε τα ενεργά ημερολόγια"
@@ -344,21 +427,20 @@ msgstr "Νέα Ημερολόγιο"
#: templates/part.choosecalendar.php:20
#: templates/part.choosecalendar.rowfields.php:4
msgid "CalDav Link"
-msgstr ""
+msgstr "Σύνδεση CalDAV"
#: templates/part.choosecalendar.rowfields.php:4
msgid "Download"
msgstr "Λήψη"
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.eventinfo.php:64
msgid "Edit"
msgstr "Επεξεργασία"
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.editevent.php:8
+#: templates/part.editevent.php:9
msgid "Delete"
-msgstr ""
+msgstr "Διαγραφή"
#: templates/part.editcalendar.php:9
msgid "New calendar"
@@ -376,90 +458,181 @@ msgstr "Προβολή ονόματος"
msgid "Active"
msgstr "Ενεργό"
-#: templates/part.editcalendar.php:29 templates/part.eventform.php:88
-#: templates/part.eventinfo.php:58
-msgid "Description"
-msgstr "Περιγραφή"
-
-#: templates/part.editcalendar.php:35
+#: templates/part.editcalendar.php:29
msgid "Calendar color"
msgstr "Χρώμα ημερολογίου"
-#: templates/part.editcalendar.php:41
+#: templates/part.editcalendar.php:42
msgid "Save"
-msgstr ""
+msgstr "Αποθήκευση"
-#: templates/part.editcalendar.php:41 templates/part.editevent.php:7
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
#: templates/part.newevent.php:6
msgid "Submit"
msgstr "Υποβολή"
-#: templates/part.editcalendar.php:42
+#: templates/part.editcalendar.php:43
msgid "Cancel"
msgstr "Ακύρωση"
-#: templates/part.editevent.php:1 templates/part.eventinfo.php:1
+#: templates/part.editevent.php:1
msgid "Edit an event"
msgstr "Επεξεργασία ενός γεγονότος"
-#: templates/part.eventform.php:3 templates/part.eventinfo.php:4
-msgid "Title"
-msgstr "Τίτλος"
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr "Εξαγωγή"
#: templates/part.eventform.php:5
msgid "Title of the Event"
msgstr "Τίτλος συμβάντος"
-#: templates/part.eventform.php:9 templates/part.eventinfo.php:9
-msgid "Location"
-msgstr "Τοποθεσία"
-
#: templates/part.eventform.php:11
-msgid "Location of the Event"
-msgstr "Τοποθεσία συμβάντος"
-
-#: templates/part.eventform.php:17 templates/part.eventinfo.php:16
msgid "Category"
msgstr "Κατηγορία"
-#: templates/part.eventform.php:19
+#: templates/part.eventform.php:13
msgid "Select category"
msgstr "Επιλέξτε κατηγορία"
-#: templates/part.eventform.php:45 templates/part.eventinfo.php:28
+#: templates/part.eventform.php:37
msgid "All Day Event"
msgstr "Ολοήμερο συμβάν"
-#: templates/part.eventform.php:49 templates/part.eventinfo.php:31
+#: templates/part.eventform.php:41
msgid "From"
msgstr "Από"
-#: templates/part.eventform.php:57 templates/part.eventinfo.php:38
+#: templates/part.eventform.php:49
msgid "To"
msgstr "Έως"
-#: templates/part.eventform.php:65 templates/part.eventinfo.php:44
+#: templates/part.eventform.php:57
+msgid "Advanced options"
+msgstr "Επιλογές για προχωρημένους"
+
+#: templates/part.eventform.php:61
msgid "Repeat"
msgstr "Επαναλαμβανόμενο"
-#: templates/part.eventform.php:81 templates/part.eventinfo.php:51
-msgid "Attendees"
-msgstr "Παρευρισκόμενοι"
+#: templates/part.eventform.php:68
+msgid "Advanced"
+msgstr "Για προχωρημένους"
+
+#: templates/part.eventform.php:112
+msgid "Select weekdays"
+msgstr "Επιλογή ημερών εβδομάδας"
+
+#: templates/part.eventform.php:125 templates/part.eventform.php:138
+msgid "Select days"
+msgstr "Επιλογή ημερών"
+
+#: templates/part.eventform.php:130
+msgid "and the events day of year."
+msgstr "και των ημερών του χρόνου που υπάρχουν συμβάντα."
+
+#: templates/part.eventform.php:143
+msgid "and the events day of month."
+msgstr "και των ημερών του μήνα που υπάρχουν συμβάντα."
+
+#: templates/part.eventform.php:151
+msgid "Select months"
+msgstr "Επιλογή μηνών"
+
+#: templates/part.eventform.php:164
+msgid "Select weeks"
+msgstr "Επιλογή εβδομάδων"
+
+#: templates/part.eventform.php:169
+msgid "and the events week of year."
+msgstr "και των εβδομάδων του χρόνου που υπάρουν συμβάντα."
+
+#: templates/part.eventform.php:175
+msgid "Interval"
+msgstr "Διάστημα"
+
+#: templates/part.eventform.php:181
+msgid "End"
+msgstr "Τέλος"
+
+#: templates/part.eventform.php:193
+msgid "occurrences"
+msgstr "περιστατικά"
+
+#: templates/part.eventform.php:208
+msgid "Location"
+msgstr "Τοποθεσία"
+
+#: templates/part.eventform.php:210
+msgid "Location of the Event"
+msgstr "Τοποθεσία συμβάντος"
-#: templates/part.eventform.php:89
+#: templates/part.eventform.php:216
+msgid "Description"
+msgstr "Περιγραφή"
+
+#: templates/part.eventform.php:218
msgid "Description of the Event"
msgstr "Περιγραφή του συμβάντος"
-#: templates/part.eventinfo.php:63
-msgid "Close"
-msgstr "Κλείσιμο"
+#: templates/part.import.php:1
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the calendar"
+msgstr "Παρακαλώ επιλέξτε το ημερολόγιο"
+
+#: templates/part.import.php:10
+msgid "create a new calendar"
+msgstr ""
+
+#: templates/part.import.php:15
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import"
+msgstr "Εισαγωγή"
+
+#: templates/part.import.php:20
+msgid "Importing calendar"
+msgstr ""
+
+#: templates/part.import.php:23
+msgid "Calendar imported successfully"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Close Dialog"
+msgstr ""
#: templates/part.newevent.php:1
msgid "Create a new event"
msgstr "Δημιουργήστε ένα νέο συμβάν"
-#: templates/settings.php:11
+#: templates/settings.php:13
msgid "Timezone"
msgstr "Ζώνη ώρας"
+#: templates/settings.php:30
+msgid "Check always for changes of the timezone"
+msgstr "Έλεγοχς πάντα για τις αλλαγές της ζώνης ώρας"
+
+#: templates/settings.php:32
+msgid "Timeformat"
+msgstr "Μορφή ώρας"
+
+#: templates/settings.php:34
+msgid "24h"
+msgstr "24ω"
+
+#: templates/settings.php:35
+msgid "12h"
+msgstr "12ω"
+
+#: templates/settings.php:41
+msgid "Calendar CalDAV syncing address:"
+msgstr "Διεύθυνση για το συγχρονισμού του ημερολογίου CalDAV:"
+
diff --git a/l10n/el/contacts.po b/l10n/el/contacts.po
index bdd775c8ba2..1eaa6a34b85 100644
--- a/l10n/el/contacts.po
+++ b/l10n/el/contacts.po
@@ -3,13 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <christosvas@in.gr>, 2011.
+# Petros Kyladitis <petros.kyladitis@gmail.com>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 20:10+0200\n"
-"PO-Revision-Date: 2011-09-23 18:11+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Greek (http://www.transifex.net/projects/p/owncloud/team/el/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,164 +19,275 @@ msgstr ""
"Language: el\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/addcard.php:31 ajax/addproperty.php:31 ajax/deletebook.php:32
-#: ajax/deletecard.php:32 ajax/deleteproperty.php:34 ajax/getdetails.php:32
-#: ajax/setproperty.php:32 ajax/showaddcard.php:30 ajax/showaddproperty.php:31
-#: ajax/showsetproperty.php:32 photo.php:32
-msgid "You need to log in."
+#: ajax/activation.php:17 ajax/updateaddressbook.php:26
+msgid "Error (de)activating addressbook."
msgstr ""
-#: ajax/addcard.php:37
-msgid "This is not your addressbook."
+#: ajax/addcard.php:79
+msgid "There was an error adding the contact."
msgstr ""
-#: ajax/addproperty.php:37 ajax/deletecard.php:39 ajax/deleteproperty.php:41
-#: ajax/getdetails.php:39 ajax/setproperty.php:38 ajax/showaddproperty.php:37
-#: ajax/showsetproperty.php:38 photo.php:39
-msgid "Contact could not be found."
+#: ajax/addproperty.php:39
+msgid "Cannot add empty property."
msgstr ""
-#: ajax/addproperty.php:43 ajax/deletebook.php:38 ajax/deletecard.php:45
-#: ajax/deleteproperty.php:47 ajax/getdetails.php:45 ajax/setproperty.php:44
-#: ajax/showaddproperty.php:43 ajax/showsetproperty.php:44 photo.php:45
-msgid "This is not your contact."
+#: ajax/addproperty.php:51
+msgid "At least one of the address fields has to be filled out."
msgstr ""
-#: ajax/addproperty.php:50 ajax/deleteproperty.php:54 ajax/getdetails.php:52
-#: ajax/setproperty.php:51 ajax/showsetproperty.php:51
-msgid "vCard could not be read."
+#: ajax/addproperty.php:77
+msgid "Error adding contact property."
msgstr ""
-#: ajax/deleteproperty.php:65 ajax/setproperty.php:62
-#: ajax/showsetproperty.php:62
-msgid "Information about vCard is incorrect. Please reload the page."
+#: ajax/createaddressbook.php:20
+msgid "Error adding addressbook."
msgstr ""
-#: photo.php:53
-msgid "This card is not RFC compatible."
+#: ajax/createaddressbook.php:26
+msgid "Error activating addressbook."
msgstr ""
-#: photo.php:90
-msgid "This card does not contain a photo."
+#: ajax/deleteproperty.php:40
+msgid "Error deleting contact property."
msgstr ""
-#: templates/index.php:8
-msgid "Add Contact"
+#: ajax/setproperty.php:79
+msgid "Error updating contact property."
msgstr ""
-#: templates/part.addcardform.php:5
-msgid "Group"
+#: ajax/updateaddressbook.php:20
+msgid "Error updating addressbook."
msgstr ""
-#: templates/part.addcardform.php:12 templates/part.property.php:3
-msgid "Name"
+#: appinfo/app.php:21 templates/settings.php:3
+msgid "Contacts"
msgstr ""
-#: templates/part.addcardform.php:14
-msgid "Create Contact"
+#: lib/app.php:42
+msgid "This is not your addressbook."
+msgstr "Αυτό δεν είναι βιβλίο διευθύνσεων σας."
+
+#: lib/app.php:51 photo.php:34
+msgid "Contact could not be found."
+msgstr "Η επαφή δεν μπρόρεσε να βρεθεί."
+
+#: lib/app.php:79
+msgid "Information about vCard is incorrect. Please reload the page."
msgstr ""
+"Οι πληροφορίες σχετικά με vCard είναι εσφαλμένες. Παρακαλώ επαναφορτώστε τη "
+"σελίδα."
-#: templates/part.addpropertyform.php:4 templates/part.property.php:40
+#: lib/app.php:91 templates/part.addcardform.php:54
+#: templates/part.property.php:45 templates/part.setpropertyform.php:7
msgid "Address"
-msgstr ""
+msgstr "Διεύθυνση"
-#: templates/part.addpropertyform.php:5
+#: lib/app.php:92 templates/part.addcardform.php:43
msgid "Telephone"
-msgstr ""
+msgstr "Τηλέφωνο"
-#: templates/part.addpropertyform.php:6 templates/part.property.php:22
+#: lib/app.php:93 templates/part.addcardform.php:37
+#: templates/part.property.php:16 templates/part.setpropertyform.php:51
msgid "Email"
-msgstr ""
+msgstr "Email"
-#: templates/part.addpropertyform.php:7 templates/part.property.php:15
+#: lib/app.php:94 templates/part.addcardform.php:27
+#: templates/part.property.php:9 templates/part.setpropertyform.php:54
msgid "Organization"
-msgstr ""
+msgstr "Οργανισμός"
-#: templates/part.addpropertyform.php:17 templates/part.addpropertyform.php:32
+#: lib/app.php:106 lib/app.php:113
msgid "Work"
-msgstr ""
+msgstr "Εργασία"
-#: templates/part.addpropertyform.php:18 templates/part.addpropertyform.php:30
+#: lib/app.php:107 lib/app.php:111
msgid "Home"
+msgstr "Σπίτι"
+
+#: lib/app.php:112
+msgid "Mobile"
+msgstr "Κινητό"
+
+#: lib/app.php:114
+msgid "Text"
+msgstr "Κείμενο"
+
+#: lib/app.php:115
+msgid "Voice"
+msgstr "Φωνή"
+
+#: lib/app.php:116
+msgid "Fax"
+msgstr "Φαξ"
+
+#: lib/app.php:117
+msgid "Video"
+msgstr "Βίντεο"
+
+#: lib/app.php:118
+msgid "Pager"
+msgstr "Βομβητής"
+
+#: lib/search.php:22
+msgid "Contact"
msgstr ""
-#: templates/part.addpropertyform.php:20 templates/part.property.php:48
-#: templates/part.setpropertyform.php:5
-msgid "PO Box"
+#: photo.php:40
+msgid "This is not your contact."
+msgstr "Αυτή δεν είναι επαφή σας."
+
+#: photo.php:48
+msgid "This card is not RFC compatible."
+msgstr "Αυτή η κάρτα δεν είναι RFC συμβατή."
+
+#: photo.php:85
+msgid "This card does not contain a photo."
+msgstr "Αυτή η κάρτα δεν περιέχει φωτογραφία."
+
+#: templates/index.php:6
+msgid "Add Contact"
+msgstr "Προσθήκη επαφής"
+
+#: templates/index.php:7
+msgid "Addressbooks"
msgstr ""
-#: templates/part.addpropertyform.php:21 templates/part.property.php:51
-#: templates/part.setpropertyform.php:6
-msgid "Extended"
+#: templates/part.addcardform.php:8
+msgid "Addressbook"
msgstr ""
-#: templates/part.addpropertyform.php:22 templates/part.property.php:54
-#: templates/part.setpropertyform.php:7
+#: templates/part.addcardform.php:21
+msgid "Name"
+msgstr "Όνομα"
+
+#: templates/part.addcardform.php:57 templates/part.details.php:43
+#: templates/part.details.php:79 templates/part.setpropertyform.php:10
+#: templates/part.setpropertyform.php:47
+msgid "Type"
+msgstr "Τύπος"
+
+#: templates/part.addcardform.php:65 templates/part.details.php:49
+#: templates/part.setpropertyform.php:16
+msgid "PO Box"
+msgstr "Ταχ. Θυρίδα"
+
+#: templates/part.addcardform.php:72 templates/part.details.php:53
+#: templates/part.setpropertyform.php:20
+msgid "Extended"
+msgstr "Εκτεταμένη"
+
+#: templates/part.addcardform.php:78 templates/part.details.php:57
+#: templates/part.setpropertyform.php:24
msgid "Street"
-msgstr ""
+msgstr "Οδός"
-#: templates/part.addpropertyform.php:23 templates/part.property.php:57
-#: templates/part.setpropertyform.php:8
+#: templates/part.addcardform.php:84 templates/part.details.php:61
+#: templates/part.setpropertyform.php:28
msgid "City"
-msgstr ""
+msgstr "Πόλη"
-#: templates/part.addpropertyform.php:24 templates/part.property.php:60
-#: templates/part.setpropertyform.php:9
+#: templates/part.addcardform.php:90 templates/part.details.php:65
+#: templates/part.setpropertyform.php:32
msgid "Region"
-msgstr ""
+msgstr "Περιοχή"
-#: templates/part.addpropertyform.php:25 templates/part.property.php:63
-#: templates/part.setpropertyform.php:10
+#: templates/part.addcardform.php:96 templates/part.details.php:69
+#: templates/part.setpropertyform.php:36
msgid "Zipcode"
-msgstr ""
+msgstr "Τ.Κ."
-#: templates/part.addpropertyform.php:26 templates/part.property.php:66
-#: templates/part.setpropertyform.php:11
+#: templates/part.addcardform.php:102 templates/part.details.php:73
+#: templates/part.setpropertyform.php:40
msgid "Country"
-msgstr ""
+msgstr "Χώρα"
-#: templates/part.addpropertyform.php:31
-msgid "Mobile"
-msgstr ""
+#: templates/part.addcardform.php:109
+msgid "Create Contact"
+msgstr "Δημιουργία επαφής"
-#: templates/part.addpropertyform.php:33
-msgid "Text"
-msgstr ""
+#: templates/part.chooseaddressbook.php:1
+msgid "Choose active Address Books"
+msgstr "Επιλέξτε τα ενεργά βιβλία διευθύνσεων"
-#: templates/part.addpropertyform.php:34
-msgid "Voice"
-msgstr ""
+#: templates/part.chooseaddressbook.php:16
+msgid "New Address Book"
+msgstr "Νέο βιβλίο διευθύνσεων"
-#: templates/part.addpropertyform.php:35
-msgid "Fax"
-msgstr ""
+#: templates/part.chooseaddressbook.php:21
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "CardDav Link"
+msgstr "Σύνδεσμος CardDav"
-#: templates/part.addpropertyform.php:36
-msgid "Video"
-msgstr ""
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Download"
+msgstr "Μεταφόρτωση"
-#: templates/part.addpropertyform.php:37
-msgid "Pager"
-msgstr ""
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Edit"
+msgstr "Επεξεργασία"
-#: templates/part.details.php:33
+#: templates/part.chooseaddressbook.rowfields.php:5
msgid "Delete"
+msgstr "Διαγραφή"
+
+#: templates/part.details.php:3
+msgid "Download contact"
msgstr ""
+#: templates/part.details.php:4
+msgid "Delete contact"
+msgstr "Διαγραφή επαφής"
+
#: templates/part.details.php:34
-msgid "Add Property"
+msgid "Add"
+msgstr "Προσθήκη"
+
+#: templates/part.editaddressbook.php:9
+msgid "New Addressbook"
msgstr ""
-#: templates/part.property.php:9
-msgid "Birthday"
+#: templates/part.editaddressbook.php:9
+msgid "Edit Addressbook"
msgstr ""
-#: templates/part.property.php:29
+#: templates/part.editaddressbook.php:12
+msgid "Displayname"
+msgstr "Προβαλόμενο όνομα"
+
+#: templates/part.editaddressbook.php:23
+msgid "Active"
+msgstr "Ενεργό"
+
+#: templates/part.editaddressbook.php:29
+msgid "Save"
+msgstr "Αποθήκευση"
+
+#: templates/part.editaddressbook.php:29
+msgid "Submit"
+msgstr "Καταχώρηση"
+
+#: templates/part.editaddressbook.php:30
+msgid "Cancel"
+msgstr "Ακύρωση"
+
+#: templates/part.property.php:3
+msgid "Birthday"
+msgstr "Γενέθλια"
+
+#: templates/part.property.php:23
+msgid "Preferred"
+msgstr "Προτιμώμενο"
+
+#: templates/part.property.php:23 templates/part.setpropertyform.php:45
msgid "Phone"
-msgstr ""
+msgstr "Τηλέφωνο"
-#: templates/part.setpropertyform.php:17
-msgid "Edit"
+#: templates/part.setpropertyform.php:57
+msgid "Update"
+msgstr "Ενημέρωση"
+
+#: templates/settings.php:4
+msgid "CardDAV syncing address:"
msgstr ""
diff --git a/l10n/el/core.po b/l10n/el/core.po
index f7d9f565555..1b3f42e1e0b 100644
--- a/l10n/el/core.po
+++ b/l10n/el/core.po
@@ -4,14 +4,14 @@
#
# Translators:
# <petros.kyladitis@gmail.com>, 2011.
-# Petros Kyladitis <petros.kyladitis@gmail.com>, 2011.
+# Petros Kyladitis <petros.kyladitis@gmail.com>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 18:17+0200\n"
-"PO-Revision-Date: 2011-09-07 09:13+0000\n"
-"Last-Translator: multipetros <petros.kyladitis@gmail.com>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-11 17:25+0000\n"
+"Last-Translator: Petros Kyladitis <petros.kyladitis@gmail.com>\n"
"Language-Team: Greek (http://www.transifex.net/projects/p/owncloud/team/el/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,6 +19,54 @@ msgstr ""
"Language: el\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+#: lostpassword/index.php:24
+msgid "Owncloud password reset"
+msgstr "Επανέκδοση κωδικού για το Qwncloud"
+
+#: lostpassword/templates/email.php:1
+msgid "Use the following link to reset your password: {link}"
+msgstr ""
+"Χρησιμοποιήστε τον ακόλουθο σύνδεσμο για να επανεκδόσετε τον κωδικό: {link}"
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr ""
+"Θα λάβετε ένα σύνδεσμο για να επαναφέρετε τον κωδικό πρόσβασής σας μέσω "
+"ηλεκτρονικού ταχυδρομείου."
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Requested"
+msgstr "Ζητήθησαν"
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr "Η σύνδεση απέτυχε!"
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:22
+#: templates/login.php:8
+msgid "Username"
+msgstr "Όνομα Χρήστη"
+
+#: lostpassword/templates/lostpassword.php:14
+msgid "Request reset"
+msgstr "Επαναφορά αίτησης"
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr "Ο κωδικός πρόσβασής σας επαναφέρθηκε"
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr "Σελίδα εισόδου"
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr "Νέος κωδικός"
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr "Επαναφορά κωδικού πρόσβασης"
+
#: strings.php:5
msgid "Personal"
msgstr "Προσωπικά"
@@ -47,54 +95,50 @@ msgstr "Δεν βρέθηκε σύννεφο"
msgid "Create an <strong>admin account</strong>"
msgstr "Δημιουργήστε έναν <strong>λογαριασμό διαχειριστή</strong>"
-#: templates/installation.php:21
-msgid "Username"
-msgstr "Όνομα Χρήστη"
-
-#: templates/installation.php:22
+#: templates/installation.php:26 templates/login.php:12
msgid "Password"
msgstr "Κωδικός"
-#: templates/installation.php:27
+#: templates/installation.php:32
+msgid "Advanced"
+msgstr "Για προχωρημένους"
+
+#: templates/installation.php:34
+msgid "Data folder"
+msgstr "Φάκελος δεδομένων"
+
+#: templates/installation.php:41
msgid "Configure the database"
msgstr "Διαμόρφωση της βάσης δεδομένων"
-#: templates/installation.php:32 templates/installation.php:43
-#: templates/installation.php:53
+#: templates/installation.php:46 templates/installation.php:57
+#: templates/installation.php:67
msgid "will be used"
msgstr "θα χρησιμοποιηθούν"
-#: templates/installation.php:64
+#: templates/installation.php:79
msgid "Database user"
msgstr "Χρήστης της βάσης δεδομένων"
-#: templates/installation.php:65
+#: templates/installation.php:83
msgid "Database password"
msgstr "Κωδικός πρόσβασης βάσης δεδομένων"
-#: templates/installation.php:66
+#: templates/installation.php:87
msgid "Database name"
msgstr "Όνομα βάσης δεδομένων"
-#: templates/installation.php:72
-msgid "Advanced"
-msgstr "Για προχωρημένους"
-
-#: templates/installation.php:75
+#: templates/installation.php:93
msgid "Database host"
msgstr "Διακομιστής βάσης δεδομένων"
-#: templates/installation.php:76
-msgid "Data folder"
-msgstr "Φάκελος δεδομένων"
-
-#: templates/installation.php:79
+#: templates/installation.php:98
msgid "Finish setup"
msgstr "Ολοκλήρωση εγκατάστασης"
#: templates/layout.guest.php:35
-msgid "gives you freedom and control over your own data"
-msgstr "σας δίνει την ελευθερία και τον έλεγχο επί των δικών σας δεδομένων"
+msgid "web services under your control"
+msgstr "Υπηρεσίες web υπό τον έλεγχό σας"
#: templates/layout.user.php:34
msgid "Log out"
@@ -104,40 +148,22 @@ msgstr "Αποσύνδεση"
msgid "Settings"
msgstr "Ρυθμίσεις"
-#: templates/login.php:4
+#: templates/login.php:5
msgid "Lost your password?"
msgstr "Ξεχάσατε τον κωδικό σας;"
-#: templates/login.php:9 templates/login.php:13
+#: templates/login.php:15
msgid "remember"
msgstr "να με θυμάσαι"
+#: templates/login.php:16
+msgid "Log in"
+msgstr "Είσοδος"
+
#: templates/logout.php:1
msgid "You are logged out."
msgstr "Έχετε αποσυνδεθεί."
-#: templates/lostpassword.php:3
-msgid "You will receive a link to reset your password via Email."
-msgstr ""
-"Θα λάβετε ένα σύνδεσμο για να επαναφέρετε τον κωδικό πρόσβασής σας, μέσω "
-"ηλεκτρονικού ταχυδρομείου."
-
-#: templates/lostpassword.php:5
-msgid "Requested"
-msgstr "Αιτήθησαν"
-
-#: templates/lostpassword.php:8
-msgid "Login failed!"
-msgstr "Η σύνδεση απέτυχε!"
-
-#: templates/lostpassword.php:10
-msgid "Username or Email"
-msgstr "Όνομα Χρήστη ή Email"
-
-#: templates/lostpassword.php:11
-msgid "Request reset"
-msgstr "Επαναφοράς αίτησης"
-
#: templates/part.pagenavi.php:3
msgid "prev"
msgstr "προηγούμενο"
@@ -146,16 +172,4 @@ msgstr "προηγούμενο"
msgid "next"
msgstr "επόμενο"
-#: templates/resetpassword.php:4
-msgid "Your password was reset"
-msgstr "Έγινε επαναφορά του κωδικού πρόσβασής σας"
-
-#: templates/resetpassword.php:6
-msgid "New password"
-msgstr "Νέος κωδικός"
-
-#: templates/resetpassword.php:7
-msgid "Reset password"
-msgstr "Επαναφορά κωδικού πρόσβασης"
-
diff --git a/l10n/el/files.po b/l10n/el/files.po
index da78a25356e..aa0c2bd13a4 100644
--- a/l10n/el/files.po
+++ b/l10n/el/files.po
@@ -3,14 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Petros Kyladitis <petros.kyladitis@gmail.com>, 2011.
+# Petros Kyladitis <petros.kyladitis@gmail.com>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-11 17:17+0000\n"
+"Last-Translator: Petros Kyladitis <petros.kyladitis@gmail.com>\n"
"Language-Team: Greek (http://www.transifex.net/projects/p/owncloud/team/el/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,33 +18,37 @@ msgstr ""
"Language: el\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/upload.php:24
+#: ajax/upload.php:19
msgid "There is no error, the file uploaded with success"
-msgstr ""
+msgstr "Δεν υπάρχει λάθος, το αρχείο που μεταφορτώθηκε επιτυχώς"
-#: ajax/upload.php:25
+#: ajax/upload.php:20
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr ""
+"Το αρχείο που μεταφορτώθηκε υπερβαίνει την οδηγία μέγιστου επιτρεπτού "
+"μεγέθους \"upload_max_filesize\" του php.ini"
-#: ajax/upload.php:26
+#: ajax/upload.php:21
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
+"Το αρχείο υπερβαίνει την οδηγία μέγιστου επιτρεπτού μεγέθους "
+"\"MAX_FILE_SIZE\" που έχει οριστεί στην html φόρμα"
-#: ajax/upload.php:27
+#: ajax/upload.php:22
msgid "The uploaded file was only partially uploaded"
-msgstr ""
+msgstr "Το αρχείο μεταφορώθηκε μόνο εν μέρει"
-#: ajax/upload.php:28
+#: ajax/upload.php:23
msgid "No file was uploaded"
-msgstr ""
+msgstr "Το αρχείο δεν μεταφορτώθηκε"
-#: ajax/upload.php:29
+#: ajax/upload.php:24
msgid "Missing a temporary folder"
-msgstr ""
+msgstr "Λείπει ένας προσωρινός φάκελος"
-#: appinfo/app.php:7
+#: appinfo/app.php:8
msgid "Files"
msgstr "Αρχεία"
@@ -52,43 +56,55 @@ msgstr "Αρχεία"
msgid "Maximum upload size"
msgstr "Μέγιστο μέγεθος μεταφόρτωσης"
+#: templates/index.php:7
+msgid "New"
+msgstr "Νέο"
+
#: templates/index.php:10
+msgid "Text file"
+msgstr "Αρχείο κειμένου"
+
+#: templates/index.php:11
+msgid "Folder"
+msgstr "Φάκελος"
+
+#: templates/index.php:12
+msgid "From the web"
+msgstr "Από τον ιστό"
+
+#: templates/index.php:22
msgid "Upload"
msgstr "Μεταφόρτωση"
-#: templates/index.php:17
-msgid "New Folder"
-msgstr "Νέος φάκελος"
-
-#: templates/index.php:31
+#: templates/index.php:35
msgid "Nothing in here. Upload something!"
msgstr "Δεν υπάρχει τίποτα εδώ. Ανέβασε κάτι!"
-#: templates/index.php:39
+#: templates/index.php:43
msgid "Name"
msgstr "Όνομα"
-#: templates/index.php:41
+#: templates/index.php:45
msgid "Download"
msgstr "Λήψη"
-#: templates/index.php:45
+#: templates/index.php:49
msgid "Size"
msgstr "Μέγεθος"
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Modified"
msgstr "Τροποποιήθηκε"
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Delete"
msgstr "Διαγραφή"
-#: templates/index.php:54
+#: templates/index.php:58
msgid "Upload too large"
msgstr "Πολύ μεγάλο το αρχείο προς μεταφόρτωση"
-#: templates/index.php:56
+#: templates/index.php:60
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
diff --git a/l10n/el/gallery.po b/l10n/el/gallery.po
new file mode 100644
index 00000000000..f2a75835b34
--- /dev/null
+++ b/l10n/el/gallery.po
@@ -0,0 +1,32 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:48+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Greek (http://www.transifex.net/projects/p/owncloud/team/el/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: el\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:41
+msgid "Gallery"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Rescan"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+
diff --git a/l10n/el/media.po b/l10n/el/media.po
index c5bd96407cb..cb05fad3c96 100644
--- a/l10n/el/media.po
+++ b/l10n/el/media.po
@@ -2,14 +2,15 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
+# Translators:
# Petros Kyladitis <petros.kyladitis@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
-"Report-Msgid-Bugs-To: http://bugs.kde.org/buglist.cgi?product=owncloud\n"
-"POT-Creation-Date: 2011-08-23 11:09+0200\n"
-"PO-Revision-Date: 2011-08-21 22:51+0000\n"
-"Last-Translator: multipetros <petros.kyladitis@gmail.com>\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Greek (http://www.transifex.net/projects/p/owncloud/team/el/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,15 +18,15 @@ msgstr ""
"Language: el\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: appinfo/app.php:31
+#: appinfo/app.php:32
msgid "Music"
msgstr "Μουσική"
-#: templates/music.php:3
+#: templates/music.php:3 templates/player.php:13
msgid "Play"
msgstr "Αναπαραγωγή"
-#: templates/music.php:4 templates/music.php:30
+#: templates/music.php:4 templates/music.php:26 templates/player.php:14
msgid "Pause"
msgstr "Παύση"
@@ -33,7 +34,7 @@ msgstr "Παύση"
msgid "Previous"
msgstr "Προηγούμενο"
-#: templates/music.php:6
+#: templates/music.php:6 templates/player.php:15
msgid "Next"
msgstr "Επόμενο"
@@ -45,11 +46,7 @@ msgstr "Σίγαση"
msgid "Unmute"
msgstr "Επαναφορά ήχου"
-#: templates/music.php:28
-msgid "Songs scanned"
-msgstr "Σαρωμένα τραγούγια"
-
-#: templates/music.php:29
+#: templates/music.php:25
msgid "Rescan Collection"
msgstr "Επανασάρωση συλλογής"
diff --git a/l10n/el/settings.po b/l10n/el/settings.po
index 03240ac6c73..3ca09077e0b 100644
--- a/l10n/el/settings.po
+++ b/l10n/el/settings.po
@@ -2,15 +2,16 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
+# Translators:
# <petros.kyladitis@gmail.com>, 2011.
-# Petros Kyladitis <petros.kyladitis@gmail.com>, 2011.
+# Petros Kyladitis <petros.kyladitis@gmail.com>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
-"Report-Msgid-Bugs-To: http://bugs.kde.org/buglist.cgi?product=owncloud\n"
-"POT-Creation-Date: 2011-08-28 01:13+0200\n"
-"PO-Revision-Date: 2011-08-27 23:13+0000\n"
-"Last-Translator: JanCBorchardt <JanCBorchardt@fsfe.org>\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-11 17:35+0000\n"
+"Last-Translator: Petros Kyladitis <petros.kyladitis@gmail.com>\n"
"Language-Team: Greek (http://www.transifex.net/projects/p/owncloud/team/el/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,25 +19,29 @@ msgstr ""
"Language: el\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/openid.php:13 ajax/setlanguage.php:13
-msgid "Authentication error"
-msgstr "Σφάλμα ταυτοποίησης"
+#: ajax/lostpassword.php:14
+msgid "email Changed"
+msgstr "το email άλλαξε"
-#: ajax/openid.php:21
-msgid "OpenID Changed"
-msgstr "Το OpenID άλλαξε"
-
-#: ajax/openid.php:23 ajax/setlanguage.php:23
+#: ajax/lostpassword.php:16 ajax/openid.php:17 ajax/setlanguage.php:16
msgid "Invalid request"
msgstr "Άκυρα αίτημα"
-#: ajax/setlanguage.php:21
+#: ajax/openid.php:15
+msgid "OpenID Changed"
+msgstr "Το OpenID άλλαξε"
+
+#: ajax/setlanguage.php:14
msgid "Language changed"
msgstr "Η γλώσσα άλλαξε"
+#: templates/admin.php:13
+msgid "Log level"
+msgstr "Επίπεδο καταγραφής"
+
#: templates/apps.php:8
msgid "Add your application"
-msgstr ""
+msgstr "Προσθέστε την δική σας εφαρμογή"
#: templates/apps.php:21
msgid "Select an App"
@@ -54,15 +59,15 @@ msgstr "με"
msgid "Ask a question"
msgstr "Κάντε μια ερώτηση"
-#: templates/help.php:17
+#: templates/help.php:20
msgid "Problems connecting to help database."
msgstr "Προβλήματα κατά τη σύνδεση με τη βάση δεδομένων βοήθειας."
-#: templates/help.php:18
+#: templates/help.php:21
msgid "Go there manually."
msgstr "Χειροκίνητη μετάβαση."
-#: templates/help.php:26
+#: templates/help.php:29
msgid "Answer"
msgstr "Απάντηση"
@@ -80,7 +85,7 @@ msgstr "Ο κωδικός πρόσβασής σας άλαλαξε"
#: templates/personal.php:14
msgid "Unable to change your password"
-msgstr ""
+msgstr "Δεν ήταν δυνατή η αλλαγή του κωδικού πρόσβασης"
#: templates/personal.php:15
msgid "Current password"
@@ -99,36 +104,54 @@ msgid "Change password"
msgstr "Αλλαγή κωδικού πρόσβασης"
#: templates/personal.php:24
+msgid "Email"
+msgstr "Email"
+
+#: templates/personal.php:25
+msgid "Your email address"
+msgstr "Το διεύθυνση ηλεκτρονικού ταχυδρομείου σας"
+
+#: templates/personal.php:26
+msgid "Fill in an email address to enable password recovery"
+msgstr ""
+"Συμπληρώστε μια διεύθυνση ηλεκτρονικού ταχυδρομείου για να ενεργοποιηθεί ή "
+"ανάκτηση κωδικού πρόσβασης"
+
+#: templates/personal.php:32 templates/personal.php:33
msgid "Language"
msgstr "Γλώσσα"
-#: templates/personal.php:30
-msgid "Help translating"
-msgstr "Βοηθήστε στη μετάφραση"
+#: templates/personal.php:38
+msgid "Help translate"
+msgstr "Βοηθήστε στην μετάφραση"
-#: templates/personal.php:36
+#: templates/personal.php:45
msgid "use this address to connect to your ownCloud in your file manager"
msgstr ""
"χρησιμοποιήστε αυτή τη διεύθυνση για να συνδεθείτε στο ownCloud σας από το "
"διαχειριστή αρχείων σας"
-#: templates/users.php:16
+#: templates/users.php:15 templates/users.php:30
msgid "Name"
msgstr "Όνομα"
-#: templates/users.php:17
+#: templates/users.php:16 templates/users.php:31
msgid "Password"
msgstr "Κωδικός"
-#: templates/users.php:18 templates/users.php:36
+#: templates/users.php:17 templates/users.php:32 templates/users.php:46
msgid "Groups"
msgstr "Ομάδες"
-#: templates/users.php:24
+#: templates/users.php:23
msgid "Create"
msgstr "Δημιουργία"
-#: templates/users.php:48
+#: templates/users.php:33
+msgid "Quota"
+msgstr "Αναλογία χώρου"
+
+#: templates/users.php:58
msgid "Delete"
msgstr "Διαγραφή"
diff --git a/l10n/eo/calendar.po b/l10n/eo/calendar.po
new file mode 100644
index 00000000000..94b0b0af305
--- /dev/null
+++ b/l10n/eo/calendar.po
@@ -0,0 +1,637 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <mstreet@kde.org.ar>, 2011, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Esperanto (http://www.transifex.net/projects/p/owncloud/team/eo/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eo\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/guesstimezone.php:42
+msgid "New Timezone:"
+msgstr "Nova horzono:"
+
+#: ajax/settimezone.php:22
+msgid "Timezone changed"
+msgstr "La horozono estas ŝanĝita"
+
+#: ajax/settimezone.php:24
+msgid "Invalid request"
+msgstr "Nevalida peto"
+
+#: appinfo/app.php:20 templates/calendar.php:13
+#: templates/part.eventform.php:20
+msgid "Calendar"
+msgstr "Kalendaro"
+
+#: lib/app.php:19
+msgid "Wrong calendar"
+msgstr "Malĝusta kalendaro"
+
+#: lib/app.php:60 lib/object.php:332
+msgid "Birthday"
+msgstr "Naskiĝotago"
+
+#: lib/app.php:61 lib/object.php:333
+msgid "Business"
+msgstr "Negoco"
+
+#: lib/app.php:62 lib/object.php:334
+msgid "Call"
+msgstr "Voko"
+
+#: lib/app.php:63 lib/object.php:335
+msgid "Clients"
+msgstr "Klientoj"
+
+#: lib/app.php:64 lib/object.php:336
+msgid "Deliverer"
+msgstr "Livero"
+
+#: lib/app.php:65 lib/object.php:337
+msgid "Holidays"
+msgstr "Ferioj"
+
+#: lib/app.php:66 lib/object.php:338
+msgid "Ideas"
+msgstr "Ideoj"
+
+#: lib/app.php:67 lib/object.php:339
+msgid "Journey"
+msgstr "Vojaĝo"
+
+#: lib/app.php:68 lib/object.php:340
+msgid "Jubilee"
+msgstr "Jubileo"
+
+#: lib/app.php:69 lib/object.php:341
+msgid "Meeting"
+msgstr "Rendevuo"
+
+#: lib/app.php:70 lib/object.php:342
+msgid "Other"
+msgstr "Alia"
+
+#: lib/app.php:71 lib/object.php:343
+msgid "Personal"
+msgstr "Persona"
+
+#: lib/app.php:72 lib/object.php:344
+msgid "Projects"
+msgstr "Projektoj"
+
+#: lib/app.php:73 lib/object.php:345
+msgid "Questions"
+msgstr "Demandoj"
+
+#: lib/app.php:74 lib/object.php:346
+msgid "Work"
+msgstr "Laboro"
+
+#: lib/object.php:353
+msgid "Does not repeat"
+msgstr "Ĉi tio ne ripetiĝas"
+
+#: lib/object.php:354
+msgid "Daily"
+msgstr "Tage"
+
+#: lib/object.php:355
+msgid "Weekly"
+msgstr "Semajne"
+
+#: lib/object.php:356
+msgid "Every Weekday"
+msgstr "Tage"
+
+#: lib/object.php:357
+msgid "Bi-Weekly"
+msgstr "Semajnduope"
+
+#: lib/object.php:358
+msgid "Monthly"
+msgstr "Monate"
+
+#: lib/object.php:359
+msgid "Yearly"
+msgstr "Jare"
+
+#: lib/object.php:366
+msgid "never"
+msgstr "neniam"
+
+#: lib/object.php:367
+msgid "by occurrences"
+msgstr "laŭ aperoj"
+
+#: lib/object.php:368
+msgid "by date"
+msgstr "laŭ dato"
+
+#: lib/object.php:375
+msgid "by monthday"
+msgstr "laŭ monattago"
+
+#: lib/object.php:376
+msgid "by weekday"
+msgstr "laŭ semajntago"
+
+#: lib/object.php:383 templates/lAfix.php:3
+msgid "Monday"
+msgstr "lundo"
+
+#: lib/object.php:384 templates/lAfix.php:4
+msgid "Tuesday"
+msgstr "mardo"
+
+#: lib/object.php:385 templates/lAfix.php:5
+msgid "Wednesday"
+msgstr "merkredo"
+
+#: lib/object.php:386 templates/lAfix.php:6
+msgid "Thursday"
+msgstr "ĵaŭdo"
+
+#: lib/object.php:387 templates/lAfix.php:7
+msgid "Friday"
+msgstr "vendredo"
+
+#: lib/object.php:388 templates/lAfix.php:8
+msgid "Saturday"
+msgstr "sabato"
+
+#: lib/object.php:389 templates/lAfix.php:2
+msgid "Sunday"
+msgstr "dimanĉo"
+
+#: lib/object.php:396
+msgid "events week of month"
+msgstr "la monatsemajno de la okazaĵo"
+
+#: lib/object.php:397
+msgid "first"
+msgstr "unua"
+
+#: lib/object.php:398
+msgid "second"
+msgstr "dua"
+
+#: lib/object.php:399
+msgid "third"
+msgstr "tria"
+
+#: lib/object.php:400
+msgid "fourth"
+msgstr "kvara"
+
+#: lib/object.php:401
+msgid "fifth"
+msgstr "kvina"
+
+#: lib/object.php:402
+msgid "last"
+msgstr "lasta"
+
+#: lib/object.php:424 templates/lAfix.php:16
+msgid "January"
+msgstr "Januaro"
+
+#: lib/object.php:425 templates/lAfix.php:17
+msgid "February"
+msgstr "Februaro"
+
+#: lib/object.php:426 templates/lAfix.php:18
+msgid "March"
+msgstr "Marto"
+
+#: lib/object.php:427 templates/lAfix.php:19
+msgid "April"
+msgstr "Aprilo"
+
+#: lib/object.php:428 templates/lAfix.php:20
+msgid "May"
+msgstr "Majo"
+
+#: lib/object.php:429 templates/lAfix.php:21
+msgid "June"
+msgstr "Junio"
+
+#: lib/object.php:430 templates/lAfix.php:22
+msgid "July"
+msgstr "Julio"
+
+#: lib/object.php:431 templates/lAfix.php:23
+msgid "August"
+msgstr "Aŭgusto"
+
+#: lib/object.php:432 templates/lAfix.php:24
+msgid "September"
+msgstr "Septembro"
+
+#: lib/object.php:433 templates/lAfix.php:25
+msgid "October"
+msgstr "Oktobro"
+
+#: lib/object.php:434 templates/lAfix.php:26
+msgid "November"
+msgstr "Novembro"
+
+#: lib/object.php:435 templates/lAfix.php:27
+msgid "December"
+msgstr "Decembro"
+
+#: lib/object.php:441
+msgid "by events date"
+msgstr "laŭ okazaĵdato"
+
+#: lib/object.php:442
+msgid "by yearday(s)"
+msgstr "laŭ jartago(j)"
+
+#: lib/object.php:443
+msgid "by weeknumber(s)"
+msgstr "laŭ semajnnumero(j)"
+
+#: lib/object.php:444
+msgid "by day and month"
+msgstr "laŭ tago kaj monato"
+
+#: lib/object.php:467
+msgid "Not an array"
+msgstr "Ĉi tio ne estas tabeltipa"
+
+#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+msgid "Date"
+msgstr "Dato"
+
+#: lib/search.php:40
+msgid "Cal."
+msgstr "Kal."
+
+#: templates/calendar.php:10
+msgid "All day"
+msgstr "La tuta tago"
+
+#: templates/calendar.php:11
+msgid "Missing fields"
+msgstr "Mankas iuj kampoj"
+
+#: templates/calendar.php:12 templates/part.eventform.php:3
+msgid "Title"
+msgstr "Titolo"
+
+#: templates/calendar.php:14
+msgid "From Date"
+msgstr "ekde la dato"
+
+#: templates/calendar.php:15
+msgid "From Time"
+msgstr "ekde la horo"
+
+#: templates/calendar.php:16
+msgid "To Date"
+msgstr "ĝis la dato"
+
+#: templates/calendar.php:17
+msgid "To Time"
+msgstr "ĝis la horo"
+
+#: templates/calendar.php:18
+msgid "The event ends before it starts"
+msgstr "La okazaĵo finas antaŭ komenci"
+
+#: templates/calendar.php:19
+msgid "There was a database fail"
+msgstr "Datumbaza malsukceso okazis"
+
+#: templates/calendar.php:52
+msgid "Week"
+msgstr "Semajno"
+
+#: templates/calendar.php:53
+msgid "Month"
+msgstr "Monato"
+
+#: templates/calendar.php:54
+msgid "List"
+msgstr "Listo"
+
+#: templates/calendar.php:59
+msgid "Today"
+msgstr "Hodiaŭ"
+
+#: templates/calendar.php:60
+msgid "Calendars"
+msgstr "Kalendaroj"
+
+#: templates/calendar.php:78
+msgid "There was a fail, while parsing the file."
+msgstr "Malsukceso okazis dum analizo de la dosiero."
+
+#: templates/lAfix.php:9
+msgid "Sun."
+msgstr ""
+
+#: templates/lAfix.php:10
+msgid "Mon."
+msgstr ""
+
+#: templates/lAfix.php:11
+msgid "Tue."
+msgstr ""
+
+#: templates/lAfix.php:12
+msgid "Wed."
+msgstr ""
+
+#: templates/lAfix.php:13
+msgid "Thu."
+msgstr ""
+
+#: templates/lAfix.php:14
+msgid "Fri."
+msgstr ""
+
+#: templates/lAfix.php:15
+msgid "Sat."
+msgstr ""
+
+#: templates/lAfix.php:28
+msgid "Jan."
+msgstr ""
+
+#: templates/lAfix.php:29
+msgid "Feb."
+msgstr ""
+
+#: templates/lAfix.php:30
+msgid "Mar."
+msgstr ""
+
+#: templates/lAfix.php:31
+msgid "Apr."
+msgstr ""
+
+#: templates/lAfix.php:32
+msgid "May."
+msgstr ""
+
+#: templates/lAfix.php:33
+msgid "Jun."
+msgstr ""
+
+#: templates/lAfix.php:34
+msgid "Jul."
+msgstr ""
+
+#: templates/lAfix.php:35
+msgid "Aug."
+msgstr ""
+
+#: templates/lAfix.php:36
+msgid "Sep."
+msgstr ""
+
+#: templates/lAfix.php:37
+msgid "Oct."
+msgstr ""
+
+#: templates/lAfix.php:38
+msgid "Nov."
+msgstr ""
+
+#: templates/lAfix.php:39
+msgid "Dec."
+msgstr ""
+
+#: templates/part.choosecalendar.php:1
+msgid "Choose active calendars"
+msgstr "Elektu aktivajn kalendarojn"
+
+#: templates/part.choosecalendar.php:15
+msgid "New Calendar"
+msgstr "Nova kalendaro"
+
+#: templates/part.choosecalendar.php:20
+#: templates/part.choosecalendar.rowfields.php:4
+msgid "CalDav Link"
+msgstr "CalDav-a ligilo"
+
+#: templates/part.choosecalendar.rowfields.php:4
+msgid "Download"
+msgstr "Elŝuti"
+
+#: templates/part.choosecalendar.rowfields.php:4
+msgid "Edit"
+msgstr "Redakti"
+
+#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.editevent.php:9
+msgid "Delete"
+msgstr "Forigi"
+
+#: templates/part.editcalendar.php:9
+msgid "New calendar"
+msgstr "Nova kalendaro"
+
+#: templates/part.editcalendar.php:9
+msgid "Edit calendar"
+msgstr "Redakti la kalendaron"
+
+#: templates/part.editcalendar.php:12
+msgid "Displayname"
+msgstr "Montrota nomo"
+
+#: templates/part.editcalendar.php:23
+msgid "Active"
+msgstr "Aktiva"
+
+#: templates/part.editcalendar.php:29
+msgid "Calendar color"
+msgstr "Kalendarokoloro"
+
+#: templates/part.editcalendar.php:42
+msgid "Save"
+msgstr "Konservi"
+
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
+#: templates/part.newevent.php:6
+msgid "Submit"
+msgstr "Sendi"
+
+#: templates/part.editcalendar.php:43
+msgid "Cancel"
+msgstr "Nuligi"
+
+#: templates/part.editevent.php:1
+msgid "Edit an event"
+msgstr "Redakti okazaĵon"
+
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr "Elporti"
+
+#: templates/part.eventform.php:5
+msgid "Title of the Event"
+msgstr "Okazaĵotitolo"
+
+#: templates/part.eventform.php:11
+msgid "Category"
+msgstr "Kategorio"
+
+#: templates/part.eventform.php:13
+msgid "Select category"
+msgstr "Elekti kategorion"
+
+#: templates/part.eventform.php:37
+msgid "All Day Event"
+msgstr "La tuta tago"
+
+#: templates/part.eventform.php:41
+msgid "From"
+msgstr "Ekde"
+
+#: templates/part.eventform.php:49
+msgid "To"
+msgstr "Ĝis"
+
+#: templates/part.eventform.php:57
+msgid "Advanced options"
+msgstr "Altnivela agordo"
+
+#: templates/part.eventform.php:61
+msgid "Repeat"
+msgstr "Ripeti"
+
+#: templates/part.eventform.php:68
+msgid "Advanced"
+msgstr "Altnivelo"
+
+#: templates/part.eventform.php:112
+msgid "Select weekdays"
+msgstr "Elekti semajntagojn"
+
+#: templates/part.eventform.php:125 templates/part.eventform.php:138
+msgid "Select days"
+msgstr "Elekti tagojn"
+
+#: templates/part.eventform.php:130
+msgid "and the events day of year."
+msgstr "kaj la jartago de la okazaĵo."
+
+#: templates/part.eventform.php:143
+msgid "and the events day of month."
+msgstr "kaj la monattago de la okazaĵo."
+
+#: templates/part.eventform.php:151
+msgid "Select months"
+msgstr "Elekti monatojn"
+
+#: templates/part.eventform.php:164
+msgid "Select weeks"
+msgstr "Elekti semajnojn"
+
+#: templates/part.eventform.php:169
+msgid "and the events week of year."
+msgstr "kaj la jarsemajno de la okazaĵo."
+
+#: templates/part.eventform.php:175
+msgid "Interval"
+msgstr "Intervalo"
+
+#: templates/part.eventform.php:181
+msgid "End"
+msgstr "Fino"
+
+#: templates/part.eventform.php:193
+msgid "occurrences"
+msgstr "aperoj"
+
+#: templates/part.eventform.php:208
+msgid "Location"
+msgstr "Loko"
+
+#: templates/part.eventform.php:210
+msgid "Location of the Event"
+msgstr "Okazaĵoloko"
+
+#: templates/part.eventform.php:216
+msgid "Description"
+msgstr "Priskribo"
+
+#: templates/part.eventform.php:218
+msgid "Description of the Event"
+msgstr "Okazaĵopriskribo"
+
+#: templates/part.import.php:1
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the calendar"
+msgstr "Bonvolu elekti kalendaron"
+
+#: templates/part.import.php:10
+msgid "create a new calendar"
+msgstr ""
+
+#: templates/part.import.php:15
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import"
+msgstr "Enporti"
+
+#: templates/part.import.php:20
+msgid "Importing calendar"
+msgstr ""
+
+#: templates/part.import.php:23
+msgid "Calendar imported successfully"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Close Dialog"
+msgstr ""
+
+#: templates/part.newevent.php:1
+msgid "Create a new event"
+msgstr "Krei okazaĵon"
+
+#: templates/settings.php:13
+msgid "Timezone"
+msgstr "Horozono"
+
+#: templates/settings.php:30
+msgid "Check always for changes of the timezone"
+msgstr "Ĉiam kontroli ĉu la horzono ŝanĝiĝis"
+
+#: templates/settings.php:32
+msgid "Timeformat"
+msgstr "Tempoformo"
+
+#: templates/settings.php:34
+msgid "24h"
+msgstr "24h"
+
+#: templates/settings.php:35
+msgid "12h"
+msgstr "12h"
+
+#: templates/settings.php:41
+msgid "Calendar CalDAV syncing address:"
+msgstr "Adreso de kalendarosinkronigo per CalDAV:"
+
+
diff --git a/l10n/eo/contacts.po b/l10n/eo/contacts.po
new file mode 100644
index 00000000000..1a7cb0f8329
--- /dev/null
+++ b/l10n/eo/contacts.po
@@ -0,0 +1,290 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <mstreet@kde.org.ar>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Esperanto (http://www.transifex.net/projects/p/owncloud/team/eo/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eo\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/activation.php:17 ajax/updateaddressbook.php:26
+msgid "Error (de)activating addressbook."
+msgstr ""
+
+#: ajax/addcard.php:79
+msgid "There was an error adding the contact."
+msgstr ""
+
+#: ajax/addproperty.php:39
+msgid "Cannot add empty property."
+msgstr ""
+
+#: ajax/addproperty.php:51
+msgid "At least one of the address fields has to be filled out."
+msgstr ""
+
+#: ajax/addproperty.php:77
+msgid "Error adding contact property."
+msgstr ""
+
+#: ajax/createaddressbook.php:20
+msgid "Error adding addressbook."
+msgstr ""
+
+#: ajax/createaddressbook.php:26
+msgid "Error activating addressbook."
+msgstr ""
+
+#: ajax/deleteproperty.php:40
+msgid "Error deleting contact property."
+msgstr ""
+
+#: ajax/setproperty.php:79
+msgid "Error updating contact property."
+msgstr ""
+
+#: ajax/updateaddressbook.php:20
+msgid "Error updating addressbook."
+msgstr ""
+
+#: appinfo/app.php:21 templates/settings.php:3
+msgid "Contacts"
+msgstr ""
+
+#: lib/app.php:42
+msgid "This is not your addressbook."
+msgstr "Ĉi tiu ne estas via adresaro."
+
+#: lib/app.php:51 photo.php:34
+msgid "Contact could not be found."
+msgstr "Ne eblis trovi la kontakton."
+
+#: lib/app.php:79
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "Informo pri vCard estas malĝusta. Bonvolu reŝargi la paĝon."
+
+#: lib/app.php:91 templates/part.addcardform.php:54
+#: templates/part.property.php:45 templates/part.setpropertyform.php:7
+msgid "Address"
+msgstr "Adreso"
+
+#: lib/app.php:92 templates/part.addcardform.php:43
+msgid "Telephone"
+msgstr "Telefono"
+
+#: lib/app.php:93 templates/part.addcardform.php:37
+#: templates/part.property.php:16 templates/part.setpropertyform.php:51
+msgid "Email"
+msgstr "Retpoŝtadreso"
+
+#: lib/app.php:94 templates/part.addcardform.php:27
+#: templates/part.property.php:9 templates/part.setpropertyform.php:54
+msgid "Organization"
+msgstr "Organizaĵo"
+
+#: lib/app.php:106 lib/app.php:113
+msgid "Work"
+msgstr "Laboro"
+
+#: lib/app.php:107 lib/app.php:111
+msgid "Home"
+msgstr "Hejmo"
+
+#: lib/app.php:112
+msgid "Mobile"
+msgstr "Poŝtelefono"
+
+#: lib/app.php:114
+msgid "Text"
+msgstr "Teksto"
+
+#: lib/app.php:115
+msgid "Voice"
+msgstr "Voĉo"
+
+#: lib/app.php:116
+msgid "Fax"
+msgstr "Fakso"
+
+#: lib/app.php:117
+msgid "Video"
+msgstr "Videaĵo"
+
+#: lib/app.php:118
+msgid "Pager"
+msgstr "Televokilo"
+
+#: lib/search.php:22
+msgid "Contact"
+msgstr ""
+
+#: photo.php:40
+msgid "This is not your contact."
+msgstr "Tiu ĉi ne estas via kontakto."
+
+#: photo.php:48
+msgid "This card is not RFC compatible."
+msgstr "Ĉi tiu karto ne kongruas kun RFC."
+
+#: photo.php:85
+msgid "This card does not contain a photo."
+msgstr "Ĉi tiu karto ne havas foton."
+
+#: templates/index.php:6
+msgid "Add Contact"
+msgstr "Aldoni kontakton"
+
+#: templates/index.php:7
+msgid "Addressbooks"
+msgstr ""
+
+#: templates/part.addcardform.php:8
+msgid "Addressbook"
+msgstr ""
+
+#: templates/part.addcardform.php:21
+msgid "Name"
+msgstr "Nomo"
+
+#: templates/part.addcardform.php:57 templates/part.details.php:43
+#: templates/part.details.php:79 templates/part.setpropertyform.php:10
+#: templates/part.setpropertyform.php:47
+msgid "Type"
+msgstr ""
+
+#: templates/part.addcardform.php:65 templates/part.details.php:49
+#: templates/part.setpropertyform.php:16
+msgid "PO Box"
+msgstr "Abonkesto"
+
+#: templates/part.addcardform.php:72 templates/part.details.php:53
+#: templates/part.setpropertyform.php:20
+msgid "Extended"
+msgstr "Etendita"
+
+#: templates/part.addcardform.php:78 templates/part.details.php:57
+#: templates/part.setpropertyform.php:24
+msgid "Street"
+msgstr "Strato"
+
+#: templates/part.addcardform.php:84 templates/part.details.php:61
+#: templates/part.setpropertyform.php:28
+msgid "City"
+msgstr "Urbo"
+
+#: templates/part.addcardform.php:90 templates/part.details.php:65
+#: templates/part.setpropertyform.php:32
+msgid "Region"
+msgstr "Regiono"
+
+#: templates/part.addcardform.php:96 templates/part.details.php:69
+#: templates/part.setpropertyform.php:36
+msgid "Zipcode"
+msgstr "Poŝtokodo"
+
+#: templates/part.addcardform.php:102 templates/part.details.php:73
+#: templates/part.setpropertyform.php:40
+msgid "Country"
+msgstr "Lando"
+
+#: templates/part.addcardform.php:109
+msgid "Create Contact"
+msgstr "Krei kontakton"
+
+#: templates/part.chooseaddressbook.php:1
+msgid "Choose active Address Books"
+msgstr ""
+
+#: templates/part.chooseaddressbook.php:16
+msgid "New Address Book"
+msgstr ""
+
+#: templates/part.chooseaddressbook.php:21
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "CardDav Link"
+msgstr ""
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Download"
+msgstr ""
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Edit"
+msgstr "Redakti"
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Delete"
+msgstr "Forigi"
+
+#: templates/part.details.php:3
+msgid "Download contact"
+msgstr ""
+
+#: templates/part.details.php:4
+msgid "Delete contact"
+msgstr ""
+
+#: templates/part.details.php:34
+msgid "Add"
+msgstr ""
+
+#: templates/part.editaddressbook.php:9
+msgid "New Addressbook"
+msgstr ""
+
+#: templates/part.editaddressbook.php:9
+msgid "Edit Addressbook"
+msgstr ""
+
+#: templates/part.editaddressbook.php:12
+msgid "Displayname"
+msgstr ""
+
+#: templates/part.editaddressbook.php:23
+msgid "Active"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Save"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Submit"
+msgstr ""
+
+#: templates/part.editaddressbook.php:30
+msgid "Cancel"
+msgstr ""
+
+#: templates/part.property.php:3
+msgid "Birthday"
+msgstr "Naskiĝotago"
+
+#: templates/part.property.php:23
+msgid "Preferred"
+msgstr ""
+
+#: templates/part.property.php:23 templates/part.setpropertyform.php:45
+msgid "Phone"
+msgstr "Telefono"
+
+#: templates/part.setpropertyform.php:57
+msgid "Update"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "CardDAV syncing address:"
+msgstr ""
+
+
diff --git a/l10n/eo/core.po b/l10n/eo/core.po
new file mode 100644
index 00000000000..af35e74b74e
--- /dev/null
+++ b/l10n/eo/core.po
@@ -0,0 +1,171 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <mstreet@kde.org.ar>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Esperanto (http://www.transifex.net/projects/p/owncloud/team/eo/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eo\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: lostpassword/index.php:24
+msgid "Owncloud password reset"
+msgstr ""
+
+#: lostpassword/templates/email.php:1
+msgid "Use the following link to reset your password: {link}"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr "Vi ricevos ligilon retpoŝte por rekomencigi vian pasvorton."
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Requested"
+msgstr "Petita"
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr "Ensaluto malsukcesis!"
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:22
+#: templates/login.php:8
+msgid "Username"
+msgstr "Uzantonomo"
+
+#: lostpassword/templates/lostpassword.php:14
+msgid "Request reset"
+msgstr "Peti rekomencigon"
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr "Via pasvorto rekomencis"
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr "Nova pasvorto"
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr "Rekomenci la pasvorton"
+
+#: strings.php:5
+msgid "Personal"
+msgstr "Persona"
+
+#: strings.php:6
+msgid "Users"
+msgstr "Uzantoj"
+
+#: strings.php:7
+msgid "Apps"
+msgstr "Aplikaĵoj"
+
+#: strings.php:8
+msgid "Admin"
+msgstr "Administranto"
+
+#: strings.php:9
+msgid "Help"
+msgstr "Helpo"
+
+#: templates/404.php:12
+msgid "Cloud not found"
+msgstr "La nubo ne estas trovita"
+
+#: templates/installation.php:20
+msgid "Create an <strong>admin account</strong>"
+msgstr "Krei <strong>administran konton</strong>"
+
+#: templates/installation.php:26 templates/login.php:12
+msgid "Password"
+msgstr "Pasvorto"
+
+#: templates/installation.php:32
+msgid "Advanced"
+msgstr "Porsperta"
+
+#: templates/installation.php:34
+msgid "Data folder"
+msgstr "Datuma dosierujo"
+
+#: templates/installation.php:41
+msgid "Configure the database"
+msgstr "Agordi la datumbazon"
+
+#: templates/installation.php:46 templates/installation.php:57
+#: templates/installation.php:67
+msgid "will be used"
+msgstr "estos uzata"
+
+#: templates/installation.php:79
+msgid "Database user"
+msgstr "Datumbaza uzanto"
+
+#: templates/installation.php:83
+msgid "Database password"
+msgstr "Datumbaza pasvorto"
+
+#: templates/installation.php:87
+msgid "Database name"
+msgstr "Datumbaza nomo"
+
+#: templates/installation.php:93
+msgid "Database host"
+msgstr "Datumbaza gastigo"
+
+#: templates/installation.php:98
+msgid "Finish setup"
+msgstr "Fini la instalon"
+
+#: templates/layout.guest.php:35
+msgid "web services under your control"
+msgstr ""
+
+#: templates/layout.user.php:34
+msgid "Log out"
+msgstr "Elsaluti"
+
+#: templates/layout.user.php:46 templates/layout.user.php:47
+msgid "Settings"
+msgstr "Agordo"
+
+#: templates/login.php:5
+msgid "Lost your password?"
+msgstr "Ĉu vi perdis vian pasvorton?"
+
+#: templates/login.php:15
+msgid "remember"
+msgstr "memori"
+
+#: templates/login.php:16
+msgid "Log in"
+msgstr ""
+
+#: templates/logout.php:1
+msgid "You are logged out."
+msgstr "Vi elsalutis."
+
+#: templates/part.pagenavi.php:3
+msgid "prev"
+msgstr "maljena"
+
+#: templates/part.pagenavi.php:20
+msgid "next"
+msgstr "jena"
+
+
diff --git a/l10n/eo/files.po b/l10n/eo/files.po
new file mode 100644
index 00000000000..9bfe7d92ab3
--- /dev/null
+++ b/l10n/eo/files.po
@@ -0,0 +1,113 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <mstreet@kde.org.ar>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Esperanto (http://www.transifex.net/projects/p/owncloud/team/eo/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eo\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/upload.php:19
+msgid "There is no error, the file uploaded with success"
+msgstr "Ne estas eraro, la dosiero alŝutiĝis sukcese"
+
+#: ajax/upload.php:20
+msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
+msgstr "La dosiero alŝutita superas la regulon upload_max_filesize el php.ini"
+
+#: ajax/upload.php:21
+msgid ""
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
+"the HTML form"
+msgstr ""
+"La dosiero alŝutita superas laregulon MAX_FILE_SIZE, kiu estas difinita en "
+"la HTML-formularo"
+
+#: ajax/upload.php:22
+msgid "The uploaded file was only partially uploaded"
+msgstr "La alŝutita dosiero nur parte alŝutiĝis"
+
+#: ajax/upload.php:23
+msgid "No file was uploaded"
+msgstr "Neniu dosiero estas alŝutita"
+
+#: ajax/upload.php:24
+msgid "Missing a temporary folder"
+msgstr "Mankas tempa dosierujo"
+
+#: appinfo/app.php:8
+msgid "Files"
+msgstr "Dosieroj"
+
+#: templates/admin.php:5
+msgid "Maximum upload size"
+msgstr "Maksimuma alŝutogrando"
+
+#: templates/index.php:7
+msgid "New"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Text file"
+msgstr ""
+
+#: templates/index.php:11
+msgid "Folder"
+msgstr ""
+
+#: templates/index.php:12
+msgid "From the web"
+msgstr ""
+
+#: templates/index.php:22
+msgid "Upload"
+msgstr "Alŝuti"
+
+#: templates/index.php:35
+msgid "Nothing in here. Upload something!"
+msgstr "Nenio estas ĉi tie. Alŝutu ion!"
+
+#: templates/index.php:43
+msgid "Name"
+msgstr "Nomo"
+
+#: templates/index.php:45
+msgid "Download"
+msgstr "Elŝuti"
+
+#: templates/index.php:49
+msgid "Size"
+msgstr "Grando"
+
+#: templates/index.php:50
+msgid "Modified"
+msgstr "Modifita"
+
+#: templates/index.php:50
+msgid "Delete"
+msgstr "Forigi"
+
+#: templates/index.php:58
+msgid "Upload too large"
+msgstr "Elŝuto tro larĝa"
+
+#: templates/index.php:60
+msgid ""
+"The files you are trying to upload exceed the maximum size for file uploads "
+"on this server."
+msgstr ""
+"La dosieroj, kiujn vi provas alŝuti, transpasas la maksimuman grandon por "
+"dosieralŝutoj en ĉi tiu servilo."
+
+
diff --git a/l10n/eo/gallery.po b/l10n/eo/gallery.po
new file mode 100644
index 00000000000..8c86c3094a1
--- /dev/null
+++ b/l10n/eo/gallery.po
@@ -0,0 +1,32 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:48+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Esperanto (http://www.transifex.net/projects/p/owncloud/team/eo/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eo\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:41
+msgid "Gallery"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Rescan"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+
diff --git a/l10n/eo/media.po b/l10n/eo/media.po
new file mode 100644
index 00000000000..c7eeddac865
--- /dev/null
+++ b/l10n/eo/media.po
@@ -0,0 +1,65 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <mstreet@kde.org.ar>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Esperanto (http://www.transifex.net/projects/p/owncloud/team/eo/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eo\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:32
+msgid "Music"
+msgstr "Muziko"
+
+#: templates/music.php:3 templates/player.php:13
+msgid "Play"
+msgstr "Ludi"
+
+#: templates/music.php:4 templates/music.php:26 templates/player.php:14
+msgid "Pause"
+msgstr "Paŭzi"
+
+#: templates/music.php:5
+msgid "Previous"
+msgstr "Maljena"
+
+#: templates/music.php:6 templates/player.php:15
+msgid "Next"
+msgstr "Jena"
+
+#: templates/music.php:7
+msgid "Mute"
+msgstr "Silentigi"
+
+#: templates/music.php:8
+msgid "Unmute"
+msgstr "Malsilentigi"
+
+#: templates/music.php:25
+msgid "Rescan Collection"
+msgstr "Reskani la aron"
+
+#: templates/music.php:37
+msgid "Artist"
+msgstr "Verkinto"
+
+#: templates/music.php:38
+msgid "Album"
+msgstr "Albumo"
+
+#: templates/music.php:39
+msgid "Title"
+msgstr "Titolo"
+
+
diff --git a/l10n/eo/settings.po b/l10n/eo/settings.po
new file mode 100644
index 00000000000..d99fbc60bd9
--- /dev/null
+++ b/l10n/eo/settings.po
@@ -0,0 +1,154 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <mstreet@kde.org.ar>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Esperanto (http://www.transifex.net/projects/p/owncloud/team/eo/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eo\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/lostpassword.php:14
+msgid "email Changed"
+msgstr ""
+
+#: ajax/lostpassword.php:16 ajax/openid.php:17 ajax/setlanguage.php:16
+msgid "Invalid request"
+msgstr "Nevalida peto"
+
+#: ajax/openid.php:15
+msgid "OpenID Changed"
+msgstr "La agordo de OpenID estas ŝanĝita"
+
+#: ajax/setlanguage.php:14
+msgid "Language changed"
+msgstr "La lingvo estas ŝanĝita"
+
+#: templates/admin.php:13
+msgid "Log level"
+msgstr ""
+
+#: templates/apps.php:8
+msgid "Add your application"
+msgstr "Aldonu vian aplikaĵon"
+
+#: templates/apps.php:21
+msgid "Select an App"
+msgstr "Elekti aplikaĵon"
+
+#: templates/apps.php:23
+msgid "-licensed"
+msgstr "-permesila"
+
+#: templates/apps.php:23
+msgid "by"
+msgstr "de"
+
+#: templates/help.php:8
+msgid "Ask a question"
+msgstr "Faru demandon"
+
+#: templates/help.php:20
+msgid "Problems connecting to help database."
+msgstr "Problemoj okazis dum konektado al la helpa datumbazo."
+
+#: templates/help.php:21
+msgid "Go there manually."
+msgstr "Iri tien mane."
+
+#: templates/help.php:29
+msgid "Answer"
+msgstr "Respondi"
+
+#: templates/personal.php:8
+msgid "You use"
+msgstr "Vi uzas"
+
+#: templates/personal.php:8
+msgid "of the available"
+msgstr "el la disponeblaj"
+
+#: templates/personal.php:13
+msgid "Your password got changed"
+msgstr "Via pasvorto ŝanĝiĝis"
+
+#: templates/personal.php:14
+msgid "Unable to change your password"
+msgstr "Ne eblis ŝanĝi vian pasvorton"
+
+#: templates/personal.php:15
+msgid "Current password"
+msgstr "Nuna pasvorto"
+
+#: templates/personal.php:16
+msgid "New password"
+msgstr "Nova pasvorto"
+
+#: templates/personal.php:17
+msgid "show"
+msgstr "montri"
+
+#: templates/personal.php:18
+msgid "Change password"
+msgstr "Ŝanĝi la pasvorton"
+
+#: templates/personal.php:24
+msgid "Email"
+msgstr ""
+
+#: templates/personal.php:25
+msgid "Your email address"
+msgstr ""
+
+#: templates/personal.php:26
+msgid "Fill in an email address to enable password recovery"
+msgstr ""
+
+#: templates/personal.php:32 templates/personal.php:33
+msgid "Language"
+msgstr "Lingvo"
+
+#: templates/personal.php:38
+msgid "Help translate"
+msgstr ""
+
+#: templates/personal.php:45
+msgid "use this address to connect to your ownCloud in your file manager"
+msgstr ""
+"uzu ĉi tiun adreson por konektiĝi al via ownCloud per via dosieradministrilo"
+
+#: templates/users.php:15 templates/users.php:30
+msgid "Name"
+msgstr "Nomo"
+
+#: templates/users.php:16 templates/users.php:31
+msgid "Password"
+msgstr "Pasvorto"
+
+#: templates/users.php:17 templates/users.php:32 templates/users.php:46
+msgid "Groups"
+msgstr "Grupoj"
+
+#: templates/users.php:23
+msgid "Create"
+msgstr "Krei"
+
+#: templates/users.php:33
+msgid "Quota"
+msgstr ""
+
+#: templates/users.php:58
+msgid "Delete"
+msgstr "Forigi"
+
+
diff --git a/l10n/es/calendar.po b/l10n/es/calendar.po
index 6b98beb81a5..7e3a85379e6 100644
--- a/l10n/es/calendar.po
+++ b/l10n/es/calendar.po
@@ -3,15 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# <juanma@kde.org.ar>, 2011.
+# <juanma@kde.org.ar>, 2011, 2012.
# <sergioballesterossolanas@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/owncloud/team/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,321 +19,403 @@ msgstr ""
"Language: es\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/createcalendar.php:18 ajax/settimezone.php:19
-#: ajax/updatecalendar.php:18
-msgid "Authentication error"
-msgstr "Error de autentificación"
+#: ajax/guesstimezone.php:42
+msgid "New Timezone:"
+msgstr "Nueva zona horaria:"
-#: ajax/editeventform.php:25
-msgid "Wrong calendar"
-msgstr "Calendario incorrecto"
-
-#: ajax/settimezone.php:27
+#: ajax/settimezone.php:22
msgid "Timezone changed"
msgstr "Zona horaria cambiada"
-#: ajax/settimezone.php:29
+#: ajax/settimezone.php:24
msgid "Invalid request"
msgstr "Petición no válida"
-#: appinfo/app.php:19 templates/part.eventform.php:27
-#: templates/part.eventinfo.php:18
+#: appinfo/app.php:20 templates/calendar.php:13
+#: templates/part.eventform.php:20
msgid "Calendar"
msgstr "Calendario"
-#: lib/object.php:292
+#: lib/app.php:19
+msgid "Wrong calendar"
+msgstr "Calendario incorrecto"
+
+#: lib/app.php:60 lib/object.php:332
msgid "Birthday"
msgstr "Cumpleaños"
-#: lib/object.php:293
+#: lib/app.php:61 lib/object.php:333
msgid "Business"
msgstr "Negocios"
-#: lib/object.php:294
+#: lib/app.php:62 lib/object.php:334
msgid "Call"
-msgstr ""
+msgstr "LLamada"
-#: lib/object.php:295
+#: lib/app.php:63 lib/object.php:335
msgid "Clients"
msgstr "Clientes"
-#: lib/object.php:296
+#: lib/app.php:64 lib/object.php:336
msgid "Deliverer"
-msgstr ""
+msgstr "Entrega"
-#: lib/object.php:297
+#: lib/app.php:65 lib/object.php:337
msgid "Holidays"
msgstr "Feriados"
-#: lib/object.php:298
+#: lib/app.php:66 lib/object.php:338
msgid "Ideas"
msgstr "Ideas"
-#: lib/object.php:299
+#: lib/app.php:67 lib/object.php:339
msgid "Journey"
msgstr "Viaje"
-#: lib/object.php:300
+#: lib/app.php:68 lib/object.php:340
msgid "Jubilee"
msgstr "Aniversario"
-#: lib/object.php:301
+#: lib/app.php:69 lib/object.php:341
msgid "Meeting"
msgstr "Reunión"
-#: lib/object.php:302
+#: lib/app.php:70 lib/object.php:342
msgid "Other"
msgstr "Otro"
-#: lib/object.php:303
+#: lib/app.php:71 lib/object.php:343
msgid "Personal"
msgstr "Personal"
-#: lib/object.php:304
+#: lib/app.php:72 lib/object.php:344
msgid "Projects"
-msgstr "Projectos"
+msgstr "Proyectos"
-#: lib/object.php:305
+#: lib/app.php:73 lib/object.php:345
msgid "Questions"
msgstr "Preguntas"
-#: lib/object.php:306
+#: lib/app.php:74 lib/object.php:346
msgid "Work"
msgstr "Trabajo"
-#: lib/object.php:313
+#: lib/object.php:353
msgid "Does not repeat"
msgstr "No se repite"
-#: lib/object.php:314
+#: lib/object.php:354
msgid "Daily"
msgstr "Diariamente"
-#: lib/object.php:315
+#: lib/object.php:355
msgid "Weekly"
msgstr "Semanalmente"
-#: lib/object.php:316
+#: lib/object.php:356
msgid "Every Weekday"
-msgstr "Una vez a la semana"
+msgstr "Días de semana laboral"
-#: lib/object.php:317
+#: lib/object.php:357
msgid "Bi-Weekly"
-msgstr "Dos veces a la semana"
+msgstr "Cada 2 semanas"
-#: lib/object.php:318
+#: lib/object.php:358
msgid "Monthly"
msgstr "Mensualmente"
-#: lib/object.php:319
+#: lib/object.php:359
msgid "Yearly"
msgstr "Anualmente"
-#: lib/object.php:337
-msgid "Not an array"
-msgstr ""
+#: lib/object.php:366
+msgid "never"
+msgstr "nunca"
-#: templates/calendar.php:3
-msgid "All day"
-msgstr "Todo el día"
+#: lib/object.php:367
+msgid "by occurrences"
+msgstr "por ocurrencias"
-#: templates/calendar.php:32
-msgid "Sunday"
-msgstr "Domingo"
+#: lib/object.php:368
+msgid "by date"
+msgstr "por fecha"
-#: templates/calendar.php:32
+#: lib/object.php:375
+msgid "by monthday"
+msgstr "por día del mes"
+
+#: lib/object.php:376
+msgid "by weekday"
+msgstr "por día de la semana"
+
+#: lib/object.php:383 templates/lAfix.php:3
msgid "Monday"
msgstr "Lunes"
-#: templates/calendar.php:32
+#: lib/object.php:384 templates/lAfix.php:4
msgid "Tuesday"
msgstr "Martes"
-#: templates/calendar.php:32
+#: lib/object.php:385 templates/lAfix.php:5
msgid "Wednesday"
msgstr "Miércoles"
-#: templates/calendar.php:32
+#: lib/object.php:386 templates/lAfix.php:6
msgid "Thursday"
msgstr "Jueves"
-#: templates/calendar.php:32
+#: lib/object.php:387 templates/lAfix.php:7
msgid "Friday"
msgstr "Viernes"
-#: templates/calendar.php:32
+#: lib/object.php:388 templates/lAfix.php:8
msgid "Saturday"
msgstr "Sábado"
-#: templates/calendar.php:33
-msgid "Sun."
-msgstr "Dom."
+#: lib/object.php:389 templates/lAfix.php:2
+msgid "Sunday"
+msgstr "Domingo"
-#: templates/calendar.php:33
-msgid "Mon."
-msgstr "Lun."
+#: lib/object.php:396
+msgid "events week of month"
+msgstr "eventos de la semana del mes"
-#: templates/calendar.php:33
-msgid "Tue."
-msgstr "Mar."
+#: lib/object.php:397
+msgid "first"
+msgstr "primer"
-#: templates/calendar.php:33
-msgid "Wed."
-msgstr "Mie."
+#: lib/object.php:398
+msgid "second"
+msgstr "segundo"
-#: templates/calendar.php:33
-msgid "Thu."
-msgstr "Jue."
+#: lib/object.php:399
+msgid "third"
+msgstr "tercer"
-#: templates/calendar.php:33
-msgid "Fri."
-msgstr "Vie."
+#: lib/object.php:400
+msgid "fourth"
+msgstr "cuarto"
-#: templates/calendar.php:33
-msgid "Sat."
-msgstr "Sáb."
+#: lib/object.php:401
+msgid "fifth"
+msgstr "quinto"
-#: templates/calendar.php:34
+#: lib/object.php:402
+msgid "last"
+msgstr "último"
+
+#: lib/object.php:424 templates/lAfix.php:16
msgid "January"
msgstr "Enero"
-#: templates/calendar.php:34
+#: lib/object.php:425 templates/lAfix.php:17
msgid "February"
msgstr "Febrero"
-#: templates/calendar.php:34
+#: lib/object.php:426 templates/lAfix.php:18
msgid "March"
msgstr "Marzo"
-#: templates/calendar.php:34
+#: lib/object.php:427 templates/lAfix.php:19
msgid "April"
msgstr "Abril"
-#: templates/calendar.php:34
+#: lib/object.php:428 templates/lAfix.php:20
msgid "May"
msgstr "Mayo"
-#: templates/calendar.php:34
+#: lib/object.php:429 templates/lAfix.php:21
msgid "June"
msgstr "Junio"
-#: templates/calendar.php:34
+#: lib/object.php:430 templates/lAfix.php:22
msgid "July"
msgstr "Julio"
-#: templates/calendar.php:34
+#: lib/object.php:431 templates/lAfix.php:23
msgid "August"
msgstr "Agosto"
-#: templates/calendar.php:34
+#: lib/object.php:432 templates/lAfix.php:24
msgid "September"
msgstr "Septiembre"
-#: templates/calendar.php:34
+#: lib/object.php:433 templates/lAfix.php:25
msgid "October"
msgstr "Octubre"
-#: templates/calendar.php:34
+#: lib/object.php:434 templates/lAfix.php:26
msgid "November"
msgstr "Noviembre"
-#: templates/calendar.php:34
+#: lib/object.php:435 templates/lAfix.php:27
msgid "December"
msgstr "Diciembre"
-#: templates/calendar.php:35
+#: lib/object.php:441
+msgid "by events date"
+msgstr "por fecha de los eventos"
+
+#: lib/object.php:442
+msgid "by yearday(s)"
+msgstr "por día(s) del año"
+
+#: lib/object.php:443
+msgid "by weeknumber(s)"
+msgstr "por número(s) de semana"
+
+#: lib/object.php:444
+msgid "by day and month"
+msgstr "por día y mes"
+
+#: lib/object.php:467
+msgid "Not an array"
+msgstr "No es una serie"
+
+#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+msgid "Date"
+msgstr "Fecha"
+
+#: lib/search.php:40
+msgid "Cal."
+msgstr "Cal."
+
+#: templates/calendar.php:10
+msgid "All day"
+msgstr "Todo el día"
+
+#: templates/calendar.php:11
+msgid "Missing fields"
+msgstr "Los campos que faltan"
+
+#: templates/calendar.php:12 templates/part.eventform.php:3
+msgid "Title"
+msgstr "Título"
+
+#: templates/calendar.php:14
+msgid "From Date"
+msgstr "Desde la fecha"
+
+#: templates/calendar.php:15
+msgid "From Time"
+msgstr "Desde la hora"
+
+#: templates/calendar.php:16
+msgid "To Date"
+msgstr "Hasta la fecha"
+
+#: templates/calendar.php:17
+msgid "To Time"
+msgstr "Hasta la hora"
+
+#: templates/calendar.php:18
+msgid "The event ends before it starts"
+msgstr "El evento termina antes de que comience"
+
+#: templates/calendar.php:19
+msgid "There was a database fail"
+msgstr "Hubo un error en la base de datos"
+
+#: templates/calendar.php:52
+msgid "Week"
+msgstr "Semana"
+
+#: templates/calendar.php:53
+msgid "Month"
+msgstr "Mes"
+
+#: templates/calendar.php:54
+msgid "List"
+msgstr "Lista"
+
+#: templates/calendar.php:59
+msgid "Today"
+msgstr "Hoy"
+
+#: templates/calendar.php:60
+msgid "Calendars"
+msgstr "Calendarios"
+
+#: templates/calendar.php:78
+msgid "There was a fail, while parsing the file."
+msgstr "Hubo un fallo al analizar el archivo."
+
+#: templates/lAfix.php:9
+msgid "Sun."
+msgstr "Dom."
+
+#: templates/lAfix.php:10
+msgid "Mon."
+msgstr "Lun."
+
+#: templates/lAfix.php:11
+msgid "Tue."
+msgstr "Mar."
+
+#: templates/lAfix.php:12
+msgid "Wed."
+msgstr "Mié."
+
+#: templates/lAfix.php:13
+msgid "Thu."
+msgstr "Jue."
+
+#: templates/lAfix.php:14
+msgid "Fri."
+msgstr "Vie."
+
+#: templates/lAfix.php:15
+msgid "Sat."
+msgstr "Sáb."
+
+#: templates/lAfix.php:28
msgid "Jan."
msgstr "Ene."
-#: templates/calendar.php:35
+#: templates/lAfix.php:29
msgid "Feb."
msgstr "Feb."
-#: templates/calendar.php:35
+#: templates/lAfix.php:30
msgid "Mar."
msgstr "Mar."
-#: templates/calendar.php:35
+#: templates/lAfix.php:31
msgid "Apr."
msgstr "Abr."
-#: templates/calendar.php:35
+#: templates/lAfix.php:32
msgid "May."
-msgstr ""
+msgstr "May."
-#: templates/calendar.php:35
+#: templates/lAfix.php:33
msgid "Jun."
msgstr "Jun."
-#: templates/calendar.php:35
+#: templates/lAfix.php:34
msgid "Jul."
msgstr "Jul."
-#: templates/calendar.php:35
+#: templates/lAfix.php:35
msgid "Aug."
msgstr "Ago."
-#: templates/calendar.php:35
+#: templates/lAfix.php:36
msgid "Sep."
msgstr "Sep."
-#: templates/calendar.php:35
+#: templates/lAfix.php:37
msgid "Oct."
msgstr "Oct."
-#: templates/calendar.php:35
+#: templates/lAfix.php:38
msgid "Nov."
msgstr "Nov."
-#: templates/calendar.php:35
+#: templates/lAfix.php:39
msgid "Dec."
msgstr "Dic."
-#: templates/calendar.php:36 templates/calendar.php:50
-#: templates/calendar.php:116
-msgid "Week"
-msgstr "Semana"
-
-#: templates/calendar.php:37 templates/calendar.php:51
-msgid "Weeks"
-msgstr "Semanas"
-
-#: templates/calendar.php:38
-msgid "More before {startdate}"
-msgstr ""
-
-#: templates/calendar.php:39
-msgid "More after {enddate}"
-msgstr ""
-
-#: templates/calendar.php:49
-msgid "Day"
-msgstr "Día"
-
-#: templates/calendar.php:52
-msgid "Month"
-msgstr "Mes"
-
-#: templates/calendar.php:53
-msgid "List"
-msgstr "Lista"
-
-#: templates/calendar.php:58
-msgid "Today"
-msgstr "Hoy"
-
-#: templates/calendar.php:59
-msgid "Calendars"
-msgstr "Calendarios"
-
-#: templates/calendar.php:76 templates/calendar.php:94
-msgid "Time"
-msgstr "Hora"
-
-#: templates/calendar.php:169
-msgid "There was a fail, while parsing the file."
-msgstr "Hubo un fallo al analizar el archivo."
-
#: templates/part.choosecalendar.php:1
msgid "Choose active calendars"
msgstr "Elige los calendarios activos"
@@ -345,21 +427,20 @@ msgstr "Nuevo calendario"
#: templates/part.choosecalendar.php:20
#: templates/part.choosecalendar.rowfields.php:4
msgid "CalDav Link"
-msgstr ""
+msgstr "Enlace a CalDav"
#: templates/part.choosecalendar.rowfields.php:4
msgid "Download"
msgstr "Descargar"
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.eventinfo.php:64
msgid "Edit"
msgstr "Editar"
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.editevent.php:8
+#: templates/part.editevent.php:9
msgid "Delete"
-msgstr ""
+msgstr "Eliminar"
#: templates/part.editcalendar.php:9
msgid "New calendar"
@@ -377,90 +458,181 @@ msgstr "Nombre"
msgid "Active"
msgstr "Activo"
-#: templates/part.editcalendar.php:29 templates/part.eventform.php:88
-#: templates/part.eventinfo.php:58
-msgid "Description"
-msgstr "Descripción"
-
-#: templates/part.editcalendar.php:35
+#: templates/part.editcalendar.php:29
msgid "Calendar color"
msgstr "Color del calendario"
-#: templates/part.editcalendar.php:41
+#: templates/part.editcalendar.php:42
msgid "Save"
msgstr "Guardar"
-#: templates/part.editcalendar.php:41 templates/part.editevent.php:7
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
#: templates/part.newevent.php:6
msgid "Submit"
msgstr "Guardar"
-#: templates/part.editcalendar.php:42
+#: templates/part.editcalendar.php:43
msgid "Cancel"
msgstr "Cancelar"
-#: templates/part.editevent.php:1 templates/part.eventinfo.php:1
+#: templates/part.editevent.php:1
msgid "Edit an event"
msgstr "Editar un evento"
-#: templates/part.eventform.php:3 templates/part.eventinfo.php:4
-msgid "Title"
-msgstr "Título"
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr "Exportar"
#: templates/part.eventform.php:5
msgid "Title of the Event"
msgstr "Título del evento"
-#: templates/part.eventform.php:9 templates/part.eventinfo.php:9
-msgid "Location"
-msgstr "Lugar"
-
#: templates/part.eventform.php:11
-msgid "Location of the Event"
-msgstr "Lugar del Evento"
-
-#: templates/part.eventform.php:17 templates/part.eventinfo.php:16
msgid "Category"
msgstr "Categoría"
-#: templates/part.eventform.php:19
+#: templates/part.eventform.php:13
msgid "Select category"
msgstr "Seleccionar categoría"
-#: templates/part.eventform.php:45 templates/part.eventinfo.php:28
+#: templates/part.eventform.php:37
msgid "All Day Event"
msgstr "Todo el día"
-#: templates/part.eventform.php:49 templates/part.eventinfo.php:31
+#: templates/part.eventform.php:41
msgid "From"
msgstr "Desde"
-#: templates/part.eventform.php:57 templates/part.eventinfo.php:38
+#: templates/part.eventform.php:49
msgid "To"
msgstr "Hasta"
-#: templates/part.eventform.php:65 templates/part.eventinfo.php:44
+#: templates/part.eventform.php:57
+msgid "Advanced options"
+msgstr "Opciones avanzadas"
+
+#: templates/part.eventform.php:61
msgid "Repeat"
msgstr "Repetir"
-#: templates/part.eventform.php:81 templates/part.eventinfo.php:51
-msgid "Attendees"
-msgstr "Asistentes"
+#: templates/part.eventform.php:68
+msgid "Advanced"
+msgstr "Avanzado"
+
+#: templates/part.eventform.php:112
+msgid "Select weekdays"
+msgstr "Seleccionar días de la semana"
+
+#: templates/part.eventform.php:125 templates/part.eventform.php:138
+msgid "Select days"
+msgstr "Seleccionar días"
+
+#: templates/part.eventform.php:130
+msgid "and the events day of year."
+msgstr "y el día del año de los eventos."
+
+#: templates/part.eventform.php:143
+msgid "and the events day of month."
+msgstr "y el día del mes de los eventos."
+
+#: templates/part.eventform.php:151
+msgid "Select months"
+msgstr "Seleccionar meses"
+
+#: templates/part.eventform.php:164
+msgid "Select weeks"
+msgstr "Seleccionar semanas"
+
+#: templates/part.eventform.php:169
+msgid "and the events week of year."
+msgstr "y la semana del año de los eventos."
+
+#: templates/part.eventform.php:175
+msgid "Interval"
+msgstr "Intervalo"
+
+#: templates/part.eventform.php:181
+msgid "End"
+msgstr "Fin"
+
+#: templates/part.eventform.php:193
+msgid "occurrences"
+msgstr "ocurrencias"
+
+#: templates/part.eventform.php:208
+msgid "Location"
+msgstr "Lugar"
+
+#: templates/part.eventform.php:210
+msgid "Location of the Event"
+msgstr "Lugar del Evento"
+
+#: templates/part.eventform.php:216
+msgid "Description"
+msgstr "Descripción"
-#: templates/part.eventform.php:89
+#: templates/part.eventform.php:218
msgid "Description of the Event"
msgstr "Descripción del evento"
-#: templates/part.eventinfo.php:63
-msgid "Close"
-msgstr "Cerrar"
+#: templates/part.import.php:1
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the calendar"
+msgstr "Elija el calendario"
+
+#: templates/part.import.php:10
+msgid "create a new calendar"
+msgstr ""
+
+#: templates/part.import.php:15
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import"
+msgstr "Importar"
+
+#: templates/part.import.php:20
+msgid "Importing calendar"
+msgstr ""
+
+#: templates/part.import.php:23
+msgid "Calendar imported successfully"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Close Dialog"
+msgstr ""
#: templates/part.newevent.php:1
msgid "Create a new event"
msgstr "Crear un nuevo evento"
-#: templates/settings.php:11
+#: templates/settings.php:13
msgid "Timezone"
msgstr "Zona horaria"
+#: templates/settings.php:30
+msgid "Check always for changes of the timezone"
+msgstr "Comprobar siempre por cambios en la zona horaria"
+
+#: templates/settings.php:32
+msgid "Timeformat"
+msgstr "Formato de hora"
+
+#: templates/settings.php:34
+msgid "24h"
+msgstr "24h"
+
+#: templates/settings.php:35
+msgid "12h"
+msgstr "12h"
+
+#: templates/settings.php:41
+msgid "Calendar CalDAV syncing address:"
+msgstr "Dirección de sincronización de calendario CalDAV:"
+
diff --git a/l10n/es/contacts.po b/l10n/es/contacts.po
index 08f4ae29109..df296d498f3 100644
--- a/l10n/es/contacts.po
+++ b/l10n/es/contacts.po
@@ -3,13 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <juanma@kde.org.ar>, 2011.
+# <sergioballesterossolanas@gmail.com>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 20:10+0200\n"
-"PO-Revision-Date: 2011-09-23 18:11+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/owncloud/team/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,164 +19,275 @@ msgstr ""
"Language: es\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/addcard.php:31 ajax/addproperty.php:31 ajax/deletebook.php:32
-#: ajax/deletecard.php:32 ajax/deleteproperty.php:34 ajax/getdetails.php:32
-#: ajax/setproperty.php:32 ajax/showaddcard.php:30 ajax/showaddproperty.php:31
-#: ajax/showsetproperty.php:32 photo.php:32
-msgid "You need to log in."
+#: ajax/activation.php:17 ajax/updateaddressbook.php:26
+msgid "Error (de)activating addressbook."
msgstr ""
-#: ajax/addcard.php:37
-msgid "This is not your addressbook."
+#: ajax/addcard.php:79
+msgid "There was an error adding the contact."
msgstr ""
-#: ajax/addproperty.php:37 ajax/deletecard.php:39 ajax/deleteproperty.php:41
-#: ajax/getdetails.php:39 ajax/setproperty.php:38 ajax/showaddproperty.php:37
-#: ajax/showsetproperty.php:38 photo.php:39
-msgid "Contact could not be found."
+#: ajax/addproperty.php:39
+msgid "Cannot add empty property."
msgstr ""
-#: ajax/addproperty.php:43 ajax/deletebook.php:38 ajax/deletecard.php:45
-#: ajax/deleteproperty.php:47 ajax/getdetails.php:45 ajax/setproperty.php:44
-#: ajax/showaddproperty.php:43 ajax/showsetproperty.php:44 photo.php:45
-msgid "This is not your contact."
+#: ajax/addproperty.php:51
+msgid "At least one of the address fields has to be filled out."
msgstr ""
-#: ajax/addproperty.php:50 ajax/deleteproperty.php:54 ajax/getdetails.php:52
-#: ajax/setproperty.php:51 ajax/showsetproperty.php:51
-msgid "vCard could not be read."
+#: ajax/addproperty.php:77
+msgid "Error adding contact property."
msgstr ""
-#: ajax/deleteproperty.php:65 ajax/setproperty.php:62
-#: ajax/showsetproperty.php:62
-msgid "Information about vCard is incorrect. Please reload the page."
+#: ajax/createaddressbook.php:20
+msgid "Error adding addressbook."
msgstr ""
-#: photo.php:53
-msgid "This card is not RFC compatible."
+#: ajax/createaddressbook.php:26
+msgid "Error activating addressbook."
msgstr ""
-#: photo.php:90
-msgid "This card does not contain a photo."
+#: ajax/deleteproperty.php:40
+msgid "Error deleting contact property."
msgstr ""
-#: templates/index.php:8
-msgid "Add Contact"
+#: ajax/setproperty.php:79
+msgid "Error updating contact property."
msgstr ""
-#: templates/part.addcardform.php:5
-msgid "Group"
+#: ajax/updateaddressbook.php:20
+msgid "Error updating addressbook."
msgstr ""
-#: templates/part.addcardform.php:12 templates/part.property.php:3
-msgid "Name"
+#: appinfo/app.php:21 templates/settings.php:3
+msgid "Contacts"
msgstr ""
-#: templates/part.addcardform.php:14
-msgid "Create Contact"
+#: lib/app.php:42
+msgid "This is not your addressbook."
+msgstr "Esta no es tu agenda de contactos."
+
+#: lib/app.php:51 photo.php:34
+msgid "Contact could not be found."
+msgstr "No se pudo encontrar el contacto."
+
+#: lib/app.php:79
+msgid "Information about vCard is incorrect. Please reload the page."
msgstr ""
+"La información sobre el vCard es incorrecta. Por favor vuelve a cargar la "
+"página."
-#: templates/part.addpropertyform.php:4 templates/part.property.php:40
+#: lib/app.php:91 templates/part.addcardform.php:54
+#: templates/part.property.php:45 templates/part.setpropertyform.php:7
msgid "Address"
-msgstr ""
+msgstr "Dirección"
-#: templates/part.addpropertyform.php:5
+#: lib/app.php:92 templates/part.addcardform.php:43
msgid "Telephone"
-msgstr ""
+msgstr "Teléfono"
-#: templates/part.addpropertyform.php:6 templates/part.property.php:22
+#: lib/app.php:93 templates/part.addcardform.php:37
+#: templates/part.property.php:16 templates/part.setpropertyform.php:51
msgid "Email"
-msgstr ""
+msgstr "Correo electrónico"
-#: templates/part.addpropertyform.php:7 templates/part.property.php:15
+#: lib/app.php:94 templates/part.addcardform.php:27
+#: templates/part.property.php:9 templates/part.setpropertyform.php:54
msgid "Organization"
-msgstr ""
+msgstr "Organización"
-#: templates/part.addpropertyform.php:17 templates/part.addpropertyform.php:32
+#: lib/app.php:106 lib/app.php:113
msgid "Work"
-msgstr ""
+msgstr "Trabajo"
-#: templates/part.addpropertyform.php:18 templates/part.addpropertyform.php:30
+#: lib/app.php:107 lib/app.php:111
msgid "Home"
+msgstr "Particular"
+
+#: lib/app.php:112
+msgid "Mobile"
+msgstr "Móvil"
+
+#: lib/app.php:114
+msgid "Text"
+msgstr "Texto"
+
+#: lib/app.php:115
+msgid "Voice"
+msgstr "Voz"
+
+#: lib/app.php:116
+msgid "Fax"
+msgstr "Fax"
+
+#: lib/app.php:117
+msgid "Video"
+msgstr "Video"
+
+#: lib/app.php:118
+msgid "Pager"
+msgstr "Localizador"
+
+#: lib/search.php:22
+msgid "Contact"
msgstr ""
-#: templates/part.addpropertyform.php:20 templates/part.property.php:48
-#: templates/part.setpropertyform.php:5
-msgid "PO Box"
+#: photo.php:40
+msgid "This is not your contact."
+msgstr "Este no es tu contacto."
+
+#: photo.php:48
+msgid "This card is not RFC compatible."
+msgstr "Esta tarjeta no es compatible con RFC."
+
+#: photo.php:85
+msgid "This card does not contain a photo."
+msgstr "Esta tarjeta no contiene ninguna foto."
+
+#: templates/index.php:6
+msgid "Add Contact"
+msgstr "Agregar contacto"
+
+#: templates/index.php:7
+msgid "Addressbooks"
msgstr ""
-#: templates/part.addpropertyform.php:21 templates/part.property.php:51
-#: templates/part.setpropertyform.php:6
-msgid "Extended"
+#: templates/part.addcardform.php:8
+msgid "Addressbook"
msgstr ""
-#: templates/part.addpropertyform.php:22 templates/part.property.php:54
-#: templates/part.setpropertyform.php:7
+#: templates/part.addcardform.php:21
+msgid "Name"
+msgstr "Nombre"
+
+#: templates/part.addcardform.php:57 templates/part.details.php:43
+#: templates/part.details.php:79 templates/part.setpropertyform.php:10
+#: templates/part.setpropertyform.php:47
+msgid "Type"
+msgstr "Tipo"
+
+#: templates/part.addcardform.php:65 templates/part.details.php:49
+#: templates/part.setpropertyform.php:16
+msgid "PO Box"
+msgstr "Código postal"
+
+#: templates/part.addcardform.php:72 templates/part.details.php:53
+#: templates/part.setpropertyform.php:20
+msgid "Extended"
+msgstr "Extendido"
+
+#: templates/part.addcardform.php:78 templates/part.details.php:57
+#: templates/part.setpropertyform.php:24
msgid "Street"
-msgstr ""
+msgstr "Calle"
-#: templates/part.addpropertyform.php:23 templates/part.property.php:57
-#: templates/part.setpropertyform.php:8
+#: templates/part.addcardform.php:84 templates/part.details.php:61
+#: templates/part.setpropertyform.php:28
msgid "City"
-msgstr ""
+msgstr "Ciudad"
-#: templates/part.addpropertyform.php:24 templates/part.property.php:60
-#: templates/part.setpropertyform.php:9
+#: templates/part.addcardform.php:90 templates/part.details.php:65
+#: templates/part.setpropertyform.php:32
msgid "Region"
-msgstr ""
+msgstr "Región"
-#: templates/part.addpropertyform.php:25 templates/part.property.php:63
-#: templates/part.setpropertyform.php:10
+#: templates/part.addcardform.php:96 templates/part.details.php:69
+#: templates/part.setpropertyform.php:36
msgid "Zipcode"
-msgstr ""
+msgstr "Código Postal"
-#: templates/part.addpropertyform.php:26 templates/part.property.php:66
-#: templates/part.setpropertyform.php:11
+#: templates/part.addcardform.php:102 templates/part.details.php:73
+#: templates/part.setpropertyform.php:40
msgid "Country"
-msgstr ""
+msgstr "País"
-#: templates/part.addpropertyform.php:31
-msgid "Mobile"
-msgstr ""
+#: templates/part.addcardform.php:109
+msgid "Create Contact"
+msgstr "Crear contacto"
-#: templates/part.addpropertyform.php:33
-msgid "Text"
+#: templates/part.chooseaddressbook.php:1
+msgid "Choose active Address Books"
msgstr ""
-#: templates/part.addpropertyform.php:34
-msgid "Voice"
-msgstr ""
+#: templates/part.chooseaddressbook.php:16
+msgid "New Address Book"
+msgstr "Nueva libreta de direcciones"
-#: templates/part.addpropertyform.php:35
-msgid "Fax"
-msgstr ""
+#: templates/part.chooseaddressbook.php:21
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "CardDav Link"
+msgstr "Link Card Dav"
-#: templates/part.addpropertyform.php:36
-msgid "Video"
-msgstr ""
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Download"
+msgstr "Descargar"
-#: templates/part.addpropertyform.php:37
-msgid "Pager"
-msgstr ""
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Edit"
+msgstr "Editar"
-#: templates/part.details.php:33
+#: templates/part.chooseaddressbook.rowfields.php:5
msgid "Delete"
+msgstr "Borrar"
+
+#: templates/part.details.php:3
+msgid "Download contact"
msgstr ""
+#: templates/part.details.php:4
+msgid "Delete contact"
+msgstr "Eliminar contacto"
+
#: templates/part.details.php:34
-msgid "Add Property"
+msgid "Add"
+msgstr "Añadir"
+
+#: templates/part.editaddressbook.php:9
+msgid "New Addressbook"
msgstr ""
-#: templates/part.property.php:9
-msgid "Birthday"
+#: templates/part.editaddressbook.php:9
+msgid "Edit Addressbook"
msgstr ""
-#: templates/part.property.php:29
-msgid "Phone"
+#: templates/part.editaddressbook.php:12
+msgid "Displayname"
msgstr ""
-#: templates/part.setpropertyform.php:17
-msgid "Edit"
+#: templates/part.editaddressbook.php:23
+msgid "Active"
+msgstr "Activo"
+
+#: templates/part.editaddressbook.php:29
+msgid "Save"
+msgstr "Guardar"
+
+#: templates/part.editaddressbook.php:29
+msgid "Submit"
+msgstr "Aceptar"
+
+#: templates/part.editaddressbook.php:30
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: templates/part.property.php:3
+msgid "Birthday"
+msgstr "Cumpleaños"
+
+#: templates/part.property.php:23
+msgid "Preferred"
+msgstr "Preferido"
+
+#: templates/part.property.php:23 templates/part.setpropertyform.php:45
+msgid "Phone"
+msgstr "Teléfono"
+
+#: templates/part.setpropertyform.php:57
+msgid "Update"
+msgstr "Actualizar"
+
+#: templates/settings.php:4
+msgid "CardDAV syncing address:"
msgstr ""
diff --git a/l10n/es/core.po b/l10n/es/core.po
index 2fe3fcaa783..fac043ed1e2 100644
--- a/l10n/es/core.po
+++ b/l10n/es/core.po
@@ -3,15 +3,16 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <juanma@kde.org.ar>, 2011, 2012.
# <rom1dep@gmail.com>, 2011.
-# <sergioballesterossolanas@gmail.com>, 2011.
+# <sergioballesterossolanas@gmail.com>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 18:17+0200\n"
-"PO-Revision-Date: 2011-09-04 17:01+0000\n"
-"Last-Translator: xsergiolpx <sergioballesterossolanas@gmail.com>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-11 19:08+0000\n"
+"Last-Translator: juanman <juanma@kde.org.ar>\n"
"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/owncloud/team/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,6 +20,52 @@ msgstr ""
"Language: es\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+#: lostpassword/index.php:24
+msgid "Owncloud password reset"
+msgstr "Restablecer contraseña de ownCloud"
+
+#: lostpassword/templates/email.php:1
+msgid "Use the following link to reset your password: {link}"
+msgstr "Utiliza el siguiente enlace para restablecer tu contraseña: {link}"
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr ""
+"Recibirás un enlace por correo electrónico para restablecer tu contraseña"
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Requested"
+msgstr "Pedido"
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr "¡Fallo al iniciar sesión!"
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:22
+#: templates/login.php:8
+msgid "Username"
+msgstr "Nombre de usuario"
+
+#: lostpassword/templates/lostpassword.php:14
+msgid "Request reset"
+msgstr "Solicitar restablecimiento"
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr "Tu contraseña se ha restablecido"
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr "A la página de inicio de sesión"
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr "Nueva contraseña"
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr "Restablecer contraseña"
+
#: strings.php:5
msgid "Personal"
msgstr "Personal"
@@ -47,54 +94,50 @@ msgstr "No se encontró la nube"
msgid "Create an <strong>admin account</strong>"
msgstr "Crea una <strong>cuenta de administrador</strong>"
-#: templates/installation.php:21
-msgid "Username"
-msgstr "Nombre de usuario"
-
-#: templates/installation.php:22
+#: templates/installation.php:26 templates/login.php:12
msgid "Password"
msgstr "Contraseña"
-#: templates/installation.php:27
+#: templates/installation.php:32
+msgid "Advanced"
+msgstr "Avanzado"
+
+#: templates/installation.php:34
+msgid "Data folder"
+msgstr "Directorio de almacenamiento"
+
+#: templates/installation.php:41
msgid "Configure the database"
msgstr "Configurar la base de datos"
-#: templates/installation.php:32 templates/installation.php:43
-#: templates/installation.php:53
+#: templates/installation.php:46 templates/installation.php:57
+#: templates/installation.php:67
msgid "will be used"
msgstr "serán utilizados"
-#: templates/installation.php:64
+#: templates/installation.php:79
msgid "Database user"
msgstr "Usuario de la base de datos"
-#: templates/installation.php:65
+#: templates/installation.php:83
msgid "Database password"
msgstr "Contraseña de la base de datos"
-#: templates/installation.php:66
+#: templates/installation.php:87
msgid "Database name"
msgstr "Nombre de la base de datos"
-#: templates/installation.php:72
-msgid "Advanced"
-msgstr "Avanzado"
-
-#: templates/installation.php:75
+#: templates/installation.php:93
msgid "Database host"
msgstr "Host de la base de datos"
-#: templates/installation.php:76
-msgid "Data folder"
-msgstr "Directorio de almacenamiento"
-
-#: templates/installation.php:79
+#: templates/installation.php:98
msgid "Finish setup"
msgstr "Completar la instalación"
#: templates/layout.guest.php:35
-msgid "gives you freedom and control over your own data"
-msgstr "te da la libertad y el control sobre tus propios datos"
+msgid "web services under your control"
+msgstr "servicios web bajo tu control"
#: templates/layout.user.php:34
msgid "Log out"
@@ -104,38 +147,22 @@ msgstr "Salir"
msgid "Settings"
msgstr "Ajustes"
-#: templates/login.php:4
+#: templates/login.php:5
msgid "Lost your password?"
msgstr "¿Has perdido tu contraseña?"
-#: templates/login.php:9 templates/login.php:13
+#: templates/login.php:15
msgid "remember"
msgstr "recuérdame"
+#: templates/login.php:16
+msgid "Log in"
+msgstr "Entrar"
+
#: templates/logout.php:1
msgid "You are logged out."
msgstr "Has cerrado sesión."
-#: templates/lostpassword.php:3
-msgid "You will receive a link to reset your password via Email."
-msgstr "Recibirás un link para restablecer tu contraseña vía Email."
-
-#: templates/lostpassword.php:5
-msgid "Requested"
-msgstr "Solicitado"
-
-#: templates/lostpassword.php:8
-msgid "Login failed!"
-msgstr "¡No se pudo iniciar sesión!"
-
-#: templates/lostpassword.php:10
-msgid "Username or Email"
-msgstr "Nombre de usuario o Email"
-
-#: templates/lostpassword.php:11
-msgid "Request reset"
-msgstr "Solicitar restablecimiento"
-
#: templates/part.pagenavi.php:3
msgid "prev"
msgstr "anterior"
@@ -144,16 +171,4 @@ msgstr "anterior"
msgid "next"
msgstr "siguiente"
-#: templates/resetpassword.php:4
-msgid "Your password was reset"
-msgstr "Tu contraseña se ha restablecido"
-
-#: templates/resetpassword.php:6
-msgid "New password"
-msgstr "Nueva contraseña"
-
-#: templates/resetpassword.php:7
-msgid "Reset password"
-msgstr "Restablecer contraseña"
-
diff --git a/l10n/es/files.po b/l10n/es/files.po
index 2c2bed5cdc4..f58a6b308f5 100644
--- a/l10n/es/files.po
+++ b/l10n/es/files.po
@@ -3,14 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# <sergioballesterossolanas@gmail.com>, 2011.
+# <sergioballesterossolanas@gmail.com>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-11 18:52+0000\n"
+"Last-Translator: xsergiolpx <sergioballesterossolanas@gmail.com>\n"
"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/owncloud/team/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,33 +18,37 @@ msgstr ""
"Language: es\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/upload.php:24
+#: ajax/upload.php:19
msgid "There is no error, the file uploaded with success"
-msgstr ""
+msgstr "No hubo ningún error, el archivo se subió con éxito"
-#: ajax/upload.php:25
+#: ajax/upload.php:20
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr ""
+"El archivo que intentas subir sobrepasa el tamaño definido por la variable "
+"upload_max_filesize en php.ini"
-#: ajax/upload.php:26
+#: ajax/upload.php:21
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
+"El archivo que intentas subir sobrepasa el tamaño definido por la variable "
+"MAX_FILE_SIZE especificada en el formulario HTML"
-#: ajax/upload.php:27
+#: ajax/upload.php:22
msgid "The uploaded file was only partially uploaded"
-msgstr ""
+msgstr "El archivo que intentas subir solo se subió parcialmente"
-#: ajax/upload.php:28
+#: ajax/upload.php:23
msgid "No file was uploaded"
-msgstr ""
+msgstr "No se subió ningún archivo"
-#: ajax/upload.php:29
+#: ajax/upload.php:24
msgid "Missing a temporary folder"
-msgstr ""
+msgstr "Falta un directorio temporal"
-#: appinfo/app.php:7
+#: appinfo/app.php:8
msgid "Files"
msgstr "Archivos"
@@ -52,43 +56,55 @@ msgstr "Archivos"
msgid "Maximum upload size"
msgstr "Tamaño máximo de subida"
+#: templates/index.php:7
+msgid "New"
+msgstr "Nuevo"
+
#: templates/index.php:10
+msgid "Text file"
+msgstr "Archivo de texto"
+
+#: templates/index.php:11
+msgid "Folder"
+msgstr "Carpeta"
+
+#: templates/index.php:12
+msgid "From the web"
+msgstr "Desde la web"
+
+#: templates/index.php:22
msgid "Upload"
msgstr "Subir"
-#: templates/index.php:17
-msgid "New Folder"
-msgstr "Crear Carpeta"
-
-#: templates/index.php:31
+#: templates/index.php:35
msgid "Nothing in here. Upload something!"
msgstr "Aquí no hay nada. ¡Sube algo!"
-#: templates/index.php:39
+#: templates/index.php:43
msgid "Name"
msgstr "Nombre"
-#: templates/index.php:41
+#: templates/index.php:45
msgid "Download"
msgstr "Descargar"
-#: templates/index.php:45
+#: templates/index.php:49
msgid "Size"
msgstr "Tamaño"
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Modified"
msgstr "Modificado"
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Delete"
msgstr "Eliminado"
-#: templates/index.php:54
+#: templates/index.php:58
msgid "Upload too large"
msgstr "El archivo es demasiado grande"
-#: templates/index.php:56
+#: templates/index.php:60
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
diff --git a/l10n/es/gallery.po b/l10n/es/gallery.po
new file mode 100644
index 00000000000..848b07026f8
--- /dev/null
+++ b/l10n/es/gallery.po
@@ -0,0 +1,32 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:48+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/owncloud/team/es/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: es\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:41
+msgid "Gallery"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Rescan"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+
diff --git a/l10n/es/media.po b/l10n/es/media.po
index 3a159198a26..e03322be6ae 100644
--- a/l10n/es/media.po
+++ b/l10n/es/media.po
@@ -2,14 +2,15 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
+# Translators:
# <sergioballesterossolanas@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
-"Report-Msgid-Bugs-To: http://bugs.kde.org/buglist.cgi?product=owncloud\n"
-"POT-Creation-Date: 2011-08-23 11:09+0200\n"
-"PO-Revision-Date: 2011-08-21 22:27+0000\n"
-"Last-Translator: xsergiolpx <sergioballesterossolanas@gmail.com>\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/owncloud/team/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,15 +18,15 @@ msgstr ""
"Language: es\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: appinfo/app.php:31
+#: appinfo/app.php:32
msgid "Music"
msgstr "Música"
-#: templates/music.php:3
+#: templates/music.php:3 templates/player.php:13
msgid "Play"
msgstr "Reproducir"
-#: templates/music.php:4 templates/music.php:30
+#: templates/music.php:4 templates/music.php:26 templates/player.php:14
msgid "Pause"
msgstr "Pausa"
@@ -33,7 +34,7 @@ msgstr "Pausa"
msgid "Previous"
msgstr "Anterior"
-#: templates/music.php:6
+#: templates/music.php:6 templates/player.php:15
msgid "Next"
msgstr "Siguiente"
@@ -45,11 +46,7 @@ msgstr "Silenciar"
msgid "Unmute"
msgstr "Sonar"
-#: templates/music.php:28
-msgid "Songs scanned"
-msgstr "Canciones encontradas"
-
-#: templates/music.php:29
+#: templates/music.php:25
msgid "Rescan Collection"
msgstr "Buscar música nueva"
diff --git a/l10n/es/settings.po b/l10n/es/settings.po
index 27e14d97249..9114f621f8c 100644
--- a/l10n/es/settings.po
+++ b/l10n/es/settings.po
@@ -2,14 +2,17 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
-# <sergioballesterossolanas@gmail.com>, 2011.
+# Translators:
+# <juanma@kde.org.ar>, 2011.
+# <monty_2731@hotmail.com>, 2011.
# <rom1dep@gmail.com>, 2011.
+# <sergioballesterossolanas@gmail.com>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
-"Report-Msgid-Bugs-To: http://bugs.kde.org/buglist.cgi?product=owncloud\n"
-"POT-Creation-Date: 2011-08-28 01:11+0200\n"
-"PO-Revision-Date: 2011-08-24 23:20+0000\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-11 19:01+0000\n"
"Last-Translator: xsergiolpx <sergioballesterossolanas@gmail.com>\n"
"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/owncloud/team/es/)\n"
"MIME-Version: 1.0\n"
@@ -18,22 +21,26 @@ msgstr ""
"Language: es\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/openid.php:13 ajax/setlanguage.php:13
-msgid "Authentication error"
-msgstr "Error de autentificación"
+#: ajax/lostpassword.php:14
+msgid "email Changed"
+msgstr "Email actualizado"
-#: ajax/openid.php:21
-msgid "OpenID Changed"
-msgstr "OpenID Cambiado"
-
-#: ajax/openid.php:23 ajax/setlanguage.php:23
+#: ajax/lostpassword.php:16 ajax/openid.php:17 ajax/setlanguage.php:16
msgid "Invalid request"
msgstr "Solicitud no válida"
-#: ajax/setlanguage.php:21
+#: ajax/openid.php:15
+msgid "OpenID Changed"
+msgstr "OpenID Cambiado"
+
+#: ajax/setlanguage.php:14
msgid "Language changed"
msgstr "Idioma cambiado"
+#: templates/admin.php:13
+msgid "Log level"
+msgstr "Nivel de log"
+
#: templates/apps.php:8
msgid "Add your application"
msgstr "Añadir tu aplicación"
@@ -54,15 +61,15 @@ msgstr "por"
msgid "Ask a question"
msgstr "Hacer una pregunta"
-#: templates/help.php:17
+#: templates/help.php:20
msgid "Problems connecting to help database."
msgstr "Problemas al conectar con la base de datos de ayuda."
-#: templates/help.php:18
+#: templates/help.php:21
msgid "Go there manually."
msgstr "Ir manualmente"
-#: templates/help.php:26
+#: templates/help.php:29
msgid "Answer"
msgstr "Respuesta"
@@ -78,6 +85,10 @@ msgstr "del total disponible de"
msgid "Your password got changed"
msgstr "Tu contraseña ha sido cambiada"
+#: templates/personal.php:14
+msgid "Unable to change your password"
+msgstr "No se pudo cambiar su contraseña"
+
#: templates/personal.php:15
msgid "Current password"
msgstr "Contraseña actual"
@@ -95,35 +106,52 @@ msgid "Change password"
msgstr "Cambiar contraseña"
#: templates/personal.php:24
+msgid "Email"
+msgstr "Email"
+
+#: templates/personal.php:25
+msgid "Your email address"
+msgstr "Tu dirección de email"
+
+#: templates/personal.php:26
+msgid "Fill in an email address to enable password recovery"
+msgstr "Escribe una dirección de email para restablecer la contraseña"
+
+#: templates/personal.php:32 templates/personal.php:33
msgid "Language"
msgstr "Idioma"
-#: templates/personal.php:30
-msgid "Help translating"
-msgstr "Ayuda a traducir"
+#: templates/personal.php:38
+msgid "Help translate"
+msgstr "Ayudar a traducir"
-#: templates/personal.php:36
+#: templates/personal.php:45
msgid "use this address to connect to your ownCloud in your file manager"
msgstr ""
-"usar esta dirección para conectar tu ownCloud en tu explorador de archivos"
+"utiliza esta dirección para conectar a tu ownCloud desde tu explorador de "
+"archivos"
-#: templates/users.php:16
+#: templates/users.php:15 templates/users.php:30
msgid "Name"
msgstr "Nombre"
-#: templates/users.php:17
+#: templates/users.php:16 templates/users.php:31
msgid "Password"
msgstr "Contraseña"
-#: templates/users.php:18 templates/users.php:36
+#: templates/users.php:17 templates/users.php:32 templates/users.php:46
msgid "Groups"
msgstr "Grupos"
-#: templates/users.php:24
+#: templates/users.php:23
msgid "Create"
msgstr "Crear"
-#: templates/users.php:48
+#: templates/users.php:33
+msgid "Quota"
+msgstr "Cuota"
+
+#: templates/users.php:58
msgid "Delete"
msgstr "Eliminar"
diff --git a/l10n/et_EE/calendar.po b/l10n/et_EE/calendar.po
index 8f1f95b962a..cc00b225d3e 100644
--- a/l10n/et_EE/calendar.po
+++ b/l10n/et_EE/calendar.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Estonian (Estonia) (http://www.transifex.net/projects/p/owncloud/team/et_EE/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,351 +18,432 @@ msgstr ""
"Language: et_EE\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/createcalendar.php:18 ajax/settimezone.php:19
-#: ajax/updatecalendar.php:18
-msgid "Authentication error"
-msgstr "Autentimise viga"
-
-#: ajax/editeventform.php:25
-msgid "Wrong calendar"
+#: ajax/guesstimezone.php:42
+msgid "New Timezone:"
msgstr ""
-#: ajax/settimezone.php:27
+#: ajax/settimezone.php:22
msgid "Timezone changed"
msgstr "Ajavöönd on muudetud"
-#: ajax/settimezone.php:29
+#: ajax/settimezone.php:24
msgid "Invalid request"
msgstr "Vigane päring"
-#: appinfo/app.php:19 templates/part.eventform.php:27
-#: templates/part.eventinfo.php:18
+#: appinfo/app.php:20 templates/calendar.php:13
+#: templates/part.eventform.php:20
msgid "Calendar"
msgstr "Kalender"
-#: lib/object.php:292
+#: lib/app.php:19
+msgid "Wrong calendar"
+msgstr "Vale kalender"
+
+#: lib/app.php:60 lib/object.php:332
msgid "Birthday"
-msgstr ""
+msgstr "Sünnipäev"
-#: lib/object.php:293
+#: lib/app.php:61 lib/object.php:333
msgid "Business"
-msgstr ""
+msgstr "Äri"
-#: lib/object.php:294
+#: lib/app.php:62 lib/object.php:334
msgid "Call"
-msgstr ""
+msgstr "Helista"
-#: lib/object.php:295
+#: lib/app.php:63 lib/object.php:335
msgid "Clients"
-msgstr ""
+msgstr "Kliendid"
-#: lib/object.php:296
+#: lib/app.php:64 lib/object.php:336
msgid "Deliverer"
-msgstr ""
+msgstr "Kohaletoimetaja"
-#: lib/object.php:297
+#: lib/app.php:65 lib/object.php:337
msgid "Holidays"
-msgstr ""
+msgstr "Pühad"
-#: lib/object.php:298
+#: lib/app.php:66 lib/object.php:338
msgid "Ideas"
-msgstr ""
+msgstr "Ideed"
-#: lib/object.php:299
+#: lib/app.php:67 lib/object.php:339
msgid "Journey"
-msgstr ""
+msgstr "Reis"
-#: lib/object.php:300
+#: lib/app.php:68 lib/object.php:340
msgid "Jubilee"
-msgstr ""
+msgstr "Juubel"
-#: lib/object.php:301
+#: lib/app.php:69 lib/object.php:341
msgid "Meeting"
-msgstr ""
+msgstr "Kohtumine"
-#: lib/object.php:302
+#: lib/app.php:70 lib/object.php:342
msgid "Other"
-msgstr ""
+msgstr "Muu"
-#: lib/object.php:303
+#: lib/app.php:71 lib/object.php:343
msgid "Personal"
-msgstr ""
+msgstr "Isiklik"
-#: lib/object.php:304
+#: lib/app.php:72 lib/object.php:344
msgid "Projects"
-msgstr ""
+msgstr "Projektid"
-#: lib/object.php:305
+#: lib/app.php:73 lib/object.php:345
msgid "Questions"
-msgstr ""
+msgstr "Küsimused"
-#: lib/object.php:306
+#: lib/app.php:74 lib/object.php:346
msgid "Work"
-msgstr ""
+msgstr "Töö"
-#: lib/object.php:313
+#: lib/object.php:353
msgid "Does not repeat"
msgstr "Ei kordu"
-#: lib/object.php:314
+#: lib/object.php:354
msgid "Daily"
msgstr "Iga päev"
-#: lib/object.php:315
+#: lib/object.php:355
msgid "Weekly"
msgstr "Iga nädal"
-#: lib/object.php:316
+#: lib/object.php:356
msgid "Every Weekday"
msgstr "Igal nädalapäeval"
-#: lib/object.php:317
+#: lib/object.php:357
msgid "Bi-Weekly"
msgstr "Üle nädala"
-#: lib/object.php:318
+#: lib/object.php:358
msgid "Monthly"
msgstr "Igal kuul"
-#: lib/object.php:319
+#: lib/object.php:359
msgid "Yearly"
msgstr "Igal aastal"
-#: lib/object.php:337
-msgid "Not an array"
+#: lib/object.php:366
+msgid "never"
msgstr ""
-#: templates/calendar.php:3
-msgid "All day"
-msgstr "Kogu päev"
+#: lib/object.php:367
+msgid "by occurrences"
+msgstr ""
-#: templates/calendar.php:32
-msgid "Sunday"
-msgstr "Pühapäev"
+#: lib/object.php:368
+msgid "by date"
+msgstr ""
+
+#: lib/object.php:375
+msgid "by monthday"
+msgstr ""
+
+#: lib/object.php:376
+msgid "by weekday"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:383 templates/lAfix.php:3
msgid "Monday"
-msgstr "Esmaspäev"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:384 templates/lAfix.php:4
msgid "Tuesday"
-msgstr "Teisipäev"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:385 templates/lAfix.php:5
msgid "Wednesday"
-msgstr "Kolmapäev"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:386 templates/lAfix.php:6
msgid "Thursday"
-msgstr "Neljapäev"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:387 templates/lAfix.php:7
msgid "Friday"
-msgstr "Reede"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:388 templates/lAfix.php:8
msgid "Saturday"
-msgstr "Laupäev"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Sun."
-msgstr "Pü."
+#: lib/object.php:389 templates/lAfix.php:2
+msgid "Sunday"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Mon."
-msgstr "Esm."
+#: lib/object.php:396
+msgid "events week of month"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Tue."
-msgstr "Teisip."
+#: lib/object.php:397
+msgid "first"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Wed."
-msgstr "Kolmap."
+#: lib/object.php:398
+msgid "second"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Thu."
-msgstr "Neljap."
+#: lib/object.php:399
+msgid "third"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Fri."
-msgstr "Reede"
+#: lib/object.php:400
+msgid "fourth"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Sat."
-msgstr "Laup."
+#: lib/object.php:401
+msgid "fifth"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:402
+msgid "last"
+msgstr ""
+
+#: lib/object.php:424 templates/lAfix.php:16
msgid "January"
-msgstr "Jaanuar"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:425 templates/lAfix.php:17
msgid "February"
-msgstr "Veebruar"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:426 templates/lAfix.php:18
msgid "March"
-msgstr "Märts"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:427 templates/lAfix.php:19
msgid "April"
-msgstr "Aprill"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:428 templates/lAfix.php:20
msgid "May"
-msgstr "Mai"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:429 templates/lAfix.php:21
msgid "June"
-msgstr "Juuni"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:430 templates/lAfix.php:22
msgid "July"
-msgstr "Juuli"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:431 templates/lAfix.php:23
msgid "August"
-msgstr "August"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:432 templates/lAfix.php:24
msgid "September"
-msgstr "September"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:433 templates/lAfix.php:25
msgid "October"
-msgstr "Oktoober"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:434 templates/lAfix.php:26
msgid "November"
-msgstr "November"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:435 templates/lAfix.php:27
msgid "December"
-msgstr "Detsember"
-
-#: templates/calendar.php:35
-msgid "Jan."
-msgstr "Jan."
+msgstr ""
-#: templates/calendar.php:35
-msgid "Feb."
-msgstr "Veebr."
+#: lib/object.php:441
+msgid "by events date"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Mar."
-msgstr "Märts"
+#: lib/object.php:442
+msgid "by yearday(s)"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Apr."
-msgstr "Apr."
+#: lib/object.php:443
+msgid "by weeknumber(s)"
+msgstr ""
-#: templates/calendar.php:35
-msgid "May."
+#: lib/object.php:444
+msgid "by day and month"
msgstr ""
-#: templates/calendar.php:35
-msgid "Jun."
-msgstr "Jun."
+#: lib/object.php:467
+msgid "Not an array"
+msgstr "Pole andmemassiiv"
-#: templates/calendar.php:35
-msgid "Jul."
-msgstr "Jul."
+#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+msgid "Date"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Aug."
-msgstr "Aug."
+#: lib/search.php:40
+msgid "Cal."
+msgstr ""
-#: templates/calendar.php:35
-msgid "Sep."
-msgstr "Sept."
+#: templates/calendar.php:10
+msgid "All day"
+msgstr "Kogu päev"
-#: templates/calendar.php:35
-msgid "Oct."
-msgstr "Okt."
+#: templates/calendar.php:11
+msgid "Missing fields"
+msgstr "Puuduvad väljad"
-#: templates/calendar.php:35
-msgid "Nov."
-msgstr "Nov."
+#: templates/calendar.php:12 templates/part.eventform.php:3
+msgid "Title"
+msgstr "Pealkiri"
-#: templates/calendar.php:35
-msgid "Dec."
-msgstr "Dets."
+#: templates/calendar.php:14
+msgid "From Date"
+msgstr "Alates kuupäevast"
-#: templates/calendar.php:36 templates/calendar.php:50
-#: templates/calendar.php:116
-msgid "Week"
-msgstr "Nädal"
+#: templates/calendar.php:15
+msgid "From Time"
+msgstr "Alates kellaajast"
-#: templates/calendar.php:37 templates/calendar.php:51
-msgid "Weeks"
-msgstr "Nädalat"
+#: templates/calendar.php:16
+msgid "To Date"
+msgstr "Kuni kuupäevani"
-#: templates/calendar.php:38
-msgid "More before {startdate}"
-msgstr ""
+#: templates/calendar.php:17
+msgid "To Time"
+msgstr "Kuni kellaajani"
-#: templates/calendar.php:39
-msgid "More after {enddate}"
-msgstr ""
+#: templates/calendar.php:18
+msgid "The event ends before it starts"
+msgstr "Üritus lõpeb enne, kui see algab"
-#: templates/calendar.php:49
-msgid "Day"
-msgstr "Päev"
+#: templates/calendar.php:19
+msgid "There was a database fail"
+msgstr "Tekkis andmebaasi viga"
#: templates/calendar.php:52
+msgid "Week"
+msgstr "Nädal"
+
+#: templates/calendar.php:53
msgid "Month"
msgstr "Kuu"
-#: templates/calendar.php:53
+#: templates/calendar.php:54
msgid "List"
-msgstr ""
+msgstr "Nimekiri"
-#: templates/calendar.php:58
+#: templates/calendar.php:59
msgid "Today"
msgstr "Täna"
-#: templates/calendar.php:59
+#: templates/calendar.php:60
msgid "Calendars"
msgstr "Kalendrid"
-#: templates/calendar.php:76 templates/calendar.php:94
-msgid "Time"
-msgstr "Kellaaeg"
-
-#: templates/calendar.php:169
+#: templates/calendar.php:78
msgid "There was a fail, while parsing the file."
msgstr "Faili parsimisel tekkis viga."
+#: templates/lAfix.php:9
+msgid "Sun."
+msgstr ""
+
+#: templates/lAfix.php:10
+msgid "Mon."
+msgstr ""
+
+#: templates/lAfix.php:11
+msgid "Tue."
+msgstr ""
+
+#: templates/lAfix.php:12
+msgid "Wed."
+msgstr ""
+
+#: templates/lAfix.php:13
+msgid "Thu."
+msgstr ""
+
+#: templates/lAfix.php:14
+msgid "Fri."
+msgstr ""
+
+#: templates/lAfix.php:15
+msgid "Sat."
+msgstr ""
+
+#: templates/lAfix.php:28
+msgid "Jan."
+msgstr ""
+
+#: templates/lAfix.php:29
+msgid "Feb."
+msgstr ""
+
+#: templates/lAfix.php:30
+msgid "Mar."
+msgstr ""
+
+#: templates/lAfix.php:31
+msgid "Apr."
+msgstr ""
+
+#: templates/lAfix.php:32
+msgid "May."
+msgstr ""
+
+#: templates/lAfix.php:33
+msgid "Jun."
+msgstr ""
+
+#: templates/lAfix.php:34
+msgid "Jul."
+msgstr ""
+
+#: templates/lAfix.php:35
+msgid "Aug."
+msgstr ""
+
+#: templates/lAfix.php:36
+msgid "Sep."
+msgstr ""
+
+#: templates/lAfix.php:37
+msgid "Oct."
+msgstr ""
+
+#: templates/lAfix.php:38
+msgid "Nov."
+msgstr ""
+
+#: templates/lAfix.php:39
+msgid "Dec."
+msgstr ""
+
#: templates/part.choosecalendar.php:1
msgid "Choose active calendars"
msgstr "Vali aktiivsed kalendrid"
#: templates/part.choosecalendar.php:15
msgid "New Calendar"
-msgstr ""
+msgstr "Uus kalender"
#: templates/part.choosecalendar.php:20
#: templates/part.choosecalendar.rowfields.php:4
msgid "CalDav Link"
-msgstr ""
+msgstr "CalDav Link"
#: templates/part.choosecalendar.rowfields.php:4
msgid "Download"
msgstr "Lae alla"
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.eventinfo.php:64
msgid "Edit"
msgstr "Muuda"
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.editevent.php:8
+#: templates/part.editevent.php:9
msgid "Delete"
-msgstr ""
+msgstr "Kustuta"
#: templates/part.editcalendar.php:9
msgid "New calendar"
-msgstr ""
+msgstr "Uus kalender"
#: templates/part.editcalendar.php:9
msgid "Edit calendar"
@@ -376,90 +457,181 @@ msgstr "Näidatav nimi"
msgid "Active"
msgstr "Aktiivne"
-#: templates/part.editcalendar.php:29 templates/part.eventform.php:88
-#: templates/part.eventinfo.php:58
-msgid "Description"
-msgstr "Kirjeldus"
-
-#: templates/part.editcalendar.php:35
+#: templates/part.editcalendar.php:29
msgid "Calendar color"
msgstr "Kalendri värv"
-#: templates/part.editcalendar.php:41
+#: templates/part.editcalendar.php:42
msgid "Save"
-msgstr ""
+msgstr "Salvesta"
-#: templates/part.editcalendar.php:41 templates/part.editevent.php:7
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
#: templates/part.newevent.php:6
msgid "Submit"
msgstr "OK"
-#: templates/part.editcalendar.php:42
+#: templates/part.editcalendar.php:43
msgid "Cancel"
-msgstr ""
+msgstr "Loobu"
-#: templates/part.editevent.php:1 templates/part.eventinfo.php:1
+#: templates/part.editevent.php:1
msgid "Edit an event"
msgstr "Muuda sündmust"
-#: templates/part.eventform.php:3 templates/part.eventinfo.php:4
-msgid "Title"
-msgstr "Pealkiri"
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr "Ekspordi"
#: templates/part.eventform.php:5
msgid "Title of the Event"
msgstr "Sündmuse pealkiri"
-#: templates/part.eventform.php:9 templates/part.eventinfo.php:9
-msgid "Location"
-msgstr "Asukoht"
-
#: templates/part.eventform.php:11
-msgid "Location of the Event"
-msgstr "Sündmuse toimumiskoht"
-
-#: templates/part.eventform.php:17 templates/part.eventinfo.php:16
msgid "Category"
msgstr "Kategooria"
-#: templates/part.eventform.php:19
+#: templates/part.eventform.php:13
msgid "Select category"
-msgstr ""
+msgstr "Salvesta kategooria"
-#: templates/part.eventform.php:45 templates/part.eventinfo.php:28
+#: templates/part.eventform.php:37
msgid "All Day Event"
msgstr "Kogu päeva sündmus"
-#: templates/part.eventform.php:49 templates/part.eventinfo.php:31
+#: templates/part.eventform.php:41
msgid "From"
msgstr "Alates"
-#: templates/part.eventform.php:57 templates/part.eventinfo.php:38
+#: templates/part.eventform.php:49
msgid "To"
msgstr "Kuni"
-#: templates/part.eventform.php:65 templates/part.eventinfo.php:44
+#: templates/part.eventform.php:57
+msgid "Advanced options"
+msgstr "Lisavalikud"
+
+#: templates/part.eventform.php:61
msgid "Repeat"
msgstr "Korda"
-#: templates/part.eventform.php:81 templates/part.eventinfo.php:51
-msgid "Attendees"
-msgstr "Osalejad"
+#: templates/part.eventform.php:68
+msgid "Advanced"
+msgstr ""
+
+#: templates/part.eventform.php:112
+msgid "Select weekdays"
+msgstr ""
+
+#: templates/part.eventform.php:125 templates/part.eventform.php:138
+msgid "Select days"
+msgstr ""
+
+#: templates/part.eventform.php:130
+msgid "and the events day of year."
+msgstr ""
+
+#: templates/part.eventform.php:143
+msgid "and the events day of month."
+msgstr ""
+
+#: templates/part.eventform.php:151
+msgid "Select months"
+msgstr ""
+
+#: templates/part.eventform.php:164
+msgid "Select weeks"
+msgstr ""
+
+#: templates/part.eventform.php:169
+msgid "and the events week of year."
+msgstr ""
+
+#: templates/part.eventform.php:175
+msgid "Interval"
+msgstr ""
+
+#: templates/part.eventform.php:181
+msgid "End"
+msgstr ""
+
+#: templates/part.eventform.php:193
+msgid "occurrences"
+msgstr ""
+
+#: templates/part.eventform.php:208
+msgid "Location"
+msgstr "Asukoht"
+
+#: templates/part.eventform.php:210
+msgid "Location of the Event"
+msgstr "Sündmuse toimumiskoht"
+
+#: templates/part.eventform.php:216
+msgid "Description"
+msgstr "Kirjeldus"
-#: templates/part.eventform.php:89
+#: templates/part.eventform.php:218
msgid "Description of the Event"
msgstr "Sündmuse kirjeldus"
-#: templates/part.eventinfo.php:63
-msgid "Close"
-msgstr "Sulge"
+#: templates/part.import.php:1
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the calendar"
+msgstr "Palun vali kalender"
+
+#: templates/part.import.php:10
+msgid "create a new calendar"
+msgstr ""
+
+#: templates/part.import.php:15
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import"
+msgstr "Impordi"
+
+#: templates/part.import.php:20
+msgid "Importing calendar"
+msgstr ""
+
+#: templates/part.import.php:23
+msgid "Calendar imported successfully"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Close Dialog"
+msgstr ""
#: templates/part.newevent.php:1
msgid "Create a new event"
msgstr "Loo sündmus"
-#: templates/settings.php:11
+#: templates/settings.php:13
msgid "Timezone"
msgstr "Ajavöönd"
+#: templates/settings.php:30
+msgid "Check always for changes of the timezone"
+msgstr ""
+
+#: templates/settings.php:32
+msgid "Timeformat"
+msgstr "Aja vorming"
+
+#: templates/settings.php:34
+msgid "24h"
+msgstr "24h"
+
+#: templates/settings.php:35
+msgid "12h"
+msgstr "12h"
+
+#: templates/settings.php:41
+msgid "Calendar CalDAV syncing address:"
+msgstr "Kalendri CalDAV sünkroniseerimise aadress:"
+
diff --git a/l10n/et_EE/contacts.po b/l10n/et_EE/contacts.po
index 119d01b09f0..8b6c2c6873c 100644
--- a/l10n/et_EE/contacts.po
+++ b/l10n/et_EE/contacts.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Rivo Zängov <eraser@eraser.ee>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 20:10+0200\n"
-"PO-Revision-Date: 2011-09-23 18:11+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Estonian (Estonia) (http://www.transifex.net/projects/p/owncloud/team/et_EE/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,164 +18,273 @@ msgstr ""
"Language: et_EE\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/addcard.php:31 ajax/addproperty.php:31 ajax/deletebook.php:32
-#: ajax/deletecard.php:32 ajax/deleteproperty.php:34 ajax/getdetails.php:32
-#: ajax/setproperty.php:32 ajax/showaddcard.php:30 ajax/showaddproperty.php:31
-#: ajax/showsetproperty.php:32 photo.php:32
-msgid "You need to log in."
+#: ajax/activation.php:17 ajax/updateaddressbook.php:26
+msgid "Error (de)activating addressbook."
msgstr ""
-#: ajax/addcard.php:37
-msgid "This is not your addressbook."
+#: ajax/addcard.php:79
+msgid "There was an error adding the contact."
msgstr ""
-#: ajax/addproperty.php:37 ajax/deletecard.php:39 ajax/deleteproperty.php:41
-#: ajax/getdetails.php:39 ajax/setproperty.php:38 ajax/showaddproperty.php:37
-#: ajax/showsetproperty.php:38 photo.php:39
-msgid "Contact could not be found."
+#: ajax/addproperty.php:39
+msgid "Cannot add empty property."
msgstr ""
-#: ajax/addproperty.php:43 ajax/deletebook.php:38 ajax/deletecard.php:45
-#: ajax/deleteproperty.php:47 ajax/getdetails.php:45 ajax/setproperty.php:44
-#: ajax/showaddproperty.php:43 ajax/showsetproperty.php:44 photo.php:45
-msgid "This is not your contact."
+#: ajax/addproperty.php:51
+msgid "At least one of the address fields has to be filled out."
msgstr ""
-#: ajax/addproperty.php:50 ajax/deleteproperty.php:54 ajax/getdetails.php:52
-#: ajax/setproperty.php:51 ajax/showsetproperty.php:51
-msgid "vCard could not be read."
+#: ajax/addproperty.php:77
+msgid "Error adding contact property."
msgstr ""
-#: ajax/deleteproperty.php:65 ajax/setproperty.php:62
-#: ajax/showsetproperty.php:62
-msgid "Information about vCard is incorrect. Please reload the page."
+#: ajax/createaddressbook.php:20
+msgid "Error adding addressbook."
msgstr ""
-#: photo.php:53
-msgid "This card is not RFC compatible."
+#: ajax/createaddressbook.php:26
+msgid "Error activating addressbook."
msgstr ""
-#: photo.php:90
-msgid "This card does not contain a photo."
+#: ajax/deleteproperty.php:40
+msgid "Error deleting contact property."
msgstr ""
-#: templates/index.php:8
-msgid "Add Contact"
+#: ajax/setproperty.php:79
+msgid "Error updating contact property."
msgstr ""
-#: templates/part.addcardform.php:5
-msgid "Group"
+#: ajax/updateaddressbook.php:20
+msgid "Error updating addressbook."
msgstr ""
-#: templates/part.addcardform.php:12 templates/part.property.php:3
-msgid "Name"
+#: appinfo/app.php:21 templates/settings.php:3
+msgid "Contacts"
msgstr ""
-#: templates/part.addcardform.php:14
-msgid "Create Contact"
-msgstr ""
+#: lib/app.php:42
+msgid "This is not your addressbook."
+msgstr "See pole sinu aadressiraamat."
-#: templates/part.addpropertyform.php:4 templates/part.property.php:40
+#: lib/app.php:51 photo.php:34
+msgid "Contact could not be found."
+msgstr "Kontakti ei leitud."
+
+#: lib/app.php:79
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "Visiitkaardi info pole korrektne. Palun lae leht uuesti."
+
+#: lib/app.php:91 templates/part.addcardform.php:54
+#: templates/part.property.php:45 templates/part.setpropertyform.php:7
msgid "Address"
-msgstr ""
+msgstr "Aadress"
-#: templates/part.addpropertyform.php:5
+#: lib/app.php:92 templates/part.addcardform.php:43
msgid "Telephone"
-msgstr ""
+msgstr "Telefon"
-#: templates/part.addpropertyform.php:6 templates/part.property.php:22
+#: lib/app.php:93 templates/part.addcardform.php:37
+#: templates/part.property.php:16 templates/part.setpropertyform.php:51
msgid "Email"
-msgstr ""
+msgstr "E-post"
-#: templates/part.addpropertyform.php:7 templates/part.property.php:15
+#: lib/app.php:94 templates/part.addcardform.php:27
+#: templates/part.property.php:9 templates/part.setpropertyform.php:54
msgid "Organization"
-msgstr ""
+msgstr "Organisatsioon"
-#: templates/part.addpropertyform.php:17 templates/part.addpropertyform.php:32
+#: lib/app.php:106 lib/app.php:113
msgid "Work"
-msgstr ""
+msgstr "Töö"
-#: templates/part.addpropertyform.php:18 templates/part.addpropertyform.php:30
+#: lib/app.php:107 lib/app.php:111
msgid "Home"
+msgstr "Kodu"
+
+#: lib/app.php:112
+msgid "Mobile"
+msgstr "Mobiil"
+
+#: lib/app.php:114
+msgid "Text"
+msgstr "Tekst"
+
+#: lib/app.php:115
+msgid "Voice"
+msgstr "Hääl"
+
+#: lib/app.php:116
+msgid "Fax"
+msgstr "Faks"
+
+#: lib/app.php:117
+msgid "Video"
+msgstr "Video"
+
+#: lib/app.php:118
+msgid "Pager"
+msgstr "Piipar"
+
+#: lib/search.php:22
+msgid "Contact"
msgstr ""
-#: templates/part.addpropertyform.php:20 templates/part.property.php:48
-#: templates/part.setpropertyform.php:5
-msgid "PO Box"
+#: photo.php:40
+msgid "This is not your contact."
+msgstr "See pole sinu kontakt."
+
+#: photo.php:48
+msgid "This card is not RFC compatible."
+msgstr "See kaart ei ühildu RFC-ga."
+
+#: photo.php:85
+msgid "This card does not contain a photo."
+msgstr "Sellel kaardil pole fotot."
+
+#: templates/index.php:6
+msgid "Add Contact"
+msgstr "Lisa kontakt"
+
+#: templates/index.php:7
+msgid "Addressbooks"
msgstr ""
-#: templates/part.addpropertyform.php:21 templates/part.property.php:51
-#: templates/part.setpropertyform.php:6
-msgid "Extended"
+#: templates/part.addcardform.php:8
+msgid "Addressbook"
msgstr ""
-#: templates/part.addpropertyform.php:22 templates/part.property.php:54
-#: templates/part.setpropertyform.php:7
-msgid "Street"
+#: templates/part.addcardform.php:21
+msgid "Name"
+msgstr "Nimi"
+
+#: templates/part.addcardform.php:57 templates/part.details.php:43
+#: templates/part.details.php:79 templates/part.setpropertyform.php:10
+#: templates/part.setpropertyform.php:47
+msgid "Type"
msgstr ""
-#: templates/part.addpropertyform.php:23 templates/part.property.php:57
-#: templates/part.setpropertyform.php:8
+#: templates/part.addcardform.php:65 templates/part.details.php:49
+#: templates/part.setpropertyform.php:16
+msgid "PO Box"
+msgstr "Postkontori postkast"
+
+#: templates/part.addcardform.php:72 templates/part.details.php:53
+#: templates/part.setpropertyform.php:20
+msgid "Extended"
+msgstr "Laiendatud"
+
+#: templates/part.addcardform.php:78 templates/part.details.php:57
+#: templates/part.setpropertyform.php:24
+msgid "Street"
+msgstr "Tänav"
+
+#: templates/part.addcardform.php:84 templates/part.details.php:61
+#: templates/part.setpropertyform.php:28
msgid "City"
-msgstr ""
+msgstr "Linn"
-#: templates/part.addpropertyform.php:24 templates/part.property.php:60
-#: templates/part.setpropertyform.php:9
+#: templates/part.addcardform.php:90 templates/part.details.php:65
+#: templates/part.setpropertyform.php:32
msgid "Region"
-msgstr ""
+msgstr "Piirkond"
-#: templates/part.addpropertyform.php:25 templates/part.property.php:63
-#: templates/part.setpropertyform.php:10
+#: templates/part.addcardform.php:96 templates/part.details.php:69
+#: templates/part.setpropertyform.php:36
msgid "Zipcode"
-msgstr ""
+msgstr "Postiindeks"
-#: templates/part.addpropertyform.php:26 templates/part.property.php:66
-#: templates/part.setpropertyform.php:11
+#: templates/part.addcardform.php:102 templates/part.details.php:73
+#: templates/part.setpropertyform.php:40
msgid "Country"
+msgstr "Riik"
+
+#: templates/part.addcardform.php:109
+msgid "Create Contact"
+msgstr "Lisa kontakt"
+
+#: templates/part.chooseaddressbook.php:1
+msgid "Choose active Address Books"
msgstr ""
-#: templates/part.addpropertyform.php:31
-msgid "Mobile"
+#: templates/part.chooseaddressbook.php:16
+msgid "New Address Book"
msgstr ""
-#: templates/part.addpropertyform.php:33
-msgid "Text"
+#: templates/part.chooseaddressbook.php:21
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "CardDav Link"
msgstr ""
-#: templates/part.addpropertyform.php:34
-msgid "Voice"
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Download"
msgstr ""
-#: templates/part.addpropertyform.php:35
-msgid "Fax"
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Edit"
+msgstr "Muuda"
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Delete"
+msgstr "Kustuta"
+
+#: templates/part.details.php:3
+msgid "Download contact"
msgstr ""
-#: templates/part.addpropertyform.php:36
-msgid "Video"
+#: templates/part.details.php:4
+msgid "Delete contact"
msgstr ""
-#: templates/part.addpropertyform.php:37
-msgid "Pager"
+#: templates/part.details.php:34
+msgid "Add"
msgstr ""
-#: templates/part.details.php:33
-msgid "Delete"
+#: templates/part.editaddressbook.php:9
+msgid "New Addressbook"
msgstr ""
-#: templates/part.details.php:34
-msgid "Add Property"
+#: templates/part.editaddressbook.php:9
+msgid "Edit Addressbook"
msgstr ""
-#: templates/part.property.php:9
+#: templates/part.editaddressbook.php:12
+msgid "Displayname"
+msgstr ""
+
+#: templates/part.editaddressbook.php:23
+msgid "Active"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Save"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Submit"
+msgstr ""
+
+#: templates/part.editaddressbook.php:30
+msgid "Cancel"
+msgstr ""
+
+#: templates/part.property.php:3
msgid "Birthday"
+msgstr "Sünnipäev"
+
+#: templates/part.property.php:23
+msgid "Preferred"
msgstr ""
-#: templates/part.property.php:29
+#: templates/part.property.php:23 templates/part.setpropertyform.php:45
msgid "Phone"
+msgstr "Telefon"
+
+#: templates/part.setpropertyform.php:57
+msgid "Update"
msgstr ""
-#: templates/part.setpropertyform.php:17
-msgid "Edit"
+#: templates/settings.php:4
+msgid "CardDAV syncing address:"
msgstr ""
diff --git a/l10n/et_EE/core.po b/l10n/et_EE/core.po
index 02b3782f220..18831a8a35f 100644
--- a/l10n/et_EE/core.po
+++ b/l10n/et_EE/core.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 18:17+0200\n"
-"PO-Revision-Date: 2011-09-05 14:48+0000\n"
-"Last-Translator: Eraser <eraser@eraser.ee>\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Estonian (Estonia) (http://www.transifex.net/projects/p/owncloud/team/et_EE/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,6 +18,51 @@ msgstr ""
"Language: et_EE\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+#: lostpassword/index.php:24
+msgid "Owncloud password reset"
+msgstr ""
+
+#: lostpassword/templates/email.php:1
+msgid "Use the following link to reset your password: {link}"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr "Sinu parooli taastamise link saadetakse sulle e-postile."
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Requested"
+msgstr "Kohustuslik"
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr "Sisselogimine ebaõnnestus!"
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:22
+#: templates/login.php:8
+msgid "Username"
+msgstr "Kasutajanimi"
+
+#: lostpassword/templates/lostpassword.php:14
+msgid "Request reset"
+msgstr "Päringu taastamine"
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr "Sinu parool on taastatud"
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr "Uus parool"
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr "Nulli parool"
+
#: strings.php:5
msgid "Personal"
msgstr "isiklik"
@@ -46,54 +91,50 @@ msgstr "Pilve ei leitud"
msgid "Create an <strong>admin account</strong>"
msgstr "Loo <strong>admini konto</strong>"
-#: templates/installation.php:21
-msgid "Username"
-msgstr "Kasutajanimi"
-
-#: templates/installation.php:22
+#: templates/installation.php:26 templates/login.php:12
msgid "Password"
msgstr "Parool"
-#: templates/installation.php:27
+#: templates/installation.php:32
+msgid "Advanced"
+msgstr "Lisavalikud"
+
+#: templates/installation.php:34
+msgid "Data folder"
+msgstr "Andmete kaust"
+
+#: templates/installation.php:41
msgid "Configure the database"
msgstr "Seadista andmebaasi"
-#: templates/installation.php:32 templates/installation.php:43
-#: templates/installation.php:53
+#: templates/installation.php:46 templates/installation.php:57
+#: templates/installation.php:67
msgid "will be used"
msgstr "kasutatakse"
-#: templates/installation.php:64
+#: templates/installation.php:79
msgid "Database user"
msgstr "Andmebaasi kasutaja"
-#: templates/installation.php:65
+#: templates/installation.php:83
msgid "Database password"
msgstr "Andmebaasi parool"
-#: templates/installation.php:66
+#: templates/installation.php:87
msgid "Database name"
msgstr "Andmebasi nimi"
-#: templates/installation.php:72
-msgid "Advanced"
-msgstr "Lisavalikud"
-
-#: templates/installation.php:75
+#: templates/installation.php:93
msgid "Database host"
msgstr "Andmebaasi host"
-#: templates/installation.php:76
-msgid "Data folder"
-msgstr "Andmete kaust"
-
-#: templates/installation.php:79
+#: templates/installation.php:98
msgid "Finish setup"
msgstr "Lõpeta seadistamine"
#: templates/layout.guest.php:35
-msgid "gives you freedom and control over your own data"
-msgstr "Annab sulle vabaduse ja kontrolli sinu enda andmete üle"
+msgid "web services under your control"
+msgstr ""
#: templates/layout.user.php:34
msgid "Log out"
@@ -103,39 +144,22 @@ msgstr "Logi välja"
msgid "Settings"
msgstr "Seaded"
-#: templates/login.php:4
+#: templates/login.php:5
msgid "Lost your password?"
msgstr "Kaotasid oma parooli?"
-#: templates/login.php:9 templates/login.php:13
+#: templates/login.php:15
msgid "remember"
msgstr "pea meeles"
+#: templates/login.php:16
+msgid "Log in"
+msgstr ""
+
#: templates/logout.php:1
msgid "You are logged out."
msgstr "Sa oled välja loginud"
-#: templates/lostpassword.php:3
-msgid "You will receive a link to reset your password via Email."
-msgstr ""
-"Sulle saadetakse e-postile link, millelt sa saad oma parooli taastada."
-
-#: templates/lostpassword.php:5
-msgid "Requested"
-msgstr "Kohustuslik"
-
-#: templates/lostpassword.php:8
-msgid "Login failed!"
-msgstr "Sisselogimine ebaõnnestus"
-
-#: templates/lostpassword.php:10
-msgid "Username or Email"
-msgstr "Kasutajanimi või e-post"
-
-#: templates/lostpassword.php:11
-msgid "Request reset"
-msgstr "Palu taastamist"
-
#: templates/part.pagenavi.php:3
msgid "prev"
msgstr "eelm"
@@ -144,16 +168,4 @@ msgstr "eelm"
msgid "next"
msgstr "järgm"
-#: templates/resetpassword.php:4
-msgid "Your password was reset"
-msgstr "Sinu parool on taastatud"
-
-#: templates/resetpassword.php:6
-msgid "New password"
-msgstr "Uus parool"
-
-#: templates/resetpassword.php:7
-msgid "Reset password"
-msgstr "Nulli parool"
-
diff --git a/l10n/et_EE/files.po b/l10n/et_EE/files.po
index 92f9fa8d855..49191aa3a92 100644
--- a/l10n/et_EE/files.po
+++ b/l10n/et_EE/files.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Estonian (Estonia) (http://www.transifex.net/projects/p/owncloud/team/et_EE/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,33 +18,36 @@ msgstr ""
"Language: et_EE\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/upload.php:24
+#: ajax/upload.php:19
msgid "There is no error, the file uploaded with success"
-msgstr ""
+msgstr "Ühtegi viga pole, fail on üles laetud"
-#: ajax/upload.php:25
+#: ajax/upload.php:20
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr ""
+"Üles laetud faili suurus ületab php.ini määratud upload_max_filesize suuruse"
-#: ajax/upload.php:26
+#: ajax/upload.php:21
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
+"Üles laetud faili suurus ületab HTML vormis määratud upload_max_filesize "
+"suuruse"
-#: ajax/upload.php:27
+#: ajax/upload.php:22
msgid "The uploaded file was only partially uploaded"
-msgstr ""
+msgstr "Fail laeti üles ainult osaliselt"
-#: ajax/upload.php:28
+#: ajax/upload.php:23
msgid "No file was uploaded"
-msgstr ""
+msgstr "Ühtegi faili ei laetud üles"
-#: ajax/upload.php:29
+#: ajax/upload.php:24
msgid "Missing a temporary folder"
-msgstr ""
+msgstr "Ajutiste failide kaust puudub"
-#: appinfo/app.php:7
+#: appinfo/app.php:8
msgid "Files"
msgstr "Failid"
@@ -52,43 +55,55 @@ msgstr "Failid"
msgid "Maximum upload size"
msgstr "Maksimaalne üleslaadimise suurus"
+#: templates/index.php:7
+msgid "New"
+msgstr ""
+
#: templates/index.php:10
+msgid "Text file"
+msgstr ""
+
+#: templates/index.php:11
+msgid "Folder"
+msgstr ""
+
+#: templates/index.php:12
+msgid "From the web"
+msgstr ""
+
+#: templates/index.php:22
msgid "Upload"
msgstr "Lae üles"
-#: templates/index.php:17
-msgid "New Folder"
-msgstr "Uus kaust"
-
-#: templates/index.php:31
+#: templates/index.php:35
msgid "Nothing in here. Upload something!"
msgstr "Siin pole midagi. Lae midagi üles!"
-#: templates/index.php:39
+#: templates/index.php:43
msgid "Name"
msgstr "Nimi"
-#: templates/index.php:41
+#: templates/index.php:45
msgid "Download"
msgstr "Lae alla"
-#: templates/index.php:45
+#: templates/index.php:49
msgid "Size"
msgstr "Suurus"
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Modified"
msgstr "Muudetud"
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Delete"
msgstr "Kustuta"
-#: templates/index.php:54
+#: templates/index.php:58
msgid "Upload too large"
msgstr "Üleslaadimine on liiga suur"
-#: templates/index.php:56
+#: templates/index.php:60
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
diff --git a/l10n/et_EE/gallery.po b/l10n/et_EE/gallery.po
new file mode 100644
index 00000000000..fb623745150
--- /dev/null
+++ b/l10n/et_EE/gallery.po
@@ -0,0 +1,32 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:48+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Estonian (Estonia) (http://www.transifex.net/projects/p/owncloud/team/et_EE/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: et_EE\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:41
+msgid "Gallery"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Rescan"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+
diff --git a/l10n/et_EE/media.po b/l10n/et_EE/media.po
index 7d40f8a4ffa..a0e33794bfd 100644
--- a/l10n/et_EE/media.po
+++ b/l10n/et_EE/media.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 18:17+0200\n"
-"PO-Revision-Date: 2011-09-05 14:54+0000\n"
-"Last-Translator: Eraser <eraser@eraser.ee>\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Estonian (Estonia) (http://www.transifex.net/projects/p/owncloud/team/et_EE/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,15 +18,15 @@ msgstr ""
"Language: et_EE\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: appinfo/app.php:31
+#: appinfo/app.php:32
msgid "Music"
msgstr "Muusika"
-#: templates/music.php:3
+#: templates/music.php:3 templates/player.php:13
msgid "Play"
msgstr "Esita"
-#: templates/music.php:4 templates/music.php:30
+#: templates/music.php:4 templates/music.php:26 templates/player.php:14
msgid "Pause"
msgstr "Paus"
@@ -34,7 +34,7 @@ msgstr "Paus"
msgid "Previous"
msgstr "Eelmine"
-#: templates/music.php:6
+#: templates/music.php:6 templates/player.php:15
msgid "Next"
msgstr "Järgmine"
@@ -46,11 +46,7 @@ msgstr "Vaikseks"
msgid "Unmute"
msgstr "Hääl tagasi"
-#: templates/music.php:28
-msgid "Songs scanned"
-msgstr "Skännitud lood"
-
-#: templates/music.php:29
+#: templates/music.php:25
msgid "Rescan Collection"
msgstr "Skänni kollekttsiooni uuesti"
diff --git a/l10n/et_EE/settings.po b/l10n/et_EE/settings.po
index 3fad92d9479..9de62de218d 100644
--- a/l10n/et_EE/settings.po
+++ b/l10n/et_EE/settings.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 18:17+0200\n"
-"PO-Revision-Date: 2011-09-05 14:59+0000\n"
-"Last-Translator: Eraser <eraser@eraser.ee>\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Estonian (Estonia) (http://www.transifex.net/projects/p/owncloud/team/et_EE/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,22 +18,26 @@ msgstr ""
"Language: et_EE\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/openid.php:13 ajax/setlanguage.php:13
-msgid "Authentication error"
-msgstr "Autentimise viga"
-
-#: ajax/openid.php:21
-msgid "OpenID Changed"
-msgstr "OpenID on muudetud"
+#: ajax/lostpassword.php:14
+msgid "email Changed"
+msgstr ""
-#: ajax/openid.php:23 ajax/setlanguage.php:23
+#: ajax/lostpassword.php:16 ajax/openid.php:17 ajax/setlanguage.php:16
msgid "Invalid request"
msgstr "Vigane päring"
-#: ajax/setlanguage.php:21
+#: ajax/openid.php:15
+msgid "OpenID Changed"
+msgstr "OpenID on muudetud"
+
+#: ajax/setlanguage.php:14
msgid "Language changed"
msgstr "Keel on muudetud"
+#: templates/admin.php:13
+msgid "Log level"
+msgstr ""
+
#: templates/apps.php:8
msgid "Add your application"
msgstr "Lisa oma programm"
@@ -54,15 +58,15 @@ msgstr "kelle poolt"
msgid "Ask a question"
msgstr "Küsi küsimus"
-#: templates/help.php:17
+#: templates/help.php:20
msgid "Problems connecting to help database."
msgstr "Probleemid abiinfo andmebaasiga ühendumisel."
-#: templates/help.php:18
+#: templates/help.php:21
msgid "Go there manually."
msgstr "Mine sinna käsitsi."
-#: templates/help.php:26
+#: templates/help.php:29
msgid "Answer"
msgstr "Vasta"
@@ -98,35 +102,51 @@ msgstr "näita"
msgid "Change password"
msgstr "Muuda parooli"
-#: templates/personal.php:24 templates/personal.php:25
+#: templates/personal.php:24
+msgid "Email"
+msgstr ""
+
+#: templates/personal.php:25
+msgid "Your email address"
+msgstr ""
+
+#: templates/personal.php:26
+msgid "Fill in an email address to enable password recovery"
+msgstr ""
+
+#: templates/personal.php:32 templates/personal.php:33
msgid "Language"
msgstr "Keel"
-#: templates/personal.php:30
-msgid "Help translating"
-msgstr "Abiinfo tõlkimine"
+#: templates/personal.php:38
+msgid "Help translate"
+msgstr ""
-#: templates/personal.php:37
+#: templates/personal.php:45
msgid "use this address to connect to your ownCloud in your file manager"
msgstr "kasuta seda aadressi oma ownCloudiga ühendamiseks failihalduriga"
-#: templates/users.php:16
+#: templates/users.php:15 templates/users.php:30
msgid "Name"
msgstr "Nimi"
-#: templates/users.php:17
+#: templates/users.php:16 templates/users.php:31
msgid "Password"
msgstr "Parool"
-#: templates/users.php:18 templates/users.php:36
+#: templates/users.php:17 templates/users.php:32 templates/users.php:46
msgid "Groups"
msgstr "Grupid"
-#: templates/users.php:24
+#: templates/users.php:23
msgid "Create"
msgstr "Lisa"
-#: templates/users.php:48
+#: templates/users.php:33
+msgid "Quota"
+msgstr ""
+
+#: templates/users.php:58
msgid "Delete"
msgstr "Kustuta"
diff --git a/l10n/eu/calendar.po b/l10n/eu/calendar.po
new file mode 100644
index 00000000000..7ef03022a17
--- /dev/null
+++ b/l10n/eu/calendar.po
@@ -0,0 +1,637 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Asier Urio Larrea <asieriko@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Basque (http://www.transifex.net/projects/p/owncloud/team/eu/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eu\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/guesstimezone.php:42
+msgid "New Timezone:"
+msgstr ""
+
+#: ajax/settimezone.php:22
+msgid "Timezone changed"
+msgstr "Ordu-zona aldatuta"
+
+#: ajax/settimezone.php:24
+msgid "Invalid request"
+msgstr "Baligabeko eskaera"
+
+#: appinfo/app.php:20 templates/calendar.php:13
+#: templates/part.eventform.php:20
+msgid "Calendar"
+msgstr "Egutegia"
+
+#: lib/app.php:19
+msgid "Wrong calendar"
+msgstr "Egutegi okerra"
+
+#: lib/app.php:60 lib/object.php:332
+msgid "Birthday"
+msgstr "Jaioteguna"
+
+#: lib/app.php:61 lib/object.php:333
+msgid "Business"
+msgstr "Negozioa"
+
+#: lib/app.php:62 lib/object.php:334
+msgid "Call"
+msgstr "Deia"
+
+#: lib/app.php:63 lib/object.php:335
+msgid "Clients"
+msgstr "Bezeroak"
+
+#: lib/app.php:64 lib/object.php:336
+msgid "Deliverer"
+msgstr "Banatzailea"
+
+#: lib/app.php:65 lib/object.php:337
+msgid "Holidays"
+msgstr "Oporrak"
+
+#: lib/app.php:66 lib/object.php:338
+msgid "Ideas"
+msgstr "Ideiak"
+
+#: lib/app.php:67 lib/object.php:339
+msgid "Journey"
+msgstr "Bidaia"
+
+#: lib/app.php:68 lib/object.php:340
+msgid "Jubilee"
+msgstr "Urteurrena"
+
+#: lib/app.php:69 lib/object.php:341
+msgid "Meeting"
+msgstr "Bilera"
+
+#: lib/app.php:70 lib/object.php:342
+msgid "Other"
+msgstr "Bestelakoa"
+
+#: lib/app.php:71 lib/object.php:343
+msgid "Personal"
+msgstr "Pertsonala"
+
+#: lib/app.php:72 lib/object.php:344
+msgid "Projects"
+msgstr "Proiektuak"
+
+#: lib/app.php:73 lib/object.php:345
+msgid "Questions"
+msgstr "Galderak"
+
+#: lib/app.php:74 lib/object.php:346
+msgid "Work"
+msgstr "Lana"
+
+#: lib/object.php:353
+msgid "Does not repeat"
+msgstr "Ez da errepikatzen"
+
+#: lib/object.php:354
+msgid "Daily"
+msgstr "Egunero"
+
+#: lib/object.php:355
+msgid "Weekly"
+msgstr "Astero"
+
+#: lib/object.php:356
+msgid "Every Weekday"
+msgstr "Asteko egun guztietan"
+
+#: lib/object.php:357
+msgid "Bi-Weekly"
+msgstr "Bi-Astero"
+
+#: lib/object.php:358
+msgid "Monthly"
+msgstr "Hilabetero"
+
+#: lib/object.php:359
+msgid "Yearly"
+msgstr "Urtero"
+
+#: lib/object.php:366
+msgid "never"
+msgstr ""
+
+#: lib/object.php:367
+msgid "by occurrences"
+msgstr ""
+
+#: lib/object.php:368
+msgid "by date"
+msgstr ""
+
+#: lib/object.php:375
+msgid "by monthday"
+msgstr ""
+
+#: lib/object.php:376
+msgid "by weekday"
+msgstr ""
+
+#: lib/object.php:383 templates/lAfix.php:3
+msgid "Monday"
+msgstr ""
+
+#: lib/object.php:384 templates/lAfix.php:4
+msgid "Tuesday"
+msgstr ""
+
+#: lib/object.php:385 templates/lAfix.php:5
+msgid "Wednesday"
+msgstr ""
+
+#: lib/object.php:386 templates/lAfix.php:6
+msgid "Thursday"
+msgstr ""
+
+#: lib/object.php:387 templates/lAfix.php:7
+msgid "Friday"
+msgstr ""
+
+#: lib/object.php:388 templates/lAfix.php:8
+msgid "Saturday"
+msgstr ""
+
+#: lib/object.php:389 templates/lAfix.php:2
+msgid "Sunday"
+msgstr ""
+
+#: lib/object.php:396
+msgid "events week of month"
+msgstr ""
+
+#: lib/object.php:397
+msgid "first"
+msgstr ""
+
+#: lib/object.php:398
+msgid "second"
+msgstr ""
+
+#: lib/object.php:399
+msgid "third"
+msgstr ""
+
+#: lib/object.php:400
+msgid "fourth"
+msgstr ""
+
+#: lib/object.php:401
+msgid "fifth"
+msgstr ""
+
+#: lib/object.php:402
+msgid "last"
+msgstr ""
+
+#: lib/object.php:424 templates/lAfix.php:16
+msgid "January"
+msgstr ""
+
+#: lib/object.php:425 templates/lAfix.php:17
+msgid "February"
+msgstr ""
+
+#: lib/object.php:426 templates/lAfix.php:18
+msgid "March"
+msgstr ""
+
+#: lib/object.php:427 templates/lAfix.php:19
+msgid "April"
+msgstr ""
+
+#: lib/object.php:428 templates/lAfix.php:20
+msgid "May"
+msgstr ""
+
+#: lib/object.php:429 templates/lAfix.php:21
+msgid "June"
+msgstr ""
+
+#: lib/object.php:430 templates/lAfix.php:22
+msgid "July"
+msgstr ""
+
+#: lib/object.php:431 templates/lAfix.php:23
+msgid "August"
+msgstr ""
+
+#: lib/object.php:432 templates/lAfix.php:24
+msgid "September"
+msgstr ""
+
+#: lib/object.php:433 templates/lAfix.php:25
+msgid "October"
+msgstr ""
+
+#: lib/object.php:434 templates/lAfix.php:26
+msgid "November"
+msgstr ""
+
+#: lib/object.php:435 templates/lAfix.php:27
+msgid "December"
+msgstr ""
+
+#: lib/object.php:441
+msgid "by events date"
+msgstr ""
+
+#: lib/object.php:442
+msgid "by yearday(s)"
+msgstr ""
+
+#: lib/object.php:443
+msgid "by weeknumber(s)"
+msgstr ""
+
+#: lib/object.php:444
+msgid "by day and month"
+msgstr ""
+
+#: lib/object.php:467
+msgid "Not an array"
+msgstr "Ez da bektore bat"
+
+#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+msgid "Date"
+msgstr ""
+
+#: lib/search.php:40
+msgid "Cal."
+msgstr ""
+
+#: templates/calendar.php:10
+msgid "All day"
+msgstr "Egun guztia"
+
+#: templates/calendar.php:11
+msgid "Missing fields"
+msgstr "Eremuak faltan"
+
+#: templates/calendar.php:12 templates/part.eventform.php:3
+msgid "Title"
+msgstr "Izenburua"
+
+#: templates/calendar.php:14
+msgid "From Date"
+msgstr "Hasierako Data"
+
+#: templates/calendar.php:15
+msgid "From Time"
+msgstr "Hasierako Ordua"
+
+#: templates/calendar.php:16
+msgid "To Date"
+msgstr "Bukaerako Data"
+
+#: templates/calendar.php:17
+msgid "To Time"
+msgstr "Bukaerako Ordua"
+
+#: templates/calendar.php:18
+msgid "The event ends before it starts"
+msgstr "Gertaera hasi baino lehen bukatzen da"
+
+#: templates/calendar.php:19
+msgid "There was a database fail"
+msgstr "Datu baseak huts egin du"
+
+#: templates/calendar.php:52
+msgid "Week"
+msgstr "Astea"
+
+#: templates/calendar.php:53
+msgid "Month"
+msgstr "Hilabetea"
+
+#: templates/calendar.php:54
+msgid "List"
+msgstr "Zerrenda"
+
+#: templates/calendar.php:59
+msgid "Today"
+msgstr "Gaur"
+
+#: templates/calendar.php:60
+msgid "Calendars"
+msgstr "Egutegiak"
+
+#: templates/calendar.php:78
+msgid "There was a fail, while parsing the file."
+msgstr "Huts bat egon da, fitxategia aztertzen zen bitartea."
+
+#: templates/lAfix.php:9
+msgid "Sun."
+msgstr ""
+
+#: templates/lAfix.php:10
+msgid "Mon."
+msgstr ""
+
+#: templates/lAfix.php:11
+msgid "Tue."
+msgstr ""
+
+#: templates/lAfix.php:12
+msgid "Wed."
+msgstr ""
+
+#: templates/lAfix.php:13
+msgid "Thu."
+msgstr ""
+
+#: templates/lAfix.php:14
+msgid "Fri."
+msgstr ""
+
+#: templates/lAfix.php:15
+msgid "Sat."
+msgstr ""
+
+#: templates/lAfix.php:28
+msgid "Jan."
+msgstr ""
+
+#: templates/lAfix.php:29
+msgid "Feb."
+msgstr ""
+
+#: templates/lAfix.php:30
+msgid "Mar."
+msgstr ""
+
+#: templates/lAfix.php:31
+msgid "Apr."
+msgstr ""
+
+#: templates/lAfix.php:32
+msgid "May."
+msgstr ""
+
+#: templates/lAfix.php:33
+msgid "Jun."
+msgstr ""
+
+#: templates/lAfix.php:34
+msgid "Jul."
+msgstr ""
+
+#: templates/lAfix.php:35
+msgid "Aug."
+msgstr ""
+
+#: templates/lAfix.php:36
+msgid "Sep."
+msgstr ""
+
+#: templates/lAfix.php:37
+msgid "Oct."
+msgstr ""
+
+#: templates/lAfix.php:38
+msgid "Nov."
+msgstr ""
+
+#: templates/lAfix.php:39
+msgid "Dec."
+msgstr ""
+
+#: templates/part.choosecalendar.php:1
+msgid "Choose active calendars"
+msgstr "Aukeratu egutegi aktiboak"
+
+#: templates/part.choosecalendar.php:15
+msgid "New Calendar"
+msgstr "Egutegi berria"
+
+#: templates/part.choosecalendar.php:20
+#: templates/part.choosecalendar.rowfields.php:4
+msgid "CalDav Link"
+msgstr "CalDav Lotura"
+
+#: templates/part.choosecalendar.rowfields.php:4
+msgid "Download"
+msgstr "Deskargatu"
+
+#: templates/part.choosecalendar.rowfields.php:4
+msgid "Edit"
+msgstr "Editatu"
+
+#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.editevent.php:9
+msgid "Delete"
+msgstr "Ezabatu"
+
+#: templates/part.editcalendar.php:9
+msgid "New calendar"
+msgstr "Egutegi berria"
+
+#: templates/part.editcalendar.php:9
+msgid "Edit calendar"
+msgstr "Editatu egutegia"
+
+#: templates/part.editcalendar.php:12
+msgid "Displayname"
+msgstr "Bistaratzeko izena"
+
+#: templates/part.editcalendar.php:23
+msgid "Active"
+msgstr "Aktiboa"
+
+#: templates/part.editcalendar.php:29
+msgid "Calendar color"
+msgstr "Egutegiaren kolorea"
+
+#: templates/part.editcalendar.php:42
+msgid "Save"
+msgstr "Gorde"
+
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
+#: templates/part.newevent.php:6
+msgid "Submit"
+msgstr "Bidali"
+
+#: templates/part.editcalendar.php:43
+msgid "Cancel"
+msgstr "Ezeztatu"
+
+#: templates/part.editevent.php:1
+msgid "Edit an event"
+msgstr "Editatu gertaera"
+
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr "Exportatu"
+
+#: templates/part.eventform.php:5
+msgid "Title of the Event"
+msgstr "Gertaeraren izenburua"
+
+#: templates/part.eventform.php:11
+msgid "Category"
+msgstr "Kategoria"
+
+#: templates/part.eventform.php:13
+msgid "Select category"
+msgstr "Aukeratu kategoria"
+
+#: templates/part.eventform.php:37
+msgid "All Day Event"
+msgstr "Egun osoko gertaera"
+
+#: templates/part.eventform.php:41
+msgid "From"
+msgstr "Hasiera"
+
+#: templates/part.eventform.php:49
+msgid "To"
+msgstr "Bukaera"
+
+#: templates/part.eventform.php:57
+msgid "Advanced options"
+msgstr "Aukera aurreratuak"
+
+#: templates/part.eventform.php:61
+msgid "Repeat"
+msgstr "Errepikatu"
+
+#: templates/part.eventform.php:68
+msgid "Advanced"
+msgstr ""
+
+#: templates/part.eventform.php:112
+msgid "Select weekdays"
+msgstr ""
+
+#: templates/part.eventform.php:125 templates/part.eventform.php:138
+msgid "Select days"
+msgstr ""
+
+#: templates/part.eventform.php:130
+msgid "and the events day of year."
+msgstr ""
+
+#: templates/part.eventform.php:143
+msgid "and the events day of month."
+msgstr ""
+
+#: templates/part.eventform.php:151
+msgid "Select months"
+msgstr ""
+
+#: templates/part.eventform.php:164
+msgid "Select weeks"
+msgstr ""
+
+#: templates/part.eventform.php:169
+msgid "and the events week of year."
+msgstr ""
+
+#: templates/part.eventform.php:175
+msgid "Interval"
+msgstr ""
+
+#: templates/part.eventform.php:181
+msgid "End"
+msgstr ""
+
+#: templates/part.eventform.php:193
+msgid "occurrences"
+msgstr ""
+
+#: templates/part.eventform.php:208
+msgid "Location"
+msgstr "Kokalekua"
+
+#: templates/part.eventform.php:210
+msgid "Location of the Event"
+msgstr "Gertaeraren kokalekua"
+
+#: templates/part.eventform.php:216
+msgid "Description"
+msgstr "Deskribapena"
+
+#: templates/part.eventform.php:218
+msgid "Description of the Event"
+msgstr "Gertaeraren deskribapena"
+
+#: templates/part.import.php:1
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the calendar"
+msgstr "Mesedez aukeratu egutegia"
+
+#: templates/part.import.php:10
+msgid "create a new calendar"
+msgstr ""
+
+#: templates/part.import.php:15
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import"
+msgstr "Importatu"
+
+#: templates/part.import.php:20
+msgid "Importing calendar"
+msgstr ""
+
+#: templates/part.import.php:23
+msgid "Calendar imported successfully"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Close Dialog"
+msgstr ""
+
+#: templates/part.newevent.php:1
+msgid "Create a new event"
+msgstr "Sortu gertaera berria"
+
+#: templates/settings.php:13
+msgid "Timezone"
+msgstr "Ordu-zona"
+
+#: templates/settings.php:30
+msgid "Check always for changes of the timezone"
+msgstr ""
+
+#: templates/settings.php:32
+msgid "Timeformat"
+msgstr "Ordu formatua"
+
+#: templates/settings.php:34
+msgid "24h"
+msgstr "24h"
+
+#: templates/settings.php:35
+msgid "12h"
+msgstr "12h"
+
+#: templates/settings.php:41
+msgid "Calendar CalDAV syncing address:"
+msgstr "Egutegiaren CalDAV sinkronizazio helbidea"
+
+
diff --git a/l10n/eu/contacts.po b/l10n/eu/contacts.po
new file mode 100644
index 00000000000..5eba801b1bf
--- /dev/null
+++ b/l10n/eu/contacts.po
@@ -0,0 +1,291 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Asier Urio Larrea <asieriko@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Basque (http://www.transifex.net/projects/p/owncloud/team/eu/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eu\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/activation.php:17 ajax/updateaddressbook.php:26
+msgid "Error (de)activating addressbook."
+msgstr ""
+
+#: ajax/addcard.php:79
+msgid "There was an error adding the contact."
+msgstr ""
+
+#: ajax/addproperty.php:39
+msgid "Cannot add empty property."
+msgstr ""
+
+#: ajax/addproperty.php:51
+msgid "At least one of the address fields has to be filled out."
+msgstr ""
+
+#: ajax/addproperty.php:77
+msgid "Error adding contact property."
+msgstr ""
+
+#: ajax/createaddressbook.php:20
+msgid "Error adding addressbook."
+msgstr ""
+
+#: ajax/createaddressbook.php:26
+msgid "Error activating addressbook."
+msgstr ""
+
+#: ajax/deleteproperty.php:40
+msgid "Error deleting contact property."
+msgstr ""
+
+#: ajax/setproperty.php:79
+msgid "Error updating contact property."
+msgstr ""
+
+#: ajax/updateaddressbook.php:20
+msgid "Error updating addressbook."
+msgstr ""
+
+#: appinfo/app.php:21 templates/settings.php:3
+msgid "Contacts"
+msgstr ""
+
+#: lib/app.php:42
+msgid "This is not your addressbook."
+msgstr "Hau ez da zure helbide liburua."
+
+#: lib/app.php:51 photo.php:34
+msgid "Contact could not be found."
+msgstr "Ezin izan da kontaktua aurkitu."
+
+#: lib/app.php:79
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr ""
+"vCard-aren inguruko informazioa okerra da. Mesedez birkargatu orrialdea."
+
+#: lib/app.php:91 templates/part.addcardform.php:54
+#: templates/part.property.php:45 templates/part.setpropertyform.php:7
+msgid "Address"
+msgstr "Helbidea"
+
+#: lib/app.php:92 templates/part.addcardform.php:43
+msgid "Telephone"
+msgstr "Telefonoa"
+
+#: lib/app.php:93 templates/part.addcardform.php:37
+#: templates/part.property.php:16 templates/part.setpropertyform.php:51
+msgid "Email"
+msgstr "Eposta"
+
+#: lib/app.php:94 templates/part.addcardform.php:27
+#: templates/part.property.php:9 templates/part.setpropertyform.php:54
+msgid "Organization"
+msgstr "Erakundea"
+
+#: lib/app.php:106 lib/app.php:113
+msgid "Work"
+msgstr "Lana"
+
+#: lib/app.php:107 lib/app.php:111
+msgid "Home"
+msgstr "Etxea"
+
+#: lib/app.php:112
+msgid "Mobile"
+msgstr "Mugikorra"
+
+#: lib/app.php:114
+msgid "Text"
+msgstr "Testua"
+
+#: lib/app.php:115
+msgid "Voice"
+msgstr "Ahotsa"
+
+#: lib/app.php:116
+msgid "Fax"
+msgstr "Fax-a"
+
+#: lib/app.php:117
+msgid "Video"
+msgstr "Bideoa"
+
+#: lib/app.php:118
+msgid "Pager"
+msgstr "Bilagailua"
+
+#: lib/search.php:22
+msgid "Contact"
+msgstr ""
+
+#: photo.php:40
+msgid "This is not your contact."
+msgstr "Hau ez da zure kontaktua."
+
+#: photo.php:48
+msgid "This card is not RFC compatible."
+msgstr "Txartel hau ez da RFC bateragarria."
+
+#: photo.php:85
+msgid "This card does not contain a photo."
+msgstr "Txartel honek ez dauka argazkirik."
+
+#: templates/index.php:6
+msgid "Add Contact"
+msgstr "Gehitu Kontaktua"
+
+#: templates/index.php:7
+msgid "Addressbooks"
+msgstr ""
+
+#: templates/part.addcardform.php:8
+msgid "Addressbook"
+msgstr ""
+
+#: templates/part.addcardform.php:21
+msgid "Name"
+msgstr "Izena"
+
+#: templates/part.addcardform.php:57 templates/part.details.php:43
+#: templates/part.details.php:79 templates/part.setpropertyform.php:10
+#: templates/part.setpropertyform.php:47
+msgid "Type"
+msgstr ""
+
+#: templates/part.addcardform.php:65 templates/part.details.php:49
+#: templates/part.setpropertyform.php:16
+msgid "PO Box"
+msgstr "Posta kutxa"
+
+#: templates/part.addcardform.php:72 templates/part.details.php:53
+#: templates/part.setpropertyform.php:20
+msgid "Extended"
+msgstr "Hedatua"
+
+#: templates/part.addcardform.php:78 templates/part.details.php:57
+#: templates/part.setpropertyform.php:24
+msgid "Street"
+msgstr "Kalea"
+
+#: templates/part.addcardform.php:84 templates/part.details.php:61
+#: templates/part.setpropertyform.php:28
+msgid "City"
+msgstr "Hiria"
+
+#: templates/part.addcardform.php:90 templates/part.details.php:65
+#: templates/part.setpropertyform.php:32
+msgid "Region"
+msgstr "Eskualdea"
+
+#: templates/part.addcardform.php:96 templates/part.details.php:69
+#: templates/part.setpropertyform.php:36
+msgid "Zipcode"
+msgstr "Posta Kodea"
+
+#: templates/part.addcardform.php:102 templates/part.details.php:73
+#: templates/part.setpropertyform.php:40
+msgid "Country"
+msgstr "Herrialdea"
+
+#: templates/part.addcardform.php:109
+msgid "Create Contact"
+msgstr "Sortu Kontaktua"
+
+#: templates/part.chooseaddressbook.php:1
+msgid "Choose active Address Books"
+msgstr ""
+
+#: templates/part.chooseaddressbook.php:16
+msgid "New Address Book"
+msgstr ""
+
+#: templates/part.chooseaddressbook.php:21
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "CardDav Link"
+msgstr ""
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Download"
+msgstr ""
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Edit"
+msgstr "Editatu"
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Delete"
+msgstr "Ezabatu"
+
+#: templates/part.details.php:3
+msgid "Download contact"
+msgstr ""
+
+#: templates/part.details.php:4
+msgid "Delete contact"
+msgstr ""
+
+#: templates/part.details.php:34
+msgid "Add"
+msgstr ""
+
+#: templates/part.editaddressbook.php:9
+msgid "New Addressbook"
+msgstr ""
+
+#: templates/part.editaddressbook.php:9
+msgid "Edit Addressbook"
+msgstr ""
+
+#: templates/part.editaddressbook.php:12
+msgid "Displayname"
+msgstr ""
+
+#: templates/part.editaddressbook.php:23
+msgid "Active"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Save"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Submit"
+msgstr ""
+
+#: templates/part.editaddressbook.php:30
+msgid "Cancel"
+msgstr ""
+
+#: templates/part.property.php:3
+msgid "Birthday"
+msgstr "Jaioteguna"
+
+#: templates/part.property.php:23
+msgid "Preferred"
+msgstr ""
+
+#: templates/part.property.php:23 templates/part.setpropertyform.php:45
+msgid "Phone"
+msgstr "Telefonoa"
+
+#: templates/part.setpropertyform.php:57
+msgid "Update"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "CardDAV syncing address:"
+msgstr ""
+
+
diff --git a/l10n/eu/core.po b/l10n/eu/core.po
new file mode 100644
index 00000000000..4508c5380f0
--- /dev/null
+++ b/l10n/eu/core.po
@@ -0,0 +1,171 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Asier Urio Larrea <asieriko@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Basque (http://www.transifex.net/projects/p/owncloud/team/eu/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eu\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: lostpassword/index.php:24
+msgid "Owncloud password reset"
+msgstr ""
+
+#: lostpassword/templates/email.php:1
+msgid "Use the following link to reset your password: {link}"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr "Zure pashitza berrezartzeko lotura bat jasoko duzu Epostaren bidez."
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Requested"
+msgstr "Eskatuta"
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr "Saio hasierak huts egin du!"
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:22
+#: templates/login.php:8
+msgid "Username"
+msgstr "Erabiltzaile izena"
+
+#: lostpassword/templates/lostpassword.php:14
+msgid "Request reset"
+msgstr "Eskaera berrezarri da"
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr "Zure pasahitza berrezarri da"
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr "Pasahitz berria"
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr "Berrezarri pasahitza"
+
+#: strings.php:5
+msgid "Personal"
+msgstr "Pertsonala"
+
+#: strings.php:6
+msgid "Users"
+msgstr "Erabiltzaileak"
+
+#: strings.php:7
+msgid "Apps"
+msgstr "Aplikazioak"
+
+#: strings.php:8
+msgid "Admin"
+msgstr "Kudeatzailea"
+
+#: strings.php:9
+msgid "Help"
+msgstr "Laguntza"
+
+#: templates/404.php:12
+msgid "Cloud not found"
+msgstr "Ez da hodeia aurkitu"
+
+#: templates/installation.php:20
+msgid "Create an <strong>admin account</strong>"
+msgstr "Sortu <strong>kudeatzaile kontu<strong> bat"
+
+#: templates/installation.php:26 templates/login.php:12
+msgid "Password"
+msgstr "Pasahitza"
+
+#: templates/installation.php:32
+msgid "Advanced"
+msgstr "Aurreratua"
+
+#: templates/installation.php:34
+msgid "Data folder"
+msgstr "Datuen karpeta"
+
+#: templates/installation.php:41
+msgid "Configure the database"
+msgstr "Konfiguratu datu basea"
+
+#: templates/installation.php:46 templates/installation.php:57
+#: templates/installation.php:67
+msgid "will be used"
+msgstr "erabiliko da"
+
+#: templates/installation.php:79
+msgid "Database user"
+msgstr "Datubasearen erabiltzailea"
+
+#: templates/installation.php:83
+msgid "Database password"
+msgstr "Datubasearen pasahitza"
+
+#: templates/installation.php:87
+msgid "Database name"
+msgstr "Datubasearen izena"
+
+#: templates/installation.php:93
+msgid "Database host"
+msgstr "Datubasearen hostalaria"
+
+#: templates/installation.php:98
+msgid "Finish setup"
+msgstr "Bukatu konfigurazioa"
+
+#: templates/layout.guest.php:35
+msgid "web services under your control"
+msgstr ""
+
+#: templates/layout.user.php:34
+msgid "Log out"
+msgstr "Saioa bukatu"
+
+#: templates/layout.user.php:46 templates/layout.user.php:47
+msgid "Settings"
+msgstr "Ezarpenak"
+
+#: templates/login.php:5
+msgid "Lost your password?"
+msgstr "Galdu duzu pasahitza?"
+
+#: templates/login.php:15
+msgid "remember"
+msgstr "gogoratu"
+
+#: templates/login.php:16
+msgid "Log in"
+msgstr ""
+
+#: templates/logout.php:1
+msgid "You are logged out."
+msgstr "Zure saioa bukatu da."
+
+#: templates/part.pagenavi.php:3
+msgid "prev"
+msgstr "aurrekoa"
+
+#: templates/part.pagenavi.php:20
+msgid "next"
+msgstr "hurrengoa"
+
+
diff --git a/l10n/eu/files.po b/l10n/eu/files.po
new file mode 100644
index 00000000000..d2af4c2d58f
--- /dev/null
+++ b/l10n/eu/files.po
@@ -0,0 +1,115 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Asier Urio Larrea <asieriko@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Basque (http://www.transifex.net/projects/p/owncloud/team/eu/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eu\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/upload.php:19
+msgid "There is no error, the file uploaded with success"
+msgstr "Ez da arazorik izan, fitxategia ongi igo da"
+
+#: ajax/upload.php:20
+msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
+msgstr ""
+"Igotako fitxategiaren tamaina php.ini-ko upload_max_filesize direktiban "
+"adierazitakoa baino handiagoa da"
+
+#: ajax/upload.php:21
+msgid ""
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
+"the HTML form"
+msgstr ""
+"Igotako fitxategiaren tamaina HTML inprimakiko MAX_FILESIZE direktiban "
+"adierazitakoa baino handiagoa da"
+
+#: ajax/upload.php:22
+msgid "The uploaded file was only partially uploaded"
+msgstr "Igotako fitxategiaren zati bat baino gehiago ez da igo"
+
+#: ajax/upload.php:23
+msgid "No file was uploaded"
+msgstr "Ez da fitxategirik igo"
+
+#: ajax/upload.php:24
+msgid "Missing a temporary folder"
+msgstr "Aldi baterako karpeta falta da"
+
+#: appinfo/app.php:8
+msgid "Files"
+msgstr "Fitxategiak"
+
+#: templates/admin.php:5
+msgid "Maximum upload size"
+msgstr "Igo daitekeen gehienezko tamaina"
+
+#: templates/index.php:7
+msgid "New"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Text file"
+msgstr ""
+
+#: templates/index.php:11
+msgid "Folder"
+msgstr ""
+
+#: templates/index.php:12
+msgid "From the web"
+msgstr ""
+
+#: templates/index.php:22
+msgid "Upload"
+msgstr "Igo"
+
+#: templates/index.php:35
+msgid "Nothing in here. Upload something!"
+msgstr "Ez dago ezer. Igo zerbait!"
+
+#: templates/index.php:43
+msgid "Name"
+msgstr "Izena"
+
+#: templates/index.php:45
+msgid "Download"
+msgstr "Deskargatu"
+
+#: templates/index.php:49
+msgid "Size"
+msgstr "Tamaina"
+
+#: templates/index.php:50
+msgid "Modified"
+msgstr "Aldatuta"
+
+#: templates/index.php:50
+msgid "Delete"
+msgstr "Ezabatu"
+
+#: templates/index.php:58
+msgid "Upload too large"
+msgstr "Igotakoa handiegia da"
+
+#: templates/index.php:60
+msgid ""
+"The files you are trying to upload exceed the maximum size for file uploads "
+"on this server."
+msgstr ""
+"Igotzen saiatzen ari zaren fitxategiak zerbitzari honek igotzeko onartzen "
+"duena baino handiagoak dira."
+
+
diff --git a/l10n/eu/gallery.po b/l10n/eu/gallery.po
new file mode 100644
index 00000000000..e2dc7b08f2a
--- /dev/null
+++ b/l10n/eu/gallery.po
@@ -0,0 +1,32 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:48+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Basque (http://www.transifex.net/projects/p/owncloud/team/eu/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eu\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:41
+msgid "Gallery"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Rescan"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+
diff --git a/l10n/eu/media.po b/l10n/eu/media.po
new file mode 100644
index 00000000000..8fbf9e464f4
--- /dev/null
+++ b/l10n/eu/media.po
@@ -0,0 +1,65 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Asier Urio Larrea <asieriko@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Basque (http://www.transifex.net/projects/p/owncloud/team/eu/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eu\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:32
+msgid "Music"
+msgstr "Musika"
+
+#: templates/music.php:3 templates/player.php:13
+msgid "Play"
+msgstr "Erreproduzitu"
+
+#: templates/music.php:4 templates/music.php:26 templates/player.php:14
+msgid "Pause"
+msgstr "Pausarazi"
+
+#: templates/music.php:5
+msgid "Previous"
+msgstr "Aurrekoa"
+
+#: templates/music.php:6 templates/player.php:15
+msgid "Next"
+msgstr "Hurrengoa"
+
+#: templates/music.php:7
+msgid "Mute"
+msgstr "Mututu"
+
+#: templates/music.php:8
+msgid "Unmute"
+msgstr "Ez Mututu"
+
+#: templates/music.php:25
+msgid "Rescan Collection"
+msgstr "Bireskaneatu Bilduma"
+
+#: templates/music.php:37
+msgid "Artist"
+msgstr "Artista"
+
+#: templates/music.php:38
+msgid "Album"
+msgstr "Albuma"
+
+#: templates/music.php:39
+msgid "Title"
+msgstr "Izenburua"
+
+
diff --git a/l10n/eu/settings.po b/l10n/eu/settings.po
new file mode 100644
index 00000000000..e4655b60a08
--- /dev/null
+++ b/l10n/eu/settings.po
@@ -0,0 +1,155 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Asier Urio Larrea <asieriko@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Basque (http://www.transifex.net/projects/p/owncloud/team/eu/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eu\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/lostpassword.php:14
+msgid "email Changed"
+msgstr ""
+
+#: ajax/lostpassword.php:16 ajax/openid.php:17 ajax/setlanguage.php:16
+msgid "Invalid request"
+msgstr "Baliogabeko eskaria"
+
+#: ajax/openid.php:15
+msgid "OpenID Changed"
+msgstr "OpenID aldatuta"
+
+#: ajax/setlanguage.php:14
+msgid "Language changed"
+msgstr "Hizkuntza aldatuta"
+
+#: templates/admin.php:13
+msgid "Log level"
+msgstr ""
+
+#: templates/apps.php:8
+msgid "Add your application"
+msgstr "Gehitu zure programa"
+
+#: templates/apps.php:21
+msgid "Select an App"
+msgstr "Aukeratu Programa bat"
+
+#: templates/apps.php:23
+msgid "-licensed"
+msgstr "lizentziarekin."
+
+#: templates/apps.php:23
+msgid "by"
+msgstr " Egilea:"
+
+#: templates/help.php:8
+msgid "Ask a question"
+msgstr "Egin galdera bat"
+
+#: templates/help.php:20
+msgid "Problems connecting to help database."
+msgstr "Arazoak daude laguntza datubasera konektatzeko."
+
+#: templates/help.php:21
+msgid "Go there manually."
+msgstr "Joan hara eskuz."
+
+#: templates/help.php:29
+msgid "Answer"
+msgstr "Erantzun"
+
+#: templates/personal.php:8
+msgid "You use"
+msgstr "Erabiltzen ari zara "
+
+#: templates/personal.php:8
+msgid "of the available"
+msgstr "eta guztira erabil dezakezu "
+
+#: templates/personal.php:13
+msgid "Your password got changed"
+msgstr "Zure pasahitza aldatu da"
+
+#: templates/personal.php:14
+msgid "Unable to change your password"
+msgstr "Ezin izan da zure pasahitza aldatu"
+
+#: templates/personal.php:15
+msgid "Current password"
+msgstr "Uneko pasahitza"
+
+#: templates/personal.php:16
+msgid "New password"
+msgstr "Pasahitz berria"
+
+#: templates/personal.php:17
+msgid "show"
+msgstr "erakutsi"
+
+#: templates/personal.php:18
+msgid "Change password"
+msgstr "Aldatu pasahitza"
+
+#: templates/personal.php:24
+msgid "Email"
+msgstr ""
+
+#: templates/personal.php:25
+msgid "Your email address"
+msgstr ""
+
+#: templates/personal.php:26
+msgid "Fill in an email address to enable password recovery"
+msgstr ""
+
+#: templates/personal.php:32 templates/personal.php:33
+msgid "Language"
+msgstr "Hizkuntza"
+
+#: templates/personal.php:38
+msgid "Help translate"
+msgstr ""
+
+#: templates/personal.php:45
+msgid "use this address to connect to your ownCloud in your file manager"
+msgstr ""
+"erabili helbide hau zure fitxategi kudeatzailean zure ownCloudera "
+"konektatzeko"
+
+#: templates/users.php:15 templates/users.php:30
+msgid "Name"
+msgstr "Izena"
+
+#: templates/users.php:16 templates/users.php:31
+msgid "Password"
+msgstr "Pasahitza"
+
+#: templates/users.php:17 templates/users.php:32 templates/users.php:46
+msgid "Groups"
+msgstr "Taldeak"
+
+#: templates/users.php:23
+msgid "Create"
+msgstr "Sortu"
+
+#: templates/users.php:33
+msgid "Quota"
+msgstr ""
+
+#: templates/users.php:58
+msgid "Delete"
+msgstr "Ezabatu"
+
+
diff --git a/l10n/fr/calendar.po b/l10n/fr/calendar.po
index 3c961b669c8..2b5623cf569 100644
--- a/l10n/fr/calendar.po
+++ b/l10n/fr/calendar.po
@@ -3,14 +3,18 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# <rom1dep@gmail.com>, 2011.
+# <fboulogne@april.org>, 2011.
+# <gp4004@arghh.org>, 2011.
+# Jan-Christoph Borchardt <jan@unhosted.org>, 2011.
+# <rom1dep@gmail.com>, 2011, 2012.
+# Yann Yann <chezyann@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: French (http://www.transifex.net/projects/p/owncloud/team/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,321 +22,403 @@ msgstr ""
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
-#: ajax/createcalendar.php:18 ajax/settimezone.php:19
-#: ajax/updatecalendar.php:18
-msgid "Authentication error"
-msgstr "Erreur d'authentification"
+#: ajax/guesstimezone.php:42
+msgid "New Timezone:"
+msgstr "Nouveau fuseau horaire :"
-#: ajax/editeventform.php:25
-msgid "Wrong calendar"
-msgstr "Mauvais calendrier"
-
-#: ajax/settimezone.php:27
+#: ajax/settimezone.php:22
msgid "Timezone changed"
msgstr "Fuseau horaire modifié"
-#: ajax/settimezone.php:29
+#: ajax/settimezone.php:24
msgid "Invalid request"
msgstr "Requête invalide"
-#: appinfo/app.php:19 templates/part.eventform.php:27
-#: templates/part.eventinfo.php:18
+#: appinfo/app.php:20 templates/calendar.php:13
+#: templates/part.eventform.php:20
msgid "Calendar"
msgstr "Calendrier"
-#: lib/object.php:292
+#: lib/app.php:19
+msgid "Wrong calendar"
+msgstr "Mauvais calendrier"
+
+#: lib/app.php:60 lib/object.php:332
msgid "Birthday"
msgstr "Anniversaire"
-#: lib/object.php:293
+#: lib/app.php:61 lib/object.php:333
msgid "Business"
-msgstr "Business"
+msgstr "Professionnel"
-#: lib/object.php:294
+#: lib/app.php:62 lib/object.php:334
msgid "Call"
msgstr "Appel"
-#: lib/object.php:295
+#: lib/app.php:63 lib/object.php:335
msgid "Clients"
-msgstr "Clients"
+msgstr "Clientèle"
-#: lib/object.php:296
+#: lib/app.php:64 lib/object.php:336
msgid "Deliverer"
-msgstr "Livreur"
+msgstr "Livraison"
-#: lib/object.php:297
+#: lib/app.php:65 lib/object.php:337
msgid "Holidays"
msgstr "Vacances"
-#: lib/object.php:298
+#: lib/app.php:66 lib/object.php:338
msgid "Ideas"
msgstr "Idées"
-#: lib/object.php:299
+#: lib/app.php:67 lib/object.php:339
msgid "Journey"
-msgstr "Journée"
+msgstr "Déplacement"
-#: lib/object.php:300
+#: lib/app.php:68 lib/object.php:340
msgid "Jubilee"
msgstr "Jubilé"
-#: lib/object.php:301
+#: lib/app.php:69 lib/object.php:341
msgid "Meeting"
msgstr "Meeting"
-#: lib/object.php:302
+#: lib/app.php:70 lib/object.php:342
msgid "Other"
msgstr "Autre"
-#: lib/object.php:303
+#: lib/app.php:71 lib/object.php:343
msgid "Personal"
msgstr "Personnel"
-#: lib/object.php:304
+#: lib/app.php:72 lib/object.php:344
msgid "Projects"
msgstr "Projets"
-#: lib/object.php:305
+#: lib/app.php:73 lib/object.php:345
msgid "Questions"
msgstr "Questions"
-#: lib/object.php:306
+#: lib/app.php:74 lib/object.php:346
msgid "Work"
msgstr "Travail"
-#: lib/object.php:313
+#: lib/object.php:353
msgid "Does not repeat"
msgstr "Pas de répétition"
-#: lib/object.php:314
+#: lib/object.php:354
msgid "Daily"
msgstr "Tous les jours"
-#: lib/object.php:315
+#: lib/object.php:355
msgid "Weekly"
-msgstr "Toutes les semaines"
+msgstr "Hebdomadaire"
-#: lib/object.php:316
+#: lib/object.php:356
msgid "Every Weekday"
-msgstr "Chaque jour de la semaine"
+msgstr "Quotidien"
-#: lib/object.php:317
+#: lib/object.php:357
msgid "Bi-Weekly"
-msgstr "Bimestriel"
+msgstr "Bi-hebdomadaire"
-#: lib/object.php:318
+#: lib/object.php:358
msgid "Monthly"
-msgstr "Tous les mois"
+msgstr "Mensuel"
-#: lib/object.php:319
+#: lib/object.php:359
msgid "Yearly"
-msgstr "Tous les ans"
+msgstr "Annuel"
-#: lib/object.php:337
-msgid "Not an array"
-msgstr "Ce n'est pas un tableau"
+#: lib/object.php:366
+msgid "never"
+msgstr "jamais"
-#: templates/calendar.php:3
-msgid "All day"
-msgstr "Tous les jours"
+#: lib/object.php:367
+msgid "by occurrences"
+msgstr "par occurrences"
-#: templates/calendar.php:32
-msgid "Sunday"
-msgstr "Dimanche"
+#: lib/object.php:368
+msgid "by date"
+msgstr "par date"
+
+#: lib/object.php:375
+msgid "by monthday"
+msgstr "par jour du mois"
+
+#: lib/object.php:376
+msgid "by weekday"
+msgstr "par jour de la semaine"
-#: templates/calendar.php:32
+#: lib/object.php:383 templates/lAfix.php:3
msgid "Monday"
msgstr "Lundi"
-#: templates/calendar.php:32
+#: lib/object.php:384 templates/lAfix.php:4
msgid "Tuesday"
msgstr "Mardi"
-#: templates/calendar.php:32
+#: lib/object.php:385 templates/lAfix.php:5
msgid "Wednesday"
msgstr "Mercredi"
-#: templates/calendar.php:32
+#: lib/object.php:386 templates/lAfix.php:6
msgid "Thursday"
msgstr "Jeudi"
-#: templates/calendar.php:32
+#: lib/object.php:387 templates/lAfix.php:7
msgid "Friday"
msgstr "Vendredi"
-#: templates/calendar.php:32
+#: lib/object.php:388 templates/lAfix.php:8
msgid "Saturday"
msgstr "Samedi"
-#: templates/calendar.php:33
-msgid "Sun."
-msgstr "Dim."
+#: lib/object.php:389 templates/lAfix.php:2
+msgid "Sunday"
+msgstr "Dimanche"
-#: templates/calendar.php:33
-msgid "Mon."
-msgstr "Lun."
+#: lib/object.php:396
+msgid "events week of month"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Tue."
-msgstr "Mar."
+#: lib/object.php:397
+msgid "first"
+msgstr "premier"
-#: templates/calendar.php:33
-msgid "Wed."
-msgstr "Mer."
+#: lib/object.php:398
+msgid "second"
+msgstr "second"
-#: templates/calendar.php:33
-msgid "Thu."
-msgstr "Jeu."
+#: lib/object.php:399
+msgid "third"
+msgstr "troisième"
-#: templates/calendar.php:33
-msgid "Fri."
-msgstr "Ven."
+#: lib/object.php:400
+msgid "fourth"
+msgstr "quatrième"
-#: templates/calendar.php:33
-msgid "Sat."
-msgstr "Sam."
+#: lib/object.php:401
+msgid "fifth"
+msgstr "cinquième"
-#: templates/calendar.php:34
+#: lib/object.php:402
+msgid "last"
+msgstr "dernier"
+
+#: lib/object.php:424 templates/lAfix.php:16
msgid "January"
msgstr "Janvier"
-#: templates/calendar.php:34
+#: lib/object.php:425 templates/lAfix.php:17
msgid "February"
msgstr "Février"
-#: templates/calendar.php:34
+#: lib/object.php:426 templates/lAfix.php:18
msgid "March"
msgstr "Mars"
-#: templates/calendar.php:34
+#: lib/object.php:427 templates/lAfix.php:19
msgid "April"
msgstr "Avril"
-#: templates/calendar.php:34
+#: lib/object.php:428 templates/lAfix.php:20
msgid "May"
msgstr "Mai"
-#: templates/calendar.php:34
+#: lib/object.php:429 templates/lAfix.php:21
msgid "June"
msgstr "Juin"
-#: templates/calendar.php:34
+#: lib/object.php:430 templates/lAfix.php:22
msgid "July"
msgstr "Juillet"
-#: templates/calendar.php:34
+#: lib/object.php:431 templates/lAfix.php:23
msgid "August"
msgstr "Août"
-#: templates/calendar.php:34
+#: lib/object.php:432 templates/lAfix.php:24
msgid "September"
msgstr "Septembre"
-#: templates/calendar.php:34
+#: lib/object.php:433 templates/lAfix.php:25
msgid "October"
msgstr "Octobre"
-#: templates/calendar.php:34
+#: lib/object.php:434 templates/lAfix.php:26
msgid "November"
msgstr "Novembre"
-#: templates/calendar.php:34
+#: lib/object.php:435 templates/lAfix.php:27
msgid "December"
msgstr "Décembre"
-#: templates/calendar.php:35
-msgid "Jan."
-msgstr "Jan."
-
-#: templates/calendar.php:35
-msgid "Feb."
-msgstr "Fév."
+#: lib/object.php:441
+msgid "by events date"
+msgstr "par date d’événements"
-#: templates/calendar.php:35
-msgid "Mar."
-msgstr "Mar."
+#: lib/object.php:442
+msgid "by yearday(s)"
+msgstr "par jour(s) de l'année"
-#: templates/calendar.php:35
-msgid "Apr."
-msgstr "Avr."
+#: lib/object.php:443
+msgid "by weeknumber(s)"
+msgstr "par numéro de semaine(s)"
-#: templates/calendar.php:35
-msgid "May."
-msgstr "Peut-être *****"
+#: lib/object.php:444
+msgid "by day and month"
+msgstr "par jour et mois"
-#: templates/calendar.php:35
-msgid "Jun."
-msgstr "Juin"
+#: lib/object.php:467
+msgid "Not an array"
+msgstr "Ce n'est pas un tableau"
-#: templates/calendar.php:35
-msgid "Jul."
-msgstr "Juil."
+#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+msgid "Date"
+msgstr "Date"
-#: templates/calendar.php:35
-msgid "Aug."
-msgstr "Aoû."
+#: lib/search.php:40
+msgid "Cal."
+msgstr "Cal."
-#: templates/calendar.php:35
-msgid "Sep."
-msgstr "Sep."
+#: templates/calendar.php:10
+msgid "All day"
+msgstr "Journée entière"
-#: templates/calendar.php:35
-msgid "Oct."
-msgstr "Oct."
+#: templates/calendar.php:11
+msgid "Missing fields"
+msgstr "Champs manquants"
-#: templates/calendar.php:35
-msgid "Nov."
-msgstr "Nov."
+#: templates/calendar.php:12 templates/part.eventform.php:3
+msgid "Title"
+msgstr "Titre"
-#: templates/calendar.php:35
-msgid "Dec."
-msgstr "Déc."
+#: templates/calendar.php:14
+msgid "From Date"
+msgstr "De la date"
-#: templates/calendar.php:36 templates/calendar.php:50
-#: templates/calendar.php:116
-msgid "Week"
-msgstr "Semaine"
+#: templates/calendar.php:15
+msgid "From Time"
+msgstr "De l'heure"
-#: templates/calendar.php:37 templates/calendar.php:51
-msgid "Weeks"
-msgstr "Semaines"
+#: templates/calendar.php:16
+msgid "To Date"
+msgstr "A la date"
-#: templates/calendar.php:38
-msgid "More before {startdate}"
-msgstr "Voir plus avant {startdate}"
+#: templates/calendar.php:17
+msgid "To Time"
+msgstr "A l'heure"
-#: templates/calendar.php:39
-msgid "More after {enddate}"
-msgstr "Voir plus après {enddate}"
+#: templates/calendar.php:18
+msgid "The event ends before it starts"
+msgstr "L'évènement s'est terminé avant qu'il ne commence"
-#: templates/calendar.php:49
-msgid "Day"
-msgstr "Jour"
+#: templates/calendar.php:19
+msgid "There was a database fail"
+msgstr "Il y a eu un échec dans la base de donnée"
#: templates/calendar.php:52
+msgid "Week"
+msgstr "Semaine"
+
+#: templates/calendar.php:53
msgid "Month"
msgstr "Mois"
-#: templates/calendar.php:53
+#: templates/calendar.php:54
msgid "List"
msgstr "Liste"
-#: templates/calendar.php:58
+#: templates/calendar.php:59
msgid "Today"
msgstr "Aujourd'hui"
-#: templates/calendar.php:59
+#: templates/calendar.php:60
msgid "Calendars"
msgstr "Calendriers"
-#: templates/calendar.php:76 templates/calendar.php:94
-msgid "Time"
-msgstr "Heure"
-
-#: templates/calendar.php:169
+#: templates/calendar.php:78
msgid "There was a fail, while parsing the file."
msgstr "Une erreur est survenue pendant la lecture du fichier."
+#: templates/lAfix.php:9
+msgid "Sun."
+msgstr "Dim."
+
+#: templates/lAfix.php:10
+msgid "Mon."
+msgstr "Lun."
+
+#: templates/lAfix.php:11
+msgid "Tue."
+msgstr "Mar."
+
+#: templates/lAfix.php:12
+msgid "Wed."
+msgstr "Mer."
+
+#: templates/lAfix.php:13
+msgid "Thu."
+msgstr "Jeu."
+
+#: templates/lAfix.php:14
+msgid "Fri."
+msgstr "Ven."
+
+#: templates/lAfix.php:15
+msgid "Sat."
+msgstr "Sam."
+
+#: templates/lAfix.php:28
+msgid "Jan."
+msgstr "Jan."
+
+#: templates/lAfix.php:29
+msgid "Feb."
+msgstr "Fév."
+
+#: templates/lAfix.php:30
+msgid "Mar."
+msgstr "Mar."
+
+#: templates/lAfix.php:31
+msgid "Apr."
+msgstr "Avr."
+
+#: templates/lAfix.php:32
+msgid "May."
+msgstr "Mai."
+
+#: templates/lAfix.php:33
+msgid "Jun."
+msgstr "Jui."
+
+#: templates/lAfix.php:34
+msgid "Jul."
+msgstr "Jit."
+
+#: templates/lAfix.php:35
+msgid "Aug."
+msgstr "Aou."
+
+#: templates/lAfix.php:36
+msgid "Sep."
+msgstr "Sep."
+
+#: templates/lAfix.php:37
+msgid "Oct."
+msgstr "Oct."
+
+#: templates/lAfix.php:38
+msgid "Nov."
+msgstr "Nov."
+
+#: templates/lAfix.php:39
+msgid "Dec."
+msgstr "Déc."
+
#: templates/part.choosecalendar.php:1
msgid "Choose active calendars"
msgstr "Choix des calendriers actifs"
@@ -351,14 +437,13 @@ msgid "Download"
msgstr "Télécharger"
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.eventinfo.php:64
msgid "Edit"
msgstr "Éditer"
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.editevent.php:8
+#: templates/part.editevent.php:9
msgid "Delete"
-msgstr ""
+msgstr "Supprimer"
#: templates/part.editcalendar.php:9
msgid "New calendar"
@@ -376,90 +461,181 @@ msgstr "Nom d'affichage"
msgid "Active"
msgstr "Actif"
-#: templates/part.editcalendar.php:29 templates/part.eventform.php:88
-#: templates/part.eventinfo.php:58
-msgid "Description"
-msgstr "Description"
-
-#: templates/part.editcalendar.php:35
+#: templates/part.editcalendar.php:29
msgid "Calendar color"
msgstr "Couleur du calendrier"
-#: templates/part.editcalendar.php:41
+#: templates/part.editcalendar.php:42
msgid "Save"
msgstr "Sauvegarder"
-#: templates/part.editcalendar.php:41 templates/part.editevent.php:7
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
#: templates/part.newevent.php:6
msgid "Submit"
msgstr "Soumettre"
-#: templates/part.editcalendar.php:42
+#: templates/part.editcalendar.php:43
msgid "Cancel"
msgstr "Annuler"
-#: templates/part.editevent.php:1 templates/part.eventinfo.php:1
+#: templates/part.editevent.php:1
msgid "Edit an event"
msgstr "Éditer un événement"
-#: templates/part.eventform.php:3 templates/part.eventinfo.php:4
-msgid "Title"
-msgstr "Titre"
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr "Exporter"
#: templates/part.eventform.php:5
msgid "Title of the Event"
msgstr "Titre de l'événement"
-#: templates/part.eventform.php:9 templates/part.eventinfo.php:9
-msgid "Location"
-msgstr "Localisation"
-
#: templates/part.eventform.php:11
-msgid "Location of the Event"
-msgstr "Localisation de l'événement"
-
-#: templates/part.eventform.php:17 templates/part.eventinfo.php:16
msgid "Category"
msgstr "Catégorie"
-#: templates/part.eventform.php:19
+#: templates/part.eventform.php:13
msgid "Select category"
msgstr "Sélectionner une catégorie"
-#: templates/part.eventform.php:45 templates/part.eventinfo.php:28
+#: templates/part.eventform.php:37
msgid "All Day Event"
-msgstr "Événement de toute une journée"
+msgstr "Journée entière"
-#: templates/part.eventform.php:49 templates/part.eventinfo.php:31
+#: templates/part.eventform.php:41
msgid "From"
msgstr "De"
-#: templates/part.eventform.php:57 templates/part.eventinfo.php:38
+#: templates/part.eventform.php:49
msgid "To"
msgstr "À"
-#: templates/part.eventform.php:65 templates/part.eventinfo.php:44
+#: templates/part.eventform.php:57
+msgid "Advanced options"
+msgstr "Options avancées"
+
+#: templates/part.eventform.php:61
msgid "Repeat"
msgstr "Répétition"
-#: templates/part.eventform.php:81 templates/part.eventinfo.php:51
-msgid "Attendees"
-msgstr "Personnes présentes"
+#: templates/part.eventform.php:68
+msgid "Advanced"
+msgstr "Avancé"
+
+#: templates/part.eventform.php:112
+msgid "Select weekdays"
+msgstr "Sélection des jours de la semaine"
+
+#: templates/part.eventform.php:125 templates/part.eventform.php:138
+msgid "Select days"
+msgstr "Sélection des jours"
+
+#: templates/part.eventform.php:130
+msgid "and the events day of year."
+msgstr ""
+
+#: templates/part.eventform.php:143
+msgid "and the events day of month."
+msgstr ""
+
+#: templates/part.eventform.php:151
+msgid "Select months"
+msgstr "Sélection des mois"
+
+#: templates/part.eventform.php:164
+msgid "Select weeks"
+msgstr "Sélection des semaines"
+
+#: templates/part.eventform.php:169
+msgid "and the events week of year."
+msgstr ""
+
+#: templates/part.eventform.php:175
+msgid "Interval"
+msgstr "Intervalle"
+
+#: templates/part.eventform.php:181
+msgid "End"
+msgstr "Fin"
+
+#: templates/part.eventform.php:193
+msgid "occurrences"
+msgstr "occurrences"
+
+#: templates/part.eventform.php:208
+msgid "Location"
+msgstr "Emplacement"
+
+#: templates/part.eventform.php:210
+msgid "Location of the Event"
+msgstr "Emplacement de l'événement"
-#: templates/part.eventform.php:89
+#: templates/part.eventform.php:216
+msgid "Description"
+msgstr "Description"
+
+#: templates/part.eventform.php:218
msgid "Description of the Event"
msgstr "Description de l'événement"
-#: templates/part.eventinfo.php:63
-msgid "Close"
-msgstr "Fermer"
+#: templates/part.import.php:1
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the calendar"
+msgstr "Choisissez le calendrier svp"
+
+#: templates/part.import.php:10
+msgid "create a new calendar"
+msgstr ""
+
+#: templates/part.import.php:15
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import"
+msgstr "Importer"
+
+#: templates/part.import.php:20
+msgid "Importing calendar"
+msgstr ""
+
+#: templates/part.import.php:23
+msgid "Calendar imported successfully"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Close Dialog"
+msgstr ""
#: templates/part.newevent.php:1
msgid "Create a new event"
msgstr "Créer un nouvel événement"
-#: templates/settings.php:11
+#: templates/settings.php:13
msgid "Timezone"
msgstr "Fuseau horaire"
+#: templates/settings.php:30
+msgid "Check always for changes of the timezone"
+msgstr "Toujours vérifier d'éventuels changements de fuseau horaire"
+
+#: templates/settings.php:32
+msgid "Timeformat"
+msgstr "Format de l'heure"
+
+#: templates/settings.php:34
+msgid "24h"
+msgstr "24h"
+
+#: templates/settings.php:35
+msgid "12h"
+msgstr "12h"
+
+#: templates/settings.php:41
+msgid "Calendar CalDAV syncing address:"
+msgstr "Adresse de synchronisation du calendrier CalDAV :"
+
diff --git a/l10n/fr/contacts.po b/l10n/fr/contacts.po
index 1a7dea24d8d..90e4474072b 100644
--- a/l10n/fr/contacts.po
+++ b/l10n/fr/contacts.po
@@ -3,13 +3,17 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <fboulogne@april.org>, 2011.
+# <gp4004@arghh.org>, 2011.
+# Jan-Christoph Borchardt <JanCBorchardt@fsfe.org>, 2011.
+# <rom1dep@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 20:10+0200\n"
-"PO-Revision-Date: 2011-09-23 18:11+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: French (http://www.transifex.net/projects/p/owncloud/team/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,164 +21,275 @@ msgstr ""
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
-#: ajax/addcard.php:31 ajax/addproperty.php:31 ajax/deletebook.php:32
-#: ajax/deletecard.php:32 ajax/deleteproperty.php:34 ajax/getdetails.php:32
-#: ajax/setproperty.php:32 ajax/showaddcard.php:30 ajax/showaddproperty.php:31
-#: ajax/showsetproperty.php:32 photo.php:32
-msgid "You need to log in."
+#: ajax/activation.php:17 ajax/updateaddressbook.php:26
+msgid "Error (de)activating addressbook."
msgstr ""
-#: ajax/addcard.php:37
-msgid "This is not your addressbook."
+#: ajax/addcard.php:79
+msgid "There was an error adding the contact."
msgstr ""
-#: ajax/addproperty.php:37 ajax/deletecard.php:39 ajax/deleteproperty.php:41
-#: ajax/getdetails.php:39 ajax/setproperty.php:38 ajax/showaddproperty.php:37
-#: ajax/showsetproperty.php:38 photo.php:39
-msgid "Contact could not be found."
+#: ajax/addproperty.php:39
+msgid "Cannot add empty property."
msgstr ""
-#: ajax/addproperty.php:43 ajax/deletebook.php:38 ajax/deletecard.php:45
-#: ajax/deleteproperty.php:47 ajax/getdetails.php:45 ajax/setproperty.php:44
-#: ajax/showaddproperty.php:43 ajax/showsetproperty.php:44 photo.php:45
-msgid "This is not your contact."
+#: ajax/addproperty.php:51
+msgid "At least one of the address fields has to be filled out."
msgstr ""
-#: ajax/addproperty.php:50 ajax/deleteproperty.php:54 ajax/getdetails.php:52
-#: ajax/setproperty.php:51 ajax/showsetproperty.php:51
-msgid "vCard could not be read."
+#: ajax/addproperty.php:77
+msgid "Error adding contact property."
msgstr ""
-#: ajax/deleteproperty.php:65 ajax/setproperty.php:62
-#: ajax/showsetproperty.php:62
-msgid "Information about vCard is incorrect. Please reload the page."
+#: ajax/createaddressbook.php:20
+msgid "Error adding addressbook."
msgstr ""
-#: photo.php:53
-msgid "This card is not RFC compatible."
+#: ajax/createaddressbook.php:26
+msgid "Error activating addressbook."
msgstr ""
-#: photo.php:90
-msgid "This card does not contain a photo."
+#: ajax/deleteproperty.php:40
+msgid "Error deleting contact property."
msgstr ""
-#: templates/index.php:8
-msgid "Add Contact"
+#: ajax/setproperty.php:79
+msgid "Error updating contact property."
msgstr ""
-#: templates/part.addcardform.php:5
-msgid "Group"
+#: ajax/updateaddressbook.php:20
+msgid "Error updating addressbook."
msgstr ""
-#: templates/part.addcardform.php:12 templates/part.property.php:3
-msgid "Name"
+#: appinfo/app.php:21 templates/settings.php:3
+msgid "Contacts"
msgstr ""
-#: templates/part.addcardform.php:14
-msgid "Create Contact"
+#: lib/app.php:42
+msgid "This is not your addressbook."
+msgstr "Ce n'est pas votre carnet d'adresses."
+
+#: lib/app.php:51 photo.php:34
+msgid "Contact could not be found."
+msgstr "Ce contact n'a pas été trouvé."
+
+#: lib/app.php:79
+msgid "Information about vCard is incorrect. Please reload the page."
msgstr ""
+"Les informations relatives à cette vCard sont incorrectes. Veuillez "
+"recharger la page."
-#: templates/part.addpropertyform.php:4 templates/part.property.php:40
+#: lib/app.php:91 templates/part.addcardform.php:54
+#: templates/part.property.php:45 templates/part.setpropertyform.php:7
msgid "Address"
-msgstr ""
+msgstr "Adresse"
-#: templates/part.addpropertyform.php:5
+#: lib/app.php:92 templates/part.addcardform.php:43
msgid "Telephone"
-msgstr ""
+msgstr "Téléphone"
-#: templates/part.addpropertyform.php:6 templates/part.property.php:22
+#: lib/app.php:93 templates/part.addcardform.php:37
+#: templates/part.property.php:16 templates/part.setpropertyform.php:51
msgid "Email"
-msgstr ""
+msgstr "E-mail"
-#: templates/part.addpropertyform.php:7 templates/part.property.php:15
+#: lib/app.php:94 templates/part.addcardform.php:27
+#: templates/part.property.php:9 templates/part.setpropertyform.php:54
msgid "Organization"
-msgstr ""
+msgstr "Société"
-#: templates/part.addpropertyform.php:17 templates/part.addpropertyform.php:32
+#: lib/app.php:106 lib/app.php:113
msgid "Work"
-msgstr ""
+msgstr "Travail"
-#: templates/part.addpropertyform.php:18 templates/part.addpropertyform.php:30
+#: lib/app.php:107 lib/app.php:111
msgid "Home"
+msgstr "Maison"
+
+#: lib/app.php:112
+msgid "Mobile"
+msgstr "Mobile"
+
+#: lib/app.php:114
+msgid "Text"
+msgstr "Texte"
+
+#: lib/app.php:115
+msgid "Voice"
+msgstr "Voix"
+
+#: lib/app.php:116
+msgid "Fax"
+msgstr "Fax"
+
+#: lib/app.php:117
+msgid "Video"
+msgstr "Vidéo"
+
+#: lib/app.php:118
+msgid "Pager"
+msgstr "Bipeur"
+
+#: lib/search.php:22
+msgid "Contact"
msgstr ""
-#: templates/part.addpropertyform.php:20 templates/part.property.php:48
-#: templates/part.setpropertyform.php:5
-msgid "PO Box"
+#: photo.php:40
+msgid "This is not your contact."
+msgstr "Ce n'est pas votre contact."
+
+#: photo.php:48
+msgid "This card is not RFC compatible."
+msgstr "Cette fiche n'est pas compatible RFC."
+
+#: photo.php:85
+msgid "This card does not contain a photo."
+msgstr "Cette fiche ne contient pas de photo."
+
+#: templates/index.php:6
+msgid "Add Contact"
+msgstr "Ajouter un Contact"
+
+#: templates/index.php:7
+msgid "Addressbooks"
msgstr ""
-#: templates/part.addpropertyform.php:21 templates/part.property.php:51
-#: templates/part.setpropertyform.php:6
-msgid "Extended"
+#: templates/part.addcardform.php:8
+msgid "Addressbook"
msgstr ""
-#: templates/part.addpropertyform.php:22 templates/part.property.php:54
-#: templates/part.setpropertyform.php:7
+#: templates/part.addcardform.php:21
+msgid "Name"
+msgstr "Nom"
+
+#: templates/part.addcardform.php:57 templates/part.details.php:43
+#: templates/part.details.php:79 templates/part.setpropertyform.php:10
+#: templates/part.setpropertyform.php:47
+msgid "Type"
+msgstr "Type"
+
+#: templates/part.addcardform.php:65 templates/part.details.php:49
+#: templates/part.setpropertyform.php:16
+msgid "PO Box"
+msgstr "Boîte postale"
+
+#: templates/part.addcardform.php:72 templates/part.details.php:53
+#: templates/part.setpropertyform.php:20
+msgid "Extended"
+msgstr "Étendu"
+
+#: templates/part.addcardform.php:78 templates/part.details.php:57
+#: templates/part.setpropertyform.php:24
msgid "Street"
-msgstr ""
+msgstr "Rue"
-#: templates/part.addpropertyform.php:23 templates/part.property.php:57
-#: templates/part.setpropertyform.php:8
+#: templates/part.addcardform.php:84 templates/part.details.php:61
+#: templates/part.setpropertyform.php:28
msgid "City"
-msgstr ""
+msgstr "Ville"
-#: templates/part.addpropertyform.php:24 templates/part.property.php:60
-#: templates/part.setpropertyform.php:9
+#: templates/part.addcardform.php:90 templates/part.details.php:65
+#: templates/part.setpropertyform.php:32
msgid "Region"
-msgstr ""
+msgstr "Région"
-#: templates/part.addpropertyform.php:25 templates/part.property.php:63
-#: templates/part.setpropertyform.php:10
+#: templates/part.addcardform.php:96 templates/part.details.php:69
+#: templates/part.setpropertyform.php:36
msgid "Zipcode"
-msgstr ""
+msgstr "Code postal"
-#: templates/part.addpropertyform.php:26 templates/part.property.php:66
-#: templates/part.setpropertyform.php:11
+#: templates/part.addcardform.php:102 templates/part.details.php:73
+#: templates/part.setpropertyform.php:40
msgid "Country"
-msgstr ""
+msgstr "Pays"
-#: templates/part.addpropertyform.php:31
-msgid "Mobile"
-msgstr ""
+#: templates/part.addcardform.php:109
+msgid "Create Contact"
+msgstr "Créer le Contact"
-#: templates/part.addpropertyform.php:33
-msgid "Text"
-msgstr ""
+#: templates/part.chooseaddressbook.php:1
+msgid "Choose active Address Books"
+msgstr "Choisissez le Carnet d'adresses actif"
-#: templates/part.addpropertyform.php:34
-msgid "Voice"
-msgstr ""
+#: templates/part.chooseaddressbook.php:16
+msgid "New Address Book"
+msgstr "Nouveau Carnet d'adresses"
-#: templates/part.addpropertyform.php:35
-msgid "Fax"
-msgstr ""
+#: templates/part.chooseaddressbook.php:21
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "CardDav Link"
+msgstr "Lien CardDav"
-#: templates/part.addpropertyform.php:36
-msgid "Video"
-msgstr ""
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Download"
+msgstr "Télécharger"
-#: templates/part.addpropertyform.php:37
-msgid "Pager"
-msgstr ""
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Edit"
+msgstr "Modifier"
-#: templates/part.details.php:33
+#: templates/part.chooseaddressbook.rowfields.php:5
msgid "Delete"
+msgstr "Supprimer"
+
+#: templates/part.details.php:3
+msgid "Download contact"
msgstr ""
+#: templates/part.details.php:4
+msgid "Delete contact"
+msgstr "Supprimer le contact"
+
#: templates/part.details.php:34
-msgid "Add Property"
+msgid "Add"
+msgstr "Ajouter"
+
+#: templates/part.editaddressbook.php:9
+msgid "New Addressbook"
msgstr ""
-#: templates/part.property.php:9
-msgid "Birthday"
+#: templates/part.editaddressbook.php:9
+msgid "Edit Addressbook"
msgstr ""
-#: templates/part.property.php:29
+#: templates/part.editaddressbook.php:12
+msgid "Displayname"
+msgstr "Nom"
+
+#: templates/part.editaddressbook.php:23
+msgid "Active"
+msgstr "Carnet actif"
+
+#: templates/part.editaddressbook.php:29
+msgid "Save"
+msgstr "Sauvegarder"
+
+#: templates/part.editaddressbook.php:29
+msgid "Submit"
+msgstr "Envoyer"
+
+#: templates/part.editaddressbook.php:30
+msgid "Cancel"
+msgstr "Annuler"
+
+#: templates/part.property.php:3
+msgid "Birthday"
+msgstr "Anniversaire"
+
+#: templates/part.property.php:23
+msgid "Preferred"
+msgstr "Préféré"
+
+#: templates/part.property.php:23 templates/part.setpropertyform.php:45
msgid "Phone"
-msgstr ""
+msgstr "Téléphone"
-#: templates/part.setpropertyform.php:17
-msgid "Edit"
+#: templates/part.setpropertyform.php:57
+msgid "Update"
+msgstr "Enregistrer"
+
+#: templates/settings.php:4
+msgid "CardDAV syncing address:"
msgstr ""
diff --git a/l10n/fr/core.po b/l10n/fr/core.po
index b1e286ce6ea..87746ef79bb 100644
--- a/l10n/fr/core.po
+++ b/l10n/fr/core.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 18:17+0200\n"
-"PO-Revision-Date: 2011-09-05 15:01+0000\n"
-"Last-Translator: bibzor <borjan@tchaka.fr>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-11 20:14+0000\n"
+"Last-Translator: Borjan Tchakaloff <borjan@tchaka.fr>\n"
"Language-Team: French (http://www.transifex.net/projects/p/owncloud/team/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,6 +18,54 @@ msgstr ""
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
+#: lostpassword/index.php:24
+msgid "Owncloud password reset"
+msgstr "Réinitialisation de votre mot de passe Owncloud"
+
+#: lostpassword/templates/email.php:1
+msgid "Use the following link to reset your password: {link}"
+msgstr ""
+"Utilisez le lien suivant pour réinitialiser votre mot de passe : {link}"
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr ""
+"Vous allez recevoir un e-mail contenant un lien pour réinitialiser votre mot"
+" de passe"
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Requested"
+msgstr "Demande envoyée"
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr "Nom d'utilisateur ou e-mail invalide"
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:22
+#: templates/login.php:8
+msgid "Username"
+msgstr "Nom d'utilisateur"
+
+#: lostpassword/templates/lostpassword.php:14
+msgid "Request reset"
+msgstr "Demander la réinitialisation"
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr "Votre mot de passe a été réinitialisé"
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr "Retour à la page d'authentification"
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr "Nouveau mot de passe"
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr "Réinitialiser le mot de passe"
+
#: strings.php:5
msgid "Personal"
msgstr "Personnels"
@@ -46,54 +94,50 @@ msgstr "Introuvable"
msgid "Create an <strong>admin account</strong>"
msgstr "Créer un <strong>compte administrateur</strong>"
-#: templates/installation.php:21
-msgid "Username"
-msgstr "Nom d'utilisateur"
-
-#: templates/installation.php:22
+#: templates/installation.php:26 templates/login.php:12
msgid "Password"
msgstr "Mot de passe"
-#: templates/installation.php:27
+#: templates/installation.php:32
+msgid "Advanced"
+msgstr "Avancé"
+
+#: templates/installation.php:34
+msgid "Data folder"
+msgstr "Répertoire des données"
+
+#: templates/installation.php:41
msgid "Configure the database"
msgstr "Configurer la base de données"
-#: templates/installation.php:32 templates/installation.php:43
-#: templates/installation.php:53
+#: templates/installation.php:46 templates/installation.php:57
+#: templates/installation.php:67
msgid "will be used"
msgstr "sera utilisé"
-#: templates/installation.php:64
+#: templates/installation.php:79
msgid "Database user"
msgstr "Utilisateur de la base de données"
-#: templates/installation.php:65
+#: templates/installation.php:83
msgid "Database password"
msgstr "Mot de passe de la base de données"
-#: templates/installation.php:66
+#: templates/installation.php:87
msgid "Database name"
msgstr "Nom de la base de données"
-#: templates/installation.php:72
-msgid "Advanced"
-msgstr "Avancé"
-
-#: templates/installation.php:75
+#: templates/installation.php:93
msgid "Database host"
msgstr "Serveur de la base de données"
-#: templates/installation.php:76
-msgid "Data folder"
-msgstr "Répertoire des données"
-
-#: templates/installation.php:79
+#: templates/installation.php:98
msgid "Finish setup"
msgstr "Terminer l'installation"
#: templates/layout.guest.php:35
-msgid "gives you freedom and control over your own data"
-msgstr "vous donne la liberté et le contrôle de vos propres données"
+msgid "web services under your control"
+msgstr "services web sous votre contrôle"
#: templates/layout.user.php:34
msgid "Log out"
@@ -103,40 +147,22 @@ msgstr "Se déconnecter"
msgid "Settings"
msgstr "Paramètres"
-#: templates/login.php:4
+#: templates/login.php:5
msgid "Lost your password?"
msgstr "Mot de passe perdu ?"
-#: templates/login.php:9 templates/login.php:13
+#: templates/login.php:15
msgid "remember"
msgstr "se souvenir de moi"
+#: templates/login.php:16
+msgid "Log in"
+msgstr "Connexion"
+
#: templates/logout.php:1
msgid "You are logged out."
msgstr "Vous êtes désormais déconnecté."
-#: templates/lostpassword.php:3
-msgid "You will receive a link to reset your password via Email."
-msgstr ""
-"Vous allez recevoir un lien par email qui vous permettra de réinitialiser "
-"votre mot de passe."
-
-#: templates/lostpassword.php:5
-msgid "Requested"
-msgstr "Nécessaire"
-
-#: templates/lostpassword.php:8
-msgid "Login failed!"
-msgstr "Échec de la connexion !"
-
-#: templates/lostpassword.php:10
-msgid "Username or Email"
-msgstr "Nom d'utilisateur ou Email"
-
-#: templates/lostpassword.php:11
-msgid "Request reset"
-msgstr "Demande de réinitialisation"
-
#: templates/part.pagenavi.php:3
msgid "prev"
msgstr "précédent"
@@ -145,16 +171,4 @@ msgstr "précédent"
msgid "next"
msgstr "suivant"
-#: templates/resetpassword.php:4
-msgid "Your password was reset"
-msgstr "Votre mot de passe a été réinitialisé"
-
-#: templates/resetpassword.php:6
-msgid "New password"
-msgstr "Nouveau mot de passe"
-
-#: templates/resetpassword.php:7
-msgid "Reset password"
-msgstr "Réinitialisation du mot de passe"
-
diff --git a/l10n/fr/files.po b/l10n/fr/files.po
index b898f187030..4bdbb70bc56 100644
--- a/l10n/fr/files.po
+++ b/l10n/fr/files.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-11 20:06+0000\n"
+"Last-Translator: Borjan Tchakaloff <borjan@tchaka.fr>\n"
"Language-Team: French (http://www.transifex.net/projects/p/owncloud/team/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,33 +18,37 @@ msgstr ""
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
-#: ajax/upload.php:24
+#: ajax/upload.php:19
msgid "There is no error, the file uploaded with success"
-msgstr ""
+msgstr "Aucune erreur, le fichier a été téléversé avec succès"
-#: ajax/upload.php:25
+#: ajax/upload.php:20
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr ""
+"Le fichier téléversé excède la valeur de upload_max_filesize spécifiée dans "
+"php.ini"
-#: ajax/upload.php:26
+#: ajax/upload.php:21
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
+"Le fichier téléversé excède la valeur de MAX_FILE_SIZE spécifiée dans le "
+"formulaire HTML"
-#: ajax/upload.php:27
+#: ajax/upload.php:22
msgid "The uploaded file was only partially uploaded"
-msgstr ""
+msgstr "Le fichier n'a été que partiellement téléversé"
-#: ajax/upload.php:28
+#: ajax/upload.php:23
msgid "No file was uploaded"
-msgstr ""
+msgstr "Aucun fichier n'a été téléversé"
-#: ajax/upload.php:29
+#: ajax/upload.php:24
msgid "Missing a temporary folder"
-msgstr ""
+msgstr "Il manque un répertoire temporaire"
-#: appinfo/app.php:7
+#: appinfo/app.php:8
msgid "Files"
msgstr "Fichiers"
@@ -52,43 +56,55 @@ msgstr "Fichiers"
msgid "Maximum upload size"
msgstr "Taille max. d'envoi"
+#: templates/index.php:7
+msgid "New"
+msgstr "Nouveau"
+
#: templates/index.php:10
+msgid "Text file"
+msgstr "Fichier texte"
+
+#: templates/index.php:11
+msgid "Folder"
+msgstr "Dossier"
+
+#: templates/index.php:12
+msgid "From the web"
+msgstr "Depuis le web"
+
+#: templates/index.php:22
msgid "Upload"
msgstr "Envoyer"
-#: templates/index.php:17
-msgid "New Folder"
-msgstr "Nouveau dossier"
-
-#: templates/index.php:31
+#: templates/index.php:35
msgid "Nothing in here. Upload something!"
msgstr "Il n'y a rien ici ! Envoyez donc quelque chose :)"
-#: templates/index.php:39
+#: templates/index.php:43
msgid "Name"
msgstr "Nom"
-#: templates/index.php:41
+#: templates/index.php:45
msgid "Download"
msgstr "Téléchargement"
-#: templates/index.php:45
+#: templates/index.php:49
msgid "Size"
msgstr "Taille"
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Modified"
msgstr "Modifié"
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Delete"
msgstr "Supprimer"
-#: templates/index.php:54
+#: templates/index.php:58
msgid "Upload too large"
msgstr "Fichier trop volumineux"
-#: templates/index.php:56
+#: templates/index.php:60
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
diff --git a/l10n/fr/gallery.po b/l10n/fr/gallery.po
new file mode 100644
index 00000000000..f2a196d96b9
--- /dev/null
+++ b/l10n/fr/gallery.po
@@ -0,0 +1,32 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:48+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: French (http://www.transifex.net/projects/p/owncloud/team/fr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fr\n"
+"Plural-Forms: nplurals=2; plural=(n > 1)\n"
+
+#: appinfo/app.php:41
+msgid "Gallery"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Rescan"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+
diff --git a/l10n/fr/media.po b/l10n/fr/media.po
index 5cdf1cd9036..62c9e525cf3 100644
--- a/l10n/fr/media.po
+++ b/l10n/fr/media.po
@@ -2,14 +2,15 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
+# Translators:
# <rom1dep@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
-"Report-Msgid-Bugs-To: http://bugs.kde.org/buglist.cgi?product=owncloud\n"
-"POT-Creation-Date: 2011-08-20 05:08+0200\n"
-"PO-Revision-Date: 2011-08-20 03:08+0000\n"
-"Last-Translator: JanCBorchardt <JanCBorchardt@fsfe.org>\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: French (http://www.transifex.net/projects/p/owncloud/team/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,39 +18,35 @@ msgstr ""
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
-#: appinfo/app.php:31
+#: appinfo/app.php:32
msgid "Music"
msgstr "Musique"
-#: templates/music.php:3
+#: templates/music.php:3 templates/player.php:13
msgid "Play"
-msgstr ""
+msgstr "Play"
-#: templates/music.php:4 templates/music.php:30
+#: templates/music.php:4 templates/music.php:26 templates/player.php:14
msgid "Pause"
msgstr "Pause"
#: templates/music.php:5
msgid "Previous"
-msgstr ""
+msgstr "Précédent"
-#: templates/music.php:6
+#: templates/music.php:6 templates/player.php:15
msgid "Next"
-msgstr ""
+msgstr "Suivant"
#: templates/music.php:7
msgid "Mute"
-msgstr ""
+msgstr "Muet"
#: templates/music.php:8
msgid "Unmute"
-msgstr ""
-
-#: templates/music.php:28
-msgid "Songs scanned"
-msgstr "Pistes scannées"
+msgstr "Audible"
-#: templates/music.php:29
+#: templates/music.php:25
msgid "Rescan Collection"
msgstr "Réanalyser la Collection"
diff --git a/l10n/fr/settings.po b/l10n/fr/settings.po
index 46f9713e9cb..a0a3373fba9 100644
--- a/l10n/fr/settings.po
+++ b/l10n/fr/settings.po
@@ -2,15 +2,17 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
-# <rom1dep@gmail.com>, 2011.
+# Translators:
+# <fboulogne@april.org>, 2011.
# Jan-Christoph Borchardt <JanCBorchardt@fsfe.org>, 2011.
+# <rom1dep@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-04 16:48+0200\n"
-"PO-Revision-Date: 2011-09-03 18:25+0000\n"
-"Last-Translator: bibzor <borjan@tchaka.fr>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-11 20:18+0000\n"
+"Last-Translator: Borjan Tchakaloff <borjan@tchaka.fr>\n"
"Language-Team: French (http://www.transifex.net/projects/p/owncloud/team/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,22 +20,26 @@ msgstr ""
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
-#: ajax/openid.php:13 ajax/setlanguage.php:13
-msgid "Authentication error"
-msgstr "Erreur d'authentification"
+#: ajax/lostpassword.php:14
+msgid "email Changed"
+msgstr "e-mail modifié"
-#: ajax/openid.php:21
-msgid "OpenID Changed"
-msgstr "Identifiant OpenID changé"
-
-#: ajax/openid.php:23 ajax/setlanguage.php:23
+#: ajax/lostpassword.php:16 ajax/openid.php:17 ajax/setlanguage.php:16
msgid "Invalid request"
msgstr "Requête invalide"
-#: ajax/setlanguage.php:21
+#: ajax/openid.php:15
+msgid "OpenID Changed"
+msgstr "Identifiant OpenID changé"
+
+#: ajax/setlanguage.php:14
msgid "Language changed"
msgstr "Langue changée"
+#: templates/admin.php:13
+msgid "Log level"
+msgstr "Niveau de log"
+
#: templates/apps.php:8
msgid "Add your application"
msgstr "Ajoutez votre application"
@@ -54,15 +60,15 @@ msgstr "par"
msgid "Ask a question"
msgstr "Poser une question"
-#: templates/help.php:17
+#: templates/help.php:20
msgid "Problems connecting to help database."
msgstr "Problème de connexion à la base de données d'aide."
-#: templates/help.php:18
+#: templates/help.php:21
msgid "Go there manually."
msgstr "S'y rendre manuellement."
-#: templates/help.php:26
+#: templates/help.php:29
msgid "Answer"
msgstr "Réponse"
@@ -72,7 +78,7 @@ msgstr "Vous utilisez"
#: templates/personal.php:8
msgid "of the available"
-msgstr "sur un total de"
+msgstr "d'espace de stockage sur un total de"
#: templates/personal.php:13
msgid "Your password got changed"
@@ -98,37 +104,54 @@ msgstr "Afficher"
msgid "Change password"
msgstr "Changer de mot de passe"
-#: templates/personal.php:24 templates/personal.php:25
+#: templates/personal.php:24
+msgid "Email"
+msgstr "E-mail"
+
+#: templates/personal.php:25
+msgid "Your email address"
+msgstr "Votre adresse e-mail"
+
+#: templates/personal.php:26
+msgid "Fill in an email address to enable password recovery"
+msgstr ""
+"Entrez votre adresse e-mail pour activer la réinitialisation de mot de passe"
+
+#: templates/personal.php:32 templates/personal.php:33
msgid "Language"
msgstr "Langue"
-#: templates/personal.php:30
-msgid "Help translating"
-msgstr "Aider à traduire"
+#: templates/personal.php:38
+msgid "Help translate"
+msgstr "Aidez à traduire"
-#: templates/personal.php:37
+#: templates/personal.php:45
msgid "use this address to connect to your ownCloud in your file manager"
msgstr ""
"utilisez cette adresse pour vous connecter à votre ownCloud depuis un "
"explorateur de fichiers"
-#: templates/users.php:16
+#: templates/users.php:15 templates/users.php:30
msgid "Name"
msgstr "Nom"
-#: templates/users.php:17
+#: templates/users.php:16 templates/users.php:31
msgid "Password"
msgstr "Mot de passe"
-#: templates/users.php:18 templates/users.php:36
+#: templates/users.php:17 templates/users.php:32 templates/users.php:46
msgid "Groups"
msgstr "Groupes"
-#: templates/users.php:24
+#: templates/users.php:23
msgid "Create"
msgstr "Créer"
-#: templates/users.php:48
+#: templates/users.php:33
+msgid "Quota"
+msgstr "Quota"
+
+#: templates/users.php:58
msgid "Delete"
msgstr "Supprimer"
diff --git a/l10n/gl/calendar.po b/l10n/gl/calendar.po
new file mode 100644
index 00000000000..e4607d2f7d8
--- /dev/null
+++ b/l10n/gl/calendar.po
@@ -0,0 +1,636 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Galician (http://www.transifex.net/projects/p/owncloud/team/gl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: gl\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/guesstimezone.php:42
+msgid "New Timezone:"
+msgstr ""
+
+#: ajax/settimezone.php:22
+msgid "Timezone changed"
+msgstr ""
+
+#: ajax/settimezone.php:24
+msgid "Invalid request"
+msgstr ""
+
+#: appinfo/app.php:20 templates/calendar.php:13
+#: templates/part.eventform.php:20
+msgid "Calendar"
+msgstr ""
+
+#: lib/app.php:19
+msgid "Wrong calendar"
+msgstr ""
+
+#: lib/app.php:60 lib/object.php:332
+msgid "Birthday"
+msgstr ""
+
+#: lib/app.php:61 lib/object.php:333
+msgid "Business"
+msgstr ""
+
+#: lib/app.php:62 lib/object.php:334
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:63 lib/object.php:335
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:64 lib/object.php:336
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:65 lib/object.php:337
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:66 lib/object.php:338
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:67 lib/object.php:339
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:68 lib/object.php:340
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:69 lib/object.php:341
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:70 lib/object.php:342
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:71 lib/object.php:343
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:72 lib/object.php:344
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:73 lib/object.php:345
+msgid "Questions"
+msgstr ""
+
+#: lib/app.php:74 lib/object.php:346
+msgid "Work"
+msgstr ""
+
+#: lib/object.php:353
+msgid "Does not repeat"
+msgstr ""
+
+#: lib/object.php:354
+msgid "Daily"
+msgstr ""
+
+#: lib/object.php:355
+msgid "Weekly"
+msgstr ""
+
+#: lib/object.php:356
+msgid "Every Weekday"
+msgstr ""
+
+#: lib/object.php:357
+msgid "Bi-Weekly"
+msgstr ""
+
+#: lib/object.php:358
+msgid "Monthly"
+msgstr ""
+
+#: lib/object.php:359
+msgid "Yearly"
+msgstr ""
+
+#: lib/object.php:366
+msgid "never"
+msgstr ""
+
+#: lib/object.php:367
+msgid "by occurrences"
+msgstr ""
+
+#: lib/object.php:368
+msgid "by date"
+msgstr ""
+
+#: lib/object.php:375
+msgid "by monthday"
+msgstr ""
+
+#: lib/object.php:376
+msgid "by weekday"
+msgstr ""
+
+#: lib/object.php:383 templates/lAfix.php:3
+msgid "Monday"
+msgstr ""
+
+#: lib/object.php:384 templates/lAfix.php:4
+msgid "Tuesday"
+msgstr ""
+
+#: lib/object.php:385 templates/lAfix.php:5
+msgid "Wednesday"
+msgstr ""
+
+#: lib/object.php:386 templates/lAfix.php:6
+msgid "Thursday"
+msgstr ""
+
+#: lib/object.php:387 templates/lAfix.php:7
+msgid "Friday"
+msgstr ""
+
+#: lib/object.php:388 templates/lAfix.php:8
+msgid "Saturday"
+msgstr ""
+
+#: lib/object.php:389 templates/lAfix.php:2
+msgid "Sunday"
+msgstr ""
+
+#: lib/object.php:396
+msgid "events week of month"
+msgstr ""
+
+#: lib/object.php:397
+msgid "first"
+msgstr ""
+
+#: lib/object.php:398
+msgid "second"
+msgstr ""
+
+#: lib/object.php:399
+msgid "third"
+msgstr ""
+
+#: lib/object.php:400
+msgid "fourth"
+msgstr ""
+
+#: lib/object.php:401
+msgid "fifth"
+msgstr ""
+
+#: lib/object.php:402
+msgid "last"
+msgstr ""
+
+#: lib/object.php:424 templates/lAfix.php:16
+msgid "January"
+msgstr ""
+
+#: lib/object.php:425 templates/lAfix.php:17
+msgid "February"
+msgstr ""
+
+#: lib/object.php:426 templates/lAfix.php:18
+msgid "March"
+msgstr ""
+
+#: lib/object.php:427 templates/lAfix.php:19
+msgid "April"
+msgstr ""
+
+#: lib/object.php:428 templates/lAfix.php:20
+msgid "May"
+msgstr ""
+
+#: lib/object.php:429 templates/lAfix.php:21
+msgid "June"
+msgstr ""
+
+#: lib/object.php:430 templates/lAfix.php:22
+msgid "July"
+msgstr ""
+
+#: lib/object.php:431 templates/lAfix.php:23
+msgid "August"
+msgstr ""
+
+#: lib/object.php:432 templates/lAfix.php:24
+msgid "September"
+msgstr ""
+
+#: lib/object.php:433 templates/lAfix.php:25
+msgid "October"
+msgstr ""
+
+#: lib/object.php:434 templates/lAfix.php:26
+msgid "November"
+msgstr ""
+
+#: lib/object.php:435 templates/lAfix.php:27
+msgid "December"
+msgstr ""
+
+#: lib/object.php:441
+msgid "by events date"
+msgstr ""
+
+#: lib/object.php:442
+msgid "by yearday(s)"
+msgstr ""
+
+#: lib/object.php:443
+msgid "by weeknumber(s)"
+msgstr ""
+
+#: lib/object.php:444
+msgid "by day and month"
+msgstr ""
+
+#: lib/object.php:467
+msgid "Not an array"
+msgstr ""
+
+#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+msgid "Date"
+msgstr ""
+
+#: lib/search.php:40
+msgid "Cal."
+msgstr ""
+
+#: templates/calendar.php:10
+msgid "All day"
+msgstr ""
+
+#: templates/calendar.php:11
+msgid "Missing fields"
+msgstr ""
+
+#: templates/calendar.php:12 templates/part.eventform.php:3
+msgid "Title"
+msgstr ""
+
+#: templates/calendar.php:14
+msgid "From Date"
+msgstr ""
+
+#: templates/calendar.php:15
+msgid "From Time"
+msgstr ""
+
+#: templates/calendar.php:16
+msgid "To Date"
+msgstr ""
+
+#: templates/calendar.php:17
+msgid "To Time"
+msgstr ""
+
+#: templates/calendar.php:18
+msgid "The event ends before it starts"
+msgstr ""
+
+#: templates/calendar.php:19
+msgid "There was a database fail"
+msgstr ""
+
+#: templates/calendar.php:52
+msgid "Week"
+msgstr ""
+
+#: templates/calendar.php:53
+msgid "Month"
+msgstr ""
+
+#: templates/calendar.php:54
+msgid "List"
+msgstr ""
+
+#: templates/calendar.php:59
+msgid "Today"
+msgstr ""
+
+#: templates/calendar.php:60
+msgid "Calendars"
+msgstr ""
+
+#: templates/calendar.php:78
+msgid "There was a fail, while parsing the file."
+msgstr ""
+
+#: templates/lAfix.php:9
+msgid "Sun."
+msgstr ""
+
+#: templates/lAfix.php:10
+msgid "Mon."
+msgstr ""
+
+#: templates/lAfix.php:11
+msgid "Tue."
+msgstr ""
+
+#: templates/lAfix.php:12
+msgid "Wed."
+msgstr ""
+
+#: templates/lAfix.php:13
+msgid "Thu."
+msgstr ""
+
+#: templates/lAfix.php:14
+msgid "Fri."
+msgstr ""
+
+#: templates/lAfix.php:15
+msgid "Sat."
+msgstr ""
+
+#: templates/lAfix.php:28
+msgid "Jan."
+msgstr ""
+
+#: templates/lAfix.php:29
+msgid "Feb."
+msgstr ""
+
+#: templates/lAfix.php:30
+msgid "Mar."
+msgstr ""
+
+#: templates/lAfix.php:31
+msgid "Apr."
+msgstr ""
+
+#: templates/lAfix.php:32
+msgid "May."
+msgstr ""
+
+#: templates/lAfix.php:33
+msgid "Jun."
+msgstr ""
+
+#: templates/lAfix.php:34
+msgid "Jul."
+msgstr ""
+
+#: templates/lAfix.php:35
+msgid "Aug."
+msgstr ""
+
+#: templates/lAfix.php:36
+msgid "Sep."
+msgstr ""
+
+#: templates/lAfix.php:37
+msgid "Oct."
+msgstr ""
+
+#: templates/lAfix.php:38
+msgid "Nov."
+msgstr ""
+
+#: templates/lAfix.php:39
+msgid "Dec."
+msgstr ""
+
+#: templates/part.choosecalendar.php:1
+msgid "Choose active calendars"
+msgstr ""
+
+#: templates/part.choosecalendar.php:15
+msgid "New Calendar"
+msgstr ""
+
+#: templates/part.choosecalendar.php:20
+#: templates/part.choosecalendar.rowfields.php:4
+msgid "CalDav Link"
+msgstr ""
+
+#: templates/part.choosecalendar.rowfields.php:4
+msgid "Download"
+msgstr ""
+
+#: templates/part.choosecalendar.rowfields.php:4
+msgid "Edit"
+msgstr ""
+
+#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.editevent.php:9
+msgid "Delete"
+msgstr ""
+
+#: templates/part.editcalendar.php:9
+msgid "New calendar"
+msgstr ""
+
+#: templates/part.editcalendar.php:9
+msgid "Edit calendar"
+msgstr ""
+
+#: templates/part.editcalendar.php:12
+msgid "Displayname"
+msgstr ""
+
+#: templates/part.editcalendar.php:23
+msgid "Active"
+msgstr ""
+
+#: templates/part.editcalendar.php:29
+msgid "Calendar color"
+msgstr ""
+
+#: templates/part.editcalendar.php:42
+msgid "Save"
+msgstr ""
+
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
+#: templates/part.newevent.php:6
+msgid "Submit"
+msgstr ""
+
+#: templates/part.editcalendar.php:43
+msgid "Cancel"
+msgstr ""
+
+#: templates/part.editevent.php:1
+msgid "Edit an event"
+msgstr ""
+
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr ""
+
+#: templates/part.eventform.php:5
+msgid "Title of the Event"
+msgstr ""
+
+#: templates/part.eventform.php:11
+msgid "Category"
+msgstr ""
+
+#: templates/part.eventform.php:13
+msgid "Select category"
+msgstr ""
+
+#: templates/part.eventform.php:37
+msgid "All Day Event"
+msgstr ""
+
+#: templates/part.eventform.php:41
+msgid "From"
+msgstr ""
+
+#: templates/part.eventform.php:49
+msgid "To"
+msgstr ""
+
+#: templates/part.eventform.php:57
+msgid "Advanced options"
+msgstr ""
+
+#: templates/part.eventform.php:61
+msgid "Repeat"
+msgstr ""
+
+#: templates/part.eventform.php:68
+msgid "Advanced"
+msgstr ""
+
+#: templates/part.eventform.php:112
+msgid "Select weekdays"
+msgstr ""
+
+#: templates/part.eventform.php:125 templates/part.eventform.php:138
+msgid "Select days"
+msgstr ""
+
+#: templates/part.eventform.php:130
+msgid "and the events day of year."
+msgstr ""
+
+#: templates/part.eventform.php:143
+msgid "and the events day of month."
+msgstr ""
+
+#: templates/part.eventform.php:151
+msgid "Select months"
+msgstr ""
+
+#: templates/part.eventform.php:164
+msgid "Select weeks"
+msgstr ""
+
+#: templates/part.eventform.php:169
+msgid "and the events week of year."
+msgstr ""
+
+#: templates/part.eventform.php:175
+msgid "Interval"
+msgstr ""
+
+#: templates/part.eventform.php:181
+msgid "End"
+msgstr ""
+
+#: templates/part.eventform.php:193
+msgid "occurrences"
+msgstr ""
+
+#: templates/part.eventform.php:208
+msgid "Location"
+msgstr ""
+
+#: templates/part.eventform.php:210
+msgid "Location of the Event"
+msgstr ""
+
+#: templates/part.eventform.php:216
+msgid "Description"
+msgstr ""
+
+#: templates/part.eventform.php:218
+msgid "Description of the Event"
+msgstr ""
+
+#: templates/part.import.php:1
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the calendar"
+msgstr ""
+
+#: templates/part.import.php:10
+msgid "create a new calendar"
+msgstr ""
+
+#: templates/part.import.php:15
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import"
+msgstr ""
+
+#: templates/part.import.php:20
+msgid "Importing calendar"
+msgstr ""
+
+#: templates/part.import.php:23
+msgid "Calendar imported successfully"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Close Dialog"
+msgstr ""
+
+#: templates/part.newevent.php:1
+msgid "Create a new event"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Timezone"
+msgstr ""
+
+#: templates/settings.php:30
+msgid "Check always for changes of the timezone"
+msgstr ""
+
+#: templates/settings.php:32
+msgid "Timeformat"
+msgstr ""
+
+#: templates/settings.php:34
+msgid "24h"
+msgstr ""
+
+#: templates/settings.php:35
+msgid "12h"
+msgstr ""
+
+#: templates/settings.php:41
+msgid "Calendar CalDAV syncing address:"
+msgstr ""
+
+
diff --git a/l10n/gl/contacts.po b/l10n/gl/contacts.po
new file mode 100644
index 00000000000..a5df9ac8e9a
--- /dev/null
+++ b/l10n/gl/contacts.po
@@ -0,0 +1,289 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Galician (http://www.transifex.net/projects/p/owncloud/team/gl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: gl\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/activation.php:17 ajax/updateaddressbook.php:26
+msgid "Error (de)activating addressbook."
+msgstr ""
+
+#: ajax/addcard.php:79
+msgid "There was an error adding the contact."
+msgstr ""
+
+#: ajax/addproperty.php:39
+msgid "Cannot add empty property."
+msgstr ""
+
+#: ajax/addproperty.php:51
+msgid "At least one of the address fields has to be filled out."
+msgstr ""
+
+#: ajax/addproperty.php:77
+msgid "Error adding contact property."
+msgstr ""
+
+#: ajax/createaddressbook.php:20
+msgid "Error adding addressbook."
+msgstr ""
+
+#: ajax/createaddressbook.php:26
+msgid "Error activating addressbook."
+msgstr ""
+
+#: ajax/deleteproperty.php:40
+msgid "Error deleting contact property."
+msgstr ""
+
+#: ajax/setproperty.php:79
+msgid "Error updating contact property."
+msgstr ""
+
+#: ajax/updateaddressbook.php:20
+msgid "Error updating addressbook."
+msgstr ""
+
+#: appinfo/app.php:21 templates/settings.php:3
+msgid "Contacts"
+msgstr ""
+
+#: lib/app.php:42
+msgid "This is not your addressbook."
+msgstr ""
+
+#: lib/app.php:51 photo.php:34
+msgid "Contact could not be found."
+msgstr ""
+
+#: lib/app.php:79
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr ""
+
+#: lib/app.php:91 templates/part.addcardform.php:54
+#: templates/part.property.php:45 templates/part.setpropertyform.php:7
+msgid "Address"
+msgstr ""
+
+#: lib/app.php:92 templates/part.addcardform.php:43
+msgid "Telephone"
+msgstr ""
+
+#: lib/app.php:93 templates/part.addcardform.php:37
+#: templates/part.property.php:16 templates/part.setpropertyform.php:51
+msgid "Email"
+msgstr ""
+
+#: lib/app.php:94 templates/part.addcardform.php:27
+#: templates/part.property.php:9 templates/part.setpropertyform.php:54
+msgid "Organization"
+msgstr ""
+
+#: lib/app.php:106 lib/app.php:113
+msgid "Work"
+msgstr ""
+
+#: lib/app.php:107 lib/app.php:111
+msgid "Home"
+msgstr ""
+
+#: lib/app.php:112
+msgid "Mobile"
+msgstr ""
+
+#: lib/app.php:114
+msgid "Text"
+msgstr ""
+
+#: lib/app.php:115
+msgid "Voice"
+msgstr ""
+
+#: lib/app.php:116
+msgid "Fax"
+msgstr ""
+
+#: lib/app.php:117
+msgid "Video"
+msgstr ""
+
+#: lib/app.php:118
+msgid "Pager"
+msgstr ""
+
+#: lib/search.php:22
+msgid "Contact"
+msgstr ""
+
+#: photo.php:40
+msgid "This is not your contact."
+msgstr ""
+
+#: photo.php:48
+msgid "This card is not RFC compatible."
+msgstr ""
+
+#: photo.php:85
+msgid "This card does not contain a photo."
+msgstr ""
+
+#: templates/index.php:6
+msgid "Add Contact"
+msgstr ""
+
+#: templates/index.php:7
+msgid "Addressbooks"
+msgstr ""
+
+#: templates/part.addcardform.php:8
+msgid "Addressbook"
+msgstr ""
+
+#: templates/part.addcardform.php:21
+msgid "Name"
+msgstr ""
+
+#: templates/part.addcardform.php:57 templates/part.details.php:43
+#: templates/part.details.php:79 templates/part.setpropertyform.php:10
+#: templates/part.setpropertyform.php:47
+msgid "Type"
+msgstr ""
+
+#: templates/part.addcardform.php:65 templates/part.details.php:49
+#: templates/part.setpropertyform.php:16
+msgid "PO Box"
+msgstr ""
+
+#: templates/part.addcardform.php:72 templates/part.details.php:53
+#: templates/part.setpropertyform.php:20
+msgid "Extended"
+msgstr ""
+
+#: templates/part.addcardform.php:78 templates/part.details.php:57
+#: templates/part.setpropertyform.php:24
+msgid "Street"
+msgstr ""
+
+#: templates/part.addcardform.php:84 templates/part.details.php:61
+#: templates/part.setpropertyform.php:28
+msgid "City"
+msgstr ""
+
+#: templates/part.addcardform.php:90 templates/part.details.php:65
+#: templates/part.setpropertyform.php:32
+msgid "Region"
+msgstr ""
+
+#: templates/part.addcardform.php:96 templates/part.details.php:69
+#: templates/part.setpropertyform.php:36
+msgid "Zipcode"
+msgstr ""
+
+#: templates/part.addcardform.php:102 templates/part.details.php:73
+#: templates/part.setpropertyform.php:40
+msgid "Country"
+msgstr ""
+
+#: templates/part.addcardform.php:109
+msgid "Create Contact"
+msgstr ""
+
+#: templates/part.chooseaddressbook.php:1
+msgid "Choose active Address Books"
+msgstr ""
+
+#: templates/part.chooseaddressbook.php:16
+msgid "New Address Book"
+msgstr ""
+
+#: templates/part.chooseaddressbook.php:21
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "CardDav Link"
+msgstr ""
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Download"
+msgstr ""
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Edit"
+msgstr ""
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Delete"
+msgstr ""
+
+#: templates/part.details.php:3
+msgid "Download contact"
+msgstr ""
+
+#: templates/part.details.php:4
+msgid "Delete contact"
+msgstr ""
+
+#: templates/part.details.php:34
+msgid "Add"
+msgstr ""
+
+#: templates/part.editaddressbook.php:9
+msgid "New Addressbook"
+msgstr ""
+
+#: templates/part.editaddressbook.php:9
+msgid "Edit Addressbook"
+msgstr ""
+
+#: templates/part.editaddressbook.php:12
+msgid "Displayname"
+msgstr ""
+
+#: templates/part.editaddressbook.php:23
+msgid "Active"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Save"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Submit"
+msgstr ""
+
+#: templates/part.editaddressbook.php:30
+msgid "Cancel"
+msgstr ""
+
+#: templates/part.property.php:3
+msgid "Birthday"
+msgstr ""
+
+#: templates/part.property.php:23
+msgid "Preferred"
+msgstr ""
+
+#: templates/part.property.php:23 templates/part.setpropertyform.php:45
+msgid "Phone"
+msgstr ""
+
+#: templates/part.setpropertyform.php:57
+msgid "Update"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "CardDAV syncing address:"
+msgstr ""
+
+
diff --git a/l10n/gl/core.po b/l10n/gl/core.po
new file mode 100644
index 00000000000..aabdef11038
--- /dev/null
+++ b/l10n/gl/core.po
@@ -0,0 +1,170 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2011-07-25 16:05+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Galician (http://www.transifex.net/projects/p/owncloud/team/gl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: gl\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: lostpassword/index.php:24
+msgid "Owncloud password reset"
+msgstr ""
+
+#: lostpassword/templates/email.php:1
+msgid "Use the following link to reset your password: {link}"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Requested"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:22
+#: templates/login.php:8
+msgid "Username"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:14
+msgid "Request reset"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr ""
+
+#: strings.php:5
+msgid "Personal"
+msgstr ""
+
+#: strings.php:6
+msgid "Users"
+msgstr ""
+
+#: strings.php:7
+msgid "Apps"
+msgstr ""
+
+#: strings.php:8
+msgid "Admin"
+msgstr ""
+
+#: strings.php:9
+msgid "Help"
+msgstr ""
+
+#: templates/404.php:12
+msgid "Cloud not found"
+msgstr ""
+
+#: templates/installation.php:20
+msgid "Create an <strong>admin account</strong>"
+msgstr ""
+
+#: templates/installation.php:26 templates/login.php:12
+msgid "Password"
+msgstr ""
+
+#: templates/installation.php:32
+msgid "Advanced"
+msgstr ""
+
+#: templates/installation.php:34
+msgid "Data folder"
+msgstr ""
+
+#: templates/installation.php:41
+msgid "Configure the database"
+msgstr ""
+
+#: templates/installation.php:46 templates/installation.php:57
+#: templates/installation.php:67
+msgid "will be used"
+msgstr ""
+
+#: templates/installation.php:79
+msgid "Database user"
+msgstr ""
+
+#: templates/installation.php:83
+msgid "Database password"
+msgstr ""
+
+#: templates/installation.php:87
+msgid "Database name"
+msgstr ""
+
+#: templates/installation.php:93
+msgid "Database host"
+msgstr ""
+
+#: templates/installation.php:98
+msgid "Finish setup"
+msgstr ""
+
+#: templates/layout.guest.php:35
+msgid "web services under your control"
+msgstr ""
+
+#: templates/layout.user.php:34
+msgid "Log out"
+msgstr ""
+
+#: templates/layout.user.php:46 templates/layout.user.php:47
+msgid "Settings"
+msgstr ""
+
+#: templates/login.php:5
+msgid "Lost your password?"
+msgstr ""
+
+#: templates/login.php:15
+msgid "remember"
+msgstr ""
+
+#: templates/login.php:16
+msgid "Log in"
+msgstr ""
+
+#: templates/logout.php:1
+msgid "You are logged out."
+msgstr ""
+
+#: templates/part.pagenavi.php:3
+msgid "prev"
+msgstr ""
+
+#: templates/part.pagenavi.php:20
+msgid "next"
+msgstr ""
+
+
diff --git a/l10n/gl/files.po b/l10n/gl/files.po
new file mode 100644
index 00000000000..164a7125e91
--- /dev/null
+++ b/l10n/gl/files.po
@@ -0,0 +1,108 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2011-08-13 02:19+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Galician (http://www.transifex.net/projects/p/owncloud/team/gl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: gl\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/upload.php:19
+msgid "There is no error, the file uploaded with success"
+msgstr ""
+
+#: ajax/upload.php:20
+msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
+msgstr ""
+
+#: ajax/upload.php:21
+msgid ""
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
+"the HTML form"
+msgstr ""
+
+#: ajax/upload.php:22
+msgid "The uploaded file was only partially uploaded"
+msgstr ""
+
+#: ajax/upload.php:23
+msgid "No file was uploaded"
+msgstr ""
+
+#: ajax/upload.php:24
+msgid "Missing a temporary folder"
+msgstr ""
+
+#: appinfo/app.php:8
+msgid "Files"
+msgstr ""
+
+#: templates/admin.php:5
+msgid "Maximum upload size"
+msgstr ""
+
+#: templates/index.php:7
+msgid "New"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Text file"
+msgstr ""
+
+#: templates/index.php:11
+msgid "Folder"
+msgstr ""
+
+#: templates/index.php:12
+msgid "From the web"
+msgstr ""
+
+#: templates/index.php:22
+msgid "Upload"
+msgstr ""
+
+#: templates/index.php:35
+msgid "Nothing in here. Upload something!"
+msgstr ""
+
+#: templates/index.php:43
+msgid "Name"
+msgstr ""
+
+#: templates/index.php:45
+msgid "Download"
+msgstr ""
+
+#: templates/index.php:49
+msgid "Size"
+msgstr ""
+
+#: templates/index.php:50
+msgid "Modified"
+msgstr ""
+
+#: templates/index.php:50
+msgid "Delete"
+msgstr ""
+
+#: templates/index.php:58
+msgid "Upload too large"
+msgstr ""
+
+#: templates/index.php:60
+msgid ""
+"The files you are trying to upload exceed the maximum size for file uploads "
+"on this server."
+msgstr ""
+
+
diff --git a/l10n/gl/gallery.po b/l10n/gl/gallery.po
new file mode 100644
index 00000000000..ec369f59cb9
--- /dev/null
+++ b/l10n/gl/gallery.po
@@ -0,0 +1,32 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:48+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Galician (http://www.transifex.net/projects/p/owncloud/team/gl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: gl\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:41
+msgid "Gallery"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Rescan"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+
diff --git a/l10n/gl/media.po b/l10n/gl/media.po
new file mode 100644
index 00000000000..66a58f40a80
--- /dev/null
+++ b/l10n/gl/media.po
@@ -0,0 +1,64 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2011-08-13 02:19+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Galician (http://www.transifex.net/projects/p/owncloud/team/gl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: gl\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:32 templates/player.php:9
+msgid "Music"
+msgstr ""
+
+#: templates/music.php:3 templates/player.php:13
+msgid "Play"
+msgstr ""
+
+#: templates/music.php:4 templates/music.php:26 templates/player.php:14
+msgid "Pause"
+msgstr ""
+
+#: templates/music.php:5
+msgid "Previous"
+msgstr ""
+
+#: templates/music.php:6 templates/player.php:15
+msgid "Next"
+msgstr ""
+
+#: templates/music.php:7
+msgid "Mute"
+msgstr ""
+
+#: templates/music.php:8
+msgid "Unmute"
+msgstr ""
+
+#: templates/music.php:25
+msgid "Rescan Collection"
+msgstr ""
+
+#: templates/music.php:37
+msgid "Artist"
+msgstr ""
+
+#: templates/music.php:38
+msgid "Album"
+msgstr ""
+
+#: templates/music.php:39
+msgid "Title"
+msgstr ""
+
+
diff --git a/l10n/gl/settings.po b/l10n/gl/settings.po
new file mode 100644
index 00000000000..2cb16dd7c32
--- /dev/null
+++ b/l10n/gl/settings.po
@@ -0,0 +1,152 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2011-07-25 16:05+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Galician (http://www.transifex.net/projects/p/owncloud/team/gl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: gl\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/lostpassword.php:14
+msgid "email Changed"
+msgstr ""
+
+#: ajax/lostpassword.php:16 ajax/openid.php:17 ajax/setlanguage.php:16
+msgid "Invalid request"
+msgstr ""
+
+#: ajax/openid.php:15
+msgid "OpenID Changed"
+msgstr ""
+
+#: ajax/setlanguage.php:14
+msgid "Language changed"
+msgstr ""
+
+#: templates/admin.php:13
+msgid "Log level"
+msgstr ""
+
+#: templates/apps.php:8
+msgid "Add your application"
+msgstr ""
+
+#: templates/apps.php:21
+msgid "Select an App"
+msgstr ""
+
+#: templates/apps.php:23
+msgid "-licensed"
+msgstr ""
+
+#: templates/apps.php:23
+msgid "by"
+msgstr ""
+
+#: templates/help.php:8
+msgid "Ask a question"
+msgstr ""
+
+#: templates/help.php:20
+msgid "Problems connecting to help database."
+msgstr ""
+
+#: templates/help.php:21
+msgid "Go there manually."
+msgstr ""
+
+#: templates/help.php:29
+msgid "Answer"
+msgstr ""
+
+#: templates/personal.php:8
+msgid "You use"
+msgstr ""
+
+#: templates/personal.php:8
+msgid "of the available"
+msgstr ""
+
+#: templates/personal.php:13
+msgid "Your password got changed"
+msgstr ""
+
+#: templates/personal.php:14
+msgid "Unable to change your password"
+msgstr ""
+
+#: templates/personal.php:15
+msgid "Current password"
+msgstr ""
+
+#: templates/personal.php:16
+msgid "New password"
+msgstr ""
+
+#: templates/personal.php:17
+msgid "show"
+msgstr ""
+
+#: templates/personal.php:18
+msgid "Change password"
+msgstr ""
+
+#: templates/personal.php:24
+msgid "Email"
+msgstr ""
+
+#: templates/personal.php:25
+msgid "Your email address"
+msgstr ""
+
+#: templates/personal.php:26
+msgid "Fill in an email address to enable password recovery"
+msgstr ""
+
+#: templates/personal.php:32 templates/personal.php:33
+msgid "Language"
+msgstr ""
+
+#: templates/personal.php:38
+msgid "Help translate"
+msgstr ""
+
+#: templates/personal.php:45
+msgid "use this address to connect to your ownCloud in your file manager"
+msgstr ""
+
+#: templates/users.php:15 templates/users.php:30
+msgid "Name"
+msgstr ""
+
+#: templates/users.php:16 templates/users.php:31
+msgid "Password"
+msgstr ""
+
+#: templates/users.php:17 templates/users.php:32 templates/users.php:46
+msgid "Groups"
+msgstr ""
+
+#: templates/users.php:23
+msgid "Create"
+msgstr ""
+
+#: templates/users.php:33
+msgid "Quota"
+msgstr ""
+
+#: templates/users.php:58
+msgid "Delete"
+msgstr ""
+
+
diff --git a/l10n/he/calendar.po b/l10n/he/calendar.po
new file mode 100644
index 00000000000..fd3ee1ab0f4
--- /dev/null
+++ b/l10n/he/calendar.po
@@ -0,0 +1,639 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Elad Alfassa <elad@fedoraproject.org>, 2011.
+# <tomerc+transifex.net@gmail.com>, 2011.
+# Yaron Shahrabani <sh.yaron@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Hebrew (http://www.transifex.net/projects/p/owncloud/team/he/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: he\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/guesstimezone.php:42
+msgid "New Timezone:"
+msgstr ""
+
+#: ajax/settimezone.php:22
+msgid "Timezone changed"
+msgstr "אזור זמן השתנה"
+
+#: ajax/settimezone.php:24
+msgid "Invalid request"
+msgstr "בקשה לא חוקית"
+
+#: appinfo/app.php:20 templates/calendar.php:13
+#: templates/part.eventform.php:20
+msgid "Calendar"
+msgstr "ח שנה"
+
+#: lib/app.php:19
+msgid "Wrong calendar"
+msgstr "לוח שנה לא נכון"
+
+#: lib/app.php:60 lib/object.php:332
+msgid "Birthday"
+msgstr "יום הולדת"
+
+#: lib/app.php:61 lib/object.php:333
+msgid "Business"
+msgstr "עסקים"
+
+#: lib/app.php:62 lib/object.php:334
+msgid "Call"
+msgstr "שיחה"
+
+#: lib/app.php:63 lib/object.php:335
+msgid "Clients"
+msgstr "לקוחות"
+
+#: lib/app.php:64 lib/object.php:336
+msgid "Deliverer"
+msgstr "משלוח"
+
+#: lib/app.php:65 lib/object.php:337
+msgid "Holidays"
+msgstr "חגים"
+
+#: lib/app.php:66 lib/object.php:338
+msgid "Ideas"
+msgstr "רעיונות"
+
+#: lib/app.php:67 lib/object.php:339
+msgid "Journey"
+msgstr "מסע"
+
+#: lib/app.php:68 lib/object.php:340
+msgid "Jubilee"
+msgstr "יובל"
+
+#: lib/app.php:69 lib/object.php:341
+msgid "Meeting"
+msgstr "פגישה"
+
+#: lib/app.php:70 lib/object.php:342
+msgid "Other"
+msgstr "אחר"
+
+#: lib/app.php:71 lib/object.php:343
+msgid "Personal"
+msgstr "אישי"
+
+#: lib/app.php:72 lib/object.php:344
+msgid "Projects"
+msgstr "פרוייקטים"
+
+#: lib/app.php:73 lib/object.php:345
+msgid "Questions"
+msgstr "שאלות"
+
+#: lib/app.php:74 lib/object.php:346
+msgid "Work"
+msgstr "עבודה"
+
+#: lib/object.php:353
+msgid "Does not repeat"
+msgstr "ללא חזרה"
+
+#: lib/object.php:354
+msgid "Daily"
+msgstr "יומי"
+
+#: lib/object.php:355
+msgid "Weekly"
+msgstr "שבועי"
+
+#: lib/object.php:356
+msgid "Every Weekday"
+msgstr "כל יום עבודה"
+
+#: lib/object.php:357
+msgid "Bi-Weekly"
+msgstr "דו שבועי"
+
+#: lib/object.php:358
+msgid "Monthly"
+msgstr "חודשי"
+
+#: lib/object.php:359
+msgid "Yearly"
+msgstr "שנתי"
+
+#: lib/object.php:366
+msgid "never"
+msgstr ""
+
+#: lib/object.php:367
+msgid "by occurrences"
+msgstr ""
+
+#: lib/object.php:368
+msgid "by date"
+msgstr ""
+
+#: lib/object.php:375
+msgid "by monthday"
+msgstr ""
+
+#: lib/object.php:376
+msgid "by weekday"
+msgstr ""
+
+#: lib/object.php:383 templates/lAfix.php:3
+msgid "Monday"
+msgstr ""
+
+#: lib/object.php:384 templates/lAfix.php:4
+msgid "Tuesday"
+msgstr ""
+
+#: lib/object.php:385 templates/lAfix.php:5
+msgid "Wednesday"
+msgstr ""
+
+#: lib/object.php:386 templates/lAfix.php:6
+msgid "Thursday"
+msgstr ""
+
+#: lib/object.php:387 templates/lAfix.php:7
+msgid "Friday"
+msgstr ""
+
+#: lib/object.php:388 templates/lAfix.php:8
+msgid "Saturday"
+msgstr ""
+
+#: lib/object.php:389 templates/lAfix.php:2
+msgid "Sunday"
+msgstr ""
+
+#: lib/object.php:396
+msgid "events week of month"
+msgstr ""
+
+#: lib/object.php:397
+msgid "first"
+msgstr ""
+
+#: lib/object.php:398
+msgid "second"
+msgstr ""
+
+#: lib/object.php:399
+msgid "third"
+msgstr ""
+
+#: lib/object.php:400
+msgid "fourth"
+msgstr ""
+
+#: lib/object.php:401
+msgid "fifth"
+msgstr ""
+
+#: lib/object.php:402
+msgid "last"
+msgstr ""
+
+#: lib/object.php:424 templates/lAfix.php:16
+msgid "January"
+msgstr ""
+
+#: lib/object.php:425 templates/lAfix.php:17
+msgid "February"
+msgstr ""
+
+#: lib/object.php:426 templates/lAfix.php:18
+msgid "March"
+msgstr ""
+
+#: lib/object.php:427 templates/lAfix.php:19
+msgid "April"
+msgstr ""
+
+#: lib/object.php:428 templates/lAfix.php:20
+msgid "May"
+msgstr ""
+
+#: lib/object.php:429 templates/lAfix.php:21
+msgid "June"
+msgstr ""
+
+#: lib/object.php:430 templates/lAfix.php:22
+msgid "July"
+msgstr ""
+
+#: lib/object.php:431 templates/lAfix.php:23
+msgid "August"
+msgstr ""
+
+#: lib/object.php:432 templates/lAfix.php:24
+msgid "September"
+msgstr ""
+
+#: lib/object.php:433 templates/lAfix.php:25
+msgid "October"
+msgstr ""
+
+#: lib/object.php:434 templates/lAfix.php:26
+msgid "November"
+msgstr ""
+
+#: lib/object.php:435 templates/lAfix.php:27
+msgid "December"
+msgstr ""
+
+#: lib/object.php:441
+msgid "by events date"
+msgstr ""
+
+#: lib/object.php:442
+msgid "by yearday(s)"
+msgstr ""
+
+#: lib/object.php:443
+msgid "by weeknumber(s)"
+msgstr ""
+
+#: lib/object.php:444
+msgid "by day and month"
+msgstr ""
+
+#: lib/object.php:467
+msgid "Not an array"
+msgstr "לא מערך"
+
+#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+msgid "Date"
+msgstr ""
+
+#: lib/search.php:40
+msgid "Cal."
+msgstr ""
+
+#: templates/calendar.php:10
+msgid "All day"
+msgstr "היום"
+
+#: templates/calendar.php:11
+msgid "Missing fields"
+msgstr ""
+
+#: templates/calendar.php:12 templates/part.eventform.php:3
+msgid "Title"
+msgstr "כותרת"
+
+#: templates/calendar.php:14
+msgid "From Date"
+msgstr ""
+
+#: templates/calendar.php:15
+msgid "From Time"
+msgstr ""
+
+#: templates/calendar.php:16
+msgid "To Date"
+msgstr ""
+
+#: templates/calendar.php:17
+msgid "To Time"
+msgstr ""
+
+#: templates/calendar.php:18
+msgid "The event ends before it starts"
+msgstr ""
+
+#: templates/calendar.php:19
+msgid "There was a database fail"
+msgstr ""
+
+#: templates/calendar.php:52
+msgid "Week"
+msgstr "שבוע"
+
+#: templates/calendar.php:53
+msgid "Month"
+msgstr "חודש"
+
+#: templates/calendar.php:54
+msgid "List"
+msgstr "רשימה"
+
+#: templates/calendar.php:59
+msgid "Today"
+msgstr "היום"
+
+#: templates/calendar.php:60
+msgid "Calendars"
+msgstr "לוחות שנה"
+
+#: templates/calendar.php:78
+msgid "There was a fail, while parsing the file."
+msgstr "אירעה שגיאה בעת פענוח הקובץ."
+
+#: templates/lAfix.php:9
+msgid "Sun."
+msgstr ""
+
+#: templates/lAfix.php:10
+msgid "Mon."
+msgstr ""
+
+#: templates/lAfix.php:11
+msgid "Tue."
+msgstr ""
+
+#: templates/lAfix.php:12
+msgid "Wed."
+msgstr ""
+
+#: templates/lAfix.php:13
+msgid "Thu."
+msgstr ""
+
+#: templates/lAfix.php:14
+msgid "Fri."
+msgstr ""
+
+#: templates/lAfix.php:15
+msgid "Sat."
+msgstr ""
+
+#: templates/lAfix.php:28
+msgid "Jan."
+msgstr ""
+
+#: templates/lAfix.php:29
+msgid "Feb."
+msgstr ""
+
+#: templates/lAfix.php:30
+msgid "Mar."
+msgstr ""
+
+#: templates/lAfix.php:31
+msgid "Apr."
+msgstr ""
+
+#: templates/lAfix.php:32
+msgid "May."
+msgstr ""
+
+#: templates/lAfix.php:33
+msgid "Jun."
+msgstr ""
+
+#: templates/lAfix.php:34
+msgid "Jul."
+msgstr ""
+
+#: templates/lAfix.php:35
+msgid "Aug."
+msgstr ""
+
+#: templates/lAfix.php:36
+msgid "Sep."
+msgstr ""
+
+#: templates/lAfix.php:37
+msgid "Oct."
+msgstr ""
+
+#: templates/lAfix.php:38
+msgid "Nov."
+msgstr ""
+
+#: templates/lAfix.php:39
+msgid "Dec."
+msgstr ""
+
+#: templates/part.choosecalendar.php:1
+msgid "Choose active calendars"
+msgstr "בחר לוחות שנה פעילים"
+
+#: templates/part.choosecalendar.php:15
+msgid "New Calendar"
+msgstr "לוח שנה חדש"
+
+#: templates/part.choosecalendar.php:20
+#: templates/part.choosecalendar.rowfields.php:4
+msgid "CalDav Link"
+msgstr "קישור CalDav"
+
+#: templates/part.choosecalendar.rowfields.php:4
+msgid "Download"
+msgstr "הורדה"
+
+#: templates/part.choosecalendar.rowfields.php:4
+msgid "Edit"
+msgstr "עריכה"
+
+#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.editevent.php:9
+msgid "Delete"
+msgstr "מחיקה"
+
+#: templates/part.editcalendar.php:9
+msgid "New calendar"
+msgstr "לוח שנה חדש"
+
+#: templates/part.editcalendar.php:9
+msgid "Edit calendar"
+msgstr "עריכת לוח שנה"
+
+#: templates/part.editcalendar.php:12
+msgid "Displayname"
+msgstr "שם תצוגה"
+
+#: templates/part.editcalendar.php:23
+msgid "Active"
+msgstr "פעיל"
+
+#: templates/part.editcalendar.php:29
+msgid "Calendar color"
+msgstr "צבע לוח שנה"
+
+#: templates/part.editcalendar.php:42
+msgid "Save"
+msgstr "שמירה"
+
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
+#: templates/part.newevent.php:6
+msgid "Submit"
+msgstr "שליחה"
+
+#: templates/part.editcalendar.php:43
+msgid "Cancel"
+msgstr "ביטול"
+
+#: templates/part.editevent.php:1
+msgid "Edit an event"
+msgstr "עריכת אירוע"
+
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr "יצוא"
+
+#: templates/part.eventform.php:5
+msgid "Title of the Event"
+msgstr "כותרת האירוע"
+
+#: templates/part.eventform.php:11
+msgid "Category"
+msgstr "קטגוריה"
+
+#: templates/part.eventform.php:13
+msgid "Select category"
+msgstr "בחר קטגוריה"
+
+#: templates/part.eventform.php:37
+msgid "All Day Event"
+msgstr "אירוע של כל היום"
+
+#: templates/part.eventform.php:41
+msgid "From"
+msgstr "מאת"
+
+#: templates/part.eventform.php:49
+msgid "To"
+msgstr "עבור"
+
+#: templates/part.eventform.php:57
+msgid "Advanced options"
+msgstr ""
+
+#: templates/part.eventform.php:61
+msgid "Repeat"
+msgstr "חזרה"
+
+#: templates/part.eventform.php:68
+msgid "Advanced"
+msgstr ""
+
+#: templates/part.eventform.php:112
+msgid "Select weekdays"
+msgstr ""
+
+#: templates/part.eventform.php:125 templates/part.eventform.php:138
+msgid "Select days"
+msgstr ""
+
+#: templates/part.eventform.php:130
+msgid "and the events day of year."
+msgstr ""
+
+#: templates/part.eventform.php:143
+msgid "and the events day of month."
+msgstr ""
+
+#: templates/part.eventform.php:151
+msgid "Select months"
+msgstr ""
+
+#: templates/part.eventform.php:164
+msgid "Select weeks"
+msgstr ""
+
+#: templates/part.eventform.php:169
+msgid "and the events week of year."
+msgstr ""
+
+#: templates/part.eventform.php:175
+msgid "Interval"
+msgstr ""
+
+#: templates/part.eventform.php:181
+msgid "End"
+msgstr ""
+
+#: templates/part.eventform.php:193
+msgid "occurrences"
+msgstr ""
+
+#: templates/part.eventform.php:208
+msgid "Location"
+msgstr "מיקום"
+
+#: templates/part.eventform.php:210
+msgid "Location of the Event"
+msgstr "מיקום האירוע"
+
+#: templates/part.eventform.php:216
+msgid "Description"
+msgstr "תיאור"
+
+#: templates/part.eventform.php:218
+msgid "Description of the Event"
+msgstr "תיאור האירוע"
+
+#: templates/part.import.php:1
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the calendar"
+msgstr ""
+
+#: templates/part.import.php:10
+msgid "create a new calendar"
+msgstr ""
+
+#: templates/part.import.php:15
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import"
+msgstr "יבוא"
+
+#: templates/part.import.php:20
+msgid "Importing calendar"
+msgstr ""
+
+#: templates/part.import.php:23
+msgid "Calendar imported successfully"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Close Dialog"
+msgstr ""
+
+#: templates/part.newevent.php:1
+msgid "Create a new event"
+msgstr "יצירת אירוע חדש"
+
+#: templates/settings.php:13
+msgid "Timezone"
+msgstr "אזור זמן"
+
+#: templates/settings.php:30
+msgid "Check always for changes of the timezone"
+msgstr ""
+
+#: templates/settings.php:32
+msgid "Timeformat"
+msgstr ""
+
+#: templates/settings.php:34
+msgid "24h"
+msgstr ""
+
+#: templates/settings.php:35
+msgid "12h"
+msgstr ""
+
+#: templates/settings.php:41
+msgid "Calendar CalDAV syncing address:"
+msgstr ""
+
+
diff --git a/l10n/he/contacts.po b/l10n/he/contacts.po
new file mode 100644
index 00000000000..3779134461c
--- /dev/null
+++ b/l10n/he/contacts.po
@@ -0,0 +1,290 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <tomerc+transifex.net@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Hebrew (http://www.transifex.net/projects/p/owncloud/team/he/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: he\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/activation.php:17 ajax/updateaddressbook.php:26
+msgid "Error (de)activating addressbook."
+msgstr ""
+
+#: ajax/addcard.php:79
+msgid "There was an error adding the contact."
+msgstr ""
+
+#: ajax/addproperty.php:39
+msgid "Cannot add empty property."
+msgstr ""
+
+#: ajax/addproperty.php:51
+msgid "At least one of the address fields has to be filled out."
+msgstr ""
+
+#: ajax/addproperty.php:77
+msgid "Error adding contact property."
+msgstr ""
+
+#: ajax/createaddressbook.php:20
+msgid "Error adding addressbook."
+msgstr ""
+
+#: ajax/createaddressbook.php:26
+msgid "Error activating addressbook."
+msgstr ""
+
+#: ajax/deleteproperty.php:40
+msgid "Error deleting contact property."
+msgstr ""
+
+#: ajax/setproperty.php:79
+msgid "Error updating contact property."
+msgstr ""
+
+#: ajax/updateaddressbook.php:20
+msgid "Error updating addressbook."
+msgstr ""
+
+#: appinfo/app.php:21 templates/settings.php:3
+msgid "Contacts"
+msgstr ""
+
+#: lib/app.php:42
+msgid "This is not your addressbook."
+msgstr "זהו אינו ספר הכתובות שלך"
+
+#: lib/app.php:51 photo.php:34
+msgid "Contact could not be found."
+msgstr "לא ניתן לאתר איש קשר"
+
+#: lib/app.php:79
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "המידע אודות vCard אינו נכון. נא לטעון מחדש את הדף."
+
+#: lib/app.php:91 templates/part.addcardform.php:54
+#: templates/part.property.php:45 templates/part.setpropertyform.php:7
+msgid "Address"
+msgstr "כתובת"
+
+#: lib/app.php:92 templates/part.addcardform.php:43
+msgid "Telephone"
+msgstr "טלפון"
+
+#: lib/app.php:93 templates/part.addcardform.php:37
+#: templates/part.property.php:16 templates/part.setpropertyform.php:51
+msgid "Email"
+msgstr "דואר אלקטרוני"
+
+#: lib/app.php:94 templates/part.addcardform.php:27
+#: templates/part.property.php:9 templates/part.setpropertyform.php:54
+msgid "Organization"
+msgstr "ארגון"
+
+#: lib/app.php:106 lib/app.php:113
+msgid "Work"
+msgstr "עבודה"
+
+#: lib/app.php:107 lib/app.php:111
+msgid "Home"
+msgstr "בית"
+
+#: lib/app.php:112
+msgid "Mobile"
+msgstr "נייד"
+
+#: lib/app.php:114
+msgid "Text"
+msgstr "טקסט"
+
+#: lib/app.php:115
+msgid "Voice"
+msgstr "קולי"
+
+#: lib/app.php:116
+msgid "Fax"
+msgstr "פקס"
+
+#: lib/app.php:117
+msgid "Video"
+msgstr "וידאו"
+
+#: lib/app.php:118
+msgid "Pager"
+msgstr "זימונית"
+
+#: lib/search.php:22
+msgid "Contact"
+msgstr ""
+
+#: photo.php:40
+msgid "This is not your contact."
+msgstr "זהו אינו איש קשר שלך"
+
+#: photo.php:48
+msgid "This card is not RFC compatible."
+msgstr "כרטיס זה אינו תואם ל־RFC"
+
+#: photo.php:85
+msgid "This card does not contain a photo."
+msgstr "כרטיס זה אינו כולל תמונה"
+
+#: templates/index.php:6
+msgid "Add Contact"
+msgstr "הוספת איש קשר"
+
+#: templates/index.php:7
+msgid "Addressbooks"
+msgstr ""
+
+#: templates/part.addcardform.php:8
+msgid "Addressbook"
+msgstr ""
+
+#: templates/part.addcardform.php:21
+msgid "Name"
+msgstr "שם"
+
+#: templates/part.addcardform.php:57 templates/part.details.php:43
+#: templates/part.details.php:79 templates/part.setpropertyform.php:10
+#: templates/part.setpropertyform.php:47
+msgid "Type"
+msgstr ""
+
+#: templates/part.addcardform.php:65 templates/part.details.php:49
+#: templates/part.setpropertyform.php:16
+msgid "PO Box"
+msgstr "תא דואר"
+
+#: templates/part.addcardform.php:72 templates/part.details.php:53
+#: templates/part.setpropertyform.php:20
+msgid "Extended"
+msgstr "מורחב"
+
+#: templates/part.addcardform.php:78 templates/part.details.php:57
+#: templates/part.setpropertyform.php:24
+msgid "Street"
+msgstr "רחוב"
+
+#: templates/part.addcardform.php:84 templates/part.details.php:61
+#: templates/part.setpropertyform.php:28
+msgid "City"
+msgstr "עיר"
+
+#: templates/part.addcardform.php:90 templates/part.details.php:65
+#: templates/part.setpropertyform.php:32
+msgid "Region"
+msgstr "אזור"
+
+#: templates/part.addcardform.php:96 templates/part.details.php:69
+#: templates/part.setpropertyform.php:36
+msgid "Zipcode"
+msgstr "מיקוד"
+
+#: templates/part.addcardform.php:102 templates/part.details.php:73
+#: templates/part.setpropertyform.php:40
+msgid "Country"
+msgstr "מדינה"
+
+#: templates/part.addcardform.php:109
+msgid "Create Contact"
+msgstr "יצירת איש קשר"
+
+#: templates/part.chooseaddressbook.php:1
+msgid "Choose active Address Books"
+msgstr ""
+
+#: templates/part.chooseaddressbook.php:16
+msgid "New Address Book"
+msgstr ""
+
+#: templates/part.chooseaddressbook.php:21
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "CardDav Link"
+msgstr ""
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Download"
+msgstr ""
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Edit"
+msgstr "עריכה"
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Delete"
+msgstr "מחיקה"
+
+#: templates/part.details.php:3
+msgid "Download contact"
+msgstr ""
+
+#: templates/part.details.php:4
+msgid "Delete contact"
+msgstr ""
+
+#: templates/part.details.php:34
+msgid "Add"
+msgstr ""
+
+#: templates/part.editaddressbook.php:9
+msgid "New Addressbook"
+msgstr ""
+
+#: templates/part.editaddressbook.php:9
+msgid "Edit Addressbook"
+msgstr ""
+
+#: templates/part.editaddressbook.php:12
+msgid "Displayname"
+msgstr ""
+
+#: templates/part.editaddressbook.php:23
+msgid "Active"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Save"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Submit"
+msgstr ""
+
+#: templates/part.editaddressbook.php:30
+msgid "Cancel"
+msgstr ""
+
+#: templates/part.property.php:3
+msgid "Birthday"
+msgstr "יום הולדת"
+
+#: templates/part.property.php:23
+msgid "Preferred"
+msgstr ""
+
+#: templates/part.property.php:23 templates/part.setpropertyform.php:45
+msgid "Phone"
+msgstr "טלפון"
+
+#: templates/part.setpropertyform.php:57
+msgid "Update"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "CardDAV syncing address:"
+msgstr ""
+
+
diff --git a/l10n/he/core.po b/l10n/he/core.po
new file mode 100644
index 00000000000..705a03e4d94
--- /dev/null
+++ b/l10n/he/core.po
@@ -0,0 +1,172 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <tomerc+transifex.net@gmail.com>, 2011.
+# Yaron Shahrabani <sh.yaron@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Hebrew (http://www.transifex.net/projects/p/owncloud/team/he/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: he\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: lostpassword/index.php:24
+msgid "Owncloud password reset"
+msgstr ""
+
+#: lostpassword/templates/email.php:1
+msgid "Use the following link to reset your password: {link}"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr "יישלח לתיבת הדוא״ל שלך קישור לאיפוס הססמה."
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Requested"
+msgstr "נדרש"
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr "הכניסה נכשלה!"
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:22
+#: templates/login.php:8
+msgid "Username"
+msgstr "שם משתמש"
+
+#: lostpassword/templates/lostpassword.php:14
+msgid "Request reset"
+msgstr "בקשת איפוס"
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr "הססמה שלך אופסה"
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr "ססמה חדשה"
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr "איפוס ססמה"
+
+#: strings.php:5
+msgid "Personal"
+msgstr "אישי"
+
+#: strings.php:6
+msgid "Users"
+msgstr "משתמשים"
+
+#: strings.php:7
+msgid "Apps"
+msgstr "יישומים"
+
+#: strings.php:8
+msgid "Admin"
+msgstr "מנהל"
+
+#: strings.php:9
+msgid "Help"
+msgstr "עזרה"
+
+#: templates/404.php:12
+msgid "Cloud not found"
+msgstr "ענן לא נמצא"
+
+#: templates/installation.php:20
+msgid "Create an <strong>admin account</strong>"
+msgstr "יצירת <strong>חשבון מנהל</strong>"
+
+#: templates/installation.php:26 templates/login.php:12
+msgid "Password"
+msgstr "ססמה"
+
+#: templates/installation.php:32
+msgid "Advanced"
+msgstr "מתקדם"
+
+#: templates/installation.php:34
+msgid "Data folder"
+msgstr "תיקיית נתונים"
+
+#: templates/installation.php:41
+msgid "Configure the database"
+msgstr "הגדרת מסד הנתונים"
+
+#: templates/installation.php:46 templates/installation.php:57
+#: templates/installation.php:67
+msgid "will be used"
+msgstr "ינוצלו"
+
+#: templates/installation.php:79
+msgid "Database user"
+msgstr "שם משתמש במסד הנתונים"
+
+#: templates/installation.php:83
+msgid "Database password"
+msgstr "ססמת מסד הנתונים"
+
+#: templates/installation.php:87
+msgid "Database name"
+msgstr "שם מסד הנתונים"
+
+#: templates/installation.php:93
+msgid "Database host"
+msgstr "שרת בסיס נתונים"
+
+#: templates/installation.php:98
+msgid "Finish setup"
+msgstr "סיום התקנה"
+
+#: templates/layout.guest.php:35
+msgid "web services under your control"
+msgstr ""
+
+#: templates/layout.user.php:34
+msgid "Log out"
+msgstr "התנתקות"
+
+#: templates/layout.user.php:46 templates/layout.user.php:47
+msgid "Settings"
+msgstr "הגדרות"
+
+#: templates/login.php:5
+msgid "Lost your password?"
+msgstr "שכחת את ססמתך?"
+
+#: templates/login.php:15
+msgid "remember"
+msgstr "שמירת הססמה"
+
+#: templates/login.php:16
+msgid "Log in"
+msgstr ""
+
+#: templates/logout.php:1
+msgid "You are logged out."
+msgstr "אינך מחובר."
+
+#: templates/part.pagenavi.php:3
+msgid "prev"
+msgstr "קודם"
+
+#: templates/part.pagenavi.php:20
+msgid "next"
+msgstr "הבא"
+
+
diff --git a/l10n/he/files.po b/l10n/he/files.po
new file mode 100644
index 00000000000..1147b3e49d7
--- /dev/null
+++ b/l10n/he/files.po
@@ -0,0 +1,109 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <tomerc+transifex.net@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Hebrew (http://www.transifex.net/projects/p/owncloud/team/he/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: he\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/upload.php:19
+msgid "There is no error, the file uploaded with success"
+msgstr "לא אירעה תקלה, הקבצים הועלו בהצלחה"
+
+#: ajax/upload.php:20
+msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
+msgstr "הקובץ שהועלה חרג מההנחיה upload_max_filesize בקובץ php.ini"
+
+#: ajax/upload.php:21
+msgid ""
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
+"the HTML form"
+msgstr "הקובץ שהועלה חרג מההנחיה MAX_FILE_SIZE שצוינה בטופס ה־HTML"
+
+#: ajax/upload.php:22
+msgid "The uploaded file was only partially uploaded"
+msgstr "הקובץ שהועלה הועלה בצורה חלקית"
+
+#: ajax/upload.php:23
+msgid "No file was uploaded"
+msgstr "לא הועלו קבצים"
+
+#: ajax/upload.php:24
+msgid "Missing a temporary folder"
+msgstr "תיקייה זמנית חסרה"
+
+#: appinfo/app.php:8
+msgid "Files"
+msgstr "קבצים"
+
+#: templates/admin.php:5
+msgid "Maximum upload size"
+msgstr "גודל העלאה מקסימלי"
+
+#: templates/index.php:7
+msgid "New"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Text file"
+msgstr ""
+
+#: templates/index.php:11
+msgid "Folder"
+msgstr ""
+
+#: templates/index.php:12
+msgid "From the web"
+msgstr ""
+
+#: templates/index.php:22
+msgid "Upload"
+msgstr "העלאה"
+
+#: templates/index.php:35
+msgid "Nothing in here. Upload something!"
+msgstr "אין כאן שום דבר. אולי ברצונך להעלות משהו?"
+
+#: templates/index.php:43
+msgid "Name"
+msgstr "שם"
+
+#: templates/index.php:45
+msgid "Download"
+msgstr "הורדה"
+
+#: templates/index.php:49
+msgid "Size"
+msgstr "גודל"
+
+#: templates/index.php:50
+msgid "Modified"
+msgstr "זמן שינוי"
+
+#: templates/index.php:50
+msgid "Delete"
+msgstr "מחיקה"
+
+#: templates/index.php:58
+msgid "Upload too large"
+msgstr "העלאה גדולה מידי"
+
+#: templates/index.php:60
+msgid ""
+"The files you are trying to upload exceed the maximum size for file uploads "
+"on this server."
+msgstr "הקבצים שניסית להעלות חרגו מהגודל המקסימלי להעלאת קבצים על שרת זה."
+
+
diff --git a/l10n/he/gallery.po b/l10n/he/gallery.po
new file mode 100644
index 00000000000..5b80974785c
--- /dev/null
+++ b/l10n/he/gallery.po
@@ -0,0 +1,32 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:48+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Hebrew (http://www.transifex.net/projects/p/owncloud/team/he/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: he\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:41
+msgid "Gallery"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Rescan"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+
diff --git a/l10n/he/media.po b/l10n/he/media.po
new file mode 100644
index 00000000000..e578ad99185
--- /dev/null
+++ b/l10n/he/media.po
@@ -0,0 +1,65 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <tomerc+transifex.net@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Hebrew (http://www.transifex.net/projects/p/owncloud/team/he/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: he\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:32
+msgid "Music"
+msgstr "מוזיקה"
+
+#: templates/music.php:3 templates/player.php:13
+msgid "Play"
+msgstr "נגן"
+
+#: templates/music.php:4 templates/music.php:26 templates/player.php:14
+msgid "Pause"
+msgstr "השהה"
+
+#: templates/music.php:5
+msgid "Previous"
+msgstr "קודם"
+
+#: templates/music.php:6 templates/player.php:15
+msgid "Next"
+msgstr "הבא"
+
+#: templates/music.php:7
+msgid "Mute"
+msgstr "השתק"
+
+#: templates/music.php:8
+msgid "Unmute"
+msgstr "בטל השתקה"
+
+#: templates/music.php:25
+msgid "Rescan Collection"
+msgstr "סריקת אוסף מחדש"
+
+#: templates/music.php:37
+msgid "Artist"
+msgstr "מבצע"
+
+#: templates/music.php:38
+msgid "Album"
+msgstr "אלבום"
+
+#: templates/music.php:39
+msgid "Title"
+msgstr "כותרת"
+
+
diff --git a/l10n/he/settings.po b/l10n/he/settings.po
new file mode 100644
index 00000000000..7941f186486
--- /dev/null
+++ b/l10n/he/settings.po
@@ -0,0 +1,153 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <tomerc+transifex.net@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Hebrew (http://www.transifex.net/projects/p/owncloud/team/he/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: he\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/lostpassword.php:14
+msgid "email Changed"
+msgstr ""
+
+#: ajax/lostpassword.php:16 ajax/openid.php:17 ajax/setlanguage.php:16
+msgid "Invalid request"
+msgstr "בקשה לא חוקית"
+
+#: ajax/openid.php:15
+msgid "OpenID Changed"
+msgstr "OpenID השתנה"
+
+#: ajax/setlanguage.php:14
+msgid "Language changed"
+msgstr "שפה השתנתה"
+
+#: templates/admin.php:13
+msgid "Log level"
+msgstr ""
+
+#: templates/apps.php:8
+msgid "Add your application"
+msgstr "הוספת היישום שלך"
+
+#: templates/apps.php:21
+msgid "Select an App"
+msgstr "בחירת יישום"
+
+#: templates/apps.php:23
+msgid "-licensed"
+msgstr "רשיון"
+
+#: templates/apps.php:23
+msgid "by"
+msgstr "מאת"
+
+#: templates/help.php:8
+msgid "Ask a question"
+msgstr "שאל שאלה"
+
+#: templates/help.php:20
+msgid "Problems connecting to help database."
+msgstr "בעיות בהתחברות לבסיס נתוני העזרה"
+
+#: templates/help.php:21
+msgid "Go there manually."
+msgstr "גש לשם באופן ידני"
+
+#: templates/help.php:29
+msgid "Answer"
+msgstr "מענה"
+
+#: templates/personal.php:8
+msgid "You use"
+msgstr "הנך משתמש "
+
+#: templates/personal.php:8
+msgid "of the available"
+msgstr "מתוך "
+
+#: templates/personal.php:13
+msgid "Your password got changed"
+msgstr "הססמה שלך שונתה"
+
+#: templates/personal.php:14
+msgid "Unable to change your password"
+msgstr "לא ניתן לשנות את הססמה שלך"
+
+#: templates/personal.php:15
+msgid "Current password"
+msgstr "ססמה נוכחית"
+
+#: templates/personal.php:16
+msgid "New password"
+msgstr "ססמה חדשה"
+
+#: templates/personal.php:17
+msgid "show"
+msgstr "הצגה"
+
+#: templates/personal.php:18
+msgid "Change password"
+msgstr "שינוי ססמה"
+
+#: templates/personal.php:24
+msgid "Email"
+msgstr ""
+
+#: templates/personal.php:25
+msgid "Your email address"
+msgstr ""
+
+#: templates/personal.php:26
+msgid "Fill in an email address to enable password recovery"
+msgstr ""
+
+#: templates/personal.php:32 templates/personal.php:33
+msgid "Language"
+msgstr "פה"
+
+#: templates/personal.php:38
+msgid "Help translate"
+msgstr ""
+
+#: templates/personal.php:45
+msgid "use this address to connect to your ownCloud in your file manager"
+msgstr "השתמש בכתובת זו כדי להתחבר ל־ownCloude שלך ממנהל הקבצים"
+
+#: templates/users.php:15 templates/users.php:30
+msgid "Name"
+msgstr "שם"
+
+#: templates/users.php:16 templates/users.php:31
+msgid "Password"
+msgstr "ססמה"
+
+#: templates/users.php:17 templates/users.php:32 templates/users.php:46
+msgid "Groups"
+msgstr "קבוצות"
+
+#: templates/users.php:23
+msgid "Create"
+msgstr "יצירה"
+
+#: templates/users.php:33
+msgid "Quota"
+msgstr ""
+
+#: templates/users.php:58
+msgid "Delete"
+msgstr "מחיקה"
+
+
diff --git a/l10n/hr/calendar.po b/l10n/hr/calendar.po
new file mode 100644
index 00000000000..9aac8b76f34
--- /dev/null
+++ b/l10n/hr/calendar.po
@@ -0,0 +1,637 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Davor Kustec <dkustec@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Croatian (http://www.transifex.net/projects/p/owncloud/team/hr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hr\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2\n"
+
+#: ajax/guesstimezone.php:42
+msgid "New Timezone:"
+msgstr ""
+
+#: ajax/settimezone.php:22
+msgid "Timezone changed"
+msgstr "Vremenska zona promijenjena"
+
+#: ajax/settimezone.php:24
+msgid "Invalid request"
+msgstr "Neispravan zahtjev"
+
+#: appinfo/app.php:20 templates/calendar.php:13
+#: templates/part.eventform.php:20
+msgid "Calendar"
+msgstr "Kalendar"
+
+#: lib/app.php:19
+msgid "Wrong calendar"
+msgstr "Pogrešan kalendar"
+
+#: lib/app.php:60 lib/object.php:332
+msgid "Birthday"
+msgstr "Rođendan"
+
+#: lib/app.php:61 lib/object.php:333
+msgid "Business"
+msgstr "Poslovno"
+
+#: lib/app.php:62 lib/object.php:334
+msgid "Call"
+msgstr "Poziv"
+
+#: lib/app.php:63 lib/object.php:335
+msgid "Clients"
+msgstr "Klijenti"
+
+#: lib/app.php:64 lib/object.php:336
+msgid "Deliverer"
+msgstr "Dostavljač"
+
+#: lib/app.php:65 lib/object.php:337
+msgid "Holidays"
+msgstr "Odmori"
+
+#: lib/app.php:66 lib/object.php:338
+msgid "Ideas"
+msgstr "Ideje"
+
+#: lib/app.php:67 lib/object.php:339
+msgid "Journey"
+msgstr "Putovanje"
+
+#: lib/app.php:68 lib/object.php:340
+msgid "Jubilee"
+msgstr "Obljetnica"
+
+#: lib/app.php:69 lib/object.php:341
+msgid "Meeting"
+msgstr "Sastanak"
+
+#: lib/app.php:70 lib/object.php:342
+msgid "Other"
+msgstr "Ostalo"
+
+#: lib/app.php:71 lib/object.php:343
+msgid "Personal"
+msgstr "Osobno"
+
+#: lib/app.php:72 lib/object.php:344
+msgid "Projects"
+msgstr "Projekti"
+
+#: lib/app.php:73 lib/object.php:345
+msgid "Questions"
+msgstr "Pitanja"
+
+#: lib/app.php:74 lib/object.php:346
+msgid "Work"
+msgstr "Posao"
+
+#: lib/object.php:353
+msgid "Does not repeat"
+msgstr "Ne ponavlja se"
+
+#: lib/object.php:354
+msgid "Daily"
+msgstr "Dnevno"
+
+#: lib/object.php:355
+msgid "Weekly"
+msgstr "Tjedno"
+
+#: lib/object.php:356
+msgid "Every Weekday"
+msgstr "Svakog radnog dana"
+
+#: lib/object.php:357
+msgid "Bi-Weekly"
+msgstr "Dvotjedno"
+
+#: lib/object.php:358
+msgid "Monthly"
+msgstr "Mjesečno"
+
+#: lib/object.php:359
+msgid "Yearly"
+msgstr "Godišnje"
+
+#: lib/object.php:366
+msgid "never"
+msgstr ""
+
+#: lib/object.php:367
+msgid "by occurrences"
+msgstr ""
+
+#: lib/object.php:368
+msgid "by date"
+msgstr ""
+
+#: lib/object.php:375
+msgid "by monthday"
+msgstr ""
+
+#: lib/object.php:376
+msgid "by weekday"
+msgstr ""
+
+#: lib/object.php:383 templates/lAfix.php:3
+msgid "Monday"
+msgstr ""
+
+#: lib/object.php:384 templates/lAfix.php:4
+msgid "Tuesday"
+msgstr ""
+
+#: lib/object.php:385 templates/lAfix.php:5
+msgid "Wednesday"
+msgstr ""
+
+#: lib/object.php:386 templates/lAfix.php:6
+msgid "Thursday"
+msgstr ""
+
+#: lib/object.php:387 templates/lAfix.php:7
+msgid "Friday"
+msgstr ""
+
+#: lib/object.php:388 templates/lAfix.php:8
+msgid "Saturday"
+msgstr ""
+
+#: lib/object.php:389 templates/lAfix.php:2
+msgid "Sunday"
+msgstr ""
+
+#: lib/object.php:396
+msgid "events week of month"
+msgstr ""
+
+#: lib/object.php:397
+msgid "first"
+msgstr ""
+
+#: lib/object.php:398
+msgid "second"
+msgstr ""
+
+#: lib/object.php:399
+msgid "third"
+msgstr ""
+
+#: lib/object.php:400
+msgid "fourth"
+msgstr ""
+
+#: lib/object.php:401
+msgid "fifth"
+msgstr ""
+
+#: lib/object.php:402
+msgid "last"
+msgstr ""
+
+#: lib/object.php:424 templates/lAfix.php:16
+msgid "January"
+msgstr ""
+
+#: lib/object.php:425 templates/lAfix.php:17
+msgid "February"
+msgstr ""
+
+#: lib/object.php:426 templates/lAfix.php:18
+msgid "March"
+msgstr ""
+
+#: lib/object.php:427 templates/lAfix.php:19
+msgid "April"
+msgstr ""
+
+#: lib/object.php:428 templates/lAfix.php:20
+msgid "May"
+msgstr ""
+
+#: lib/object.php:429 templates/lAfix.php:21
+msgid "June"
+msgstr ""
+
+#: lib/object.php:430 templates/lAfix.php:22
+msgid "July"
+msgstr ""
+
+#: lib/object.php:431 templates/lAfix.php:23
+msgid "August"
+msgstr ""
+
+#: lib/object.php:432 templates/lAfix.php:24
+msgid "September"
+msgstr ""
+
+#: lib/object.php:433 templates/lAfix.php:25
+msgid "October"
+msgstr ""
+
+#: lib/object.php:434 templates/lAfix.php:26
+msgid "November"
+msgstr ""
+
+#: lib/object.php:435 templates/lAfix.php:27
+msgid "December"
+msgstr ""
+
+#: lib/object.php:441
+msgid "by events date"
+msgstr ""
+
+#: lib/object.php:442
+msgid "by yearday(s)"
+msgstr ""
+
+#: lib/object.php:443
+msgid "by weeknumber(s)"
+msgstr ""
+
+#: lib/object.php:444
+msgid "by day and month"
+msgstr ""
+
+#: lib/object.php:467
+msgid "Not an array"
+msgstr "Nije niz"
+
+#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+msgid "Date"
+msgstr ""
+
+#: lib/search.php:40
+msgid "Cal."
+msgstr ""
+
+#: templates/calendar.php:10
+msgid "All day"
+msgstr "Cijeli dan"
+
+#: templates/calendar.php:11
+msgid "Missing fields"
+msgstr "Nedostaju polja"
+
+#: templates/calendar.php:12 templates/part.eventform.php:3
+msgid "Title"
+msgstr "Naslov"
+
+#: templates/calendar.php:14
+msgid "From Date"
+msgstr "Datum Od"
+
+#: templates/calendar.php:15
+msgid "From Time"
+msgstr "Vrijeme Od"
+
+#: templates/calendar.php:16
+msgid "To Date"
+msgstr "Datum Do"
+
+#: templates/calendar.php:17
+msgid "To Time"
+msgstr "Vrijeme Do"
+
+#: templates/calendar.php:18
+msgid "The event ends before it starts"
+msgstr "Događaj završava prije nego počinje"
+
+#: templates/calendar.php:19
+msgid "There was a database fail"
+msgstr "Pogreška u bazi podataka"
+
+#: templates/calendar.php:52
+msgid "Week"
+msgstr "Tjedan"
+
+#: templates/calendar.php:53
+msgid "Month"
+msgstr "Mjesec"
+
+#: templates/calendar.php:54
+msgid "List"
+msgstr "Lista"
+
+#: templates/calendar.php:59
+msgid "Today"
+msgstr "Danas"
+
+#: templates/calendar.php:60
+msgid "Calendars"
+msgstr "Kalendari"
+
+#: templates/calendar.php:78
+msgid "There was a fail, while parsing the file."
+msgstr "Pogreška pri čitanju datoteke."
+
+#: templates/lAfix.php:9
+msgid "Sun."
+msgstr ""
+
+#: templates/lAfix.php:10
+msgid "Mon."
+msgstr ""
+
+#: templates/lAfix.php:11
+msgid "Tue."
+msgstr ""
+
+#: templates/lAfix.php:12
+msgid "Wed."
+msgstr ""
+
+#: templates/lAfix.php:13
+msgid "Thu."
+msgstr ""
+
+#: templates/lAfix.php:14
+msgid "Fri."
+msgstr ""
+
+#: templates/lAfix.php:15
+msgid "Sat."
+msgstr ""
+
+#: templates/lAfix.php:28
+msgid "Jan."
+msgstr ""
+
+#: templates/lAfix.php:29
+msgid "Feb."
+msgstr ""
+
+#: templates/lAfix.php:30
+msgid "Mar."
+msgstr ""
+
+#: templates/lAfix.php:31
+msgid "Apr."
+msgstr ""
+
+#: templates/lAfix.php:32
+msgid "May."
+msgstr ""
+
+#: templates/lAfix.php:33
+msgid "Jun."
+msgstr ""
+
+#: templates/lAfix.php:34
+msgid "Jul."
+msgstr ""
+
+#: templates/lAfix.php:35
+msgid "Aug."
+msgstr ""
+
+#: templates/lAfix.php:36
+msgid "Sep."
+msgstr ""
+
+#: templates/lAfix.php:37
+msgid "Oct."
+msgstr ""
+
+#: templates/lAfix.php:38
+msgid "Nov."
+msgstr ""
+
+#: templates/lAfix.php:39
+msgid "Dec."
+msgstr ""
+
+#: templates/part.choosecalendar.php:1
+msgid "Choose active calendars"
+msgstr "Odaberite aktive kalendare"
+
+#: templates/part.choosecalendar.php:15
+msgid "New Calendar"
+msgstr "Novi Kalendar"
+
+#: templates/part.choosecalendar.php:20
+#: templates/part.choosecalendar.rowfields.php:4
+msgid "CalDav Link"
+msgstr "CalDav Poveznica"
+
+#: templates/part.choosecalendar.rowfields.php:4
+msgid "Download"
+msgstr "Spremi lokalno"
+
+#: templates/part.choosecalendar.rowfields.php:4
+msgid "Edit"
+msgstr "Uredi"
+
+#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.editevent.php:9
+msgid "Delete"
+msgstr "Briši"
+
+#: templates/part.editcalendar.php:9
+msgid "New calendar"
+msgstr "Novi kalendar"
+
+#: templates/part.editcalendar.php:9
+msgid "Edit calendar"
+msgstr "Uredi kalendar"
+
+#: templates/part.editcalendar.php:12
+msgid "Displayname"
+msgstr "Naziv"
+
+#: templates/part.editcalendar.php:23
+msgid "Active"
+msgstr "Aktivan"
+
+#: templates/part.editcalendar.php:29
+msgid "Calendar color"
+msgstr "Boja kalendara"
+
+#: templates/part.editcalendar.php:42
+msgid "Save"
+msgstr "Spremi"
+
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
+#: templates/part.newevent.php:6
+msgid "Submit"
+msgstr "Potvrdi"
+
+#: templates/part.editcalendar.php:43
+msgid "Cancel"
+msgstr "Odustani"
+
+#: templates/part.editevent.php:1
+msgid "Edit an event"
+msgstr "Uredi događaj"
+
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr "Izvoz"
+
+#: templates/part.eventform.php:5
+msgid "Title of the Event"
+msgstr "Naslov Događaja"
+
+#: templates/part.eventform.php:11
+msgid "Category"
+msgstr "Kategorija"
+
+#: templates/part.eventform.php:13
+msgid "Select category"
+msgstr "Odabir kategorije"
+
+#: templates/part.eventform.php:37
+msgid "All Day Event"
+msgstr "Cjelodnevni događaj"
+
+#: templates/part.eventform.php:41
+msgid "From"
+msgstr "Od"
+
+#: templates/part.eventform.php:49
+msgid "To"
+msgstr "Za"
+
+#: templates/part.eventform.php:57
+msgid "Advanced options"
+msgstr "Napredne mogućnosti"
+
+#: templates/part.eventform.php:61
+msgid "Repeat"
+msgstr "Ponavljanje"
+
+#: templates/part.eventform.php:68
+msgid "Advanced"
+msgstr ""
+
+#: templates/part.eventform.php:112
+msgid "Select weekdays"
+msgstr ""
+
+#: templates/part.eventform.php:125 templates/part.eventform.php:138
+msgid "Select days"
+msgstr ""
+
+#: templates/part.eventform.php:130
+msgid "and the events day of year."
+msgstr ""
+
+#: templates/part.eventform.php:143
+msgid "and the events day of month."
+msgstr ""
+
+#: templates/part.eventform.php:151
+msgid "Select months"
+msgstr ""
+
+#: templates/part.eventform.php:164
+msgid "Select weeks"
+msgstr ""
+
+#: templates/part.eventform.php:169
+msgid "and the events week of year."
+msgstr ""
+
+#: templates/part.eventform.php:175
+msgid "Interval"
+msgstr ""
+
+#: templates/part.eventform.php:181
+msgid "End"
+msgstr ""
+
+#: templates/part.eventform.php:193
+msgid "occurrences"
+msgstr ""
+
+#: templates/part.eventform.php:208
+msgid "Location"
+msgstr "Lokacija"
+
+#: templates/part.eventform.php:210
+msgid "Location of the Event"
+msgstr "Lokacija Događaja"
+
+#: templates/part.eventform.php:216
+msgid "Description"
+msgstr "Opis"
+
+#: templates/part.eventform.php:218
+msgid "Description of the Event"
+msgstr "Opis događaja"
+
+#: templates/part.import.php:1
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the calendar"
+msgstr "Odaberite kalendar"
+
+#: templates/part.import.php:10
+msgid "create a new calendar"
+msgstr ""
+
+#: templates/part.import.php:15
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import"
+msgstr "Uvoz"
+
+#: templates/part.import.php:20
+msgid "Importing calendar"
+msgstr ""
+
+#: templates/part.import.php:23
+msgid "Calendar imported successfully"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Close Dialog"
+msgstr ""
+
+#: templates/part.newevent.php:1
+msgid "Create a new event"
+msgstr "Unesi novi događaj"
+
+#: templates/settings.php:13
+msgid "Timezone"
+msgstr "Vremenska zona"
+
+#: templates/settings.php:30
+msgid "Check always for changes of the timezone"
+msgstr ""
+
+#: templates/settings.php:32
+msgid "Timeformat"
+msgstr "Format vremena"
+
+#: templates/settings.php:34
+msgid "24h"
+msgstr "24h"
+
+#: templates/settings.php:35
+msgid "12h"
+msgstr "12h"
+
+#: templates/settings.php:41
+msgid "Calendar CalDAV syncing address:"
+msgstr "Adresa za CalDAV sinkronizaciju kalendara"
+
+
diff --git a/l10n/hr/contacts.po b/l10n/hr/contacts.po
new file mode 100644
index 00000000000..3df2758e0ca
--- /dev/null
+++ b/l10n/hr/contacts.po
@@ -0,0 +1,290 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Davor Kustec <dkustec@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Croatian (http://www.transifex.net/projects/p/owncloud/team/hr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hr\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2\n"
+
+#: ajax/activation.php:17 ajax/updateaddressbook.php:26
+msgid "Error (de)activating addressbook."
+msgstr ""
+
+#: ajax/addcard.php:79
+msgid "There was an error adding the contact."
+msgstr ""
+
+#: ajax/addproperty.php:39
+msgid "Cannot add empty property."
+msgstr ""
+
+#: ajax/addproperty.php:51
+msgid "At least one of the address fields has to be filled out."
+msgstr ""
+
+#: ajax/addproperty.php:77
+msgid "Error adding contact property."
+msgstr ""
+
+#: ajax/createaddressbook.php:20
+msgid "Error adding addressbook."
+msgstr ""
+
+#: ajax/createaddressbook.php:26
+msgid "Error activating addressbook."
+msgstr ""
+
+#: ajax/deleteproperty.php:40
+msgid "Error deleting contact property."
+msgstr ""
+
+#: ajax/setproperty.php:79
+msgid "Error updating contact property."
+msgstr ""
+
+#: ajax/updateaddressbook.php:20
+msgid "Error updating addressbook."
+msgstr ""
+
+#: appinfo/app.php:21 templates/settings.php:3
+msgid "Contacts"
+msgstr ""
+
+#: lib/app.php:42
+msgid "This is not your addressbook."
+msgstr "Ovo nije vaš adresar."
+
+#: lib/app.php:51 photo.php:34
+msgid "Contact could not be found."
+msgstr "Kontakt ne postoji."
+
+#: lib/app.php:79
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "Informacija o vCard je neispravna. Osvježite stranicu."
+
+#: lib/app.php:91 templates/part.addcardform.php:54
+#: templates/part.property.php:45 templates/part.setpropertyform.php:7
+msgid "Address"
+msgstr "Adresa"
+
+#: lib/app.php:92 templates/part.addcardform.php:43
+msgid "Telephone"
+msgstr "Telefon"
+
+#: lib/app.php:93 templates/part.addcardform.php:37
+#: templates/part.property.php:16 templates/part.setpropertyform.php:51
+msgid "Email"
+msgstr "E-mail"
+
+#: lib/app.php:94 templates/part.addcardform.php:27
+#: templates/part.property.php:9 templates/part.setpropertyform.php:54
+msgid "Organization"
+msgstr "Organizacija"
+
+#: lib/app.php:106 lib/app.php:113
+msgid "Work"
+msgstr "Posao"
+
+#: lib/app.php:107 lib/app.php:111
+msgid "Home"
+msgstr "Kuća"
+
+#: lib/app.php:112
+msgid "Mobile"
+msgstr "Mobitel"
+
+#: lib/app.php:114
+msgid "Text"
+msgstr "Tekst"
+
+#: lib/app.php:115
+msgid "Voice"
+msgstr "Glasovno"
+
+#: lib/app.php:116
+msgid "Fax"
+msgstr "Fax"
+
+#: lib/app.php:117
+msgid "Video"
+msgstr "Video"
+
+#: lib/app.php:118
+msgid "Pager"
+msgstr "Pager"
+
+#: lib/search.php:22
+msgid "Contact"
+msgstr ""
+
+#: photo.php:40
+msgid "This is not your contact."
+msgstr "Ovo nije vaš kontakt."
+
+#: photo.php:48
+msgid "This card is not RFC compatible."
+msgstr "Ova kartica nije sukladna prema RFC direktivama."
+
+#: photo.php:85
+msgid "This card does not contain a photo."
+msgstr "Ova kartica ne sadrži fotografiju."
+
+#: templates/index.php:6
+msgid "Add Contact"
+msgstr "Dodaj kontakt"
+
+#: templates/index.php:7
+msgid "Addressbooks"
+msgstr ""
+
+#: templates/part.addcardform.php:8
+msgid "Addressbook"
+msgstr ""
+
+#: templates/part.addcardform.php:21
+msgid "Name"
+msgstr "Naziv"
+
+#: templates/part.addcardform.php:57 templates/part.details.php:43
+#: templates/part.details.php:79 templates/part.setpropertyform.php:10
+#: templates/part.setpropertyform.php:47
+msgid "Type"
+msgstr ""
+
+#: templates/part.addcardform.php:65 templates/part.details.php:49
+#: templates/part.setpropertyform.php:16
+msgid "PO Box"
+msgstr "Poštanski Pretinac"
+
+#: templates/part.addcardform.php:72 templates/part.details.php:53
+#: templates/part.setpropertyform.php:20
+msgid "Extended"
+msgstr "Prošireno"
+
+#: templates/part.addcardform.php:78 templates/part.details.php:57
+#: templates/part.setpropertyform.php:24
+msgid "Street"
+msgstr "Ulica"
+
+#: templates/part.addcardform.php:84 templates/part.details.php:61
+#: templates/part.setpropertyform.php:28
+msgid "City"
+msgstr "Grad"
+
+#: templates/part.addcardform.php:90 templates/part.details.php:65
+#: templates/part.setpropertyform.php:32
+msgid "Region"
+msgstr "Regija"
+
+#: templates/part.addcardform.php:96 templates/part.details.php:69
+#: templates/part.setpropertyform.php:36
+msgid "Zipcode"
+msgstr "Poštanski broj"
+
+#: templates/part.addcardform.php:102 templates/part.details.php:73
+#: templates/part.setpropertyform.php:40
+msgid "Country"
+msgstr "Država"
+
+#: templates/part.addcardform.php:109
+msgid "Create Contact"
+msgstr "Izradi Kontakt"
+
+#: templates/part.chooseaddressbook.php:1
+msgid "Choose active Address Books"
+msgstr ""
+
+#: templates/part.chooseaddressbook.php:16
+msgid "New Address Book"
+msgstr ""
+
+#: templates/part.chooseaddressbook.php:21
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "CardDav Link"
+msgstr ""
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Download"
+msgstr ""
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Edit"
+msgstr "Uredi"
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Delete"
+msgstr "Obriši"
+
+#: templates/part.details.php:3
+msgid "Download contact"
+msgstr ""
+
+#: templates/part.details.php:4
+msgid "Delete contact"
+msgstr ""
+
+#: templates/part.details.php:34
+msgid "Add"
+msgstr ""
+
+#: templates/part.editaddressbook.php:9
+msgid "New Addressbook"
+msgstr ""
+
+#: templates/part.editaddressbook.php:9
+msgid "Edit Addressbook"
+msgstr ""
+
+#: templates/part.editaddressbook.php:12
+msgid "Displayname"
+msgstr ""
+
+#: templates/part.editaddressbook.php:23
+msgid "Active"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Save"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Submit"
+msgstr ""
+
+#: templates/part.editaddressbook.php:30
+msgid "Cancel"
+msgstr ""
+
+#: templates/part.property.php:3
+msgid "Birthday"
+msgstr "Rođendan"
+
+#: templates/part.property.php:23
+msgid "Preferred"
+msgstr ""
+
+#: templates/part.property.php:23 templates/part.setpropertyform.php:45
+msgid "Phone"
+msgstr "Telefon"
+
+#: templates/part.setpropertyform.php:57
+msgid "Update"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "CardDAV syncing address:"
+msgstr ""
+
+
diff --git a/l10n/hr/core.po b/l10n/hr/core.po
new file mode 100644
index 00000000000..0ddb082dd54
--- /dev/null
+++ b/l10n/hr/core.po
@@ -0,0 +1,172 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Davor Kustec <dkustec@gmail.com>, 2011.
+# Thomas Silađi <thomas.siladi@net.hr>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Croatian (http://www.transifex.net/projects/p/owncloud/team/hr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hr\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2\n"
+
+#: lostpassword/index.php:24
+msgid "Owncloud password reset"
+msgstr ""
+
+#: lostpassword/templates/email.php:1
+msgid "Use the following link to reset your password: {link}"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr "Primit ćete link kako biste poništili zaporku putem e-maila."
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Requested"
+msgstr "Zahtijevano"
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr "Prijava nije uspjela!"
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:22
+#: templates/login.php:8
+msgid "Username"
+msgstr "Korisničko ime"
+
+#: lostpassword/templates/lostpassword.php:14
+msgid "Request reset"
+msgstr "Zahtjev za resetiranjem"
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr "Vaša lozinka je resetirana"
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr "nova lozinka"
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr "poništavanje lozinke"
+
+#: strings.php:5
+msgid "Personal"
+msgstr "Osobno"
+
+#: strings.php:6
+msgid "Users"
+msgstr "korisnici"
+
+#: strings.php:7
+msgid "Apps"
+msgstr "aplikacije"
+
+#: strings.php:8
+msgid "Admin"
+msgstr "administrator"
+
+#: strings.php:9
+msgid "Help"
+msgstr "pomoć"
+
+#: templates/404.php:12
+msgid "Cloud not found"
+msgstr "Cloud nije pronađen"
+
+#: templates/installation.php:20
+msgid "Create an <strong>admin account</strong>"
+msgstr "stvoriti <strong>Administratorski račun</strong>"
+
+#: templates/installation.php:26 templates/login.php:12
+msgid "Password"
+msgstr "Lozinka"
+
+#: templates/installation.php:32
+msgid "Advanced"
+msgstr "Dodatno"
+
+#: templates/installation.php:34
+msgid "Data folder"
+msgstr "Mapa baze podataka"
+
+#: templates/installation.php:41
+msgid "Configure the database"
+msgstr "konfigurirati baze podataka"
+
+#: templates/installation.php:46 templates/installation.php:57
+#: templates/installation.php:67
+msgid "will be used"
+msgstr "će se koristiti"
+
+#: templates/installation.php:79
+msgid "Database user"
+msgstr "korisnik baze podataka"
+
+#: templates/installation.php:83
+msgid "Database password"
+msgstr "lozinka baze podataka"
+
+#: templates/installation.php:87
+msgid "Database name"
+msgstr "ime baze podataka"
+
+#: templates/installation.php:93
+msgid "Database host"
+msgstr "Poslužitelj baze podataka"
+
+#: templates/installation.php:98
+msgid "Finish setup"
+msgstr "završiti postavljanje"
+
+#: templates/layout.guest.php:35
+msgid "web services under your control"
+msgstr ""
+
+#: templates/layout.user.php:34
+msgid "Log out"
+msgstr "odjaviti"
+
+#: templates/layout.user.php:46 templates/layout.user.php:47
+msgid "Settings"
+msgstr "postavke"
+
+#: templates/login.php:5
+msgid "Lost your password?"
+msgstr "Izgubili ste lozinku?"
+
+#: templates/login.php:15
+msgid "remember"
+msgstr "zapamtiti"
+
+#: templates/login.php:16
+msgid "Log in"
+msgstr ""
+
+#: templates/logout.php:1
+msgid "You are logged out."
+msgstr "Vi ste odjavljeni."
+
+#: templates/part.pagenavi.php:3
+msgid "prev"
+msgstr "prethodan"
+
+#: templates/part.pagenavi.php:20
+msgid "next"
+msgstr "sljedeći"
+
+
diff --git a/l10n/hr/files.po b/l10n/hr/files.po
new file mode 100644
index 00000000000..4109098bdcc
--- /dev/null
+++ b/l10n/hr/files.po
@@ -0,0 +1,115 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Davor Kustec <dkustec@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Croatian (http://www.transifex.net/projects/p/owncloud/team/hr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hr\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2\n"
+
+#: ajax/upload.php:19
+msgid "There is no error, the file uploaded with success"
+msgstr "Datoteka je poslana uspješno i bez pogrešaka"
+
+#: ajax/upload.php:20
+msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
+msgstr ""
+"Poslana datoteka izlazi iz okvira upload_max_size direktive postavljene u "
+"php.ini konfiguracijskoj datoteci"
+
+#: ajax/upload.php:21
+msgid ""
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
+"the HTML form"
+msgstr ""
+"Poslana datoteka izlazi iz okvira MAX_FILE_SIZE direktive postavljene u HTML"
+" obrascu"
+
+#: ajax/upload.php:22
+msgid "The uploaded file was only partially uploaded"
+msgstr "Datoteka je poslana samo djelomično"
+
+#: ajax/upload.php:23
+msgid "No file was uploaded"
+msgstr "Ni jedna datoteka nije poslana"
+
+#: ajax/upload.php:24
+msgid "Missing a temporary folder"
+msgstr "Nedostaje privremena mapa"
+
+#: appinfo/app.php:8
+msgid "Files"
+msgstr "Datoteke"
+
+#: templates/admin.php:5
+msgid "Maximum upload size"
+msgstr "Maksimalna veličina prijenosa"
+
+#: templates/index.php:7
+msgid "New"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Text file"
+msgstr ""
+
+#: templates/index.php:11
+msgid "Folder"
+msgstr ""
+
+#: templates/index.php:12
+msgid "From the web"
+msgstr ""
+
+#: templates/index.php:22
+msgid "Upload"
+msgstr "Pošalji"
+
+#: templates/index.php:35
+msgid "Nothing in here. Upload something!"
+msgstr "Nema ničega u ovoj mapi. Pošalji nešto!"
+
+#: templates/index.php:43
+msgid "Name"
+msgstr "Naziv"
+
+#: templates/index.php:45
+msgid "Download"
+msgstr "Preuzmi"
+
+#: templates/index.php:49
+msgid "Size"
+msgstr "Veličina"
+
+#: templates/index.php:50
+msgid "Modified"
+msgstr "Zadnja promjena"
+
+#: templates/index.php:50
+msgid "Delete"
+msgstr "Briši"
+
+#: templates/index.php:58
+msgid "Upload too large"
+msgstr "Prijenos je preobiman"
+
+#: templates/index.php:60
+msgid ""
+"The files you are trying to upload exceed the maximum size for file uploads "
+"on this server."
+msgstr ""
+"Datoteke koje pokušavate prenijeti prelaze maksimalnu veličinu za prijenos "
+"datoteka na ovom poslužitelju."
+
+
diff --git a/l10n/hr/gallery.po b/l10n/hr/gallery.po
new file mode 100644
index 00000000000..fba00795844
--- /dev/null
+++ b/l10n/hr/gallery.po
@@ -0,0 +1,32 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:48+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Croatian (http://www.transifex.net/projects/p/owncloud/team/hr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hr\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2\n"
+
+#: appinfo/app.php:41
+msgid "Gallery"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Rescan"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+
diff --git a/l10n/hr/media.po b/l10n/hr/media.po
new file mode 100644
index 00000000000..dd2823a5ae5
--- /dev/null
+++ b/l10n/hr/media.po
@@ -0,0 +1,65 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Davor Kustec <dkustec@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Croatian (http://www.transifex.net/projects/p/owncloud/team/hr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hr\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2\n"
+
+#: appinfo/app.php:32
+msgid "Music"
+msgstr "Glazba"
+
+#: templates/music.php:3 templates/player.php:13
+msgid "Play"
+msgstr "Reprodukcija"
+
+#: templates/music.php:4 templates/music.php:26 templates/player.php:14
+msgid "Pause"
+msgstr "Pauza"
+
+#: templates/music.php:5
+msgid "Previous"
+msgstr "Prethodna"
+
+#: templates/music.php:6 templates/player.php:15
+msgid "Next"
+msgstr "Sljedeća"
+
+#: templates/music.php:7
+msgid "Mute"
+msgstr "Utišaj zvuk"
+
+#: templates/music.php:8
+msgid "Unmute"
+msgstr "Uključi zvuk"
+
+#: templates/music.php:25
+msgid "Rescan Collection"
+msgstr "Ponovi skeniranje kolekcije"
+
+#: templates/music.php:37
+msgid "Artist"
+msgstr "Izvođač"
+
+#: templates/music.php:38
+msgid "Album"
+msgstr "Album"
+
+#: templates/music.php:39
+msgid "Title"
+msgstr "Naslov"
+
+
diff --git a/l10n/hr/settings.po b/l10n/hr/settings.po
new file mode 100644
index 00000000000..c40085592cb
--- /dev/null
+++ b/l10n/hr/settings.po
@@ -0,0 +1,154 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Davor Kustec <dkustec@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Croatian (http://www.transifex.net/projects/p/owncloud/team/hr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hr\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2\n"
+
+#: ajax/lostpassword.php:14
+msgid "email Changed"
+msgstr ""
+
+#: ajax/lostpassword.php:16 ajax/openid.php:17 ajax/setlanguage.php:16
+msgid "Invalid request"
+msgstr "Neispravan zahtjev"
+
+#: ajax/openid.php:15
+msgid "OpenID Changed"
+msgstr "OpenID promijenjen"
+
+#: ajax/setlanguage.php:14
+msgid "Language changed"
+msgstr "Jezik promijenjen"
+
+#: templates/admin.php:13
+msgid "Log level"
+msgstr ""
+
+#: templates/apps.php:8
+msgid "Add your application"
+msgstr "Dodajte vašu aplikaciju"
+
+#: templates/apps.php:21
+msgid "Select an App"
+msgstr "Odaberite Aplikaciju"
+
+#: templates/apps.php:23
+msgid "-licensed"
+msgstr "-licencirano"
+
+#: templates/apps.php:23
+msgid "by"
+msgstr "od"
+
+#: templates/help.php:8
+msgid "Ask a question"
+msgstr "Postavite pitanje"
+
+#: templates/help.php:20
+msgid "Problems connecting to help database."
+msgstr "Problem pri spajanju na bazu podataka pomoći"
+
+#: templates/help.php:21
+msgid "Go there manually."
+msgstr "Idite tamo ručno."
+
+#: templates/help.php:29
+msgid "Answer"
+msgstr "Odgovor"
+
+#: templates/personal.php:8
+msgid "You use"
+msgstr "Koristite"
+
+#: templates/personal.php:8
+msgid "of the available"
+msgstr "od dostupno"
+
+#: templates/personal.php:13
+msgid "Your password got changed"
+msgstr "Vaša lozinka je promijenjena"
+
+#: templates/personal.php:14
+msgid "Unable to change your password"
+msgstr "Nemoguće promijeniti lozinku"
+
+#: templates/personal.php:15
+msgid "Current password"
+msgstr "Trenutna lozinka"
+
+#: templates/personal.php:16
+msgid "New password"
+msgstr "Nova lozinka"
+
+#: templates/personal.php:17
+msgid "show"
+msgstr "prikaz"
+
+#: templates/personal.php:18
+msgid "Change password"
+msgstr "Izmjena lozinke"
+
+#: templates/personal.php:24
+msgid "Email"
+msgstr ""
+
+#: templates/personal.php:25
+msgid "Your email address"
+msgstr ""
+
+#: templates/personal.php:26
+msgid "Fill in an email address to enable password recovery"
+msgstr ""
+
+#: templates/personal.php:32 templates/personal.php:33
+msgid "Language"
+msgstr "Jezik"
+
+#: templates/personal.php:38
+msgid "Help translate"
+msgstr ""
+
+#: templates/personal.php:45
+msgid "use this address to connect to your ownCloud in your file manager"
+msgstr ""
+"koristite ovu adresu za spajanje na Cloud u vašem upravitelju datoteka"
+
+#: templates/users.php:15 templates/users.php:30
+msgid "Name"
+msgstr "Ime"
+
+#: templates/users.php:16 templates/users.php:31
+msgid "Password"
+msgstr "Lozinka"
+
+#: templates/users.php:17 templates/users.php:32 templates/users.php:46
+msgid "Groups"
+msgstr "Grupe"
+
+#: templates/users.php:23
+msgid "Create"
+msgstr "Izradi"
+
+#: templates/users.php:33
+msgid "Quota"
+msgstr ""
+
+#: templates/users.php:58
+msgid "Delete"
+msgstr "Obriši"
+
+
diff --git a/l10n/hu_HU/calendar.po b/l10n/hu_HU/calendar.po
new file mode 100644
index 00000000000..5e36feb430d
--- /dev/null
+++ b/l10n/hu_HU/calendar.po
@@ -0,0 +1,637 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Peter Borsa <peter.borsa@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Hungarian (Hungary) (http://www.transifex.net/projects/p/owncloud/team/hu_HU/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hu_HU\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/guesstimezone.php:42
+msgid "New Timezone:"
+msgstr ""
+
+#: ajax/settimezone.php:22
+msgid "Timezone changed"
+msgstr "Időzóna megváltozott"
+
+#: ajax/settimezone.php:24
+msgid "Invalid request"
+msgstr "Érvénytelen kérés"
+
+#: appinfo/app.php:20 templates/calendar.php:13
+#: templates/part.eventform.php:20
+msgid "Calendar"
+msgstr "Naptár"
+
+#: lib/app.php:19
+msgid "Wrong calendar"
+msgstr "Hibás naptár"
+
+#: lib/app.php:60 lib/object.php:332
+msgid "Birthday"
+msgstr "Születésap"
+
+#: lib/app.php:61 lib/object.php:333
+msgid "Business"
+msgstr "Üzlet"
+
+#: lib/app.php:62 lib/object.php:334
+msgid "Call"
+msgstr "Hívás"
+
+#: lib/app.php:63 lib/object.php:335
+msgid "Clients"
+msgstr "Kliensek"
+
+#: lib/app.php:64 lib/object.php:336
+msgid "Deliverer"
+msgstr "Szállító"
+
+#: lib/app.php:65 lib/object.php:337
+msgid "Holidays"
+msgstr "Ünnepek"
+
+#: lib/app.php:66 lib/object.php:338
+msgid "Ideas"
+msgstr "Ötletek"
+
+#: lib/app.php:67 lib/object.php:339
+msgid "Journey"
+msgstr "Utazás"
+
+#: lib/app.php:68 lib/object.php:340
+msgid "Jubilee"
+msgstr "Évforduló"
+
+#: lib/app.php:69 lib/object.php:341
+msgid "Meeting"
+msgstr "Találkozó"
+
+#: lib/app.php:70 lib/object.php:342
+msgid "Other"
+msgstr "Egyéb"
+
+#: lib/app.php:71 lib/object.php:343
+msgid "Personal"
+msgstr "Személyes"
+
+#: lib/app.php:72 lib/object.php:344
+msgid "Projects"
+msgstr "Projektek"
+
+#: lib/app.php:73 lib/object.php:345
+msgid "Questions"
+msgstr "Kérdések"
+
+#: lib/app.php:74 lib/object.php:346
+msgid "Work"
+msgstr "Munka"
+
+#: lib/object.php:353
+msgid "Does not repeat"
+msgstr "Nem ismétlődik"
+
+#: lib/object.php:354
+msgid "Daily"
+msgstr "Napi"
+
+#: lib/object.php:355
+msgid "Weekly"
+msgstr "Heti"
+
+#: lib/object.php:356
+msgid "Every Weekday"
+msgstr "Minden hétköznap"
+
+#: lib/object.php:357
+msgid "Bi-Weekly"
+msgstr "Kéthetente"
+
+#: lib/object.php:358
+msgid "Monthly"
+msgstr "Havi"
+
+#: lib/object.php:359
+msgid "Yearly"
+msgstr "Évi"
+
+#: lib/object.php:366
+msgid "never"
+msgstr ""
+
+#: lib/object.php:367
+msgid "by occurrences"
+msgstr ""
+
+#: lib/object.php:368
+msgid "by date"
+msgstr ""
+
+#: lib/object.php:375
+msgid "by monthday"
+msgstr ""
+
+#: lib/object.php:376
+msgid "by weekday"
+msgstr ""
+
+#: lib/object.php:383 templates/lAfix.php:3
+msgid "Monday"
+msgstr ""
+
+#: lib/object.php:384 templates/lAfix.php:4
+msgid "Tuesday"
+msgstr ""
+
+#: lib/object.php:385 templates/lAfix.php:5
+msgid "Wednesday"
+msgstr ""
+
+#: lib/object.php:386 templates/lAfix.php:6
+msgid "Thursday"
+msgstr ""
+
+#: lib/object.php:387 templates/lAfix.php:7
+msgid "Friday"
+msgstr ""
+
+#: lib/object.php:388 templates/lAfix.php:8
+msgid "Saturday"
+msgstr ""
+
+#: lib/object.php:389 templates/lAfix.php:2
+msgid "Sunday"
+msgstr ""
+
+#: lib/object.php:396
+msgid "events week of month"
+msgstr ""
+
+#: lib/object.php:397
+msgid "first"
+msgstr ""
+
+#: lib/object.php:398
+msgid "second"
+msgstr ""
+
+#: lib/object.php:399
+msgid "third"
+msgstr ""
+
+#: lib/object.php:400
+msgid "fourth"
+msgstr ""
+
+#: lib/object.php:401
+msgid "fifth"
+msgstr ""
+
+#: lib/object.php:402
+msgid "last"
+msgstr ""
+
+#: lib/object.php:424 templates/lAfix.php:16
+msgid "January"
+msgstr ""
+
+#: lib/object.php:425 templates/lAfix.php:17
+msgid "February"
+msgstr ""
+
+#: lib/object.php:426 templates/lAfix.php:18
+msgid "March"
+msgstr ""
+
+#: lib/object.php:427 templates/lAfix.php:19
+msgid "April"
+msgstr ""
+
+#: lib/object.php:428 templates/lAfix.php:20
+msgid "May"
+msgstr ""
+
+#: lib/object.php:429 templates/lAfix.php:21
+msgid "June"
+msgstr ""
+
+#: lib/object.php:430 templates/lAfix.php:22
+msgid "July"
+msgstr ""
+
+#: lib/object.php:431 templates/lAfix.php:23
+msgid "August"
+msgstr ""
+
+#: lib/object.php:432 templates/lAfix.php:24
+msgid "September"
+msgstr ""
+
+#: lib/object.php:433 templates/lAfix.php:25
+msgid "October"
+msgstr ""
+
+#: lib/object.php:434 templates/lAfix.php:26
+msgid "November"
+msgstr ""
+
+#: lib/object.php:435 templates/lAfix.php:27
+msgid "December"
+msgstr ""
+
+#: lib/object.php:441
+msgid "by events date"
+msgstr ""
+
+#: lib/object.php:442
+msgid "by yearday(s)"
+msgstr ""
+
+#: lib/object.php:443
+msgid "by weeknumber(s)"
+msgstr ""
+
+#: lib/object.php:444
+msgid "by day and month"
+msgstr ""
+
+#: lib/object.php:467
+msgid "Not an array"
+msgstr "Nem egy tömb"
+
+#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+msgid "Date"
+msgstr ""
+
+#: lib/search.php:40
+msgid "Cal."
+msgstr ""
+
+#: templates/calendar.php:10
+msgid "All day"
+msgstr "Egész nap"
+
+#: templates/calendar.php:11
+msgid "Missing fields"
+msgstr "Hiányzó mezők"
+
+#: templates/calendar.php:12 templates/part.eventform.php:3
+msgid "Title"
+msgstr "Cím"
+
+#: templates/calendar.php:14
+msgid "From Date"
+msgstr "Napjától"
+
+#: templates/calendar.php:15
+msgid "From Time"
+msgstr "Időtől"
+
+#: templates/calendar.php:16
+msgid "To Date"
+msgstr "Napig"
+
+#: templates/calendar.php:17
+msgid "To Time"
+msgstr "Ideig"
+
+#: templates/calendar.php:18
+msgid "The event ends before it starts"
+msgstr "Az esemény véget ér a kezdés előtt."
+
+#: templates/calendar.php:19
+msgid "There was a database fail"
+msgstr "Adatbázis hiba történt"
+
+#: templates/calendar.php:52
+msgid "Week"
+msgstr "Hét"
+
+#: templates/calendar.php:53
+msgid "Month"
+msgstr "Hónap"
+
+#: templates/calendar.php:54
+msgid "List"
+msgstr "Lista"
+
+#: templates/calendar.php:59
+msgid "Today"
+msgstr "Ma"
+
+#: templates/calendar.php:60
+msgid "Calendars"
+msgstr "Naptárak"
+
+#: templates/calendar.php:78
+msgid "There was a fail, while parsing the file."
+msgstr "Probléma volt a fájl elemzése közben."
+
+#: templates/lAfix.php:9
+msgid "Sun."
+msgstr ""
+
+#: templates/lAfix.php:10
+msgid "Mon."
+msgstr ""
+
+#: templates/lAfix.php:11
+msgid "Tue."
+msgstr ""
+
+#: templates/lAfix.php:12
+msgid "Wed."
+msgstr ""
+
+#: templates/lAfix.php:13
+msgid "Thu."
+msgstr ""
+
+#: templates/lAfix.php:14
+msgid "Fri."
+msgstr ""
+
+#: templates/lAfix.php:15
+msgid "Sat."
+msgstr ""
+
+#: templates/lAfix.php:28
+msgid "Jan."
+msgstr ""
+
+#: templates/lAfix.php:29
+msgid "Feb."
+msgstr ""
+
+#: templates/lAfix.php:30
+msgid "Mar."
+msgstr ""
+
+#: templates/lAfix.php:31
+msgid "Apr."
+msgstr ""
+
+#: templates/lAfix.php:32
+msgid "May."
+msgstr ""
+
+#: templates/lAfix.php:33
+msgid "Jun."
+msgstr ""
+
+#: templates/lAfix.php:34
+msgid "Jul."
+msgstr ""
+
+#: templates/lAfix.php:35
+msgid "Aug."
+msgstr ""
+
+#: templates/lAfix.php:36
+msgid "Sep."
+msgstr ""
+
+#: templates/lAfix.php:37
+msgid "Oct."
+msgstr ""
+
+#: templates/lAfix.php:38
+msgid "Nov."
+msgstr ""
+
+#: templates/lAfix.php:39
+msgid "Dec."
+msgstr ""
+
+#: templates/part.choosecalendar.php:1
+msgid "Choose active calendars"
+msgstr "Aktív naptár kiválasztása"
+
+#: templates/part.choosecalendar.php:15
+msgid "New Calendar"
+msgstr "Új naptár"
+
+#: templates/part.choosecalendar.php:20
+#: templates/part.choosecalendar.rowfields.php:4
+msgid "CalDav Link"
+msgstr "CalDAV link"
+
+#: templates/part.choosecalendar.rowfields.php:4
+msgid "Download"
+msgstr "Letöltés"
+
+#: templates/part.choosecalendar.rowfields.php:4
+msgid "Edit"
+msgstr "Szerkesztés"
+
+#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.editevent.php:9
+msgid "Delete"
+msgstr "Törlés"
+
+#: templates/part.editcalendar.php:9
+msgid "New calendar"
+msgstr "Új naptár"
+
+#: templates/part.editcalendar.php:9
+msgid "Edit calendar"
+msgstr "Naptár szerkesztése"
+
+#: templates/part.editcalendar.php:12
+msgid "Displayname"
+msgstr "Megjelenítési név"
+
+#: templates/part.editcalendar.php:23
+msgid "Active"
+msgstr "Aktív"
+
+#: templates/part.editcalendar.php:29
+msgid "Calendar color"
+msgstr "Naptár szín"
+
+#: templates/part.editcalendar.php:42
+msgid "Save"
+msgstr "Mentés"
+
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
+#: templates/part.newevent.php:6
+msgid "Submit"
+msgstr "Beküldés"
+
+#: templates/part.editcalendar.php:43
+msgid "Cancel"
+msgstr "Mégse"
+
+#: templates/part.editevent.php:1
+msgid "Edit an event"
+msgstr "Esemény szerkesztése"
+
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr "Export"
+
+#: templates/part.eventform.php:5
+msgid "Title of the Event"
+msgstr "Az esemény címe"
+
+#: templates/part.eventform.php:11
+msgid "Category"
+msgstr "Kategória"
+
+#: templates/part.eventform.php:13
+msgid "Select category"
+msgstr "Kategória kiválasztása"
+
+#: templates/part.eventform.php:37
+msgid "All Day Event"
+msgstr "Egész napos esemény"
+
+#: templates/part.eventform.php:41
+msgid "From"
+msgstr ""
+
+#: templates/part.eventform.php:49
+msgid "To"
+msgstr ""
+
+#: templates/part.eventform.php:57
+msgid "Advanced options"
+msgstr "Haladó beállítások"
+
+#: templates/part.eventform.php:61
+msgid "Repeat"
+msgstr "Ismétlés"
+
+#: templates/part.eventform.php:68
+msgid "Advanced"
+msgstr ""
+
+#: templates/part.eventform.php:112
+msgid "Select weekdays"
+msgstr ""
+
+#: templates/part.eventform.php:125 templates/part.eventform.php:138
+msgid "Select days"
+msgstr ""
+
+#: templates/part.eventform.php:130
+msgid "and the events day of year."
+msgstr ""
+
+#: templates/part.eventform.php:143
+msgid "and the events day of month."
+msgstr ""
+
+#: templates/part.eventform.php:151
+msgid "Select months"
+msgstr ""
+
+#: templates/part.eventform.php:164
+msgid "Select weeks"
+msgstr ""
+
+#: templates/part.eventform.php:169
+msgid "and the events week of year."
+msgstr ""
+
+#: templates/part.eventform.php:175
+msgid "Interval"
+msgstr ""
+
+#: templates/part.eventform.php:181
+msgid "End"
+msgstr ""
+
+#: templates/part.eventform.php:193
+msgid "occurrences"
+msgstr ""
+
+#: templates/part.eventform.php:208
+msgid "Location"
+msgstr "Hely"
+
+#: templates/part.eventform.php:210
+msgid "Location of the Event"
+msgstr "Az esemény helyszíne"
+
+#: templates/part.eventform.php:216
+msgid "Description"
+msgstr "Leírás"
+
+#: templates/part.eventform.php:218
+msgid "Description of the Event"
+msgstr "Az esemény leírása"
+
+#: templates/part.import.php:1
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the calendar"
+msgstr "Válassz naptárat"
+
+#: templates/part.import.php:10
+msgid "create a new calendar"
+msgstr ""
+
+#: templates/part.import.php:15
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import"
+msgstr "Importálás"
+
+#: templates/part.import.php:20
+msgid "Importing calendar"
+msgstr ""
+
+#: templates/part.import.php:23
+msgid "Calendar imported successfully"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Close Dialog"
+msgstr ""
+
+#: templates/part.newevent.php:1
+msgid "Create a new event"
+msgstr "Új esemény létrehozása"
+
+#: templates/settings.php:13
+msgid "Timezone"
+msgstr "Időzóna"
+
+#: templates/settings.php:30
+msgid "Check always for changes of the timezone"
+msgstr ""
+
+#: templates/settings.php:32
+msgid "Timeformat"
+msgstr "Időformátum"
+
+#: templates/settings.php:34
+msgid "24h"
+msgstr "24h"
+
+#: templates/settings.php:35
+msgid "12h"
+msgstr "12h"
+
+#: templates/settings.php:41
+msgid "Calendar CalDAV syncing address:"
+msgstr "Naptár CalDAV szinkronizálási cím:"
+
+
diff --git a/l10n/hu_HU/contacts.po b/l10n/hu_HU/contacts.po
new file mode 100644
index 00000000000..b4e5d034ecb
--- /dev/null
+++ b/l10n/hu_HU/contacts.po
@@ -0,0 +1,291 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <mail@tamas-nagy.net>, 2011.
+# Peter Borsa <peter.borsa@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Hungarian (Hungary) (http://www.transifex.net/projects/p/owncloud/team/hu_HU/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hu_HU\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/activation.php:17 ajax/updateaddressbook.php:26
+msgid "Error (de)activating addressbook."
+msgstr ""
+
+#: ajax/addcard.php:79
+msgid "There was an error adding the contact."
+msgstr ""
+
+#: ajax/addproperty.php:39
+msgid "Cannot add empty property."
+msgstr ""
+
+#: ajax/addproperty.php:51
+msgid "At least one of the address fields has to be filled out."
+msgstr ""
+
+#: ajax/addproperty.php:77
+msgid "Error adding contact property."
+msgstr ""
+
+#: ajax/createaddressbook.php:20
+msgid "Error adding addressbook."
+msgstr ""
+
+#: ajax/createaddressbook.php:26
+msgid "Error activating addressbook."
+msgstr ""
+
+#: ajax/deleteproperty.php:40
+msgid "Error deleting contact property."
+msgstr ""
+
+#: ajax/setproperty.php:79
+msgid "Error updating contact property."
+msgstr ""
+
+#: ajax/updateaddressbook.php:20
+msgid "Error updating addressbook."
+msgstr ""
+
+#: appinfo/app.php:21 templates/settings.php:3
+msgid "Contacts"
+msgstr ""
+
+#: lib/app.php:42
+msgid "This is not your addressbook."
+msgstr "Ez nem a te címjegyzéked."
+
+#: lib/app.php:51 photo.php:34
+msgid "Contact could not be found."
+msgstr "Kapcsolat nem található."
+
+#: lib/app.php:79
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "A vCardról szóló információ helytelen. Töltsd újra az oldalt."
+
+#: lib/app.php:91 templates/part.addcardform.php:54
+#: templates/part.property.php:45 templates/part.setpropertyform.php:7
+msgid "Address"
+msgstr "Cím"
+
+#: lib/app.php:92 templates/part.addcardform.php:43
+msgid "Telephone"
+msgstr "Telefonszám"
+
+#: lib/app.php:93 templates/part.addcardform.php:37
+#: templates/part.property.php:16 templates/part.setpropertyform.php:51
+msgid "Email"
+msgstr "E-mail"
+
+#: lib/app.php:94 templates/part.addcardform.php:27
+#: templates/part.property.php:9 templates/part.setpropertyform.php:54
+msgid "Organization"
+msgstr "Organizáció"
+
+#: lib/app.php:106 lib/app.php:113
+msgid "Work"
+msgstr "Munka"
+
+#: lib/app.php:107 lib/app.php:111
+msgid "Home"
+msgstr "Otthon"
+
+#: lib/app.php:112
+msgid "Mobile"
+msgstr "Mobiltelefonszám"
+
+#: lib/app.php:114
+msgid "Text"
+msgstr "Szöveg"
+
+#: lib/app.php:115
+msgid "Voice"
+msgstr "Hang"
+
+#: lib/app.php:116
+msgid "Fax"
+msgstr "Fax"
+
+#: lib/app.php:117
+msgid "Video"
+msgstr "Video"
+
+#: lib/app.php:118
+msgid "Pager"
+msgstr "Lapozó"
+
+#: lib/search.php:22
+msgid "Contact"
+msgstr ""
+
+#: photo.php:40
+msgid "This is not your contact."
+msgstr "Nem a te kapcsolatod."
+
+#: photo.php:48
+msgid "This card is not RFC compatible."
+msgstr "A kártya nem RFC kompatibilis."
+
+#: photo.php:85
+msgid "This card does not contain a photo."
+msgstr "A kártya nem tartlmaz fényképet."
+
+#: templates/index.php:6
+msgid "Add Contact"
+msgstr "Kontakt hozzáadása"
+
+#: templates/index.php:7
+msgid "Addressbooks"
+msgstr ""
+
+#: templates/part.addcardform.php:8
+msgid "Addressbook"
+msgstr ""
+
+#: templates/part.addcardform.php:21
+msgid "Name"
+msgstr "Név"
+
+#: templates/part.addcardform.php:57 templates/part.details.php:43
+#: templates/part.details.php:79 templates/part.setpropertyform.php:10
+#: templates/part.setpropertyform.php:47
+msgid "Type"
+msgstr ""
+
+#: templates/part.addcardform.php:65 templates/part.details.php:49
+#: templates/part.setpropertyform.php:16
+msgid "PO Box"
+msgstr "Postafiók"
+
+#: templates/part.addcardform.php:72 templates/part.details.php:53
+#: templates/part.setpropertyform.php:20
+msgid "Extended"
+msgstr "Kiterjesztett"
+
+#: templates/part.addcardform.php:78 templates/part.details.php:57
+#: templates/part.setpropertyform.php:24
+msgid "Street"
+msgstr "Utca"
+
+#: templates/part.addcardform.php:84 templates/part.details.php:61
+#: templates/part.setpropertyform.php:28
+msgid "City"
+msgstr "Helység"
+
+#: templates/part.addcardform.php:90 templates/part.details.php:65
+#: templates/part.setpropertyform.php:32
+msgid "Region"
+msgstr "Megye"
+
+#: templates/part.addcardform.php:96 templates/part.details.php:69
+#: templates/part.setpropertyform.php:36
+msgid "Zipcode"
+msgstr "Irányítószám"
+
+#: templates/part.addcardform.php:102 templates/part.details.php:73
+#: templates/part.setpropertyform.php:40
+msgid "Country"
+msgstr "Ország"
+
+#: templates/part.addcardform.php:109
+msgid "Create Contact"
+msgstr "Kontakt létrehozása"
+
+#: templates/part.chooseaddressbook.php:1
+msgid "Choose active Address Books"
+msgstr ""
+
+#: templates/part.chooseaddressbook.php:16
+msgid "New Address Book"
+msgstr ""
+
+#: templates/part.chooseaddressbook.php:21
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "CardDav Link"
+msgstr ""
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Download"
+msgstr ""
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Edit"
+msgstr "Szerkesztés"
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Delete"
+msgstr "Törlés"
+
+#: templates/part.details.php:3
+msgid "Download contact"
+msgstr ""
+
+#: templates/part.details.php:4
+msgid "Delete contact"
+msgstr ""
+
+#: templates/part.details.php:34
+msgid "Add"
+msgstr ""
+
+#: templates/part.editaddressbook.php:9
+msgid "New Addressbook"
+msgstr ""
+
+#: templates/part.editaddressbook.php:9
+msgid "Edit Addressbook"
+msgstr ""
+
+#: templates/part.editaddressbook.php:12
+msgid "Displayname"
+msgstr ""
+
+#: templates/part.editaddressbook.php:23
+msgid "Active"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Save"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Submit"
+msgstr ""
+
+#: templates/part.editaddressbook.php:30
+msgid "Cancel"
+msgstr ""
+
+#: templates/part.property.php:3
+msgid "Birthday"
+msgstr "Születésnap"
+
+#: templates/part.property.php:23
+msgid "Preferred"
+msgstr ""
+
+#: templates/part.property.php:23 templates/part.setpropertyform.php:45
+msgid "Phone"
+msgstr "Telefonszám"
+
+#: templates/part.setpropertyform.php:57
+msgid "Update"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "CardDAV syncing address:"
+msgstr ""
+
+
diff --git a/l10n/hu_HU/core.po b/l10n/hu_HU/core.po
new file mode 100644
index 00000000000..a6a15a1bf9e
--- /dev/null
+++ b/l10n/hu_HU/core.po
@@ -0,0 +1,171 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <mail@tamas-nagy.net>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Hungarian (Hungary) (http://www.transifex.net/projects/p/owncloud/team/hu_HU/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hu_HU\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: lostpassword/index.php:24
+msgid "Owncloud password reset"
+msgstr ""
+
+#: lostpassword/templates/email.php:1
+msgid "Use the following link to reset your password: {link}"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr "Egy e-mailben kap értesítést a jelszóváltoztatás módjáról."
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Requested"
+msgstr "Kért"
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr "Belépés sikertelen!"
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:22
+#: templates/login.php:8
+msgid "Username"
+msgstr "Felhasználói név"
+
+#: lostpassword/templates/lostpassword.php:14
+msgid "Request reset"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr "Jelszó megváltoztatásra került"
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr "Új jelszó"
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr "Jelszó beállítás"
+
+#: strings.php:5
+msgid "Personal"
+msgstr "Személyes"
+
+#: strings.php:6
+msgid "Users"
+msgstr "Felhasználók"
+
+#: strings.php:7
+msgid "Apps"
+msgstr "Alkalmazások"
+
+#: strings.php:8
+msgid "Admin"
+msgstr "Adminisztráció"
+
+#: strings.php:9
+msgid "Help"
+msgstr "Súgó"
+
+#: templates/404.php:12
+msgid "Cloud not found"
+msgstr "Nem talált felhő"
+
+#: templates/installation.php:20
+msgid "Create an <strong>admin account</strong>"
+msgstr "<strong>Adminisztrációs fiók</strong> létrehozása"
+
+#: templates/installation.php:26 templates/login.php:12
+msgid "Password"
+msgstr "Jelszó"
+
+#: templates/installation.php:32
+msgid "Advanced"
+msgstr "Fejlett"
+
+#: templates/installation.php:34
+msgid "Data folder"
+msgstr "Adat könyvtár"
+
+#: templates/installation.php:41
+msgid "Configure the database"
+msgstr "Adatbázis konfigurálása"
+
+#: templates/installation.php:46 templates/installation.php:57
+#: templates/installation.php:67
+msgid "will be used"
+msgstr "használva lesz"
+
+#: templates/installation.php:79
+msgid "Database user"
+msgstr "Adatbázis felhasználó"
+
+#: templates/installation.php:83
+msgid "Database password"
+msgstr "Adatbázis jelszó"
+
+#: templates/installation.php:87
+msgid "Database name"
+msgstr "Adatbázis név"
+
+#: templates/installation.php:93
+msgid "Database host"
+msgstr "Adatbázis szerver"
+
+#: templates/installation.php:98
+msgid "Finish setup"
+msgstr "Beállítások befejezése"
+
+#: templates/layout.guest.php:35
+msgid "web services under your control"
+msgstr ""
+
+#: templates/layout.user.php:34
+msgid "Log out"
+msgstr "Kilépés"
+
+#: templates/layout.user.php:46 templates/layout.user.php:47
+msgid "Settings"
+msgstr "Beállítások"
+
+#: templates/login.php:5
+msgid "Lost your password?"
+msgstr "Elfelejtett jelszó?"
+
+#: templates/login.php:15
+msgid "remember"
+msgstr "emlékezni"
+
+#: templates/login.php:16
+msgid "Log in"
+msgstr ""
+
+#: templates/logout.php:1
+msgid "You are logged out."
+msgstr "Kilépés sikerült."
+
+#: templates/part.pagenavi.php:3
+msgid "prev"
+msgstr "Előző"
+
+#: templates/part.pagenavi.php:20
+msgid "next"
+msgstr "Következő"
+
+
diff --git a/l10n/hu_HU/files.po b/l10n/hu_HU/files.po
new file mode 100644
index 00000000000..2dfe1c33917
--- /dev/null
+++ b/l10n/hu_HU/files.po
@@ -0,0 +1,116 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <mail@tamas-nagy.net>, 2011.
+# Peter Borsa <peter.borsa@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Hungarian (Hungary) (http://www.transifex.net/projects/p/owncloud/team/hu_HU/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hu_HU\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/upload.php:19
+msgid "There is no error, the file uploaded with success"
+msgstr "Nincs hiba, a fájl sikeresen feltöltve."
+
+#: ajax/upload.php:20
+msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
+msgstr ""
+"A feltöltött file meghaladja az upload_max_filesize direktívát a php.ini-"
+"ben."
+
+#: ajax/upload.php:21
+msgid ""
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
+"the HTML form"
+msgstr ""
+"A feltöltött fájl meghaladja a MAX_FILE_SIZE direktívát ami meghatározott a "
+"HTML form-ban."
+
+#: ajax/upload.php:22
+msgid "The uploaded file was only partially uploaded"
+msgstr "Az eredeti fájl csak részlegesen van feltöltve."
+
+#: ajax/upload.php:23
+msgid "No file was uploaded"
+msgstr "Nem lett fájl feltöltve."
+
+#: ajax/upload.php:24
+msgid "Missing a temporary folder"
+msgstr "Hiányzik az ideiglenes könyvtár"
+
+#: appinfo/app.php:8
+msgid "Files"
+msgstr "Fájlok"
+
+#: templates/admin.php:5
+msgid "Maximum upload size"
+msgstr "Maximális feltölthető fájlméret"
+
+#: templates/index.php:7
+msgid "New"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Text file"
+msgstr ""
+
+#: templates/index.php:11
+msgid "Folder"
+msgstr ""
+
+#: templates/index.php:12
+msgid "From the web"
+msgstr ""
+
+#: templates/index.php:22
+msgid "Upload"
+msgstr "Feltöltés"
+
+#: templates/index.php:35
+msgid "Nothing in here. Upload something!"
+msgstr "Töltsön fel egy fájlt."
+
+#: templates/index.php:43
+msgid "Name"
+msgstr "Név"
+
+#: templates/index.php:45
+msgid "Download"
+msgstr "Letöltés"
+
+#: templates/index.php:49
+msgid "Size"
+msgstr "Méret"
+
+#: templates/index.php:50
+msgid "Modified"
+msgstr "Módosítva"
+
+#: templates/index.php:50
+msgid "Delete"
+msgstr "Törlés"
+
+#: templates/index.php:58
+msgid "Upload too large"
+msgstr "Feltöltés túl nagy"
+
+#: templates/index.php:60
+msgid ""
+"The files you are trying to upload exceed the maximum size for file uploads "
+"on this server."
+msgstr ""
+"A fájlokat amit próbálsz feltölteni meghaladta a legnagyobb fájlméretet ezen"
+" a szerveren."
+
+
diff --git a/l10n/hu_HU/gallery.po b/l10n/hu_HU/gallery.po
new file mode 100644
index 00000000000..96eb6168cac
--- /dev/null
+++ b/l10n/hu_HU/gallery.po
@@ -0,0 +1,32 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:48+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Hungarian (Hungary) (http://www.transifex.net/projects/p/owncloud/team/hu_HU/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hu_HU\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:41
+msgid "Gallery"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Rescan"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+
diff --git a/l10n/hu_HU/media.po b/l10n/hu_HU/media.po
new file mode 100644
index 00000000000..d11eeca2ef4
--- /dev/null
+++ b/l10n/hu_HU/media.po
@@ -0,0 +1,65 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Peter Borsa <peter.borsa@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Hungarian (Hungary) (http://www.transifex.net/projects/p/owncloud/team/hu_HU/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hu_HU\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:32
+msgid "Music"
+msgstr "Zene"
+
+#: templates/music.php:3 templates/player.php:13
+msgid "Play"
+msgstr "Lejátszás"
+
+#: templates/music.php:4 templates/music.php:26 templates/player.php:14
+msgid "Pause"
+msgstr "Szünet"
+
+#: templates/music.php:5
+msgid "Previous"
+msgstr "Előző"
+
+#: templates/music.php:6 templates/player.php:15
+msgid "Next"
+msgstr "Következő"
+
+#: templates/music.php:7
+msgid "Mute"
+msgstr "Némítás"
+
+#: templates/music.php:8
+msgid "Unmute"
+msgstr "Némítás megszüntetése"
+
+#: templates/music.php:25
+msgid "Rescan Collection"
+msgstr "Gyűjtemény újraolvasása"
+
+#: templates/music.php:37
+msgid "Artist"
+msgstr "Előadó"
+
+#: templates/music.php:38
+msgid "Album"
+msgstr "Album"
+
+#: templates/music.php:39
+msgid "Title"
+msgstr "Cím"
+
+
diff --git a/l10n/hu_HU/settings.po b/l10n/hu_HU/settings.po
new file mode 100644
index 00000000000..d91ad225434
--- /dev/null
+++ b/l10n/hu_HU/settings.po
@@ -0,0 +1,155 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Peter Borsa <peter.borsa@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Hungarian (Hungary) (http://www.transifex.net/projects/p/owncloud/team/hu_HU/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hu_HU\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/lostpassword.php:14
+msgid "email Changed"
+msgstr ""
+
+#: ajax/lostpassword.php:16 ajax/openid.php:17 ajax/setlanguage.php:16
+msgid "Invalid request"
+msgstr "Érvénytelen kérés"
+
+#: ajax/openid.php:15
+msgid "OpenID Changed"
+msgstr "OpenID megváltozott"
+
+#: ajax/setlanguage.php:14
+msgid "Language changed"
+msgstr "A nyelv megváltozott"
+
+#: templates/admin.php:13
+msgid "Log level"
+msgstr ""
+
+#: templates/apps.php:8
+msgid "Add your application"
+msgstr "Alkalmazásod hozzáadása"
+
+#: templates/apps.php:21
+msgid "Select an App"
+msgstr "Egy App kiválasztása"
+
+#: templates/apps.php:23
+msgid "-licensed"
+msgstr "-licenszelt"
+
+#: templates/apps.php:23
+msgid "by"
+msgstr ""
+
+#: templates/help.php:8
+msgid "Ask a question"
+msgstr "Tégy fel egy kérdést"
+
+#: templates/help.php:20
+msgid "Problems connecting to help database."
+msgstr ""
+
+#: templates/help.php:21
+msgid "Go there manually."
+msgstr "Menj oda kézzel"
+
+#: templates/help.php:29
+msgid "Answer"
+msgstr "Válasz"
+
+#: templates/personal.php:8
+msgid "You use"
+msgstr ""
+
+#: templates/personal.php:8
+msgid "of the available"
+msgstr "a rendelkezésre álló"
+
+#: templates/personal.php:13
+msgid "Your password got changed"
+msgstr "A jelszó megváltozott"
+
+#: templates/personal.php:14
+msgid "Unable to change your password"
+msgstr "Nem lehet megváltoztatni a jelszavad"
+
+#: templates/personal.php:15
+msgid "Current password"
+msgstr "Jelenlegi jelszó"
+
+#: templates/personal.php:16
+msgid "New password"
+msgstr "Új jelszó"
+
+#: templates/personal.php:17
+msgid "show"
+msgstr "Mutatás"
+
+#: templates/personal.php:18
+msgid "Change password"
+msgstr "Jelszó megváltoztatása"
+
+#: templates/personal.php:24
+msgid "Email"
+msgstr ""
+
+#: templates/personal.php:25
+msgid "Your email address"
+msgstr ""
+
+#: templates/personal.php:26
+msgid "Fill in an email address to enable password recovery"
+msgstr ""
+
+#: templates/personal.php:32 templates/personal.php:33
+msgid "Language"
+msgstr "Nyelv"
+
+#: templates/personal.php:38
+msgid "Help translate"
+msgstr ""
+
+#: templates/personal.php:45
+msgid "use this address to connect to your ownCloud in your file manager"
+msgstr ""
+"Használd ezt a címet hogy csatlakozz a saját ownCloud rendszeredhez a "
+"fájlkezelődben"
+
+#: templates/users.php:15 templates/users.php:30
+msgid "Name"
+msgstr "Név"
+
+#: templates/users.php:16 templates/users.php:31
+msgid "Password"
+msgstr "Jelszó"
+
+#: templates/users.php:17 templates/users.php:32 templates/users.php:46
+msgid "Groups"
+msgstr "Csoportok"
+
+#: templates/users.php:23
+msgid "Create"
+msgstr "Létrehozás"
+
+#: templates/users.php:33
+msgid "Quota"
+msgstr ""
+
+#: templates/users.php:58
+msgid "Delete"
+msgstr "Törlés"
+
+
diff --git a/l10n/hy/calendar.po b/l10n/hy/calendar.po
new file mode 100644
index 00000000000..c89b61f035d
--- /dev/null
+++ b/l10n/hy/calendar.po
@@ -0,0 +1,637 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Arman Poghosyan <armpogart@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Armenian (http://www.transifex.net/projects/p/owncloud/team/hy/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hy\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/guesstimezone.php:42
+msgid "New Timezone:"
+msgstr ""
+
+#: ajax/settimezone.php:22
+msgid "Timezone changed"
+msgstr ""
+
+#: ajax/settimezone.php:24
+msgid "Invalid request"
+msgstr ""
+
+#: appinfo/app.php:20 templates/calendar.php:13
+#: templates/part.eventform.php:20
+msgid "Calendar"
+msgstr "Օրացույց"
+
+#: lib/app.php:19
+msgid "Wrong calendar"
+msgstr ""
+
+#: lib/app.php:60 lib/object.php:332
+msgid "Birthday"
+msgstr ""
+
+#: lib/app.php:61 lib/object.php:333
+msgid "Business"
+msgstr ""
+
+#: lib/app.php:62 lib/object.php:334
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:63 lib/object.php:335
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:64 lib/object.php:336
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:65 lib/object.php:337
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:66 lib/object.php:338
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:67 lib/object.php:339
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:68 lib/object.php:340
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:69 lib/object.php:341
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:70 lib/object.php:342
+msgid "Other"
+msgstr "Այլ"
+
+#: lib/app.php:71 lib/object.php:343
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:72 lib/object.php:344
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:73 lib/object.php:345
+msgid "Questions"
+msgstr ""
+
+#: lib/app.php:74 lib/object.php:346
+msgid "Work"
+msgstr ""
+
+#: lib/object.php:353
+msgid "Does not repeat"
+msgstr ""
+
+#: lib/object.php:354
+msgid "Daily"
+msgstr ""
+
+#: lib/object.php:355
+msgid "Weekly"
+msgstr ""
+
+#: lib/object.php:356
+msgid "Every Weekday"
+msgstr ""
+
+#: lib/object.php:357
+msgid "Bi-Weekly"
+msgstr ""
+
+#: lib/object.php:358
+msgid "Monthly"
+msgstr ""
+
+#: lib/object.php:359
+msgid "Yearly"
+msgstr ""
+
+#: lib/object.php:366
+msgid "never"
+msgstr ""
+
+#: lib/object.php:367
+msgid "by occurrences"
+msgstr ""
+
+#: lib/object.php:368
+msgid "by date"
+msgstr ""
+
+#: lib/object.php:375
+msgid "by monthday"
+msgstr ""
+
+#: lib/object.php:376
+msgid "by weekday"
+msgstr ""
+
+#: lib/object.php:383 templates/lAfix.php:3
+msgid "Monday"
+msgstr ""
+
+#: lib/object.php:384 templates/lAfix.php:4
+msgid "Tuesday"
+msgstr ""
+
+#: lib/object.php:385 templates/lAfix.php:5
+msgid "Wednesday"
+msgstr ""
+
+#: lib/object.php:386 templates/lAfix.php:6
+msgid "Thursday"
+msgstr ""
+
+#: lib/object.php:387 templates/lAfix.php:7
+msgid "Friday"
+msgstr ""
+
+#: lib/object.php:388 templates/lAfix.php:8
+msgid "Saturday"
+msgstr ""
+
+#: lib/object.php:389 templates/lAfix.php:2
+msgid "Sunday"
+msgstr ""
+
+#: lib/object.php:396
+msgid "events week of month"
+msgstr ""
+
+#: lib/object.php:397
+msgid "first"
+msgstr ""
+
+#: lib/object.php:398
+msgid "second"
+msgstr ""
+
+#: lib/object.php:399
+msgid "third"
+msgstr ""
+
+#: lib/object.php:400
+msgid "fourth"
+msgstr ""
+
+#: lib/object.php:401
+msgid "fifth"
+msgstr ""
+
+#: lib/object.php:402
+msgid "last"
+msgstr ""
+
+#: lib/object.php:424 templates/lAfix.php:16
+msgid "January"
+msgstr ""
+
+#: lib/object.php:425 templates/lAfix.php:17
+msgid "February"
+msgstr ""
+
+#: lib/object.php:426 templates/lAfix.php:18
+msgid "March"
+msgstr ""
+
+#: lib/object.php:427 templates/lAfix.php:19
+msgid "April"
+msgstr ""
+
+#: lib/object.php:428 templates/lAfix.php:20
+msgid "May"
+msgstr ""
+
+#: lib/object.php:429 templates/lAfix.php:21
+msgid "June"
+msgstr ""
+
+#: lib/object.php:430 templates/lAfix.php:22
+msgid "July"
+msgstr ""
+
+#: lib/object.php:431 templates/lAfix.php:23
+msgid "August"
+msgstr ""
+
+#: lib/object.php:432 templates/lAfix.php:24
+msgid "September"
+msgstr ""
+
+#: lib/object.php:433 templates/lAfix.php:25
+msgid "October"
+msgstr ""
+
+#: lib/object.php:434 templates/lAfix.php:26
+msgid "November"
+msgstr ""
+
+#: lib/object.php:435 templates/lAfix.php:27
+msgid "December"
+msgstr ""
+
+#: lib/object.php:441
+msgid "by events date"
+msgstr ""
+
+#: lib/object.php:442
+msgid "by yearday(s)"
+msgstr ""
+
+#: lib/object.php:443
+msgid "by weeknumber(s)"
+msgstr ""
+
+#: lib/object.php:444
+msgid "by day and month"
+msgstr ""
+
+#: lib/object.php:467
+msgid "Not an array"
+msgstr ""
+
+#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+msgid "Date"
+msgstr ""
+
+#: lib/search.php:40
+msgid "Cal."
+msgstr ""
+
+#: templates/calendar.php:10
+msgid "All day"
+msgstr ""
+
+#: templates/calendar.php:11
+msgid "Missing fields"
+msgstr ""
+
+#: templates/calendar.php:12 templates/part.eventform.php:3
+msgid "Title"
+msgstr ""
+
+#: templates/calendar.php:14
+msgid "From Date"
+msgstr ""
+
+#: templates/calendar.php:15
+msgid "From Time"
+msgstr ""
+
+#: templates/calendar.php:16
+msgid "To Date"
+msgstr ""
+
+#: templates/calendar.php:17
+msgid "To Time"
+msgstr ""
+
+#: templates/calendar.php:18
+msgid "The event ends before it starts"
+msgstr ""
+
+#: templates/calendar.php:19
+msgid "There was a database fail"
+msgstr ""
+
+#: templates/calendar.php:52
+msgid "Week"
+msgstr ""
+
+#: templates/calendar.php:53
+msgid "Month"
+msgstr "Ամիս"
+
+#: templates/calendar.php:54
+msgid "List"
+msgstr ""
+
+#: templates/calendar.php:59
+msgid "Today"
+msgstr "Այսօր"
+
+#: templates/calendar.php:60
+msgid "Calendars"
+msgstr ""
+
+#: templates/calendar.php:78
+msgid "There was a fail, while parsing the file."
+msgstr ""
+
+#: templates/lAfix.php:9
+msgid "Sun."
+msgstr ""
+
+#: templates/lAfix.php:10
+msgid "Mon."
+msgstr ""
+
+#: templates/lAfix.php:11
+msgid "Tue."
+msgstr ""
+
+#: templates/lAfix.php:12
+msgid "Wed."
+msgstr ""
+
+#: templates/lAfix.php:13
+msgid "Thu."
+msgstr ""
+
+#: templates/lAfix.php:14
+msgid "Fri."
+msgstr ""
+
+#: templates/lAfix.php:15
+msgid "Sat."
+msgstr ""
+
+#: templates/lAfix.php:28
+msgid "Jan."
+msgstr ""
+
+#: templates/lAfix.php:29
+msgid "Feb."
+msgstr ""
+
+#: templates/lAfix.php:30
+msgid "Mar."
+msgstr ""
+
+#: templates/lAfix.php:31
+msgid "Apr."
+msgstr ""
+
+#: templates/lAfix.php:32
+msgid "May."
+msgstr ""
+
+#: templates/lAfix.php:33
+msgid "Jun."
+msgstr ""
+
+#: templates/lAfix.php:34
+msgid "Jul."
+msgstr ""
+
+#: templates/lAfix.php:35
+msgid "Aug."
+msgstr ""
+
+#: templates/lAfix.php:36
+msgid "Sep."
+msgstr ""
+
+#: templates/lAfix.php:37
+msgid "Oct."
+msgstr ""
+
+#: templates/lAfix.php:38
+msgid "Nov."
+msgstr ""
+
+#: templates/lAfix.php:39
+msgid "Dec."
+msgstr ""
+
+#: templates/part.choosecalendar.php:1
+msgid "Choose active calendars"
+msgstr ""
+
+#: templates/part.choosecalendar.php:15
+msgid "New Calendar"
+msgstr ""
+
+#: templates/part.choosecalendar.php:20
+#: templates/part.choosecalendar.rowfields.php:4
+msgid "CalDav Link"
+msgstr ""
+
+#: templates/part.choosecalendar.rowfields.php:4
+msgid "Download"
+msgstr "Բեռնել"
+
+#: templates/part.choosecalendar.rowfields.php:4
+msgid "Edit"
+msgstr ""
+
+#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.editevent.php:9
+msgid "Delete"
+msgstr "Ջնջել"
+
+#: templates/part.editcalendar.php:9
+msgid "New calendar"
+msgstr ""
+
+#: templates/part.editcalendar.php:9
+msgid "Edit calendar"
+msgstr ""
+
+#: templates/part.editcalendar.php:12
+msgid "Displayname"
+msgstr ""
+
+#: templates/part.editcalendar.php:23
+msgid "Active"
+msgstr ""
+
+#: templates/part.editcalendar.php:29
+msgid "Calendar color"
+msgstr ""
+
+#: templates/part.editcalendar.php:42
+msgid "Save"
+msgstr "Պահպանել"
+
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
+#: templates/part.newevent.php:6
+msgid "Submit"
+msgstr "Հաստատել"
+
+#: templates/part.editcalendar.php:43
+msgid "Cancel"
+msgstr ""
+
+#: templates/part.editevent.php:1
+msgid "Edit an event"
+msgstr ""
+
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr ""
+
+#: templates/part.eventform.php:5
+msgid "Title of the Event"
+msgstr ""
+
+#: templates/part.eventform.php:11
+msgid "Category"
+msgstr ""
+
+#: templates/part.eventform.php:13
+msgid "Select category"
+msgstr ""
+
+#: templates/part.eventform.php:37
+msgid "All Day Event"
+msgstr ""
+
+#: templates/part.eventform.php:41
+msgid "From"
+msgstr ""
+
+#: templates/part.eventform.php:49
+msgid "To"
+msgstr ""
+
+#: templates/part.eventform.php:57
+msgid "Advanced options"
+msgstr ""
+
+#: templates/part.eventform.php:61
+msgid "Repeat"
+msgstr ""
+
+#: templates/part.eventform.php:68
+msgid "Advanced"
+msgstr ""
+
+#: templates/part.eventform.php:112
+msgid "Select weekdays"
+msgstr ""
+
+#: templates/part.eventform.php:125 templates/part.eventform.php:138
+msgid "Select days"
+msgstr ""
+
+#: templates/part.eventform.php:130
+msgid "and the events day of year."
+msgstr ""
+
+#: templates/part.eventform.php:143
+msgid "and the events day of month."
+msgstr ""
+
+#: templates/part.eventform.php:151
+msgid "Select months"
+msgstr ""
+
+#: templates/part.eventform.php:164
+msgid "Select weeks"
+msgstr ""
+
+#: templates/part.eventform.php:169
+msgid "and the events week of year."
+msgstr ""
+
+#: templates/part.eventform.php:175
+msgid "Interval"
+msgstr ""
+
+#: templates/part.eventform.php:181
+msgid "End"
+msgstr ""
+
+#: templates/part.eventform.php:193
+msgid "occurrences"
+msgstr ""
+
+#: templates/part.eventform.php:208
+msgid "Location"
+msgstr ""
+
+#: templates/part.eventform.php:210
+msgid "Location of the Event"
+msgstr ""
+
+#: templates/part.eventform.php:216
+msgid "Description"
+msgstr "Նկարագրություն"
+
+#: templates/part.eventform.php:218
+msgid "Description of the Event"
+msgstr ""
+
+#: templates/part.import.php:1
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the calendar"
+msgstr ""
+
+#: templates/part.import.php:10
+msgid "create a new calendar"
+msgstr ""
+
+#: templates/part.import.php:15
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import"
+msgstr ""
+
+#: templates/part.import.php:20
+msgid "Importing calendar"
+msgstr ""
+
+#: templates/part.import.php:23
+msgid "Calendar imported successfully"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Close Dialog"
+msgstr ""
+
+#: templates/part.newevent.php:1
+msgid "Create a new event"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Timezone"
+msgstr ""
+
+#: templates/settings.php:30
+msgid "Check always for changes of the timezone"
+msgstr ""
+
+#: templates/settings.php:32
+msgid "Timeformat"
+msgstr ""
+
+#: templates/settings.php:34
+msgid "24h"
+msgstr ""
+
+#: templates/settings.php:35
+msgid "12h"
+msgstr ""
+
+#: templates/settings.php:41
+msgid "Calendar CalDAV syncing address:"
+msgstr ""
+
+
diff --git a/l10n/hy/contacts.po b/l10n/hy/contacts.po
new file mode 100644
index 00000000000..53d8557da1b
--- /dev/null
+++ b/l10n/hy/contacts.po
@@ -0,0 +1,289 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Armenian (http://www.transifex.net/projects/p/owncloud/team/hy/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hy\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/activation.php:17 ajax/updateaddressbook.php:26
+msgid "Error (de)activating addressbook."
+msgstr ""
+
+#: ajax/addcard.php:79
+msgid "There was an error adding the contact."
+msgstr ""
+
+#: ajax/addproperty.php:39
+msgid "Cannot add empty property."
+msgstr ""
+
+#: ajax/addproperty.php:51
+msgid "At least one of the address fields has to be filled out."
+msgstr ""
+
+#: ajax/addproperty.php:77
+msgid "Error adding contact property."
+msgstr ""
+
+#: ajax/createaddressbook.php:20
+msgid "Error adding addressbook."
+msgstr ""
+
+#: ajax/createaddressbook.php:26
+msgid "Error activating addressbook."
+msgstr ""
+
+#: ajax/deleteproperty.php:40
+msgid "Error deleting contact property."
+msgstr ""
+
+#: ajax/setproperty.php:79
+msgid "Error updating contact property."
+msgstr ""
+
+#: ajax/updateaddressbook.php:20
+msgid "Error updating addressbook."
+msgstr ""
+
+#: appinfo/app.php:21 templates/settings.php:3
+msgid "Contacts"
+msgstr ""
+
+#: lib/app.php:42
+msgid "This is not your addressbook."
+msgstr ""
+
+#: lib/app.php:51 photo.php:34
+msgid "Contact could not be found."
+msgstr ""
+
+#: lib/app.php:79
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr ""
+
+#: lib/app.php:91 templates/part.addcardform.php:54
+#: templates/part.property.php:45 templates/part.setpropertyform.php:7
+msgid "Address"
+msgstr ""
+
+#: lib/app.php:92 templates/part.addcardform.php:43
+msgid "Telephone"
+msgstr ""
+
+#: lib/app.php:93 templates/part.addcardform.php:37
+#: templates/part.property.php:16 templates/part.setpropertyform.php:51
+msgid "Email"
+msgstr ""
+
+#: lib/app.php:94 templates/part.addcardform.php:27
+#: templates/part.property.php:9 templates/part.setpropertyform.php:54
+msgid "Organization"
+msgstr ""
+
+#: lib/app.php:106 lib/app.php:113
+msgid "Work"
+msgstr ""
+
+#: lib/app.php:107 lib/app.php:111
+msgid "Home"
+msgstr ""
+
+#: lib/app.php:112
+msgid "Mobile"
+msgstr ""
+
+#: lib/app.php:114
+msgid "Text"
+msgstr ""
+
+#: lib/app.php:115
+msgid "Voice"
+msgstr ""
+
+#: lib/app.php:116
+msgid "Fax"
+msgstr ""
+
+#: lib/app.php:117
+msgid "Video"
+msgstr ""
+
+#: lib/app.php:118
+msgid "Pager"
+msgstr ""
+
+#: lib/search.php:22
+msgid "Contact"
+msgstr ""
+
+#: photo.php:40
+msgid "This is not your contact."
+msgstr ""
+
+#: photo.php:48
+msgid "This card is not RFC compatible."
+msgstr ""
+
+#: photo.php:85
+msgid "This card does not contain a photo."
+msgstr ""
+
+#: templates/index.php:6
+msgid "Add Contact"
+msgstr ""
+
+#: templates/index.php:7
+msgid "Addressbooks"
+msgstr ""
+
+#: templates/part.addcardform.php:8
+msgid "Addressbook"
+msgstr ""
+
+#: templates/part.addcardform.php:21
+msgid "Name"
+msgstr ""
+
+#: templates/part.addcardform.php:57 templates/part.details.php:43
+#: templates/part.details.php:79 templates/part.setpropertyform.php:10
+#: templates/part.setpropertyform.php:47
+msgid "Type"
+msgstr ""
+
+#: templates/part.addcardform.php:65 templates/part.details.php:49
+#: templates/part.setpropertyform.php:16
+msgid "PO Box"
+msgstr ""
+
+#: templates/part.addcardform.php:72 templates/part.details.php:53
+#: templates/part.setpropertyform.php:20
+msgid "Extended"
+msgstr ""
+
+#: templates/part.addcardform.php:78 templates/part.details.php:57
+#: templates/part.setpropertyform.php:24
+msgid "Street"
+msgstr ""
+
+#: templates/part.addcardform.php:84 templates/part.details.php:61
+#: templates/part.setpropertyform.php:28
+msgid "City"
+msgstr ""
+
+#: templates/part.addcardform.php:90 templates/part.details.php:65
+#: templates/part.setpropertyform.php:32
+msgid "Region"
+msgstr ""
+
+#: templates/part.addcardform.php:96 templates/part.details.php:69
+#: templates/part.setpropertyform.php:36
+msgid "Zipcode"
+msgstr ""
+
+#: templates/part.addcardform.php:102 templates/part.details.php:73
+#: templates/part.setpropertyform.php:40
+msgid "Country"
+msgstr ""
+
+#: templates/part.addcardform.php:109
+msgid "Create Contact"
+msgstr ""
+
+#: templates/part.chooseaddressbook.php:1
+msgid "Choose active Address Books"
+msgstr ""
+
+#: templates/part.chooseaddressbook.php:16
+msgid "New Address Book"
+msgstr ""
+
+#: templates/part.chooseaddressbook.php:21
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "CardDav Link"
+msgstr ""
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Download"
+msgstr ""
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Edit"
+msgstr ""
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Delete"
+msgstr ""
+
+#: templates/part.details.php:3
+msgid "Download contact"
+msgstr ""
+
+#: templates/part.details.php:4
+msgid "Delete contact"
+msgstr ""
+
+#: templates/part.details.php:34
+msgid "Add"
+msgstr ""
+
+#: templates/part.editaddressbook.php:9
+msgid "New Addressbook"
+msgstr ""
+
+#: templates/part.editaddressbook.php:9
+msgid "Edit Addressbook"
+msgstr ""
+
+#: templates/part.editaddressbook.php:12
+msgid "Displayname"
+msgstr ""
+
+#: templates/part.editaddressbook.php:23
+msgid "Active"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Save"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Submit"
+msgstr ""
+
+#: templates/part.editaddressbook.php:30
+msgid "Cancel"
+msgstr ""
+
+#: templates/part.property.php:3
+msgid "Birthday"
+msgstr ""
+
+#: templates/part.property.php:23
+msgid "Preferred"
+msgstr ""
+
+#: templates/part.property.php:23 templates/part.setpropertyform.php:45
+msgid "Phone"
+msgstr ""
+
+#: templates/part.setpropertyform.php:57
+msgid "Update"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "CardDAV syncing address:"
+msgstr ""
+
+
diff --git a/l10n/hy/core.po b/l10n/hy/core.po
new file mode 100644
index 00000000000..df17a143a65
--- /dev/null
+++ b/l10n/hy/core.po
@@ -0,0 +1,170 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Armenian (http://www.transifex.net/projects/p/owncloud/team/hy/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hy\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: lostpassword/index.php:24
+msgid "Owncloud password reset"
+msgstr ""
+
+#: lostpassword/templates/email.php:1
+msgid "Use the following link to reset your password: {link}"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Requested"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:22
+#: templates/login.php:8
+msgid "Username"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:14
+msgid "Request reset"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr ""
+
+#: strings.php:5
+msgid "Personal"
+msgstr ""
+
+#: strings.php:6
+msgid "Users"
+msgstr ""
+
+#: strings.php:7
+msgid "Apps"
+msgstr ""
+
+#: strings.php:8
+msgid "Admin"
+msgstr ""
+
+#: strings.php:9
+msgid "Help"
+msgstr ""
+
+#: templates/404.php:12
+msgid "Cloud not found"
+msgstr ""
+
+#: templates/installation.php:20
+msgid "Create an <strong>admin account</strong>"
+msgstr ""
+
+#: templates/installation.php:26 templates/login.php:12
+msgid "Password"
+msgstr ""
+
+#: templates/installation.php:32
+msgid "Advanced"
+msgstr ""
+
+#: templates/installation.php:34
+msgid "Data folder"
+msgstr ""
+
+#: templates/installation.php:41
+msgid "Configure the database"
+msgstr ""
+
+#: templates/installation.php:46 templates/installation.php:57
+#: templates/installation.php:67
+msgid "will be used"
+msgstr ""
+
+#: templates/installation.php:79
+msgid "Database user"
+msgstr ""
+
+#: templates/installation.php:83
+msgid "Database password"
+msgstr ""
+
+#: templates/installation.php:87
+msgid "Database name"
+msgstr ""
+
+#: templates/installation.php:93
+msgid "Database host"
+msgstr ""
+
+#: templates/installation.php:98
+msgid "Finish setup"
+msgstr ""
+
+#: templates/layout.guest.php:35
+msgid "web services under your control"
+msgstr ""
+
+#: templates/layout.user.php:34
+msgid "Log out"
+msgstr ""
+
+#: templates/layout.user.php:46 templates/layout.user.php:47
+msgid "Settings"
+msgstr ""
+
+#: templates/login.php:5
+msgid "Lost your password?"
+msgstr ""
+
+#: templates/login.php:15
+msgid "remember"
+msgstr ""
+
+#: templates/login.php:16
+msgid "Log in"
+msgstr ""
+
+#: templates/logout.php:1
+msgid "You are logged out."
+msgstr ""
+
+#: templates/part.pagenavi.php:3
+msgid "prev"
+msgstr ""
+
+#: templates/part.pagenavi.php:20
+msgid "next"
+msgstr ""
+
+
diff --git a/l10n/hy/files.po b/l10n/hy/files.po
new file mode 100644
index 00000000000..77b97fc34df
--- /dev/null
+++ b/l10n/hy/files.po
@@ -0,0 +1,108 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Armenian (http://www.transifex.net/projects/p/owncloud/team/hy/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hy\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/upload.php:19
+msgid "There is no error, the file uploaded with success"
+msgstr ""
+
+#: ajax/upload.php:20
+msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
+msgstr ""
+
+#: ajax/upload.php:21
+msgid ""
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
+"the HTML form"
+msgstr ""
+
+#: ajax/upload.php:22
+msgid "The uploaded file was only partially uploaded"
+msgstr ""
+
+#: ajax/upload.php:23
+msgid "No file was uploaded"
+msgstr ""
+
+#: ajax/upload.php:24
+msgid "Missing a temporary folder"
+msgstr ""
+
+#: appinfo/app.php:8
+msgid "Files"
+msgstr ""
+
+#: templates/admin.php:5
+msgid "Maximum upload size"
+msgstr ""
+
+#: templates/index.php:7
+msgid "New"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Text file"
+msgstr ""
+
+#: templates/index.php:11
+msgid "Folder"
+msgstr ""
+
+#: templates/index.php:12
+msgid "From the web"
+msgstr ""
+
+#: templates/index.php:22
+msgid "Upload"
+msgstr ""
+
+#: templates/index.php:35
+msgid "Nothing in here. Upload something!"
+msgstr ""
+
+#: templates/index.php:43
+msgid "Name"
+msgstr ""
+
+#: templates/index.php:45
+msgid "Download"
+msgstr ""
+
+#: templates/index.php:49
+msgid "Size"
+msgstr ""
+
+#: templates/index.php:50
+msgid "Modified"
+msgstr ""
+
+#: templates/index.php:50
+msgid "Delete"
+msgstr ""
+
+#: templates/index.php:58
+msgid "Upload too large"
+msgstr ""
+
+#: templates/index.php:60
+msgid ""
+"The files you are trying to upload exceed the maximum size for file uploads "
+"on this server."
+msgstr ""
+
+
diff --git a/l10n/hy/gallery.po b/l10n/hy/gallery.po
new file mode 100644
index 00000000000..c1a1f43fe7d
--- /dev/null
+++ b/l10n/hy/gallery.po
@@ -0,0 +1,32 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:48+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Armenian (http://www.transifex.net/projects/p/owncloud/team/hy/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hy\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:41
+msgid "Gallery"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Rescan"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+
diff --git a/l10n/hy/media.po b/l10n/hy/media.po
new file mode 100644
index 00000000000..8fe3c57905b
--- /dev/null
+++ b/l10n/hy/media.po
@@ -0,0 +1,64 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Armenian (http://www.transifex.net/projects/p/owncloud/team/hy/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hy\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:32
+msgid "Music"
+msgstr ""
+
+#: templates/music.php:3 templates/player.php:13
+msgid "Play"
+msgstr ""
+
+#: templates/music.php:4 templates/music.php:26 templates/player.php:14
+msgid "Pause"
+msgstr ""
+
+#: templates/music.php:5
+msgid "Previous"
+msgstr ""
+
+#: templates/music.php:6 templates/player.php:15
+msgid "Next"
+msgstr ""
+
+#: templates/music.php:7
+msgid "Mute"
+msgstr ""
+
+#: templates/music.php:8
+msgid "Unmute"
+msgstr ""
+
+#: templates/music.php:25
+msgid "Rescan Collection"
+msgstr ""
+
+#: templates/music.php:37
+msgid "Artist"
+msgstr ""
+
+#: templates/music.php:38
+msgid "Album"
+msgstr ""
+
+#: templates/music.php:39
+msgid "Title"
+msgstr ""
+
+
diff --git a/l10n/hy/settings.po b/l10n/hy/settings.po
new file mode 100644
index 00000000000..7712776cd67
--- /dev/null
+++ b/l10n/hy/settings.po
@@ -0,0 +1,152 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Armenian (http://www.transifex.net/projects/p/owncloud/team/hy/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hy\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/lostpassword.php:14
+msgid "email Changed"
+msgstr ""
+
+#: ajax/lostpassword.php:16 ajax/openid.php:17 ajax/setlanguage.php:16
+msgid "Invalid request"
+msgstr ""
+
+#: ajax/openid.php:15
+msgid "OpenID Changed"
+msgstr ""
+
+#: ajax/setlanguage.php:14
+msgid "Language changed"
+msgstr ""
+
+#: templates/admin.php:13
+msgid "Log level"
+msgstr ""
+
+#: templates/apps.php:8
+msgid "Add your application"
+msgstr ""
+
+#: templates/apps.php:21
+msgid "Select an App"
+msgstr ""
+
+#: templates/apps.php:23
+msgid "-licensed"
+msgstr ""
+
+#: templates/apps.php:23
+msgid "by"
+msgstr ""
+
+#: templates/help.php:8
+msgid "Ask a question"
+msgstr ""
+
+#: templates/help.php:20
+msgid "Problems connecting to help database."
+msgstr ""
+
+#: templates/help.php:21
+msgid "Go there manually."
+msgstr ""
+
+#: templates/help.php:29
+msgid "Answer"
+msgstr ""
+
+#: templates/personal.php:8
+msgid "You use"
+msgstr ""
+
+#: templates/personal.php:8
+msgid "of the available"
+msgstr ""
+
+#: templates/personal.php:13
+msgid "Your password got changed"
+msgstr ""
+
+#: templates/personal.php:14
+msgid "Unable to change your password"
+msgstr ""
+
+#: templates/personal.php:15
+msgid "Current password"
+msgstr ""
+
+#: templates/personal.php:16
+msgid "New password"
+msgstr ""
+
+#: templates/personal.php:17
+msgid "show"
+msgstr ""
+
+#: templates/personal.php:18
+msgid "Change password"
+msgstr ""
+
+#: templates/personal.php:24
+msgid "Email"
+msgstr ""
+
+#: templates/personal.php:25
+msgid "Your email address"
+msgstr ""
+
+#: templates/personal.php:26
+msgid "Fill in an email address to enable password recovery"
+msgstr ""
+
+#: templates/personal.php:32 templates/personal.php:33
+msgid "Language"
+msgstr ""
+
+#: templates/personal.php:38
+msgid "Help translate"
+msgstr ""
+
+#: templates/personal.php:45
+msgid "use this address to connect to your ownCloud in your file manager"
+msgstr ""
+
+#: templates/users.php:15 templates/users.php:30
+msgid "Name"
+msgstr ""
+
+#: templates/users.php:16 templates/users.php:31
+msgid "Password"
+msgstr ""
+
+#: templates/users.php:17 templates/users.php:32 templates/users.php:46
+msgid "Groups"
+msgstr ""
+
+#: templates/users.php:23
+msgid "Create"
+msgstr ""
+
+#: templates/users.php:33
+msgid "Quota"
+msgstr ""
+
+#: templates/users.php:58
+msgid "Delete"
+msgstr ""
+
+
diff --git a/l10n/ia/calendar.po b/l10n/ia/calendar.po
new file mode 100644
index 00000000000..9cdf15555b7
--- /dev/null
+++ b/l10n/ia/calendar.po
@@ -0,0 +1,637 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Emilio Sepúlveda <djfunkinmixer@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Interlingua (http://www.transifex.net/projects/p/owncloud/team/ia/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ia\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/guesstimezone.php:42
+msgid "New Timezone:"
+msgstr ""
+
+#: ajax/settimezone.php:22
+msgid "Timezone changed"
+msgstr ""
+
+#: ajax/settimezone.php:24
+msgid "Invalid request"
+msgstr ""
+
+#: appinfo/app.php:20 templates/calendar.php:13
+#: templates/part.eventform.php:20
+msgid "Calendar"
+msgstr "Calendario"
+
+#: lib/app.php:19
+msgid "Wrong calendar"
+msgstr ""
+
+#: lib/app.php:60 lib/object.php:332
+msgid "Birthday"
+msgstr ""
+
+#: lib/app.php:61 lib/object.php:333
+msgid "Business"
+msgstr ""
+
+#: lib/app.php:62 lib/object.php:334
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:63 lib/object.php:335
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:64 lib/object.php:336
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:65 lib/object.php:337
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:66 lib/object.php:338
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:67 lib/object.php:339
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:68 lib/object.php:340
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:69 lib/object.php:341
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:70 lib/object.php:342
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:71 lib/object.php:343
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:72 lib/object.php:344
+msgid "Projects"
+msgstr "Projectos"
+
+#: lib/app.php:73 lib/object.php:345
+msgid "Questions"
+msgstr ""
+
+#: lib/app.php:74 lib/object.php:346
+msgid "Work"
+msgstr "Travalio"
+
+#: lib/object.php:353
+msgid "Does not repeat"
+msgstr ""
+
+#: lib/object.php:354
+msgid "Daily"
+msgstr ""
+
+#: lib/object.php:355
+msgid "Weekly"
+msgstr ""
+
+#: lib/object.php:356
+msgid "Every Weekday"
+msgstr ""
+
+#: lib/object.php:357
+msgid "Bi-Weekly"
+msgstr ""
+
+#: lib/object.php:358
+msgid "Monthly"
+msgstr ""
+
+#: lib/object.php:359
+msgid "Yearly"
+msgstr ""
+
+#: lib/object.php:366
+msgid "never"
+msgstr ""
+
+#: lib/object.php:367
+msgid "by occurrences"
+msgstr ""
+
+#: lib/object.php:368
+msgid "by date"
+msgstr ""
+
+#: lib/object.php:375
+msgid "by monthday"
+msgstr ""
+
+#: lib/object.php:376
+msgid "by weekday"
+msgstr ""
+
+#: lib/object.php:383 templates/lAfix.php:3
+msgid "Monday"
+msgstr ""
+
+#: lib/object.php:384 templates/lAfix.php:4
+msgid "Tuesday"
+msgstr ""
+
+#: lib/object.php:385 templates/lAfix.php:5
+msgid "Wednesday"
+msgstr ""
+
+#: lib/object.php:386 templates/lAfix.php:6
+msgid "Thursday"
+msgstr ""
+
+#: lib/object.php:387 templates/lAfix.php:7
+msgid "Friday"
+msgstr ""
+
+#: lib/object.php:388 templates/lAfix.php:8
+msgid "Saturday"
+msgstr ""
+
+#: lib/object.php:389 templates/lAfix.php:2
+msgid "Sunday"
+msgstr ""
+
+#: lib/object.php:396
+msgid "events week of month"
+msgstr ""
+
+#: lib/object.php:397
+msgid "first"
+msgstr ""
+
+#: lib/object.php:398
+msgid "second"
+msgstr ""
+
+#: lib/object.php:399
+msgid "third"
+msgstr ""
+
+#: lib/object.php:400
+msgid "fourth"
+msgstr ""
+
+#: lib/object.php:401
+msgid "fifth"
+msgstr ""
+
+#: lib/object.php:402
+msgid "last"
+msgstr ""
+
+#: lib/object.php:424 templates/lAfix.php:16
+msgid "January"
+msgstr ""
+
+#: lib/object.php:425 templates/lAfix.php:17
+msgid "February"
+msgstr ""
+
+#: lib/object.php:426 templates/lAfix.php:18
+msgid "March"
+msgstr ""
+
+#: lib/object.php:427 templates/lAfix.php:19
+msgid "April"
+msgstr ""
+
+#: lib/object.php:428 templates/lAfix.php:20
+msgid "May"
+msgstr ""
+
+#: lib/object.php:429 templates/lAfix.php:21
+msgid "June"
+msgstr ""
+
+#: lib/object.php:430 templates/lAfix.php:22
+msgid "July"
+msgstr ""
+
+#: lib/object.php:431 templates/lAfix.php:23
+msgid "August"
+msgstr ""
+
+#: lib/object.php:432 templates/lAfix.php:24
+msgid "September"
+msgstr ""
+
+#: lib/object.php:433 templates/lAfix.php:25
+msgid "October"
+msgstr ""
+
+#: lib/object.php:434 templates/lAfix.php:26
+msgid "November"
+msgstr ""
+
+#: lib/object.php:435 templates/lAfix.php:27
+msgid "December"
+msgstr ""
+
+#: lib/object.php:441
+msgid "by events date"
+msgstr ""
+
+#: lib/object.php:442
+msgid "by yearday(s)"
+msgstr ""
+
+#: lib/object.php:443
+msgid "by weeknumber(s)"
+msgstr ""
+
+#: lib/object.php:444
+msgid "by day and month"
+msgstr ""
+
+#: lib/object.php:467
+msgid "Not an array"
+msgstr ""
+
+#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+msgid "Date"
+msgstr ""
+
+#: lib/search.php:40
+msgid "Cal."
+msgstr ""
+
+#: templates/calendar.php:10
+msgid "All day"
+msgstr "Omne die"
+
+#: templates/calendar.php:11
+msgid "Missing fields"
+msgstr ""
+
+#: templates/calendar.php:12 templates/part.eventform.php:3
+msgid "Title"
+msgstr "Titulo"
+
+#: templates/calendar.php:14
+msgid "From Date"
+msgstr ""
+
+#: templates/calendar.php:15
+msgid "From Time"
+msgstr ""
+
+#: templates/calendar.php:16
+msgid "To Date"
+msgstr ""
+
+#: templates/calendar.php:17
+msgid "To Time"
+msgstr ""
+
+#: templates/calendar.php:18
+msgid "The event ends before it starts"
+msgstr ""
+
+#: templates/calendar.php:19
+msgid "There was a database fail"
+msgstr ""
+
+#: templates/calendar.php:52
+msgid "Week"
+msgstr "Septimana"
+
+#: templates/calendar.php:53
+msgid "Month"
+msgstr "Mense"
+
+#: templates/calendar.php:54
+msgid "List"
+msgstr "Lista"
+
+#: templates/calendar.php:59
+msgid "Today"
+msgstr "Hodie"
+
+#: templates/calendar.php:60
+msgid "Calendars"
+msgstr "Calendarios"
+
+#: templates/calendar.php:78
+msgid "There was a fail, while parsing the file."
+msgstr ""
+
+#: templates/lAfix.php:9
+msgid "Sun."
+msgstr ""
+
+#: templates/lAfix.php:10
+msgid "Mon."
+msgstr ""
+
+#: templates/lAfix.php:11
+msgid "Tue."
+msgstr ""
+
+#: templates/lAfix.php:12
+msgid "Wed."
+msgstr ""
+
+#: templates/lAfix.php:13
+msgid "Thu."
+msgstr ""
+
+#: templates/lAfix.php:14
+msgid "Fri."
+msgstr ""
+
+#: templates/lAfix.php:15
+msgid "Sat."
+msgstr ""
+
+#: templates/lAfix.php:28
+msgid "Jan."
+msgstr ""
+
+#: templates/lAfix.php:29
+msgid "Feb."
+msgstr ""
+
+#: templates/lAfix.php:30
+msgid "Mar."
+msgstr ""
+
+#: templates/lAfix.php:31
+msgid "Apr."
+msgstr ""
+
+#: templates/lAfix.php:32
+msgid "May."
+msgstr ""
+
+#: templates/lAfix.php:33
+msgid "Jun."
+msgstr ""
+
+#: templates/lAfix.php:34
+msgid "Jul."
+msgstr ""
+
+#: templates/lAfix.php:35
+msgid "Aug."
+msgstr ""
+
+#: templates/lAfix.php:36
+msgid "Sep."
+msgstr ""
+
+#: templates/lAfix.php:37
+msgid "Oct."
+msgstr ""
+
+#: templates/lAfix.php:38
+msgid "Nov."
+msgstr ""
+
+#: templates/lAfix.php:39
+msgid "Dec."
+msgstr ""
+
+#: templates/part.choosecalendar.php:1
+msgid "Choose active calendars"
+msgstr "Selectionar calendarios active"
+
+#: templates/part.choosecalendar.php:15
+msgid "New Calendar"
+msgstr "Nove calendario"
+
+#: templates/part.choosecalendar.php:20
+#: templates/part.choosecalendar.rowfields.php:4
+msgid "CalDav Link"
+msgstr ""
+
+#: templates/part.choosecalendar.rowfields.php:4
+msgid "Download"
+msgstr "Discarga"
+
+#: templates/part.choosecalendar.rowfields.php:4
+msgid "Edit"
+msgstr "Modificar"
+
+#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.editevent.php:9
+msgid "Delete"
+msgstr "Deler"
+
+#: templates/part.editcalendar.php:9
+msgid "New calendar"
+msgstr ""
+
+#: templates/part.editcalendar.php:9
+msgid "Edit calendar"
+msgstr "Modificar calendario"
+
+#: templates/part.editcalendar.php:12
+msgid "Displayname"
+msgstr ""
+
+#: templates/part.editcalendar.php:23
+msgid "Active"
+msgstr "Active"
+
+#: templates/part.editcalendar.php:29
+msgid "Calendar color"
+msgstr "Color de calendario"
+
+#: templates/part.editcalendar.php:42
+msgid "Save"
+msgstr "Salveguardar"
+
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
+#: templates/part.newevent.php:6
+msgid "Submit"
+msgstr "Inviar"
+
+#: templates/part.editcalendar.php:43
+msgid "Cancel"
+msgstr "Cancellar"
+
+#: templates/part.editevent.php:1
+msgid "Edit an event"
+msgstr ""
+
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr ""
+
+#: templates/part.eventform.php:5
+msgid "Title of the Event"
+msgstr ""
+
+#: templates/part.eventform.php:11
+msgid "Category"
+msgstr ""
+
+#: templates/part.eventform.php:13
+msgid "Select category"
+msgstr "Selectionar categoria"
+
+#: templates/part.eventform.php:37
+msgid "All Day Event"
+msgstr ""
+
+#: templates/part.eventform.php:41
+msgid "From"
+msgstr "Ab"
+
+#: templates/part.eventform.php:49
+msgid "To"
+msgstr "A"
+
+#: templates/part.eventform.php:57
+msgid "Advanced options"
+msgstr ""
+
+#: templates/part.eventform.php:61
+msgid "Repeat"
+msgstr ""
+
+#: templates/part.eventform.php:68
+msgid "Advanced"
+msgstr ""
+
+#: templates/part.eventform.php:112
+msgid "Select weekdays"
+msgstr ""
+
+#: templates/part.eventform.php:125 templates/part.eventform.php:138
+msgid "Select days"
+msgstr ""
+
+#: templates/part.eventform.php:130
+msgid "and the events day of year."
+msgstr ""
+
+#: templates/part.eventform.php:143
+msgid "and the events day of month."
+msgstr ""
+
+#: templates/part.eventform.php:151
+msgid "Select months"
+msgstr ""
+
+#: templates/part.eventform.php:164
+msgid "Select weeks"
+msgstr ""
+
+#: templates/part.eventform.php:169
+msgid "and the events week of year."
+msgstr ""
+
+#: templates/part.eventform.php:175
+msgid "Interval"
+msgstr ""
+
+#: templates/part.eventform.php:181
+msgid "End"
+msgstr ""
+
+#: templates/part.eventform.php:193
+msgid "occurrences"
+msgstr ""
+
+#: templates/part.eventform.php:208
+msgid "Location"
+msgstr ""
+
+#: templates/part.eventform.php:210
+msgid "Location of the Event"
+msgstr ""
+
+#: templates/part.eventform.php:216
+msgid "Description"
+msgstr "Description"
+
+#: templates/part.eventform.php:218
+msgid "Description of the Event"
+msgstr ""
+
+#: templates/part.import.php:1
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the calendar"
+msgstr ""
+
+#: templates/part.import.php:10
+msgid "create a new calendar"
+msgstr ""
+
+#: templates/part.import.php:15
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import"
+msgstr ""
+
+#: templates/part.import.php:20
+msgid "Importing calendar"
+msgstr ""
+
+#: templates/part.import.php:23
+msgid "Calendar imported successfully"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Close Dialog"
+msgstr ""
+
+#: templates/part.newevent.php:1
+msgid "Create a new event"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Timezone"
+msgstr ""
+
+#: templates/settings.php:30
+msgid "Check always for changes of the timezone"
+msgstr ""
+
+#: templates/settings.php:32
+msgid "Timeformat"
+msgstr ""
+
+#: templates/settings.php:34
+msgid "24h"
+msgstr ""
+
+#: templates/settings.php:35
+msgid "12h"
+msgstr ""
+
+#: templates/settings.php:41
+msgid "Calendar CalDAV syncing address:"
+msgstr ""
+
+
diff --git a/l10n/ia/contacts.po b/l10n/ia/contacts.po
new file mode 100644
index 00000000000..6958d64a4b9
--- /dev/null
+++ b/l10n/ia/contacts.po
@@ -0,0 +1,291 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Emilio Sepúlveda <djfunkinmixer@gmail.com>, 2011.
+# Emilio Sepúlveda <emisepulvedam@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Interlingua (http://www.transifex.net/projects/p/owncloud/team/ia/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ia\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/activation.php:17 ajax/updateaddressbook.php:26
+msgid "Error (de)activating addressbook."
+msgstr ""
+
+#: ajax/addcard.php:79
+msgid "There was an error adding the contact."
+msgstr ""
+
+#: ajax/addproperty.php:39
+msgid "Cannot add empty property."
+msgstr ""
+
+#: ajax/addproperty.php:51
+msgid "At least one of the address fields has to be filled out."
+msgstr ""
+
+#: ajax/addproperty.php:77
+msgid "Error adding contact property."
+msgstr ""
+
+#: ajax/createaddressbook.php:20
+msgid "Error adding addressbook."
+msgstr ""
+
+#: ajax/createaddressbook.php:26
+msgid "Error activating addressbook."
+msgstr ""
+
+#: ajax/deleteproperty.php:40
+msgid "Error deleting contact property."
+msgstr ""
+
+#: ajax/setproperty.php:79
+msgid "Error updating contact property."
+msgstr ""
+
+#: ajax/updateaddressbook.php:20
+msgid "Error updating addressbook."
+msgstr ""
+
+#: appinfo/app.php:21 templates/settings.php:3
+msgid "Contacts"
+msgstr ""
+
+#: lib/app.php:42
+msgid "This is not your addressbook."
+msgstr "Iste non es tu libro de adresses"
+
+#: lib/app.php:51 photo.php:34
+msgid "Contact could not be found."
+msgstr "Contacto non poterea esser legite"
+
+#: lib/app.php:79
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr ""
+
+#: lib/app.php:91 templates/part.addcardform.php:54
+#: templates/part.property.php:45 templates/part.setpropertyform.php:7
+msgid "Address"
+msgstr "Adresse"
+
+#: lib/app.php:92 templates/part.addcardform.php:43
+msgid "Telephone"
+msgstr "Telephono"
+
+#: lib/app.php:93 templates/part.addcardform.php:37
+#: templates/part.property.php:16 templates/part.setpropertyform.php:51
+msgid "Email"
+msgstr "E-posta"
+
+#: lib/app.php:94 templates/part.addcardform.php:27
+#: templates/part.property.php:9 templates/part.setpropertyform.php:54
+msgid "Organization"
+msgstr "Organisation"
+
+#: lib/app.php:106 lib/app.php:113
+msgid "Work"
+msgstr "Travalio"
+
+#: lib/app.php:107 lib/app.php:111
+msgid "Home"
+msgstr "Domo"
+
+#: lib/app.php:112
+msgid "Mobile"
+msgstr ""
+
+#: lib/app.php:114
+msgid "Text"
+msgstr "Texto"
+
+#: lib/app.php:115
+msgid "Voice"
+msgstr "Voce"
+
+#: lib/app.php:116
+msgid "Fax"
+msgstr "Fax"
+
+#: lib/app.php:117
+msgid "Video"
+msgstr "Video"
+
+#: lib/app.php:118
+msgid "Pager"
+msgstr "Pager"
+
+#: lib/search.php:22
+msgid "Contact"
+msgstr ""
+
+#: photo.php:40
+msgid "This is not your contact."
+msgstr "Iste non es tu contacto"
+
+#: photo.php:48
+msgid "This card is not RFC compatible."
+msgstr "Iste carta non es compatibile con RFC"
+
+#: photo.php:85
+msgid "This card does not contain a photo."
+msgstr ""
+
+#: templates/index.php:6
+msgid "Add Contact"
+msgstr "Adder contacto"
+
+#: templates/index.php:7
+msgid "Addressbooks"
+msgstr ""
+
+#: templates/part.addcardform.php:8
+msgid "Addressbook"
+msgstr ""
+
+#: templates/part.addcardform.php:21
+msgid "Name"
+msgstr "Nomine"
+
+#: templates/part.addcardform.php:57 templates/part.details.php:43
+#: templates/part.details.php:79 templates/part.setpropertyform.php:10
+#: templates/part.setpropertyform.php:47
+msgid "Type"
+msgstr ""
+
+#: templates/part.addcardform.php:65 templates/part.details.php:49
+#: templates/part.setpropertyform.php:16
+msgid "PO Box"
+msgstr "Cassa postal"
+
+#: templates/part.addcardform.php:72 templates/part.details.php:53
+#: templates/part.setpropertyform.php:20
+msgid "Extended"
+msgstr ""
+
+#: templates/part.addcardform.php:78 templates/part.details.php:57
+#: templates/part.setpropertyform.php:24
+msgid "Street"
+msgstr "Strata"
+
+#: templates/part.addcardform.php:84 templates/part.details.php:61
+#: templates/part.setpropertyform.php:28
+msgid "City"
+msgstr "Citate"
+
+#: templates/part.addcardform.php:90 templates/part.details.php:65
+#: templates/part.setpropertyform.php:32
+msgid "Region"
+msgstr "Region"
+
+#: templates/part.addcardform.php:96 templates/part.details.php:69
+#: templates/part.setpropertyform.php:36
+msgid "Zipcode"
+msgstr "Codice postal"
+
+#: templates/part.addcardform.php:102 templates/part.details.php:73
+#: templates/part.setpropertyform.php:40
+msgid "Country"
+msgstr "Pais"
+
+#: templates/part.addcardform.php:109
+msgid "Create Contact"
+msgstr "Crear contacto"
+
+#: templates/part.chooseaddressbook.php:1
+msgid "Choose active Address Books"
+msgstr ""
+
+#: templates/part.chooseaddressbook.php:16
+msgid "New Address Book"
+msgstr ""
+
+#: templates/part.chooseaddressbook.php:21
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "CardDav Link"
+msgstr ""
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Download"
+msgstr ""
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Edit"
+msgstr "Modificar"
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Delete"
+msgstr "Deler"
+
+#: templates/part.details.php:3
+msgid "Download contact"
+msgstr ""
+
+#: templates/part.details.php:4
+msgid "Delete contact"
+msgstr ""
+
+#: templates/part.details.php:34
+msgid "Add"
+msgstr ""
+
+#: templates/part.editaddressbook.php:9
+msgid "New Addressbook"
+msgstr ""
+
+#: templates/part.editaddressbook.php:9
+msgid "Edit Addressbook"
+msgstr ""
+
+#: templates/part.editaddressbook.php:12
+msgid "Displayname"
+msgstr ""
+
+#: templates/part.editaddressbook.php:23
+msgid "Active"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Save"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Submit"
+msgstr ""
+
+#: templates/part.editaddressbook.php:30
+msgid "Cancel"
+msgstr ""
+
+#: templates/part.property.php:3
+msgid "Birthday"
+msgstr "Anniversario"
+
+#: templates/part.property.php:23
+msgid "Preferred"
+msgstr ""
+
+#: templates/part.property.php:23 templates/part.setpropertyform.php:45
+msgid "Phone"
+msgstr "Phono"
+
+#: templates/part.setpropertyform.php:57
+msgid "Update"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "CardDAV syncing address:"
+msgstr ""
+
+
diff --git a/l10n/ia/core.po b/l10n/ia/core.po
new file mode 100644
index 00000000000..f3f5f87ceea
--- /dev/null
+++ b/l10n/ia/core.po
@@ -0,0 +1,171 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Emilio Sepúlveda <djfunkinmixer@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Interlingua (http://www.transifex.net/projects/p/owncloud/team/ia/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ia\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: lostpassword/index.php:24
+msgid "Owncloud password reset"
+msgstr ""
+
+#: lostpassword/templates/email.php:1
+msgid "Use the following link to reset your password: {link}"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Requested"
+msgstr "Requestate"
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr "Initio de session fallate!"
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:22
+#: templates/login.php:8
+msgid "Username"
+msgstr "Nomine de usator"
+
+#: lostpassword/templates/lostpassword.php:14
+msgid "Request reset"
+msgstr "Requestar reinitialisation"
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr "Tu contrasigno esseva reinitialisate"
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr "Nove contrasigno"
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr "Reinitialisar contrasigno"
+
+#: strings.php:5
+msgid "Personal"
+msgstr ""
+
+#: strings.php:6
+msgid "Users"
+msgstr "Usatores"
+
+#: strings.php:7
+msgid "Apps"
+msgstr "Applicationes"
+
+#: strings.php:8
+msgid "Admin"
+msgstr ""
+
+#: strings.php:9
+msgid "Help"
+msgstr "Adjuta"
+
+#: templates/404.php:12
+msgid "Cloud not found"
+msgstr "Nube non trovate"
+
+#: templates/installation.php:20
+msgid "Create an <strong>admin account</strong>"
+msgstr "Crear un <strong>conto de administration</strong>"
+
+#: templates/installation.php:26 templates/login.php:12
+msgid "Password"
+msgstr "Contrasigno"
+
+#: templates/installation.php:32
+msgid "Advanced"
+msgstr "Avantiate"
+
+#: templates/installation.php:34
+msgid "Data folder"
+msgstr "Dossier de datos"
+
+#: templates/installation.php:41
+msgid "Configure the database"
+msgstr "Configurar le base de datos"
+
+#: templates/installation.php:46 templates/installation.php:57
+#: templates/installation.php:67
+msgid "will be used"
+msgstr "essera usate"
+
+#: templates/installation.php:79
+msgid "Database user"
+msgstr "Usator de base de datos"
+
+#: templates/installation.php:83
+msgid "Database password"
+msgstr "Contrasigno de base de datos"
+
+#: templates/installation.php:87
+msgid "Database name"
+msgstr "Nomine de base de datos"
+
+#: templates/installation.php:93
+msgid "Database host"
+msgstr ""
+
+#: templates/installation.php:98
+msgid "Finish setup"
+msgstr ""
+
+#: templates/layout.guest.php:35
+msgid "web services under your control"
+msgstr ""
+
+#: templates/layout.user.php:34
+msgid "Log out"
+msgstr "Clauder le session"
+
+#: templates/layout.user.php:46 templates/layout.user.php:47
+msgid "Settings"
+msgstr "Configurationes"
+
+#: templates/login.php:5
+msgid "Lost your password?"
+msgstr ""
+
+#: templates/login.php:15
+msgid "remember"
+msgstr "memora"
+
+#: templates/login.php:16
+msgid "Log in"
+msgstr ""
+
+#: templates/logout.php:1
+msgid "You are logged out."
+msgstr ""
+
+#: templates/part.pagenavi.php:3
+msgid "prev"
+msgstr "prev"
+
+#: templates/part.pagenavi.php:20
+msgid "next"
+msgstr "prox"
+
+
diff --git a/l10n/ia/files.po b/l10n/ia/files.po
new file mode 100644
index 00000000000..8ecc6217302
--- /dev/null
+++ b/l10n/ia/files.po
@@ -0,0 +1,109 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Emilio Sepúlveda <djfunkinmixer@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Interlingua (http://www.transifex.net/projects/p/owncloud/team/ia/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ia\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/upload.php:19
+msgid "There is no error, the file uploaded with success"
+msgstr ""
+
+#: ajax/upload.php:20
+msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
+msgstr ""
+
+#: ajax/upload.php:21
+msgid ""
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
+"the HTML form"
+msgstr ""
+
+#: ajax/upload.php:22
+msgid "The uploaded file was only partially uploaded"
+msgstr "Le file incargate solmente esseva incargate partialmente"
+
+#: ajax/upload.php:23
+msgid "No file was uploaded"
+msgstr "Nulle file esseva incargate"
+
+#: ajax/upload.php:24
+msgid "Missing a temporary folder"
+msgstr ""
+
+#: appinfo/app.php:8
+msgid "Files"
+msgstr "Files"
+
+#: templates/admin.php:5
+msgid "Maximum upload size"
+msgstr "Dimension maxime de incargamento"
+
+#: templates/index.php:7
+msgid "New"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Text file"
+msgstr ""
+
+#: templates/index.php:11
+msgid "Folder"
+msgstr ""
+
+#: templates/index.php:12
+msgid "From the web"
+msgstr ""
+
+#: templates/index.php:22
+msgid "Upload"
+msgstr "Incargar"
+
+#: templates/index.php:35
+msgid "Nothing in here. Upload something!"
+msgstr "Nihil hic. Incarga alcun cosa!"
+
+#: templates/index.php:43
+msgid "Name"
+msgstr "Nomine"
+
+#: templates/index.php:45
+msgid "Download"
+msgstr "Discargar"
+
+#: templates/index.php:49
+msgid "Size"
+msgstr "Dimension"
+
+#: templates/index.php:50
+msgid "Modified"
+msgstr "Modificate"
+
+#: templates/index.php:50
+msgid "Delete"
+msgstr "Deler"
+
+#: templates/index.php:58
+msgid "Upload too large"
+msgstr "Incargamento troppo longe"
+
+#: templates/index.php:60
+msgid ""
+"The files you are trying to upload exceed the maximum size for file uploads "
+"on this server."
+msgstr ""
+
+
diff --git a/l10n/ia/gallery.po b/l10n/ia/gallery.po
new file mode 100644
index 00000000000..76db89533ff
--- /dev/null
+++ b/l10n/ia/gallery.po
@@ -0,0 +1,32 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:48+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Interlingua (http://www.transifex.net/projects/p/owncloud/team/ia/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ia\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:41
+msgid "Gallery"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Rescan"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+
diff --git a/l10n/ia/media.po b/l10n/ia/media.po
new file mode 100644
index 00000000000..0a64e175db4
--- /dev/null
+++ b/l10n/ia/media.po
@@ -0,0 +1,65 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Emilio Sepúlveda <djfunkinmixer@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Interlingua (http://www.transifex.net/projects/p/owncloud/team/ia/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ia\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:32
+msgid "Music"
+msgstr "Musica"
+
+#: templates/music.php:3 templates/player.php:13
+msgid "Play"
+msgstr "Reproducer"
+
+#: templates/music.php:4 templates/music.php:26 templates/player.php:14
+msgid "Pause"
+msgstr "Pausa"
+
+#: templates/music.php:5
+msgid "Previous"
+msgstr "Previe"
+
+#: templates/music.php:6 templates/player.php:15
+msgid "Next"
+msgstr "Proxime"
+
+#: templates/music.php:7
+msgid "Mute"
+msgstr "Mute"
+
+#: templates/music.php:8
+msgid "Unmute"
+msgstr "Con sono"
+
+#: templates/music.php:25
+msgid "Rescan Collection"
+msgstr "Rescannar collection"
+
+#: templates/music.php:37
+msgid "Artist"
+msgstr "Artista"
+
+#: templates/music.php:38
+msgid "Album"
+msgstr "Album"
+
+#: templates/music.php:39
+msgid "Title"
+msgstr "Titulo"
+
+
diff --git a/l10n/ia/settings.po b/l10n/ia/settings.po
new file mode 100644
index 00000000000..b05a2f18bb6
--- /dev/null
+++ b/l10n/ia/settings.po
@@ -0,0 +1,153 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Emilio Sepúlveda <djfunkinmixer@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Interlingua (http://www.transifex.net/projects/p/owncloud/team/ia/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ia\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/lostpassword.php:14
+msgid "email Changed"
+msgstr ""
+
+#: ajax/lostpassword.php:16 ajax/openid.php:17 ajax/setlanguage.php:16
+msgid "Invalid request"
+msgstr ""
+
+#: ajax/openid.php:15
+msgid "OpenID Changed"
+msgstr "OpenID cambiate"
+
+#: ajax/setlanguage.php:14
+msgid "Language changed"
+msgstr "Linguage cambiate"
+
+#: templates/admin.php:13
+msgid "Log level"
+msgstr ""
+
+#: templates/apps.php:8
+msgid "Add your application"
+msgstr "Adder tu application"
+
+#: templates/apps.php:21
+msgid "Select an App"
+msgstr "Selectionar un app"
+
+#: templates/apps.php:23
+msgid "-licensed"
+msgstr ""
+
+#: templates/apps.php:23
+msgid "by"
+msgstr "per"
+
+#: templates/help.php:8
+msgid "Ask a question"
+msgstr "Facer un question"
+
+#: templates/help.php:20
+msgid "Problems connecting to help database."
+msgstr ""
+
+#: templates/help.php:21
+msgid "Go there manually."
+msgstr ""
+
+#: templates/help.php:29
+msgid "Answer"
+msgstr "Responsa"
+
+#: templates/personal.php:8
+msgid "You use"
+msgstr ""
+
+#: templates/personal.php:8
+msgid "of the available"
+msgstr ""
+
+#: templates/personal.php:13
+msgid "Your password got changed"
+msgstr "Tu contrasigno esseva cambiate"
+
+#: templates/personal.php:14
+msgid "Unable to change your password"
+msgstr "Non pote cambiar tu contrasigno"
+
+#: templates/personal.php:15
+msgid "Current password"
+msgstr "Contrasigno currente"
+
+#: templates/personal.php:16
+msgid "New password"
+msgstr "Nove contrasigno"
+
+#: templates/personal.php:17
+msgid "show"
+msgstr "monstrar"
+
+#: templates/personal.php:18
+msgid "Change password"
+msgstr "Cambiar contrasigno"
+
+#: templates/personal.php:24
+msgid "Email"
+msgstr ""
+
+#: templates/personal.php:25
+msgid "Your email address"
+msgstr ""
+
+#: templates/personal.php:26
+msgid "Fill in an email address to enable password recovery"
+msgstr ""
+
+#: templates/personal.php:32 templates/personal.php:33
+msgid "Language"
+msgstr "Linguage"
+
+#: templates/personal.php:38
+msgid "Help translate"
+msgstr ""
+
+#: templates/personal.php:45
+msgid "use this address to connect to your ownCloud in your file manager"
+msgstr ""
+
+#: templates/users.php:15 templates/users.php:30
+msgid "Name"
+msgstr "Nomine"
+
+#: templates/users.php:16 templates/users.php:31
+msgid "Password"
+msgstr "Contrasigno"
+
+#: templates/users.php:17 templates/users.php:32 templates/users.php:46
+msgid "Groups"
+msgstr "Gruppos"
+
+#: templates/users.php:23
+msgid "Create"
+msgstr "Crear"
+
+#: templates/users.php:33
+msgid "Quota"
+msgstr ""
+
+#: templates/users.php:58
+msgid "Delete"
+msgstr "Deler"
+
+
diff --git a/l10n/id/calendar.po b/l10n/id/calendar.po
index 56e64399dd0..ac9956f71b3 100644
--- a/l10n/id/calendar.po
+++ b/l10n/id/calendar.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Indonesian (http://www.transifex.net/projects/p/owncloud/team/id/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,321 +18,403 @@ msgstr ""
"Language: id\n"
"Plural-Forms: nplurals=1; plural=0\n"
-#: ajax/createcalendar.php:18 ajax/settimezone.php:19
-#: ajax/updatecalendar.php:18
-msgid "Authentication error"
-msgstr "Kesalahan otentikasi"
-
-#: ajax/editeventform.php:25
-msgid "Wrong calendar"
+#: ajax/guesstimezone.php:42
+msgid "New Timezone:"
msgstr ""
-#: ajax/settimezone.php:27
+#: ajax/settimezone.php:22
msgid "Timezone changed"
msgstr "Zona waktu telah diubah"
-#: ajax/settimezone.php:29
+#: ajax/settimezone.php:24
msgid "Invalid request"
msgstr "Permintaan tidak sah"
-#: appinfo/app.php:19 templates/part.eventform.php:27
-#: templates/part.eventinfo.php:18
+#: appinfo/app.php:20 templates/calendar.php:13
+#: templates/part.eventform.php:20
msgid "Calendar"
msgstr "Kalender"
-#: lib/object.php:292
+#: lib/app.php:19
+msgid "Wrong calendar"
+msgstr ""
+
+#: lib/app.php:60 lib/object.php:332
msgid "Birthday"
msgstr ""
-#: lib/object.php:293
+#: lib/app.php:61 lib/object.php:333
msgid "Business"
msgstr ""
-#: lib/object.php:294
+#: lib/app.php:62 lib/object.php:334
msgid "Call"
msgstr ""
-#: lib/object.php:295
+#: lib/app.php:63 lib/object.php:335
msgid "Clients"
msgstr ""
-#: lib/object.php:296
+#: lib/app.php:64 lib/object.php:336
msgid "Deliverer"
msgstr ""
-#: lib/object.php:297
+#: lib/app.php:65 lib/object.php:337
msgid "Holidays"
msgstr ""
-#: lib/object.php:298
+#: lib/app.php:66 lib/object.php:338
msgid "Ideas"
msgstr ""
-#: lib/object.php:299
+#: lib/app.php:67 lib/object.php:339
msgid "Journey"
msgstr ""
-#: lib/object.php:300
+#: lib/app.php:68 lib/object.php:340
msgid "Jubilee"
msgstr ""
-#: lib/object.php:301
+#: lib/app.php:69 lib/object.php:341
msgid "Meeting"
msgstr ""
-#: lib/object.php:302
+#: lib/app.php:70 lib/object.php:342
msgid "Other"
msgstr ""
-#: lib/object.php:303
+#: lib/app.php:71 lib/object.php:343
msgid "Personal"
msgstr ""
-#: lib/object.php:304
+#: lib/app.php:72 lib/object.php:344
msgid "Projects"
msgstr ""
-#: lib/object.php:305
+#: lib/app.php:73 lib/object.php:345
msgid "Questions"
msgstr ""
-#: lib/object.php:306
+#: lib/app.php:74 lib/object.php:346
msgid "Work"
msgstr ""
-#: lib/object.php:313
+#: lib/object.php:353
msgid "Does not repeat"
msgstr "Tidak akan mengulangi"
-#: lib/object.php:314
+#: lib/object.php:354
msgid "Daily"
msgstr "Harian"
-#: lib/object.php:315
+#: lib/object.php:355
msgid "Weekly"
msgstr "Mingguan"
-#: lib/object.php:316
+#: lib/object.php:356
msgid "Every Weekday"
msgstr "Setiap Hari Minggu"
-#: lib/object.php:317
+#: lib/object.php:357
msgid "Bi-Weekly"
msgstr "Dwi-mingguan"
-#: lib/object.php:318
+#: lib/object.php:358
msgid "Monthly"
msgstr "Bulanan"
-#: lib/object.php:319
+#: lib/object.php:359
msgid "Yearly"
msgstr "Tahunan"
-#: lib/object.php:337
-msgid "Not an array"
+#: lib/object.php:366
+msgid "never"
msgstr ""
-#: templates/calendar.php:3
-msgid "All day"
-msgstr "Semua Hari"
+#: lib/object.php:367
+msgid "by occurrences"
+msgstr ""
-#: templates/calendar.php:32
-msgid "Sunday"
-msgstr "Minggu"
+#: lib/object.php:368
+msgid "by date"
+msgstr ""
+
+#: lib/object.php:375
+msgid "by monthday"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:376
+msgid "by weekday"
+msgstr ""
+
+#: lib/object.php:383 templates/lAfix.php:3
msgid "Monday"
-msgstr "Senin"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:384 templates/lAfix.php:4
msgid "Tuesday"
-msgstr "Selasa"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:385 templates/lAfix.php:5
msgid "Wednesday"
-msgstr "Rabu"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:386 templates/lAfix.php:6
msgid "Thursday"
-msgstr "Kamis"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:387 templates/lAfix.php:7
msgid "Friday"
-msgstr "Jumat"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:388 templates/lAfix.php:8
msgid "Saturday"
-msgstr "Sabtu"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Sun."
-msgstr "Min."
+#: lib/object.php:389 templates/lAfix.php:2
+msgid "Sunday"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Mon."
-msgstr "Sen."
+#: lib/object.php:396
+msgid "events week of month"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Tue."
-msgstr "Sel."
+#: lib/object.php:397
+msgid "first"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Wed."
-msgstr "Rab."
+#: lib/object.php:398
+msgid "second"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Thu."
-msgstr "Kam."
+#: lib/object.php:399
+msgid "third"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Fri."
-msgstr "Jum."
+#: lib/object.php:400
+msgid "fourth"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Sat."
-msgstr "Sab."
+#: lib/object.php:401
+msgid "fifth"
+msgstr ""
+
+#: lib/object.php:402
+msgid "last"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:424 templates/lAfix.php:16
msgid "January"
-msgstr "Januari"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:425 templates/lAfix.php:17
msgid "February"
-msgstr "Februari"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:426 templates/lAfix.php:18
msgid "March"
-msgstr "Maret"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:427 templates/lAfix.php:19
msgid "April"
-msgstr "April"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:428 templates/lAfix.php:20
msgid "May"
-msgstr "Mei"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:429 templates/lAfix.php:21
msgid "June"
-msgstr "Juni"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:430 templates/lAfix.php:22
msgid "July"
-msgstr "Juli"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:431 templates/lAfix.php:23
msgid "August"
-msgstr "Agustus"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:432 templates/lAfix.php:24
msgid "September"
-msgstr "September"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:433 templates/lAfix.php:25
msgid "October"
-msgstr "Oktober"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:434 templates/lAfix.php:26
msgid "November"
-msgstr "November"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:435 templates/lAfix.php:27
msgid "December"
-msgstr "Desember"
-
-#: templates/calendar.php:35
-msgid "Jan."
-msgstr "Jan."
+msgstr ""
-#: templates/calendar.php:35
-msgid "Feb."
-msgstr "Feb."
+#: lib/object.php:441
+msgid "by events date"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Mar."
-msgstr "Mar."
+#: lib/object.php:442
+msgid "by yearday(s)"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Apr."
-msgstr "Apr."
+#: lib/object.php:443
+msgid "by weeknumber(s)"
+msgstr ""
-#: templates/calendar.php:35
-msgid "May."
+#: lib/object.php:444
+msgid "by day and month"
msgstr ""
-#: templates/calendar.php:35
-msgid "Jun."
-msgstr "Jun."
+#: lib/object.php:467
+msgid "Not an array"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Jul."
-msgstr "Jul."
+#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+msgid "Date"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Aug."
-msgstr "Agu."
+#: lib/search.php:40
+msgid "Cal."
+msgstr ""
-#: templates/calendar.php:35
-msgid "Sep."
-msgstr "Sep."
+#: templates/calendar.php:10
+msgid "All day"
+msgstr "Semua Hari"
-#: templates/calendar.php:35
-msgid "Oct."
-msgstr "Okt."
+#: templates/calendar.php:11
+msgid "Missing fields"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Nov."
-msgstr "Nov."
+#: templates/calendar.php:12 templates/part.eventform.php:3
+msgid "Title"
+msgstr "Judul"
-#: templates/calendar.php:35
-msgid "Dec."
-msgstr "Des."
+#: templates/calendar.php:14
+msgid "From Date"
+msgstr ""
-#: templates/calendar.php:36 templates/calendar.php:50
-#: templates/calendar.php:116
-msgid "Week"
-msgstr "Minggu"
+#: templates/calendar.php:15
+msgid "From Time"
+msgstr ""
-#: templates/calendar.php:37 templates/calendar.php:51
-msgid "Weeks"
-msgstr "Minggu"
+#: templates/calendar.php:16
+msgid "To Date"
+msgstr ""
-#: templates/calendar.php:38
-msgid "More before {startdate}"
+#: templates/calendar.php:17
+msgid "To Time"
msgstr ""
-#: templates/calendar.php:39
-msgid "More after {enddate}"
+#: templates/calendar.php:18
+msgid "The event ends before it starts"
msgstr ""
-#: templates/calendar.php:49
-msgid "Day"
-msgstr "Hari"
+#: templates/calendar.php:19
+msgid "There was a database fail"
+msgstr ""
#: templates/calendar.php:52
+msgid "Week"
+msgstr "Minggu"
+
+#: templates/calendar.php:53
msgid "Month"
msgstr "Bulan"
-#: templates/calendar.php:53
+#: templates/calendar.php:54
msgid "List"
msgstr ""
-#: templates/calendar.php:58
+#: templates/calendar.php:59
msgid "Today"
msgstr "Hari ini"
-#: templates/calendar.php:59
+#: templates/calendar.php:60
msgid "Calendars"
msgstr "Kalender"
-#: templates/calendar.php:76 templates/calendar.php:94
-msgid "Time"
-msgstr "Waktu"
-
-#: templates/calendar.php:169
+#: templates/calendar.php:78
msgid "There was a fail, while parsing the file."
msgstr "Terjadi kesalahan, saat mengurai berkas."
+#: templates/lAfix.php:9
+msgid "Sun."
+msgstr ""
+
+#: templates/lAfix.php:10
+msgid "Mon."
+msgstr ""
+
+#: templates/lAfix.php:11
+msgid "Tue."
+msgstr ""
+
+#: templates/lAfix.php:12
+msgid "Wed."
+msgstr ""
+
+#: templates/lAfix.php:13
+msgid "Thu."
+msgstr ""
+
+#: templates/lAfix.php:14
+msgid "Fri."
+msgstr ""
+
+#: templates/lAfix.php:15
+msgid "Sat."
+msgstr ""
+
+#: templates/lAfix.php:28
+msgid "Jan."
+msgstr ""
+
+#: templates/lAfix.php:29
+msgid "Feb."
+msgstr ""
+
+#: templates/lAfix.php:30
+msgid "Mar."
+msgstr ""
+
+#: templates/lAfix.php:31
+msgid "Apr."
+msgstr ""
+
+#: templates/lAfix.php:32
+msgid "May."
+msgstr ""
+
+#: templates/lAfix.php:33
+msgid "Jun."
+msgstr ""
+
+#: templates/lAfix.php:34
+msgid "Jul."
+msgstr ""
+
+#: templates/lAfix.php:35
+msgid "Aug."
+msgstr ""
+
+#: templates/lAfix.php:36
+msgid "Sep."
+msgstr ""
+
+#: templates/lAfix.php:37
+msgid "Oct."
+msgstr ""
+
+#: templates/lAfix.php:38
+msgid "Nov."
+msgstr ""
+
+#: templates/lAfix.php:39
+msgid "Dec."
+msgstr ""
+
#: templates/part.choosecalendar.php:1
msgid "Choose active calendars"
msgstr "Pilih kalender aktif"
@@ -351,12 +433,11 @@ msgid "Download"
msgstr "Unduh"
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.eventinfo.php:64
msgid "Edit"
msgstr "Sunting"
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.editevent.php:8
+#: templates/part.editevent.php:9
msgid "Delete"
msgstr ""
@@ -376,90 +457,181 @@ msgstr "Namatampilan"
msgid "Active"
msgstr "Aktif"
-#: templates/part.editcalendar.php:29 templates/part.eventform.php:88
-#: templates/part.eventinfo.php:58
-msgid "Description"
-msgstr "Deskripsi"
-
-#: templates/part.editcalendar.php:35
+#: templates/part.editcalendar.php:29
msgid "Calendar color"
msgstr "Warna kalender"
-#: templates/part.editcalendar.php:41
+#: templates/part.editcalendar.php:42
msgid "Save"
msgstr ""
-#: templates/part.editcalendar.php:41 templates/part.editevent.php:7
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
#: templates/part.newevent.php:6
msgid "Submit"
msgstr "Sampaikan"
-#: templates/part.editcalendar.php:42
+#: templates/part.editcalendar.php:43
msgid "Cancel"
msgstr ""
-#: templates/part.editevent.php:1 templates/part.eventinfo.php:1
+#: templates/part.editevent.php:1
msgid "Edit an event"
msgstr "Sunting agenda"
-#: templates/part.eventform.php:3 templates/part.eventinfo.php:4
-msgid "Title"
-msgstr "Judul"
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr ""
#: templates/part.eventform.php:5
msgid "Title of the Event"
msgstr "Judul Agenda"
-#: templates/part.eventform.php:9 templates/part.eventinfo.php:9
-msgid "Location"
-msgstr "Lokasi"
-
#: templates/part.eventform.php:11
-msgid "Location of the Event"
-msgstr "Lokasi Agenda"
-
-#: templates/part.eventform.php:17 templates/part.eventinfo.php:16
msgid "Category"
msgstr "Kategori"
-#: templates/part.eventform.php:19
+#: templates/part.eventform.php:13
msgid "Select category"
msgstr ""
-#: templates/part.eventform.php:45 templates/part.eventinfo.php:28
+#: templates/part.eventform.php:37
msgid "All Day Event"
msgstr "Agenda di Semua Hari"
-#: templates/part.eventform.php:49 templates/part.eventinfo.php:31
+#: templates/part.eventform.php:41
msgid "From"
msgstr "Dari"
-#: templates/part.eventform.php:57 templates/part.eventinfo.php:38
+#: templates/part.eventform.php:49
msgid "To"
msgstr "Ke"
-#: templates/part.eventform.php:65 templates/part.eventinfo.php:44
+#: templates/part.eventform.php:57
+msgid "Advanced options"
+msgstr ""
+
+#: templates/part.eventform.php:61
msgid "Repeat"
msgstr "Ulangi"
-#: templates/part.eventform.php:81 templates/part.eventinfo.php:51
-msgid "Attendees"
-msgstr "Yang menghadiri"
+#: templates/part.eventform.php:68
+msgid "Advanced"
+msgstr ""
-#: templates/part.eventform.php:89
+#: templates/part.eventform.php:112
+msgid "Select weekdays"
+msgstr ""
+
+#: templates/part.eventform.php:125 templates/part.eventform.php:138
+msgid "Select days"
+msgstr ""
+
+#: templates/part.eventform.php:130
+msgid "and the events day of year."
+msgstr ""
+
+#: templates/part.eventform.php:143
+msgid "and the events day of month."
+msgstr ""
+
+#: templates/part.eventform.php:151
+msgid "Select months"
+msgstr ""
+
+#: templates/part.eventform.php:164
+msgid "Select weeks"
+msgstr ""
+
+#: templates/part.eventform.php:169
+msgid "and the events week of year."
+msgstr ""
+
+#: templates/part.eventform.php:175
+msgid "Interval"
+msgstr ""
+
+#: templates/part.eventform.php:181
+msgid "End"
+msgstr ""
+
+#: templates/part.eventform.php:193
+msgid "occurrences"
+msgstr ""
+
+#: templates/part.eventform.php:208
+msgid "Location"
+msgstr "Lokasi"
+
+#: templates/part.eventform.php:210
+msgid "Location of the Event"
+msgstr "Lokasi Agenda"
+
+#: templates/part.eventform.php:216
+msgid "Description"
+msgstr "Deskripsi"
+
+#: templates/part.eventform.php:218
msgid "Description of the Event"
msgstr "Deskripsi dari Agenda"
-#: templates/part.eventinfo.php:63
-msgid "Close"
-msgstr "Tutup"
+#: templates/part.import.php:1
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the calendar"
+msgstr ""
+
+#: templates/part.import.php:10
+msgid "create a new calendar"
+msgstr ""
+
+#: templates/part.import.php:15
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import"
+msgstr ""
+
+#: templates/part.import.php:20
+msgid "Importing calendar"
+msgstr ""
+
+#: templates/part.import.php:23
+msgid "Calendar imported successfully"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Close Dialog"
+msgstr ""
#: templates/part.newevent.php:1
msgid "Create a new event"
msgstr "Buat agenda baru"
-#: templates/settings.php:11
+#: templates/settings.php:13
msgid "Timezone"
msgstr "Zonawaktu"
+#: templates/settings.php:30
+msgid "Check always for changes of the timezone"
+msgstr ""
+
+#: templates/settings.php:32
+msgid "Timeformat"
+msgstr ""
+
+#: templates/settings.php:34
+msgid "24h"
+msgstr ""
+
+#: templates/settings.php:35
+msgid "12h"
+msgstr ""
+
+#: templates/settings.php:41
+msgid "Calendar CalDAV syncing address:"
+msgstr ""
+
diff --git a/l10n/id/contacts.po b/l10n/id/contacts.po
index 3a6360c599f..d78cbcd9b18 100644
--- a/l10n/id/contacts.po
+++ b/l10n/id/contacts.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 20:10+0200\n"
-"PO-Revision-Date: 2011-09-23 18:10+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Indonesian (http://www.transifex.net/projects/p/owncloud/team/id/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,164 +17,273 @@ msgstr ""
"Language: id\n"
"Plural-Forms: nplurals=1; plural=0\n"
-#: ajax/addcard.php:31 ajax/addproperty.php:31 ajax/deletebook.php:32
-#: ajax/deletecard.php:32 ajax/deleteproperty.php:34 ajax/getdetails.php:32
-#: ajax/setproperty.php:32 ajax/showaddcard.php:30 ajax/showaddproperty.php:31
-#: ajax/showsetproperty.php:32 photo.php:32
-msgid "You need to log in."
+#: ajax/activation.php:17 ajax/updateaddressbook.php:26
+msgid "Error (de)activating addressbook."
msgstr ""
-#: ajax/addcard.php:37
-msgid "This is not your addressbook."
+#: ajax/addcard.php:79
+msgid "There was an error adding the contact."
msgstr ""
-#: ajax/addproperty.php:37 ajax/deletecard.php:39 ajax/deleteproperty.php:41
-#: ajax/getdetails.php:39 ajax/setproperty.php:38 ajax/showaddproperty.php:37
-#: ajax/showsetproperty.php:38 photo.php:39
-msgid "Contact could not be found."
+#: ajax/addproperty.php:39
+msgid "Cannot add empty property."
msgstr ""
-#: ajax/addproperty.php:43 ajax/deletebook.php:38 ajax/deletecard.php:45
-#: ajax/deleteproperty.php:47 ajax/getdetails.php:45 ajax/setproperty.php:44
-#: ajax/showaddproperty.php:43 ajax/showsetproperty.php:44 photo.php:45
-msgid "This is not your contact."
+#: ajax/addproperty.php:51
+msgid "At least one of the address fields has to be filled out."
msgstr ""
-#: ajax/addproperty.php:50 ajax/deleteproperty.php:54 ajax/getdetails.php:52
-#: ajax/setproperty.php:51 ajax/showsetproperty.php:51
-msgid "vCard could not be read."
+#: ajax/addproperty.php:77
+msgid "Error adding contact property."
msgstr ""
-#: ajax/deleteproperty.php:65 ajax/setproperty.php:62
-#: ajax/showsetproperty.php:62
-msgid "Information about vCard is incorrect. Please reload the page."
+#: ajax/createaddressbook.php:20
+msgid "Error adding addressbook."
msgstr ""
-#: photo.php:53
-msgid "This card is not RFC compatible."
+#: ajax/createaddressbook.php:26
+msgid "Error activating addressbook."
msgstr ""
-#: photo.php:90
-msgid "This card does not contain a photo."
+#: ajax/deleteproperty.php:40
+msgid "Error deleting contact property."
msgstr ""
-#: templates/index.php:8
-msgid "Add Contact"
+#: ajax/setproperty.php:79
+msgid "Error updating contact property."
msgstr ""
-#: templates/part.addcardform.php:5
-msgid "Group"
+#: ajax/updateaddressbook.php:20
+msgid "Error updating addressbook."
msgstr ""
-#: templates/part.addcardform.php:12 templates/part.property.php:3
-msgid "Name"
+#: appinfo/app.php:21 templates/settings.php:3
+msgid "Contacts"
msgstr ""
-#: templates/part.addcardform.php:14
-msgid "Create Contact"
+#: lib/app.php:42
+msgid "This is not your addressbook."
+msgstr ""
+
+#: lib/app.php:51 photo.php:34
+msgid "Contact could not be found."
+msgstr ""
+
+#: lib/app.php:79
+msgid "Information about vCard is incorrect. Please reload the page."
msgstr ""
-#: templates/part.addpropertyform.php:4 templates/part.property.php:40
+#: lib/app.php:91 templates/part.addcardform.php:54
+#: templates/part.property.php:45 templates/part.setpropertyform.php:7
msgid "Address"
msgstr ""
-#: templates/part.addpropertyform.php:5
+#: lib/app.php:92 templates/part.addcardform.php:43
msgid "Telephone"
msgstr ""
-#: templates/part.addpropertyform.php:6 templates/part.property.php:22
+#: lib/app.php:93 templates/part.addcardform.php:37
+#: templates/part.property.php:16 templates/part.setpropertyform.php:51
msgid "Email"
msgstr ""
-#: templates/part.addpropertyform.php:7 templates/part.property.php:15
+#: lib/app.php:94 templates/part.addcardform.php:27
+#: templates/part.property.php:9 templates/part.setpropertyform.php:54
msgid "Organization"
msgstr ""
-#: templates/part.addpropertyform.php:17 templates/part.addpropertyform.php:32
+#: lib/app.php:106 lib/app.php:113
msgid "Work"
msgstr ""
-#: templates/part.addpropertyform.php:18 templates/part.addpropertyform.php:30
+#: lib/app.php:107 lib/app.php:111
msgid "Home"
msgstr ""
-#: templates/part.addpropertyform.php:20 templates/part.property.php:48
-#: templates/part.setpropertyform.php:5
+#: lib/app.php:112
+msgid "Mobile"
+msgstr ""
+
+#: lib/app.php:114
+msgid "Text"
+msgstr ""
+
+#: lib/app.php:115
+msgid "Voice"
+msgstr ""
+
+#: lib/app.php:116
+msgid "Fax"
+msgstr ""
+
+#: lib/app.php:117
+msgid "Video"
+msgstr ""
+
+#: lib/app.php:118
+msgid "Pager"
+msgstr ""
+
+#: lib/search.php:22
+msgid "Contact"
+msgstr ""
+
+#: photo.php:40
+msgid "This is not your contact."
+msgstr ""
+
+#: photo.php:48
+msgid "This card is not RFC compatible."
+msgstr ""
+
+#: photo.php:85
+msgid "This card does not contain a photo."
+msgstr ""
+
+#: templates/index.php:6
+msgid "Add Contact"
+msgstr ""
+
+#: templates/index.php:7
+msgid "Addressbooks"
+msgstr ""
+
+#: templates/part.addcardform.php:8
+msgid "Addressbook"
+msgstr ""
+
+#: templates/part.addcardform.php:21
+msgid "Name"
+msgstr ""
+
+#: templates/part.addcardform.php:57 templates/part.details.php:43
+#: templates/part.details.php:79 templates/part.setpropertyform.php:10
+#: templates/part.setpropertyform.php:47
+msgid "Type"
+msgstr ""
+
+#: templates/part.addcardform.php:65 templates/part.details.php:49
+#: templates/part.setpropertyform.php:16
msgid "PO Box"
msgstr ""
-#: templates/part.addpropertyform.php:21 templates/part.property.php:51
-#: templates/part.setpropertyform.php:6
+#: templates/part.addcardform.php:72 templates/part.details.php:53
+#: templates/part.setpropertyform.php:20
msgid "Extended"
msgstr ""
-#: templates/part.addpropertyform.php:22 templates/part.property.php:54
-#: templates/part.setpropertyform.php:7
+#: templates/part.addcardform.php:78 templates/part.details.php:57
+#: templates/part.setpropertyform.php:24
msgid "Street"
msgstr ""
-#: templates/part.addpropertyform.php:23 templates/part.property.php:57
-#: templates/part.setpropertyform.php:8
+#: templates/part.addcardform.php:84 templates/part.details.php:61
+#: templates/part.setpropertyform.php:28
msgid "City"
msgstr ""
-#: templates/part.addpropertyform.php:24 templates/part.property.php:60
-#: templates/part.setpropertyform.php:9
+#: templates/part.addcardform.php:90 templates/part.details.php:65
+#: templates/part.setpropertyform.php:32
msgid "Region"
msgstr ""
-#: templates/part.addpropertyform.php:25 templates/part.property.php:63
-#: templates/part.setpropertyform.php:10
+#: templates/part.addcardform.php:96 templates/part.details.php:69
+#: templates/part.setpropertyform.php:36
msgid "Zipcode"
msgstr ""
-#: templates/part.addpropertyform.php:26 templates/part.property.php:66
-#: templates/part.setpropertyform.php:11
+#: templates/part.addcardform.php:102 templates/part.details.php:73
+#: templates/part.setpropertyform.php:40
msgid "Country"
msgstr ""
-#: templates/part.addpropertyform.php:31
-msgid "Mobile"
+#: templates/part.addcardform.php:109
+msgid "Create Contact"
msgstr ""
-#: templates/part.addpropertyform.php:33
-msgid "Text"
+#: templates/part.chooseaddressbook.php:1
+msgid "Choose active Address Books"
msgstr ""
-#: templates/part.addpropertyform.php:34
-msgid "Voice"
+#: templates/part.chooseaddressbook.php:16
+msgid "New Address Book"
msgstr ""
-#: templates/part.addpropertyform.php:35
-msgid "Fax"
+#: templates/part.chooseaddressbook.php:21
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "CardDav Link"
msgstr ""
-#: templates/part.addpropertyform.php:36
-msgid "Video"
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Download"
msgstr ""
-#: templates/part.addpropertyform.php:37
-msgid "Pager"
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Edit"
msgstr ""
-#: templates/part.details.php:33
+#: templates/part.chooseaddressbook.rowfields.php:5
msgid "Delete"
msgstr ""
+#: templates/part.details.php:3
+msgid "Download contact"
+msgstr ""
+
+#: templates/part.details.php:4
+msgid "Delete contact"
+msgstr ""
+
#: templates/part.details.php:34
-msgid "Add Property"
+msgid "Add"
+msgstr ""
+
+#: templates/part.editaddressbook.php:9
+msgid "New Addressbook"
+msgstr ""
+
+#: templates/part.editaddressbook.php:9
+msgid "Edit Addressbook"
+msgstr ""
+
+#: templates/part.editaddressbook.php:12
+msgid "Displayname"
+msgstr ""
+
+#: templates/part.editaddressbook.php:23
+msgid "Active"
msgstr ""
-#: templates/part.property.php:9
+#: templates/part.editaddressbook.php:29
+msgid "Save"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Submit"
+msgstr ""
+
+#: templates/part.editaddressbook.php:30
+msgid "Cancel"
+msgstr ""
+
+#: templates/part.property.php:3
msgid "Birthday"
msgstr ""
-#: templates/part.property.php:29
+#: templates/part.property.php:23
+msgid "Preferred"
+msgstr ""
+
+#: templates/part.property.php:23 templates/part.setpropertyform.php:45
msgid "Phone"
msgstr ""
-#: templates/part.setpropertyform.php:17
-msgid "Edit"
+#: templates/part.setpropertyform.php:57
+msgid "Update"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "CardDAV syncing address:"
msgstr ""
diff --git a/l10n/id/core.po b/l10n/id/core.po
index d19793d98a1..b2751d7daa3 100644
--- a/l10n/id/core.po
+++ b/l10n/id/core.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 18:17+0200\n"
-"PO-Revision-Date: 2011-09-05 01:19+0000\n"
-"Last-Translator: radifar <m_radifar05@yahoo.com>\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Indonesian (http://www.transifex.net/projects/p/owncloud/team/id/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,6 +18,51 @@ msgstr ""
"Language: id\n"
"Plural-Forms: nplurals=1; plural=0\n"
+#: lostpassword/index.php:24
+msgid "Owncloud password reset"
+msgstr ""
+
+#: lostpassword/templates/email.php:1
+msgid "Use the following link to reset your password: {link}"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Requested"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:22
+#: templates/login.php:8
+msgid "Username"
+msgstr "Username"
+
+#: lostpassword/templates/lostpassword.php:14
+msgid "Request reset"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr ""
+
#: strings.php:5
msgid "Personal"
msgstr "Pribadi"
@@ -46,54 +91,50 @@ msgstr "Cloud tidak ditemukan"
msgid "Create an <strong>admin account</strong>"
msgstr "Buat sebuah <strong>akun admin</strong>"
-#: templates/installation.php:21
-msgid "Username"
-msgstr "Username"
-
-#: templates/installation.php:22
+#: templates/installation.php:26 templates/login.php:12
msgid "Password"
msgstr "Password"
-#: templates/installation.php:27
+#: templates/installation.php:32
+msgid "Advanced"
+msgstr "Tingkat Lanjut"
+
+#: templates/installation.php:34
+msgid "Data folder"
+msgstr "Folder data"
+
+#: templates/installation.php:41
msgid "Configure the database"
msgstr "Konfigurasi database"
-#: templates/installation.php:32 templates/installation.php:43
-#: templates/installation.php:53
+#: templates/installation.php:46 templates/installation.php:57
+#: templates/installation.php:67
msgid "will be used"
msgstr "akan digunakan"
-#: templates/installation.php:64
+#: templates/installation.php:79
msgid "Database user"
msgstr "Pengguna database"
-#: templates/installation.php:65
+#: templates/installation.php:83
msgid "Database password"
msgstr "Password database"
-#: templates/installation.php:66
+#: templates/installation.php:87
msgid "Database name"
msgstr "Nama database"
-#: templates/installation.php:72
-msgid "Advanced"
-msgstr "Tingkat Lanjut"
-
-#: templates/installation.php:75
+#: templates/installation.php:93
msgid "Database host"
msgstr "Host database"
-#: templates/installation.php:76
-msgid "Data folder"
-msgstr "Folder data"
-
-#: templates/installation.php:79
+#: templates/installation.php:98
msgid "Finish setup"
msgstr "Selesaikan instalasi"
#: templates/layout.guest.php:35
-msgid "gives you freedom and control over your own data"
-msgstr "memberikan anda kebebasan dan kendali atas data anda sendiri"
+msgid "web services under your control"
+msgstr ""
#: templates/layout.user.php:34
msgid "Log out"
@@ -103,38 +144,22 @@ msgstr "Keluar"
msgid "Settings"
msgstr "Setelan"
-#: templates/login.php:4
+#: templates/login.php:5
msgid "Lost your password?"
msgstr "Lupa password anda?"
-#: templates/login.php:9 templates/login.php:13
+#: templates/login.php:15
msgid "remember"
msgstr "selalu login"
+#: templates/login.php:16
+msgid "Log in"
+msgstr ""
+
#: templates/logout.php:1
msgid "You are logged out."
msgstr "Anda telah keluar."
-#: templates/lostpassword.php:3
-msgid "You will receive a link to reset your password via Email."
-msgstr "Anda akan menerima tautan untuk menset ulang password anda via Email."
-
-#: templates/lostpassword.php:5
-msgid "Requested"
-msgstr "Telah diminta"
-
-#: templates/lostpassword.php:8
-msgid "Login failed!"
-msgstr "Gagal masuk!"
-
-#: templates/lostpassword.php:10
-msgid "Username or Email"
-msgstr "Nama Pengguna atau Email"
-
-#: templates/lostpassword.php:11
-msgid "Request reset"
-msgstr "Meminta set ulang"
-
#: templates/part.pagenavi.php:3
msgid "prev"
msgstr "sebelum"
@@ -143,16 +168,4 @@ msgstr "sebelum"
msgid "next"
msgstr "selanjutnya"
-#: templates/resetpassword.php:4
-msgid "Your password was reset"
-msgstr "Password anda telah diset ulang"
-
-#: templates/resetpassword.php:6
-msgid "New password"
-msgstr "Password Baru"
-
-#: templates/resetpassword.php:7
-msgid "Reset password"
-msgstr "Set Ulang Password"
-
diff --git a/l10n/id/files.po b/l10n/id/files.po
index 8b116d05259..7a7d4ce4b33 100644
--- a/l10n/id/files.po
+++ b/l10n/id/files.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Indonesian (http://www.transifex.net/projects/p/owncloud/team/id/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,33 +18,33 @@ msgstr ""
"Language: id\n"
"Plural-Forms: nplurals=1; plural=0\n"
-#: ajax/upload.php:24
+#: ajax/upload.php:19
msgid "There is no error, the file uploaded with success"
msgstr ""
-#: ajax/upload.php:25
+#: ajax/upload.php:20
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr ""
-#: ajax/upload.php:26
+#: ajax/upload.php:21
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
-#: ajax/upload.php:27
+#: ajax/upload.php:22
msgid "The uploaded file was only partially uploaded"
msgstr ""
-#: ajax/upload.php:28
+#: ajax/upload.php:23
msgid "No file was uploaded"
msgstr ""
-#: ajax/upload.php:29
+#: ajax/upload.php:24
msgid "Missing a temporary folder"
msgstr ""
-#: appinfo/app.php:7
+#: appinfo/app.php:8
msgid "Files"
msgstr "Berkas"
@@ -52,43 +52,55 @@ msgstr "Berkas"
msgid "Maximum upload size"
msgstr "Ukuran unggah maksimum"
+#: templates/index.php:7
+msgid "New"
+msgstr ""
+
#: templates/index.php:10
+msgid "Text file"
+msgstr ""
+
+#: templates/index.php:11
+msgid "Folder"
+msgstr ""
+
+#: templates/index.php:12
+msgid "From the web"
+msgstr ""
+
+#: templates/index.php:22
msgid "Upload"
msgstr "Unggah"
-#: templates/index.php:17
-msgid "New Folder"
-msgstr "Folder Baru"
-
-#: templates/index.php:31
+#: templates/index.php:35
msgid "Nothing in here. Upload something!"
msgstr "Tidak ada apa-apa di sini. Unggah sesuatu!"
-#: templates/index.php:39
+#: templates/index.php:43
msgid "Name"
msgstr "Nama"
-#: templates/index.php:41
+#: templates/index.php:45
msgid "Download"
msgstr "Unduh"
-#: templates/index.php:45
+#: templates/index.php:49
msgid "Size"
msgstr "Ukuran"
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Modified"
msgstr "Dimodifikasi"
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Delete"
msgstr "Hapus"
-#: templates/index.php:54
+#: templates/index.php:58
msgid "Upload too large"
msgstr "Unggahan terlalu besar"
-#: templates/index.php:56
+#: templates/index.php:60
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
diff --git a/l10n/id/gallery.po b/l10n/id/gallery.po
new file mode 100644
index 00000000000..058bc22ba9b
--- /dev/null
+++ b/l10n/id/gallery.po
@@ -0,0 +1,32 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:48+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Indonesian (http://www.transifex.net/projects/p/owncloud/team/id/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: id\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: appinfo/app.php:41
+msgid "Gallery"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Rescan"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+
diff --git a/l10n/id/media.po b/l10n/id/media.po
index 5e833cc559b..16f3ae710a1 100644
--- a/l10n/id/media.po
+++ b/l10n/id/media.po
@@ -2,14 +2,15 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
+# Translators:
# Muhammad Radifar <m_radifar05@yahoo.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
-"Report-Msgid-Bugs-To: http://bugs.kde.org/buglist.cgi?product=owncloud\n"
-"POT-Creation-Date: 2011-08-20 05:08+0200\n"
-"PO-Revision-Date: 2011-08-20 03:08+0000\n"
-"Last-Translator: JanCBorchardt <JanCBorchardt@fsfe.org>\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Indonesian (http://www.transifex.net/projects/p/owncloud/team/id/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,39 +18,35 @@ msgstr ""
"Language: id\n"
"Plural-Forms: nplurals=1; plural=0\n"
-#: appinfo/app.php:31
+#: appinfo/app.php:32
msgid "Music"
msgstr "Musik"
-#: templates/music.php:3
+#: templates/music.php:3 templates/player.php:13
msgid "Play"
-msgstr ""
+msgstr "Mainkan"
-#: templates/music.php:4 templates/music.php:30
+#: templates/music.php:4 templates/music.php:26 templates/player.php:14
msgid "Pause"
msgstr "Jeda"
#: templates/music.php:5
msgid "Previous"
-msgstr ""
+msgstr "Sebelumnya"
-#: templates/music.php:6
+#: templates/music.php:6 templates/player.php:15
msgid "Next"
-msgstr ""
+msgstr "Selanjutnya"
#: templates/music.php:7
msgid "Mute"
-msgstr ""
+msgstr "Nonaktifkan suara"
#: templates/music.php:8
msgid "Unmute"
-msgstr ""
-
-#: templates/music.php:28
-msgid "Songs scanned"
-msgstr "Lagu-lagu yang telah dipindai"
+msgstr "Aktifkan suara"
-#: templates/music.php:29
+#: templates/music.php:25
msgid "Rescan Collection"
msgstr "Pindai ulang Koleksi"
diff --git a/l10n/id/settings.po b/l10n/id/settings.po
index 890bf7b34af..19c8fb9ec9c 100644
--- a/l10n/id/settings.po
+++ b/l10n/id/settings.po
@@ -2,14 +2,15 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
+# Translators:
# Muhammad Radifar <m_radifar05@yahoo.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
-"Report-Msgid-Bugs-To: http://bugs.kde.org/buglist.cgi?product=owncloud\n"
-"POT-Creation-Date: 2011-08-28 01:11+0200\n"
-"PO-Revision-Date: 2011-08-23 09:45+0000\n"
-"Last-Translator: radifar <m_radifar05@yahoo.com>\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Indonesian (http://www.transifex.net/projects/p/owncloud/team/id/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,22 +18,26 @@ msgstr ""
"Language: id\n"
"Plural-Forms: nplurals=1; plural=0\n"
-#: ajax/openid.php:13 ajax/setlanguage.php:13
-msgid "Authentication error"
-msgstr "Otentikasi bermasalah"
-
-#: ajax/openid.php:21
-msgid "OpenID Changed"
-msgstr "OpenID telah dirubah"
+#: ajax/lostpassword.php:14
+msgid "email Changed"
+msgstr ""
-#: ajax/openid.php:23 ajax/setlanguage.php:23
+#: ajax/lostpassword.php:16 ajax/openid.php:17 ajax/setlanguage.php:16
msgid "Invalid request"
msgstr "Permintaan tidak valid"
-#: ajax/setlanguage.php:21
+#: ajax/openid.php:15
+msgid "OpenID Changed"
+msgstr "OpenID telah dirubah"
+
+#: ajax/setlanguage.php:14
msgid "Language changed"
msgstr "Bahasa telah diganti"
+#: templates/admin.php:13
+msgid "Log level"
+msgstr ""
+
#: templates/apps.php:8
msgid "Add your application"
msgstr "Tambahkan aplikasi anda"
@@ -53,15 +58,15 @@ msgstr "oleh"
msgid "Ask a question"
msgstr "Ajukan pertanyaan"
-#: templates/help.php:17
+#: templates/help.php:20
msgid "Problems connecting to help database."
msgstr "Bermasalah saat menghubungi database bantuan."
-#: templates/help.php:18
+#: templates/help.php:21
msgid "Go there manually."
msgstr "Pergi kesana secara manual."
-#: templates/help.php:26
+#: templates/help.php:29
msgid "Answer"
msgstr "Jawab"
@@ -77,6 +82,10 @@ msgstr "dari yang tersedia"
msgid "Your password got changed"
msgstr "Password anda telah dirubah"
+#: templates/personal.php:14
+msgid "Unable to change your password"
+msgstr "Tidak dapat merubah password anda"
+
#: templates/personal.php:15
msgid "Current password"
msgstr "Password saat ini"
@@ -94,36 +103,52 @@ msgid "Change password"
msgstr "Rubah password"
#: templates/personal.php:24
+msgid "Email"
+msgstr ""
+
+#: templates/personal.php:25
+msgid "Your email address"
+msgstr ""
+
+#: templates/personal.php:26
+msgid "Fill in an email address to enable password recovery"
+msgstr ""
+
+#: templates/personal.php:32 templates/personal.php:33
msgid "Language"
msgstr "Bahasa"
-#: templates/personal.php:30
-msgid "Help translating"
-msgstr "Bantu terjemahkan"
+#: templates/personal.php:38
+msgid "Help translate"
+msgstr ""
-#: templates/personal.php:36
+#: templates/personal.php:45
msgid "use this address to connect to your ownCloud in your file manager"
msgstr ""
"gunakan alamat ini untuk terhubung dengan ownCloud anda dalam file manager "
"anda"
-#: templates/users.php:16
+#: templates/users.php:15 templates/users.php:30
msgid "Name"
msgstr "Nama"
-#: templates/users.php:17
+#: templates/users.php:16 templates/users.php:31
msgid "Password"
msgstr "Password"
-#: templates/users.php:18 templates/users.php:36
+#: templates/users.php:17 templates/users.php:32 templates/users.php:46
msgid "Groups"
msgstr "Group"
-#: templates/users.php:24
+#: templates/users.php:23
msgid "Create"
msgstr "Buat"
-#: templates/users.php:48
+#: templates/users.php:33
+msgid "Quota"
+msgstr ""
+
+#: templates/users.php:58
msgid "Delete"
msgstr "Hapus"
diff --git a/l10n/it/calendar.po b/l10n/it/calendar.po
index fab6060c487..cd96af7425d 100644
--- a/l10n/it/calendar.po
+++ b/l10n/it/calendar.po
@@ -3,16 +3,19 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Andrea Scarpino <andrea@archlinux.org>, 2011.
# <cosenal@gmail.com>, 2011.
# Francesco Apruzzese <cescoap@gmail.com>, 2011.
+# Lorenzo Beltrami <lorenzo.beba@gmail.com>, 2011.
+# <marco@carnazzo.it>, 2011, 2012.
# <rb.colombo@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Italian (http://www.transifex.net/projects/p/owncloud/team/it/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -20,321 +23,403 @@ msgstr ""
"Language: it\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/createcalendar.php:18 ajax/settimezone.php:19
-#: ajax/updatecalendar.php:18
-msgid "Authentication error"
-msgstr "Errore di autenticazione"
+#: ajax/guesstimezone.php:42
+msgid "New Timezone:"
+msgstr "Nuovo fuso orario:"
-#: ajax/editeventform.php:25
-msgid "Wrong calendar"
-msgstr "Calendario sbagliato"
-
-#: ajax/settimezone.php:27
+#: ajax/settimezone.php:22
msgid "Timezone changed"
msgstr "Fuso orario cambiato"
-#: ajax/settimezone.php:29
+#: ajax/settimezone.php:24
msgid "Invalid request"
-msgstr "Richiesta non validia"
+msgstr "Richiesta non valida"
-#: appinfo/app.php:19 templates/part.eventform.php:27
-#: templates/part.eventinfo.php:18
+#: appinfo/app.php:20 templates/calendar.php:13
+#: templates/part.eventform.php:20
msgid "Calendar"
msgstr "Calendario"
-#: lib/object.php:292
+#: lib/app.php:19
+msgid "Wrong calendar"
+msgstr "Calendario sbagliato"
+
+#: lib/app.php:60 lib/object.php:332
msgid "Birthday"
msgstr "Compleanno"
-#: lib/object.php:293
+#: lib/app.php:61 lib/object.php:333
msgid "Business"
msgstr "Azienda"
-#: lib/object.php:294
+#: lib/app.php:62 lib/object.php:334
msgid "Call"
msgstr "Chiama"
-#: lib/object.php:295
+#: lib/app.php:63 lib/object.php:335
msgid "Clients"
msgstr "Clienti"
-#: lib/object.php:296
+#: lib/app.php:64 lib/object.php:336
msgid "Deliverer"
msgstr "Consegna"
-#: lib/object.php:297
+#: lib/app.php:65 lib/object.php:337
msgid "Holidays"
msgstr "Vacanze"
-#: lib/object.php:298
+#: lib/app.php:66 lib/object.php:338
msgid "Ideas"
msgstr "Idee"
-#: lib/object.php:299
+#: lib/app.php:67 lib/object.php:339
msgid "Journey"
msgstr "Viaggio"
-#: lib/object.php:300
+#: lib/app.php:68 lib/object.php:340
msgid "Jubilee"
msgstr "Anniversario"
-#: lib/object.php:301
+#: lib/app.php:69 lib/object.php:341
msgid "Meeting"
msgstr "Riunione"
-#: lib/object.php:302
+#: lib/app.php:70 lib/object.php:342
msgid "Other"
msgstr "Altro"
-#: lib/object.php:303
+#: lib/app.php:71 lib/object.php:343
msgid "Personal"
msgstr "Personale"
-#: lib/object.php:304
+#: lib/app.php:72 lib/object.php:344
msgid "Projects"
msgstr "Progetti"
-#: lib/object.php:305
+#: lib/app.php:73 lib/object.php:345
msgid "Questions"
msgstr "Domande"
-#: lib/object.php:306
+#: lib/app.php:74 lib/object.php:346
msgid "Work"
msgstr "Lavoro"
-#: lib/object.php:313
+#: lib/object.php:353
msgid "Does not repeat"
msgstr "Non ripetere"
-#: lib/object.php:314
+#: lib/object.php:354
msgid "Daily"
msgstr "Giornaliero"
-#: lib/object.php:315
+#: lib/object.php:355
msgid "Weekly"
msgstr "Settimanale"
-#: lib/object.php:316
+#: lib/object.php:356
msgid "Every Weekday"
msgstr "Ogni settimana"
-#: lib/object.php:317
+#: lib/object.php:357
msgid "Bi-Weekly"
msgstr "Ogni due settimane"
-#: lib/object.php:318
+#: lib/object.php:358
msgid "Monthly"
msgstr "Mensile"
-#: lib/object.php:319
+#: lib/object.php:359
msgid "Yearly"
msgstr "Annuale"
-#: lib/object.php:337
-msgid "Not an array"
-msgstr "Non è un array"
+#: lib/object.php:366
+msgid "never"
+msgstr "mai"
-#: templates/calendar.php:3
-msgid "All day"
-msgstr "Tutti i giorni"
+#: lib/object.php:367
+msgid "by occurrences"
+msgstr "per occorrenze"
-#: templates/calendar.php:32
-msgid "Sunday"
-msgstr "Domenica"
+#: lib/object.php:368
+msgid "by date"
+msgstr "per data"
+
+#: lib/object.php:375
+msgid "by monthday"
+msgstr "per giorno del mese"
+
+#: lib/object.php:376
+msgid "by weekday"
+msgstr "per giorno della settimana"
-#: templates/calendar.php:32
+#: lib/object.php:383 templates/lAfix.php:3
msgid "Monday"
msgstr "Lunedì"
-#: templates/calendar.php:32
+#: lib/object.php:384 templates/lAfix.php:4
msgid "Tuesday"
msgstr "Martedì"
-#: templates/calendar.php:32
+#: lib/object.php:385 templates/lAfix.php:5
msgid "Wednesday"
msgstr "Mercoledì"
-#: templates/calendar.php:32
+#: lib/object.php:386 templates/lAfix.php:6
msgid "Thursday"
msgstr "Giovedì"
-#: templates/calendar.php:32
+#: lib/object.php:387 templates/lAfix.php:7
msgid "Friday"
msgstr "Venerdì"
-#: templates/calendar.php:32
+#: lib/object.php:388 templates/lAfix.php:8
msgid "Saturday"
msgstr "Sabato"
-#: templates/calendar.php:33
-msgid "Sun."
-msgstr "Dom."
+#: lib/object.php:389 templates/lAfix.php:2
+msgid "Sunday"
+msgstr "Domenica"
-#: templates/calendar.php:33
-msgid "Mon."
-msgstr "Lun."
+#: lib/object.php:396
+msgid "events week of month"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Tue."
-msgstr "Mar."
+#: lib/object.php:397
+msgid "first"
+msgstr "primo"
-#: templates/calendar.php:33
-msgid "Wed."
-msgstr "Mer."
+#: lib/object.php:398
+msgid "second"
+msgstr "secondo"
-#: templates/calendar.php:33
-msgid "Thu."
-msgstr "Gio."
+#: lib/object.php:399
+msgid "third"
+msgstr "terzo"
-#: templates/calendar.php:33
-msgid "Fri."
-msgstr "Ven."
+#: lib/object.php:400
+msgid "fourth"
+msgstr "quarto"
-#: templates/calendar.php:33
-msgid "Sat."
-msgstr "Sab."
+#: lib/object.php:401
+msgid "fifth"
+msgstr "quinto"
+
+#: lib/object.php:402
+msgid "last"
+msgstr "ultimo"
-#: templates/calendar.php:34
+#: lib/object.php:424 templates/lAfix.php:16
msgid "January"
msgstr "Gennaio"
-#: templates/calendar.php:34
+#: lib/object.php:425 templates/lAfix.php:17
msgid "February"
msgstr "Febbraio"
-#: templates/calendar.php:34
+#: lib/object.php:426 templates/lAfix.php:18
msgid "March"
msgstr "Marzo"
-#: templates/calendar.php:34
+#: lib/object.php:427 templates/lAfix.php:19
msgid "April"
msgstr "Aprile"
-#: templates/calendar.php:34
+#: lib/object.php:428 templates/lAfix.php:20
msgid "May"
msgstr "Maggio"
-#: templates/calendar.php:34
+#: lib/object.php:429 templates/lAfix.php:21
msgid "June"
msgstr "Giugno"
-#: templates/calendar.php:34
+#: lib/object.php:430 templates/lAfix.php:22
msgid "July"
msgstr "Luglio"
-#: templates/calendar.php:34
+#: lib/object.php:431 templates/lAfix.php:23
msgid "August"
msgstr "Agosto"
-#: templates/calendar.php:34
+#: lib/object.php:432 templates/lAfix.php:24
msgid "September"
msgstr "Settembre"
-#: templates/calendar.php:34
+#: lib/object.php:433 templates/lAfix.php:25
msgid "October"
msgstr "Ottobre"
-#: templates/calendar.php:34
+#: lib/object.php:434 templates/lAfix.php:26
msgid "November"
msgstr "Novembre"
-#: templates/calendar.php:34
+#: lib/object.php:435 templates/lAfix.php:27
msgid "December"
msgstr "Dicembre"
-#: templates/calendar.php:35
-msgid "Jan."
-msgstr "Gen."
-
-#: templates/calendar.php:35
-msgid "Feb."
-msgstr "Feb."
+#: lib/object.php:441
+msgid "by events date"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Mar."
-msgstr "Mar."
+#: lib/object.php:442
+msgid "by yearday(s)"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Apr."
-msgstr "Apr."
+#: lib/object.php:443
+msgid "by weeknumber(s)"
+msgstr ""
-#: templates/calendar.php:35
-msgid "May."
-msgstr "Maggio."
+#: lib/object.php:444
+msgid "by day and month"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Jun."
-msgstr "Giu."
+#: lib/object.php:467
+msgid "Not an array"
+msgstr "Non è un array"
-#: templates/calendar.php:35
-msgid "Jul."
-msgstr "Lug."
+#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+msgid "Date"
+msgstr "Data"
-#: templates/calendar.php:35
-msgid "Aug."
-msgstr "Ago."
+#: lib/search.php:40
+msgid "Cal."
+msgstr "Cal."
-#: templates/calendar.php:35
-msgid "Sep."
-msgstr "Set."
+#: templates/calendar.php:10
+msgid "All day"
+msgstr "Tutti i giorni"
-#: templates/calendar.php:35
-msgid "Oct."
-msgstr "Ott."
+#: templates/calendar.php:11
+msgid "Missing fields"
+msgstr "Campi mancanti"
-#: templates/calendar.php:35
-msgid "Nov."
-msgstr "Nov."
+#: templates/calendar.php:12 templates/part.eventform.php:3
+msgid "Title"
+msgstr "Titolo"
-#: templates/calendar.php:35
-msgid "Dec."
-msgstr "Dic."
+#: templates/calendar.php:14
+msgid "From Date"
+msgstr "Dal giorno"
-#: templates/calendar.php:36 templates/calendar.php:50
-#: templates/calendar.php:116
-msgid "Week"
-msgstr "Settimana"
+#: templates/calendar.php:15
+msgid "From Time"
+msgstr "Ora inizio"
-#: templates/calendar.php:37 templates/calendar.php:51
-msgid "Weeks"
-msgstr "Settimane"
+#: templates/calendar.php:16
+msgid "To Date"
+msgstr "al giorno"
-#: templates/calendar.php:38
-msgid "More before {startdate}"
-msgstr "Prima di {startdate}"
+#: templates/calendar.php:17
+msgid "To Time"
+msgstr "Ora fine"
-#: templates/calendar.php:39
-msgid "More after {enddate}"
-msgstr "Dopo {enddate}"
+#: templates/calendar.php:18
+msgid "The event ends before it starts"
+msgstr "L'evento finisce prima d'iniziare"
-#: templates/calendar.php:49
-msgid "Day"
-msgstr "Giorno"
+#: templates/calendar.php:19
+msgid "There was a database fail"
+msgstr "C'è stato un errore col database"
#: templates/calendar.php:52
+msgid "Week"
+msgstr "Settimana"
+
+#: templates/calendar.php:53
msgid "Month"
msgstr "Mese"
-#: templates/calendar.php:53
+#: templates/calendar.php:54
msgid "List"
msgstr "Lista"
-#: templates/calendar.php:58
+#: templates/calendar.php:59
msgid "Today"
msgstr "Oggi"
-#: templates/calendar.php:59
+#: templates/calendar.php:60
msgid "Calendars"
msgstr "Calendari"
-#: templates/calendar.php:76 templates/calendar.php:94
-msgid "Time"
-msgstr "Ora"
-
-#: templates/calendar.php:169
+#: templates/calendar.php:78
msgid "There was a fail, while parsing the file."
msgstr "C'è stato un errore nel parsing del file."
+#: templates/lAfix.php:9
+msgid "Sun."
+msgstr ""
+
+#: templates/lAfix.php:10
+msgid "Mon."
+msgstr ""
+
+#: templates/lAfix.php:11
+msgid "Tue."
+msgstr ""
+
+#: templates/lAfix.php:12
+msgid "Wed."
+msgstr ""
+
+#: templates/lAfix.php:13
+msgid "Thu."
+msgstr ""
+
+#: templates/lAfix.php:14
+msgid "Fri."
+msgstr ""
+
+#: templates/lAfix.php:15
+msgid "Sat."
+msgstr ""
+
+#: templates/lAfix.php:28
+msgid "Jan."
+msgstr ""
+
+#: templates/lAfix.php:29
+msgid "Feb."
+msgstr ""
+
+#: templates/lAfix.php:30
+msgid "Mar."
+msgstr ""
+
+#: templates/lAfix.php:31
+msgid "Apr."
+msgstr ""
+
+#: templates/lAfix.php:32
+msgid "May."
+msgstr ""
+
+#: templates/lAfix.php:33
+msgid "Jun."
+msgstr ""
+
+#: templates/lAfix.php:34
+msgid "Jul."
+msgstr ""
+
+#: templates/lAfix.php:35
+msgid "Aug."
+msgstr ""
+
+#: templates/lAfix.php:36
+msgid "Sep."
+msgstr ""
+
+#: templates/lAfix.php:37
+msgid "Oct."
+msgstr ""
+
+#: templates/lAfix.php:38
+msgid "Nov."
+msgstr ""
+
+#: templates/lAfix.php:39
+msgid "Dec."
+msgstr ""
+
#: templates/part.choosecalendar.php:1
msgid "Choose active calendars"
msgstr "Selezionare calendari attivi"
@@ -353,14 +438,13 @@ msgid "Download"
msgstr "Download"
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.eventinfo.php:64
msgid "Edit"
msgstr "Modifica"
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.editevent.php:8
+#: templates/part.editevent.php:9
msgid "Delete"
-msgstr ""
+msgstr "Elimina"
#: templates/part.editcalendar.php:9
msgid "New calendar"
@@ -378,90 +462,181 @@ msgstr "Mostra nome"
msgid "Active"
msgstr "Attivo"
-#: templates/part.editcalendar.php:29 templates/part.eventform.php:88
-#: templates/part.eventinfo.php:58
-msgid "Description"
-msgstr "Descrizione"
-
-#: templates/part.editcalendar.php:35
+#: templates/part.editcalendar.php:29
msgid "Calendar color"
msgstr "Colore calendario"
-#: templates/part.editcalendar.php:41
+#: templates/part.editcalendar.php:42
msgid "Save"
msgstr "Salva"
-#: templates/part.editcalendar.php:41 templates/part.editevent.php:7
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
#: templates/part.newevent.php:6
msgid "Submit"
msgstr "Invia"
-#: templates/part.editcalendar.php:42
+#: templates/part.editcalendar.php:43
msgid "Cancel"
msgstr "Annulla"
-#: templates/part.editevent.php:1 templates/part.eventinfo.php:1
+#: templates/part.editevent.php:1
msgid "Edit an event"
msgstr "Modifica evento"
-#: templates/part.eventform.php:3 templates/part.eventinfo.php:4
-msgid "Title"
-msgstr "Titolo"
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr "Esporta"
#: templates/part.eventform.php:5
msgid "Title of the Event"
msgstr "Titolo evento"
-#: templates/part.eventform.php:9 templates/part.eventinfo.php:9
-msgid "Location"
-msgstr "Luogo"
-
#: templates/part.eventform.php:11
-msgid "Location of the Event"
-msgstr "Luogo evento"
-
-#: templates/part.eventform.php:17 templates/part.eventinfo.php:16
msgid "Category"
msgstr "Categoria"
-#: templates/part.eventform.php:19
+#: templates/part.eventform.php:13
msgid "Select category"
msgstr "Seleziona categoria"
-#: templates/part.eventform.php:45 templates/part.eventinfo.php:28
+#: templates/part.eventform.php:37
msgid "All Day Event"
msgstr "Tutti gli eventi del giorno"
-#: templates/part.eventform.php:49 templates/part.eventinfo.php:31
+#: templates/part.eventform.php:41
msgid "From"
msgstr "Da"
-#: templates/part.eventform.php:57 templates/part.eventinfo.php:38
+#: templates/part.eventform.php:49
msgid "To"
msgstr "A"
-#: templates/part.eventform.php:65 templates/part.eventinfo.php:44
+#: templates/part.eventform.php:57
+msgid "Advanced options"
+msgstr "Opzioni avanzate"
+
+#: templates/part.eventform.php:61
msgid "Repeat"
msgstr "Ripeti"
-#: templates/part.eventform.php:81 templates/part.eventinfo.php:51
-msgid "Attendees"
-msgstr "Partecipanti"
+#: templates/part.eventform.php:68
+msgid "Advanced"
+msgstr ""
+
+#: templates/part.eventform.php:112
+msgid "Select weekdays"
+msgstr "Seleziona i giorni della settimana"
+
+#: templates/part.eventform.php:125 templates/part.eventform.php:138
+msgid "Select days"
+msgstr "Seleziona i giorni"
+
+#: templates/part.eventform.php:130
+msgid "and the events day of year."
+msgstr ""
+
+#: templates/part.eventform.php:143
+msgid "and the events day of month."
+msgstr ""
+
+#: templates/part.eventform.php:151
+msgid "Select months"
+msgstr "Seleziona i mesi"
+
+#: templates/part.eventform.php:164
+msgid "Select weeks"
+msgstr "Seleziona le settimane"
+
+#: templates/part.eventform.php:169
+msgid "and the events week of year."
+msgstr ""
+
+#: templates/part.eventform.php:175
+msgid "Interval"
+msgstr "Intervallo"
+
+#: templates/part.eventform.php:181
+msgid "End"
+msgstr "Fine"
+
+#: templates/part.eventform.php:193
+msgid "occurrences"
+msgstr ""
+
+#: templates/part.eventform.php:208
+msgid "Location"
+msgstr "Luogo"
+
+#: templates/part.eventform.php:210
+msgid "Location of the Event"
+msgstr "Luogo evento"
-#: templates/part.eventform.php:89
+#: templates/part.eventform.php:216
+msgid "Description"
+msgstr "Descrizione"
+
+#: templates/part.eventform.php:218
msgid "Description of the Event"
msgstr "Descrizione evento"
-#: templates/part.eventinfo.php:63
-msgid "Close"
-msgstr "Chiuso"
+#: templates/part.import.php:1
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the calendar"
+msgstr "Per favore scegli il calendario"
+
+#: templates/part.import.php:10
+msgid "create a new calendar"
+msgstr ""
+
+#: templates/part.import.php:15
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import"
+msgstr "Importa"
+
+#: templates/part.import.php:20
+msgid "Importing calendar"
+msgstr ""
+
+#: templates/part.import.php:23
+msgid "Calendar imported successfully"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Close Dialog"
+msgstr ""
#: templates/part.newevent.php:1
msgid "Create a new event"
msgstr "Crea evento"
-#: templates/settings.php:11
+#: templates/settings.php:13
msgid "Timezone"
-msgstr "Timezone"
+msgstr "Fuso orario"
+
+#: templates/settings.php:30
+msgid "Check always for changes of the timezone"
+msgstr "Controlla sempre i cambiamenti di fuso orario"
+
+#: templates/settings.php:32
+msgid "Timeformat"
+msgstr "Formato ora"
+
+#: templates/settings.php:34
+msgid "24h"
+msgstr "24h"
+
+#: templates/settings.php:35
+msgid "12h"
+msgstr "12h"
+
+#: templates/settings.php:41
+msgid "Calendar CalDAV syncing address:"
+msgstr "Indirizzo sincronizzazione calendario CalDAV:"
diff --git a/l10n/it/contacts.po b/l10n/it/contacts.po
index 3f8e3bd1696..cee00f2bbdc 100644
--- a/l10n/it/contacts.po
+++ b/l10n/it/contacts.po
@@ -4,13 +4,14 @@
#
# Translators:
# Francesco Apruzzese <cescoap@gmail.com>, 2011.
+# <marco@carnazzo.it>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 20:10+0200\n"
-"PO-Revision-Date: 2011-09-23 18:10+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Italian (http://www.transifex.net/projects/p/owncloud/team/it/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,164 +19,273 @@ msgstr ""
"Language: it\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/addcard.php:31 ajax/addproperty.php:31 ajax/deletebook.php:32
-#: ajax/deletecard.php:32 ajax/deleteproperty.php:34 ajax/getdetails.php:32
-#: ajax/setproperty.php:32 ajax/showaddcard.php:30 ajax/showaddproperty.php:31
-#: ajax/showsetproperty.php:32 photo.php:32
-msgid "You need to log in."
-msgstr "Bisogna effettuare il login."
+#: ajax/activation.php:17 ajax/updateaddressbook.php:26
+msgid "Error (de)activating addressbook."
+msgstr ""
-#: ajax/addcard.php:37
-msgid "This is not your addressbook."
-msgstr "Questa non è la tua rubrica."
+#: ajax/addcard.php:79
+msgid "There was an error adding the contact."
+msgstr ""
-#: ajax/addproperty.php:37 ajax/deletecard.php:39 ajax/deleteproperty.php:41
-#: ajax/getdetails.php:39 ajax/setproperty.php:38 ajax/showaddproperty.php:37
-#: ajax/showsetproperty.php:38 photo.php:39
-msgid "Contact could not be found."
-msgstr "Il contatto non può essere trovato"
+#: ajax/addproperty.php:39
+msgid "Cannot add empty property."
+msgstr ""
-#: ajax/addproperty.php:43 ajax/deletebook.php:38 ajax/deletecard.php:45
-#: ajax/deleteproperty.php:47 ajax/getdetails.php:45 ajax/setproperty.php:44
-#: ajax/showaddproperty.php:43 ajax/showsetproperty.php:44 photo.php:45
-msgid "This is not your contact."
-msgstr "Questo non è un tuo contatto."
+#: ajax/addproperty.php:51
+msgid "At least one of the address fields has to be filled out."
+msgstr ""
-#: ajax/addproperty.php:50 ajax/deleteproperty.php:54 ajax/getdetails.php:52
-#: ajax/setproperty.php:51 ajax/showsetproperty.php:51
-msgid "vCard could not be read."
-msgstr "La vCard non può essere letta"
+#: ajax/addproperty.php:77
+msgid "Error adding contact property."
+msgstr ""
-#: ajax/deleteproperty.php:65 ajax/setproperty.php:62
-#: ajax/showsetproperty.php:62
-msgid "Information about vCard is incorrect. Please reload the page."
-msgstr "Informazioni sulla vCard incorrette. Ricaricare la pagina."
+#: ajax/createaddressbook.php:20
+msgid "Error adding addressbook."
+msgstr ""
-#: photo.php:53
-msgid "This card is not RFC compatible."
-msgstr "Questa card non è compatibile con il protocollo RFC."
+#: ajax/createaddressbook.php:26
+msgid "Error activating addressbook."
+msgstr ""
-#: photo.php:90
-msgid "This card does not contain a photo."
-msgstr "Questa card non contiene una foto."
+#: ajax/deleteproperty.php:40
+msgid "Error deleting contact property."
+msgstr ""
-#: templates/index.php:8
-msgid "Add Contact"
-msgstr "Aggiungi contatto"
+#: ajax/setproperty.php:79
+msgid "Error updating contact property."
+msgstr ""
-#: templates/part.addcardform.php:5
-msgid "Group"
-msgstr "Gruppo"
+#: ajax/updateaddressbook.php:20
+msgid "Error updating addressbook."
+msgstr ""
-#: templates/part.addcardform.php:12 templates/part.property.php:3
-msgid "Name"
-msgstr "Nome"
+#: appinfo/app.php:21 templates/settings.php:3
+msgid "Contacts"
+msgstr ""
-#: templates/part.addcardform.php:14
-msgid "Create Contact"
-msgstr "Crea contatto"
+#: lib/app.php:42
+msgid "This is not your addressbook."
+msgstr "Questa non è la tua rubrica."
+
+#: lib/app.php:51 photo.php:34
+msgid "Contact could not be found."
+msgstr "Il contatto non può essere trovato"
-#: templates/part.addpropertyform.php:4 templates/part.property.php:40
+#: lib/app.php:79
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "Informazioni sulla vCard incorrette. Ricaricare la pagina."
+
+#: lib/app.php:91 templates/part.addcardform.php:54
+#: templates/part.property.php:45 templates/part.setpropertyform.php:7
msgid "Address"
msgstr "Indirizzo"
-#: templates/part.addpropertyform.php:5
+#: lib/app.php:92 templates/part.addcardform.php:43
msgid "Telephone"
msgstr "Telefono"
-#: templates/part.addpropertyform.php:6 templates/part.property.php:22
+#: lib/app.php:93 templates/part.addcardform.php:37
+#: templates/part.property.php:16 templates/part.setpropertyform.php:51
msgid "Email"
msgstr "Email"
-#: templates/part.addpropertyform.php:7 templates/part.property.php:15
+#: lib/app.php:94 templates/part.addcardform.php:27
+#: templates/part.property.php:9 templates/part.setpropertyform.php:54
msgid "Organization"
msgstr "Organizzazione"
-#: templates/part.addpropertyform.php:17 templates/part.addpropertyform.php:32
+#: lib/app.php:106 lib/app.php:113
msgid "Work"
msgstr "Lavoro"
-#: templates/part.addpropertyform.php:18 templates/part.addpropertyform.php:30
+#: lib/app.php:107 lib/app.php:111
msgid "Home"
msgstr "Casa"
-#: templates/part.addpropertyform.php:20 templates/part.property.php:48
-#: templates/part.setpropertyform.php:5
+#: lib/app.php:112
+msgid "Mobile"
+msgstr "Cellulare"
+
+#: lib/app.php:114
+msgid "Text"
+msgstr "Testo"
+
+#: lib/app.php:115
+msgid "Voice"
+msgstr "Voce"
+
+#: lib/app.php:116
+msgid "Fax"
+msgstr "Fax"
+
+#: lib/app.php:117
+msgid "Video"
+msgstr "Video"
+
+#: lib/app.php:118
+msgid "Pager"
+msgstr "Cercapersone"
+
+#: lib/search.php:22
+msgid "Contact"
+msgstr ""
+
+#: photo.php:40
+msgid "This is not your contact."
+msgstr "Questo non è un tuo contatto."
+
+#: photo.php:48
+msgid "This card is not RFC compatible."
+msgstr "Questa card non è compatibile con il protocollo RFC."
+
+#: photo.php:85
+msgid "This card does not contain a photo."
+msgstr "Questa card non contiene una foto."
+
+#: templates/index.php:6
+msgid "Add Contact"
+msgstr "Aggiungi contatto"
+
+#: templates/index.php:7
+msgid "Addressbooks"
+msgstr ""
+
+#: templates/part.addcardform.php:8
+msgid "Addressbook"
+msgstr ""
+
+#: templates/part.addcardform.php:21
+msgid "Name"
+msgstr "Nome"
+
+#: templates/part.addcardform.php:57 templates/part.details.php:43
+#: templates/part.details.php:79 templates/part.setpropertyform.php:10
+#: templates/part.setpropertyform.php:47
+msgid "Type"
+msgstr "Tipo"
+
+#: templates/part.addcardform.php:65 templates/part.details.php:49
+#: templates/part.setpropertyform.php:16
msgid "PO Box"
-msgstr "PO Box"
+msgstr "Casella postale"
-#: templates/part.addpropertyform.php:21 templates/part.property.php:51
-#: templates/part.setpropertyform.php:6
+#: templates/part.addcardform.php:72 templates/part.details.php:53
+#: templates/part.setpropertyform.php:20
msgid "Extended"
msgstr "Estendi"
-#: templates/part.addpropertyform.php:22 templates/part.property.php:54
-#: templates/part.setpropertyform.php:7
+#: templates/part.addcardform.php:78 templates/part.details.php:57
+#: templates/part.setpropertyform.php:24
msgid "Street"
msgstr "Via"
-#: templates/part.addpropertyform.php:23 templates/part.property.php:57
-#: templates/part.setpropertyform.php:8
+#: templates/part.addcardform.php:84 templates/part.details.php:61
+#: templates/part.setpropertyform.php:28
msgid "City"
msgstr "Città"
-#: templates/part.addpropertyform.php:24 templates/part.property.php:60
-#: templates/part.setpropertyform.php:9
+#: templates/part.addcardform.php:90 templates/part.details.php:65
+#: templates/part.setpropertyform.php:32
msgid "Region"
msgstr "Regione"
-#: templates/part.addpropertyform.php:25 templates/part.property.php:63
-#: templates/part.setpropertyform.php:10
+#: templates/part.addcardform.php:96 templates/part.details.php:69
+#: templates/part.setpropertyform.php:36
msgid "Zipcode"
msgstr "CAP"
-#: templates/part.addpropertyform.php:26 templates/part.property.php:66
-#: templates/part.setpropertyform.php:11
+#: templates/part.addcardform.php:102 templates/part.details.php:73
+#: templates/part.setpropertyform.php:40
msgid "Country"
msgstr "Stato"
-#: templates/part.addpropertyform.php:31
-msgid "Mobile"
-msgstr "Cellulare"
+#: templates/part.addcardform.php:109
+msgid "Create Contact"
+msgstr "Crea contatto"
-#: templates/part.addpropertyform.php:33
-msgid "Text"
-msgstr "Testo"
+#: templates/part.chooseaddressbook.php:1
+msgid "Choose active Address Books"
+msgstr "Seleziona le rubriche attive"
-#: templates/part.addpropertyform.php:34
-msgid "Voice"
-msgstr "Voce"
+#: templates/part.chooseaddressbook.php:16
+msgid "New Address Book"
+msgstr "Nuova rubrica"
-#: templates/part.addpropertyform.php:35
-msgid "Fax"
-msgstr "Fax"
+#: templates/part.chooseaddressbook.php:21
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "CardDav Link"
+msgstr "Link CardDav"
-#: templates/part.addpropertyform.php:36
-msgid "Video"
-msgstr "Video"
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Download"
+msgstr "Scarica"
-#: templates/part.addpropertyform.php:37
-msgid "Pager"
-msgstr "Pager"
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Edit"
+msgstr "Modifica"
-#: templates/part.details.php:33
+#: templates/part.chooseaddressbook.rowfields.php:5
msgid "Delete"
msgstr "Cancella"
+#: templates/part.details.php:3
+msgid "Download contact"
+msgstr ""
+
+#: templates/part.details.php:4
+msgid "Delete contact"
+msgstr "Cancella contatto"
+
#: templates/part.details.php:34
-msgid "Add Property"
-msgstr "Aggiungi proprietà"
+msgid "Add"
+msgstr "Aggiungi"
-#: templates/part.property.php:9
+#: templates/part.editaddressbook.php:9
+msgid "New Addressbook"
+msgstr ""
+
+#: templates/part.editaddressbook.php:9
+msgid "Edit Addressbook"
+msgstr ""
+
+#: templates/part.editaddressbook.php:12
+msgid "Displayname"
+msgstr "Nome da mostrare"
+
+#: templates/part.editaddressbook.php:23
+msgid "Active"
+msgstr "Attiva"
+
+#: templates/part.editaddressbook.php:29
+msgid "Save"
+msgstr "Salva"
+
+#: templates/part.editaddressbook.php:29
+msgid "Submit"
+msgstr "Conferma"
+
+#: templates/part.editaddressbook.php:30
+msgid "Cancel"
+msgstr "Annulla"
+
+#: templates/part.property.php:3
msgid "Birthday"
msgstr "Compleanno"
-#: templates/part.property.php:29
+#: templates/part.property.php:23
+msgid "Preferred"
+msgstr "Preferito"
+
+#: templates/part.property.php:23 templates/part.setpropertyform.php:45
msgid "Phone"
msgstr "Telefono"
-#: templates/part.setpropertyform.php:17
-msgid "Edit"
-msgstr "Modifica"
+#: templates/part.setpropertyform.php:57
+msgid "Update"
+msgstr "Aggiorna"
+
+#: templates/settings.php:4
+msgid "CardDAV syncing address:"
+msgstr ""
diff --git a/l10n/it/core.po b/l10n/it/core.po
index cd840405802..addabc52510 100644
--- a/l10n/it/core.po
+++ b/l10n/it/core.po
@@ -5,14 +5,15 @@
# Translators:
# <cosenal@gmail.com>, 2011.
# Francesco Apruzzese <cescoap@gmail.com>, 2011.
+# <marco@carnazzo.it>, 2011, 2012.
# <rb.colombo@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 18:17+0200\n"
-"PO-Revision-Date: 2011-09-23 08:17+0000\n"
-"Last-Translator: OpenCode <cescoap@gmail.com>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-12 20:51+0000\n"
+"Last-Translator: ufic <marco@carnazzo.it>\n"
"Language-Team: Italian (http://www.transifex.net/projects/p/owncloud/team/it/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -20,6 +21,51 @@ msgstr ""
"Language: it\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+#: lostpassword/index.php:24
+msgid "Owncloud password reset"
+msgstr "Azzera la password di Owncloud"
+
+#: lostpassword/templates/email.php:1
+msgid "Use the following link to reset your password: {link}"
+msgstr "Usa il link seguente per azzerare la password: {link}"
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr "Riceverai un link per resettare la tua password via Email"
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Requested"
+msgstr "Richiesto"
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr "Login fallito!"
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:22
+#: templates/login.php:8
+msgid "Username"
+msgstr "Nome utente"
+
+#: lostpassword/templates/lostpassword.php:14
+msgid "Request reset"
+msgstr "Richiesta di ripristino"
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr "La password è stata reimpostata"
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr "Alla pagina di ingresso"
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr "Nuova password"
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr "Reimposta password"
+
#: strings.php:5
msgid "Personal"
msgstr "Personale"
@@ -46,56 +92,52 @@ msgstr "Cloud non trovata"
#: templates/installation.php:20
msgid "Create an <strong>admin account</strong>"
-msgstr "Crea un &lt;strong&gt;account amministratore&lt;/strong&gt;"
+msgstr "Crea un <strong>account amministratore</strong>"
-#: templates/installation.php:21
-msgid "Username"
-msgstr "Nome utente"
-
-#: templates/installation.php:22
+#: templates/installation.php:26 templates/login.php:12
msgid "Password"
msgstr "Password"
-#: templates/installation.php:27
+#: templates/installation.php:32
+msgid "Advanced"
+msgstr "Opzioni avanzate"
+
+#: templates/installation.php:34
+msgid "Data folder"
+msgstr "Cartella dati"
+
+#: templates/installation.php:41
msgid "Configure the database"
msgstr "Configura il database"
-#: templates/installation.php:32 templates/installation.php:43
-#: templates/installation.php:53
+#: templates/installation.php:46 templates/installation.php:57
+#: templates/installation.php:67
msgid "will be used"
msgstr "sarà usato"
-#: templates/installation.php:64
+#: templates/installation.php:79
msgid "Database user"
msgstr "Utente database"
-#: templates/installation.php:65
+#: templates/installation.php:83
msgid "Database password"
msgstr "Password database"
-#: templates/installation.php:66
+#: templates/installation.php:87
msgid "Database name"
msgstr "Nome database"
-#: templates/installation.php:72
-msgid "Advanced"
-msgstr "Opzioni avanzate"
-
-#: templates/installation.php:75
+#: templates/installation.php:93
msgid "Database host"
msgstr "Host del database"
-#: templates/installation.php:76
-msgid "Data folder"
-msgstr "Cartella dati"
-
-#: templates/installation.php:79
+#: templates/installation.php:98
msgid "Finish setup"
msgstr "Termina"
#: templates/layout.guest.php:35
-msgid "gives you freedom and control over your own data"
-msgstr "Libertà e controllo dei propri dati"
+msgid "web services under your control"
+msgstr "Servizi web nelle tue mani"
#: templates/layout.user.php:34
msgid "Log out"
@@ -105,38 +147,22 @@ msgstr "Log out"
msgid "Settings"
msgstr "Impostazioni"
-#: templates/login.php:4
+#: templates/login.php:5
msgid "Lost your password?"
msgstr "Password persa?"
-#: templates/login.php:9 templates/login.php:13
+#: templates/login.php:15
msgid "remember"
msgstr "ricorda"
+#: templates/login.php:16
+msgid "Log in"
+msgstr "Entra"
+
#: templates/logout.php:1
msgid "You are logged out."
msgstr "Sei uscito."
-#: templates/lostpassword.php:3
-msgid "You will receive a link to reset your password via Email."
-msgstr "Riceverai via email un link per il reset della tua password"
-
-#: templates/lostpassword.php:5
-msgid "Requested"
-msgstr "Richiesto"
-
-#: templates/lostpassword.php:8
-msgid "Login failed!"
-msgstr "Login fallito!"
-
-#: templates/lostpassword.php:10
-msgid "Username or Email"
-msgstr "Username o email"
-
-#: templates/lostpassword.php:11
-msgid "Request reset"
-msgstr "Reset richiesta"
-
#: templates/part.pagenavi.php:3
msgid "prev"
msgstr "precedente"
@@ -145,16 +171,4 @@ msgstr "precedente"
msgid "next"
msgstr "successivo"
-#: templates/resetpassword.php:4
-msgid "Your password was reset"
-msgstr "tua password è stata resettata"
-
-#: templates/resetpassword.php:6
-msgid "New password"
-msgstr "Nuova password"
-
-#: templates/resetpassword.php:7
-msgid "Reset password"
-msgstr "Reset password"
-
diff --git a/l10n/it/files.po b/l10n/it/files.po
index ee66302f62f..55c4e07c0ec 100644
--- a/l10n/it/files.po
+++ b/l10n/it/files.po
@@ -4,13 +4,15 @@
#
# Translators:
# <cosenal@gmail.com>, 2011.
+# Francesco Apruzzese <cescoap@gmail.com>, 2011.
+# <marco@carnazzo.it>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-12 20:53+0000\n"
+"Last-Translator: ufic <marco@carnazzo.it>\n"
"Language-Team: Italian (http://www.transifex.net/projects/p/owncloud/team/it/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,33 +20,34 @@ msgstr ""
"Language: it\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/upload.php:24
+#: ajax/upload.php:19
msgid "There is no error, the file uploaded with success"
-msgstr ""
+msgstr "Non ci sono errori, file caricato con successo"
-#: ajax/upload.php:25
+#: ajax/upload.php:20
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
-msgstr ""
+msgstr "Il file caricato supera il valore upload_max_filesize in php.ini"
-#: ajax/upload.php:26
+#: ajax/upload.php:21
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
+"Il file caricato supera il valore MAX_FILE_SIZE definito nel form HTML"
-#: ajax/upload.php:27
+#: ajax/upload.php:22
msgid "The uploaded file was only partially uploaded"
-msgstr ""
+msgstr "Il file è stato parzialmente caricato"
-#: ajax/upload.php:28
+#: ajax/upload.php:23
msgid "No file was uploaded"
-msgstr ""
+msgstr "Nessun file è stato caricato"
-#: ajax/upload.php:29
+#: ajax/upload.php:24
msgid "Missing a temporary folder"
-msgstr ""
+msgstr "Cartella temporanea mancante"
-#: appinfo/app.php:7
+#: appinfo/app.php:8
msgid "Files"
msgstr "File"
@@ -52,43 +55,55 @@ msgstr "File"
msgid "Maximum upload size"
msgstr "Dimensione massima upload"
+#: templates/index.php:7
+msgid "New"
+msgstr "Nuovo"
+
#: templates/index.php:10
+msgid "Text file"
+msgstr "File di testo"
+
+#: templates/index.php:11
+msgid "Folder"
+msgstr "Cartella"
+
+#: templates/index.php:12
+msgid "From the web"
+msgstr "Dal web"
+
+#: templates/index.php:22
msgid "Upload"
msgstr "Carica"
-#: templates/index.php:17
-msgid "New Folder"
-msgstr "Nuova Cartella"
-
-#: templates/index.php:31
+#: templates/index.php:35
msgid "Nothing in here. Upload something!"
msgstr "Non c'è niente qui. Carica qualcosa!"
-#: templates/index.php:39
+#: templates/index.php:43
msgid "Name"
msgstr "Nome"
-#: templates/index.php:41
+#: templates/index.php:45
msgid "Download"
msgstr "Scarica"
-#: templates/index.php:45
+#: templates/index.php:49
msgid "Size"
msgstr "Dimensione"
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Modified"
msgstr "Modificato"
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Delete"
msgstr "Cancella"
-#: templates/index.php:54
+#: templates/index.php:58
msgid "Upload too large"
msgstr "Il file caricato è troppo grande"
-#: templates/index.php:56
+#: templates/index.php:60
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
diff --git a/l10n/it/gallery.po b/l10n/it/gallery.po
new file mode 100644
index 00000000000..4dffa1257dc
--- /dev/null
+++ b/l10n/it/gallery.po
@@ -0,0 +1,32 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:48+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Italian (http://www.transifex.net/projects/p/owncloud/team/it/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: it\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:41
+msgid "Gallery"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Rescan"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+
diff --git a/l10n/it/media.po b/l10n/it/media.po
index 7f27ceaf216..573b9775417 100644
--- a/l10n/it/media.po
+++ b/l10n/it/media.po
@@ -2,14 +2,16 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
+# Translators:
# Francesco Apruzzese <cescoap@gmail.com>, 2011.
+# <marco@carnazzo.it>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
-"Report-Msgid-Bugs-To: http://bugs.kde.org/buglist.cgi?product=owncloud\n"
-"POT-Creation-Date: 2011-08-23 11:09+0200\n"
-"PO-Revision-Date: 2011-08-21 23:18+0000\n"
-"Last-Translator: OpenCode <cescoap@gmail.com>\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Italian (http://www.transifex.net/projects/p/owncloud/team/it/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,15 +19,15 @@ msgstr ""
"Language: it\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: appinfo/app.php:31
+#: appinfo/app.php:32
msgid "Music"
msgstr "Musica"
-#: templates/music.php:3
+#: templates/music.php:3 templates/player.php:13
msgid "Play"
msgstr "Play"
-#: templates/music.php:4 templates/music.php:30
+#: templates/music.php:4 templates/music.php:26 templates/player.php:14
msgid "Pause"
msgstr "Pausa"
@@ -33,7 +35,7 @@ msgstr "Pausa"
msgid "Previous"
msgstr "Precedente"
-#: templates/music.php:6
+#: templates/music.php:6 templates/player.php:15
msgid "Next"
msgstr "Successiva"
@@ -45,13 +47,9 @@ msgstr "Disattiva audio"
msgid "Unmute"
msgstr "Riattiva audio"
-#: templates/music.php:28
-msgid "Songs scanned"
-msgstr "Canzoni analizzate"
-
-#: templates/music.php:29
+#: templates/music.php:25
msgid "Rescan Collection"
-msgstr "Rianalizza colezione"
+msgstr "Rianalizza collezione"
#: templates/music.php:37
msgid "Artist"
diff --git a/l10n/it/settings.po b/l10n/it/settings.po
index 8e0042ea43d..6f2cf988163 100644
--- a/l10n/it/settings.po
+++ b/l10n/it/settings.po
@@ -2,16 +2,18 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
-# <rb.colombo@gmail.com>, 2011.
+# Translators:
# Francesco Apruzzese <cescoap@gmail.com>, 2011.
# Jan-Christoph Borchardt <JanCBorchardt@fsfe.org>, 2011.
+# <marco@carnazzo.it>, 2011, 2012.
+# <rb.colombo@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-04 16:48+0200\n"
-"PO-Revision-Date: 2011-09-04 12:49+0000\n"
-"Last-Translator: RColombo <rb.colombo@gmail.com>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-12 20:56+0000\n"
+"Last-Translator: ufic <marco@carnazzo.it>\n"
"Language-Team: Italian (http://www.transifex.net/projects/p/owncloud/team/it/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,22 +21,26 @@ msgstr ""
"Language: it\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/openid.php:13 ajax/setlanguage.php:13
-msgid "Authentication error"
-msgstr "Errore nell'autenticazione"
+#: ajax/lostpassword.php:14
+msgid "email Changed"
+msgstr "email modificata"
-#: ajax/openid.php:21
-msgid "OpenID Changed"
-msgstr "OpenID Modificato"
-
-#: ajax/openid.php:23 ajax/setlanguage.php:23
+#: ajax/lostpassword.php:16 ajax/openid.php:17 ajax/setlanguage.php:16
msgid "Invalid request"
msgstr "Richiesta non valida"
-#: ajax/setlanguage.php:21
+#: ajax/openid.php:15
+msgid "OpenID Changed"
+msgstr "OpenID Modificato"
+
+#: ajax/setlanguage.php:14
msgid "Language changed"
msgstr "Lingua modificata"
+#: templates/admin.php:13
+msgid "Log level"
+msgstr "Livello di log"
+
#: templates/apps.php:8
msgid "Add your application"
msgstr "Aggiungi un applicazione"
@@ -45,7 +51,7 @@ msgstr "Seleziona un applicazione"
#: templates/apps.php:23
msgid "-licensed"
-msgstr "-licensed"
+msgstr "-rilasciato"
#: templates/apps.php:23
msgid "by"
@@ -55,15 +61,15 @@ msgstr "da"
msgid "Ask a question"
msgstr "Fai una domanda"
-#: templates/help.php:17
+#: templates/help.php:20
msgid "Problems connecting to help database."
msgstr "Problemi di connessione al database di aiuto"
-#: templates/help.php:18
+#: templates/help.php:21
msgid "Go there manually."
msgstr "Vai lì manualmente."
-#: templates/help.php:26
+#: templates/help.php:29
msgid "Answer"
msgstr "Risposta"
@@ -99,37 +105,53 @@ msgstr "mostra"
msgid "Change password"
msgstr "Modifica password"
-#: templates/personal.php:24 templates/personal.php:25
+#: templates/personal.php:24
+msgid "Email"
+msgstr "Email"
+
+#: templates/personal.php:25
+msgid "Your email address"
+msgstr "Il tuo indirizzo email"
+
+#: templates/personal.php:26
+msgid "Fill in an email address to enable password recovery"
+msgstr "Inserici il tuo indirizzo email per abilitare il recupero password"
+
+#: templates/personal.php:32 templates/personal.php:33
msgid "Language"
msgstr "Lingua"
-#: templates/personal.php:30
-msgid "Help translating"
-msgstr "Aiuta nella traduzione"
+#: templates/personal.php:38
+msgid "Help translate"
+msgstr "Migliora la traduzione"
-#: templates/personal.php:37
+#: templates/personal.php:45
msgid "use this address to connect to your ownCloud in your file manager"
msgstr ""
"usa questo indirizzo per connettersi al proprio ownCloud nel tuo file "
"manager"
-#: templates/users.php:16
+#: templates/users.php:15 templates/users.php:30
msgid "Name"
msgstr "Nome"
-#: templates/users.php:17
+#: templates/users.php:16 templates/users.php:31
msgid "Password"
msgstr "Password"
-#: templates/users.php:18 templates/users.php:36
+#: templates/users.php:17 templates/users.php:32 templates/users.php:46
msgid "Groups"
msgstr "Gruppi"
-#: templates/users.php:24
+#: templates/users.php:23
msgid "Create"
msgstr "Crea"
-#: templates/users.php:48
+#: templates/users.php:33
+msgid "Quota"
+msgstr "Quota"
+
+#: templates/users.php:58
msgid "Delete"
msgstr "Cancella"
diff --git a/l10n/ja_JP/calendar.po b/l10n/ja_JP/calendar.po
new file mode 100644
index 00000000000..fc03639a996
--- /dev/null
+++ b/l10n/ja_JP/calendar.po
@@ -0,0 +1,636 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Japanese (Japan) (http://www.transifex.net/projects/p/owncloud/team/ja_JP/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ja_JP\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: ajax/guesstimezone.php:42
+msgid "New Timezone:"
+msgstr ""
+
+#: ajax/settimezone.php:22
+msgid "Timezone changed"
+msgstr "タイムゾーンが変更されました"
+
+#: ajax/settimezone.php:24
+msgid "Invalid request"
+msgstr "無効なリクエストです"
+
+#: appinfo/app.php:20 templates/calendar.php:13
+#: templates/part.eventform.php:20
+msgid "Calendar"
+msgstr "カレンダー"
+
+#: lib/app.php:19
+msgid "Wrong calendar"
+msgstr "誤ったカレンダーです"
+
+#: lib/app.php:60 lib/object.php:332
+msgid "Birthday"
+msgstr "誕生日"
+
+#: lib/app.php:61 lib/object.php:333
+msgid "Business"
+msgstr "ビジネス"
+
+#: lib/app.php:62 lib/object.php:334
+msgid "Call"
+msgstr "電話をかける"
+
+#: lib/app.php:63 lib/object.php:335
+msgid "Clients"
+msgstr "顧客"
+
+#: lib/app.php:64 lib/object.php:336
+msgid "Deliverer"
+msgstr "運送会社"
+
+#: lib/app.php:65 lib/object.php:337
+msgid "Holidays"
+msgstr "休日"
+
+#: lib/app.php:66 lib/object.php:338
+msgid "Ideas"
+msgstr "アイデア"
+
+#: lib/app.php:67 lib/object.php:339
+msgid "Journey"
+msgstr "旅行"
+
+#: lib/app.php:68 lib/object.php:340
+msgid "Jubilee"
+msgstr "記念祭"
+
+#: lib/app.php:69 lib/object.php:341
+msgid "Meeting"
+msgstr "ミーティング"
+
+#: lib/app.php:70 lib/object.php:342
+msgid "Other"
+msgstr "その他"
+
+#: lib/app.php:71 lib/object.php:343
+msgid "Personal"
+msgstr "個人"
+
+#: lib/app.php:72 lib/object.php:344
+msgid "Projects"
+msgstr "プロジェクト"
+
+#: lib/app.php:73 lib/object.php:345
+msgid "Questions"
+msgstr "質問事項"
+
+#: lib/app.php:74 lib/object.php:346
+msgid "Work"
+msgstr "仕事"
+
+#: lib/object.php:353
+msgid "Does not repeat"
+msgstr "繰り返さない"
+
+#: lib/object.php:354
+msgid "Daily"
+msgstr "毎日"
+
+#: lib/object.php:355
+msgid "Weekly"
+msgstr "毎週"
+
+#: lib/object.php:356
+msgid "Every Weekday"
+msgstr "毎平日"
+
+#: lib/object.php:357
+msgid "Bi-Weekly"
+msgstr "2週間ごと"
+
+#: lib/object.php:358
+msgid "Monthly"
+msgstr "毎月"
+
+#: lib/object.php:359
+msgid "Yearly"
+msgstr "毎年"
+
+#: lib/object.php:366
+msgid "never"
+msgstr ""
+
+#: lib/object.php:367
+msgid "by occurrences"
+msgstr ""
+
+#: lib/object.php:368
+msgid "by date"
+msgstr ""
+
+#: lib/object.php:375
+msgid "by monthday"
+msgstr ""
+
+#: lib/object.php:376
+msgid "by weekday"
+msgstr ""
+
+#: lib/object.php:383 templates/lAfix.php:3
+msgid "Monday"
+msgstr ""
+
+#: lib/object.php:384 templates/lAfix.php:4
+msgid "Tuesday"
+msgstr ""
+
+#: lib/object.php:385 templates/lAfix.php:5
+msgid "Wednesday"
+msgstr ""
+
+#: lib/object.php:386 templates/lAfix.php:6
+msgid "Thursday"
+msgstr ""
+
+#: lib/object.php:387 templates/lAfix.php:7
+msgid "Friday"
+msgstr ""
+
+#: lib/object.php:388 templates/lAfix.php:8
+msgid "Saturday"
+msgstr ""
+
+#: lib/object.php:389 templates/lAfix.php:2
+msgid "Sunday"
+msgstr ""
+
+#: lib/object.php:396
+msgid "events week of month"
+msgstr ""
+
+#: lib/object.php:397
+msgid "first"
+msgstr ""
+
+#: lib/object.php:398
+msgid "second"
+msgstr ""
+
+#: lib/object.php:399
+msgid "third"
+msgstr ""
+
+#: lib/object.php:400
+msgid "fourth"
+msgstr ""
+
+#: lib/object.php:401
+msgid "fifth"
+msgstr ""
+
+#: lib/object.php:402
+msgid "last"
+msgstr ""
+
+#: lib/object.php:424 templates/lAfix.php:16
+msgid "January"
+msgstr ""
+
+#: lib/object.php:425 templates/lAfix.php:17
+msgid "February"
+msgstr ""
+
+#: lib/object.php:426 templates/lAfix.php:18
+msgid "March"
+msgstr ""
+
+#: lib/object.php:427 templates/lAfix.php:19
+msgid "April"
+msgstr ""
+
+#: lib/object.php:428 templates/lAfix.php:20
+msgid "May"
+msgstr ""
+
+#: lib/object.php:429 templates/lAfix.php:21
+msgid "June"
+msgstr ""
+
+#: lib/object.php:430 templates/lAfix.php:22
+msgid "July"
+msgstr ""
+
+#: lib/object.php:431 templates/lAfix.php:23
+msgid "August"
+msgstr ""
+
+#: lib/object.php:432 templates/lAfix.php:24
+msgid "September"
+msgstr ""
+
+#: lib/object.php:433 templates/lAfix.php:25
+msgid "October"
+msgstr ""
+
+#: lib/object.php:434 templates/lAfix.php:26
+msgid "November"
+msgstr ""
+
+#: lib/object.php:435 templates/lAfix.php:27
+msgid "December"
+msgstr ""
+
+#: lib/object.php:441
+msgid "by events date"
+msgstr ""
+
+#: lib/object.php:442
+msgid "by yearday(s)"
+msgstr ""
+
+#: lib/object.php:443
+msgid "by weeknumber(s)"
+msgstr ""
+
+#: lib/object.php:444
+msgid "by day and month"
+msgstr ""
+
+#: lib/object.php:467
+msgid "Not an array"
+msgstr "配列ではありません"
+
+#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+msgid "Date"
+msgstr ""
+
+#: lib/search.php:40
+msgid "Cal."
+msgstr ""
+
+#: templates/calendar.php:10
+msgid "All day"
+msgstr "終日"
+
+#: templates/calendar.php:11
+msgid "Missing fields"
+msgstr "項目がありません"
+
+#: templates/calendar.php:12 templates/part.eventform.php:3
+msgid "Title"
+msgstr "タイトル"
+
+#: templates/calendar.php:14
+msgid "From Date"
+msgstr "開始日"
+
+#: templates/calendar.php:15
+msgid "From Time"
+msgstr "開始時間"
+
+#: templates/calendar.php:16
+msgid "To Date"
+msgstr "終了日"
+
+#: templates/calendar.php:17
+msgid "To Time"
+msgstr "終了時間"
+
+#: templates/calendar.php:18
+msgid "The event ends before it starts"
+msgstr "イベント終了時間が開始時間より先です"
+
+#: templates/calendar.php:19
+msgid "There was a database fail"
+msgstr "データベースフェイルがありました"
+
+#: templates/calendar.php:52
+msgid "Week"
+msgstr "週"
+
+#: templates/calendar.php:53
+msgid "Month"
+msgstr "月"
+
+#: templates/calendar.php:54
+msgid "List"
+msgstr "リスト"
+
+#: templates/calendar.php:59
+msgid "Today"
+msgstr "今日"
+
+#: templates/calendar.php:60
+msgid "Calendars"
+msgstr "カレンダー"
+
+#: templates/calendar.php:78
+msgid "There was a fail, while parsing the file."
+msgstr "ファイルを構文解析する際に失敗しました"
+
+#: templates/lAfix.php:9
+msgid "Sun."
+msgstr ""
+
+#: templates/lAfix.php:10
+msgid "Mon."
+msgstr ""
+
+#: templates/lAfix.php:11
+msgid "Tue."
+msgstr ""
+
+#: templates/lAfix.php:12
+msgid "Wed."
+msgstr ""
+
+#: templates/lAfix.php:13
+msgid "Thu."
+msgstr ""
+
+#: templates/lAfix.php:14
+msgid "Fri."
+msgstr ""
+
+#: templates/lAfix.php:15
+msgid "Sat."
+msgstr ""
+
+#: templates/lAfix.php:28
+msgid "Jan."
+msgstr ""
+
+#: templates/lAfix.php:29
+msgid "Feb."
+msgstr ""
+
+#: templates/lAfix.php:30
+msgid "Mar."
+msgstr ""
+
+#: templates/lAfix.php:31
+msgid "Apr."
+msgstr ""
+
+#: templates/lAfix.php:32
+msgid "May."
+msgstr ""
+
+#: templates/lAfix.php:33
+msgid "Jun."
+msgstr ""
+
+#: templates/lAfix.php:34
+msgid "Jul."
+msgstr ""
+
+#: templates/lAfix.php:35
+msgid "Aug."
+msgstr ""
+
+#: templates/lAfix.php:36
+msgid "Sep."
+msgstr ""
+
+#: templates/lAfix.php:37
+msgid "Oct."
+msgstr ""
+
+#: templates/lAfix.php:38
+msgid "Nov."
+msgstr ""
+
+#: templates/lAfix.php:39
+msgid "Dec."
+msgstr ""
+
+#: templates/part.choosecalendar.php:1
+msgid "Choose active calendars"
+msgstr "アクティブなカレンダーを選択してください"
+
+#: templates/part.choosecalendar.php:15
+msgid "New Calendar"
+msgstr "新しくカレンダーを作成する"
+
+#: templates/part.choosecalendar.php:20
+#: templates/part.choosecalendar.rowfields.php:4
+msgid "CalDav Link"
+msgstr "CalDavへのリンク"
+
+#: templates/part.choosecalendar.rowfields.php:4
+msgid "Download"
+msgstr "ダウンロード"
+
+#: templates/part.choosecalendar.rowfields.php:4
+msgid "Edit"
+msgstr "編集"
+
+#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.editevent.php:9
+msgid "Delete"
+msgstr "削除"
+
+#: templates/part.editcalendar.php:9
+msgid "New calendar"
+msgstr "新しくカレンダーを作成する"
+
+#: templates/part.editcalendar.php:9
+msgid "Edit calendar"
+msgstr "カレンダーを編集"
+
+#: templates/part.editcalendar.php:12
+msgid "Displayname"
+msgstr "表示名"
+
+#: templates/part.editcalendar.php:23
+msgid "Active"
+msgstr "アクティブ"
+
+#: templates/part.editcalendar.php:29
+msgid "Calendar color"
+msgstr "カレンダーの色"
+
+#: templates/part.editcalendar.php:42
+msgid "Save"
+msgstr "保存"
+
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
+#: templates/part.newevent.php:6
+msgid "Submit"
+msgstr "完了"
+
+#: templates/part.editcalendar.php:43
+msgid "Cancel"
+msgstr "キャンセル"
+
+#: templates/part.editevent.php:1
+msgid "Edit an event"
+msgstr "イベントを編集"
+
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr "エクスポート"
+
+#: templates/part.eventform.php:5
+msgid "Title of the Event"
+msgstr "イベントのタイトル"
+
+#: templates/part.eventform.php:11
+msgid "Category"
+msgstr "カテゴリー"
+
+#: templates/part.eventform.php:13
+msgid "Select category"
+msgstr "カテゴリーを選択してください"
+
+#: templates/part.eventform.php:37
+msgid "All Day Event"
+msgstr "終日イベント"
+
+#: templates/part.eventform.php:41
+msgid "From"
+msgstr "開始"
+
+#: templates/part.eventform.php:49
+msgid "To"
+msgstr "終了"
+
+#: templates/part.eventform.php:57
+msgid "Advanced options"
+msgstr "詳細設定"
+
+#: templates/part.eventform.php:61
+msgid "Repeat"
+msgstr "繰り返す"
+
+#: templates/part.eventform.php:68
+msgid "Advanced"
+msgstr ""
+
+#: templates/part.eventform.php:112
+msgid "Select weekdays"
+msgstr ""
+
+#: templates/part.eventform.php:125 templates/part.eventform.php:138
+msgid "Select days"
+msgstr ""
+
+#: templates/part.eventform.php:130
+msgid "and the events day of year."
+msgstr ""
+
+#: templates/part.eventform.php:143
+msgid "and the events day of month."
+msgstr ""
+
+#: templates/part.eventform.php:151
+msgid "Select months"
+msgstr ""
+
+#: templates/part.eventform.php:164
+msgid "Select weeks"
+msgstr ""
+
+#: templates/part.eventform.php:169
+msgid "and the events week of year."
+msgstr ""
+
+#: templates/part.eventform.php:175
+msgid "Interval"
+msgstr ""
+
+#: templates/part.eventform.php:181
+msgid "End"
+msgstr ""
+
+#: templates/part.eventform.php:193
+msgid "occurrences"
+msgstr ""
+
+#: templates/part.eventform.php:208
+msgid "Location"
+msgstr "場所"
+
+#: templates/part.eventform.php:210
+msgid "Location of the Event"
+msgstr "イベントの場所"
+
+#: templates/part.eventform.php:216
+msgid "Description"
+msgstr "メモ"
+
+#: templates/part.eventform.php:218
+msgid "Description of the Event"
+msgstr "イベントのメモ"
+
+#: templates/part.import.php:1
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the calendar"
+msgstr "カレンダーを選択してください"
+
+#: templates/part.import.php:10
+msgid "create a new calendar"
+msgstr ""
+
+#: templates/part.import.php:15
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import"
+msgstr "インポート"
+
+#: templates/part.import.php:20
+msgid "Importing calendar"
+msgstr ""
+
+#: templates/part.import.php:23
+msgid "Calendar imported successfully"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Close Dialog"
+msgstr ""
+
+#: templates/part.newevent.php:1
+msgid "Create a new event"
+msgstr "新しいイベントを作成する"
+
+#: templates/settings.php:13
+msgid "Timezone"
+msgstr "タイムゾーン"
+
+#: templates/settings.php:30
+msgid "Check always for changes of the timezone"
+msgstr ""
+
+#: templates/settings.php:32
+msgid "Timeformat"
+msgstr "時刻のフォーマット"
+
+#: templates/settings.php:34
+msgid "24h"
+msgstr "24時間制"
+
+#: templates/settings.php:35
+msgid "12h"
+msgstr "12時間制"
+
+#: templates/settings.php:41
+msgid "Calendar CalDAV syncing address:"
+msgstr "カレンダーのCalDAVシンクアドレス"
+
+
diff --git a/l10n/ja_JP/contacts.po b/l10n/ja_JP/contacts.po
new file mode 100644
index 00000000000..e9ae1beecf7
--- /dev/null
+++ b/l10n/ja_JP/contacts.po
@@ -0,0 +1,289 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Japanese (Japan) (http://www.transifex.net/projects/p/owncloud/team/ja_JP/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ja_JP\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: ajax/activation.php:17 ajax/updateaddressbook.php:26
+msgid "Error (de)activating addressbook."
+msgstr ""
+
+#: ajax/addcard.php:79
+msgid "There was an error adding the contact."
+msgstr ""
+
+#: ajax/addproperty.php:39
+msgid "Cannot add empty property."
+msgstr ""
+
+#: ajax/addproperty.php:51
+msgid "At least one of the address fields has to be filled out."
+msgstr ""
+
+#: ajax/addproperty.php:77
+msgid "Error adding contact property."
+msgstr ""
+
+#: ajax/createaddressbook.php:20
+msgid "Error adding addressbook."
+msgstr ""
+
+#: ajax/createaddressbook.php:26
+msgid "Error activating addressbook."
+msgstr ""
+
+#: ajax/deleteproperty.php:40
+msgid "Error deleting contact property."
+msgstr ""
+
+#: ajax/setproperty.php:79
+msgid "Error updating contact property."
+msgstr ""
+
+#: ajax/updateaddressbook.php:20
+msgid "Error updating addressbook."
+msgstr ""
+
+#: appinfo/app.php:21 templates/settings.php:3
+msgid "Contacts"
+msgstr ""
+
+#: lib/app.php:42
+msgid "This is not your addressbook."
+msgstr "これはあなたの電話帳ではありません。"
+
+#: lib/app.php:51 photo.php:34
+msgid "Contact could not be found."
+msgstr "連絡先を見つける事ができません。"
+
+#: lib/app.php:79
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "vCardの情報に誤りがあります。ページをリロードして下さい。"
+
+#: lib/app.php:91 templates/part.addcardform.php:54
+#: templates/part.property.php:45 templates/part.setpropertyform.php:7
+msgid "Address"
+msgstr "住所"
+
+#: lib/app.php:92 templates/part.addcardform.php:43
+msgid "Telephone"
+msgstr "電話番号"
+
+#: lib/app.php:93 templates/part.addcardform.php:37
+#: templates/part.property.php:16 templates/part.setpropertyform.php:51
+msgid "Email"
+msgstr "メールアドレス"
+
+#: lib/app.php:94 templates/part.addcardform.php:27
+#: templates/part.property.php:9 templates/part.setpropertyform.php:54
+msgid "Organization"
+msgstr "所属"
+
+#: lib/app.php:106 lib/app.php:113
+msgid "Work"
+msgstr "勤務先"
+
+#: lib/app.php:107 lib/app.php:111
+msgid "Home"
+msgstr "住居"
+
+#: lib/app.php:112
+msgid "Mobile"
+msgstr "携帯電話"
+
+#: lib/app.php:114
+msgid "Text"
+msgstr "TTY TDD"
+
+#: lib/app.php:115
+msgid "Voice"
+msgstr "音声番号"
+
+#: lib/app.php:116
+msgid "Fax"
+msgstr "FAX"
+
+#: lib/app.php:117
+msgid "Video"
+msgstr "テレビ電話"
+
+#: lib/app.php:118
+msgid "Pager"
+msgstr "ポケベル"
+
+#: lib/search.php:22
+msgid "Contact"
+msgstr ""
+
+#: photo.php:40
+msgid "This is not your contact."
+msgstr "あなたの連絡先ではありません。"
+
+#: photo.php:48
+msgid "This card is not RFC compatible."
+msgstr "このカードはRFCに準拠していません。"
+
+#: photo.php:85
+msgid "This card does not contain a photo."
+msgstr "このカードは写真を含んでおりません。"
+
+#: templates/index.php:6
+msgid "Add Contact"
+msgstr "連絡先の追加"
+
+#: templates/index.php:7
+msgid "Addressbooks"
+msgstr ""
+
+#: templates/part.addcardform.php:8
+msgid "Addressbook"
+msgstr ""
+
+#: templates/part.addcardform.php:21
+msgid "Name"
+msgstr "氏名"
+
+#: templates/part.addcardform.php:57 templates/part.details.php:43
+#: templates/part.details.php:79 templates/part.setpropertyform.php:10
+#: templates/part.setpropertyform.php:47
+msgid "Type"
+msgstr ""
+
+#: templates/part.addcardform.php:65 templates/part.details.php:49
+#: templates/part.setpropertyform.php:16
+msgid "PO Box"
+msgstr "私書箱"
+
+#: templates/part.addcardform.php:72 templates/part.details.php:53
+#: templates/part.setpropertyform.php:20
+msgid "Extended"
+msgstr "拡張番地"
+
+#: templates/part.addcardform.php:78 templates/part.details.php:57
+#: templates/part.setpropertyform.php:24
+msgid "Street"
+msgstr "街路番地"
+
+#: templates/part.addcardform.php:84 templates/part.details.php:61
+#: templates/part.setpropertyform.php:28
+msgid "City"
+msgstr "都市"
+
+#: templates/part.addcardform.php:90 templates/part.details.php:65
+#: templates/part.setpropertyform.php:32
+msgid "Region"
+msgstr "地域"
+
+#: templates/part.addcardform.php:96 templates/part.details.php:69
+#: templates/part.setpropertyform.php:36
+msgid "Zipcode"
+msgstr "郵便番号"
+
+#: templates/part.addcardform.php:102 templates/part.details.php:73
+#: templates/part.setpropertyform.php:40
+msgid "Country"
+msgstr "国名"
+
+#: templates/part.addcardform.php:109
+msgid "Create Contact"
+msgstr "追加"
+
+#: templates/part.chooseaddressbook.php:1
+msgid "Choose active Address Books"
+msgstr ""
+
+#: templates/part.chooseaddressbook.php:16
+msgid "New Address Book"
+msgstr ""
+
+#: templates/part.chooseaddressbook.php:21
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "CardDav Link"
+msgstr ""
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Download"
+msgstr ""
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Edit"
+msgstr "編集"
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Delete"
+msgstr "削除"
+
+#: templates/part.details.php:3
+msgid "Download contact"
+msgstr ""
+
+#: templates/part.details.php:4
+msgid "Delete contact"
+msgstr ""
+
+#: templates/part.details.php:34
+msgid "Add"
+msgstr ""
+
+#: templates/part.editaddressbook.php:9
+msgid "New Addressbook"
+msgstr ""
+
+#: templates/part.editaddressbook.php:9
+msgid "Edit Addressbook"
+msgstr ""
+
+#: templates/part.editaddressbook.php:12
+msgid "Displayname"
+msgstr ""
+
+#: templates/part.editaddressbook.php:23
+msgid "Active"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Save"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Submit"
+msgstr ""
+
+#: templates/part.editaddressbook.php:30
+msgid "Cancel"
+msgstr ""
+
+#: templates/part.property.php:3
+msgid "Birthday"
+msgstr "生年月日"
+
+#: templates/part.property.php:23
+msgid "Preferred"
+msgstr ""
+
+#: templates/part.property.php:23 templates/part.setpropertyform.php:45
+msgid "Phone"
+msgstr "電話番号"
+
+#: templates/part.setpropertyform.php:57
+msgid "Update"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "CardDAV syncing address:"
+msgstr ""
+
+
diff --git a/l10n/ja_JP/core.po b/l10n/ja_JP/core.po
new file mode 100644
index 00000000000..9511997e083
--- /dev/null
+++ b/l10n/ja_JP/core.po
@@ -0,0 +1,170 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Japanese (Japan) (http://www.transifex.net/projects/p/owncloud/team/ja_JP/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ja_JP\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: lostpassword/index.php:24
+msgid "Owncloud password reset"
+msgstr ""
+
+#: lostpassword/templates/email.php:1
+msgid "Use the following link to reset your password: {link}"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr "パスワードをリセットするリンクがメールで届きます。"
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Requested"
+msgstr "送信されました"
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr "ログインに失敗しました。"
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:22
+#: templates/login.php:8
+msgid "Username"
+msgstr "ユーザ名"
+
+#: lostpassword/templates/lostpassword.php:14
+msgid "Request reset"
+msgstr "リセットを要求する。"
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr "あなたのパスワードはリセットされました。"
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr "新しいパスワードを入力"
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr "パスワードをリセット"
+
+#: strings.php:5
+msgid "Personal"
+msgstr "個人設定"
+
+#: strings.php:6
+msgid "Users"
+msgstr "ユーザ"
+
+#: strings.php:7
+msgid "Apps"
+msgstr "アプリ"
+
+#: strings.php:8
+msgid "Admin"
+msgstr "管理者"
+
+#: strings.php:9
+msgid "Help"
+msgstr "ヘルプ"
+
+#: templates/404.php:12
+msgid "Cloud not found"
+msgstr "見つけられません"
+
+#: templates/installation.php:20
+msgid "Create an <strong>admin account</strong>"
+msgstr "<strong>管理者アカウント</strong>を作成してください"
+
+#: templates/installation.php:26 templates/login.php:12
+msgid "Password"
+msgstr "パスワード"
+
+#: templates/installation.php:32
+msgid "Advanced"
+msgstr "詳細設定"
+
+#: templates/installation.php:34
+msgid "Data folder"
+msgstr "データフォルダ"
+
+#: templates/installation.php:41
+msgid "Configure the database"
+msgstr "データベースを設定してください"
+
+#: templates/installation.php:46 templates/installation.php:57
+#: templates/installation.php:67
+msgid "will be used"
+msgstr "が使用されます"
+
+#: templates/installation.php:79
+msgid "Database user"
+msgstr "データベースのユーザ名"
+
+#: templates/installation.php:83
+msgid "Database password"
+msgstr "データベースのパスワード"
+
+#: templates/installation.php:87
+msgid "Database name"
+msgstr "データベース名"
+
+#: templates/installation.php:93
+msgid "Database host"
+msgstr "データベースのホスト名"
+
+#: templates/installation.php:98
+msgid "Finish setup"
+msgstr "セットアップを完了します"
+
+#: templates/layout.guest.php:35
+msgid "web services under your control"
+msgstr ""
+
+#: templates/layout.user.php:34
+msgid "Log out"
+msgstr "ログアウト"
+
+#: templates/layout.user.php:46 templates/layout.user.php:47
+msgid "Settings"
+msgstr "設定"
+
+#: templates/login.php:5
+msgid "Lost your password?"
+msgstr "パスワードがわからなくなりましたか?"
+
+#: templates/login.php:15
+msgid "remember"
+msgstr "パスワードを記憶する"
+
+#: templates/login.php:16
+msgid "Log in"
+msgstr ""
+
+#: templates/logout.php:1
+msgid "You are logged out."
+msgstr "ログアウトしました。"
+
+#: templates/part.pagenavi.php:3
+msgid "prev"
+msgstr "前"
+
+#: templates/part.pagenavi.php:20
+msgid "next"
+msgstr "次"
+
+
diff --git a/l10n/ja_JP/files.po b/l10n/ja_JP/files.po
new file mode 100644
index 00000000000..f4097681b60
--- /dev/null
+++ b/l10n/ja_JP/files.po
@@ -0,0 +1,108 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Japanese (Japan) (http://www.transifex.net/projects/p/owncloud/team/ja_JP/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ja_JP\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: ajax/upload.php:19
+msgid "There is no error, the file uploaded with success"
+msgstr "エラーはありません。ファイルのアップロードは成功しました。"
+
+#: ajax/upload.php:20
+msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
+msgstr "アップロードされたファイルはphp.iniのupload_max_filesizeに設定されたサイズを超えています"
+
+#: ajax/upload.php:21
+msgid ""
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
+"the HTML form"
+msgstr "アップロードされたファイルはHTMLのフォームに設定されたMAX_FILE_SIZEに設定されたサイズを超えています"
+
+#: ajax/upload.php:22
+msgid "The uploaded file was only partially uploaded"
+msgstr "ファイルは一部分しかアップロードされませんでした"
+
+#: ajax/upload.php:23
+msgid "No file was uploaded"
+msgstr "ファイルはアップロードされませんでした"
+
+#: ajax/upload.php:24
+msgid "Missing a temporary folder"
+msgstr "テンポラリフォルダが見つかりません"
+
+#: appinfo/app.php:8
+msgid "Files"
+msgstr "ファイル"
+
+#: templates/admin.php:5
+msgid "Maximum upload size"
+msgstr "最大アップロードサイズ"
+
+#: templates/index.php:7
+msgid "New"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Text file"
+msgstr ""
+
+#: templates/index.php:11
+msgid "Folder"
+msgstr ""
+
+#: templates/index.php:12
+msgid "From the web"
+msgstr ""
+
+#: templates/index.php:22
+msgid "Upload"
+msgstr "アップロード"
+
+#: templates/index.php:35
+msgid "Nothing in here. Upload something!"
+msgstr "ここには何もありません。何かアップロードしてください。"
+
+#: templates/index.php:43
+msgid "Name"
+msgstr "名前"
+
+#: templates/index.php:45
+msgid "Download"
+msgstr "ダウンロード"
+
+#: templates/index.php:49
+msgid "Size"
+msgstr "サイズ"
+
+#: templates/index.php:50
+msgid "Modified"
+msgstr "更新日時"
+
+#: templates/index.php:50
+msgid "Delete"
+msgstr "削除"
+
+#: templates/index.php:58
+msgid "Upload too large"
+msgstr "ファイルサイズが大きすぎます"
+
+#: templates/index.php:60
+msgid ""
+"The files you are trying to upload exceed the maximum size for file uploads "
+"on this server."
+msgstr "アップロードしようとしているファイルはサーバで規定された最大サイズを超えています"
+
+
diff --git a/l10n/ja_JP/gallery.po b/l10n/ja_JP/gallery.po
new file mode 100644
index 00000000000..d6ba590cba6
--- /dev/null
+++ b/l10n/ja_JP/gallery.po
@@ -0,0 +1,32 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:48+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Japanese (Japan) (http://www.transifex.net/projects/p/owncloud/team/ja_JP/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ja_JP\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: appinfo/app.php:41
+msgid "Gallery"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Rescan"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+
diff --git a/l10n/ja_JP/media.po b/l10n/ja_JP/media.po
new file mode 100644
index 00000000000..7288c83d3a2
--- /dev/null
+++ b/l10n/ja_JP/media.po
@@ -0,0 +1,64 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Japanese (Japan) (http://www.transifex.net/projects/p/owncloud/team/ja_JP/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ja_JP\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: appinfo/app.php:32
+msgid "Music"
+msgstr "ミュージック"
+
+#: templates/music.php:3 templates/player.php:13
+msgid "Play"
+msgstr "再生"
+
+#: templates/music.php:4 templates/music.php:26 templates/player.php:14
+msgid "Pause"
+msgstr "一時停止"
+
+#: templates/music.php:5
+msgid "Previous"
+msgstr "前"
+
+#: templates/music.php:6 templates/player.php:15
+msgid "Next"
+msgstr "次"
+
+#: templates/music.php:7
+msgid "Mute"
+msgstr "ミュート"
+
+#: templates/music.php:8
+msgid "Unmute"
+msgstr "ミュート解除"
+
+#: templates/music.php:25
+msgid "Rescan Collection"
+msgstr "コレクションを再読み込みする"
+
+#: templates/music.php:37
+msgid "Artist"
+msgstr "アーティスト"
+
+#: templates/music.php:38
+msgid "Album"
+msgstr "アルバム"
+
+#: templates/music.php:39
+msgid "Title"
+msgstr "曲名"
+
+
diff --git a/l10n/ja_JP/settings.po b/l10n/ja_JP/settings.po
new file mode 100644
index 00000000000..24ad0f09c5d
--- /dev/null
+++ b/l10n/ja_JP/settings.po
@@ -0,0 +1,152 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Japanese (Japan) (http://www.transifex.net/projects/p/owncloud/team/ja_JP/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ja_JP\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: ajax/lostpassword.php:14
+msgid "email Changed"
+msgstr ""
+
+#: ajax/lostpassword.php:16 ajax/openid.php:17 ajax/setlanguage.php:16
+msgid "Invalid request"
+msgstr "無効なリクエストです"
+
+#: ajax/openid.php:15
+msgid "OpenID Changed"
+msgstr "OpenIDが変更されました"
+
+#: ajax/setlanguage.php:14
+msgid "Language changed"
+msgstr "言語が変更されました"
+
+#: templates/admin.php:13
+msgid "Log level"
+msgstr ""
+
+#: templates/apps.php:8
+msgid "Add your application"
+msgstr "アプリを追加してください"
+
+#: templates/apps.php:21
+msgid "Select an App"
+msgstr "アプリを選択してください"
+
+#: templates/apps.php:23
+msgid "-licensed"
+msgstr "権利を保持されています"
+
+#: templates/apps.php:23
+msgid "by"
+msgstr "によって"
+
+#: templates/help.php:8
+msgid "Ask a question"
+msgstr "質問してください"
+
+#: templates/help.php:20
+msgid "Problems connecting to help database."
+msgstr "ヘルプ用データベース接続に問題が生じました"
+
+#: templates/help.php:21
+msgid "Go there manually."
+msgstr "手動で移動してください"
+
+#: templates/help.php:29
+msgid "Answer"
+msgstr "解答"
+
+#: templates/personal.php:8
+msgid "You use"
+msgstr "あなたが使っているのは"
+
+#: templates/personal.php:8
+msgid "of the available"
+msgstr "です。利用可能容量は"
+
+#: templates/personal.php:13
+msgid "Your password got changed"
+msgstr "パスワードは変更されました"
+
+#: templates/personal.php:14
+msgid "Unable to change your password"
+msgstr "パスワードを変更することができません"
+
+#: templates/personal.php:15
+msgid "Current password"
+msgstr "現在のパスワード"
+
+#: templates/personal.php:16
+msgid "New password"
+msgstr "新しいパスワード"
+
+#: templates/personal.php:17
+msgid "show"
+msgstr "表示"
+
+#: templates/personal.php:18
+msgid "Change password"
+msgstr "パスワードを変更する"
+
+#: templates/personal.php:24
+msgid "Email"
+msgstr ""
+
+#: templates/personal.php:25
+msgid "Your email address"
+msgstr ""
+
+#: templates/personal.php:26
+msgid "Fill in an email address to enable password recovery"
+msgstr ""
+
+#: templates/personal.php:32 templates/personal.php:33
+msgid "Language"
+msgstr "言語"
+
+#: templates/personal.php:38
+msgid "Help translate"
+msgstr ""
+
+#: templates/personal.php:45
+msgid "use this address to connect to your ownCloud in your file manager"
+msgstr "ファイルマネージャーであなたのownCloudに接続するときはこのアドレスを使用してください"
+
+#: templates/users.php:15 templates/users.php:30
+msgid "Name"
+msgstr "名前"
+
+#: templates/users.php:16 templates/users.php:31
+msgid "Password"
+msgstr "パスワード"
+
+#: templates/users.php:17 templates/users.php:32 templates/users.php:46
+msgid "Groups"
+msgstr "グループ"
+
+#: templates/users.php:23
+msgid "Create"
+msgstr "作成"
+
+#: templates/users.php:33
+msgid "Quota"
+msgstr ""
+
+#: templates/users.php:58
+msgid "Delete"
+msgstr "削除"
+
+
diff --git a/l10n/lb/calendar.po b/l10n/lb/calendar.po
index 9aea18b69ac..b65ae8ac132 100644
--- a/l10n/lb/calendar.po
+++ b/l10n/lb/calendar.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Luxembourgish (http://www.transifex.net/projects/p/owncloud/team/lb/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,351 +18,432 @@ msgstr ""
"Language: lb\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/createcalendar.php:18 ajax/settimezone.php:19
-#: ajax/updatecalendar.php:18
-msgid "Authentication error"
-msgstr "Authentifizéierung's Feeler"
-
-#: ajax/editeventform.php:25
-msgid "Wrong calendar"
+#: ajax/guesstimezone.php:42
+msgid "New Timezone:"
msgstr ""
-#: ajax/settimezone.php:27
+#: ajax/settimezone.php:22
msgid "Timezone changed"
msgstr "Zäitzon geännert"
-#: ajax/settimezone.php:29
+#: ajax/settimezone.php:24
msgid "Invalid request"
msgstr "Ongülteg Requête"
-#: appinfo/app.php:19 templates/part.eventform.php:27
-#: templates/part.eventinfo.php:18
+#: appinfo/app.php:20 templates/calendar.php:13
+#: templates/part.eventform.php:20
msgid "Calendar"
msgstr "Kalenner"
-#: lib/object.php:292
+#: lib/app.php:19
+msgid "Wrong calendar"
+msgstr "Falschen Kalenner"
+
+#: lib/app.php:60 lib/object.php:332
msgid "Birthday"
-msgstr ""
+msgstr "Gebuertsdag"
-#: lib/object.php:293
+#: lib/app.php:61 lib/object.php:333
msgid "Business"
-msgstr ""
+msgstr "Geschäftlech"
-#: lib/object.php:294
+#: lib/app.php:62 lib/object.php:334
msgid "Call"
-msgstr ""
+msgstr "Uruff"
-#: lib/object.php:295
+#: lib/app.php:63 lib/object.php:335
msgid "Clients"
-msgstr ""
+msgstr "Clienten"
-#: lib/object.php:296
+#: lib/app.php:64 lib/object.php:336
msgid "Deliverer"
-msgstr ""
+msgstr "Liwwerant"
-#: lib/object.php:297
+#: lib/app.php:65 lib/object.php:337
msgid "Holidays"
-msgstr ""
+msgstr "Vakanzen"
-#: lib/object.php:298
+#: lib/app.php:66 lib/object.php:338
msgid "Ideas"
-msgstr ""
+msgstr "Ideeën"
-#: lib/object.php:299
+#: lib/app.php:67 lib/object.php:339
msgid "Journey"
-msgstr ""
+msgstr "Dag"
-#: lib/object.php:300
+#: lib/app.php:68 lib/object.php:340
msgid "Jubilee"
-msgstr ""
+msgstr "Jubiläum"
-#: lib/object.php:301
+#: lib/app.php:69 lib/object.php:341
msgid "Meeting"
-msgstr ""
+msgstr "Meeting"
-#: lib/object.php:302
+#: lib/app.php:70 lib/object.php:342
msgid "Other"
-msgstr ""
+msgstr "Aner"
-#: lib/object.php:303
+#: lib/app.php:71 lib/object.php:343
msgid "Personal"
-msgstr ""
+msgstr "Perséinlech"
-#: lib/object.php:304
+#: lib/app.php:72 lib/object.php:344
msgid "Projects"
-msgstr ""
+msgstr "Projeten"
-#: lib/object.php:305
+#: lib/app.php:73 lib/object.php:345
msgid "Questions"
-msgstr ""
+msgstr "Froen"
-#: lib/object.php:306
+#: lib/app.php:74 lib/object.php:346
msgid "Work"
-msgstr ""
+msgstr "Aarbecht"
-#: lib/object.php:313
+#: lib/object.php:353
msgid "Does not repeat"
msgstr "Widderhëlt sech net"
-#: lib/object.php:314
+#: lib/object.php:354
msgid "Daily"
msgstr "Deeglech"
-#: lib/object.php:315
+#: lib/object.php:355
msgid "Weekly"
msgstr "All Woch"
-#: lib/object.php:316
+#: lib/object.php:356
msgid "Every Weekday"
msgstr "All Wochendag"
-#: lib/object.php:317
+#: lib/object.php:357
msgid "Bi-Weekly"
msgstr "All zweet Woch"
-#: lib/object.php:318
+#: lib/object.php:358
msgid "Monthly"
msgstr "All Mount"
-#: lib/object.php:319
+#: lib/object.php:359
msgid "Yearly"
msgstr "All Joer"
-#: lib/object.php:337
-msgid "Not an array"
+#: lib/object.php:366
+msgid "never"
msgstr ""
-#: templates/calendar.php:3
-msgid "All day"
-msgstr "All Dag"
+#: lib/object.php:367
+msgid "by occurrences"
+msgstr ""
-#: templates/calendar.php:32
-msgid "Sunday"
-msgstr "Sonnden"
+#: lib/object.php:368
+msgid "by date"
+msgstr ""
+
+#: lib/object.php:375
+msgid "by monthday"
+msgstr ""
+
+#: lib/object.php:376
+msgid "by weekday"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:383 templates/lAfix.php:3
msgid "Monday"
-msgstr "Méinden"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:384 templates/lAfix.php:4
msgid "Tuesday"
-msgstr "Dënschden"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:385 templates/lAfix.php:5
msgid "Wednesday"
-msgstr "Mëttwoch"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:386 templates/lAfix.php:6
msgid "Thursday"
-msgstr "Donneschden"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:387 templates/lAfix.php:7
msgid "Friday"
-msgstr "Freiden"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:388 templates/lAfix.php:8
msgid "Saturday"
-msgstr "Samschden"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Sun."
-msgstr "So. "
+#: lib/object.php:389 templates/lAfix.php:2
+msgid "Sunday"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Mon."
-msgstr "Méin. "
+#: lib/object.php:396
+msgid "events week of month"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Tue."
-msgstr "Dën."
+#: lib/object.php:397
+msgid "first"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Wed."
-msgstr "Mëtt."
+#: lib/object.php:398
+msgid "second"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Thu."
-msgstr "Do."
+#: lib/object.php:399
+msgid "third"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Fri."
-msgstr "Fr."
+#: lib/object.php:400
+msgid "fourth"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Sat."
-msgstr "Sam."
+#: lib/object.php:401
+msgid "fifth"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:402
+msgid "last"
+msgstr ""
+
+#: lib/object.php:424 templates/lAfix.php:16
msgid "January"
-msgstr "Januar"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:425 templates/lAfix.php:17
msgid "February"
-msgstr "Februar"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:426 templates/lAfix.php:18
msgid "March"
-msgstr "Mäerz"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:427 templates/lAfix.php:19
msgid "April"
-msgstr "Abrëll"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:428 templates/lAfix.php:20
msgid "May"
-msgstr "Mäi"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:429 templates/lAfix.php:21
msgid "June"
-msgstr "Juni"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:430 templates/lAfix.php:22
msgid "July"
-msgstr "Juli"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:431 templates/lAfix.php:23
msgid "August"
-msgstr "August"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:432 templates/lAfix.php:24
msgid "September"
-msgstr "September"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:433 templates/lAfix.php:25
msgid "October"
-msgstr "Oktober"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:434 templates/lAfix.php:26
msgid "November"
-msgstr "November"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:435 templates/lAfix.php:27
msgid "December"
-msgstr "Dezember"
-
-#: templates/calendar.php:35
-msgid "Jan."
-msgstr "Jan."
+msgstr ""
-#: templates/calendar.php:35
-msgid "Feb."
-msgstr "Feb."
+#: lib/object.php:441
+msgid "by events date"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Mar."
-msgstr "Mär."
+#: lib/object.php:442
+msgid "by yearday(s)"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Apr."
-msgstr "Abr."
+#: lib/object.php:443
+msgid "by weeknumber(s)"
+msgstr ""
-#: templates/calendar.php:35
-msgid "May."
+#: lib/object.php:444
+msgid "by day and month"
msgstr ""
-#: templates/calendar.php:35
-msgid "Jun."
-msgstr "Jun."
+#: lib/object.php:467
+msgid "Not an array"
+msgstr "Keen array"
-#: templates/calendar.php:35
-msgid "Jul."
-msgstr "Jul."
+#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+msgid "Date"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Aug."
-msgstr "Aug."
+#: lib/search.php:40
+msgid "Cal."
+msgstr ""
-#: templates/calendar.php:35
-msgid "Sep."
-msgstr "Sep."
+#: templates/calendar.php:10
+msgid "All day"
+msgstr "All Dag"
-#: templates/calendar.php:35
-msgid "Oct."
-msgstr "Okt."
+#: templates/calendar.php:11
+msgid "Missing fields"
+msgstr "Felder déi feelen"
-#: templates/calendar.php:35
-msgid "Nov."
-msgstr "Nov."
+#: templates/calendar.php:12 templates/part.eventform.php:3
+msgid "Title"
+msgstr "Titel"
-#: templates/calendar.php:35
-msgid "Dec."
-msgstr "Dez."
+#: templates/calendar.php:14
+msgid "From Date"
+msgstr "Vun Datum"
-#: templates/calendar.php:36 templates/calendar.php:50
-#: templates/calendar.php:116
-msgid "Week"
-msgstr "Woch"
+#: templates/calendar.php:15
+msgid "From Time"
+msgstr "Vun Zäit"
-#: templates/calendar.php:37 templates/calendar.php:51
-msgid "Weeks"
-msgstr "Wochen"
+#: templates/calendar.php:16
+msgid "To Date"
+msgstr "Bis Datum"
-#: templates/calendar.php:38
-msgid "More before {startdate}"
-msgstr ""
+#: templates/calendar.php:17
+msgid "To Time"
+msgstr "Bis Zäit"
-#: templates/calendar.php:39
-msgid "More after {enddate}"
-msgstr ""
+#: templates/calendar.php:18
+msgid "The event ends before it starts"
+msgstr "D'Evenement hält op ier et ufänkt"
-#: templates/calendar.php:49
-msgid "Day"
-msgstr "Dag"
+#: templates/calendar.php:19
+msgid "There was a database fail"
+msgstr "En Datebank Feeler ass opgetrueden"
#: templates/calendar.php:52
+msgid "Week"
+msgstr "Woch"
+
+#: templates/calendar.php:53
msgid "Month"
msgstr "Mount"
-#: templates/calendar.php:53
+#: templates/calendar.php:54
msgid "List"
-msgstr ""
+msgstr "Lescht"
-#: templates/calendar.php:58
+#: templates/calendar.php:59
msgid "Today"
msgstr "Haut"
-#: templates/calendar.php:59
+#: templates/calendar.php:60
msgid "Calendars"
msgstr "Kalenneren"
-#: templates/calendar.php:76 templates/calendar.php:94
-msgid "Time"
-msgstr "Zäit"
-
-#: templates/calendar.php:169
+#: templates/calendar.php:78
msgid "There was a fail, while parsing the file."
msgstr "Feeler beim lueden vum Fichier."
+#: templates/lAfix.php:9
+msgid "Sun."
+msgstr ""
+
+#: templates/lAfix.php:10
+msgid "Mon."
+msgstr ""
+
+#: templates/lAfix.php:11
+msgid "Tue."
+msgstr ""
+
+#: templates/lAfix.php:12
+msgid "Wed."
+msgstr ""
+
+#: templates/lAfix.php:13
+msgid "Thu."
+msgstr ""
+
+#: templates/lAfix.php:14
+msgid "Fri."
+msgstr ""
+
+#: templates/lAfix.php:15
+msgid "Sat."
+msgstr ""
+
+#: templates/lAfix.php:28
+msgid "Jan."
+msgstr ""
+
+#: templates/lAfix.php:29
+msgid "Feb."
+msgstr ""
+
+#: templates/lAfix.php:30
+msgid "Mar."
+msgstr ""
+
+#: templates/lAfix.php:31
+msgid "Apr."
+msgstr ""
+
+#: templates/lAfix.php:32
+msgid "May."
+msgstr ""
+
+#: templates/lAfix.php:33
+msgid "Jun."
+msgstr ""
+
+#: templates/lAfix.php:34
+msgid "Jul."
+msgstr ""
+
+#: templates/lAfix.php:35
+msgid "Aug."
+msgstr ""
+
+#: templates/lAfix.php:36
+msgid "Sep."
+msgstr ""
+
+#: templates/lAfix.php:37
+msgid "Oct."
+msgstr ""
+
+#: templates/lAfix.php:38
+msgid "Nov."
+msgstr ""
+
+#: templates/lAfix.php:39
+msgid "Dec."
+msgstr ""
+
#: templates/part.choosecalendar.php:1
msgid "Choose active calendars"
msgstr "Wiel aktiv Kalenneren aus"
#: templates/part.choosecalendar.php:15
msgid "New Calendar"
-msgstr ""
+msgstr "Neien Kalenner"
#: templates/part.choosecalendar.php:20
#: templates/part.choosecalendar.rowfields.php:4
msgid "CalDav Link"
-msgstr ""
+msgstr "CalDav Link"
#: templates/part.choosecalendar.rowfields.php:4
msgid "Download"
msgstr "Eroflueden"
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.eventinfo.php:64
msgid "Edit"
msgstr "Editéieren"
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.editevent.php:8
+#: templates/part.editevent.php:9
msgid "Delete"
-msgstr ""
+msgstr "Läschen"
#: templates/part.editcalendar.php:9
msgid "New calendar"
-msgstr ""
+msgstr "Neien Kalenner"
#: templates/part.editcalendar.php:9
msgid "Edit calendar"
@@ -376,90 +457,181 @@ msgstr "Numm"
msgid "Active"
msgstr "Aktiv"
-#: templates/part.editcalendar.php:29 templates/part.eventform.php:88
-#: templates/part.eventinfo.php:58
-msgid "Description"
-msgstr "Beschreiwung"
-
-#: templates/part.editcalendar.php:35
+#: templates/part.editcalendar.php:29
msgid "Calendar color"
msgstr "Fuerf vum Kalenner"
-#: templates/part.editcalendar.php:41
+#: templates/part.editcalendar.php:42
msgid "Save"
-msgstr ""
+msgstr "Späicheren"
-#: templates/part.editcalendar.php:41 templates/part.editevent.php:7
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
#: templates/part.newevent.php:6
msgid "Submit"
msgstr "Fortschécken"
-#: templates/part.editcalendar.php:42
+#: templates/part.editcalendar.php:43
msgid "Cancel"
-msgstr ""
+msgstr "Ofbriechen"
-#: templates/part.editevent.php:1 templates/part.eventinfo.php:1
+#: templates/part.editevent.php:1
msgid "Edit an event"
msgstr "Evenement editéieren"
-#: templates/part.eventform.php:3 templates/part.eventinfo.php:4
-msgid "Title"
-msgstr "Titel"
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr "Export"
#: templates/part.eventform.php:5
msgid "Title of the Event"
msgstr "Titel vum Evenement"
-#: templates/part.eventform.php:9 templates/part.eventinfo.php:9
-msgid "Location"
-msgstr "Uert"
-
#: templates/part.eventform.php:11
-msgid "Location of the Event"
-msgstr "Uert vum Evenement"
-
-#: templates/part.eventform.php:17 templates/part.eventinfo.php:16
msgid "Category"
msgstr "Kategorie"
-#: templates/part.eventform.php:19
+#: templates/part.eventform.php:13
msgid "Select category"
-msgstr ""
+msgstr "Kategorie auswielen"
-#: templates/part.eventform.php:45 templates/part.eventinfo.php:28
+#: templates/part.eventform.php:37
msgid "All Day Event"
msgstr "Ganz-Dag Evenement"
-#: templates/part.eventform.php:49 templates/part.eventinfo.php:31
+#: templates/part.eventform.php:41
msgid "From"
msgstr "Vun"
-#: templates/part.eventform.php:57 templates/part.eventinfo.php:38
+#: templates/part.eventform.php:49
msgid "To"
msgstr "Fir"
-#: templates/part.eventform.php:65 templates/part.eventinfo.php:44
+#: templates/part.eventform.php:57
+msgid "Advanced options"
+msgstr "Avancéiert Optiounen"
+
+#: templates/part.eventform.php:61
msgid "Repeat"
msgstr "Widderhuelen"
-#: templates/part.eventform.php:81 templates/part.eventinfo.php:51
-msgid "Attendees"
-msgstr "Participanten"
+#: templates/part.eventform.php:68
+msgid "Advanced"
+msgstr ""
+
+#: templates/part.eventform.php:112
+msgid "Select weekdays"
+msgstr ""
+
+#: templates/part.eventform.php:125 templates/part.eventform.php:138
+msgid "Select days"
+msgstr ""
+
+#: templates/part.eventform.php:130
+msgid "and the events day of year."
+msgstr ""
+
+#: templates/part.eventform.php:143
+msgid "and the events day of month."
+msgstr ""
+
+#: templates/part.eventform.php:151
+msgid "Select months"
+msgstr ""
+
+#: templates/part.eventform.php:164
+msgid "Select weeks"
+msgstr ""
+
+#: templates/part.eventform.php:169
+msgid "and the events week of year."
+msgstr ""
+
+#: templates/part.eventform.php:175
+msgid "Interval"
+msgstr ""
+
+#: templates/part.eventform.php:181
+msgid "End"
+msgstr ""
+
+#: templates/part.eventform.php:193
+msgid "occurrences"
+msgstr ""
-#: templates/part.eventform.php:89
+#: templates/part.eventform.php:208
+msgid "Location"
+msgstr "Uert"
+
+#: templates/part.eventform.php:210
+msgid "Location of the Event"
+msgstr "Uert vum Evenement"
+
+#: templates/part.eventform.php:216
+msgid "Description"
+msgstr "Beschreiwung"
+
+#: templates/part.eventform.php:218
msgid "Description of the Event"
msgstr "Beschreiwung vum Evenement"
-#: templates/part.eventinfo.php:63
-msgid "Close"
-msgstr "Zoumaachen"
+#: templates/part.import.php:1
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the calendar"
+msgstr "Wiel den Kalenner aus"
+
+#: templates/part.import.php:10
+msgid "create a new calendar"
+msgstr ""
+
+#: templates/part.import.php:15
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import"
+msgstr "Import"
+
+#: templates/part.import.php:20
+msgid "Importing calendar"
+msgstr ""
+
+#: templates/part.import.php:23
+msgid "Calendar imported successfully"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Close Dialog"
+msgstr ""
#: templates/part.newevent.php:1
msgid "Create a new event"
msgstr "En Evenement maachen"
-#: templates/settings.php:11
+#: templates/settings.php:13
msgid "Timezone"
msgstr "Zäitzon"
+#: templates/settings.php:30
+msgid "Check always for changes of the timezone"
+msgstr ""
+
+#: templates/settings.php:32
+msgid "Timeformat"
+msgstr "Zäit Format"
+
+#: templates/settings.php:34
+msgid "24h"
+msgstr "24h"
+
+#: templates/settings.php:35
+msgid "12h"
+msgstr "12h"
+
+#: templates/settings.php:41
+msgid "Calendar CalDAV syncing address:"
+msgstr "CalDAV Kalenner Synchronisatioun's Adress:"
+
diff --git a/l10n/lb/contacts.po b/l10n/lb/contacts.po
index 63d22e6f7c8..54489a11088 100644
--- a/l10n/lb/contacts.po
+++ b/l10n/lb/contacts.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <sim0n@trypill.org>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 20:10+0200\n"
-"PO-Revision-Date: 2011-09-23 18:11+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Luxembourgish (http://www.transifex.net/projects/p/owncloud/team/lb/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,164 +18,273 @@ msgstr ""
"Language: lb\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/addcard.php:31 ajax/addproperty.php:31 ajax/deletebook.php:32
-#: ajax/deletecard.php:32 ajax/deleteproperty.php:34 ajax/getdetails.php:32
-#: ajax/setproperty.php:32 ajax/showaddcard.php:30 ajax/showaddproperty.php:31
-#: ajax/showsetproperty.php:32 photo.php:32
-msgid "You need to log in."
+#: ajax/activation.php:17 ajax/updateaddressbook.php:26
+msgid "Error (de)activating addressbook."
msgstr ""
-#: ajax/addcard.php:37
-msgid "This is not your addressbook."
+#: ajax/addcard.php:79
+msgid "There was an error adding the contact."
msgstr ""
-#: ajax/addproperty.php:37 ajax/deletecard.php:39 ajax/deleteproperty.php:41
-#: ajax/getdetails.php:39 ajax/setproperty.php:38 ajax/showaddproperty.php:37
-#: ajax/showsetproperty.php:38 photo.php:39
-msgid "Contact could not be found."
+#: ajax/addproperty.php:39
+msgid "Cannot add empty property."
msgstr ""
-#: ajax/addproperty.php:43 ajax/deletebook.php:38 ajax/deletecard.php:45
-#: ajax/deleteproperty.php:47 ajax/getdetails.php:45 ajax/setproperty.php:44
-#: ajax/showaddproperty.php:43 ajax/showsetproperty.php:44 photo.php:45
-msgid "This is not your contact."
+#: ajax/addproperty.php:51
+msgid "At least one of the address fields has to be filled out."
msgstr ""
-#: ajax/addproperty.php:50 ajax/deleteproperty.php:54 ajax/getdetails.php:52
-#: ajax/setproperty.php:51 ajax/showsetproperty.php:51
-msgid "vCard could not be read."
+#: ajax/addproperty.php:77
+msgid "Error adding contact property."
msgstr ""
-#: ajax/deleteproperty.php:65 ajax/setproperty.php:62
-#: ajax/showsetproperty.php:62
-msgid "Information about vCard is incorrect. Please reload the page."
+#: ajax/createaddressbook.php:20
+msgid "Error adding addressbook."
msgstr ""
-#: photo.php:53
-msgid "This card is not RFC compatible."
+#: ajax/createaddressbook.php:26
+msgid "Error activating addressbook."
msgstr ""
-#: photo.php:90
-msgid "This card does not contain a photo."
+#: ajax/deleteproperty.php:40
+msgid "Error deleting contact property."
msgstr ""
-#: templates/index.php:8
-msgid "Add Contact"
+#: ajax/setproperty.php:79
+msgid "Error updating contact property."
msgstr ""
-#: templates/part.addcardform.php:5
-msgid "Group"
+#: ajax/updateaddressbook.php:20
+msgid "Error updating addressbook."
msgstr ""
-#: templates/part.addcardform.php:12 templates/part.property.php:3
-msgid "Name"
+#: appinfo/app.php:21 templates/settings.php:3
+msgid "Contacts"
msgstr ""
-#: templates/part.addcardform.php:14
-msgid "Create Contact"
-msgstr ""
+#: lib/app.php:42
+msgid "This is not your addressbook."
+msgstr "Dat do ass net däin Adressbuch."
-#: templates/part.addpropertyform.php:4 templates/part.property.php:40
+#: lib/app.php:51 photo.php:34
+msgid "Contact could not be found."
+msgstr "Konnt den Kontakt net fannen."
+
+#: lib/app.php:79
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "Informatioun iwwert vCard ass net richteg. Lued d'Säit wegl nei."
+
+#: lib/app.php:91 templates/part.addcardform.php:54
+#: templates/part.property.php:45 templates/part.setpropertyform.php:7
msgid "Address"
-msgstr ""
+msgstr "Adress"
-#: templates/part.addpropertyform.php:5
+#: lib/app.php:92 templates/part.addcardform.php:43
msgid "Telephone"
-msgstr ""
+msgstr "Telefon's Nummer"
-#: templates/part.addpropertyform.php:6 templates/part.property.php:22
+#: lib/app.php:93 templates/part.addcardform.php:37
+#: templates/part.property.php:16 templates/part.setpropertyform.php:51
msgid "Email"
-msgstr ""
+msgstr "Email"
-#: templates/part.addpropertyform.php:7 templates/part.property.php:15
+#: lib/app.php:94 templates/part.addcardform.php:27
+#: templates/part.property.php:9 templates/part.setpropertyform.php:54
msgid "Organization"
-msgstr ""
+msgstr "Firma"
-#: templates/part.addpropertyform.php:17 templates/part.addpropertyform.php:32
+#: lib/app.php:106 lib/app.php:113
msgid "Work"
-msgstr ""
+msgstr "Aarbecht"
-#: templates/part.addpropertyform.php:18 templates/part.addpropertyform.php:30
+#: lib/app.php:107 lib/app.php:111
msgid "Home"
+msgstr "Doheem"
+
+#: lib/app.php:112
+msgid "Mobile"
+msgstr "GSM"
+
+#: lib/app.php:114
+msgid "Text"
+msgstr "SMS"
+
+#: lib/app.php:115
+msgid "Voice"
+msgstr "Voice"
+
+#: lib/app.php:116
+msgid "Fax"
+msgstr "Fax"
+
+#: lib/app.php:117
+msgid "Video"
+msgstr "Video"
+
+#: lib/app.php:118
+msgid "Pager"
+msgstr "Pager"
+
+#: lib/search.php:22
+msgid "Contact"
msgstr ""
-#: templates/part.addpropertyform.php:20 templates/part.property.php:48
-#: templates/part.setpropertyform.php:5
-msgid "PO Box"
+#: photo.php:40
+msgid "This is not your contact."
+msgstr "Dat do ass net däin Kontakt."
+
+#: photo.php:48
+msgid "This card is not RFC compatible."
+msgstr "Déi do Kaart ass net RFC kompatibel."
+
+#: photo.php:85
+msgid "This card does not contain a photo."
+msgstr "Déi do Kaart huet keng Foto."
+
+#: templates/index.php:6
+msgid "Add Contact"
+msgstr "Kontakt bäisetzen"
+
+#: templates/index.php:7
+msgid "Addressbooks"
msgstr ""
-#: templates/part.addpropertyform.php:21 templates/part.property.php:51
-#: templates/part.setpropertyform.php:6
-msgid "Extended"
+#: templates/part.addcardform.php:8
+msgid "Addressbook"
msgstr ""
-#: templates/part.addpropertyform.php:22 templates/part.property.php:54
-#: templates/part.setpropertyform.php:7
-msgid "Street"
+#: templates/part.addcardform.php:21
+msgid "Name"
+msgstr "Numm"
+
+#: templates/part.addcardform.php:57 templates/part.details.php:43
+#: templates/part.details.php:79 templates/part.setpropertyform.php:10
+#: templates/part.setpropertyform.php:47
+msgid "Type"
msgstr ""
-#: templates/part.addpropertyform.php:23 templates/part.property.php:57
-#: templates/part.setpropertyform.php:8
+#: templates/part.addcardform.php:65 templates/part.details.php:49
+#: templates/part.setpropertyform.php:16
+msgid "PO Box"
+msgstr "Postleetzuel"
+
+#: templates/part.addcardform.php:72 templates/part.details.php:53
+#: templates/part.setpropertyform.php:20
+msgid "Extended"
+msgstr "Erweidert"
+
+#: templates/part.addcardform.php:78 templates/part.details.php:57
+#: templates/part.setpropertyform.php:24
+msgid "Street"
+msgstr "Strooss"
+
+#: templates/part.addcardform.php:84 templates/part.details.php:61
+#: templates/part.setpropertyform.php:28
msgid "City"
-msgstr ""
+msgstr "Staat"
-#: templates/part.addpropertyform.php:24 templates/part.property.php:60
-#: templates/part.setpropertyform.php:9
+#: templates/part.addcardform.php:90 templates/part.details.php:65
+#: templates/part.setpropertyform.php:32
msgid "Region"
-msgstr ""
+msgstr "Regioun"
-#: templates/part.addpropertyform.php:25 templates/part.property.php:63
-#: templates/part.setpropertyform.php:10
+#: templates/part.addcardform.php:96 templates/part.details.php:69
+#: templates/part.setpropertyform.php:36
msgid "Zipcode"
-msgstr ""
+msgstr "Postleetzuel"
-#: templates/part.addpropertyform.php:26 templates/part.property.php:66
-#: templates/part.setpropertyform.php:11
+#: templates/part.addcardform.php:102 templates/part.details.php:73
+#: templates/part.setpropertyform.php:40
msgid "Country"
+msgstr "Land"
+
+#: templates/part.addcardform.php:109
+msgid "Create Contact"
+msgstr "Kontakt erstellen"
+
+#: templates/part.chooseaddressbook.php:1
+msgid "Choose active Address Books"
msgstr ""
-#: templates/part.addpropertyform.php:31
-msgid "Mobile"
+#: templates/part.chooseaddressbook.php:16
+msgid "New Address Book"
msgstr ""
-#: templates/part.addpropertyform.php:33
-msgid "Text"
+#: templates/part.chooseaddressbook.php:21
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "CardDav Link"
msgstr ""
-#: templates/part.addpropertyform.php:34
-msgid "Voice"
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Download"
msgstr ""
-#: templates/part.addpropertyform.php:35
-msgid "Fax"
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Edit"
+msgstr "Editéieren"
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Delete"
+msgstr "Läschen"
+
+#: templates/part.details.php:3
+msgid "Download contact"
msgstr ""
-#: templates/part.addpropertyform.php:36
-msgid "Video"
+#: templates/part.details.php:4
+msgid "Delete contact"
msgstr ""
-#: templates/part.addpropertyform.php:37
-msgid "Pager"
+#: templates/part.details.php:34
+msgid "Add"
msgstr ""
-#: templates/part.details.php:33
-msgid "Delete"
+#: templates/part.editaddressbook.php:9
+msgid "New Addressbook"
msgstr ""
-#: templates/part.details.php:34
-msgid "Add Property"
+#: templates/part.editaddressbook.php:9
+msgid "Edit Addressbook"
msgstr ""
-#: templates/part.property.php:9
+#: templates/part.editaddressbook.php:12
+msgid "Displayname"
+msgstr ""
+
+#: templates/part.editaddressbook.php:23
+msgid "Active"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Save"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Submit"
+msgstr ""
+
+#: templates/part.editaddressbook.php:30
+msgid "Cancel"
+msgstr ""
+
+#: templates/part.property.php:3
msgid "Birthday"
+msgstr "Gebuertsdag"
+
+#: templates/part.property.php:23
+msgid "Preferred"
msgstr ""
-#: templates/part.property.php:29
+#: templates/part.property.php:23 templates/part.setpropertyform.php:45
msgid "Phone"
+msgstr "Telefon"
+
+#: templates/part.setpropertyform.php:57
+msgid "Update"
msgstr ""
-#: templates/part.setpropertyform.php:17
-msgid "Edit"
+#: templates/settings.php:4
+msgid "CardDAV syncing address:"
msgstr ""
diff --git a/l10n/lb/core.po b/l10n/lb/core.po
index 9e0db1c821d..325db00a595 100644
--- a/l10n/lb/core.po
+++ b/l10n/lb/core.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 18:17+0200\n"
-"PO-Revision-Date: 2011-09-17 14:32+0000\n"
-"Last-Translator: sim0n <sim0n@trypill.org>\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Luxembourgish (http://www.transifex.net/projects/p/owncloud/team/lb/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,6 +18,52 @@ msgstr ""
"Language: lb\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+#: lostpassword/index.php:24
+msgid "Owncloud password reset"
+msgstr ""
+
+#: lostpassword/templates/email.php:1
+msgid "Use the following link to reset your password: {link}"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr ""
+"Du kriss en Link fir däin Passwuert nei ze setzen via Email geschéckt."
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Requested"
+msgstr "Gefrot"
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr "Falschen Login!"
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:22
+#: templates/login.php:8
+msgid "Username"
+msgstr "Benotzernumm"
+
+#: lostpassword/templates/lostpassword.php:14
+msgid "Request reset"
+msgstr "Reset ufroen"
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr "Dän Passwuert ass zeréck gesat gin"
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr "Neit Passwuert"
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr "Passwuert zeréck setzen"
+
#: strings.php:5
msgid "Personal"
msgstr "Perséinlech"
@@ -46,54 +92,50 @@ msgstr "Cloud net fonnt"
msgid "Create an <strong>admin account</strong>"
msgstr "En <strong>Admin Account</strong> uleeën"
-#: templates/installation.php:21
-msgid "Username"
-msgstr "Benotzernumm"
-
-#: templates/installation.php:22
+#: templates/installation.php:26 templates/login.php:12
msgid "Password"
msgstr "Passwuert"
-#: templates/installation.php:27
+#: templates/installation.php:32
+msgid "Advanced"
+msgstr "Erweidert"
+
+#: templates/installation.php:34
+msgid "Data folder"
+msgstr "Daten Dossier"
+
+#: templates/installation.php:41
msgid "Configure the database"
msgstr "Datebank konfiguréieren"
-#: templates/installation.php:32 templates/installation.php:43
-#: templates/installation.php:53
+#: templates/installation.php:46 templates/installation.php:57
+#: templates/installation.php:67
msgid "will be used"
msgstr "wärt benotzt ginn"
-#: templates/installation.php:64
+#: templates/installation.php:79
msgid "Database user"
msgstr "Datebank Benotzer"
-#: templates/installation.php:65
+#: templates/installation.php:83
msgid "Database password"
msgstr "Datebank Passwuert"
-#: templates/installation.php:66
+#: templates/installation.php:87
msgid "Database name"
msgstr "Datebank Numm"
-#: templates/installation.php:72
-msgid "Advanced"
-msgstr "Erweidert"
-
-#: templates/installation.php:75
+#: templates/installation.php:93
msgid "Database host"
msgstr "Datebank Server"
-#: templates/installation.php:76
-msgid "Data folder"
-msgstr "Daten Dossier"
-
-#: templates/installation.php:79
+#: templates/installation.php:98
msgid "Finish setup"
msgstr "Installatioun ofschléissen"
#: templates/layout.guest.php:35
-msgid "gives you freedom and control over your own data"
-msgstr "gëtt dir Fräiheet an Kontroll iwwert deng eegen Daten"
+msgid "web services under your control"
+msgstr ""
#: templates/layout.user.php:34
msgid "Log out"
@@ -103,39 +145,22 @@ msgstr "Ausloggen"
msgid "Settings"
msgstr "Astellungen"
-#: templates/login.php:4
+#: templates/login.php:5
msgid "Lost your password?"
msgstr "Passwuert vergiess?"
-#: templates/login.php:9 templates/login.php:13
+#: templates/login.php:15
msgid "remember"
msgstr "verhalen"
+#: templates/login.php:16
+msgid "Log in"
+msgstr ""
+
#: templates/logout.php:1
msgid "You are logged out."
msgstr "Du bass ausgeloggt."
-#: templates/lostpassword.php:3
-msgid "You will receive a link to reset your password via Email."
-msgstr ""
-"Du kriss per E-mail en Link geschéckt fir däin Passwuert nei ze setzen."
-
-#: templates/lostpassword.php:5
-msgid "Requested"
-msgstr "Verlaangt"
-
-#: templates/lostpassword.php:8
-msgid "Login failed!"
-msgstr "Aloggen feelgeschloen!"
-
-#: templates/lostpassword.php:10
-msgid "Username or Email"
-msgstr "Benotzernumm oder E-Mail"
-
-#: templates/lostpassword.php:11
-msgid "Request reset"
-msgstr "Reset ufroen"
-
#: templates/part.pagenavi.php:3
msgid "prev"
msgstr "zeréck"
@@ -144,16 +169,4 @@ msgstr "zeréck"
msgid "next"
msgstr "weider"
-#: templates/resetpassword.php:4
-msgid "Your password was reset"
-msgstr "Dän Passwuert ass nei gesat ginn"
-
-#: templates/resetpassword.php:6
-msgid "New password"
-msgstr "Neit Passwuert"
-
-#: templates/resetpassword.php:7
-msgid "Reset password"
-msgstr "Passwuert nei setzen"
-
diff --git a/l10n/lb/files.po b/l10n/lb/files.po
index 795847eb7ab..2580734d259 100644
--- a/l10n/lb/files.po
+++ b/l10n/lb/files.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Luxembourgish (http://www.transifex.net/projects/p/owncloud/team/lb/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,33 +18,37 @@ msgstr ""
"Language: lb\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/upload.php:24
+#: ajax/upload.php:19
msgid "There is no error, the file uploaded with success"
-msgstr ""
+msgstr "Keen Feeler, Datei ass komplett ropgelueden ginn"
-#: ajax/upload.php:25
+#: ajax/upload.php:20
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr ""
+"Déi ropgelueden Datei ass méi grouss wei d'upload_max_filesize Eegenschaft "
+"an der php.ini"
-#: ajax/upload.php:26
+#: ajax/upload.php:21
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
+"Déi ropgelueden Datei ass méi grouss wei d'MAX_FILE_SIZE Eegenschaft déi an "
+"der HTML form uginn ass"
-#: ajax/upload.php:27
+#: ajax/upload.php:22
msgid "The uploaded file was only partially uploaded"
-msgstr ""
+msgstr "Déi ropgelueden Datei ass nëmmen hallef ropgelueden ginn"
-#: ajax/upload.php:28
+#: ajax/upload.php:23
msgid "No file was uploaded"
-msgstr ""
+msgstr "Et ass keng Datei ropgelueden ginn"
-#: ajax/upload.php:29
+#: ajax/upload.php:24
msgid "Missing a temporary folder"
-msgstr ""
+msgstr "Et feelt en temporären Dossier"
-#: appinfo/app.php:7
+#: appinfo/app.php:8
msgid "Files"
msgstr "Dateien"
@@ -52,43 +56,55 @@ msgstr "Dateien"
msgid "Maximum upload size"
msgstr "Maximum Upload Gréisst "
+#: templates/index.php:7
+msgid "New"
+msgstr ""
+
#: templates/index.php:10
+msgid "Text file"
+msgstr ""
+
+#: templates/index.php:11
+msgid "Folder"
+msgstr ""
+
+#: templates/index.php:12
+msgid "From the web"
+msgstr ""
+
+#: templates/index.php:22
msgid "Upload"
msgstr "Eroplueden"
-#: templates/index.php:17
-msgid "New Folder"
-msgstr "Neien Dossier"
-
-#: templates/index.php:31
+#: templates/index.php:35
msgid "Nothing in here. Upload something!"
msgstr "Hei ass näischt. Lued eppes rop!"
-#: templates/index.php:39
+#: templates/index.php:43
msgid "Name"
msgstr "Numm"
-#: templates/index.php:41
+#: templates/index.php:45
msgid "Download"
msgstr "Eroflueden"
-#: templates/index.php:45
+#: templates/index.php:49
msgid "Size"
msgstr "Gréisst"
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Modified"
msgstr "Geännert"
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Delete"
msgstr "Läschen"
-#: templates/index.php:54
+#: templates/index.php:58
msgid "Upload too large"
msgstr "Upload ze grouss"
-#: templates/index.php:56
+#: templates/index.php:60
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
diff --git a/l10n/lb/gallery.po b/l10n/lb/gallery.po
new file mode 100644
index 00000000000..6479414e17a
--- /dev/null
+++ b/l10n/lb/gallery.po
@@ -0,0 +1,32 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:48+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Luxembourgish (http://www.transifex.net/projects/p/owncloud/team/lb/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: lb\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:41
+msgid "Gallery"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Rescan"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+
diff --git a/l10n/lb/media.po b/l10n/lb/media.po
index a6123404729..57de6b20880 100644
--- a/l10n/lb/media.po
+++ b/l10n/lb/media.po
@@ -2,14 +2,15 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
+# Translators:
# <sim0n@trypill.org>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
-"Report-Msgid-Bugs-To: http://bugs.kde.org/buglist.cgi?product=owncloud\n"
-"POT-Creation-Date: 2011-09-03 14:50+0200\n"
-"PO-Revision-Date: 2011-08-25 14:24+0000\n"
-"Last-Translator: sim0n <sim0n@trypill.org>\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Luxembourgish (http://www.transifex.net/projects/p/owncloud/team/lb/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,15 +18,15 @@ msgstr ""
"Language: lb\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: appinfo/app.php:31
+#: appinfo/app.php:32
msgid "Music"
msgstr "Musek"
-#: templates/music.php:3
+#: templates/music.php:3 templates/player.php:13
msgid "Play"
msgstr "Ofspillen"
-#: templates/music.php:4 templates/music.php:30
+#: templates/music.php:4 templates/music.php:26 templates/player.php:14
msgid "Pause"
msgstr "Paus"
@@ -33,7 +34,7 @@ msgstr "Paus"
msgid "Previous"
msgstr "Zeréck"
-#: templates/music.php:6
+#: templates/music.php:6 templates/player.php:15
msgid "Next"
msgstr "Weider"
@@ -45,11 +46,7 @@ msgstr "Toun ausmaachen"
msgid "Unmute"
msgstr "Toun umaachen"
-#: templates/music.php:28
-msgid "Songs scanned"
-msgstr "Lidder gescannt"
-
-#: templates/music.php:29
+#: templates/music.php:25
msgid "Rescan Collection"
msgstr "Kollektioun nei scannen"
diff --git a/l10n/lb/settings.po b/l10n/lb/settings.po
index 3f8ef7ff305..ae3884d073b 100644
--- a/l10n/lb/settings.po
+++ b/l10n/lb/settings.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 18:17+0200\n"
-"PO-Revision-Date: 2011-09-17 14:28+0000\n"
-"Last-Translator: sim0n <sim0n@trypill.org>\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Luxembourgish (http://www.transifex.net/projects/p/owncloud/team/lb/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,22 +18,26 @@ msgstr ""
"Language: lb\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/openid.php:13 ajax/setlanguage.php:13
-msgid "Authentication error"
-msgstr "Authentifikatioun's Feeler"
-
-#: ajax/openid.php:21
-msgid "OpenID Changed"
-msgstr "OpenID huet geännert"
+#: ajax/lostpassword.php:14
+msgid "email Changed"
+msgstr ""
-#: ajax/openid.php:23 ajax/setlanguage.php:23
+#: ajax/lostpassword.php:16 ajax/openid.php:17 ajax/setlanguage.php:16
msgid "Invalid request"
msgstr "Ongülteg Requête"
-#: ajax/setlanguage.php:21
+#: ajax/openid.php:15
+msgid "OpenID Changed"
+msgstr "OpenID huet geännert"
+
+#: ajax/setlanguage.php:14
msgid "Language changed"
msgstr "Sprooch huet geännert"
+#: templates/admin.php:13
+msgid "Log level"
+msgstr ""
+
#: templates/apps.php:8
msgid "Add your application"
msgstr "Sätz deng Applikatioun bäi"
@@ -54,17 +58,17 @@ msgstr "vun"
msgid "Ask a question"
msgstr "Stell eng Fro"
-#: templates/help.php:17
+#: templates/help.php:20
msgid "Problems connecting to help database."
msgstr ""
"Problemer sinn opgetrueden beim Versuch sech un d'Hëllef Datebank ze "
"verbannen."
-#: templates/help.php:18
+#: templates/help.php:21
msgid "Go there manually."
msgstr "Gei manuell dohinner."
-#: templates/help.php:26
+#: templates/help.php:29
msgid "Answer"
msgstr "Äntwert"
@@ -100,37 +104,53 @@ msgstr "weisen"
msgid "Change password"
msgstr "Passwuert änneren"
-#: templates/personal.php:24 templates/personal.php:25
+#: templates/personal.php:24
+msgid "Email"
+msgstr ""
+
+#: templates/personal.php:25
+msgid "Your email address"
+msgstr ""
+
+#: templates/personal.php:26
+msgid "Fill in an email address to enable password recovery"
+msgstr ""
+
+#: templates/personal.php:32 templates/personal.php:33
msgid "Language"
msgstr "Sprooch"
-#: templates/personal.php:30
-msgid "Help translating"
-msgstr "Hëllef ze Iwwersetzen"
+#: templates/personal.php:38
+msgid "Help translate"
+msgstr ""
-#: templates/personal.php:37
+#: templates/personal.php:45
msgid "use this address to connect to your ownCloud in your file manager"
msgstr ""
"benotz dës Adress fir dech un deng ownCloud iwwert däin Datei Manager ze "
"verbannen"
-#: templates/users.php:16
+#: templates/users.php:15 templates/users.php:30
msgid "Name"
msgstr "Numm"
-#: templates/users.php:17
+#: templates/users.php:16 templates/users.php:31
msgid "Password"
msgstr "Passwuert"
-#: templates/users.php:18 templates/users.php:36
+#: templates/users.php:17 templates/users.php:32 templates/users.php:46
msgid "Groups"
msgstr "Gruppen"
-#: templates/users.php:24
+#: templates/users.php:23
msgid "Create"
msgstr "Erstellen"
-#: templates/users.php:48
+#: templates/users.php:33
+msgid "Quota"
+msgstr ""
+
+#: templates/users.php:58
msgid "Delete"
msgstr "Läschen"
diff --git a/l10n/lt_LT/calendar.po b/l10n/lt_LT/calendar.po
new file mode 100644
index 00000000000..d26b774fbbb
--- /dev/null
+++ b/l10n/lt_LT/calendar.po
@@ -0,0 +1,637 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Dr. ROX <to.dr.rox@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Lithuanian (Lithuania) (http://www.transifex.net/projects/p/owncloud/team/lt_LT/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: lt_LT\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
+
+#: ajax/guesstimezone.php:42
+msgid "New Timezone:"
+msgstr ""
+
+#: ajax/settimezone.php:22
+msgid "Timezone changed"
+msgstr "Laiko zona pakeista"
+
+#: ajax/settimezone.php:24
+msgid "Invalid request"
+msgstr "Klaidinga užklausa"
+
+#: appinfo/app.php:20 templates/calendar.php:13
+#: templates/part.eventform.php:20
+msgid "Calendar"
+msgstr "Kalendorius"
+
+#: lib/app.php:19
+msgid "Wrong calendar"
+msgstr "Ne tas kalendorius"
+
+#: lib/app.php:60 lib/object.php:332
+msgid "Birthday"
+msgstr "Gimtadienis"
+
+#: lib/app.php:61 lib/object.php:333
+msgid "Business"
+msgstr "Verslas"
+
+#: lib/app.php:62 lib/object.php:334
+msgid "Call"
+msgstr "Skambučiai"
+
+#: lib/app.php:63 lib/object.php:335
+msgid "Clients"
+msgstr "Klientai"
+
+#: lib/app.php:64 lib/object.php:336
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:65 lib/object.php:337
+msgid "Holidays"
+msgstr "Išeiginės"
+
+#: lib/app.php:66 lib/object.php:338
+msgid "Ideas"
+msgstr "Idėjos"
+
+#: lib/app.php:67 lib/object.php:339
+msgid "Journey"
+msgstr "Kelionė"
+
+#: lib/app.php:68 lib/object.php:340
+msgid "Jubilee"
+msgstr "Jubiliejus"
+
+#: lib/app.php:69 lib/object.php:341
+msgid "Meeting"
+msgstr "Susitikimas"
+
+#: lib/app.php:70 lib/object.php:342
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:71 lib/object.php:343
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:72 lib/object.php:344
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:73 lib/object.php:345
+msgid "Questions"
+msgstr ""
+
+#: lib/app.php:74 lib/object.php:346
+msgid "Work"
+msgstr ""
+
+#: lib/object.php:353
+msgid "Does not repeat"
+msgstr "Nekartoti"
+
+#: lib/object.php:354
+msgid "Daily"
+msgstr "Kasdien"
+
+#: lib/object.php:355
+msgid "Weekly"
+msgstr "Kiekvieną savaitę"
+
+#: lib/object.php:356
+msgid "Every Weekday"
+msgstr "Kiekvieną savaitės dieną"
+
+#: lib/object.php:357
+msgid "Bi-Weekly"
+msgstr "Kas dvi savaites"
+
+#: lib/object.php:358
+msgid "Monthly"
+msgstr "Kiekvieną mėnesį"
+
+#: lib/object.php:359
+msgid "Yearly"
+msgstr "Kiekvienais metais"
+
+#: lib/object.php:366
+msgid "never"
+msgstr ""
+
+#: lib/object.php:367
+msgid "by occurrences"
+msgstr ""
+
+#: lib/object.php:368
+msgid "by date"
+msgstr ""
+
+#: lib/object.php:375
+msgid "by monthday"
+msgstr ""
+
+#: lib/object.php:376
+msgid "by weekday"
+msgstr ""
+
+#: lib/object.php:383 templates/lAfix.php:3
+msgid "Monday"
+msgstr ""
+
+#: lib/object.php:384 templates/lAfix.php:4
+msgid "Tuesday"
+msgstr ""
+
+#: lib/object.php:385 templates/lAfix.php:5
+msgid "Wednesday"
+msgstr ""
+
+#: lib/object.php:386 templates/lAfix.php:6
+msgid "Thursday"
+msgstr ""
+
+#: lib/object.php:387 templates/lAfix.php:7
+msgid "Friday"
+msgstr ""
+
+#: lib/object.php:388 templates/lAfix.php:8
+msgid "Saturday"
+msgstr ""
+
+#: lib/object.php:389 templates/lAfix.php:2
+msgid "Sunday"
+msgstr ""
+
+#: lib/object.php:396
+msgid "events week of month"
+msgstr ""
+
+#: lib/object.php:397
+msgid "first"
+msgstr ""
+
+#: lib/object.php:398
+msgid "second"
+msgstr ""
+
+#: lib/object.php:399
+msgid "third"
+msgstr ""
+
+#: lib/object.php:400
+msgid "fourth"
+msgstr ""
+
+#: lib/object.php:401
+msgid "fifth"
+msgstr ""
+
+#: lib/object.php:402
+msgid "last"
+msgstr ""
+
+#: lib/object.php:424 templates/lAfix.php:16
+msgid "January"
+msgstr ""
+
+#: lib/object.php:425 templates/lAfix.php:17
+msgid "February"
+msgstr ""
+
+#: lib/object.php:426 templates/lAfix.php:18
+msgid "March"
+msgstr ""
+
+#: lib/object.php:427 templates/lAfix.php:19
+msgid "April"
+msgstr ""
+
+#: lib/object.php:428 templates/lAfix.php:20
+msgid "May"
+msgstr ""
+
+#: lib/object.php:429 templates/lAfix.php:21
+msgid "June"
+msgstr ""
+
+#: lib/object.php:430 templates/lAfix.php:22
+msgid "July"
+msgstr ""
+
+#: lib/object.php:431 templates/lAfix.php:23
+msgid "August"
+msgstr ""
+
+#: lib/object.php:432 templates/lAfix.php:24
+msgid "September"
+msgstr ""
+
+#: lib/object.php:433 templates/lAfix.php:25
+msgid "October"
+msgstr ""
+
+#: lib/object.php:434 templates/lAfix.php:26
+msgid "November"
+msgstr ""
+
+#: lib/object.php:435 templates/lAfix.php:27
+msgid "December"
+msgstr ""
+
+#: lib/object.php:441
+msgid "by events date"
+msgstr ""
+
+#: lib/object.php:442
+msgid "by yearday(s)"
+msgstr ""
+
+#: lib/object.php:443
+msgid "by weeknumber(s)"
+msgstr ""
+
+#: lib/object.php:444
+msgid "by day and month"
+msgstr ""
+
+#: lib/object.php:467
+msgid "Not an array"
+msgstr "Ne masyvas"
+
+#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+msgid "Date"
+msgstr ""
+
+#: lib/search.php:40
+msgid "Cal."
+msgstr ""
+
+#: templates/calendar.php:10
+msgid "All day"
+msgstr "Visa diena"
+
+#: templates/calendar.php:11
+msgid "Missing fields"
+msgstr "Trūkstami laukai"
+
+#: templates/calendar.php:12 templates/part.eventform.php:3
+msgid "Title"
+msgstr "Pavadinimas"
+
+#: templates/calendar.php:14
+msgid "From Date"
+msgstr ""
+
+#: templates/calendar.php:15
+msgid "From Time"
+msgstr ""
+
+#: templates/calendar.php:16
+msgid "To Date"
+msgstr "Iki datos"
+
+#: templates/calendar.php:17
+msgid "To Time"
+msgstr "Iki laiko"
+
+#: templates/calendar.php:18
+msgid "The event ends before it starts"
+msgstr "Įvykis baigiasi anksčiau nei jis prasideda"
+
+#: templates/calendar.php:19
+msgid "There was a database fail"
+msgstr "Įvyko duomenų bazės klaida"
+
+#: templates/calendar.php:52
+msgid "Week"
+msgstr "Savaitė"
+
+#: templates/calendar.php:53
+msgid "Month"
+msgstr "Mėnuo"
+
+#: templates/calendar.php:54
+msgid "List"
+msgstr "Sąrašas"
+
+#: templates/calendar.php:59
+msgid "Today"
+msgstr "Šiandien"
+
+#: templates/calendar.php:60
+msgid "Calendars"
+msgstr "Kalendoriai"
+
+#: templates/calendar.php:78
+msgid "There was a fail, while parsing the file."
+msgstr "Apdorojant failą įvyko klaida."
+
+#: templates/lAfix.php:9
+msgid "Sun."
+msgstr ""
+
+#: templates/lAfix.php:10
+msgid "Mon."
+msgstr ""
+
+#: templates/lAfix.php:11
+msgid "Tue."
+msgstr ""
+
+#: templates/lAfix.php:12
+msgid "Wed."
+msgstr ""
+
+#: templates/lAfix.php:13
+msgid "Thu."
+msgstr ""
+
+#: templates/lAfix.php:14
+msgid "Fri."
+msgstr ""
+
+#: templates/lAfix.php:15
+msgid "Sat."
+msgstr ""
+
+#: templates/lAfix.php:28
+msgid "Jan."
+msgstr ""
+
+#: templates/lAfix.php:29
+msgid "Feb."
+msgstr ""
+
+#: templates/lAfix.php:30
+msgid "Mar."
+msgstr ""
+
+#: templates/lAfix.php:31
+msgid "Apr."
+msgstr ""
+
+#: templates/lAfix.php:32
+msgid "May."
+msgstr ""
+
+#: templates/lAfix.php:33
+msgid "Jun."
+msgstr ""
+
+#: templates/lAfix.php:34
+msgid "Jul."
+msgstr ""
+
+#: templates/lAfix.php:35
+msgid "Aug."
+msgstr ""
+
+#: templates/lAfix.php:36
+msgid "Sep."
+msgstr ""
+
+#: templates/lAfix.php:37
+msgid "Oct."
+msgstr ""
+
+#: templates/lAfix.php:38
+msgid "Nov."
+msgstr ""
+
+#: templates/lAfix.php:39
+msgid "Dec."
+msgstr ""
+
+#: templates/part.choosecalendar.php:1
+msgid "Choose active calendars"
+msgstr "Pasirinkite naudojamus kalendorius"
+
+#: templates/part.choosecalendar.php:15
+msgid "New Calendar"
+msgstr "Naujas kalendorius"
+
+#: templates/part.choosecalendar.php:20
+#: templates/part.choosecalendar.rowfields.php:4
+msgid "CalDav Link"
+msgstr "CalDav adresas"
+
+#: templates/part.choosecalendar.rowfields.php:4
+msgid "Download"
+msgstr "Atsisiųsti"
+
+#: templates/part.choosecalendar.rowfields.php:4
+msgid "Edit"
+msgstr "Keisti"
+
+#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.editevent.php:9
+msgid "Delete"
+msgstr "Trinti"
+
+#: templates/part.editcalendar.php:9
+msgid "New calendar"
+msgstr "Naujas kalendorius"
+
+#: templates/part.editcalendar.php:9
+msgid "Edit calendar"
+msgstr "Taisyti kalendorių"
+
+#: templates/part.editcalendar.php:12
+msgid "Displayname"
+msgstr "Pavadinimas"
+
+#: templates/part.editcalendar.php:23
+msgid "Active"
+msgstr "Naudojamas"
+
+#: templates/part.editcalendar.php:29
+msgid "Calendar color"
+msgstr ""
+
+#: templates/part.editcalendar.php:42
+msgid "Save"
+msgstr "Išsaugoti"
+
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
+#: templates/part.newevent.php:6
+msgid "Submit"
+msgstr "Išsaugoti"
+
+#: templates/part.editcalendar.php:43
+msgid "Cancel"
+msgstr "Atšaukti"
+
+#: templates/part.editevent.php:1
+msgid "Edit an event"
+msgstr "Taisyti įvykį"
+
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr "Eksportuoti"
+
+#: templates/part.eventform.php:5
+msgid "Title of the Event"
+msgstr "Įvykio pavadinimas"
+
+#: templates/part.eventform.php:11
+msgid "Category"
+msgstr "Kategorija"
+
+#: templates/part.eventform.php:13
+msgid "Select category"
+msgstr "Pasirinkite kategoriją"
+
+#: templates/part.eventform.php:37
+msgid "All Day Event"
+msgstr "Visos dienos įvykis"
+
+#: templates/part.eventform.php:41
+msgid "From"
+msgstr "Nuo"
+
+#: templates/part.eventform.php:49
+msgid "To"
+msgstr "Iki"
+
+#: templates/part.eventform.php:57
+msgid "Advanced options"
+msgstr "Papildomi nustatymai"
+
+#: templates/part.eventform.php:61
+msgid "Repeat"
+msgstr "Kartoti"
+
+#: templates/part.eventform.php:68
+msgid "Advanced"
+msgstr ""
+
+#: templates/part.eventform.php:112
+msgid "Select weekdays"
+msgstr ""
+
+#: templates/part.eventform.php:125 templates/part.eventform.php:138
+msgid "Select days"
+msgstr ""
+
+#: templates/part.eventform.php:130
+msgid "and the events day of year."
+msgstr ""
+
+#: templates/part.eventform.php:143
+msgid "and the events day of month."
+msgstr ""
+
+#: templates/part.eventform.php:151
+msgid "Select months"
+msgstr ""
+
+#: templates/part.eventform.php:164
+msgid "Select weeks"
+msgstr ""
+
+#: templates/part.eventform.php:169
+msgid "and the events week of year."
+msgstr ""
+
+#: templates/part.eventform.php:175
+msgid "Interval"
+msgstr ""
+
+#: templates/part.eventform.php:181
+msgid "End"
+msgstr ""
+
+#: templates/part.eventform.php:193
+msgid "occurrences"
+msgstr ""
+
+#: templates/part.eventform.php:208
+msgid "Location"
+msgstr "Vieta"
+
+#: templates/part.eventform.php:210
+msgid "Location of the Event"
+msgstr "Įvykio vieta"
+
+#: templates/part.eventform.php:216
+msgid "Description"
+msgstr "Aprašymas"
+
+#: templates/part.eventform.php:218
+msgid "Description of the Event"
+msgstr "Įvykio aprašymas"
+
+#: templates/part.import.php:1
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the calendar"
+msgstr "Pasirinkite kalendorių"
+
+#: templates/part.import.php:10
+msgid "create a new calendar"
+msgstr ""
+
+#: templates/part.import.php:15
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import"
+msgstr "Importuoti"
+
+#: templates/part.import.php:20
+msgid "Importing calendar"
+msgstr ""
+
+#: templates/part.import.php:23
+msgid "Calendar imported successfully"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Close Dialog"
+msgstr ""
+
+#: templates/part.newevent.php:1
+msgid "Create a new event"
+msgstr "Sukurti naują įvykį"
+
+#: templates/settings.php:13
+msgid "Timezone"
+msgstr "Laiko juosta"
+
+#: templates/settings.php:30
+msgid "Check always for changes of the timezone"
+msgstr ""
+
+#: templates/settings.php:32
+msgid "Timeformat"
+msgstr "Laiko formatas"
+
+#: templates/settings.php:34
+msgid "24h"
+msgstr "24val"
+
+#: templates/settings.php:35
+msgid "12h"
+msgstr "12val"
+
+#: templates/settings.php:41
+msgid "Calendar CalDAV syncing address:"
+msgstr "CalDAV kalendoriaus synchronizavimo adresas:"
+
+
diff --git a/l10n/lt_LT/contacts.po b/l10n/lt_LT/contacts.po
new file mode 100644
index 00000000000..1180c2251c5
--- /dev/null
+++ b/l10n/lt_LT/contacts.po
@@ -0,0 +1,290 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Dr. ROX <to.dr.rox@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Lithuanian (Lithuania) (http://www.transifex.net/projects/p/owncloud/team/lt_LT/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: lt_LT\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
+
+#: ajax/activation.php:17 ajax/updateaddressbook.php:26
+msgid "Error (de)activating addressbook."
+msgstr ""
+
+#: ajax/addcard.php:79
+msgid "There was an error adding the contact."
+msgstr ""
+
+#: ajax/addproperty.php:39
+msgid "Cannot add empty property."
+msgstr ""
+
+#: ajax/addproperty.php:51
+msgid "At least one of the address fields has to be filled out."
+msgstr ""
+
+#: ajax/addproperty.php:77
+msgid "Error adding contact property."
+msgstr ""
+
+#: ajax/createaddressbook.php:20
+msgid "Error adding addressbook."
+msgstr ""
+
+#: ajax/createaddressbook.php:26
+msgid "Error activating addressbook."
+msgstr ""
+
+#: ajax/deleteproperty.php:40
+msgid "Error deleting contact property."
+msgstr ""
+
+#: ajax/setproperty.php:79
+msgid "Error updating contact property."
+msgstr ""
+
+#: ajax/updateaddressbook.php:20
+msgid "Error updating addressbook."
+msgstr ""
+
+#: appinfo/app.php:21 templates/settings.php:3
+msgid "Contacts"
+msgstr ""
+
+#: lib/app.php:42
+msgid "This is not your addressbook."
+msgstr "Tai ne jūsų adresų knygelė."
+
+#: lib/app.php:51 photo.php:34
+msgid "Contact could not be found."
+msgstr "Kontaktas nerastas"
+
+#: lib/app.php:79
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "Informacija apie vCard yra neteisinga. "
+
+#: lib/app.php:91 templates/part.addcardform.php:54
+#: templates/part.property.php:45 templates/part.setpropertyform.php:7
+msgid "Address"
+msgstr "Adresas"
+
+#: lib/app.php:92 templates/part.addcardform.php:43
+msgid "Telephone"
+msgstr "Telefonas"
+
+#: lib/app.php:93 templates/part.addcardform.php:37
+#: templates/part.property.php:16 templates/part.setpropertyform.php:51
+msgid "Email"
+msgstr "El. paštas"
+
+#: lib/app.php:94 templates/part.addcardform.php:27
+#: templates/part.property.php:9 templates/part.setpropertyform.php:54
+msgid "Organization"
+msgstr "Organizacija"
+
+#: lib/app.php:106 lib/app.php:113
+msgid "Work"
+msgstr "Darbo"
+
+#: lib/app.php:107 lib/app.php:111
+msgid "Home"
+msgstr "Namų"
+
+#: lib/app.php:112
+msgid "Mobile"
+msgstr "Mobilusis"
+
+#: lib/app.php:114
+msgid "Text"
+msgstr "Tekstas"
+
+#: lib/app.php:115
+msgid "Voice"
+msgstr "Balso"
+
+#: lib/app.php:116
+msgid "Fax"
+msgstr "Faksas"
+
+#: lib/app.php:117
+msgid "Video"
+msgstr "Vaizdo"
+
+#: lib/app.php:118
+msgid "Pager"
+msgstr "Pranešimų gaviklis"
+
+#: lib/search.php:22
+msgid "Contact"
+msgstr ""
+
+#: photo.php:40
+msgid "This is not your contact."
+msgstr "Tai ne jūsų kontaktas"
+
+#: photo.php:48
+msgid "This card is not RFC compatible."
+msgstr ""
+
+#: photo.php:85
+msgid "This card does not contain a photo."
+msgstr ""
+
+#: templates/index.php:6
+msgid "Add Contact"
+msgstr "Pridėti kontaktą"
+
+#: templates/index.php:7
+msgid "Addressbooks"
+msgstr ""
+
+#: templates/part.addcardform.php:8
+msgid "Addressbook"
+msgstr ""
+
+#: templates/part.addcardform.php:21
+msgid "Name"
+msgstr "Vardas"
+
+#: templates/part.addcardform.php:57 templates/part.details.php:43
+#: templates/part.details.php:79 templates/part.setpropertyform.php:10
+#: templates/part.setpropertyform.php:47
+msgid "Type"
+msgstr ""
+
+#: templates/part.addcardform.php:65 templates/part.details.php:49
+#: templates/part.setpropertyform.php:16
+msgid "PO Box"
+msgstr "Pašto dėžutė"
+
+#: templates/part.addcardform.php:72 templates/part.details.php:53
+#: templates/part.setpropertyform.php:20
+msgid "Extended"
+msgstr ""
+
+#: templates/part.addcardform.php:78 templates/part.details.php:57
+#: templates/part.setpropertyform.php:24
+msgid "Street"
+msgstr "Gatvė"
+
+#: templates/part.addcardform.php:84 templates/part.details.php:61
+#: templates/part.setpropertyform.php:28
+msgid "City"
+msgstr "Miestas"
+
+#: templates/part.addcardform.php:90 templates/part.details.php:65
+#: templates/part.setpropertyform.php:32
+msgid "Region"
+msgstr "Regionas"
+
+#: templates/part.addcardform.php:96 templates/part.details.php:69
+#: templates/part.setpropertyform.php:36
+msgid "Zipcode"
+msgstr "Pašto indeksas"
+
+#: templates/part.addcardform.php:102 templates/part.details.php:73
+#: templates/part.setpropertyform.php:40
+msgid "Country"
+msgstr "Šalis"
+
+#: templates/part.addcardform.php:109
+msgid "Create Contact"
+msgstr "Sukurti kontaktą"
+
+#: templates/part.chooseaddressbook.php:1
+msgid "Choose active Address Books"
+msgstr ""
+
+#: templates/part.chooseaddressbook.php:16
+msgid "New Address Book"
+msgstr ""
+
+#: templates/part.chooseaddressbook.php:21
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "CardDav Link"
+msgstr ""
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Download"
+msgstr ""
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Edit"
+msgstr "Keisti"
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Delete"
+msgstr "Trinti"
+
+#: templates/part.details.php:3
+msgid "Download contact"
+msgstr ""
+
+#: templates/part.details.php:4
+msgid "Delete contact"
+msgstr ""
+
+#: templates/part.details.php:34
+msgid "Add"
+msgstr ""
+
+#: templates/part.editaddressbook.php:9
+msgid "New Addressbook"
+msgstr ""
+
+#: templates/part.editaddressbook.php:9
+msgid "Edit Addressbook"
+msgstr ""
+
+#: templates/part.editaddressbook.php:12
+msgid "Displayname"
+msgstr ""
+
+#: templates/part.editaddressbook.php:23
+msgid "Active"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Save"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Submit"
+msgstr ""
+
+#: templates/part.editaddressbook.php:30
+msgid "Cancel"
+msgstr ""
+
+#: templates/part.property.php:3
+msgid "Birthday"
+msgstr "Gimtadienis"
+
+#: templates/part.property.php:23
+msgid "Preferred"
+msgstr ""
+
+#: templates/part.property.php:23 templates/part.setpropertyform.php:45
+msgid "Phone"
+msgstr "Telefonas"
+
+#: templates/part.setpropertyform.php:57
+msgid "Update"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "CardDAV syncing address:"
+msgstr ""
+
+
diff --git a/l10n/lt_LT/core.po b/l10n/lt_LT/core.po
new file mode 100644
index 00000000000..0f9ca6992ca
--- /dev/null
+++ b/l10n/lt_LT/core.po
@@ -0,0 +1,173 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Dr. ROX <to.dr.rox@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Lithuanian (Lithuania) (http://www.transifex.net/projects/p/owncloud/team/lt_LT/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: lt_LT\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
+
+#: lostpassword/index.php:24
+msgid "Owncloud password reset"
+msgstr ""
+
+#: lostpassword/templates/email.php:1
+msgid "Use the following link to reset your password: {link}"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr ""
+"Elektroniniu paštu gausite nuorodą, su kuria galėsite iš naujo nustatyti "
+"slaptažodį."
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Requested"
+msgstr "Užklausta"
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr "Prisijungti nepavyko!"
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:22
+#: templates/login.php:8
+msgid "Username"
+msgstr "Prisijungimo vardas"
+
+#: lostpassword/templates/lostpassword.php:14
+msgid "Request reset"
+msgstr "Prašyti nustatymo iš najo"
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr "Jūsų slaptažodis buvo nustatytas iš naujo"
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr "Naujas slaptažodis"
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr "Atkurti slaptažodį"
+
+#: strings.php:5
+msgid "Personal"
+msgstr "Asmeniniai"
+
+#: strings.php:6
+msgid "Users"
+msgstr "Vartotojai"
+
+#: strings.php:7
+msgid "Apps"
+msgstr "Programos"
+
+#: strings.php:8
+msgid "Admin"
+msgstr "Administravimas"
+
+#: strings.php:9
+msgid "Help"
+msgstr "Pagalba"
+
+#: templates/404.php:12
+msgid "Cloud not found"
+msgstr "Negalima rasti"
+
+#: templates/installation.php:20
+msgid "Create an <strong>admin account</strong>"
+msgstr "Sukurti <strong>administratoriaus paskyrą</strong>"
+
+#: templates/installation.php:26 templates/login.php:12
+msgid "Password"
+msgstr "Slaptažodis"
+
+#: templates/installation.php:32
+msgid "Advanced"
+msgstr ""
+
+#: templates/installation.php:34
+msgid "Data folder"
+msgstr "Duomenų katalogas"
+
+#: templates/installation.php:41
+msgid "Configure the database"
+msgstr "Nustatyti duomenų bazę"
+
+#: templates/installation.php:46 templates/installation.php:57
+#: templates/installation.php:67
+msgid "will be used"
+msgstr "bus naudojama"
+
+#: templates/installation.php:79
+msgid "Database user"
+msgstr "Duomenų bazės vartotojas"
+
+#: templates/installation.php:83
+msgid "Database password"
+msgstr "Duomenų bazės slaptažodis"
+
+#: templates/installation.php:87
+msgid "Database name"
+msgstr "Duomenų bazės pavadinimas"
+
+#: templates/installation.php:93
+msgid "Database host"
+msgstr "Duomenų bazės serveris"
+
+#: templates/installation.php:98
+msgid "Finish setup"
+msgstr "Baigti diegimą"
+
+#: templates/layout.guest.php:35
+msgid "web services under your control"
+msgstr ""
+
+#: templates/layout.user.php:34
+msgid "Log out"
+msgstr "Atsijungti"
+
+#: templates/layout.user.php:46 templates/layout.user.php:47
+msgid "Settings"
+msgstr "Nustatymai"
+
+#: templates/login.php:5
+msgid "Lost your password?"
+msgstr "Pamiršote slaptažodį?"
+
+#: templates/login.php:15
+msgid "remember"
+msgstr "prisiminti"
+
+#: templates/login.php:16
+msgid "Log in"
+msgstr ""
+
+#: templates/logout.php:1
+msgid "You are logged out."
+msgstr "Jūs atsijungėte."
+
+#: templates/part.pagenavi.php:3
+msgid "prev"
+msgstr "atgal"
+
+#: templates/part.pagenavi.php:20
+msgid "next"
+msgstr "kitas"
+
+
diff --git a/l10n/lt_LT/files.po b/l10n/lt_LT/files.po
new file mode 100644
index 00000000000..6ad89a67524
--- /dev/null
+++ b/l10n/lt_LT/files.po
@@ -0,0 +1,112 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Dr. ROX <to.dr.rox@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Lithuanian (Lithuania) (http://www.transifex.net/projects/p/owncloud/team/lt_LT/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: lt_LT\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
+
+#: ajax/upload.php:19
+msgid "There is no error, the file uploaded with success"
+msgstr "Klaidų nėra, failas įkeltas sėkmingai"
+
+#: ajax/upload.php:20
+msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
+msgstr "Įkeliamo failo dydis viršija upload_max_filesize parametrą php.ini"
+
+#: ajax/upload.php:21
+msgid ""
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
+"the HTML form"
+msgstr ""
+"Įkeliamo failo dydis viršija MAX_FILE_SIZE parametrą, kuris yra nustatytas "
+"HTML formoje"
+
+#: ajax/upload.php:22
+msgid "The uploaded file was only partially uploaded"
+msgstr "Failas buvo įkeltas tik dalinai"
+
+#: ajax/upload.php:23
+msgid "No file was uploaded"
+msgstr "Nebuvo įkeltas nė vienas failas"
+
+#: ajax/upload.php:24
+msgid "Missing a temporary folder"
+msgstr "Nėra laikinojo katalogo"
+
+#: appinfo/app.php:8
+msgid "Files"
+msgstr "Failai"
+
+#: templates/admin.php:5
+msgid "Maximum upload size"
+msgstr "Maksimalus failo dydis"
+
+#: templates/index.php:7
+msgid "New"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Text file"
+msgstr ""
+
+#: templates/index.php:11
+msgid "Folder"
+msgstr ""
+
+#: templates/index.php:12
+msgid "From the web"
+msgstr ""
+
+#: templates/index.php:22
+msgid "Upload"
+msgstr "Įkelti"
+
+#: templates/index.php:35
+msgid "Nothing in here. Upload something!"
+msgstr "Čia tuščia. Įkelkite ką nors!"
+
+#: templates/index.php:43
+msgid "Name"
+msgstr "Pavadinimas"
+
+#: templates/index.php:45
+msgid "Download"
+msgstr "Atsisiųsti"
+
+#: templates/index.php:49
+msgid "Size"
+msgstr "Dydis"
+
+#: templates/index.php:50
+msgid "Modified"
+msgstr "Pakeista"
+
+#: templates/index.php:50
+msgid "Delete"
+msgstr "Ištrinti"
+
+#: templates/index.php:58
+msgid "Upload too large"
+msgstr "Įkėlimui failas per didelis"
+
+#: templates/index.php:60
+msgid ""
+"The files you are trying to upload exceed the maximum size for file uploads "
+"on this server."
+msgstr ""
+"Bandomų įkelti failų dydis viršija maksimalų leidžiamą šiame serveryje"
+
+
diff --git a/l10n/lt_LT/gallery.po b/l10n/lt_LT/gallery.po
new file mode 100644
index 00000000000..19ed976cf7a
--- /dev/null
+++ b/l10n/lt_LT/gallery.po
@@ -0,0 +1,32 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:48+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Lithuanian (Lithuania) (http://www.transifex.net/projects/p/owncloud/team/lt_LT/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: lt_LT\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
+
+#: appinfo/app.php:41
+msgid "Gallery"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Rescan"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+
diff --git a/l10n/lt_LT/media.po b/l10n/lt_LT/media.po
new file mode 100644
index 00000000000..3cf68998f16
--- /dev/null
+++ b/l10n/lt_LT/media.po
@@ -0,0 +1,65 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Dr. ROX <to.dr.rox@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Lithuanian (Lithuania) (http://www.transifex.net/projects/p/owncloud/team/lt_LT/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: lt_LT\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
+
+#: appinfo/app.php:32
+msgid "Music"
+msgstr "Muzika"
+
+#: templates/music.php:3 templates/player.php:13
+msgid "Play"
+msgstr "Groti"
+
+#: templates/music.php:4 templates/music.php:26 templates/player.php:14
+msgid "Pause"
+msgstr "Pristabdyti"
+
+#: templates/music.php:5
+msgid "Previous"
+msgstr "Atgal"
+
+#: templates/music.php:6 templates/player.php:15
+msgid "Next"
+msgstr "Kitas"
+
+#: templates/music.php:7
+msgid "Mute"
+msgstr "Nutildyti"
+
+#: templates/music.php:8
+msgid "Unmute"
+msgstr "Įjungti garsą"
+
+#: templates/music.php:25
+msgid "Rescan Collection"
+msgstr "Atnaujinti kolekciją"
+
+#: templates/music.php:37
+msgid "Artist"
+msgstr "Atlikėjas"
+
+#: templates/music.php:38
+msgid "Album"
+msgstr "Albumas"
+
+#: templates/music.php:39
+msgid "Title"
+msgstr "Pavadinimas"
+
+
diff --git a/l10n/lt_LT/settings.po b/l10n/lt_LT/settings.po
new file mode 100644
index 00000000000..ec0f1bd45cb
--- /dev/null
+++ b/l10n/lt_LT/settings.po
@@ -0,0 +1,154 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Dr. ROX <to.dr.rox@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Lithuanian (Lithuania) (http://www.transifex.net/projects/p/owncloud/team/lt_LT/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: lt_LT\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
+
+#: ajax/lostpassword.php:14
+msgid "email Changed"
+msgstr ""
+
+#: ajax/lostpassword.php:16 ajax/openid.php:17 ajax/setlanguage.php:16
+msgid "Invalid request"
+msgstr "Klaidinga užklausa"
+
+#: ajax/openid.php:15
+msgid "OpenID Changed"
+msgstr "OpenID pakeistas"
+
+#: ajax/setlanguage.php:14
+msgid "Language changed"
+msgstr "Kalba pakeista"
+
+#: templates/admin.php:13
+msgid "Log level"
+msgstr ""
+
+#: templates/apps.php:8
+msgid "Add your application"
+msgstr "Pridėti jūsų programą"
+
+#: templates/apps.php:21
+msgid "Select an App"
+msgstr "Pasirinkite programą"
+
+#: templates/apps.php:23
+msgid "-licensed"
+msgstr "-licencijuota"
+
+#: templates/apps.php:23
+msgid "by"
+msgstr ""
+
+#: templates/help.php:8
+msgid "Ask a question"
+msgstr "Užduoti klausimą"
+
+#: templates/help.php:20
+msgid "Problems connecting to help database."
+msgstr "Problemos jungiantis prie duomenų bazės"
+
+#: templates/help.php:21
+msgid "Go there manually."
+msgstr ""
+
+#: templates/help.php:29
+msgid "Answer"
+msgstr "Atsakyti"
+
+#: templates/personal.php:8
+msgid "You use"
+msgstr "Jūs naudojate"
+
+#: templates/personal.php:8
+msgid "of the available"
+msgstr "iš galimų"
+
+#: templates/personal.php:13
+msgid "Your password got changed"
+msgstr "Jūsų slaptažodis buvo pakeistas"
+
+#: templates/personal.php:14
+msgid "Unable to change your password"
+msgstr "Neįmanoma pakeisti slaptažodžio"
+
+#: templates/personal.php:15
+msgid "Current password"
+msgstr "Dabartinis slaptažodis"
+
+#: templates/personal.php:16
+msgid "New password"
+msgstr "Naujas slaptažodis"
+
+#: templates/personal.php:17
+msgid "show"
+msgstr "rodyti"
+
+#: templates/personal.php:18
+msgid "Change password"
+msgstr "Pakeisti slaptažodį"
+
+#: templates/personal.php:24
+msgid "Email"
+msgstr ""
+
+#: templates/personal.php:25
+msgid "Your email address"
+msgstr ""
+
+#: templates/personal.php:26
+msgid "Fill in an email address to enable password recovery"
+msgstr ""
+
+#: templates/personal.php:32 templates/personal.php:33
+msgid "Language"
+msgstr "Kalba"
+
+#: templates/personal.php:38
+msgid "Help translate"
+msgstr ""
+
+#: templates/personal.php:45
+msgid "use this address to connect to your ownCloud in your file manager"
+msgstr ""
+"naudokite šį adresą, jei norite pasiekti savo ownCloud per failų tvarkyklę"
+
+#: templates/users.php:15 templates/users.php:30
+msgid "Name"
+msgstr "Vardas"
+
+#: templates/users.php:16 templates/users.php:31
+msgid "Password"
+msgstr "Slaptažodis"
+
+#: templates/users.php:17 templates/users.php:32 templates/users.php:46
+msgid "Groups"
+msgstr "Grupės"
+
+#: templates/users.php:23
+msgid "Create"
+msgstr "Sukurti"
+
+#: templates/users.php:33
+msgid "Quota"
+msgstr ""
+
+#: templates/users.php:58
+msgid "Delete"
+msgstr "Ištrinti"
+
+
diff --git a/l10n/ms_MY/calendar.po b/l10n/ms_MY/calendar.po
index 24fa26eeda3..6ad7fe344e0 100644
--- a/l10n/ms_MY/calendar.po
+++ b/l10n/ms_MY/calendar.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Malay (Malaysia) (http://www.transifex.net/projects/p/owncloud/team/ms_MY/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,321 +18,403 @@ msgstr ""
"Language: ms_MY\n"
"Plural-Forms: nplurals=1; plural=0\n"
-#: ajax/createcalendar.php:18 ajax/settimezone.php:19
-#: ajax/updatecalendar.php:18
-msgid "Authentication error"
-msgstr "Ralat pengesahan"
-
-#: ajax/editeventform.php:25
-msgid "Wrong calendar"
+#: ajax/guesstimezone.php:42
+msgid "New Timezone:"
msgstr ""
-#: ajax/settimezone.php:27
+#: ajax/settimezone.php:22
msgid "Timezone changed"
msgstr "Zon waktu diubah"
-#: ajax/settimezone.php:29
+#: ajax/settimezone.php:24
msgid "Invalid request"
msgstr "Permintaan tidak sah"
-#: appinfo/app.php:19 templates/part.eventform.php:27
-#: templates/part.eventinfo.php:18
+#: appinfo/app.php:20 templates/calendar.php:13
+#: templates/part.eventform.php:20
msgid "Calendar"
msgstr "Kalendar"
-#: lib/object.php:292
+#: lib/app.php:19
+msgid "Wrong calendar"
+msgstr ""
+
+#: lib/app.php:60 lib/object.php:332
msgid "Birthday"
msgstr ""
-#: lib/object.php:293
+#: lib/app.php:61 lib/object.php:333
msgid "Business"
msgstr ""
-#: lib/object.php:294
+#: lib/app.php:62 lib/object.php:334
msgid "Call"
msgstr ""
-#: lib/object.php:295
+#: lib/app.php:63 lib/object.php:335
msgid "Clients"
msgstr ""
-#: lib/object.php:296
+#: lib/app.php:64 lib/object.php:336
msgid "Deliverer"
msgstr ""
-#: lib/object.php:297
+#: lib/app.php:65 lib/object.php:337
msgid "Holidays"
msgstr ""
-#: lib/object.php:298
+#: lib/app.php:66 lib/object.php:338
msgid "Ideas"
msgstr ""
-#: lib/object.php:299
+#: lib/app.php:67 lib/object.php:339
msgid "Journey"
msgstr ""
-#: lib/object.php:300
+#: lib/app.php:68 lib/object.php:340
msgid "Jubilee"
msgstr ""
-#: lib/object.php:301
+#: lib/app.php:69 lib/object.php:341
msgid "Meeting"
msgstr ""
-#: lib/object.php:302
+#: lib/app.php:70 lib/object.php:342
msgid "Other"
msgstr ""
-#: lib/object.php:303
+#: lib/app.php:71 lib/object.php:343
msgid "Personal"
msgstr ""
-#: lib/object.php:304
+#: lib/app.php:72 lib/object.php:344
msgid "Projects"
msgstr ""
-#: lib/object.php:305
+#: lib/app.php:73 lib/object.php:345
msgid "Questions"
msgstr ""
-#: lib/object.php:306
+#: lib/app.php:74 lib/object.php:346
msgid "Work"
msgstr ""
-#: lib/object.php:313
+#: lib/object.php:353
msgid "Does not repeat"
msgstr "Tidak berulang"
-#: lib/object.php:314
+#: lib/object.php:354
msgid "Daily"
msgstr "Harian"
-#: lib/object.php:315
+#: lib/object.php:355
msgid "Weekly"
msgstr "Mingguan"
-#: lib/object.php:316
+#: lib/object.php:356
msgid "Every Weekday"
msgstr "Setiap hari minggu"
-#: lib/object.php:317
+#: lib/object.php:357
msgid "Bi-Weekly"
msgstr "Dua kali seminggu"
-#: lib/object.php:318
+#: lib/object.php:358
msgid "Monthly"
msgstr "Bulanan"
-#: lib/object.php:319
+#: lib/object.php:359
msgid "Yearly"
msgstr "Tahunan"
-#: lib/object.php:337
-msgid "Not an array"
+#: lib/object.php:366
+msgid "never"
msgstr ""
-#: templates/calendar.php:3
-msgid "All day"
-msgstr "Sepanjang hari"
+#: lib/object.php:367
+msgid "by occurrences"
+msgstr ""
-#: templates/calendar.php:32
-msgid "Sunday"
-msgstr "Ahad"
+#: lib/object.php:368
+msgid "by date"
+msgstr ""
+
+#: lib/object.php:375
+msgid "by monthday"
+msgstr ""
+
+#: lib/object.php:376
+msgid "by weekday"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:383 templates/lAfix.php:3
msgid "Monday"
-msgstr "Isnin"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:384 templates/lAfix.php:4
msgid "Tuesday"
-msgstr "Selasa"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:385 templates/lAfix.php:5
msgid "Wednesday"
-msgstr "Rabu"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:386 templates/lAfix.php:6
msgid "Thursday"
-msgstr "Khamis"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:387 templates/lAfix.php:7
msgid "Friday"
-msgstr "Jumaat"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:388 templates/lAfix.php:8
msgid "Saturday"
-msgstr "Sabtu"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Sun."
-msgstr "Ahad"
+#: lib/object.php:389 templates/lAfix.php:2
+msgid "Sunday"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Mon."
-msgstr "Isnin"
+#: lib/object.php:396
+msgid "events week of month"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Tue."
-msgstr "Selasa"
+#: lib/object.php:397
+msgid "first"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Wed."
-msgstr "Rabu"
+#: lib/object.php:398
+msgid "second"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Thu."
-msgstr "Khamis"
+#: lib/object.php:399
+msgid "third"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Fri."
-msgstr "Jumaat"
+#: lib/object.php:400
+msgid "fourth"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Sat."
-msgstr "Sabtu"
+#: lib/object.php:401
+msgid "fifth"
+msgstr ""
+
+#: lib/object.php:402
+msgid "last"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:424 templates/lAfix.php:16
msgid "January"
-msgstr "Januari"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:425 templates/lAfix.php:17
msgid "February"
-msgstr "Februari"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:426 templates/lAfix.php:18
msgid "March"
-msgstr "Mac"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:427 templates/lAfix.php:19
msgid "April"
-msgstr "April "
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:428 templates/lAfix.php:20
msgid "May"
-msgstr "Mei"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:429 templates/lAfix.php:21
msgid "June"
-msgstr "Jun"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:430 templates/lAfix.php:22
msgid "July"
-msgstr "Julai"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:431 templates/lAfix.php:23
msgid "August"
-msgstr "Ogos"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:432 templates/lAfix.php:24
msgid "September"
-msgstr "September"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:433 templates/lAfix.php:25
msgid "October"
-msgstr "Oktober"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:434 templates/lAfix.php:26
msgid "November"
-msgstr "November"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:435 templates/lAfix.php:27
msgid "December"
-msgstr "Disember"
-
-#: templates/calendar.php:35
-msgid "Jan."
-msgstr "Jan"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Feb."
-msgstr "Feb"
+#: lib/object.php:441
+msgid "by events date"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Mar."
-msgstr "Mac"
+#: lib/object.php:442
+msgid "by yearday(s)"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Apr."
-msgstr "Apr"
+#: lib/object.php:443
+msgid "by weeknumber(s)"
+msgstr ""
-#: templates/calendar.php:35
-msgid "May."
+#: lib/object.php:444
+msgid "by day and month"
msgstr ""
-#: templates/calendar.php:35
-msgid "Jun."
-msgstr "Jun"
+#: lib/object.php:467
+msgid "Not an array"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Jul."
-msgstr "Jul"
+#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+msgid "Date"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Aug."
-msgstr "Ogos"
+#: lib/search.php:40
+msgid "Cal."
+msgstr ""
-#: templates/calendar.php:35
-msgid "Sep."
-msgstr "Sep"
+#: templates/calendar.php:10
+msgid "All day"
+msgstr "Sepanjang hari"
-#: templates/calendar.php:35
-msgid "Oct."
-msgstr "Okt"
+#: templates/calendar.php:11
+msgid "Missing fields"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Nov."
-msgstr "Nov"
+#: templates/calendar.php:12 templates/part.eventform.php:3
+msgid "Title"
+msgstr "Tajuk"
-#: templates/calendar.php:35
-msgid "Dec."
-msgstr "Dis"
+#: templates/calendar.php:14
+msgid "From Date"
+msgstr ""
-#: templates/calendar.php:36 templates/calendar.php:50
-#: templates/calendar.php:116
-msgid "Week"
-msgstr "Minggu"
+#: templates/calendar.php:15
+msgid "From Time"
+msgstr ""
-#: templates/calendar.php:37 templates/calendar.php:51
-msgid "Weeks"
-msgstr "Minggu"
+#: templates/calendar.php:16
+msgid "To Date"
+msgstr ""
-#: templates/calendar.php:38
-msgid "More before {startdate}"
+#: templates/calendar.php:17
+msgid "To Time"
msgstr ""
-#: templates/calendar.php:39
-msgid "More after {enddate}"
+#: templates/calendar.php:18
+msgid "The event ends before it starts"
msgstr ""
-#: templates/calendar.php:49
-msgid "Day"
-msgstr "Hari"
+#: templates/calendar.php:19
+msgid "There was a database fail"
+msgstr ""
#: templates/calendar.php:52
+msgid "Week"
+msgstr "Minggu"
+
+#: templates/calendar.php:53
msgid "Month"
msgstr "Bulan"
-#: templates/calendar.php:53
+#: templates/calendar.php:54
msgid "List"
msgstr ""
-#: templates/calendar.php:58
+#: templates/calendar.php:59
msgid "Today"
msgstr "Hari ini"
-#: templates/calendar.php:59
+#: templates/calendar.php:60
msgid "Calendars"
msgstr "Kalendar"
-#: templates/calendar.php:76 templates/calendar.php:94
-msgid "Time"
-msgstr "Waktu"
-
-#: templates/calendar.php:169
+#: templates/calendar.php:78
msgid "There was a fail, while parsing the file."
msgstr "Berlaku kegagalan ketika penguraian fail. "
+#: templates/lAfix.php:9
+msgid "Sun."
+msgstr ""
+
+#: templates/lAfix.php:10
+msgid "Mon."
+msgstr ""
+
+#: templates/lAfix.php:11
+msgid "Tue."
+msgstr ""
+
+#: templates/lAfix.php:12
+msgid "Wed."
+msgstr ""
+
+#: templates/lAfix.php:13
+msgid "Thu."
+msgstr ""
+
+#: templates/lAfix.php:14
+msgid "Fri."
+msgstr ""
+
+#: templates/lAfix.php:15
+msgid "Sat."
+msgstr ""
+
+#: templates/lAfix.php:28
+msgid "Jan."
+msgstr ""
+
+#: templates/lAfix.php:29
+msgid "Feb."
+msgstr ""
+
+#: templates/lAfix.php:30
+msgid "Mar."
+msgstr ""
+
+#: templates/lAfix.php:31
+msgid "Apr."
+msgstr ""
+
+#: templates/lAfix.php:32
+msgid "May."
+msgstr ""
+
+#: templates/lAfix.php:33
+msgid "Jun."
+msgstr ""
+
+#: templates/lAfix.php:34
+msgid "Jul."
+msgstr ""
+
+#: templates/lAfix.php:35
+msgid "Aug."
+msgstr ""
+
+#: templates/lAfix.php:36
+msgid "Sep."
+msgstr ""
+
+#: templates/lAfix.php:37
+msgid "Oct."
+msgstr ""
+
+#: templates/lAfix.php:38
+msgid "Nov."
+msgstr ""
+
+#: templates/lAfix.php:39
+msgid "Dec."
+msgstr ""
+
#: templates/part.choosecalendar.php:1
msgid "Choose active calendars"
msgstr "Pilih kalendar yang aktif"
@@ -351,12 +433,11 @@ msgid "Download"
msgstr "Muat turun"
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.eventinfo.php:64
msgid "Edit"
msgstr "Edit"
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.editevent.php:8
+#: templates/part.editevent.php:9
msgid "Delete"
msgstr ""
@@ -376,90 +457,181 @@ msgstr "Paparan nama"
msgid "Active"
msgstr "Aktif"
-#: templates/part.editcalendar.php:29 templates/part.eventform.php:88
-#: templates/part.eventinfo.php:58
-msgid "Description"
-msgstr "Huraian"
-
-#: templates/part.editcalendar.php:35
+#: templates/part.editcalendar.php:29
msgid "Calendar color"
msgstr "Warna kalendar"
-#: templates/part.editcalendar.php:41
+#: templates/part.editcalendar.php:42
msgid "Save"
msgstr ""
-#: templates/part.editcalendar.php:41 templates/part.editevent.php:7
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
#: templates/part.newevent.php:6
msgid "Submit"
msgstr "Hantar"
-#: templates/part.editcalendar.php:42
+#: templates/part.editcalendar.php:43
msgid "Cancel"
msgstr ""
-#: templates/part.editevent.php:1 templates/part.eventinfo.php:1
+#: templates/part.editevent.php:1
msgid "Edit an event"
msgstr "Edit agenda"
-#: templates/part.eventform.php:3 templates/part.eventinfo.php:4
-msgid "Title"
-msgstr "Tajuk"
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr ""
#: templates/part.eventform.php:5
msgid "Title of the Event"
msgstr "Tajuk agenda"
-#: templates/part.eventform.php:9 templates/part.eventinfo.php:9
-msgid "Location"
-msgstr "Lokasi"
-
#: templates/part.eventform.php:11
-msgid "Location of the Event"
-msgstr "Lokasi agenda"
-
-#: templates/part.eventform.php:17 templates/part.eventinfo.php:16
msgid "Category"
msgstr "kategori"
-#: templates/part.eventform.php:19
+#: templates/part.eventform.php:13
msgid "Select category"
msgstr ""
-#: templates/part.eventform.php:45 templates/part.eventinfo.php:28
+#: templates/part.eventform.php:37
msgid "All Day Event"
msgstr "Agenda di sepanjang hari "
-#: templates/part.eventform.php:49 templates/part.eventinfo.php:31
+#: templates/part.eventform.php:41
msgid "From"
msgstr "Dari"
-#: templates/part.eventform.php:57 templates/part.eventinfo.php:38
+#: templates/part.eventform.php:49
msgid "To"
msgstr "ke"
-#: templates/part.eventform.php:65 templates/part.eventinfo.php:44
+#: templates/part.eventform.php:57
+msgid "Advanced options"
+msgstr ""
+
+#: templates/part.eventform.php:61
msgid "Repeat"
msgstr "Ulang"
-#: templates/part.eventform.php:81 templates/part.eventinfo.php:51
-msgid "Attendees"
-msgstr "Hadirin"
+#: templates/part.eventform.php:68
+msgid "Advanced"
+msgstr ""
-#: templates/part.eventform.php:89
+#: templates/part.eventform.php:112
+msgid "Select weekdays"
+msgstr ""
+
+#: templates/part.eventform.php:125 templates/part.eventform.php:138
+msgid "Select days"
+msgstr ""
+
+#: templates/part.eventform.php:130
+msgid "and the events day of year."
+msgstr ""
+
+#: templates/part.eventform.php:143
+msgid "and the events day of month."
+msgstr ""
+
+#: templates/part.eventform.php:151
+msgid "Select months"
+msgstr ""
+
+#: templates/part.eventform.php:164
+msgid "Select weeks"
+msgstr ""
+
+#: templates/part.eventform.php:169
+msgid "and the events week of year."
+msgstr ""
+
+#: templates/part.eventform.php:175
+msgid "Interval"
+msgstr ""
+
+#: templates/part.eventform.php:181
+msgid "End"
+msgstr ""
+
+#: templates/part.eventform.php:193
+msgid "occurrences"
+msgstr ""
+
+#: templates/part.eventform.php:208
+msgid "Location"
+msgstr "Lokasi"
+
+#: templates/part.eventform.php:210
+msgid "Location of the Event"
+msgstr "Lokasi agenda"
+
+#: templates/part.eventform.php:216
+msgid "Description"
+msgstr "Huraian"
+
+#: templates/part.eventform.php:218
msgid "Description of the Event"
msgstr "Huraian agenda"
-#: templates/part.eventinfo.php:63
-msgid "Close"
-msgstr "Tutup"
+#: templates/part.import.php:1
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the calendar"
+msgstr ""
+
+#: templates/part.import.php:10
+msgid "create a new calendar"
+msgstr ""
+
+#: templates/part.import.php:15
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import"
+msgstr ""
+
+#: templates/part.import.php:20
+msgid "Importing calendar"
+msgstr ""
+
+#: templates/part.import.php:23
+msgid "Calendar imported successfully"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Close Dialog"
+msgstr ""
#: templates/part.newevent.php:1
msgid "Create a new event"
msgstr "Buat agenda baru"
-#: templates/settings.php:11
+#: templates/settings.php:13
msgid "Timezone"
msgstr "Zon waktu"
+#: templates/settings.php:30
+msgid "Check always for changes of the timezone"
+msgstr ""
+
+#: templates/settings.php:32
+msgid "Timeformat"
+msgstr ""
+
+#: templates/settings.php:34
+msgid "24h"
+msgstr ""
+
+#: templates/settings.php:35
+msgid "12h"
+msgstr ""
+
+#: templates/settings.php:41
+msgid "Calendar CalDAV syncing address:"
+msgstr ""
+
diff --git a/l10n/ms_MY/contacts.po b/l10n/ms_MY/contacts.po
index 59b737d3660..56ebea52bbb 100644
--- a/l10n/ms_MY/contacts.po
+++ b/l10n/ms_MY/contacts.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 20:10+0200\n"
-"PO-Revision-Date: 2011-09-23 18:10+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Malay (Malaysia) (http://www.transifex.net/projects/p/owncloud/team/ms_MY/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,164 +17,273 @@ msgstr ""
"Language: ms_MY\n"
"Plural-Forms: nplurals=1; plural=0\n"
-#: ajax/addcard.php:31 ajax/addproperty.php:31 ajax/deletebook.php:32
-#: ajax/deletecard.php:32 ajax/deleteproperty.php:34 ajax/getdetails.php:32
-#: ajax/setproperty.php:32 ajax/showaddcard.php:30 ajax/showaddproperty.php:31
-#: ajax/showsetproperty.php:32 photo.php:32
-msgid "You need to log in."
+#: ajax/activation.php:17 ajax/updateaddressbook.php:26
+msgid "Error (de)activating addressbook."
msgstr ""
-#: ajax/addcard.php:37
-msgid "This is not your addressbook."
+#: ajax/addcard.php:79
+msgid "There was an error adding the contact."
msgstr ""
-#: ajax/addproperty.php:37 ajax/deletecard.php:39 ajax/deleteproperty.php:41
-#: ajax/getdetails.php:39 ajax/setproperty.php:38 ajax/showaddproperty.php:37
-#: ajax/showsetproperty.php:38 photo.php:39
-msgid "Contact could not be found."
+#: ajax/addproperty.php:39
+msgid "Cannot add empty property."
msgstr ""
-#: ajax/addproperty.php:43 ajax/deletebook.php:38 ajax/deletecard.php:45
-#: ajax/deleteproperty.php:47 ajax/getdetails.php:45 ajax/setproperty.php:44
-#: ajax/showaddproperty.php:43 ajax/showsetproperty.php:44 photo.php:45
-msgid "This is not your contact."
+#: ajax/addproperty.php:51
+msgid "At least one of the address fields has to be filled out."
msgstr ""
-#: ajax/addproperty.php:50 ajax/deleteproperty.php:54 ajax/getdetails.php:52
-#: ajax/setproperty.php:51 ajax/showsetproperty.php:51
-msgid "vCard could not be read."
+#: ajax/addproperty.php:77
+msgid "Error adding contact property."
msgstr ""
-#: ajax/deleteproperty.php:65 ajax/setproperty.php:62
-#: ajax/showsetproperty.php:62
-msgid "Information about vCard is incorrect. Please reload the page."
+#: ajax/createaddressbook.php:20
+msgid "Error adding addressbook."
msgstr ""
-#: photo.php:53
-msgid "This card is not RFC compatible."
+#: ajax/createaddressbook.php:26
+msgid "Error activating addressbook."
msgstr ""
-#: photo.php:90
-msgid "This card does not contain a photo."
+#: ajax/deleteproperty.php:40
+msgid "Error deleting contact property."
msgstr ""
-#: templates/index.php:8
-msgid "Add Contact"
+#: ajax/setproperty.php:79
+msgid "Error updating contact property."
msgstr ""
-#: templates/part.addcardform.php:5
-msgid "Group"
+#: ajax/updateaddressbook.php:20
+msgid "Error updating addressbook."
msgstr ""
-#: templates/part.addcardform.php:12 templates/part.property.php:3
-msgid "Name"
+#: appinfo/app.php:21 templates/settings.php:3
+msgid "Contacts"
msgstr ""
-#: templates/part.addcardform.php:14
-msgid "Create Contact"
+#: lib/app.php:42
+msgid "This is not your addressbook."
+msgstr ""
+
+#: lib/app.php:51 photo.php:34
+msgid "Contact could not be found."
+msgstr ""
+
+#: lib/app.php:79
+msgid "Information about vCard is incorrect. Please reload the page."
msgstr ""
-#: templates/part.addpropertyform.php:4 templates/part.property.php:40
+#: lib/app.php:91 templates/part.addcardform.php:54
+#: templates/part.property.php:45 templates/part.setpropertyform.php:7
msgid "Address"
msgstr ""
-#: templates/part.addpropertyform.php:5
+#: lib/app.php:92 templates/part.addcardform.php:43
msgid "Telephone"
msgstr ""
-#: templates/part.addpropertyform.php:6 templates/part.property.php:22
+#: lib/app.php:93 templates/part.addcardform.php:37
+#: templates/part.property.php:16 templates/part.setpropertyform.php:51
msgid "Email"
msgstr ""
-#: templates/part.addpropertyform.php:7 templates/part.property.php:15
+#: lib/app.php:94 templates/part.addcardform.php:27
+#: templates/part.property.php:9 templates/part.setpropertyform.php:54
msgid "Organization"
msgstr ""
-#: templates/part.addpropertyform.php:17 templates/part.addpropertyform.php:32
+#: lib/app.php:106 lib/app.php:113
msgid "Work"
msgstr ""
-#: templates/part.addpropertyform.php:18 templates/part.addpropertyform.php:30
+#: lib/app.php:107 lib/app.php:111
msgid "Home"
msgstr ""
-#: templates/part.addpropertyform.php:20 templates/part.property.php:48
-#: templates/part.setpropertyform.php:5
+#: lib/app.php:112
+msgid "Mobile"
+msgstr ""
+
+#: lib/app.php:114
+msgid "Text"
+msgstr ""
+
+#: lib/app.php:115
+msgid "Voice"
+msgstr ""
+
+#: lib/app.php:116
+msgid "Fax"
+msgstr ""
+
+#: lib/app.php:117
+msgid "Video"
+msgstr ""
+
+#: lib/app.php:118
+msgid "Pager"
+msgstr ""
+
+#: lib/search.php:22
+msgid "Contact"
+msgstr ""
+
+#: photo.php:40
+msgid "This is not your contact."
+msgstr ""
+
+#: photo.php:48
+msgid "This card is not RFC compatible."
+msgstr ""
+
+#: photo.php:85
+msgid "This card does not contain a photo."
+msgstr ""
+
+#: templates/index.php:6
+msgid "Add Contact"
+msgstr ""
+
+#: templates/index.php:7
+msgid "Addressbooks"
+msgstr ""
+
+#: templates/part.addcardform.php:8
+msgid "Addressbook"
+msgstr ""
+
+#: templates/part.addcardform.php:21
+msgid "Name"
+msgstr ""
+
+#: templates/part.addcardform.php:57 templates/part.details.php:43
+#: templates/part.details.php:79 templates/part.setpropertyform.php:10
+#: templates/part.setpropertyform.php:47
+msgid "Type"
+msgstr ""
+
+#: templates/part.addcardform.php:65 templates/part.details.php:49
+#: templates/part.setpropertyform.php:16
msgid "PO Box"
msgstr ""
-#: templates/part.addpropertyform.php:21 templates/part.property.php:51
-#: templates/part.setpropertyform.php:6
+#: templates/part.addcardform.php:72 templates/part.details.php:53
+#: templates/part.setpropertyform.php:20
msgid "Extended"
msgstr ""
-#: templates/part.addpropertyform.php:22 templates/part.property.php:54
-#: templates/part.setpropertyform.php:7
+#: templates/part.addcardform.php:78 templates/part.details.php:57
+#: templates/part.setpropertyform.php:24
msgid "Street"
msgstr ""
-#: templates/part.addpropertyform.php:23 templates/part.property.php:57
-#: templates/part.setpropertyform.php:8
+#: templates/part.addcardform.php:84 templates/part.details.php:61
+#: templates/part.setpropertyform.php:28
msgid "City"
msgstr ""
-#: templates/part.addpropertyform.php:24 templates/part.property.php:60
-#: templates/part.setpropertyform.php:9
+#: templates/part.addcardform.php:90 templates/part.details.php:65
+#: templates/part.setpropertyform.php:32
msgid "Region"
msgstr ""
-#: templates/part.addpropertyform.php:25 templates/part.property.php:63
-#: templates/part.setpropertyform.php:10
+#: templates/part.addcardform.php:96 templates/part.details.php:69
+#: templates/part.setpropertyform.php:36
msgid "Zipcode"
msgstr ""
-#: templates/part.addpropertyform.php:26 templates/part.property.php:66
-#: templates/part.setpropertyform.php:11
+#: templates/part.addcardform.php:102 templates/part.details.php:73
+#: templates/part.setpropertyform.php:40
msgid "Country"
msgstr ""
-#: templates/part.addpropertyform.php:31
-msgid "Mobile"
+#: templates/part.addcardform.php:109
+msgid "Create Contact"
msgstr ""
-#: templates/part.addpropertyform.php:33
-msgid "Text"
+#: templates/part.chooseaddressbook.php:1
+msgid "Choose active Address Books"
msgstr ""
-#: templates/part.addpropertyform.php:34
-msgid "Voice"
+#: templates/part.chooseaddressbook.php:16
+msgid "New Address Book"
msgstr ""
-#: templates/part.addpropertyform.php:35
-msgid "Fax"
+#: templates/part.chooseaddressbook.php:21
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "CardDav Link"
msgstr ""
-#: templates/part.addpropertyform.php:36
-msgid "Video"
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Download"
msgstr ""
-#: templates/part.addpropertyform.php:37
-msgid "Pager"
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Edit"
msgstr ""
-#: templates/part.details.php:33
+#: templates/part.chooseaddressbook.rowfields.php:5
msgid "Delete"
msgstr ""
+#: templates/part.details.php:3
+msgid "Download contact"
+msgstr ""
+
+#: templates/part.details.php:4
+msgid "Delete contact"
+msgstr ""
+
#: templates/part.details.php:34
-msgid "Add Property"
+msgid "Add"
+msgstr ""
+
+#: templates/part.editaddressbook.php:9
+msgid "New Addressbook"
+msgstr ""
+
+#: templates/part.editaddressbook.php:9
+msgid "Edit Addressbook"
+msgstr ""
+
+#: templates/part.editaddressbook.php:12
+msgid "Displayname"
+msgstr ""
+
+#: templates/part.editaddressbook.php:23
+msgid "Active"
msgstr ""
-#: templates/part.property.php:9
+#: templates/part.editaddressbook.php:29
+msgid "Save"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Submit"
+msgstr ""
+
+#: templates/part.editaddressbook.php:30
+msgid "Cancel"
+msgstr ""
+
+#: templates/part.property.php:3
msgid "Birthday"
msgstr ""
-#: templates/part.property.php:29
+#: templates/part.property.php:23
+msgid "Preferred"
+msgstr ""
+
+#: templates/part.property.php:23 templates/part.setpropertyform.php:45
msgid "Phone"
msgstr ""
-#: templates/part.setpropertyform.php:17
-msgid "Edit"
+#: templates/part.setpropertyform.php:57
+msgid "Update"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "CardDAV syncing address:"
msgstr ""
diff --git a/l10n/ms_MY/core.po b/l10n/ms_MY/core.po
index fdd7e66e3ae..7425a4e2781 100644
--- a/l10n/ms_MY/core.po
+++ b/l10n/ms_MY/core.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 18:17+0200\n"
-"PO-Revision-Date: 2011-09-15 13:57+0000\n"
-"Last-Translator: hadrihilmi <hadri.hilmi@gmail.com>\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Malay (Malaysia) (http://www.transifex.net/projects/p/owncloud/team/ms_MY/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,6 +18,51 @@ msgstr ""
"Language: ms_MY\n"
"Plural-Forms: nplurals=1; plural=0\n"
+#: lostpassword/index.php:24
+msgid "Owncloud password reset"
+msgstr ""
+
+#: lostpassword/templates/email.php:1
+msgid "Use the following link to reset your password: {link}"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Requested"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:22
+#: templates/login.php:8
+msgid "Username"
+msgstr "Nama pengguna"
+
+#: lostpassword/templates/lostpassword.php:14
+msgid "Request reset"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr ""
+
#: strings.php:5
msgid "Personal"
msgstr "Peribadi"
@@ -46,54 +91,50 @@ msgstr "Awan tidak dijumpai"
msgid "Create an <strong>admin account</strong>"
msgstr "buat <strong>akaun admin</strong>"
-#: templates/installation.php:21
-msgid "Username"
-msgstr "Nama pengguna"
-
-#: templates/installation.php:22
+#: templates/installation.php:26 templates/login.php:12
msgid "Password"
msgstr "Kata laluan"
-#: templates/installation.php:27
+#: templates/installation.php:32
+msgid "Advanced"
+msgstr "Maju"
+
+#: templates/installation.php:34
+msgid "Data folder"
+msgstr "Fail data"
+
+#: templates/installation.php:41
msgid "Configure the database"
msgstr "Konfigurasi pangkalan data"
-#: templates/installation.php:32 templates/installation.php:43
-#: templates/installation.php:53
+#: templates/installation.php:46 templates/installation.php:57
+#: templates/installation.php:67
msgid "will be used"
msgstr "akan digunakan"
-#: templates/installation.php:64
+#: templates/installation.php:79
msgid "Database user"
msgstr "Nama pengguna pangkalan data"
-#: templates/installation.php:65
+#: templates/installation.php:83
msgid "Database password"
msgstr "Kata laluan pangkalan data"
-#: templates/installation.php:66
+#: templates/installation.php:87
msgid "Database name"
msgstr "Nama pangkalan data"
-#: templates/installation.php:72
-msgid "Advanced"
-msgstr "Maju"
-
-#: templates/installation.php:75
+#: templates/installation.php:93
msgid "Database host"
msgstr "Hos pangkalan data"
-#: templates/installation.php:76
-msgid "Data folder"
-msgstr "Fail data"
-
-#: templates/installation.php:79
+#: templates/installation.php:98
msgid "Finish setup"
msgstr "Setup selesai"
#: templates/layout.guest.php:35
-msgid "gives you freedom and control over your own data"
-msgstr "memberikan anda kebebasan dan kendalian keatas data anda"
+msgid "web services under your control"
+msgstr ""
#: templates/layout.user.php:34
msgid "Log out"
@@ -103,40 +144,22 @@ msgstr "Log keluar"
msgid "Settings"
msgstr "Tetapan"
-#: templates/login.php:4
+#: templates/login.php:5
msgid "Lost your password?"
msgstr "Hilang kata laluan?"
-#: templates/login.php:9 templates/login.php:13
+#: templates/login.php:15
msgid "remember"
msgstr "ingat"
+#: templates/login.php:16
+msgid "Log in"
+msgstr ""
+
#: templates/logout.php:1
msgid "You are logged out."
msgstr "Anda telah log keluar."
-#: templates/lostpassword.php:3
-msgid "You will receive a link to reset your password via Email."
-msgstr ""
-"Anda akan menerima link untuk menetapkan semula kata laluan anda melalui "
-"emel"
-
-#: templates/lostpassword.php:5
-msgid "Requested"
-msgstr "diminta"
-
-#: templates/lostpassword.php:8
-msgid "Login failed!"
-msgstr "Log in gagal!"
-
-#: templates/lostpassword.php:10
-msgid "Username or Email"
-msgstr "Nama pengguna atau Emel"
-
-#: templates/lostpassword.php:11
-msgid "Request reset"
-msgstr "Minta set semula"
-
#: templates/part.pagenavi.php:3
msgid "prev"
msgstr "sebelum"
@@ -145,16 +168,4 @@ msgstr "sebelum"
msgid "next"
msgstr "seterus"
-#: templates/resetpassword.php:4
-msgid "Your password was reset"
-msgstr "Kata laluan anda diset semula"
-
-#: templates/resetpassword.php:6
-msgid "New password"
-msgstr "Kata laluan baru"
-
-#: templates/resetpassword.php:7
-msgid "Reset password"
-msgstr "Set semula kata laluan"
-
diff --git a/l10n/ms_MY/files.po b/l10n/ms_MY/files.po
index 2e340c01696..1d35a713693 100644
--- a/l10n/ms_MY/files.po
+++ b/l10n/ms_MY/files.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Malay (Malaysia) (http://www.transifex.net/projects/p/owncloud/team/ms_MY/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,33 +18,33 @@ msgstr ""
"Language: ms_MY\n"
"Plural-Forms: nplurals=1; plural=0\n"
-#: ajax/upload.php:24
+#: ajax/upload.php:19
msgid "There is no error, the file uploaded with success"
msgstr ""
-#: ajax/upload.php:25
+#: ajax/upload.php:20
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr ""
-#: ajax/upload.php:26
+#: ajax/upload.php:21
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
-#: ajax/upload.php:27
+#: ajax/upload.php:22
msgid "The uploaded file was only partially uploaded"
msgstr ""
-#: ajax/upload.php:28
+#: ajax/upload.php:23
msgid "No file was uploaded"
msgstr ""
-#: ajax/upload.php:29
+#: ajax/upload.php:24
msgid "Missing a temporary folder"
msgstr ""
-#: appinfo/app.php:7
+#: appinfo/app.php:8
msgid "Files"
msgstr "fail"
@@ -52,43 +52,55 @@ msgstr "fail"
msgid "Maximum upload size"
msgstr "Saiz maksimum muat naik"
+#: templates/index.php:7
+msgid "New"
+msgstr ""
+
#: templates/index.php:10
+msgid "Text file"
+msgstr ""
+
+#: templates/index.php:11
+msgid "Folder"
+msgstr ""
+
+#: templates/index.php:12
+msgid "From the web"
+msgstr ""
+
+#: templates/index.php:22
msgid "Upload"
msgstr "Muat naik"
-#: templates/index.php:17
-msgid "New Folder"
-msgstr "Folder baru"
-
-#: templates/index.php:31
+#: templates/index.php:35
msgid "Nothing in here. Upload something!"
msgstr "Tiada apa-apa di sini. Muat naik sesuatu!"
-#: templates/index.php:39
+#: templates/index.php:43
msgid "Name"
msgstr "Nama "
-#: templates/index.php:41
+#: templates/index.php:45
msgid "Download"
msgstr "Muat turun"
-#: templates/index.php:45
+#: templates/index.php:49
msgid "Size"
msgstr "Saiz"
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Modified"
msgstr "Dimodifikasi"
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Delete"
msgstr "Padam"
-#: templates/index.php:54
+#: templates/index.php:58
msgid "Upload too large"
msgstr "Muat naik terlalu besar"
-#: templates/index.php:56
+#: templates/index.php:60
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
diff --git a/l10n/ms_MY/gallery.po b/l10n/ms_MY/gallery.po
new file mode 100644
index 00000000000..2aa2b4a3905
--- /dev/null
+++ b/l10n/ms_MY/gallery.po
@@ -0,0 +1,32 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:48+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Malay (Malaysia) (http://www.transifex.net/projects/p/owncloud/team/ms_MY/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ms_MY\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: appinfo/app.php:41
+msgid "Gallery"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Rescan"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+
diff --git a/l10n/ms_MY/media.po b/l10n/ms_MY/media.po
index f6c41264bc1..b0ee4ec4540 100644
--- a/l10n/ms_MY/media.po
+++ b/l10n/ms_MY/media.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 18:17+0200\n"
-"PO-Revision-Date: 2011-09-09 00:01+0000\n"
-"Last-Translator: hadrihilmi <hadri.hilmi@gmail.com>\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Malay (Malaysia) (http://www.transifex.net/projects/p/owncloud/team/ms_MY/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,15 +18,15 @@ msgstr ""
"Language: ms_MY\n"
"Plural-Forms: nplurals=1; plural=0\n"
-#: appinfo/app.php:31
+#: appinfo/app.php:32
msgid "Music"
msgstr "Muzik"
-#: templates/music.php:3
+#: templates/music.php:3 templates/player.php:13
msgid "Play"
msgstr "Main"
-#: templates/music.php:4 templates/music.php:30
+#: templates/music.php:4 templates/music.php:26 templates/player.php:14
msgid "Pause"
msgstr "Jeda"
@@ -34,7 +34,7 @@ msgstr "Jeda"
msgid "Previous"
msgstr "Sebelum"
-#: templates/music.php:6
+#: templates/music.php:6 templates/player.php:15
msgid "Next"
msgstr "Seterus"
@@ -46,11 +46,7 @@ msgstr "Bisu"
msgid "Unmute"
msgstr "Nyahbisu"
-#: templates/music.php:28
-msgid "Songs scanned"
-msgstr "Lagu telah diimbas"
-
-#: templates/music.php:29
+#: templates/music.php:25
msgid "Rescan Collection"
msgstr "Imbas semula koleksi"
diff --git a/l10n/ms_MY/settings.po b/l10n/ms_MY/settings.po
index dda63fafd8d..d8166d0823a 100644
--- a/l10n/ms_MY/settings.po
+++ b/l10n/ms_MY/settings.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 18:17+0200\n"
-"PO-Revision-Date: 2011-09-15 14:00+0000\n"
-"Last-Translator: hadrihilmi <hadri.hilmi@gmail.com>\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Malay (Malaysia) (http://www.transifex.net/projects/p/owncloud/team/ms_MY/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,22 +18,26 @@ msgstr ""
"Language: ms_MY\n"
"Plural-Forms: nplurals=1; plural=0\n"
-#: ajax/openid.php:13 ajax/setlanguage.php:13
-msgid "Authentication error"
-msgstr "Ralat pengesahan"
-
-#: ajax/openid.php:21
-msgid "OpenID Changed"
-msgstr "OpenID ditukar"
+#: ajax/lostpassword.php:14
+msgid "email Changed"
+msgstr ""
-#: ajax/openid.php:23 ajax/setlanguage.php:23
+#: ajax/lostpassword.php:16 ajax/openid.php:17 ajax/setlanguage.php:16
msgid "Invalid request"
msgstr "Permintaan tidak sah"
-#: ajax/setlanguage.php:21
+#: ajax/openid.php:15
+msgid "OpenID Changed"
+msgstr "OpenID ditukar"
+
+#: ajax/setlanguage.php:14
msgid "Language changed"
msgstr "Bahasa ditukar"
+#: templates/admin.php:13
+msgid "Log level"
+msgstr ""
+
#: templates/apps.php:8
msgid "Add your application"
msgstr "Tambah aplikasi anda"
@@ -54,15 +58,15 @@ msgstr "oleh"
msgid "Ask a question"
msgstr "Tanya soalan"
-#: templates/help.php:17
+#: templates/help.php:20
msgid "Problems connecting to help database."
msgstr "Masalah menghubung untuk membantu pengkalan data"
-#: templates/help.php:18
+#: templates/help.php:21
msgid "Go there manually."
msgstr "Pergi ke sana secara manual"
-#: templates/help.php:26
+#: templates/help.php:29
msgid "Answer"
msgstr "Jawapan"
@@ -98,36 +102,52 @@ msgstr "Papar"
msgid "Change password"
msgstr "Tukar kata laluan"
-#: templates/personal.php:24 templates/personal.php:25
+#: templates/personal.php:24
+msgid "Email"
+msgstr ""
+
+#: templates/personal.php:25
+msgid "Your email address"
+msgstr ""
+
+#: templates/personal.php:26
+msgid "Fill in an email address to enable password recovery"
+msgstr ""
+
+#: templates/personal.php:32 templates/personal.php:33
msgid "Language"
msgstr "Bahasa"
-#: templates/personal.php:30
-msgid "Help translating"
-msgstr "Bantu perterjemahan"
+#: templates/personal.php:38
+msgid "Help translate"
+msgstr ""
-#: templates/personal.php:37
+#: templates/personal.php:45
msgid "use this address to connect to your ownCloud in your file manager"
msgstr ""
"guna alamat ini untuk menyambung owncloud anda dalam pengurus fail anda"
-#: templates/users.php:16
+#: templates/users.php:15 templates/users.php:30
msgid "Name"
msgstr "Nama"
-#: templates/users.php:17
+#: templates/users.php:16 templates/users.php:31
msgid "Password"
msgstr "Kata laluan "
-#: templates/users.php:18 templates/users.php:36
+#: templates/users.php:17 templates/users.php:32 templates/users.php:46
msgid "Groups"
msgstr "Kumpulan"
-#: templates/users.php:24
+#: templates/users.php:23
msgid "Create"
msgstr "Buat"
-#: templates/users.php:48
+#: templates/users.php:33
+msgid "Quota"
+msgstr ""
+
+#: templates/users.php:58
msgid "Delete"
msgstr "Padam"
diff --git a/l10n/nb_NO/calendar.po b/l10n/nb_NO/calendar.po
index b80bf9cbb76..3021b6bb4cb 100644
--- a/l10n/nb_NO/calendar.po
+++ b/l10n/nb_NO/calendar.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.net/projects/p/owncloud/team/nb_NO/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,321 +18,403 @@ msgstr ""
"Language: nb_NO\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/createcalendar.php:18 ajax/settimezone.php:19
-#: ajax/updatecalendar.php:18
-msgid "Authentication error"
-msgstr "Autentifikasjonsfeil"
-
-#: ajax/editeventform.php:25
-msgid "Wrong calendar"
+#: ajax/guesstimezone.php:42
+msgid "New Timezone:"
msgstr ""
-#: ajax/settimezone.php:27
+#: ajax/settimezone.php:22
msgid "Timezone changed"
msgstr "Tidssone endret"
-#: ajax/settimezone.php:29
+#: ajax/settimezone.php:24
msgid "Invalid request"
msgstr "Ugyldig forespørsel"
-#: appinfo/app.php:19 templates/part.eventform.php:27
-#: templates/part.eventinfo.php:18
+#: appinfo/app.php:20 templates/calendar.php:13
+#: templates/part.eventform.php:20
msgid "Calendar"
msgstr "Kalender"
-#: lib/object.php:292
+#: lib/app.php:19
+msgid "Wrong calendar"
+msgstr ""
+
+#: lib/app.php:60 lib/object.php:332
msgid "Birthday"
msgstr ""
-#: lib/object.php:293
+#: lib/app.php:61 lib/object.php:333
msgid "Business"
msgstr ""
-#: lib/object.php:294
+#: lib/app.php:62 lib/object.php:334
msgid "Call"
msgstr ""
-#: lib/object.php:295
+#: lib/app.php:63 lib/object.php:335
msgid "Clients"
msgstr ""
-#: lib/object.php:296
+#: lib/app.php:64 lib/object.php:336
msgid "Deliverer"
msgstr ""
-#: lib/object.php:297
+#: lib/app.php:65 lib/object.php:337
msgid "Holidays"
msgstr ""
-#: lib/object.php:298
+#: lib/app.php:66 lib/object.php:338
msgid "Ideas"
msgstr ""
-#: lib/object.php:299
+#: lib/app.php:67 lib/object.php:339
msgid "Journey"
msgstr ""
-#: lib/object.php:300
+#: lib/app.php:68 lib/object.php:340
msgid "Jubilee"
msgstr ""
-#: lib/object.php:301
+#: lib/app.php:69 lib/object.php:341
msgid "Meeting"
msgstr ""
-#: lib/object.php:302
+#: lib/app.php:70 lib/object.php:342
msgid "Other"
msgstr ""
-#: lib/object.php:303
+#: lib/app.php:71 lib/object.php:343
msgid "Personal"
msgstr ""
-#: lib/object.php:304
+#: lib/app.php:72 lib/object.php:344
msgid "Projects"
msgstr ""
-#: lib/object.php:305
+#: lib/app.php:73 lib/object.php:345
msgid "Questions"
msgstr ""
-#: lib/object.php:306
+#: lib/app.php:74 lib/object.php:346
msgid "Work"
msgstr ""
-#: lib/object.php:313
+#: lib/object.php:353
msgid "Does not repeat"
msgstr "Gjentas ikke"
-#: lib/object.php:314
+#: lib/object.php:354
msgid "Daily"
msgstr "Daglig"
-#: lib/object.php:315
+#: lib/object.php:355
msgid "Weekly"
msgstr "Ukentlig"
-#: lib/object.php:316
+#: lib/object.php:356
msgid "Every Weekday"
msgstr "Hver ukedag"
-#: lib/object.php:317
+#: lib/object.php:357
msgid "Bi-Weekly"
msgstr ""
-#: lib/object.php:318
+#: lib/object.php:358
msgid "Monthly"
msgstr "Månedlig"
-#: lib/object.php:319
+#: lib/object.php:359
msgid "Yearly"
msgstr "Årlig"
-#: lib/object.php:337
-msgid "Not an array"
+#: lib/object.php:366
+msgid "never"
msgstr ""
-#: templates/calendar.php:3
-msgid "All day"
-msgstr "Hele dagen "
+#: lib/object.php:367
+msgid "by occurrences"
+msgstr ""
-#: templates/calendar.php:32
-msgid "Sunday"
-msgstr "Søndag"
+#: lib/object.php:368
+msgid "by date"
+msgstr ""
+
+#: lib/object.php:375
+msgid "by monthday"
+msgstr ""
+
+#: lib/object.php:376
+msgid "by weekday"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:383 templates/lAfix.php:3
msgid "Monday"
-msgstr "Mandag"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:384 templates/lAfix.php:4
msgid "Tuesday"
-msgstr "Tirsdag"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:385 templates/lAfix.php:5
msgid "Wednesday"
-msgstr "Onsdag"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:386 templates/lAfix.php:6
msgid "Thursday"
-msgstr "Torsdag"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:387 templates/lAfix.php:7
msgid "Friday"
-msgstr "Fredag"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:388 templates/lAfix.php:8
msgid "Saturday"
-msgstr "Lørdag"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Sun."
-msgstr "Sø."
+#: lib/object.php:389 templates/lAfix.php:2
+msgid "Sunday"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Mon."
-msgstr "Ma."
+#: lib/object.php:396
+msgid "events week of month"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Tue."
-msgstr "Ti."
+#: lib/object.php:397
+msgid "first"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Wed."
-msgstr "On."
+#: lib/object.php:398
+msgid "second"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Thu."
-msgstr "To."
+#: lib/object.php:399
+msgid "third"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Fri."
-msgstr "Fr."
+#: lib/object.php:400
+msgid "fourth"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Sat."
-msgstr "Lø."
+#: lib/object.php:401
+msgid "fifth"
+msgstr ""
+
+#: lib/object.php:402
+msgid "last"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:424 templates/lAfix.php:16
msgid "January"
-msgstr "Januar"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:425 templates/lAfix.php:17
msgid "February"
-msgstr "Februar"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:426 templates/lAfix.php:18
msgid "March"
-msgstr "Mars"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:427 templates/lAfix.php:19
msgid "April"
-msgstr "April"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:428 templates/lAfix.php:20
msgid "May"
-msgstr "Mai"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:429 templates/lAfix.php:21
msgid "June"
-msgstr "Juni"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:430 templates/lAfix.php:22
msgid "July"
-msgstr "Juli"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:431 templates/lAfix.php:23
msgid "August"
-msgstr "August"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:432 templates/lAfix.php:24
msgid "September"
-msgstr "September"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:433 templates/lAfix.php:25
msgid "October"
-msgstr "Oktober"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:434 templates/lAfix.php:26
msgid "November"
-msgstr "November"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:435 templates/lAfix.php:27
msgid "December"
-msgstr "Desember"
-
-#: templates/calendar.php:35
-msgid "Jan."
-msgstr "jan."
+msgstr ""
-#: templates/calendar.php:35
-msgid "Feb."
-msgstr "feb."
+#: lib/object.php:441
+msgid "by events date"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Mar."
-msgstr "mar."
+#: lib/object.php:442
+msgid "by yearday(s)"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Apr."
-msgstr "apr."
+#: lib/object.php:443
+msgid "by weeknumber(s)"
+msgstr ""
-#: templates/calendar.php:35
-msgid "May."
+#: lib/object.php:444
+msgid "by day and month"
msgstr ""
-#: templates/calendar.php:35
-msgid "Jun."
-msgstr "jun."
+#: lib/object.php:467
+msgid "Not an array"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Jul."
-msgstr "jul."
+#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+msgid "Date"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Aug."
-msgstr "aug."
+#: lib/search.php:40
+msgid "Cal."
+msgstr ""
-#: templates/calendar.php:35
-msgid "Sep."
-msgstr "sep."
+#: templates/calendar.php:10
+msgid "All day"
+msgstr "Hele dagen "
-#: templates/calendar.php:35
-msgid "Oct."
-msgstr "okt."
+#: templates/calendar.php:11
+msgid "Missing fields"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Nov."
-msgstr "nov."
+#: templates/calendar.php:12 templates/part.eventform.php:3
+msgid "Title"
+msgstr "Tittel"
-#: templates/calendar.php:35
-msgid "Dec."
-msgstr "des."
+#: templates/calendar.php:14
+msgid "From Date"
+msgstr ""
-#: templates/calendar.php:36 templates/calendar.php:50
-#: templates/calendar.php:116
-msgid "Week"
-msgstr "Uke"
+#: templates/calendar.php:15
+msgid "From Time"
+msgstr ""
-#: templates/calendar.php:37 templates/calendar.php:51
-msgid "Weeks"
-msgstr "Uke"
+#: templates/calendar.php:16
+msgid "To Date"
+msgstr ""
-#: templates/calendar.php:38
-msgid "More before {startdate}"
+#: templates/calendar.php:17
+msgid "To Time"
msgstr ""
-#: templates/calendar.php:39
-msgid "More after {enddate}"
+#: templates/calendar.php:18
+msgid "The event ends before it starts"
msgstr ""
-#: templates/calendar.php:49
-msgid "Day"
-msgstr "Dag"
+#: templates/calendar.php:19
+msgid "There was a database fail"
+msgstr ""
#: templates/calendar.php:52
+msgid "Week"
+msgstr "Uke"
+
+#: templates/calendar.php:53
msgid "Month"
msgstr "ned"
-#: templates/calendar.php:53
+#: templates/calendar.php:54
msgid "List"
msgstr ""
-#: templates/calendar.php:58
+#: templates/calendar.php:59
msgid "Today"
msgstr "I dag"
-#: templates/calendar.php:59
+#: templates/calendar.php:60
msgid "Calendars"
msgstr "Kalendre"
-#: templates/calendar.php:76 templates/calendar.php:94
-msgid "Time"
-msgstr "Tid"
-
-#: templates/calendar.php:169
+#: templates/calendar.php:78
msgid "There was a fail, while parsing the file."
msgstr ""
+#: templates/lAfix.php:9
+msgid "Sun."
+msgstr ""
+
+#: templates/lAfix.php:10
+msgid "Mon."
+msgstr ""
+
+#: templates/lAfix.php:11
+msgid "Tue."
+msgstr ""
+
+#: templates/lAfix.php:12
+msgid "Wed."
+msgstr ""
+
+#: templates/lAfix.php:13
+msgid "Thu."
+msgstr ""
+
+#: templates/lAfix.php:14
+msgid "Fri."
+msgstr ""
+
+#: templates/lAfix.php:15
+msgid "Sat."
+msgstr ""
+
+#: templates/lAfix.php:28
+msgid "Jan."
+msgstr ""
+
+#: templates/lAfix.php:29
+msgid "Feb."
+msgstr ""
+
+#: templates/lAfix.php:30
+msgid "Mar."
+msgstr ""
+
+#: templates/lAfix.php:31
+msgid "Apr."
+msgstr ""
+
+#: templates/lAfix.php:32
+msgid "May."
+msgstr ""
+
+#: templates/lAfix.php:33
+msgid "Jun."
+msgstr ""
+
+#: templates/lAfix.php:34
+msgid "Jul."
+msgstr ""
+
+#: templates/lAfix.php:35
+msgid "Aug."
+msgstr ""
+
+#: templates/lAfix.php:36
+msgid "Sep."
+msgstr ""
+
+#: templates/lAfix.php:37
+msgid "Oct."
+msgstr ""
+
+#: templates/lAfix.php:38
+msgid "Nov."
+msgstr ""
+
+#: templates/lAfix.php:39
+msgid "Dec."
+msgstr ""
+
#: templates/part.choosecalendar.php:1
msgid "Choose active calendars"
msgstr "Velg en aktiv kalender"
@@ -351,12 +433,11 @@ msgid "Download"
msgstr "Last ned"
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.eventinfo.php:64
msgid "Edit"
msgstr "Endre"
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.editevent.php:8
+#: templates/part.editevent.php:9
msgid "Delete"
msgstr ""
@@ -376,90 +457,181 @@ msgstr "Visningsnavn"
msgid "Active"
msgstr "Aktiv"
-#: templates/part.editcalendar.php:29 templates/part.eventform.php:88
-#: templates/part.eventinfo.php:58
-msgid "Description"
-msgstr "Beskrivelse"
-
-#: templates/part.editcalendar.php:35
+#: templates/part.editcalendar.php:29
msgid "Calendar color"
msgstr "Kalenderfarge"
-#: templates/part.editcalendar.php:41
+#: templates/part.editcalendar.php:42
msgid "Save"
msgstr ""
-#: templates/part.editcalendar.php:41 templates/part.editevent.php:7
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
#: templates/part.newevent.php:6
msgid "Submit"
msgstr "Lagre"
-#: templates/part.editcalendar.php:42
+#: templates/part.editcalendar.php:43
msgid "Cancel"
msgstr ""
-#: templates/part.editevent.php:1 templates/part.eventinfo.php:1
+#: templates/part.editevent.php:1
msgid "Edit an event"
msgstr "Rediger en hendelse"
-#: templates/part.eventform.php:3 templates/part.eventinfo.php:4
-msgid "Title"
-msgstr "Tittel"
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr ""
#: templates/part.eventform.php:5
msgid "Title of the Event"
msgstr "Hendelsestittel"
-#: templates/part.eventform.php:9 templates/part.eventinfo.php:9
-msgid "Location"
-msgstr "Sted"
-
#: templates/part.eventform.php:11
-msgid "Location of the Event"
-msgstr "Hendelsessted"
-
-#: templates/part.eventform.php:17 templates/part.eventinfo.php:16
msgid "Category"
msgstr "Kategori"
-#: templates/part.eventform.php:19
+#: templates/part.eventform.php:13
msgid "Select category"
msgstr ""
-#: templates/part.eventform.php:45 templates/part.eventinfo.php:28
+#: templates/part.eventform.php:37
msgid "All Day Event"
msgstr "Hele dagen-hendelse"
-#: templates/part.eventform.php:49 templates/part.eventinfo.php:31
+#: templates/part.eventform.php:41
msgid "From"
msgstr "Fra"
-#: templates/part.eventform.php:57 templates/part.eventinfo.php:38
+#: templates/part.eventform.php:49
msgid "To"
msgstr "Til"
-#: templates/part.eventform.php:65 templates/part.eventinfo.php:44
+#: templates/part.eventform.php:57
+msgid "Advanced options"
+msgstr ""
+
+#: templates/part.eventform.php:61
msgid "Repeat"
msgstr "Gjenta"
-#: templates/part.eventform.php:81 templates/part.eventinfo.php:51
-msgid "Attendees"
-msgstr "Deltakere"
+#: templates/part.eventform.php:68
+msgid "Advanced"
+msgstr ""
-#: templates/part.eventform.php:89
+#: templates/part.eventform.php:112
+msgid "Select weekdays"
+msgstr ""
+
+#: templates/part.eventform.php:125 templates/part.eventform.php:138
+msgid "Select days"
+msgstr ""
+
+#: templates/part.eventform.php:130
+msgid "and the events day of year."
+msgstr ""
+
+#: templates/part.eventform.php:143
+msgid "and the events day of month."
+msgstr ""
+
+#: templates/part.eventform.php:151
+msgid "Select months"
+msgstr ""
+
+#: templates/part.eventform.php:164
+msgid "Select weeks"
+msgstr ""
+
+#: templates/part.eventform.php:169
+msgid "and the events week of year."
+msgstr ""
+
+#: templates/part.eventform.php:175
+msgid "Interval"
+msgstr ""
+
+#: templates/part.eventform.php:181
+msgid "End"
+msgstr ""
+
+#: templates/part.eventform.php:193
+msgid "occurrences"
+msgstr ""
+
+#: templates/part.eventform.php:208
+msgid "Location"
+msgstr "Sted"
+
+#: templates/part.eventform.php:210
+msgid "Location of the Event"
+msgstr "Hendelsessted"
+
+#: templates/part.eventform.php:216
+msgid "Description"
+msgstr "Beskrivelse"
+
+#: templates/part.eventform.php:218
msgid "Description of the Event"
msgstr "Hendelesebeskrivelse"
-#: templates/part.eventinfo.php:63
-msgid "Close"
-msgstr "Lukk"
+#: templates/part.import.php:1
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the calendar"
+msgstr ""
+
+#: templates/part.import.php:10
+msgid "create a new calendar"
+msgstr ""
+
+#: templates/part.import.php:15
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import"
+msgstr ""
+
+#: templates/part.import.php:20
+msgid "Importing calendar"
+msgstr ""
+
+#: templates/part.import.php:23
+msgid "Calendar imported successfully"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Close Dialog"
+msgstr ""
#: templates/part.newevent.php:1
msgid "Create a new event"
msgstr "Opprett en ny hendelse"
-#: templates/settings.php:11
+#: templates/settings.php:13
msgid "Timezone"
msgstr "Tidssone"
+#: templates/settings.php:30
+msgid "Check always for changes of the timezone"
+msgstr ""
+
+#: templates/settings.php:32
+msgid "Timeformat"
+msgstr ""
+
+#: templates/settings.php:34
+msgid "24h"
+msgstr ""
+
+#: templates/settings.php:35
+msgid "12h"
+msgstr ""
+
+#: templates/settings.php:41
+msgid "Calendar CalDAV syncing address:"
+msgstr ""
+
diff --git a/l10n/nb_NO/contacts.po b/l10n/nb_NO/contacts.po
index 430819ce1c9..47e67f25b32 100644
--- a/l10n/nb_NO/contacts.po
+++ b/l10n/nb_NO/contacts.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 20:10+0200\n"
-"PO-Revision-Date: 2011-09-23 18:11+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.net/projects/p/owncloud/team/nb_NO/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,164 +17,273 @@ msgstr ""
"Language: nb_NO\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/addcard.php:31 ajax/addproperty.php:31 ajax/deletebook.php:32
-#: ajax/deletecard.php:32 ajax/deleteproperty.php:34 ajax/getdetails.php:32
-#: ajax/setproperty.php:32 ajax/showaddcard.php:30 ajax/showaddproperty.php:31
-#: ajax/showsetproperty.php:32 photo.php:32
-msgid "You need to log in."
+#: ajax/activation.php:17 ajax/updateaddressbook.php:26
+msgid "Error (de)activating addressbook."
msgstr ""
-#: ajax/addcard.php:37
-msgid "This is not your addressbook."
+#: ajax/addcard.php:79
+msgid "There was an error adding the contact."
msgstr ""
-#: ajax/addproperty.php:37 ajax/deletecard.php:39 ajax/deleteproperty.php:41
-#: ajax/getdetails.php:39 ajax/setproperty.php:38 ajax/showaddproperty.php:37
-#: ajax/showsetproperty.php:38 photo.php:39
-msgid "Contact could not be found."
+#: ajax/addproperty.php:39
+msgid "Cannot add empty property."
msgstr ""
-#: ajax/addproperty.php:43 ajax/deletebook.php:38 ajax/deletecard.php:45
-#: ajax/deleteproperty.php:47 ajax/getdetails.php:45 ajax/setproperty.php:44
-#: ajax/showaddproperty.php:43 ajax/showsetproperty.php:44 photo.php:45
-msgid "This is not your contact."
+#: ajax/addproperty.php:51
+msgid "At least one of the address fields has to be filled out."
msgstr ""
-#: ajax/addproperty.php:50 ajax/deleteproperty.php:54 ajax/getdetails.php:52
-#: ajax/setproperty.php:51 ajax/showsetproperty.php:51
-msgid "vCard could not be read."
+#: ajax/addproperty.php:77
+msgid "Error adding contact property."
msgstr ""
-#: ajax/deleteproperty.php:65 ajax/setproperty.php:62
-#: ajax/showsetproperty.php:62
-msgid "Information about vCard is incorrect. Please reload the page."
+#: ajax/createaddressbook.php:20
+msgid "Error adding addressbook."
msgstr ""
-#: photo.php:53
-msgid "This card is not RFC compatible."
+#: ajax/createaddressbook.php:26
+msgid "Error activating addressbook."
msgstr ""
-#: photo.php:90
-msgid "This card does not contain a photo."
+#: ajax/deleteproperty.php:40
+msgid "Error deleting contact property."
msgstr ""
-#: templates/index.php:8
-msgid "Add Contact"
+#: ajax/setproperty.php:79
+msgid "Error updating contact property."
msgstr ""
-#: templates/part.addcardform.php:5
-msgid "Group"
+#: ajax/updateaddressbook.php:20
+msgid "Error updating addressbook."
msgstr ""
-#: templates/part.addcardform.php:12 templates/part.property.php:3
-msgid "Name"
+#: appinfo/app.php:21 templates/settings.php:3
+msgid "Contacts"
msgstr ""
-#: templates/part.addcardform.php:14
-msgid "Create Contact"
+#: lib/app.php:42
+msgid "This is not your addressbook."
+msgstr ""
+
+#: lib/app.php:51 photo.php:34
+msgid "Contact could not be found."
+msgstr ""
+
+#: lib/app.php:79
+msgid "Information about vCard is incorrect. Please reload the page."
msgstr ""
-#: templates/part.addpropertyform.php:4 templates/part.property.php:40
+#: lib/app.php:91 templates/part.addcardform.php:54
+#: templates/part.property.php:45 templates/part.setpropertyform.php:7
msgid "Address"
msgstr ""
-#: templates/part.addpropertyform.php:5
+#: lib/app.php:92 templates/part.addcardform.php:43
msgid "Telephone"
msgstr ""
-#: templates/part.addpropertyform.php:6 templates/part.property.php:22
+#: lib/app.php:93 templates/part.addcardform.php:37
+#: templates/part.property.php:16 templates/part.setpropertyform.php:51
msgid "Email"
msgstr ""
-#: templates/part.addpropertyform.php:7 templates/part.property.php:15
+#: lib/app.php:94 templates/part.addcardform.php:27
+#: templates/part.property.php:9 templates/part.setpropertyform.php:54
msgid "Organization"
msgstr ""
-#: templates/part.addpropertyform.php:17 templates/part.addpropertyform.php:32
+#: lib/app.php:106 lib/app.php:113
msgid "Work"
msgstr ""
-#: templates/part.addpropertyform.php:18 templates/part.addpropertyform.php:30
+#: lib/app.php:107 lib/app.php:111
msgid "Home"
msgstr ""
-#: templates/part.addpropertyform.php:20 templates/part.property.php:48
-#: templates/part.setpropertyform.php:5
+#: lib/app.php:112
+msgid "Mobile"
+msgstr ""
+
+#: lib/app.php:114
+msgid "Text"
+msgstr ""
+
+#: lib/app.php:115
+msgid "Voice"
+msgstr ""
+
+#: lib/app.php:116
+msgid "Fax"
+msgstr ""
+
+#: lib/app.php:117
+msgid "Video"
+msgstr ""
+
+#: lib/app.php:118
+msgid "Pager"
+msgstr ""
+
+#: lib/search.php:22
+msgid "Contact"
+msgstr ""
+
+#: photo.php:40
+msgid "This is not your contact."
+msgstr ""
+
+#: photo.php:48
+msgid "This card is not RFC compatible."
+msgstr ""
+
+#: photo.php:85
+msgid "This card does not contain a photo."
+msgstr ""
+
+#: templates/index.php:6
+msgid "Add Contact"
+msgstr ""
+
+#: templates/index.php:7
+msgid "Addressbooks"
+msgstr ""
+
+#: templates/part.addcardform.php:8
+msgid "Addressbook"
+msgstr ""
+
+#: templates/part.addcardform.php:21
+msgid "Name"
+msgstr ""
+
+#: templates/part.addcardform.php:57 templates/part.details.php:43
+#: templates/part.details.php:79 templates/part.setpropertyform.php:10
+#: templates/part.setpropertyform.php:47
+msgid "Type"
+msgstr ""
+
+#: templates/part.addcardform.php:65 templates/part.details.php:49
+#: templates/part.setpropertyform.php:16
msgid "PO Box"
msgstr ""
-#: templates/part.addpropertyform.php:21 templates/part.property.php:51
-#: templates/part.setpropertyform.php:6
+#: templates/part.addcardform.php:72 templates/part.details.php:53
+#: templates/part.setpropertyform.php:20
msgid "Extended"
msgstr ""
-#: templates/part.addpropertyform.php:22 templates/part.property.php:54
-#: templates/part.setpropertyform.php:7
+#: templates/part.addcardform.php:78 templates/part.details.php:57
+#: templates/part.setpropertyform.php:24
msgid "Street"
msgstr ""
-#: templates/part.addpropertyform.php:23 templates/part.property.php:57
-#: templates/part.setpropertyform.php:8
+#: templates/part.addcardform.php:84 templates/part.details.php:61
+#: templates/part.setpropertyform.php:28
msgid "City"
msgstr ""
-#: templates/part.addpropertyform.php:24 templates/part.property.php:60
-#: templates/part.setpropertyform.php:9
+#: templates/part.addcardform.php:90 templates/part.details.php:65
+#: templates/part.setpropertyform.php:32
msgid "Region"
msgstr ""
-#: templates/part.addpropertyform.php:25 templates/part.property.php:63
-#: templates/part.setpropertyform.php:10
+#: templates/part.addcardform.php:96 templates/part.details.php:69
+#: templates/part.setpropertyform.php:36
msgid "Zipcode"
msgstr ""
-#: templates/part.addpropertyform.php:26 templates/part.property.php:66
-#: templates/part.setpropertyform.php:11
+#: templates/part.addcardform.php:102 templates/part.details.php:73
+#: templates/part.setpropertyform.php:40
msgid "Country"
msgstr ""
-#: templates/part.addpropertyform.php:31
-msgid "Mobile"
+#: templates/part.addcardform.php:109
+msgid "Create Contact"
msgstr ""
-#: templates/part.addpropertyform.php:33
-msgid "Text"
+#: templates/part.chooseaddressbook.php:1
+msgid "Choose active Address Books"
msgstr ""
-#: templates/part.addpropertyform.php:34
-msgid "Voice"
+#: templates/part.chooseaddressbook.php:16
+msgid "New Address Book"
msgstr ""
-#: templates/part.addpropertyform.php:35
-msgid "Fax"
+#: templates/part.chooseaddressbook.php:21
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "CardDav Link"
msgstr ""
-#: templates/part.addpropertyform.php:36
-msgid "Video"
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Download"
msgstr ""
-#: templates/part.addpropertyform.php:37
-msgid "Pager"
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Edit"
msgstr ""
-#: templates/part.details.php:33
+#: templates/part.chooseaddressbook.rowfields.php:5
msgid "Delete"
msgstr ""
+#: templates/part.details.php:3
+msgid "Download contact"
+msgstr ""
+
+#: templates/part.details.php:4
+msgid "Delete contact"
+msgstr ""
+
#: templates/part.details.php:34
-msgid "Add Property"
+msgid "Add"
+msgstr ""
+
+#: templates/part.editaddressbook.php:9
+msgid "New Addressbook"
+msgstr ""
+
+#: templates/part.editaddressbook.php:9
+msgid "Edit Addressbook"
+msgstr ""
+
+#: templates/part.editaddressbook.php:12
+msgid "Displayname"
+msgstr ""
+
+#: templates/part.editaddressbook.php:23
+msgid "Active"
msgstr ""
-#: templates/part.property.php:9
+#: templates/part.editaddressbook.php:29
+msgid "Save"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Submit"
+msgstr ""
+
+#: templates/part.editaddressbook.php:30
+msgid "Cancel"
+msgstr ""
+
+#: templates/part.property.php:3
msgid "Birthday"
msgstr ""
-#: templates/part.property.php:29
+#: templates/part.property.php:23
+msgid "Preferred"
+msgstr ""
+
+#: templates/part.property.php:23 templates/part.setpropertyform.php:45
msgid "Phone"
msgstr ""
-#: templates/part.setpropertyform.php:17
-msgid "Edit"
+#: templates/part.setpropertyform.php:57
+msgid "Update"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "CardDAV syncing address:"
msgstr ""
diff --git a/l10n/nb_NO/core.po b/l10n/nb_NO/core.po
index 018c1d81e7a..f29376cf89e 100644
--- a/l10n/nb_NO/core.po
+++ b/l10n/nb_NO/core.po
@@ -2,14 +2,15 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
+# Translators:
# <ajarmund@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-04 18:14+0200\n"
-"PO-Revision-Date: 2011-09-04 16:14+0000\n"
-"Last-Translator: JanCBorchardt <JanCBorchardt@fsfe.org>\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.net/projects/p/owncloud/team/nb_NO/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,6 +18,51 @@ msgstr ""
"Language: nb_NO\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+#: lostpassword/index.php:24
+msgid "Owncloud password reset"
+msgstr ""
+
+#: lostpassword/templates/email.php:1
+msgid "Use the following link to reset your password: {link}"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Requested"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:22
+#: templates/login.php:8
+msgid "Username"
+msgstr "Brukernavn"
+
+#: lostpassword/templates/lostpassword.php:14
+msgid "Request reset"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr ""
+
#: strings.php:5
msgid "Personal"
msgstr "Personlig"
@@ -45,53 +91,49 @@ msgstr "Sky ikke funnet"
msgid "Create an <strong>admin account</strong>"
msgstr "opprett en <strong>administrator-konto</strong>"
-#: templates/installation.php:21
-msgid "Username"
-msgstr "Brukernavn"
-
-#: templates/installation.php:22
+#: templates/installation.php:26 templates/login.php:12
msgid "Password"
msgstr "Passord"
-#: templates/installation.php:27
+#: templates/installation.php:32
+msgid "Advanced"
+msgstr "Avansert"
+
+#: templates/installation.php:34
+msgid "Data folder"
+msgstr "Datamappe"
+
+#: templates/installation.php:41
msgid "Configure the database"
msgstr "Konfigurer databasen"
-#: templates/installation.php:32 templates/installation.php:43
-#: templates/installation.php:53
+#: templates/installation.php:46 templates/installation.php:57
+#: templates/installation.php:67
msgid "will be used"
msgstr "vil bli brukt"
-#: templates/installation.php:64
+#: templates/installation.php:79
msgid "Database user"
msgstr "Databasebruker"
-#: templates/installation.php:65
+#: templates/installation.php:83
msgid "Database password"
msgstr "Databasepassord"
-#: templates/installation.php:66
+#: templates/installation.php:87
msgid "Database name"
msgstr "Databasenavn"
-#: templates/installation.php:72
-msgid "Advanced"
-msgstr "Avansert"
-
-#: templates/installation.php:75
+#: templates/installation.php:93
msgid "Database host"
msgstr ""
-#: templates/installation.php:76
-msgid "Data folder"
-msgstr "Datamappe"
-
-#: templates/installation.php:79
+#: templates/installation.php:98
msgid "Finish setup"
msgstr "Fullfør oppsetting"
#: templates/layout.guest.php:35
-msgid "gives you freedom and control over your own data"
+msgid "web services under your control"
msgstr ""
#: templates/layout.user.php:34
@@ -102,38 +144,22 @@ msgstr "Logg ut"
msgid "Settings"
msgstr "Innstillinger"
-#: templates/login.php:4
+#: templates/login.php:5
msgid "Lost your password?"
msgstr ""
-#: templates/login.php:9 templates/login.php:13
+#: templates/login.php:15
msgid "remember"
msgstr "husk"
+#: templates/login.php:16
+msgid "Log in"
+msgstr ""
+
#: templates/logout.php:1
msgid "You are logged out."
msgstr "Du er logget ut"
-#: templates/lostpassword.php:3
-msgid "You will receive a link to reset your password via Email."
-msgstr ""
-
-#: templates/lostpassword.php:5
-msgid "Requested"
-msgstr ""
-
-#: templates/lostpassword.php:8
-msgid "Login failed!"
-msgstr "Klarte ikke å logge inn!"
-
-#: templates/lostpassword.php:10
-msgid "Username or Email"
-msgstr ""
-
-#: templates/lostpassword.php:11
-msgid "Request reset"
-msgstr ""
-
#: templates/part.pagenavi.php:3
msgid "prev"
msgstr "forrige"
@@ -142,16 +168,4 @@ msgstr "forrige"
msgid "next"
msgstr "neste"
-#: templates/resetpassword.php:4
-msgid "Your password was reset"
-msgstr ""
-
-#: templates/resetpassword.php:6
-msgid "New password"
-msgstr ""
-
-#: templates/resetpassword.php:7
-msgid "Reset password"
-msgstr ""
-
diff --git a/l10n/nb_NO/files.po b/l10n/nb_NO/files.po
index c3bfd2ffbfc..67190d755f6 100644
--- a/l10n/nb_NO/files.po
+++ b/l10n/nb_NO/files.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.net/projects/p/owncloud/team/nb_NO/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,33 +18,33 @@ msgstr ""
"Language: nb_NO\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/upload.php:24
+#: ajax/upload.php:19
msgid "There is no error, the file uploaded with success"
msgstr ""
-#: ajax/upload.php:25
+#: ajax/upload.php:20
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr ""
-#: ajax/upload.php:26
+#: ajax/upload.php:21
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
-#: ajax/upload.php:27
+#: ajax/upload.php:22
msgid "The uploaded file was only partially uploaded"
msgstr ""
-#: ajax/upload.php:28
+#: ajax/upload.php:23
msgid "No file was uploaded"
msgstr ""
-#: ajax/upload.php:29
+#: ajax/upload.php:24
msgid "Missing a temporary folder"
msgstr ""
-#: appinfo/app.php:7
+#: appinfo/app.php:8
msgid "Files"
msgstr "Filer"
@@ -52,43 +52,55 @@ msgstr "Filer"
msgid "Maximum upload size"
msgstr "Maksimum opplastingsstørrelse"
+#: templates/index.php:7
+msgid "New"
+msgstr ""
+
#: templates/index.php:10
+msgid "Text file"
+msgstr ""
+
+#: templates/index.php:11
+msgid "Folder"
+msgstr ""
+
+#: templates/index.php:12
+msgid "From the web"
+msgstr ""
+
+#: templates/index.php:22
msgid "Upload"
msgstr "Last opp"
-#: templates/index.php:17
-msgid "New Folder"
-msgstr "Ny mappe"
-
-#: templates/index.php:31
+#: templates/index.php:35
msgid "Nothing in here. Upload something!"
msgstr "Ingenting her. Last opp noe!"
-#: templates/index.php:39
+#: templates/index.php:43
msgid "Name"
msgstr "Navn"
-#: templates/index.php:41
+#: templates/index.php:45
msgid "Download"
msgstr "Last ned"
-#: templates/index.php:45
+#: templates/index.php:49
msgid "Size"
msgstr "Størrelse"
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Modified"
msgstr "Endret"
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Delete"
msgstr "Slett"
-#: templates/index.php:54
+#: templates/index.php:58
msgid "Upload too large"
msgstr "Opplasting for stor"
-#: templates/index.php:56
+#: templates/index.php:60
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
diff --git a/l10n/nb_NO/gallery.po b/l10n/nb_NO/gallery.po
new file mode 100644
index 00000000000..b8cf83673a1
--- /dev/null
+++ b/l10n/nb_NO/gallery.po
@@ -0,0 +1,32 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:48+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.net/projects/p/owncloud/team/nb_NO/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: nb_NO\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:41
+msgid "Gallery"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Rescan"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+
diff --git a/l10n/nb_NO/media.po b/l10n/nb_NO/media.po
index 490bdb6f40f..7d52e2bc2b8 100644
--- a/l10n/nb_NO/media.po
+++ b/l10n/nb_NO/media.po
@@ -2,14 +2,15 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
+# Translators:
# <ajarmund@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
-"Report-Msgid-Bugs-To: http://bugs.kde.org/buglist.cgi?product=owncloud\n"
-"POT-Creation-Date: 2011-09-03 14:50+0200\n"
-"PO-Revision-Date: 2011-08-28 19:34+0000\n"
-"Last-Translator: anjar <ajarmund@gmail.com>\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.net/projects/p/owncloud/team/nb_NO/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,15 +18,15 @@ msgstr ""
"Language: nb_NO\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: appinfo/app.php:31
+#: appinfo/app.php:32
msgid "Music"
msgstr "Musikk"
-#: templates/music.php:3
+#: templates/music.php:3 templates/player.php:13
msgid "Play"
msgstr "Spill"
-#: templates/music.php:4 templates/music.php:30
+#: templates/music.php:4 templates/music.php:26 templates/player.php:14
msgid "Pause"
msgstr "Pause"
@@ -33,7 +34,7 @@ msgstr "Pause"
msgid "Previous"
msgstr "Forrige"
-#: templates/music.php:6
+#: templates/music.php:6 templates/player.php:15
msgid "Next"
msgstr "Neste"
@@ -45,11 +46,7 @@ msgstr "Demp"
msgid "Unmute"
msgstr "Skru på lyd"
-#: templates/music.php:28
-msgid "Songs scanned"
-msgstr "Sanger skannet"
-
-#: templates/music.php:29
+#: templates/music.php:25
msgid "Rescan Collection"
msgstr "Skan samling på nytt"
diff --git a/l10n/nb_NO/settings.po b/l10n/nb_NO/settings.po
index 46743d594a2..70ffa14920e 100644
--- a/l10n/nb_NO/settings.po
+++ b/l10n/nb_NO/settings.po
@@ -2,14 +2,15 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
+# Translators:
# <ajarmund@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
-"Report-Msgid-Bugs-To: http://bugs.kde.org/buglist.cgi?product=owncloud\n"
-"POT-Creation-Date: 2011-09-03 14:50+0200\n"
-"PO-Revision-Date: 2011-08-28 19:31+0000\n"
-"Last-Translator: anjar <ajarmund@gmail.com>\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.net/projects/p/owncloud/team/nb_NO/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,22 +18,26 @@ msgstr ""
"Language: nb_NO\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/openid.php:13 ajax/setlanguage.php:13
-msgid "Authentication error"
-msgstr "Autentifikasjonsfeil"
-
-#: ajax/openid.php:21
-msgid "OpenID Changed"
-msgstr "OpenID endret"
+#: ajax/lostpassword.php:14
+msgid "email Changed"
+msgstr ""
-#: ajax/openid.php:23 ajax/setlanguage.php:23
+#: ajax/lostpassword.php:16 ajax/openid.php:17 ajax/setlanguage.php:16
msgid "Invalid request"
msgstr "Ugyldig forespørsel"
-#: ajax/setlanguage.php:21
+#: ajax/openid.php:15
+msgid "OpenID Changed"
+msgstr "OpenID endret"
+
+#: ajax/setlanguage.php:14
msgid "Language changed"
msgstr "Språk endret"
+#: templates/admin.php:13
+msgid "Log level"
+msgstr ""
+
#: templates/apps.php:8
msgid "Add your application"
msgstr "Legg til din applikasjon"
@@ -53,15 +58,15 @@ msgstr "av"
msgid "Ask a question"
msgstr "Still et spørsmål"
-#: templates/help.php:17
+#: templates/help.php:20
msgid "Problems connecting to help database."
msgstr "Problemer med å koble til hjelp-databasen"
-#: templates/help.php:18
+#: templates/help.php:21
msgid "Go there manually."
msgstr "Gå dit manuelt"
-#: templates/help.php:26
+#: templates/help.php:29
msgid "Answer"
msgstr "Svar"
@@ -97,36 +102,52 @@ msgstr "vis"
msgid "Change password"
msgstr "Endre passord"
-#: templates/personal.php:24 templates/personal.php:25
+#: templates/personal.php:24
+msgid "Email"
+msgstr ""
+
+#: templates/personal.php:25
+msgid "Your email address"
+msgstr ""
+
+#: templates/personal.php:26
+msgid "Fill in an email address to enable password recovery"
+msgstr ""
+
+#: templates/personal.php:32 templates/personal.php:33
msgid "Language"
msgstr "Språk"
-#: templates/personal.php:30
-msgid "Help translating"
-msgstr "Hjelp oss å oversett"
+#: templates/personal.php:38
+msgid "Help translate"
+msgstr ""
-#: templates/personal.php:36
+#: templates/personal.php:45
msgid "use this address to connect to your ownCloud in your file manager"
msgstr ""
"bruk denne adressen for å koble til din ownCloud gjennom filhåndtereren"
-#: templates/users.php:16
+#: templates/users.php:15 templates/users.php:30
msgid "Name"
msgstr "Navn"
-#: templates/users.php:17
+#: templates/users.php:16 templates/users.php:31
msgid "Password"
msgstr "Passord"
-#: templates/users.php:18 templates/users.php:36
+#: templates/users.php:17 templates/users.php:32 templates/users.php:46
msgid "Groups"
msgstr "Grupper"
-#: templates/users.php:24
+#: templates/users.php:23
msgid "Create"
msgstr "Opprett"
-#: templates/users.php:48
+#: templates/users.php:33
+msgid "Quota"
+msgstr ""
+
+#: templates/users.php:58
msgid "Delete"
msgstr "Slett"
diff --git a/l10n/nl/calendar.po b/l10n/nl/calendar.po
index 8688a7d55f4..ca5e835d59a 100644
--- a/l10n/nl/calendar.po
+++ b/l10n/nl/calendar.po
@@ -4,13 +4,15 @@
#
# Translators:
# <bart.formosus@gmail.com>, 2011.
+# <bartv@thisnet.nl>, 2011.
+# <pietje8501@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Dutch (http://www.transifex.net/projects/p/owncloud/team/nl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,351 +20,432 @@ msgstr ""
"Language: nl\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/createcalendar.php:18 ajax/settimezone.php:19
-#: ajax/updatecalendar.php:18
-msgid "Authentication error"
-msgstr "Foute aanvraag"
+#: ajax/guesstimezone.php:42
+msgid "New Timezone:"
+msgstr "Nieuwe tijdszone:"
-#: ajax/editeventform.php:25
-msgid "Wrong calendar"
-msgstr ""
-
-#: ajax/settimezone.php:27
+#: ajax/settimezone.php:22
msgid "Timezone changed"
-msgstr "U kunt maar een venster tegelijk openen."
+msgstr "Tijdzone is veranderd"
-#: ajax/settimezone.php:29
+#: ajax/settimezone.php:24
msgid "Invalid request"
msgstr "Ongeldige aanvraag"
-#: appinfo/app.php:19 templates/part.eventform.php:27
-#: templates/part.eventinfo.php:18
+#: appinfo/app.php:20 templates/calendar.php:13
+#: templates/part.eventform.php:20
msgid "Calendar"
-msgstr "Weergavenaam"
+msgstr "Kalender"
+
+#: lib/app.php:19
+msgid "Wrong calendar"
+msgstr "Verkeerde kalender"
-#: lib/object.php:292
+#: lib/app.php:60 lib/object.php:332
msgid "Birthday"
-msgstr ""
+msgstr "Verjaardag"
-#: lib/object.php:293
+#: lib/app.php:61 lib/object.php:333
msgid "Business"
-msgstr ""
+msgstr "Zakelijk"
-#: lib/object.php:294
+#: lib/app.php:62 lib/object.php:334
msgid "Call"
-msgstr ""
+msgstr "Bellen"
-#: lib/object.php:295
+#: lib/app.php:63 lib/object.php:335
msgid "Clients"
-msgstr ""
+msgstr "Klanten"
-#: lib/object.php:296
+#: lib/app.php:64 lib/object.php:336
msgid "Deliverer"
-msgstr ""
+msgstr "Leverancier"
-#: lib/object.php:297
+#: lib/app.php:65 lib/object.php:337
msgid "Holidays"
-msgstr ""
+msgstr "Vakantie"
-#: lib/object.php:298
+#: lib/app.php:66 lib/object.php:338
msgid "Ideas"
-msgstr ""
+msgstr "Ideeën"
-#: lib/object.php:299
+#: lib/app.php:67 lib/object.php:339
msgid "Journey"
-msgstr ""
+msgstr "Reis"
-#: lib/object.php:300
+#: lib/app.php:68 lib/object.php:340
msgid "Jubilee"
-msgstr ""
+msgstr "Jubileum"
-#: lib/object.php:301
+#: lib/app.php:69 lib/object.php:341
msgid "Meeting"
-msgstr ""
+msgstr "Vergadering"
-#: lib/object.php:302
+#: lib/app.php:70 lib/object.php:342
msgid "Other"
-msgstr ""
+msgstr "Ander"
-#: lib/object.php:303
+#: lib/app.php:71 lib/object.php:343
msgid "Personal"
-msgstr ""
+msgstr "Persoonlijk"
-#: lib/object.php:304
+#: lib/app.php:72 lib/object.php:344
msgid "Projects"
-msgstr ""
+msgstr "Projecten"
-#: lib/object.php:305
+#: lib/app.php:73 lib/object.php:345
msgid "Questions"
-msgstr ""
+msgstr "Vragen"
-#: lib/object.php:306
+#: lib/app.php:74 lib/object.php:346
msgid "Work"
-msgstr ""
+msgstr "Werk"
-#: lib/object.php:313
+#: lib/object.php:353
msgid "Does not repeat"
msgstr "Wordt niet herhaald"
-#: lib/object.php:314
+#: lib/object.php:354
msgid "Daily"
msgstr "Dagelijks"
-#: lib/object.php:315
+#: lib/object.php:355
msgid "Weekly"
msgstr "Wekelijks"
-#: lib/object.php:316
+#: lib/object.php:356
msgid "Every Weekday"
msgstr "Elke weekdag"
-#: lib/object.php:317
+#: lib/object.php:357
msgid "Bi-Weekly"
msgstr "Tweewekelijks"
-#: lib/object.php:318
+#: lib/object.php:358
msgid "Monthly"
msgstr "Maandelijks"
-#: lib/object.php:319
+#: lib/object.php:359
msgid "Yearly"
msgstr "Jaarlijks"
-#: lib/object.php:337
-msgid "Not an array"
-msgstr ""
+#: lib/object.php:366
+msgid "never"
+msgstr "nooit meer"
-#: templates/calendar.php:3
-msgid "All day"
-msgstr "Tweewekelijks"
+#: lib/object.php:367
+msgid "by occurrences"
+msgstr "volgens gebeurtenissen"
-#: templates/calendar.php:32
-msgid "Sunday"
-msgstr "Zondag"
+#: lib/object.php:368
+msgid "by date"
+msgstr "op datum"
-#: templates/calendar.php:32
+#: lib/object.php:375
+msgid "by monthday"
+msgstr ""
+
+#: lib/object.php:376
+msgid "by weekday"
+msgstr "op weekdag"
+
+#: lib/object.php:383 templates/lAfix.php:3
msgid "Monday"
msgstr "Maandag"
-#: templates/calendar.php:32
+#: lib/object.php:384 templates/lAfix.php:4
msgid "Tuesday"
msgstr "Dinsdag"
-#: templates/calendar.php:32
+#: lib/object.php:385 templates/lAfix.php:5
msgid "Wednesday"
msgstr "Woensdag"
-#: templates/calendar.php:32
+#: lib/object.php:386 templates/lAfix.php:6
msgid "Thursday"
msgstr "Donderdag"
-#: templates/calendar.php:32
+#: lib/object.php:387 templates/lAfix.php:7
msgid "Friday"
msgstr "Vrijdag"
-#: templates/calendar.php:32
+#: lib/object.php:388 templates/lAfix.php:8
msgid "Saturday"
msgstr "Zaterdag"
-#: templates/calendar.php:33
-msgid "Sun."
-msgstr "Zo"
+#: lib/object.php:389 templates/lAfix.php:2
+msgid "Sunday"
+msgstr "Zondag"
-#: templates/calendar.php:33
-msgid "Mon."
-msgstr "Ma"
+#: lib/object.php:396
+msgid "events week of month"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Tue."
-msgstr "Di"
+#: lib/object.php:397
+msgid "first"
+msgstr "eerste"
-#: templates/calendar.php:33
-msgid "Wed."
-msgstr "Wo"
+#: lib/object.php:398
+msgid "second"
+msgstr "tweede"
-#: templates/calendar.php:33
-msgid "Thu."
-msgstr "Do"
+#: lib/object.php:399
+msgid "third"
+msgstr "derde"
-#: templates/calendar.php:33
-msgid "Fri."
-msgstr "Vr"
+#: lib/object.php:400
+msgid "fourth"
+msgstr "vierde"
-#: templates/calendar.php:33
-msgid "Sat."
-msgstr "Za"
+#: lib/object.php:401
+msgid "fifth"
+msgstr "vijfde"
+
+#: lib/object.php:402
+msgid "last"
+msgstr "laatste"
-#: templates/calendar.php:34
+#: lib/object.php:424 templates/lAfix.php:16
msgid "January"
msgstr "Januari"
-#: templates/calendar.php:34
+#: lib/object.php:425 templates/lAfix.php:17
msgid "February"
msgstr "Februari"
-#: templates/calendar.php:34
+#: lib/object.php:426 templates/lAfix.php:18
msgid "March"
msgstr "Maart"
-#: templates/calendar.php:34
+#: lib/object.php:427 templates/lAfix.php:19
msgid "April"
msgstr "April"
-#: templates/calendar.php:34
+#: lib/object.php:428 templates/lAfix.php:20
msgid "May"
msgstr "Mei"
-#: templates/calendar.php:34
+#: lib/object.php:429 templates/lAfix.php:21
msgid "June"
msgstr "Juni"
-#: templates/calendar.php:34
+#: lib/object.php:430 templates/lAfix.php:22
msgid "July"
msgstr "Juli"
-#: templates/calendar.php:34
+#: lib/object.php:431 templates/lAfix.php:23
msgid "August"
msgstr "Augustus"
-#: templates/calendar.php:34
+#: lib/object.php:432 templates/lAfix.php:24
msgid "September"
msgstr "September"
-#: templates/calendar.php:34
+#: lib/object.php:433 templates/lAfix.php:25
msgid "October"
msgstr "Oktober"
-#: templates/calendar.php:34
+#: lib/object.php:434 templates/lAfix.php:26
msgid "November"
msgstr "November"
-#: templates/calendar.php:34
+#: lib/object.php:435 templates/lAfix.php:27
msgid "December"
msgstr "December"
-#: templates/calendar.php:35
-msgid "Jan."
-msgstr "Jan"
-
-#: templates/calendar.php:35
-msgid "Feb."
-msgstr "Feb"
+#: lib/object.php:441
+msgid "by events date"
+msgstr "volgens evenementsdatum"
-#: templates/calendar.php:35
-msgid "Mar."
-msgstr "Maa"
+#: lib/object.php:442
+msgid "by yearday(s)"
+msgstr "volgens jaardag(en)"
-#: templates/calendar.php:35
-msgid "Apr."
-msgstr "Apr"
+#: lib/object.php:443
+msgid "by weeknumber(s)"
+msgstr "volgens weeknummer(s)"
-#: templates/calendar.php:35
-msgid "May."
-msgstr ""
+#: lib/object.php:444
+msgid "by day and month"
+msgstr "per dag en maand"
-#: templates/calendar.php:35
-msgid "Jun."
-msgstr "Jun"
+#: lib/object.php:467
+msgid "Not an array"
+msgstr "Geen array"
-#: templates/calendar.php:35
-msgid "Jul."
-msgstr "Jul"
+#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+msgid "Date"
+msgstr "Datum"
-#: templates/calendar.php:35
-msgid "Aug."
-msgstr "Aug"
+#: lib/search.php:40
+msgid "Cal."
+msgstr ""
-#: templates/calendar.php:35
-msgid "Sep."
-msgstr "Sept"
+#: templates/calendar.php:10
+msgid "All day"
+msgstr "Hele dag"
-#: templates/calendar.php:35
-msgid "Oct."
-msgstr "Okt"
+#: templates/calendar.php:11
+msgid "Missing fields"
+msgstr "missende velden"
-#: templates/calendar.php:35
-msgid "Nov."
-msgstr "Nov"
+#: templates/calendar.php:12 templates/part.eventform.php:3
+msgid "Title"
+msgstr "Titel"
-#: templates/calendar.php:35
-msgid "Dec."
-msgstr "Dec"
+#: templates/calendar.php:14
+msgid "From Date"
+msgstr "Begindatum"
-#: templates/calendar.php:36 templates/calendar.php:50
-#: templates/calendar.php:116
-msgid "Week"
-msgstr "Week"
+#: templates/calendar.php:15
+msgid "From Time"
+msgstr "Begintijd"
-#: templates/calendar.php:37 templates/calendar.php:51
-msgid "Weeks"
-msgstr "Weken"
+#: templates/calendar.php:16
+msgid "To Date"
+msgstr "Einddatum"
-#: templates/calendar.php:38
-msgid "More before {startdate}"
-msgstr ""
+#: templates/calendar.php:17
+msgid "To Time"
+msgstr "Eindtijd"
-#: templates/calendar.php:39
-msgid "More after {enddate}"
-msgstr ""
+#: templates/calendar.php:18
+msgid "The event ends before it starts"
+msgstr "Het evenement eindigt voordat het begint"
-#: templates/calendar.php:49
-msgid "Day"
-msgstr "Dag"
+#: templates/calendar.php:19
+msgid "There was a database fail"
+msgstr "Er was een databasefout"
#: templates/calendar.php:52
+msgid "Week"
+msgstr "Week"
+
+#: templates/calendar.php:53
msgid "Month"
msgstr "Maand"
-#: templates/calendar.php:53
+#: templates/calendar.php:54
msgid "List"
-msgstr ""
+msgstr "Lijst"
-#: templates/calendar.php:58
+#: templates/calendar.php:59
msgid "Today"
msgstr "Vandaag"
-#: templates/calendar.php:59
+#: templates/calendar.php:60
msgid "Calendars"
msgstr "Kalenders"
-#: templates/calendar.php:76 templates/calendar.php:94
-msgid "Time"
-msgstr "Tijd"
-
-#: templates/calendar.php:169
+#: templates/calendar.php:78
msgid "There was a fail, while parsing the file."
msgstr "Er is een fout opgetreden bij het verwerken van het bestand."
+#: templates/lAfix.php:9
+msgid "Sun."
+msgstr "Zo."
+
+#: templates/lAfix.php:10
+msgid "Mon."
+msgstr "Ma."
+
+#: templates/lAfix.php:11
+msgid "Tue."
+msgstr "Di."
+
+#: templates/lAfix.php:12
+msgid "Wed."
+msgstr "Woe."
+
+#: templates/lAfix.php:13
+msgid "Thu."
+msgstr "Do."
+
+#: templates/lAfix.php:14
+msgid "Fri."
+msgstr "Vrij."
+
+#: templates/lAfix.php:15
+msgid "Sat."
+msgstr "Zat."
+
+#: templates/lAfix.php:28
+msgid "Jan."
+msgstr "Jan."
+
+#: templates/lAfix.php:29
+msgid "Feb."
+msgstr "Feb."
+
+#: templates/lAfix.php:30
+msgid "Mar."
+msgstr "Maart"
+
+#: templates/lAfix.php:31
+msgid "Apr."
+msgstr "April"
+
+#: templates/lAfix.php:32
+msgid "May."
+msgstr "Mei"
+
+#: templates/lAfix.php:33
+msgid "Jun."
+msgstr "Jun."
+
+#: templates/lAfix.php:34
+msgid "Jul."
+msgstr "Jul."
+
+#: templates/lAfix.php:35
+msgid "Aug."
+msgstr "Aug."
+
+#: templates/lAfix.php:36
+msgid "Sep."
+msgstr "Sept."
+
+#: templates/lAfix.php:37
+msgid "Oct."
+msgstr "Okt."
+
+#: templates/lAfix.php:38
+msgid "Nov."
+msgstr "Nov."
+
+#: templates/lAfix.php:39
+msgid "Dec."
+msgstr "Dec."
+
#: templates/part.choosecalendar.php:1
msgid "Choose active calendars"
msgstr "Kies actieve kalenders"
#: templates/part.choosecalendar.php:15
msgid "New Calendar"
-msgstr ""
+msgstr "Nieuwe Kalender"
#: templates/part.choosecalendar.php:20
#: templates/part.choosecalendar.rowfields.php:4
msgid "CalDav Link"
-msgstr ""
+msgstr "CalDav Link"
#: templates/part.choosecalendar.rowfields.php:4
msgid "Download"
msgstr "Download"
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.eventinfo.php:64
msgid "Edit"
msgstr "Bewerken"
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.editevent.php:8
+#: templates/part.editevent.php:9
msgid "Delete"
-msgstr ""
+msgstr "Verwijderen"
#: templates/part.editcalendar.php:9
msgid "New calendar"
-msgstr ""
+msgstr "Nieuwe kalender"
#: templates/part.editcalendar.php:9
msgid "Edit calendar"
@@ -376,90 +459,181 @@ msgstr "Weergavenaam"
msgid "Active"
msgstr "Actief"
-#: templates/part.editcalendar.php:29 templates/part.eventform.php:88
-#: templates/part.eventinfo.php:58
-msgid "Description"
-msgstr "Beschrijving"
-
-#: templates/part.editcalendar.php:35
+#: templates/part.editcalendar.php:29
msgid "Calendar color"
msgstr "Kalender kleur"
-#: templates/part.editcalendar.php:41
+#: templates/part.editcalendar.php:42
msgid "Save"
-msgstr ""
+msgstr "Opslaan"
-#: templates/part.editcalendar.php:41 templates/part.editevent.php:7
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
#: templates/part.newevent.php:6
msgid "Submit"
msgstr "Opslaan"
-#: templates/part.editcalendar.php:42
+#: templates/part.editcalendar.php:43
msgid "Cancel"
-msgstr ""
+msgstr "Annuleren"
-#: templates/part.editevent.php:1 templates/part.eventinfo.php:1
+#: templates/part.editevent.php:1
msgid "Edit an event"
-msgstr "Bewerken een evenement"
+msgstr "Bewerken van een afspraak"
-#: templates/part.eventform.php:3 templates/part.eventinfo.php:4
-msgid "Title"
-msgstr "Titel"
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr "Exporteren"
#: templates/part.eventform.php:5
msgid "Title of the Event"
-msgstr "Titel van het evenement"
-
-#: templates/part.eventform.php:9 templates/part.eventinfo.php:9
-msgid "Location"
-msgstr "Locatie"
+msgstr "Titel van de afspraak"
#: templates/part.eventform.php:11
-msgid "Location of the Event"
-msgstr "Locatie van het evenement"
-
-#: templates/part.eventform.php:17 templates/part.eventinfo.php:16
msgid "Category"
msgstr "Categorie"
-#: templates/part.eventform.php:19
+#: templates/part.eventform.php:13
msgid "Select category"
-msgstr ""
+msgstr "Kies een categorie"
-#: templates/part.eventform.php:45 templates/part.eventinfo.php:28
+#: templates/part.eventform.php:37
msgid "All Day Event"
msgstr "Hele dag"
-#: templates/part.eventform.php:49 templates/part.eventinfo.php:31
+#: templates/part.eventform.php:41
msgid "From"
msgstr "Van"
-#: templates/part.eventform.php:57 templates/part.eventinfo.php:38
+#: templates/part.eventform.php:49
msgid "To"
msgstr "Aan"
-#: templates/part.eventform.php:65 templates/part.eventinfo.php:44
+#: templates/part.eventform.php:57
+msgid "Advanced options"
+msgstr "Geavanceerde opties"
+
+#: templates/part.eventform.php:61
msgid "Repeat"
msgstr "Herhalen"
-#: templates/part.eventform.php:81 templates/part.eventinfo.php:51
-msgid "Attendees"
-msgstr "Deelnemers"
+#: templates/part.eventform.php:68
+msgid "Advanced"
+msgstr "Geavanceerd"
+
+#: templates/part.eventform.php:112
+msgid "Select weekdays"
+msgstr "Selecteer weekdagen"
+
+#: templates/part.eventform.php:125 templates/part.eventform.php:138
+msgid "Select days"
+msgstr "Selecteer dagen"
+
+#: templates/part.eventform.php:130
+msgid "and the events day of year."
+msgstr ""
+
+#: templates/part.eventform.php:143
+msgid "and the events day of month."
+msgstr ""
+
+#: templates/part.eventform.php:151
+msgid "Select months"
+msgstr "Selecteer maanden"
+
+#: templates/part.eventform.php:164
+msgid "Select weeks"
+msgstr "Selecteer weken"
+
+#: templates/part.eventform.php:169
+msgid "and the events week of year."
+msgstr ""
+
+#: templates/part.eventform.php:175
+msgid "Interval"
+msgstr ""
+
+#: templates/part.eventform.php:181
+msgid "End"
+msgstr "Einde"
+
+#: templates/part.eventform.php:193
+msgid "occurrences"
+msgstr "gebeurtenissen"
+
+#: templates/part.eventform.php:208
+msgid "Location"
+msgstr "Locatie"
+
+#: templates/part.eventform.php:210
+msgid "Location of the Event"
+msgstr "Locatie van de afspraak"
+
+#: templates/part.eventform.php:216
+msgid "Description"
+msgstr "Beschrijving"
-#: templates/part.eventform.php:89
+#: templates/part.eventform.php:218
msgid "Description of the Event"
msgstr "Beschrijving van het evenement"
-#: templates/part.eventinfo.php:63
-msgid "Close"
-msgstr "Sluiten"
+#: templates/part.import.php:1
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the calendar"
+msgstr "Kies de kalender"
+
+#: templates/part.import.php:10
+msgid "create a new calendar"
+msgstr ""
+
+#: templates/part.import.php:15
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import"
+msgstr "Importeer"
+
+#: templates/part.import.php:20
+msgid "Importing calendar"
+msgstr ""
+
+#: templates/part.import.php:23
+msgid "Calendar imported successfully"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Close Dialog"
+msgstr ""
#: templates/part.newevent.php:1
msgid "Create a new event"
-msgstr "Maak een nieuw evenement"
+msgstr "Maak een nieuwe afspraak"
-#: templates/settings.php:11
+#: templates/settings.php:13
msgid "Timezone"
msgstr "Tijdzone"
+#: templates/settings.php:30
+msgid "Check always for changes of the timezone"
+msgstr "Controleer altijd op aanpassingen van de tijdszone"
+
+#: templates/settings.php:32
+msgid "Timeformat"
+msgstr "Tijdformaat"
+
+#: templates/settings.php:34
+msgid "24h"
+msgstr "24uur"
+
+#: templates/settings.php:35
+msgid "12h"
+msgstr "12uur"
+
+#: templates/settings.php:41
+msgid "Calendar CalDAV syncing address:"
+msgstr "CalDAV kalender synchronisatie adres:"
+
diff --git a/l10n/nl/contacts.po b/l10n/nl/contacts.po
index 48de047d7a4..12666934764 100644
--- a/l10n/nl/contacts.po
+++ b/l10n/nl/contacts.po
@@ -3,13 +3,16 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <bart.formosus@gmail.com>, 2011.
+# <bartv@thisnet.nl>, 2011.
+# <icewind1991@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 20:10+0200\n"
-"PO-Revision-Date: 2011-09-23 18:11+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Dutch (http://www.transifex.net/projects/p/owncloud/team/nl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,164 +20,273 @@ msgstr ""
"Language: nl\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/addcard.php:31 ajax/addproperty.php:31 ajax/deletebook.php:32
-#: ajax/deletecard.php:32 ajax/deleteproperty.php:34 ajax/getdetails.php:32
-#: ajax/setproperty.php:32 ajax/showaddcard.php:30 ajax/showaddproperty.php:31
-#: ajax/showsetproperty.php:32 photo.php:32
-msgid "You need to log in."
+#: ajax/activation.php:17 ajax/updateaddressbook.php:26
+msgid "Error (de)activating addressbook."
msgstr ""
-#: ajax/addcard.php:37
-msgid "This is not your addressbook."
+#: ajax/addcard.php:79
+msgid "There was an error adding the contact."
msgstr ""
-#: ajax/addproperty.php:37 ajax/deletecard.php:39 ajax/deleteproperty.php:41
-#: ajax/getdetails.php:39 ajax/setproperty.php:38 ajax/showaddproperty.php:37
-#: ajax/showsetproperty.php:38 photo.php:39
-msgid "Contact could not be found."
+#: ajax/addproperty.php:39
+msgid "Cannot add empty property."
msgstr ""
-#: ajax/addproperty.php:43 ajax/deletebook.php:38 ajax/deletecard.php:45
-#: ajax/deleteproperty.php:47 ajax/getdetails.php:45 ajax/setproperty.php:44
-#: ajax/showaddproperty.php:43 ajax/showsetproperty.php:44 photo.php:45
-msgid "This is not your contact."
+#: ajax/addproperty.php:51
+msgid "At least one of the address fields has to be filled out."
msgstr ""
-#: ajax/addproperty.php:50 ajax/deleteproperty.php:54 ajax/getdetails.php:52
-#: ajax/setproperty.php:51 ajax/showsetproperty.php:51
-msgid "vCard could not be read."
+#: ajax/addproperty.php:77
+msgid "Error adding contact property."
msgstr ""
-#: ajax/deleteproperty.php:65 ajax/setproperty.php:62
-#: ajax/showsetproperty.php:62
-msgid "Information about vCard is incorrect. Please reload the page."
+#: ajax/createaddressbook.php:20
+msgid "Error adding addressbook."
msgstr ""
-#: photo.php:53
-msgid "This card is not RFC compatible."
+#: ajax/createaddressbook.php:26
+msgid "Error activating addressbook."
msgstr ""
-#: photo.php:90
-msgid "This card does not contain a photo."
+#: ajax/deleteproperty.php:40
+msgid "Error deleting contact property."
msgstr ""
-#: templates/index.php:8
-msgid "Add Contact"
+#: ajax/setproperty.php:79
+msgid "Error updating contact property."
msgstr ""
-#: templates/part.addcardform.php:5
-msgid "Group"
+#: ajax/updateaddressbook.php:20
+msgid "Error updating addressbook."
msgstr ""
-#: templates/part.addcardform.php:12 templates/part.property.php:3
-msgid "Name"
+#: appinfo/app.php:21 templates/settings.php:3
+msgid "Contacts"
msgstr ""
-#: templates/part.addcardform.php:14
-msgid "Create Contact"
-msgstr ""
+#: lib/app.php:42
+msgid "This is not your addressbook."
+msgstr "Dit is niet uw adresboek."
-#: templates/part.addpropertyform.php:4 templates/part.property.php:40
+#: lib/app.php:51 photo.php:34
+msgid "Contact could not be found."
+msgstr "Contact kon niet worden gevonden."
+
+#: lib/app.php:79
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "Informatie over de vCard is onjuist. Herlaad de pagina."
+
+#: lib/app.php:91 templates/part.addcardform.php:54
+#: templates/part.property.php:45 templates/part.setpropertyform.php:7
msgid "Address"
-msgstr ""
+msgstr "Adres"
-#: templates/part.addpropertyform.php:5
+#: lib/app.php:92 templates/part.addcardform.php:43
msgid "Telephone"
-msgstr ""
+msgstr "Telefoon"
-#: templates/part.addpropertyform.php:6 templates/part.property.php:22
+#: lib/app.php:93 templates/part.addcardform.php:37
+#: templates/part.property.php:16 templates/part.setpropertyform.php:51
msgid "Email"
-msgstr ""
+msgstr "E-mail"
-#: templates/part.addpropertyform.php:7 templates/part.property.php:15
+#: lib/app.php:94 templates/part.addcardform.php:27
+#: templates/part.property.php:9 templates/part.setpropertyform.php:54
msgid "Organization"
-msgstr ""
+msgstr "Organisatie"
-#: templates/part.addpropertyform.php:17 templates/part.addpropertyform.php:32
+#: lib/app.php:106 lib/app.php:113
msgid "Work"
-msgstr ""
+msgstr "Werk"
-#: templates/part.addpropertyform.php:18 templates/part.addpropertyform.php:30
+#: lib/app.php:107 lib/app.php:111
msgid "Home"
+msgstr "Thuis"
+
+#: lib/app.php:112
+msgid "Mobile"
+msgstr "Mobiel"
+
+#: lib/app.php:114
+msgid "Text"
+msgstr "Tekst"
+
+#: lib/app.php:115
+msgid "Voice"
+msgstr "Stem"
+
+#: lib/app.php:116
+msgid "Fax"
+msgstr "Fax"
+
+#: lib/app.php:117
+msgid "Video"
+msgstr "Video"
+
+#: lib/app.php:118
+msgid "Pager"
+msgstr "Pieper"
+
+#: lib/search.php:22
+msgid "Contact"
msgstr ""
-#: templates/part.addpropertyform.php:20 templates/part.property.php:48
-#: templates/part.setpropertyform.php:5
-msgid "PO Box"
+#: photo.php:40
+msgid "This is not your contact."
+msgstr "Dit is niet uw contactpersoon."
+
+#: photo.php:48
+msgid "This card is not RFC compatible."
+msgstr "Deze kaart is niet RFC compatibel."
+
+#: photo.php:85
+msgid "This card does not contain a photo."
+msgstr "Deze contact bevat geen foto."
+
+#: templates/index.php:6
+msgid "Add Contact"
+msgstr "Contact toevoegen"
+
+#: templates/index.php:7
+msgid "Addressbooks"
msgstr ""
-#: templates/part.addpropertyform.php:21 templates/part.property.php:51
-#: templates/part.setpropertyform.php:6
-msgid "Extended"
+#: templates/part.addcardform.php:8
+msgid "Addressbook"
msgstr ""
-#: templates/part.addpropertyform.php:22 templates/part.property.php:54
-#: templates/part.setpropertyform.php:7
+#: templates/part.addcardform.php:21
+msgid "Name"
+msgstr "Naam"
+
+#: templates/part.addcardform.php:57 templates/part.details.php:43
+#: templates/part.details.php:79 templates/part.setpropertyform.php:10
+#: templates/part.setpropertyform.php:47
+msgid "Type"
+msgstr "Type"
+
+#: templates/part.addcardform.php:65 templates/part.details.php:49
+#: templates/part.setpropertyform.php:16
+msgid "PO Box"
+msgstr "Postbus"
+
+#: templates/part.addcardform.php:72 templates/part.details.php:53
+#: templates/part.setpropertyform.php:20
+msgid "Extended"
+msgstr "Uitgebreide"
+
+#: templates/part.addcardform.php:78 templates/part.details.php:57
+#: templates/part.setpropertyform.php:24
msgid "Street"
-msgstr ""
+msgstr "Straat"
-#: templates/part.addpropertyform.php:23 templates/part.property.php:57
-#: templates/part.setpropertyform.php:8
+#: templates/part.addcardform.php:84 templates/part.details.php:61
+#: templates/part.setpropertyform.php:28
msgid "City"
-msgstr ""
+msgstr "Stad"
-#: templates/part.addpropertyform.php:24 templates/part.property.php:60
-#: templates/part.setpropertyform.php:9
+#: templates/part.addcardform.php:90 templates/part.details.php:65
+#: templates/part.setpropertyform.php:32
msgid "Region"
-msgstr ""
+msgstr "Regio"
-#: templates/part.addpropertyform.php:25 templates/part.property.php:63
-#: templates/part.setpropertyform.php:10
+#: templates/part.addcardform.php:96 templates/part.details.php:69
+#: templates/part.setpropertyform.php:36
msgid "Zipcode"
-msgstr ""
+msgstr "Postcode"
-#: templates/part.addpropertyform.php:26 templates/part.property.php:66
-#: templates/part.setpropertyform.php:11
+#: templates/part.addcardform.php:102 templates/part.details.php:73
+#: templates/part.setpropertyform.php:40
msgid "Country"
-msgstr ""
+msgstr "Land"
-#: templates/part.addpropertyform.php:31
-msgid "Mobile"
-msgstr ""
+#: templates/part.addcardform.php:109
+msgid "Create Contact"
+msgstr "Contact aanmaken"
-#: templates/part.addpropertyform.php:33
-msgid "Text"
-msgstr ""
+#: templates/part.chooseaddressbook.php:1
+msgid "Choose active Address Books"
+msgstr "Kies actief Adresboek"
-#: templates/part.addpropertyform.php:34
-msgid "Voice"
-msgstr ""
+#: templates/part.chooseaddressbook.php:16
+msgid "New Address Book"
+msgstr "Nieuw Adresboek"
-#: templates/part.addpropertyform.php:35
-msgid "Fax"
-msgstr ""
+#: templates/part.chooseaddressbook.php:21
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "CardDav Link"
+msgstr "CardDav Link"
-#: templates/part.addpropertyform.php:36
-msgid "Video"
-msgstr ""
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Download"
+msgstr "Download"
-#: templates/part.addpropertyform.php:37
-msgid "Pager"
-msgstr ""
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Edit"
+msgstr "Bewerken"
-#: templates/part.details.php:33
+#: templates/part.chooseaddressbook.rowfields.php:5
msgid "Delete"
+msgstr "Verwijderen"
+
+#: templates/part.details.php:3
+msgid "Download contact"
msgstr ""
+#: templates/part.details.php:4
+msgid "Delete contact"
+msgstr "Verwijder contact"
+
#: templates/part.details.php:34
-msgid "Add Property"
+msgid "Add"
+msgstr "Voeg toe"
+
+#: templates/part.editaddressbook.php:9
+msgid "New Addressbook"
msgstr ""
-#: templates/part.property.php:9
-msgid "Birthday"
+#: templates/part.editaddressbook.php:9
+msgid "Edit Addressbook"
msgstr ""
-#: templates/part.property.php:29
+#: templates/part.editaddressbook.php:12
+msgid "Displayname"
+msgstr "Weergavenaam"
+
+#: templates/part.editaddressbook.php:23
+msgid "Active"
+msgstr "Actief"
+
+#: templates/part.editaddressbook.php:29
+msgid "Save"
+msgstr "Opslaan"
+
+#: templates/part.editaddressbook.php:29
+msgid "Submit"
+msgstr "Opslaan"
+
+#: templates/part.editaddressbook.php:30
+msgid "Cancel"
+msgstr "Anuleren"
+
+#: templates/part.property.php:3
+msgid "Birthday"
+msgstr "Verjaardag"
+
+#: templates/part.property.php:23
+msgid "Preferred"
+msgstr "Voorkeur"
+
+#: templates/part.property.php:23 templates/part.setpropertyform.php:45
msgid "Phone"
-msgstr ""
+msgstr "Telefoon"
-#: templates/part.setpropertyform.php:17
-msgid "Edit"
+#: templates/part.setpropertyform.php:57
+msgid "Update"
+msgstr "Vernieuwe"
+
+#: templates/settings.php:4
+msgid "CardDAV syncing address:"
msgstr ""
diff --git a/l10n/nl/core.po b/l10n/nl/core.po
index 0a296a3685d..cca07cade19 100644
--- a/l10n/nl/core.po
+++ b/l10n/nl/core.po
@@ -6,13 +6,14 @@
# <bart.formosus@gmail.com>, 2011.
# <icewind1991@gmail.com>, 2011.
# <koen@vervloesem.eu>, 2011.
+# <pietje8501@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 18:17+0200\n"
-"PO-Revision-Date: 2011-09-15 09:12+0000\n"
-"Last-Translator: isama <bart.formosus@gmail.com>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:00+0000\n"
+"Last-Translator: Pietje8501 <pietje8501@gmail.com>\n"
"Language-Team: Dutch (http://www.transifex.net/projects/p/owncloud/team/nl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -20,6 +21,52 @@ msgstr ""
"Language: nl\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+#: lostpassword/index.php:24
+msgid "Owncloud password reset"
+msgstr "reset je Owncloud wachtwoord"
+
+#: lostpassword/templates/email.php:1
+msgid "Use the following link to reset your password: {link}"
+msgstr "Gebruik de volgende link om je wachtwoord te resetten: {link}"
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr ""
+"U ontvangt een link om je wachtwoord opnieuw in te stellen via e-mail."
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Requested"
+msgstr "Gevraagd"
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr "Login mislukt!"
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:22
+#: templates/login.php:8
+msgid "Username"
+msgstr "Gebruikersnaam"
+
+#: lostpassword/templates/lostpassword.php:14
+msgid "Request reset"
+msgstr "Resetaanvraag"
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr "Je wachtwoord is geweizigd"
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr "Naar de login-pagina"
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr "Nieuw wachtwoord"
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr "Reset wachtwoord"
+
#: strings.php:5
msgid "Personal"
msgstr "Persoonlijk"
@@ -48,54 +95,50 @@ msgstr "Cloud niet gevonden"
msgid "Create an <strong>admin account</strong>"
msgstr "Maak een <strong>beheerdersaccount</strong> aan"
-#: templates/installation.php:21
-msgid "Username"
-msgstr "Gebruikersnaam"
-
-#: templates/installation.php:22
+#: templates/installation.php:26 templates/login.php:12
msgid "Password"
msgstr "Wachtwoord"
-#: templates/installation.php:27
+#: templates/installation.php:32
+msgid "Advanced"
+msgstr "Geavanceerd"
+
+#: templates/installation.php:34
+msgid "Data folder"
+msgstr "Gegevensmap"
+
+#: templates/installation.php:41
msgid "Configure the database"
msgstr "Configureer de databank"
-#: templates/installation.php:32 templates/installation.php:43
-#: templates/installation.php:53
+#: templates/installation.php:46 templates/installation.php:57
+#: templates/installation.php:67
msgid "will be used"
msgstr "zal gebruikt worden"
-#: templates/installation.php:64
+#: templates/installation.php:79
msgid "Database user"
msgstr "Gebruiker databank"
-#: templates/installation.php:65
+#: templates/installation.php:83
msgid "Database password"
msgstr "Wachtwoord databank"
-#: templates/installation.php:66
+#: templates/installation.php:87
msgid "Database name"
msgstr "Naam databank"
-#: templates/installation.php:72
-msgid "Advanced"
-msgstr "Geavanceerd"
-
-#: templates/installation.php:75
+#: templates/installation.php:93
msgid "Database host"
msgstr "Database server"
-#: templates/installation.php:76
-msgid "Data folder"
-msgstr "Gegevensmap"
-
-#: templates/installation.php:79
+#: templates/installation.php:98
msgid "Finish setup"
msgstr "Installatie afronden"
#: templates/layout.guest.php:35
-msgid "gives you freedom and control over your own data"
-msgstr "geeft u vrijheid en controle over uw eigen data"
+msgid "web services under your control"
+msgstr "webdiensten die je beheerst"
#: templates/layout.user.php:34
msgid "Log out"
@@ -105,38 +148,22 @@ msgstr "Afmelden"
msgid "Settings"
msgstr "Instellingen"
-#: templates/login.php:4
+#: templates/login.php:5
msgid "Lost your password?"
msgstr "Uw wachtwoord vergeten?"
-#: templates/login.php:9 templates/login.php:13
+#: templates/login.php:15
msgid "remember"
msgstr "onthoud gegevens"
+#: templates/login.php:16
+msgid "Log in"
+msgstr "Meld je aan"
+
#: templates/logout.php:1
msgid "You are logged out."
msgstr "U bent afgemeld."
-#: templates/lostpassword.php:3
-msgid "You will receive a link to reset your password via Email."
-msgstr "U ontvangt een link om uw wachtwoord te wijzigen via Email"
-
-#: templates/lostpassword.php:5
-msgid "Requested"
-msgstr "Aangevraagd"
-
-#: templates/lostpassword.php:8
-msgid "Login failed!"
-msgstr "Aanmelden mislukt!"
-
-#: templates/lostpassword.php:10
-msgid "Username or Email"
-msgstr "Gebruikersnaam of Email"
-
-#: templates/lostpassword.php:11
-msgid "Request reset"
-msgstr "Wachtwoordreset aanvragen"
-
#: templates/part.pagenavi.php:3
msgid "prev"
msgstr "vorige"
@@ -145,16 +172,4 @@ msgstr "vorige"
msgid "next"
msgstr "volgende"
-#: templates/resetpassword.php:4
-msgid "Your password was reset"
-msgstr "Uw wachtwoord is opnieuw ingesteld"
-
-#: templates/resetpassword.php:6
-msgid "New password"
-msgstr "Nieuw wachtwoord"
-
-#: templates/resetpassword.php:7
-msgid "Reset password"
-msgstr "Reset wachtwoord"
-
diff --git a/l10n/nl/files.po b/l10n/nl/files.po
index 67178beb961..df8a6a366d0 100644
--- a/l10n/nl/files.po
+++ b/l10n/nl/files.po
@@ -3,15 +3,18 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <bart.formosus@gmail.com>, 2011.
+# <bartv@thisnet.nl>, 2011.
# <icewind1991@gmail.com>, 2011.
# <koen@vervloesem.eu>, 2011.
+# <pietje8501@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-12 18:11+0000\n"
+"Last-Translator: Pietje8501 <pietje8501@gmail.com>\n"
"Language-Team: Dutch (http://www.transifex.net/projects/p/owncloud/team/nl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,33 +22,37 @@ msgstr ""
"Language: nl\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/upload.php:24
+#: ajax/upload.php:19
msgid "There is no error, the file uploaded with success"
-msgstr ""
+msgstr "Geen fout opgetreden, bestand successvol geupload."
-#: ajax/upload.php:25
+#: ajax/upload.php:20
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr ""
+"Het geüploade bestand is groter dan de upload_max_filesize instelling in "
+"php.ini"
-#: ajax/upload.php:26
+#: ajax/upload.php:21
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
+"Het geüploade bestand is groter dan de MAX_FILE_SIZE richtlijn die is "
+"opgegeven in de HTML-formulier"
-#: ajax/upload.php:27
+#: ajax/upload.php:22
msgid "The uploaded file was only partially uploaded"
-msgstr ""
+msgstr "Het bestand is slechts gedeeltelijk geupload"
-#: ajax/upload.php:28
+#: ajax/upload.php:23
msgid "No file was uploaded"
-msgstr ""
+msgstr "Geen bestand geüpload"
-#: ajax/upload.php:29
+#: ajax/upload.php:24
msgid "Missing a temporary folder"
-msgstr ""
+msgstr "Een tijdelijke map mist"
-#: appinfo/app.php:7
+#: appinfo/app.php:8
msgid "Files"
msgstr "Bestanden"
@@ -53,43 +60,55 @@ msgstr "Bestanden"
msgid "Maximum upload size"
msgstr "Maximale bestandsgrootte voor uploads"
+#: templates/index.php:7
+msgid "New"
+msgstr "Nieuw"
+
#: templates/index.php:10
+msgid "Text file"
+msgstr "Tekstbestand"
+
+#: templates/index.php:11
+msgid "Folder"
+msgstr "Map"
+
+#: templates/index.php:12
+msgid "From the web"
+msgstr "Van het internet"
+
+#: templates/index.php:22
msgid "Upload"
msgstr "Upload"
-#: templates/index.php:17
-msgid "New Folder"
-msgstr "Nieuwe map"
-
-#: templates/index.php:31
+#: templates/index.php:35
msgid "Nothing in here. Upload something!"
msgstr "Er bevindt zich hier niets. Upload een bestand!"
-#: templates/index.php:39
+#: templates/index.php:43
msgid "Name"
msgstr "Naam"
-#: templates/index.php:41
+#: templates/index.php:45
msgid "Download"
msgstr "Download"
-#: templates/index.php:45
+#: templates/index.php:49
msgid "Size"
msgstr "Bestandsgrootte"
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Modified"
msgstr "Laatst aangepast"
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Delete"
msgstr "Verwijder"
-#: templates/index.php:54
+#: templates/index.php:58
msgid "Upload too large"
msgstr "Bestanden te groot"
-#: templates/index.php:56
+#: templates/index.php:60
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
diff --git a/l10n/nl/gallery.po b/l10n/nl/gallery.po
new file mode 100644
index 00000000000..25d5097b363
--- /dev/null
+++ b/l10n/nl/gallery.po
@@ -0,0 +1,32 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:48+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Dutch (http://www.transifex.net/projects/p/owncloud/team/nl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: nl\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:41
+msgid "Gallery"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Rescan"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+
diff --git a/l10n/nl/media.po b/l10n/nl/media.po
index 21a797fe700..2a84b3f1689 100644
--- a/l10n/nl/media.po
+++ b/l10n/nl/media.po
@@ -2,14 +2,17 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
+# Translators:
+# <bart.formosus@gmail.com>, 2011.
# <icewind1991@gmail.com>, 2011.
+# <koen@vervloesem.eu>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
-"Report-Msgid-Bugs-To: http://bugs.kde.org/buglist.cgi?product=owncloud\n"
-"POT-Creation-Date: 2011-08-20 05:08+0200\n"
-"PO-Revision-Date: 2011-08-20 03:08+0000\n"
-"Last-Translator: JanCBorchardt <JanCBorchardt@fsfe.org>\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Dutch (http://www.transifex.net/projects/p/owncloud/team/nl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,39 +20,35 @@ msgstr ""
"Language: nl\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: appinfo/app.php:31
+#: appinfo/app.php:32
msgid "Music"
msgstr "Muziek"
-#: templates/music.php:3
+#: templates/music.php:3 templates/player.php:13
msgid "Play"
-msgstr ""
+msgstr "Afspelen"
-#: templates/music.php:4 templates/music.php:30
+#: templates/music.php:4 templates/music.php:26 templates/player.php:14
msgid "Pause"
-msgstr "Pauze"
+msgstr "Pauzeer"
#: templates/music.php:5
msgid "Previous"
-msgstr ""
+msgstr "Vorige"
-#: templates/music.php:6
+#: templates/music.php:6 templates/player.php:15
msgid "Next"
-msgstr ""
+msgstr "Volgende"
#: templates/music.php:7
msgid "Mute"
-msgstr ""
+msgstr "Dempen"
#: templates/music.php:8
msgid "Unmute"
-msgstr ""
-
-#: templates/music.php:28
-msgid "Songs scanned"
-msgstr "nummers gescanned"
+msgstr "Dempen uit"
-#: templates/music.php:29
+#: templates/music.php:25
msgid "Rescan Collection"
msgstr "Collectie opnieuw scannen"
diff --git a/l10n/nl/settings.po b/l10n/nl/settings.po
index 174daa75507..eacedbd0379 100644
--- a/l10n/nl/settings.po
+++ b/l10n/nl/settings.po
@@ -2,14 +2,18 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
+# Translators:
+# <bart.formosus@gmail.com>, 2011.
# <icewind1991@gmail.com>, 2011.
+# <koen@vervloesem.eu>, 2011.
+# <pietje8501@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
-"Report-Msgid-Bugs-To: http://bugs.kde.org/buglist.cgi?product=owncloud\n"
-"POT-Creation-Date: 2011-08-28 01:13+0200\n"
-"PO-Revision-Date: 2011-08-27 23:13+0000\n"
-"Last-Translator: JanCBorchardt <JanCBorchardt@fsfe.org>\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-12 18:13+0000\n"
+"Last-Translator: Pietje8501 <pietje8501@gmail.com>\n"
"Language-Team: Dutch (http://www.transifex.net/projects/p/owncloud/team/nl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,33 +21,37 @@ msgstr ""
"Language: nl\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/openid.php:13 ajax/setlanguage.php:13
-msgid "Authentication error"
-msgstr "Authenticatiefout."
+#: ajax/lostpassword.php:14
+msgid "email Changed"
+msgstr "mailadres aangepast"
-#: ajax/openid.php:21
-msgid "OpenID Changed"
-msgstr "OpenID is aangepast"
-
-#: ajax/openid.php:23 ajax/setlanguage.php:23
+#: ajax/lostpassword.php:16 ajax/openid.php:17 ajax/setlanguage.php:16
msgid "Invalid request"
msgstr "Ongeldig verzoek"
-#: ajax/setlanguage.php:21
+#: ajax/openid.php:15
+msgid "OpenID Changed"
+msgstr "OpenID is aangepast"
+
+#: ajax/setlanguage.php:14
msgid "Language changed"
msgstr "Taal aangepast"
+#: templates/admin.php:13
+msgid "Log level"
+msgstr "Logniveau"
+
#: templates/apps.php:8
msgid "Add your application"
-msgstr ""
+msgstr "Voeg uw applicatie toe"
#: templates/apps.php:21
msgid "Select an App"
-msgstr "Selecteer een App"
+msgstr "Selecteer een app"
#: templates/apps.php:23
msgid "-licensed"
-msgstr "-gelicenseerd"
+msgstr "-gelicentieerd"
#: templates/apps.php:23
msgid "by"
@@ -53,15 +61,15 @@ msgstr "door"
msgid "Ask a question"
msgstr "Stel een vraag"
-#: templates/help.php:17
+#: templates/help.php:20
msgid "Problems connecting to help database."
-msgstr ""
+msgstr "Problemen bij het verbinden met de helpdatabank."
-#: templates/help.php:18
+#: templates/help.php:21
msgid "Go there manually."
-msgstr ""
+msgstr "Ga er zelf heen."
-#: templates/help.php:26
+#: templates/help.php:29
msgid "Answer"
msgstr "Beantwoord"
@@ -79,7 +87,7 @@ msgstr "Uw wachtwoord is aangepast"
#: templates/personal.php:14
msgid "Unable to change your password"
-msgstr ""
+msgstr "Niet in staat om uw wachtwoord te wijzigen"
#: templates/personal.php:15
msgid "Current password"
@@ -95,39 +103,55 @@ msgstr "weergeven"
#: templates/personal.php:18
msgid "Change password"
-msgstr "Verander wachtwoord"
+msgstr "Wijzig wachtwoord"
#: templates/personal.php:24
+msgid "Email"
+msgstr "mailadres"
+
+#: templates/personal.php:25
+msgid "Your email address"
+msgstr "Jouw mailadres"
+
+#: templates/personal.php:26
+msgid "Fill in an email address to enable password recovery"
+msgstr "Vul een mailadres in om je wachtwoord te kunnen herstellen"
+
+#: templates/personal.php:32 templates/personal.php:33
msgid "Language"
msgstr "Taal"
-#: templates/personal.php:30
-msgid "Help translating"
+#: templates/personal.php:38
+msgid "Help translate"
msgstr "Help met vertalen"
-#: templates/personal.php:36
+#: templates/personal.php:45
msgid "use this address to connect to your ownCloud in your file manager"
msgstr ""
-"gebruik dit adres om verbinding te maken met ownCloud in uw bestandsbeheer "
-"programa"
+"gebruik dit adres om verbinding te maken met ownCloud in uw "
+"bestandsbeheerprogramma"
-#: templates/users.php:16
+#: templates/users.php:15 templates/users.php:30
msgid "Name"
msgstr "Naam"
-#: templates/users.php:17
+#: templates/users.php:16 templates/users.php:31
msgid "Password"
msgstr "Wachtwoord"
-#: templates/users.php:18 templates/users.php:36
+#: templates/users.php:17 templates/users.php:32 templates/users.php:46
msgid "Groups"
msgstr "Groepen"
-#: templates/users.php:24
+#: templates/users.php:23
msgid "Create"
msgstr "Creëer"
-#: templates/users.php:48
+#: templates/users.php:33
+msgid "Quota"
+msgstr "Limieten"
+
+#: templates/users.php:58
msgid "Delete"
msgstr "verwijderen"
diff --git a/l10n/nn_NO/calendar.po b/l10n/nn_NO/calendar.po
new file mode 100644
index 00000000000..202075af678
--- /dev/null
+++ b/l10n/nn_NO/calendar.po
@@ -0,0 +1,637 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <p.ixiemotion@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.net/projects/p/owncloud/team/nn_NO/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: nn_NO\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/guesstimezone.php:42
+msgid "New Timezone:"
+msgstr ""
+
+#: ajax/settimezone.php:22
+msgid "Timezone changed"
+msgstr "Endra tidssone"
+
+#: ajax/settimezone.php:24
+msgid "Invalid request"
+msgstr "Ugyldig førespurnad"
+
+#: appinfo/app.php:20 templates/calendar.php:13
+#: templates/part.eventform.php:20
+msgid "Calendar"
+msgstr "Kalender"
+
+#: lib/app.php:19
+msgid "Wrong calendar"
+msgstr "Feil kalender"
+
+#: lib/app.php:60 lib/object.php:332
+msgid "Birthday"
+msgstr "Bursdag"
+
+#: lib/app.php:61 lib/object.php:333
+msgid "Business"
+msgstr "Forretning"
+
+#: lib/app.php:62 lib/object.php:334
+msgid "Call"
+msgstr "Telefonsamtale"
+
+#: lib/app.php:63 lib/object.php:335
+msgid "Clients"
+msgstr "Klientar"
+
+#: lib/app.php:64 lib/object.php:336
+msgid "Deliverer"
+msgstr "Forsending"
+
+#: lib/app.php:65 lib/object.php:337
+msgid "Holidays"
+msgstr "Høgtid"
+
+#: lib/app.php:66 lib/object.php:338
+msgid "Ideas"
+msgstr "Idear"
+
+#: lib/app.php:67 lib/object.php:339
+msgid "Journey"
+msgstr "Reise"
+
+#: lib/app.php:68 lib/object.php:340
+msgid "Jubilee"
+msgstr "Jubileum"
+
+#: lib/app.php:69 lib/object.php:341
+msgid "Meeting"
+msgstr "Møte"
+
+#: lib/app.php:70 lib/object.php:342
+msgid "Other"
+msgstr "Anna"
+
+#: lib/app.php:71 lib/object.php:343
+msgid "Personal"
+msgstr "Personleg"
+
+#: lib/app.php:72 lib/object.php:344
+msgid "Projects"
+msgstr "Prosjekt"
+
+#: lib/app.php:73 lib/object.php:345
+msgid "Questions"
+msgstr "Spørsmål"
+
+#: lib/app.php:74 lib/object.php:346
+msgid "Work"
+msgstr "Arbeid"
+
+#: lib/object.php:353
+msgid "Does not repeat"
+msgstr "Ikkje gjenta"
+
+#: lib/object.php:354
+msgid "Daily"
+msgstr "Kvar dag"
+
+#: lib/object.php:355
+msgid "Weekly"
+msgstr "Kvar veke"
+
+#: lib/object.php:356
+msgid "Every Weekday"
+msgstr "Kvar vekedag"
+
+#: lib/object.php:357
+msgid "Bi-Weekly"
+msgstr "Annakvar veke"
+
+#: lib/object.php:358
+msgid "Monthly"
+msgstr "Kvar månad"
+
+#: lib/object.php:359
+msgid "Yearly"
+msgstr "Kvart år"
+
+#: lib/object.php:366
+msgid "never"
+msgstr ""
+
+#: lib/object.php:367
+msgid "by occurrences"
+msgstr ""
+
+#: lib/object.php:368
+msgid "by date"
+msgstr ""
+
+#: lib/object.php:375
+msgid "by monthday"
+msgstr ""
+
+#: lib/object.php:376
+msgid "by weekday"
+msgstr ""
+
+#: lib/object.php:383 templates/lAfix.php:3
+msgid "Monday"
+msgstr ""
+
+#: lib/object.php:384 templates/lAfix.php:4
+msgid "Tuesday"
+msgstr ""
+
+#: lib/object.php:385 templates/lAfix.php:5
+msgid "Wednesday"
+msgstr ""
+
+#: lib/object.php:386 templates/lAfix.php:6
+msgid "Thursday"
+msgstr ""
+
+#: lib/object.php:387 templates/lAfix.php:7
+msgid "Friday"
+msgstr ""
+
+#: lib/object.php:388 templates/lAfix.php:8
+msgid "Saturday"
+msgstr ""
+
+#: lib/object.php:389 templates/lAfix.php:2
+msgid "Sunday"
+msgstr ""
+
+#: lib/object.php:396
+msgid "events week of month"
+msgstr ""
+
+#: lib/object.php:397
+msgid "first"
+msgstr ""
+
+#: lib/object.php:398
+msgid "second"
+msgstr ""
+
+#: lib/object.php:399
+msgid "third"
+msgstr ""
+
+#: lib/object.php:400
+msgid "fourth"
+msgstr ""
+
+#: lib/object.php:401
+msgid "fifth"
+msgstr ""
+
+#: lib/object.php:402
+msgid "last"
+msgstr ""
+
+#: lib/object.php:424 templates/lAfix.php:16
+msgid "January"
+msgstr ""
+
+#: lib/object.php:425 templates/lAfix.php:17
+msgid "February"
+msgstr ""
+
+#: lib/object.php:426 templates/lAfix.php:18
+msgid "March"
+msgstr ""
+
+#: lib/object.php:427 templates/lAfix.php:19
+msgid "April"
+msgstr ""
+
+#: lib/object.php:428 templates/lAfix.php:20
+msgid "May"
+msgstr ""
+
+#: lib/object.php:429 templates/lAfix.php:21
+msgid "June"
+msgstr ""
+
+#: lib/object.php:430 templates/lAfix.php:22
+msgid "July"
+msgstr ""
+
+#: lib/object.php:431 templates/lAfix.php:23
+msgid "August"
+msgstr ""
+
+#: lib/object.php:432 templates/lAfix.php:24
+msgid "September"
+msgstr ""
+
+#: lib/object.php:433 templates/lAfix.php:25
+msgid "October"
+msgstr ""
+
+#: lib/object.php:434 templates/lAfix.php:26
+msgid "November"
+msgstr ""
+
+#: lib/object.php:435 templates/lAfix.php:27
+msgid "December"
+msgstr ""
+
+#: lib/object.php:441
+msgid "by events date"
+msgstr ""
+
+#: lib/object.php:442
+msgid "by yearday(s)"
+msgstr ""
+
+#: lib/object.php:443
+msgid "by weeknumber(s)"
+msgstr ""
+
+#: lib/object.php:444
+msgid "by day and month"
+msgstr ""
+
+#: lib/object.php:467
+msgid "Not an array"
+msgstr "Ikkje ein matrise"
+
+#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+msgid "Date"
+msgstr ""
+
+#: lib/search.php:40
+msgid "Cal."
+msgstr ""
+
+#: templates/calendar.php:10
+msgid "All day"
+msgstr "Heile dagen"
+
+#: templates/calendar.php:11
+msgid "Missing fields"
+msgstr ""
+
+#: templates/calendar.php:12 templates/part.eventform.php:3
+msgid "Title"
+msgstr "Tittel"
+
+#: templates/calendar.php:14
+msgid "From Date"
+msgstr ""
+
+#: templates/calendar.php:15
+msgid "From Time"
+msgstr ""
+
+#: templates/calendar.php:16
+msgid "To Date"
+msgstr ""
+
+#: templates/calendar.php:17
+msgid "To Time"
+msgstr ""
+
+#: templates/calendar.php:18
+msgid "The event ends before it starts"
+msgstr ""
+
+#: templates/calendar.php:19
+msgid "There was a database fail"
+msgstr ""
+
+#: templates/calendar.php:52
+msgid "Week"
+msgstr "Veke"
+
+#: templates/calendar.php:53
+msgid "Month"
+msgstr "Månad"
+
+#: templates/calendar.php:54
+msgid "List"
+msgstr "Liste"
+
+#: templates/calendar.php:59
+msgid "Today"
+msgstr "I dag"
+
+#: templates/calendar.php:60
+msgid "Calendars"
+msgstr "Kalendarar"
+
+#: templates/calendar.php:78
+msgid "There was a fail, while parsing the file."
+msgstr "Feil ved tolking av fila."
+
+#: templates/lAfix.php:9
+msgid "Sun."
+msgstr ""
+
+#: templates/lAfix.php:10
+msgid "Mon."
+msgstr ""
+
+#: templates/lAfix.php:11
+msgid "Tue."
+msgstr ""
+
+#: templates/lAfix.php:12
+msgid "Wed."
+msgstr ""
+
+#: templates/lAfix.php:13
+msgid "Thu."
+msgstr ""
+
+#: templates/lAfix.php:14
+msgid "Fri."
+msgstr ""
+
+#: templates/lAfix.php:15
+msgid "Sat."
+msgstr ""
+
+#: templates/lAfix.php:28
+msgid "Jan."
+msgstr ""
+
+#: templates/lAfix.php:29
+msgid "Feb."
+msgstr ""
+
+#: templates/lAfix.php:30
+msgid "Mar."
+msgstr ""
+
+#: templates/lAfix.php:31
+msgid "Apr."
+msgstr ""
+
+#: templates/lAfix.php:32
+msgid "May."
+msgstr ""
+
+#: templates/lAfix.php:33
+msgid "Jun."
+msgstr ""
+
+#: templates/lAfix.php:34
+msgid "Jul."
+msgstr ""
+
+#: templates/lAfix.php:35
+msgid "Aug."
+msgstr ""
+
+#: templates/lAfix.php:36
+msgid "Sep."
+msgstr ""
+
+#: templates/lAfix.php:37
+msgid "Oct."
+msgstr ""
+
+#: templates/lAfix.php:38
+msgid "Nov."
+msgstr ""
+
+#: templates/lAfix.php:39
+msgid "Dec."
+msgstr ""
+
+#: templates/part.choosecalendar.php:1
+msgid "Choose active calendars"
+msgstr "Vel aktive kalendarar"
+
+#: templates/part.choosecalendar.php:15
+msgid "New Calendar"
+msgstr "Ny kalender"
+
+#: templates/part.choosecalendar.php:20
+#: templates/part.choosecalendar.rowfields.php:4
+msgid "CalDav Link"
+msgstr "CalDav-lenkje"
+
+#: templates/part.choosecalendar.rowfields.php:4
+msgid "Download"
+msgstr "Last ned"
+
+#: templates/part.choosecalendar.rowfields.php:4
+msgid "Edit"
+msgstr "Endra"
+
+#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.editevent.php:9
+msgid "Delete"
+msgstr "Slett"
+
+#: templates/part.editcalendar.php:9
+msgid "New calendar"
+msgstr "Ny kalender"
+
+#: templates/part.editcalendar.php:9
+msgid "Edit calendar"
+msgstr "Endra kalendarar"
+
+#: templates/part.editcalendar.php:12
+msgid "Displayname"
+msgstr "Visingsnamn"
+
+#: templates/part.editcalendar.php:23
+msgid "Active"
+msgstr "Aktiv"
+
+#: templates/part.editcalendar.php:29
+msgid "Calendar color"
+msgstr "Kalenderfarge"
+
+#: templates/part.editcalendar.php:42
+msgid "Save"
+msgstr "Lagra"
+
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
+#: templates/part.newevent.php:6
+msgid "Submit"
+msgstr "Lagra"
+
+#: templates/part.editcalendar.php:43
+msgid "Cancel"
+msgstr "Avbryt"
+
+#: templates/part.editevent.php:1
+msgid "Edit an event"
+msgstr "Endra ein hending"
+
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr ""
+
+#: templates/part.eventform.php:5
+msgid "Title of the Event"
+msgstr "Tittel på hendinga"
+
+#: templates/part.eventform.php:11
+msgid "Category"
+msgstr "Kategori"
+
+#: templates/part.eventform.php:13
+msgid "Select category"
+msgstr "Vel kategori"
+
+#: templates/part.eventform.php:37
+msgid "All Day Event"
+msgstr "Heildagshending"
+
+#: templates/part.eventform.php:41
+msgid "From"
+msgstr "Frå"
+
+#: templates/part.eventform.php:49
+msgid "To"
+msgstr "Til"
+
+#: templates/part.eventform.php:57
+msgid "Advanced options"
+msgstr ""
+
+#: templates/part.eventform.php:61
+msgid "Repeat"
+msgstr "Gjenta"
+
+#: templates/part.eventform.php:68
+msgid "Advanced"
+msgstr ""
+
+#: templates/part.eventform.php:112
+msgid "Select weekdays"
+msgstr ""
+
+#: templates/part.eventform.php:125 templates/part.eventform.php:138
+msgid "Select days"
+msgstr ""
+
+#: templates/part.eventform.php:130
+msgid "and the events day of year."
+msgstr ""
+
+#: templates/part.eventform.php:143
+msgid "and the events day of month."
+msgstr ""
+
+#: templates/part.eventform.php:151
+msgid "Select months"
+msgstr ""
+
+#: templates/part.eventform.php:164
+msgid "Select weeks"
+msgstr ""
+
+#: templates/part.eventform.php:169
+msgid "and the events week of year."
+msgstr ""
+
+#: templates/part.eventform.php:175
+msgid "Interval"
+msgstr ""
+
+#: templates/part.eventform.php:181
+msgid "End"
+msgstr ""
+
+#: templates/part.eventform.php:193
+msgid "occurrences"
+msgstr ""
+
+#: templates/part.eventform.php:208
+msgid "Location"
+msgstr "Stad"
+
+#: templates/part.eventform.php:210
+msgid "Location of the Event"
+msgstr "Stad for hendinga"
+
+#: templates/part.eventform.php:216
+msgid "Description"
+msgstr "Skildring"
+
+#: templates/part.eventform.php:218
+msgid "Description of the Event"
+msgstr "Skildring av hendinga"
+
+#: templates/part.import.php:1
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the calendar"
+msgstr ""
+
+#: templates/part.import.php:10
+msgid "create a new calendar"
+msgstr ""
+
+#: templates/part.import.php:15
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import"
+msgstr ""
+
+#: templates/part.import.php:20
+msgid "Importing calendar"
+msgstr ""
+
+#: templates/part.import.php:23
+msgid "Calendar imported successfully"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Close Dialog"
+msgstr ""
+
+#: templates/part.newevent.php:1
+msgid "Create a new event"
+msgstr "Opprett ei ny hending"
+
+#: templates/settings.php:13
+msgid "Timezone"
+msgstr "Tidssone"
+
+#: templates/settings.php:30
+msgid "Check always for changes of the timezone"
+msgstr ""
+
+#: templates/settings.php:32
+msgid "Timeformat"
+msgstr ""
+
+#: templates/settings.php:34
+msgid "24h"
+msgstr ""
+
+#: templates/settings.php:35
+msgid "12h"
+msgstr ""
+
+#: templates/settings.php:41
+msgid "Calendar CalDAV syncing address:"
+msgstr ""
+
+
diff --git a/l10n/nn_NO/contacts.po b/l10n/nn_NO/contacts.po
new file mode 100644
index 00000000000..a5a29115d11
--- /dev/null
+++ b/l10n/nn_NO/contacts.po
@@ -0,0 +1,290 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <p.ixiemotion@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.net/projects/p/owncloud/team/nn_NO/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: nn_NO\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/activation.php:17 ajax/updateaddressbook.php:26
+msgid "Error (de)activating addressbook."
+msgstr ""
+
+#: ajax/addcard.php:79
+msgid "There was an error adding the contact."
+msgstr ""
+
+#: ajax/addproperty.php:39
+msgid "Cannot add empty property."
+msgstr ""
+
+#: ajax/addproperty.php:51
+msgid "At least one of the address fields has to be filled out."
+msgstr ""
+
+#: ajax/addproperty.php:77
+msgid "Error adding contact property."
+msgstr ""
+
+#: ajax/createaddressbook.php:20
+msgid "Error adding addressbook."
+msgstr ""
+
+#: ajax/createaddressbook.php:26
+msgid "Error activating addressbook."
+msgstr ""
+
+#: ajax/deleteproperty.php:40
+msgid "Error deleting contact property."
+msgstr ""
+
+#: ajax/setproperty.php:79
+msgid "Error updating contact property."
+msgstr ""
+
+#: ajax/updateaddressbook.php:20
+msgid "Error updating addressbook."
+msgstr ""
+
+#: appinfo/app.php:21 templates/settings.php:3
+msgid "Contacts"
+msgstr ""
+
+#: lib/app.php:42
+msgid "This is not your addressbook."
+msgstr "Dette er ikkje di adressebok."
+
+#: lib/app.php:51 photo.php:34
+msgid "Contact could not be found."
+msgstr "Fann ikkje kontakten."
+
+#: lib/app.php:79
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "Informasjonen om vCard-et er feil, ver venleg og last sida på nytt."
+
+#: lib/app.php:91 templates/part.addcardform.php:54
+#: templates/part.property.php:45 templates/part.setpropertyform.php:7
+msgid "Address"
+msgstr "Adresse"
+
+#: lib/app.php:92 templates/part.addcardform.php:43
+msgid "Telephone"
+msgstr "Telefonnummer"
+
+#: lib/app.php:93 templates/part.addcardform.php:37
+#: templates/part.property.php:16 templates/part.setpropertyform.php:51
+msgid "Email"
+msgstr "Epost"
+
+#: lib/app.php:94 templates/part.addcardform.php:27
+#: templates/part.property.php:9 templates/part.setpropertyform.php:54
+msgid "Organization"
+msgstr "Organisasjon"
+
+#: lib/app.php:106 lib/app.php:113
+msgid "Work"
+msgstr "Arbeid"
+
+#: lib/app.php:107 lib/app.php:111
+msgid "Home"
+msgstr "Heime"
+
+#: lib/app.php:112
+msgid "Mobile"
+msgstr "Mobil"
+
+#: lib/app.php:114
+msgid "Text"
+msgstr "Tekst"
+
+#: lib/app.php:115
+msgid "Voice"
+msgstr "Tale"
+
+#: lib/app.php:116
+msgid "Fax"
+msgstr "Faks"
+
+#: lib/app.php:117
+msgid "Video"
+msgstr "Video"
+
+#: lib/app.php:118
+msgid "Pager"
+msgstr "Personsøkjar"
+
+#: lib/search.php:22
+msgid "Contact"
+msgstr ""
+
+#: photo.php:40
+msgid "This is not your contact."
+msgstr "Dette er ikkje din kontakt."
+
+#: photo.php:48
+msgid "This card is not RFC compatible."
+msgstr "Dette kortet er ikkje RFC-kompatibelt"
+
+#: photo.php:85
+msgid "This card does not contain a photo."
+msgstr "Dette kortet har ingen bilete."
+
+#: templates/index.php:6
+msgid "Add Contact"
+msgstr "Legg til kontakt"
+
+#: templates/index.php:7
+msgid "Addressbooks"
+msgstr ""
+
+#: templates/part.addcardform.php:8
+msgid "Addressbook"
+msgstr ""
+
+#: templates/part.addcardform.php:21
+msgid "Name"
+msgstr "Namn"
+
+#: templates/part.addcardform.php:57 templates/part.details.php:43
+#: templates/part.details.php:79 templates/part.setpropertyform.php:10
+#: templates/part.setpropertyform.php:47
+msgid "Type"
+msgstr ""
+
+#: templates/part.addcardform.php:65 templates/part.details.php:49
+#: templates/part.setpropertyform.php:16
+msgid "PO Box"
+msgstr "Postboks"
+
+#: templates/part.addcardform.php:72 templates/part.details.php:53
+#: templates/part.setpropertyform.php:20
+msgid "Extended"
+msgstr "Utvida"
+
+#: templates/part.addcardform.php:78 templates/part.details.php:57
+#: templates/part.setpropertyform.php:24
+msgid "Street"
+msgstr "Gate"
+
+#: templates/part.addcardform.php:84 templates/part.details.php:61
+#: templates/part.setpropertyform.php:28
+msgid "City"
+msgstr "Stad"
+
+#: templates/part.addcardform.php:90 templates/part.details.php:65
+#: templates/part.setpropertyform.php:32
+msgid "Region"
+msgstr "Region/fylke"
+
+#: templates/part.addcardform.php:96 templates/part.details.php:69
+#: templates/part.setpropertyform.php:36
+msgid "Zipcode"
+msgstr "Postnummer"
+
+#: templates/part.addcardform.php:102 templates/part.details.php:73
+#: templates/part.setpropertyform.php:40
+msgid "Country"
+msgstr "Land"
+
+#: templates/part.addcardform.php:109
+msgid "Create Contact"
+msgstr "Opprett kontakt"
+
+#: templates/part.chooseaddressbook.php:1
+msgid "Choose active Address Books"
+msgstr ""
+
+#: templates/part.chooseaddressbook.php:16
+msgid "New Address Book"
+msgstr ""
+
+#: templates/part.chooseaddressbook.php:21
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "CardDav Link"
+msgstr ""
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Download"
+msgstr ""
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Edit"
+msgstr "Endra"
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Delete"
+msgstr "Slett"
+
+#: templates/part.details.php:3
+msgid "Download contact"
+msgstr ""
+
+#: templates/part.details.php:4
+msgid "Delete contact"
+msgstr ""
+
+#: templates/part.details.php:34
+msgid "Add"
+msgstr ""
+
+#: templates/part.editaddressbook.php:9
+msgid "New Addressbook"
+msgstr ""
+
+#: templates/part.editaddressbook.php:9
+msgid "Edit Addressbook"
+msgstr ""
+
+#: templates/part.editaddressbook.php:12
+msgid "Displayname"
+msgstr ""
+
+#: templates/part.editaddressbook.php:23
+msgid "Active"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Save"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Submit"
+msgstr ""
+
+#: templates/part.editaddressbook.php:30
+msgid "Cancel"
+msgstr ""
+
+#: templates/part.property.php:3
+msgid "Birthday"
+msgstr "Bursdag"
+
+#: templates/part.property.php:23
+msgid "Preferred"
+msgstr ""
+
+#: templates/part.property.php:23 templates/part.setpropertyform.php:45
+msgid "Phone"
+msgstr "Telefonnummer"
+
+#: templates/part.setpropertyform.php:57
+msgid "Update"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "CardDAV syncing address:"
+msgstr ""
+
+
diff --git a/l10n/nn_NO/core.po b/l10n/nn_NO/core.po
new file mode 100644
index 00000000000..fe829fc91d3
--- /dev/null
+++ b/l10n/nn_NO/core.po
@@ -0,0 +1,171 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <p.ixiemotion@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.net/projects/p/owncloud/team/nn_NO/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: nn_NO\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: lostpassword/index.php:24
+msgid "Owncloud password reset"
+msgstr ""
+
+#: lostpassword/templates/email.php:1
+msgid "Use the following link to reset your password: {link}"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr "Du vil få ei lenkje for å nullstilla passordet via epost."
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Requested"
+msgstr "Førespurt"
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr "Feil ved innlogging!"
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:22
+#: templates/login.php:8
+msgid "Username"
+msgstr "Brukarnamn"
+
+#: lostpassword/templates/lostpassword.php:14
+msgid "Request reset"
+msgstr "Be om nullstilling"
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr "Passordet ditt er nullstilt"
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr "Nytt passord"
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr "Nullstill passord"
+
+#: strings.php:5
+msgid "Personal"
+msgstr "Personleg"
+
+#: strings.php:6
+msgid "Users"
+msgstr "Brukarar"
+
+#: strings.php:7
+msgid "Apps"
+msgstr "Applikasjonar"
+
+#: strings.php:8
+msgid "Admin"
+msgstr "Administrer"
+
+#: strings.php:9
+msgid "Help"
+msgstr "Hjelp"
+
+#: templates/404.php:12
+msgid "Cloud not found"
+msgstr "Fann ikkje skyen"
+
+#: templates/installation.php:20
+msgid "Create an <strong>admin account</strong>"
+msgstr "Lag ein <strong>admin-konto</strong>"
+
+#: templates/installation.php:26 templates/login.php:12
+msgid "Password"
+msgstr "Passord"
+
+#: templates/installation.php:32
+msgid "Advanced"
+msgstr "Avansert"
+
+#: templates/installation.php:34
+msgid "Data folder"
+msgstr "Datamappe"
+
+#: templates/installation.php:41
+msgid "Configure the database"
+msgstr "Konfigurer databasen"
+
+#: templates/installation.php:46 templates/installation.php:57
+#: templates/installation.php:67
+msgid "will be used"
+msgstr "vil bli nytta"
+
+#: templates/installation.php:79
+msgid "Database user"
+msgstr "Databasebrukar"
+
+#: templates/installation.php:83
+msgid "Database password"
+msgstr "Databasepassord"
+
+#: templates/installation.php:87
+msgid "Database name"
+msgstr "Databasenamn"
+
+#: templates/installation.php:93
+msgid "Database host"
+msgstr "Databasetenar"
+
+#: templates/installation.php:98
+msgid "Finish setup"
+msgstr "Fullfør oppsettet"
+
+#: templates/layout.guest.php:35
+msgid "web services under your control"
+msgstr ""
+
+#: templates/layout.user.php:34
+msgid "Log out"
+msgstr "Logg ut"
+
+#: templates/layout.user.php:46 templates/layout.user.php:47
+msgid "Settings"
+msgstr "Innstillingar"
+
+#: templates/login.php:5
+msgid "Lost your password?"
+msgstr "Gløymt passordet?"
+
+#: templates/login.php:15
+msgid "remember"
+msgstr "hugs"
+
+#: templates/login.php:16
+msgid "Log in"
+msgstr ""
+
+#: templates/logout.php:1
+msgid "You are logged out."
+msgstr "Du er logga ut."
+
+#: templates/part.pagenavi.php:3
+msgid "prev"
+msgstr "førre"
+
+#: templates/part.pagenavi.php:20
+msgid "next"
+msgstr "neste"
+
+
diff --git a/l10n/nn_NO/files.po b/l10n/nn_NO/files.po
new file mode 100644
index 00000000000..eb6d21f3b66
--- /dev/null
+++ b/l10n/nn_NO/files.po
@@ -0,0 +1,112 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <p.ixiemotion@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.net/projects/p/owncloud/team/nn_NO/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: nn_NO\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/upload.php:19
+msgid "There is no error, the file uploaded with success"
+msgstr "Ingen feil, fila vart lasta opp"
+
+#: ajax/upload.php:20
+msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
+msgstr ""
+"Den opplasta fila er større enn variabelen upload_max_filesize i php.ini"
+
+#: ajax/upload.php:21
+msgid ""
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
+"the HTML form"
+msgstr ""
+"Den opplasta fila er større enn variabelen MAX_FILE_SIZE i HTML-skjemaet"
+
+#: ajax/upload.php:22
+msgid "The uploaded file was only partially uploaded"
+msgstr "Fila vart berre delvis lasta opp"
+
+#: ajax/upload.php:23
+msgid "No file was uploaded"
+msgstr "Ingen filer vart lasta opp"
+
+#: ajax/upload.php:24
+msgid "Missing a temporary folder"
+msgstr "Manglar ei mellombels mappe"
+
+#: appinfo/app.php:8
+msgid "Files"
+msgstr "Filer"
+
+#: templates/admin.php:5
+msgid "Maximum upload size"
+msgstr "Maksimal opplastingsstorleik"
+
+#: templates/index.php:7
+msgid "New"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Text file"
+msgstr ""
+
+#: templates/index.php:11
+msgid "Folder"
+msgstr ""
+
+#: templates/index.php:12
+msgid "From the web"
+msgstr ""
+
+#: templates/index.php:22
+msgid "Upload"
+msgstr "Last opp"
+
+#: templates/index.php:35
+msgid "Nothing in here. Upload something!"
+msgstr "Ingenting her. Last noko opp!"
+
+#: templates/index.php:43
+msgid "Name"
+msgstr "Namn"
+
+#: templates/index.php:45
+msgid "Download"
+msgstr "Last ned"
+
+#: templates/index.php:49
+msgid "Size"
+msgstr "Storleik"
+
+#: templates/index.php:50
+msgid "Modified"
+msgstr "Endra"
+
+#: templates/index.php:50
+msgid "Delete"
+msgstr "Slett"
+
+#: templates/index.php:58
+msgid "Upload too large"
+msgstr "For stor opplasting"
+
+#: templates/index.php:60
+msgid ""
+"The files you are trying to upload exceed the maximum size for file uploads "
+"on this server."
+msgstr ""
+"Filene du prøver å laste opp er større enn maksgrensa til denne tenaren."
+
+
diff --git a/l10n/nn_NO/gallery.po b/l10n/nn_NO/gallery.po
new file mode 100644
index 00000000000..a0aca6b59dc
--- /dev/null
+++ b/l10n/nn_NO/gallery.po
@@ -0,0 +1,32 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:48+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.net/projects/p/owncloud/team/nn_NO/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: nn_NO\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:41
+msgid "Gallery"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Rescan"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+
diff --git a/l10n/nn_NO/media.po b/l10n/nn_NO/media.po
new file mode 100644
index 00000000000..8ea54227031
--- /dev/null
+++ b/l10n/nn_NO/media.po
@@ -0,0 +1,65 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <p.ixiemotion@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.net/projects/p/owncloud/team/nn_NO/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: nn_NO\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:32
+msgid "Music"
+msgstr "Musikk"
+
+#: templates/music.php:3 templates/player.php:13
+msgid "Play"
+msgstr "Spel"
+
+#: templates/music.php:4 templates/music.php:26 templates/player.php:14
+msgid "Pause"
+msgstr "Pause"
+
+#: templates/music.php:5
+msgid "Previous"
+msgstr "Førre"
+
+#: templates/music.php:6 templates/player.php:15
+msgid "Next"
+msgstr "Neste"
+
+#: templates/music.php:7
+msgid "Mute"
+msgstr "Demp"
+
+#: templates/music.php:8
+msgid "Unmute"
+msgstr "Skru på lyd"
+
+#: templates/music.php:25
+msgid "Rescan Collection"
+msgstr "Skann samlinga på nytt"
+
+#: templates/music.php:37
+msgid "Artist"
+msgstr "Artist"
+
+#: templates/music.php:38
+msgid "Album"
+msgstr "Album"
+
+#: templates/music.php:39
+msgid "Title"
+msgstr "Tittel"
+
+
diff --git a/l10n/nn_NO/settings.po b/l10n/nn_NO/settings.po
new file mode 100644
index 00000000000..7e87bd41237
--- /dev/null
+++ b/l10n/nn_NO/settings.po
@@ -0,0 +1,153 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <p.ixiemotion@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.net/projects/p/owncloud/team/nn_NO/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: nn_NO\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/lostpassword.php:14
+msgid "email Changed"
+msgstr ""
+
+#: ajax/lostpassword.php:16 ajax/openid.php:17 ajax/setlanguage.php:16
+msgid "Invalid request"
+msgstr "Ugyldig førespurnad"
+
+#: ajax/openid.php:15
+msgid "OpenID Changed"
+msgstr "OpenID endra"
+
+#: ajax/setlanguage.php:14
+msgid "Language changed"
+msgstr "Språk endra"
+
+#: templates/admin.php:13
+msgid "Log level"
+msgstr ""
+
+#: templates/apps.php:8
+msgid "Add your application"
+msgstr "Legg til applikasjonen din"
+
+#: templates/apps.php:21
+msgid "Select an App"
+msgstr "Vel ein applikasjon"
+
+#: templates/apps.php:23
+msgid "-licensed"
+msgstr "-lisensiert"
+
+#: templates/apps.php:23
+msgid "by"
+msgstr "av"
+
+#: templates/help.php:8
+msgid "Ask a question"
+msgstr "Spør om noko"
+
+#: templates/help.php:20
+msgid "Problems connecting to help database."
+msgstr "Problem ved tilkopling til hjelpedatabasen."
+
+#: templates/help.php:21
+msgid "Go there manually."
+msgstr "Gå der på eigen hand."
+
+#: templates/help.php:29
+msgid "Answer"
+msgstr "Svar"
+
+#: templates/personal.php:8
+msgid "You use"
+msgstr "Du bruker"
+
+#: templates/personal.php:8
+msgid "of the available"
+msgstr "av dei tilgjengelege"
+
+#: templates/personal.php:13
+msgid "Your password got changed"
+msgstr "Passordet ditt er endra"
+
+#: templates/personal.php:14
+msgid "Unable to change your password"
+msgstr "Klarte ikkje å endra passordet"
+
+#: templates/personal.php:15
+msgid "Current password"
+msgstr "Passord"
+
+#: templates/personal.php:16
+msgid "New password"
+msgstr "Nytt passord"
+
+#: templates/personal.php:17
+msgid "show"
+msgstr "vis"
+
+#: templates/personal.php:18
+msgid "Change password"
+msgstr "Endra passord"
+
+#: templates/personal.php:24
+msgid "Email"
+msgstr ""
+
+#: templates/personal.php:25
+msgid "Your email address"
+msgstr ""
+
+#: templates/personal.php:26
+msgid "Fill in an email address to enable password recovery"
+msgstr ""
+
+#: templates/personal.php:32 templates/personal.php:33
+msgid "Language"
+msgstr "Språk"
+
+#: templates/personal.php:38
+msgid "Help translate"
+msgstr ""
+
+#: templates/personal.php:45
+msgid "use this address to connect to your ownCloud in your file manager"
+msgstr "bruk denne adressa for å kopla til ownCloud i filhandsamaren din"
+
+#: templates/users.php:15 templates/users.php:30
+msgid "Name"
+msgstr "Namn"
+
+#: templates/users.php:16 templates/users.php:31
+msgid "Password"
+msgstr "Passord"
+
+#: templates/users.php:17 templates/users.php:32 templates/users.php:46
+msgid "Groups"
+msgstr "Grupper"
+
+#: templates/users.php:23
+msgid "Create"
+msgstr "Lag"
+
+#: templates/users.php:33
+msgid "Quota"
+msgstr ""
+
+#: templates/users.php:58
+msgid "Delete"
+msgstr "Slett"
+
+
diff --git a/l10n/pl/calendar.po b/l10n/pl/calendar.po
index d1010cebe43..cdb4d794fb1 100644
--- a/l10n/pl/calendar.po
+++ b/l10n/pl/calendar.po
@@ -3,14 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Marcin Małecki <gerber@tkdami.net>, 2011.
+# Marcin Małecki <gerber@tkdami.net>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Polish (http://www.transifex.net/projects/p/owncloud/team/pl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,321 +18,403 @@ msgstr ""
"Language: pl\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
-#: ajax/createcalendar.php:18 ajax/settimezone.php:19
-#: ajax/updatecalendar.php:18
-msgid "Authentication error"
-msgstr "Błąd uwierzytelniania"
+#: ajax/guesstimezone.php:42
+msgid "New Timezone:"
+msgstr "Nowa strefa czasowa:"
-#: ajax/editeventform.php:25
-msgid "Wrong calendar"
-msgstr "Zły kalendarz"
-
-#: ajax/settimezone.php:27
+#: ajax/settimezone.php:22
msgid "Timezone changed"
msgstr "Strefa czasowa została zmieniona"
-#: ajax/settimezone.php:29
+#: ajax/settimezone.php:24
msgid "Invalid request"
msgstr "Nieprawidłowe żądanie"
-#: appinfo/app.php:19 templates/part.eventform.php:27
-#: templates/part.eventinfo.php:18
+#: appinfo/app.php:20 templates/calendar.php:13
+#: templates/part.eventform.php:20
msgid "Calendar"
msgstr "Kalendarz"
-#: lib/object.php:292
+#: lib/app.php:19
+msgid "Wrong calendar"
+msgstr "Zły kalendarz"
+
+#: lib/app.php:60 lib/object.php:332
msgid "Birthday"
msgstr "Urodziny"
-#: lib/object.php:293
+#: lib/app.php:61 lib/object.php:333
msgid "Business"
msgstr "Interes"
-#: lib/object.php:294
+#: lib/app.php:62 lib/object.php:334
msgid "Call"
msgstr "Rozmowa"
-#: lib/object.php:295
+#: lib/app.php:63 lib/object.php:335
msgid "Clients"
msgstr "Klienci"
-#: lib/object.php:296
+#: lib/app.php:64 lib/object.php:336
msgid "Deliverer"
msgstr "Przesyłka"
-#: lib/object.php:297
+#: lib/app.php:65 lib/object.php:337
msgid "Holidays"
msgstr "Święta"
-#: lib/object.php:298
+#: lib/app.php:66 lib/object.php:338
msgid "Ideas"
msgstr "Pomysły"
-#: lib/object.php:299
+#: lib/app.php:67 lib/object.php:339
msgid "Journey"
msgstr "Podróż"
-#: lib/object.php:300
+#: lib/app.php:68 lib/object.php:340
msgid "Jubilee"
msgstr "Jubileusz"
-#: lib/object.php:301
+#: lib/app.php:69 lib/object.php:341
msgid "Meeting"
msgstr "Spotkanie"
-#: lib/object.php:302
+#: lib/app.php:70 lib/object.php:342
msgid "Other"
msgstr "Inne"
-#: lib/object.php:303
+#: lib/app.php:71 lib/object.php:343
msgid "Personal"
msgstr "Osobisty"
-#: lib/object.php:304
+#: lib/app.php:72 lib/object.php:344
msgid "Projects"
msgstr "Projekty"
-#: lib/object.php:305
+#: lib/app.php:73 lib/object.php:345
msgid "Questions"
msgstr "Pytania"
-#: lib/object.php:306
+#: lib/app.php:74 lib/object.php:346
msgid "Work"
msgstr "Praca"
-#: lib/object.php:313
+#: lib/object.php:353
msgid "Does not repeat"
msgstr "Nie powtarza się"
-#: lib/object.php:314
+#: lib/object.php:354
msgid "Daily"
msgstr "Codziennie"
-#: lib/object.php:315
+#: lib/object.php:355
msgid "Weekly"
msgstr "Tygodniowo"
-#: lib/object.php:316
+#: lib/object.php:356
msgid "Every Weekday"
msgstr "Każdy dzień tygodnia"
-#: lib/object.php:317
+#: lib/object.php:357
msgid "Bi-Weekly"
msgstr "Dwa razy w tygodniu"
-#: lib/object.php:318
+#: lib/object.php:358
msgid "Monthly"
msgstr "Miesięcznie"
-#: lib/object.php:319
+#: lib/object.php:359
msgid "Yearly"
msgstr "Rocznie"
-#: lib/object.php:337
-msgid "Not an array"
-msgstr "Nie ma w tablicy"
+#: lib/object.php:366
+msgid "never"
+msgstr "nigdy"
-#: templates/calendar.php:3
-msgid "All day"
-msgstr "Cały dzień"
+#: lib/object.php:367
+msgid "by occurrences"
+msgstr "przez wydarzenia"
-#: templates/calendar.php:32
-msgid "Sunday"
-msgstr "Niedziela"
+#: lib/object.php:368
+msgid "by date"
+msgstr "po dacie"
+
+#: lib/object.php:375
+msgid "by monthday"
+msgstr "miesięcznie"
+
+#: lib/object.php:376
+msgid "by weekday"
+msgstr "tygodniowo"
-#: templates/calendar.php:32
+#: lib/object.php:383 templates/lAfix.php:3
msgid "Monday"
msgstr "Poniedziałek"
-#: templates/calendar.php:32
+#: lib/object.php:384 templates/lAfix.php:4
msgid "Tuesday"
msgstr "Wtorek"
-#: templates/calendar.php:32
+#: lib/object.php:385 templates/lAfix.php:5
msgid "Wednesday"
msgstr "Środa"
-#: templates/calendar.php:32
+#: lib/object.php:386 templates/lAfix.php:6
msgid "Thursday"
msgstr "Czwartek"
-#: templates/calendar.php:32
+#: lib/object.php:387 templates/lAfix.php:7
msgid "Friday"
msgstr "Piątek"
-#: templates/calendar.php:32
+#: lib/object.php:388 templates/lAfix.php:8
msgid "Saturday"
msgstr "Sobota"
-#: templates/calendar.php:33
-msgid "Sun."
-msgstr "Nie."
+#: lib/object.php:389 templates/lAfix.php:2
+msgid "Sunday"
+msgstr "Niedziela"
-#: templates/calendar.php:33
-msgid "Mon."
-msgstr "Po."
+#: lib/object.php:396
+msgid "events week of month"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Tue."
-msgstr "Wt."
+#: lib/object.php:397
+msgid "first"
+msgstr "pierwszy"
-#: templates/calendar.php:33
-msgid "Wed."
-msgstr "Śr."
+#: lib/object.php:398
+msgid "second"
+msgstr "drugi"
-#: templates/calendar.php:33
-msgid "Thu."
-msgstr "Cz.."
+#: lib/object.php:399
+msgid "third"
+msgstr "trzeci"
-#: templates/calendar.php:33
-msgid "Fri."
-msgstr "Pią."
+#: lib/object.php:400
+msgid "fourth"
+msgstr "czwarty"
-#: templates/calendar.php:33
-msgid "Sat."
-msgstr "So."
+#: lib/object.php:401
+msgid "fifth"
+msgstr "piąty"
-#: templates/calendar.php:34
+#: lib/object.php:402
+msgid "last"
+msgstr "ostatni"
+
+#: lib/object.php:424 templates/lAfix.php:16
msgid "January"
msgstr "Styczeń"
-#: templates/calendar.php:34
+#: lib/object.php:425 templates/lAfix.php:17
msgid "February"
msgstr "Luty"
-#: templates/calendar.php:34
+#: lib/object.php:426 templates/lAfix.php:18
msgid "March"
msgstr "Marzec"
-#: templates/calendar.php:34
+#: lib/object.php:427 templates/lAfix.php:19
msgid "April"
msgstr "Kwiecień"
-#: templates/calendar.php:34
+#: lib/object.php:428 templates/lAfix.php:20
msgid "May"
msgstr "Maj"
-#: templates/calendar.php:34
+#: lib/object.php:429 templates/lAfix.php:21
msgid "June"
msgstr "Czerwiec"
-#: templates/calendar.php:34
+#: lib/object.php:430 templates/lAfix.php:22
msgid "July"
msgstr "Lipiec"
-#: templates/calendar.php:34
+#: lib/object.php:431 templates/lAfix.php:23
msgid "August"
msgstr "Sierpień"
-#: templates/calendar.php:34
+#: lib/object.php:432 templates/lAfix.php:24
msgid "September"
msgstr "Wrzesień"
-#: templates/calendar.php:34
+#: lib/object.php:433 templates/lAfix.php:25
msgid "October"
msgstr "Październik"
-#: templates/calendar.php:34
+#: lib/object.php:434 templates/lAfix.php:26
msgid "November"
msgstr "Listopad"
-#: templates/calendar.php:34
+#: lib/object.php:435 templates/lAfix.php:27
msgid "December"
msgstr "Grudzień"
-#: templates/calendar.php:35
+#: lib/object.php:441
+msgid "by events date"
+msgstr "po datach wydarzeń"
+
+#: lib/object.php:442
+msgid "by yearday(s)"
+msgstr "po dniach roku"
+
+#: lib/object.php:443
+msgid "by weeknumber(s)"
+msgstr "po tygodniach"
+
+#: lib/object.php:444
+msgid "by day and month"
+msgstr ""
+
+#: lib/object.php:467
+msgid "Not an array"
+msgstr "Nie ma w tablicy"
+
+#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+msgid "Date"
+msgstr "Data"
+
+#: lib/search.php:40
+msgid "Cal."
+msgstr "Kal."
+
+#: templates/calendar.php:10
+msgid "All day"
+msgstr "Cały dzień"
+
+#: templates/calendar.php:11
+msgid "Missing fields"
+msgstr "Brakujące pola"
+
+#: templates/calendar.php:12 templates/part.eventform.php:3
+msgid "Title"
+msgstr "Tytuł"
+
+#: templates/calendar.php:14
+msgid "From Date"
+msgstr "Od dnia"
+
+#: templates/calendar.php:15
+msgid "From Time"
+msgstr "Od czasu"
+
+#: templates/calendar.php:16
+msgid "To Date"
+msgstr "Do daty"
+
+#: templates/calendar.php:17
+msgid "To Time"
+msgstr "Do czasu"
+
+#: templates/calendar.php:18
+msgid "The event ends before it starts"
+msgstr "Wydarzenie kończy się przed rozpoczęciem"
+
+#: templates/calendar.php:19
+msgid "There was a database fail"
+msgstr "Awaria bazy danych"
+
+#: templates/calendar.php:52
+msgid "Week"
+msgstr "Tydzień"
+
+#: templates/calendar.php:53
+msgid "Month"
+msgstr "Miesiąc"
+
+#: templates/calendar.php:54
+msgid "List"
+msgstr "Lista"
+
+#: templates/calendar.php:59
+msgid "Today"
+msgstr "Dzisiaj"
+
+#: templates/calendar.php:60
+msgid "Calendars"
+msgstr "Kalendarze"
+
+#: templates/calendar.php:78
+msgid "There was a fail, while parsing the file."
+msgstr "Nastąpił problem przy parsowaniu pliku.."
+
+#: templates/lAfix.php:9
+msgid "Sun."
+msgstr "Nie."
+
+#: templates/lAfix.php:10
+msgid "Mon."
+msgstr "Poń."
+
+#: templates/lAfix.php:11
+msgid "Tue."
+msgstr "Wto."
+
+#: templates/lAfix.php:12
+msgid "Wed."
+msgstr "Śro."
+
+#: templates/lAfix.php:13
+msgid "Thu."
+msgstr "Czw."
+
+#: templates/lAfix.php:14
+msgid "Fri."
+msgstr "Pią."
+
+#: templates/lAfix.php:15
+msgid "Sat."
+msgstr "So."
+
+#: templates/lAfix.php:28
msgid "Jan."
msgstr "Sty."
-#: templates/calendar.php:35
+#: templates/lAfix.php:29
msgid "Feb."
msgstr "Lut."
-#: templates/calendar.php:35
+#: templates/lAfix.php:30
msgid "Mar."
msgstr "Mar."
-#: templates/calendar.php:35
+#: templates/lAfix.php:31
msgid "Apr."
msgstr "Kwi."
-#: templates/calendar.php:35
+#: templates/lAfix.php:32
msgid "May."
-msgstr "Może."
+msgstr "Maj"
-#: templates/calendar.php:35
+#: templates/lAfix.php:33
msgid "Jun."
msgstr "Cze."
-#: templates/calendar.php:35
+#: templates/lAfix.php:34
msgid "Jul."
msgstr "Lip."
-#: templates/calendar.php:35
+#: templates/lAfix.php:35
msgid "Aug."
msgstr "Sie."
-#: templates/calendar.php:35
+#: templates/lAfix.php:36
msgid "Sep."
msgstr "Wrz."
-#: templates/calendar.php:35
+#: templates/lAfix.php:37
msgid "Oct."
msgstr "Paź."
-#: templates/calendar.php:35
+#: templates/lAfix.php:38
msgid "Nov."
msgstr "Lis."
-#: templates/calendar.php:35
+#: templates/lAfix.php:39
msgid "Dec."
msgstr "Gru."
-#: templates/calendar.php:36 templates/calendar.php:50
-#: templates/calendar.php:116
-msgid "Week"
-msgstr "Tydzień"
-
-#: templates/calendar.php:37 templates/calendar.php:51
-msgid "Weeks"
-msgstr "Tygodnie"
-
-#: templates/calendar.php:38
-msgid "More before {startdate}"
-msgstr "Więcej przed {startdate}"
-
-#: templates/calendar.php:39
-msgid "More after {enddate}"
-msgstr "Więcej po {enddate}"
-
-#: templates/calendar.php:49
-msgid "Day"
-msgstr "Dzień"
-
-#: templates/calendar.php:52
-msgid "Month"
-msgstr "Miesiąc"
-
-#: templates/calendar.php:53
-msgid "List"
-msgstr "Lista"
-
-#: templates/calendar.php:58
-msgid "Today"
-msgstr "Dzisiaj"
-
-#: templates/calendar.php:59
-msgid "Calendars"
-msgstr "Kalendarze"
-
-#: templates/calendar.php:76 templates/calendar.php:94
-msgid "Time"
-msgstr "Czas"
-
-#: templates/calendar.php:169
-msgid "There was a fail, while parsing the file."
-msgstr "Nastąpił problem przy parsowaniu pliku.."
-
#: templates/part.choosecalendar.php:1
msgid "Choose active calendars"
msgstr "Wybierz aktywne kalendarze"
@@ -351,14 +433,13 @@ msgid "Download"
msgstr "Pobierz"
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.eventinfo.php:64
msgid "Edit"
msgstr "Edytuj"
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.editevent.php:8
+#: templates/part.editevent.php:9
msgid "Delete"
-msgstr ""
+msgstr "Usuń"
#: templates/part.editcalendar.php:9
msgid "New calendar"
@@ -376,90 +457,181 @@ msgstr "Displayname"
msgid "Active"
msgstr "Aktywny"
-#: templates/part.editcalendar.php:29 templates/part.eventform.php:88
-#: templates/part.eventinfo.php:58
-msgid "Description"
-msgstr "Opis"
-
-#: templates/part.editcalendar.php:35
+#: templates/part.editcalendar.php:29
msgid "Calendar color"
msgstr "Kalendarz kolor"
-#: templates/part.editcalendar.php:41
+#: templates/part.editcalendar.php:42
msgid "Save"
msgstr "Zapisz"
-#: templates/part.editcalendar.php:41 templates/part.editevent.php:7
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
#: templates/part.newevent.php:6
msgid "Submit"
msgstr "Prześlij"
-#: templates/part.editcalendar.php:42
+#: templates/part.editcalendar.php:43
msgid "Cancel"
msgstr "Anuluj"
-#: templates/part.editevent.php:1 templates/part.eventinfo.php:1
+#: templates/part.editevent.php:1
msgid "Edit an event"
msgstr "Edycja zdarzenia"
-#: templates/part.eventform.php:3 templates/part.eventinfo.php:4
-msgid "Title"
-msgstr "Tytuł"
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr "Wyeksportuj"
#: templates/part.eventform.php:5
msgid "Title of the Event"
msgstr "Tytuł zdarzenia"
-#: templates/part.eventform.php:9 templates/part.eventinfo.php:9
-msgid "Location"
-msgstr "Lokalizacja"
-
#: templates/part.eventform.php:11
-msgid "Location of the Event"
-msgstr "Lokalizacja zdarzenia"
-
-#: templates/part.eventform.php:17 templates/part.eventinfo.php:16
msgid "Category"
msgstr "Kategoria"
-#: templates/part.eventform.php:19
+#: templates/part.eventform.php:13
msgid "Select category"
msgstr "Wybierz kategorię"
-#: templates/part.eventform.php:45 templates/part.eventinfo.php:28
+#: templates/part.eventform.php:37
msgid "All Day Event"
msgstr "Całodniowe wydarzenie"
-#: templates/part.eventform.php:49 templates/part.eventinfo.php:31
+#: templates/part.eventform.php:41
msgid "From"
msgstr "Z"
-#: templates/part.eventform.php:57 templates/part.eventinfo.php:38
+#: templates/part.eventform.php:49
msgid "To"
msgstr "Do"
-#: templates/part.eventform.php:65 templates/part.eventinfo.php:44
+#: templates/part.eventform.php:57
+msgid "Advanced options"
+msgstr "Opcje zaawansowane"
+
+#: templates/part.eventform.php:61
msgid "Repeat"
msgstr "Powtórz"
-#: templates/part.eventform.php:81 templates/part.eventinfo.php:51
-msgid "Attendees"
-msgstr "Uczestnicy"
+#: templates/part.eventform.php:68
+msgid "Advanced"
+msgstr "Zaawansowane"
+
+#: templates/part.eventform.php:112
+msgid "Select weekdays"
+msgstr "Wybierz dni powszechne"
+
+#: templates/part.eventform.php:125 templates/part.eventform.php:138
+msgid "Select days"
+msgstr "Wybierz dni"
+
+#: templates/part.eventform.php:130
+msgid "and the events day of year."
+msgstr "oraz wydarzenia roku"
+
+#: templates/part.eventform.php:143
+msgid "and the events day of month."
+msgstr "oraz wydarzenia miesiąca"
+
+#: templates/part.eventform.php:151
+msgid "Select months"
+msgstr "Wybierz miesiące"
+
+#: templates/part.eventform.php:164
+msgid "Select weeks"
+msgstr "Wybierz tygodnie"
+
+#: templates/part.eventform.php:169
+msgid "and the events week of year."
+msgstr "oraz wydarzenia roku."
+
+#: templates/part.eventform.php:175
+msgid "Interval"
+msgstr "Przedział"
+
+#: templates/part.eventform.php:181
+msgid "End"
+msgstr "Koniec"
+
+#: templates/part.eventform.php:193
+msgid "occurrences"
+msgstr "wystąpienia"
+
+#: templates/part.eventform.php:208
+msgid "Location"
+msgstr "Lokalizacja"
+
+#: templates/part.eventform.php:210
+msgid "Location of the Event"
+msgstr "Lokalizacja zdarzenia"
+
+#: templates/part.eventform.php:216
+msgid "Description"
+msgstr "Opis"
-#: templates/part.eventform.php:89
+#: templates/part.eventform.php:218
msgid "Description of the Event"
msgstr "Opis zdarzenia"
-#: templates/part.eventinfo.php:63
-msgid "Close"
-msgstr "Zamknij"
+#: templates/part.import.php:1
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the calendar"
+msgstr "Proszę wybrać kalendarz"
+
+#: templates/part.import.php:10
+msgid "create a new calendar"
+msgstr ""
+
+#: templates/part.import.php:15
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import"
+msgstr "Import"
+
+#: templates/part.import.php:20
+msgid "Importing calendar"
+msgstr ""
+
+#: templates/part.import.php:23
+msgid "Calendar imported successfully"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Close Dialog"
+msgstr ""
#: templates/part.newevent.php:1
msgid "Create a new event"
msgstr "Stwórz nowe wydarzenie"
-#: templates/settings.php:11
+#: templates/settings.php:13
msgid "Timezone"
msgstr "Strefa czasowa"
+#: templates/settings.php:30
+msgid "Check always for changes of the timezone"
+msgstr "Zawsze sprawdzaj zmiany strefy czasowej"
+
+#: templates/settings.php:32
+msgid "Timeformat"
+msgstr "Format czasu"
+
+#: templates/settings.php:34
+msgid "24h"
+msgstr "24h"
+
+#: templates/settings.php:35
+msgid "12h"
+msgstr "12h"
+
+#: templates/settings.php:41
+msgid "Calendar CalDAV syncing address:"
+msgstr "Adres synchronizacji kalendarza CalDAV:"
+
diff --git a/l10n/pl/contacts.po b/l10n/pl/contacts.po
index a8793db4831..15faa87da87 100644
--- a/l10n/pl/contacts.po
+++ b/l10n/pl/contacts.po
@@ -3,13 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Bartek <bart.p.pl@gmail.com>, 2012.
+# Marcin Małecki <gerber@tkdami.net>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 20:10+0200\n"
-"PO-Revision-Date: 2011-09-23 18:11+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 14:05+0000\n"
+"Last-Translator: Bartek <bart.p.pl@gmail.com>\n"
"Language-Team: Polish (http://www.transifex.net/projects/p/owncloud/team/pl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,164 +19,273 @@ msgstr ""
"Language: pl\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
-#: ajax/addcard.php:31 ajax/addproperty.php:31 ajax/deletebook.php:32
-#: ajax/deletecard.php:32 ajax/deleteproperty.php:34 ajax/getdetails.php:32
-#: ajax/setproperty.php:32 ajax/showaddcard.php:30 ajax/showaddproperty.php:31
-#: ajax/showsetproperty.php:32 photo.php:32
-msgid "You need to log in."
-msgstr ""
+#: ajax/activation.php:17 ajax/updateaddressbook.php:26
+msgid "Error (de)activating addressbook."
+msgstr "Błąd podczas (de)aktywacji książki"
-#: ajax/addcard.php:37
-msgid "This is not your addressbook."
-msgstr ""
+#: ajax/addcard.php:79
+msgid "There was an error adding the contact."
+msgstr "Wystąpił błąd podczas dodawania kontaktu"
-#: ajax/addproperty.php:37 ajax/deletecard.php:39 ajax/deleteproperty.php:41
-#: ajax/getdetails.php:39 ajax/setproperty.php:38 ajax/showaddproperty.php:37
-#: ajax/showsetproperty.php:38 photo.php:39
-msgid "Contact could not be found."
-msgstr ""
+#: ajax/addproperty.php:39
+msgid "Cannot add empty property."
+msgstr "Nie można dodać pustego elementu"
-#: ajax/addproperty.php:43 ajax/deletebook.php:38 ajax/deletecard.php:45
-#: ajax/deleteproperty.php:47 ajax/getdetails.php:45 ajax/setproperty.php:44
-#: ajax/showaddproperty.php:43 ajax/showsetproperty.php:44 photo.php:45
-msgid "This is not your contact."
-msgstr ""
+#: ajax/addproperty.php:51
+msgid "At least one of the address fields has to be filled out."
+msgstr "Przynajmniej jedno pole adresu musi być wypełnione"
-#: ajax/addproperty.php:50 ajax/deleteproperty.php:54 ajax/getdetails.php:52
-#: ajax/setproperty.php:51 ajax/showsetproperty.php:51
-msgid "vCard could not be read."
-msgstr ""
+#: ajax/addproperty.php:77
+msgid "Error adding contact property."
+msgstr "Błąd podczas dodawania elementu"
-#: ajax/deleteproperty.php:65 ajax/setproperty.php:62
-#: ajax/showsetproperty.php:62
-msgid "Information about vCard is incorrect. Please reload the page."
-msgstr ""
+#: ajax/createaddressbook.php:20
+msgid "Error adding addressbook."
+msgstr "Błąd podczas dodawania książki"
-#: photo.php:53
-msgid "This card is not RFC compatible."
-msgstr ""
+#: ajax/createaddressbook.php:26
+msgid "Error activating addressbook."
+msgstr "Błąd podczas aktywacji książki adresowej"
-#: photo.php:90
-msgid "This card does not contain a photo."
-msgstr ""
+#: ajax/deleteproperty.php:40
+msgid "Error deleting contact property."
+msgstr "Błąd podczas kasowania elementu"
-#: templates/index.php:8
-msgid "Add Contact"
-msgstr ""
+#: ajax/setproperty.php:79
+msgid "Error updating contact property."
+msgstr "Błąd podczas aktualizacji elementu"
-#: templates/part.addcardform.php:5
-msgid "Group"
-msgstr ""
+#: ajax/updateaddressbook.php:20
+msgid "Error updating addressbook."
+msgstr "Błąd podczas aktualizacji książki"
-#: templates/part.addcardform.php:12 templates/part.property.php:3
-msgid "Name"
-msgstr ""
+#: appinfo/app.php:21 templates/settings.php:3
+msgid "Contacts"
+msgstr "Kontakty"
-#: templates/part.addcardform.php:14
-msgid "Create Contact"
-msgstr ""
+#: lib/app.php:42
+msgid "This is not your addressbook."
+msgstr "To nie jest twoja książka adresowa."
+
+#: lib/app.php:51 photo.php:34
+msgid "Contact could not be found."
+msgstr "Kontakt nie znaleziony."
-#: templates/part.addpropertyform.php:4 templates/part.property.php:40
+#: lib/app.php:79
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "Informacje o vCard są nieprawidłowe. Proszę odświeżyć stronę."
+
+#: lib/app.php:91 templates/part.addcardform.php:54
+#: templates/part.property.php:45 templates/part.setpropertyform.php:7
msgid "Address"
-msgstr ""
+msgstr "Adres"
-#: templates/part.addpropertyform.php:5
+#: lib/app.php:92 templates/part.addcardform.php:43
msgid "Telephone"
-msgstr ""
+msgstr "Telefon"
-#: templates/part.addpropertyform.php:6 templates/part.property.php:22
+#: lib/app.php:93 templates/part.addcardform.php:37
+#: templates/part.property.php:16 templates/part.setpropertyform.php:51
msgid "Email"
-msgstr ""
+msgstr "E-mail"
-#: templates/part.addpropertyform.php:7 templates/part.property.php:15
+#: lib/app.php:94 templates/part.addcardform.php:27
+#: templates/part.property.php:9 templates/part.setpropertyform.php:54
msgid "Organization"
-msgstr ""
+msgstr "Organizacja"
-#: templates/part.addpropertyform.php:17 templates/part.addpropertyform.php:32
+#: lib/app.php:106 lib/app.php:113
msgid "Work"
-msgstr ""
+msgstr "Praca"
-#: templates/part.addpropertyform.php:18 templates/part.addpropertyform.php:30
+#: lib/app.php:107 lib/app.php:111
msgid "Home"
-msgstr ""
+msgstr "Dom"
+
+#: lib/app.php:112
+msgid "Mobile"
+msgstr "Komórka"
+
+#: lib/app.php:114
+msgid "Text"
+msgstr "Tekst"
+
+#: lib/app.php:115
+msgid "Voice"
+msgstr "Połączenie głosowe"
+
+#: lib/app.php:116
+msgid "Fax"
+msgstr "Faks"
+
+#: lib/app.php:117
+msgid "Video"
+msgstr "Połączenie wideo"
+
+#: lib/app.php:118
+msgid "Pager"
+msgstr "Pager"
+
+#: lib/search.php:22
+msgid "Contact"
+msgstr "Kontakt"
+
+#: photo.php:40
+msgid "This is not your contact."
+msgstr "To nie jest twój kontakt."
+
+#: photo.php:48
+msgid "This card is not RFC compatible."
+msgstr "Ta karta nie jest zgodna ze specyfikacją RFC."
+
+#: photo.php:85
+msgid "This card does not contain a photo."
+msgstr "Ta karta nie zawiera zdjęć."
+
+#: templates/index.php:6
+msgid "Add Contact"
+msgstr "Dodaj kontakt"
+
+#: templates/index.php:7
+msgid "Addressbooks"
+msgstr "Książki adresowe"
-#: templates/part.addpropertyform.php:20 templates/part.property.php:48
-#: templates/part.setpropertyform.php:5
+#: templates/part.addcardform.php:8
+msgid "Addressbook"
+msgstr "Książka adresowa"
+
+#: templates/part.addcardform.php:21
+msgid "Name"
+msgstr "Nazwisko"
+
+#: templates/part.addcardform.php:57 templates/part.details.php:43
+#: templates/part.details.php:79 templates/part.setpropertyform.php:10
+#: templates/part.setpropertyform.php:47
+msgid "Type"
+msgstr "Typ"
+
+#: templates/part.addcardform.php:65 templates/part.details.php:49
+#: templates/part.setpropertyform.php:16
msgid "PO Box"
-msgstr ""
+msgstr "PO Box"
-#: templates/part.addpropertyform.php:21 templates/part.property.php:51
-#: templates/part.setpropertyform.php:6
+#: templates/part.addcardform.php:72 templates/part.details.php:53
+#: templates/part.setpropertyform.php:20
msgid "Extended"
-msgstr ""
+msgstr "Rozszerzony"
-#: templates/part.addpropertyform.php:22 templates/part.property.php:54
-#: templates/part.setpropertyform.php:7
+#: templates/part.addcardform.php:78 templates/part.details.php:57
+#: templates/part.setpropertyform.php:24
msgid "Street"
-msgstr ""
+msgstr "Ulica"
-#: templates/part.addpropertyform.php:23 templates/part.property.php:57
-#: templates/part.setpropertyform.php:8
+#: templates/part.addcardform.php:84 templates/part.details.php:61
+#: templates/part.setpropertyform.php:28
msgid "City"
-msgstr ""
+msgstr "Miasto"
-#: templates/part.addpropertyform.php:24 templates/part.property.php:60
-#: templates/part.setpropertyform.php:9
+#: templates/part.addcardform.php:90 templates/part.details.php:65
+#: templates/part.setpropertyform.php:32
msgid "Region"
-msgstr ""
+msgstr "Region"
-#: templates/part.addpropertyform.php:25 templates/part.property.php:63
-#: templates/part.setpropertyform.php:10
+#: templates/part.addcardform.php:96 templates/part.details.php:69
+#: templates/part.setpropertyform.php:36
msgid "Zipcode"
-msgstr ""
+msgstr "Błąd podczas dodawania elementu"
-#: templates/part.addpropertyform.php:26 templates/part.property.php:66
-#: templates/part.setpropertyform.php:11
+#: templates/part.addcardform.php:102 templates/part.details.php:73
+#: templates/part.setpropertyform.php:40
msgid "Country"
-msgstr ""
+msgstr "Kraj"
-#: templates/part.addpropertyform.php:31
-msgid "Mobile"
-msgstr ""
+#: templates/part.addcardform.php:109
+msgid "Create Contact"
+msgstr "Utwórz kontakt"
-#: templates/part.addpropertyform.php:33
-msgid "Text"
-msgstr ""
+#: templates/part.chooseaddressbook.php:1
+msgid "Choose active Address Books"
+msgstr "Wybierz aktywną książkę adresową"
-#: templates/part.addpropertyform.php:34
-msgid "Voice"
-msgstr ""
+#: templates/part.chooseaddressbook.php:16
+msgid "New Address Book"
+msgstr "Nowa książka adresowa"
-#: templates/part.addpropertyform.php:35
-msgid "Fax"
-msgstr ""
+#: templates/part.chooseaddressbook.php:21
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "CardDav Link"
+msgstr "Link CardDav"
-#: templates/part.addpropertyform.php:36
-msgid "Video"
-msgstr ""
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Download"
+msgstr "Sciągaj"
-#: templates/part.addpropertyform.php:37
-msgid "Pager"
-msgstr ""
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Edit"
+msgstr "Edytuj"
-#: templates/part.details.php:33
+#: templates/part.chooseaddressbook.rowfields.php:5
msgid "Delete"
-msgstr ""
+msgstr "Usuń"
+
+#: templates/part.details.php:3
+msgid "Download contact"
+msgstr "Pobierz kontakt"
+
+#: templates/part.details.php:4
+msgid "Delete contact"
+msgstr "Skasuj kontakt"
#: templates/part.details.php:34
-msgid "Add Property"
-msgstr ""
+msgid "Add"
+msgstr "Dodaj"
+
+#: templates/part.editaddressbook.php:9
+msgid "New Addressbook"
+msgstr "Nowa książka adresowa"
-#: templates/part.property.php:9
+#: templates/part.editaddressbook.php:9
+msgid "Edit Addressbook"
+msgstr "Edytuj książkę"
+
+#: templates/part.editaddressbook.php:12
+msgid "Displayname"
+msgstr "Nazwa wyświetlana"
+
+#: templates/part.editaddressbook.php:23
+msgid "Active"
+msgstr "Aktywny"
+
+#: templates/part.editaddressbook.php:29
+msgid "Save"
+msgstr "Zapisz"
+
+#: templates/part.editaddressbook.php:29
+msgid "Submit"
+msgstr "Potwierdź"
+
+#: templates/part.editaddressbook.php:30
+msgid "Cancel"
+msgstr "Skasuj"
+
+#: templates/part.property.php:3
msgid "Birthday"
-msgstr ""
+msgstr "Urodziny"
+
+#: templates/part.property.php:23
+msgid "Preferred"
+msgstr "Preferowane"
-#: templates/part.property.php:29
+#: templates/part.property.php:23 templates/part.setpropertyform.php:45
msgid "Phone"
-msgstr ""
+msgstr "Telefon"
-#: templates/part.setpropertyform.php:17
-msgid "Edit"
-msgstr ""
+#: templates/part.setpropertyform.php:57
+msgid "Update"
+msgstr "Aktualizuj"
+
+#: templates/settings.php:4
+msgid "CardDAV syncing address:"
+msgstr "Adres synchronizacji CardDAV:"
diff --git a/l10n/pl/core.po b/l10n/pl/core.po
index 4883af328b9..d18a657d96a 100644
--- a/l10n/pl/core.po
+++ b/l10n/pl/core.po
@@ -4,16 +4,16 @@
#
# Translators:
# Kamil Domański <kdomanski@kdemail.net>, 2011.
-# Marcin Małecki <gerber@tkdami.net>, 2011.
+# Marcin Małecki <gerber@tkdami.net>, 2011, 2012.
# Marcin Małecki <mosslar@gmail.com>, 2011.
# <mosslar@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 18:17+0200\n"
-"PO-Revision-Date: 2011-09-05 09:18+0000\n"
-"Last-Translator: mosslar <gerber@tkdami.net>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-11 13:08+0000\n"
+"Last-Translator: Marcin Małecki <gerber@tkdami.net>\n"
"Language-Team: Polish (http://www.transifex.net/projects/p/owncloud/team/pl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -21,6 +21,51 @@ msgstr ""
"Language: pl\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
+#: lostpassword/index.php:24
+msgid "Owncloud password reset"
+msgstr "Resetowani hasła"
+
+#: lostpassword/templates/email.php:1
+msgid "Use the following link to reset your password: {link}"
+msgstr "Użyj tego linku do zresetowania hasła: {link}"
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr "Otrzymasz link do resetowania hasła poprzez e-mail."
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Requested"
+msgstr "Żądane"
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr "Logowanie nie powiodło się!"
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:22
+#: templates/login.php:8
+msgid "Username"
+msgstr "Użytkownik"
+
+#: lostpassword/templates/lostpassword.php:14
+msgid "Request reset"
+msgstr "Żądanie resetowania"
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr "Twoje hasło zostało zresetowane"
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr "Do strony logowania"
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr "Nowe hasło"
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr "Zresetuj hasło"
+
#: strings.php:5
msgid "Personal"
msgstr "Ustawienia osobiste"
@@ -49,54 +94,50 @@ msgstr "Konta nie znaleziono "
msgid "Create an <strong>admin account</strong>"
msgstr "Stwórz jako <strong>konto administratora</strong>"
-#: templates/installation.php:21
-msgid "Username"
-msgstr "Użytkownik"
-
-#: templates/installation.php:22
+#: templates/installation.php:26 templates/login.php:12
msgid "Password"
msgstr "Hasło"
-#: templates/installation.php:27
+#: templates/installation.php:32
+msgid "Advanced"
+msgstr "Zaawansowane"
+
+#: templates/installation.php:34
+msgid "Data folder"
+msgstr "Katalog danych"
+
+#: templates/installation.php:41
msgid "Configure the database"
msgstr "Konfiguracja bazy danych"
-#: templates/installation.php:32 templates/installation.php:43
-#: templates/installation.php:53
+#: templates/installation.php:46 templates/installation.php:57
+#: templates/installation.php:67
msgid "will be used"
msgstr "zostanie użyte"
-#: templates/installation.php:64
+#: templates/installation.php:79
msgid "Database user"
msgstr "Użytkownik bazy danych"
-#: templates/installation.php:65
+#: templates/installation.php:83
msgid "Database password"
msgstr "Hasło do bazy danych"
-#: templates/installation.php:66
+#: templates/installation.php:87
msgid "Database name"
msgstr "Nazwa bazy danych"
-#: templates/installation.php:72
-msgid "Advanced"
-msgstr "Zaawansowane"
-
-#: templates/installation.php:75
+#: templates/installation.php:93
msgid "Database host"
msgstr "Host bazy danych"
-#: templates/installation.php:76
-msgid "Data folder"
-msgstr "Katalog danych"
-
-#: templates/installation.php:79
+#: templates/installation.php:98
msgid "Finish setup"
msgstr "Zakończ instalację"
#: templates/layout.guest.php:35
-msgid "gives you freedom and control over your own data"
-msgstr "zapewnia Ci wolność i kontrolę nad własnymi danymi"
+msgid "web services under your control"
+msgstr "usługi internetowe twoją pod kontrolą"
#: templates/layout.user.php:34
msgid "Log out"
@@ -106,38 +147,22 @@ msgstr "Wyloguj się"
msgid "Settings"
msgstr "Ustawienia"
-#: templates/login.php:4
+#: templates/login.php:5
msgid "Lost your password?"
msgstr "Nie pamiętasz hasła?"
-#: templates/login.php:9 templates/login.php:13
+#: templates/login.php:15
msgid "remember"
msgstr "zapamiętaj"
+#: templates/login.php:16
+msgid "Log in"
+msgstr "Zaloguj się"
+
#: templates/logout.php:1
msgid "You are logged out."
msgstr "Zostałeś wylogowany."
-#: templates/lostpassword.php:3
-msgid "You will receive a link to reset your password via Email."
-msgstr "Otrzymasz link do resetowania hasła poprzez e-mail."
-
-#: templates/lostpassword.php:5
-msgid "Requested"
-msgstr "Żądane"
-
-#: templates/lostpassword.php:8
-msgid "Login failed!"
-msgstr "Nie udało się zalogować!"
-
-#: templates/lostpassword.php:10
-msgid "Username or Email"
-msgstr "Użytkownik lub email"
-
-#: templates/lostpassword.php:11
-msgid "Request reset"
-msgstr "Zresetuj hasło"
-
#: templates/part.pagenavi.php:3
msgid "prev"
msgstr "wstecz"
@@ -146,16 +171,4 @@ msgstr "wstecz"
msgid "next"
msgstr "dalej"
-#: templates/resetpassword.php:4
-msgid "Your password was reset"
-msgstr "Twoje hasło zostało zresetowane"
-
-#: templates/resetpassword.php:6
-msgid "New password"
-msgstr "Nowe hasło"
-
-#: templates/resetpassword.php:7
-msgid "Reset password"
-msgstr "Zresetuj hasło"
-
diff --git a/l10n/pl/files.po b/l10n/pl/files.po
index f7bf94df142..f9d6ec7b31e 100644
--- a/l10n/pl/files.po
+++ b/l10n/pl/files.po
@@ -3,14 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Marcin Małecki <gerber@tkdami.net>, 2011, 2012.
# <mosslar@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-11 13:09+0000\n"
+"Last-Translator: Marcin Małecki <gerber@tkdami.net>\n"
"Language-Team: Polish (http://www.transifex.net/projects/p/owncloud/team/pl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,33 +19,36 @@ msgstr ""
"Language: pl\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
-#: ajax/upload.php:24
+#: ajax/upload.php:19
msgid "There is no error, the file uploaded with success"
-msgstr ""
+msgstr "Brak błędu, plik przesłany z sukcesem"
-#: ajax/upload.php:25
+#: ajax/upload.php:20
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr ""
+"Przesłany plik przekracza ustawienie upload_max_filesize w pliku php.ini"
-#: ajax/upload.php:26
+#: ajax/upload.php:21
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
+"Przesłany plik przekracza MAX_FILE_SIZE ustawienia, które zostało określono "
+"w formularzu HTML"
-#: ajax/upload.php:27
+#: ajax/upload.php:22
msgid "The uploaded file was only partially uploaded"
-msgstr ""
+msgstr "Plik został przesłany tylko częściowo."
-#: ajax/upload.php:28
+#: ajax/upload.php:23
msgid "No file was uploaded"
-msgstr ""
+msgstr "Żaden plik nie został przesłany"
-#: ajax/upload.php:29
+#: ajax/upload.php:24
msgid "Missing a temporary folder"
-msgstr ""
+msgstr "Brakuje folderu tymczasowego"
-#: appinfo/app.php:7
+#: appinfo/app.php:8
msgid "Files"
msgstr "Pliki"
@@ -52,43 +56,55 @@ msgstr "Pliki"
msgid "Maximum upload size"
msgstr "Maksymalna wielkość przesyłanego pliku"
+#: templates/index.php:7
+msgid "New"
+msgstr "Nowy"
+
#: templates/index.php:10
+msgid "Text file"
+msgstr "Plik tekstowy"
+
+#: templates/index.php:11
+msgid "Folder"
+msgstr "Katalog"
+
+#: templates/index.php:12
+msgid "From the web"
+msgstr "Z Internetu"
+
+#: templates/index.php:22
msgid "Upload"
msgstr "Prześlij"
-#: templates/index.php:17
-msgid "New Folder"
-msgstr "Nowy katalog"
-
-#: templates/index.php:31
+#: templates/index.php:35
msgid "Nothing in here. Upload something!"
msgstr "Nic tu nie ma. Prześlij jakieś pliki!"
-#: templates/index.php:39
+#: templates/index.php:43
msgid "Name"
msgstr "Nazwa"
-#: templates/index.php:41
+#: templates/index.php:45
msgid "Download"
msgstr "Ściąganie"
-#: templates/index.php:45
+#: templates/index.php:49
msgid "Size"
msgstr "Wielkość"
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Modified"
msgstr "Zmodyfikowano"
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Delete"
msgstr "Skasuj"
-#: templates/index.php:54
+#: templates/index.php:58
msgid "Upload too large"
msgstr "Przesyłany plik jest za duży"
-#: templates/index.php:56
+#: templates/index.php:60
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
diff --git a/l10n/pl/gallery.po b/l10n/pl/gallery.po
new file mode 100644
index 00000000000..2beaf9b81ef
--- /dev/null
+++ b/l10n/pl/gallery.po
@@ -0,0 +1,32 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:48+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Polish (http://www.transifex.net/projects/p/owncloud/team/pl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pl\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
+
+#: appinfo/app.php:41
+msgid "Gallery"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Rescan"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+
diff --git a/l10n/pl/media.po b/l10n/pl/media.po
index 237da744eec..425dc07722e 100644
--- a/l10n/pl/media.po
+++ b/l10n/pl/media.po
@@ -2,14 +2,16 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
+# Translators:
+# Marcin Małecki <gerber@tkdami.net>, 2011.
# <mosslar@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
-"Report-Msgid-Bugs-To: http://bugs.kde.org/buglist.cgi?product=owncloud\n"
-"POT-Creation-Date: 2011-08-20 05:08+0200\n"
-"PO-Revision-Date: 2011-08-20 03:08+0000\n"
-"Last-Translator: JanCBorchardt <JanCBorchardt@fsfe.org>\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Polish (http://www.transifex.net/projects/p/owncloud/team/pl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,39 +19,35 @@ msgstr ""
"Language: pl\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
-#: appinfo/app.php:31
+#: appinfo/app.php:32
msgid "Music"
msgstr "Muzyka"
-#: templates/music.php:3
+#: templates/music.php:3 templates/player.php:13
msgid "Play"
-msgstr ""
+msgstr "Odtwarzaj"
-#: templates/music.php:4 templates/music.php:30
+#: templates/music.php:4 templates/music.php:26 templates/player.php:14
msgid "Pause"
msgstr "Zatrzymaj"
#: templates/music.php:5
msgid "Previous"
-msgstr ""
+msgstr "Poprzedni"
-#: templates/music.php:6
+#: templates/music.php:6 templates/player.php:15
msgid "Next"
-msgstr ""
+msgstr "Następny"
#: templates/music.php:7
msgid "Mute"
-msgstr ""
+msgstr "Wycisz"
#: templates/music.php:8
msgid "Unmute"
-msgstr ""
-
-#: templates/music.php:28
-msgid "Songs scanned"
-msgstr "Przeskanowane utwory"
+msgstr "Włącz"
-#: templates/music.php:29
+#: templates/music.php:25
msgid "Rescan Collection"
msgstr "Przeskanuj kolekcję"
diff --git a/l10n/pl/settings.po b/l10n/pl/settings.po
index dde3d9a7edf..1fa60a77fd9 100644
--- a/l10n/pl/settings.po
+++ b/l10n/pl/settings.po
@@ -2,16 +2,18 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
+# Translators:
# Kamil Domański <kdomanski@kdemail.net>, 2011.
-# <mosslar@gmail.com>, 2011.
+# Marcin Małecki <gerber@tkdami.net>, 2011, 2012.
# Marcin Małecki <mosslar@gmail.com>, 2011.
+# <mosslar@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
-"Report-Msgid-Bugs-To: http://bugs.kde.org/buglist.cgi?product=owncloud\n"
-"POT-Creation-Date: 2011-08-28 01:11+0200\n"
-"PO-Revision-Date: 2011-08-23 10:15+0000\n"
-"Last-Translator: mosslar <gerber@tkdami.net>\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-11 13:11+0000\n"
+"Last-Translator: Marcin Małecki <gerber@tkdami.net>\n"
"Language-Team: Polish (http://www.transifex.net/projects/p/owncloud/team/pl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,22 +21,26 @@ msgstr ""
"Language: pl\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
-#: ajax/openid.php:13 ajax/setlanguage.php:13
-msgid "Authentication error"
-msgstr "Błąd uwierzytelniania"
+#: ajax/lostpassword.php:14
+msgid "email Changed"
+msgstr "email zmieniony"
-#: ajax/openid.php:21
-msgid "OpenID Changed"
-msgstr "Zmieniono OpenID"
-
-#: ajax/openid.php:23 ajax/setlanguage.php:23
+#: ajax/lostpassword.php:16 ajax/openid.php:17 ajax/setlanguage.php:16
msgid "Invalid request"
msgstr "Nieprawidłowe żądanie"
-#: ajax/setlanguage.php:21
+#: ajax/openid.php:15
+msgid "OpenID Changed"
+msgstr "Zmieniono OpenID"
+
+#: ajax/setlanguage.php:14
msgid "Language changed"
msgstr "Język zmieniony"
+#: templates/admin.php:13
+msgid "Log level"
+msgstr "Poziom logowania"
+
#: templates/apps.php:8
msgid "Add your application"
msgstr "Dodaj własną aplikacje"
@@ -55,15 +61,15 @@ msgstr "przez"
msgid "Ask a question"
msgstr "Zadaj pytanie"
-#: templates/help.php:17
+#: templates/help.php:20
msgid "Problems connecting to help database."
msgstr "Problem z połączeniem z bazą danych."
-#: templates/help.php:18
+#: templates/help.php:21
msgid "Go there manually."
msgstr "Przejdź na stronę ręcznie."
-#: templates/help.php:26
+#: templates/help.php:29
msgid "Answer"
msgstr "Odpowiedź"
@@ -79,6 +85,10 @@ msgstr "z dostępnych"
msgid "Your password got changed"
msgstr "Twoje hasło zostało zmienione"
+#: templates/personal.php:14
+msgid "Unable to change your password"
+msgstr "Nie można zmienić hasła"
+
#: templates/personal.php:15
msgid "Current password"
msgstr "Bieżące hasło"
@@ -96,36 +106,52 @@ msgid "Change password"
msgstr "Zmień hasło"
#: templates/personal.php:24
+msgid "Email"
+msgstr "Email"
+
+#: templates/personal.php:25
+msgid "Your email address"
+msgstr "Twój adres email"
+
+#: templates/personal.php:26
+msgid "Fill in an email address to enable password recovery"
+msgstr "Podaj adres email żeby odzyskać hasło"
+
+#: templates/personal.php:32 templates/personal.php:33
msgid "Language"
msgstr "Język"
-#: templates/personal.php:30
-msgid "Help translating"
+#: templates/personal.php:38
+msgid "Help translate"
msgstr "Pomóż w tłumaczeniu"
-#: templates/personal.php:36
+#: templates/personal.php:45
msgid "use this address to connect to your ownCloud in your file manager"
msgstr ""
"użyj tego adresu żeby połączyć się z twoim kontem ownCloud w menedżerze "
"plików."
-#: templates/users.php:16
+#: templates/users.php:15 templates/users.php:30
msgid "Name"
msgstr "Nazwa"
-#: templates/users.php:17
+#: templates/users.php:16 templates/users.php:31
msgid "Password"
msgstr "Hasło"
-#: templates/users.php:18 templates/users.php:36
+#: templates/users.php:17 templates/users.php:32 templates/users.php:46
msgid "Groups"
msgstr "Grupy"
-#: templates/users.php:24
+#: templates/users.php:23
msgid "Create"
msgstr "Stwórz"
-#: templates/users.php:48
+#: templates/users.php:33
+msgid "Quota"
+msgstr "Udział"
+
+#: templates/users.php:58
msgid "Delete"
msgstr "Skasuj"
diff --git a/l10n/pt_BR/calendar.po b/l10n/pt_BR/calendar.po
index 12e2e31f03b..7c0b13f20c2 100644
--- a/l10n/pt_BR/calendar.po
+++ b/l10n/pt_BR/calendar.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Portuguese (Brazilian) (http://www.transifex.net/projects/p/owncloud/team/pt_BR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,351 +18,432 @@ msgstr ""
"Language: pt_BR\n"
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
-#: ajax/createcalendar.php:18 ajax/settimezone.php:19
-#: ajax/updatecalendar.php:18
-msgid "Authentication error"
-msgstr "Erro de autenticação"
-
-#: ajax/editeventform.php:25
-msgid "Wrong calendar"
+#: ajax/guesstimezone.php:42
+msgid "New Timezone:"
msgstr ""
-#: ajax/settimezone.php:27
+#: ajax/settimezone.php:22
msgid "Timezone changed"
msgstr "Fuso horário alterado"
-#: ajax/settimezone.php:29
+#: ajax/settimezone.php:24
msgid "Invalid request"
msgstr "Pedido inválido"
-#: appinfo/app.php:19 templates/part.eventform.php:27
-#: templates/part.eventinfo.php:18
+#: appinfo/app.php:20 templates/calendar.php:13
+#: templates/part.eventform.php:20
msgid "Calendar"
msgstr "Calendário"
-#: lib/object.php:292
+#: lib/app.php:19
+msgid "Wrong calendar"
+msgstr "Calendário incorreto"
+
+#: lib/app.php:60 lib/object.php:332
msgid "Birthday"
-msgstr ""
+msgstr "Aniversário"
-#: lib/object.php:293
+#: lib/app.php:61 lib/object.php:333
msgid "Business"
-msgstr ""
+msgstr "Negócio"
-#: lib/object.php:294
+#: lib/app.php:62 lib/object.php:334
msgid "Call"
-msgstr ""
+msgstr "Chamada"
-#: lib/object.php:295
+#: lib/app.php:63 lib/object.php:335
msgid "Clients"
-msgstr ""
+msgstr "Clientes"
-#: lib/object.php:296
+#: lib/app.php:64 lib/object.php:336
msgid "Deliverer"
-msgstr ""
+msgstr "Entrega"
-#: lib/object.php:297
+#: lib/app.php:65 lib/object.php:337
msgid "Holidays"
-msgstr ""
+msgstr "Feriados"
-#: lib/object.php:298
+#: lib/app.php:66 lib/object.php:338
msgid "Ideas"
-msgstr ""
+msgstr "Idéias"
-#: lib/object.php:299
+#: lib/app.php:67 lib/object.php:339
msgid "Journey"
-msgstr ""
+msgstr "Jornada"
-#: lib/object.php:300
+#: lib/app.php:68 lib/object.php:340
msgid "Jubilee"
-msgstr ""
+msgstr "Jubileu"
-#: lib/object.php:301
+#: lib/app.php:69 lib/object.php:341
msgid "Meeting"
-msgstr ""
+msgstr "Reunião"
-#: lib/object.php:302
+#: lib/app.php:70 lib/object.php:342
msgid "Other"
-msgstr ""
+msgstr "Outros"
-#: lib/object.php:303
+#: lib/app.php:71 lib/object.php:343
msgid "Personal"
-msgstr ""
+msgstr "Pessoal"
-#: lib/object.php:304
+#: lib/app.php:72 lib/object.php:344
msgid "Projects"
-msgstr ""
+msgstr "Projetos"
-#: lib/object.php:305
+#: lib/app.php:73 lib/object.php:345
msgid "Questions"
-msgstr ""
+msgstr "Perguntas"
-#: lib/object.php:306
+#: lib/app.php:74 lib/object.php:346
msgid "Work"
-msgstr ""
+msgstr "Trabalho"
-#: lib/object.php:313
+#: lib/object.php:353
msgid "Does not repeat"
msgstr "Não repetir"
-#: lib/object.php:314
+#: lib/object.php:354
msgid "Daily"
msgstr "Diariamente"
-#: lib/object.php:315
+#: lib/object.php:355
msgid "Weekly"
msgstr "Semanal"
-#: lib/object.php:316
+#: lib/object.php:356
msgid "Every Weekday"
msgstr "Cada dia da semana"
-#: lib/object.php:317
+#: lib/object.php:357
msgid "Bi-Weekly"
msgstr "De duas em duas semanas"
-#: lib/object.php:318
+#: lib/object.php:358
msgid "Monthly"
msgstr "Mensal"
-#: lib/object.php:319
+#: lib/object.php:359
msgid "Yearly"
msgstr "Anual"
-#: lib/object.php:337
-msgid "Not an array"
+#: lib/object.php:366
+msgid "never"
msgstr ""
-#: templates/calendar.php:3
-msgid "All day"
-msgstr "Todo o dia"
+#: lib/object.php:367
+msgid "by occurrences"
+msgstr ""
-#: templates/calendar.php:32
-msgid "Sunday"
-msgstr "Domingo"
+#: lib/object.php:368
+msgid "by date"
+msgstr ""
+
+#: lib/object.php:375
+msgid "by monthday"
+msgstr ""
+
+#: lib/object.php:376
+msgid "by weekday"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:383 templates/lAfix.php:3
msgid "Monday"
-msgstr "Segunda-feira"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:384 templates/lAfix.php:4
msgid "Tuesday"
-msgstr "Terça-feira"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:385 templates/lAfix.php:5
msgid "Wednesday"
-msgstr "Quarta-feira"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:386 templates/lAfix.php:6
msgid "Thursday"
-msgstr "Quinta-feira"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:387 templates/lAfix.php:7
msgid "Friday"
-msgstr "Sexta-feira"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:388 templates/lAfix.php:8
msgid "Saturday"
-msgstr "Sábado"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Sun."
-msgstr "Dom."
+#: lib/object.php:389 templates/lAfix.php:2
+msgid "Sunday"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Mon."
-msgstr "Seg."
+#: lib/object.php:396
+msgid "events week of month"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Tue."
-msgstr "Ter."
+#: lib/object.php:397
+msgid "first"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Wed."
-msgstr "Qua."
+#: lib/object.php:398
+msgid "second"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Thu."
-msgstr "Qui."
+#: lib/object.php:399
+msgid "third"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Fri."
-msgstr "Sex."
+#: lib/object.php:400
+msgid "fourth"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Sat."
-msgstr "Sáb."
+#: lib/object.php:401
+msgid "fifth"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:402
+msgid "last"
+msgstr ""
+
+#: lib/object.php:424 templates/lAfix.php:16
msgid "January"
-msgstr "Janeiro"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:425 templates/lAfix.php:17
msgid "February"
-msgstr "Fevereiro"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:426 templates/lAfix.php:18
msgid "March"
-msgstr "Março"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:427 templates/lAfix.php:19
msgid "April"
-msgstr "Abril"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:428 templates/lAfix.php:20
msgid "May"
-msgstr "Maio"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:429 templates/lAfix.php:21
msgid "June"
-msgstr "Junho"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:430 templates/lAfix.php:22
msgid "July"
-msgstr "Julho"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:431 templates/lAfix.php:23
msgid "August"
-msgstr "Agosto"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:432 templates/lAfix.php:24
msgid "September"
-msgstr "Setembro"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:433 templates/lAfix.php:25
msgid "October"
-msgstr "Outubro"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:434 templates/lAfix.php:26
msgid "November"
-msgstr "Novembro"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:435 templates/lAfix.php:27
msgid "December"
-msgstr "Dezembro"
-
-#: templates/calendar.php:35
-msgid "Jan."
-msgstr "Jan."
+msgstr ""
-#: templates/calendar.php:35
-msgid "Feb."
-msgstr "Fev."
+#: lib/object.php:441
+msgid "by events date"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Mar."
-msgstr "Mar."
+#: lib/object.php:442
+msgid "by yearday(s)"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Apr."
-msgstr "Abr."
+#: lib/object.php:443
+msgid "by weeknumber(s)"
+msgstr ""
-#: templates/calendar.php:35
-msgid "May."
+#: lib/object.php:444
+msgid "by day and month"
msgstr ""
-#: templates/calendar.php:35
-msgid "Jun."
-msgstr "Jun."
+#: lib/object.php:467
+msgid "Not an array"
+msgstr "Não é um array"
-#: templates/calendar.php:35
-msgid "Jul."
-msgstr "Jul."
+#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+msgid "Date"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Aug."
-msgstr "Ago."
+#: lib/search.php:40
+msgid "Cal."
+msgstr ""
-#: templates/calendar.php:35
-msgid "Sep."
-msgstr "Set."
+#: templates/calendar.php:10
+msgid "All day"
+msgstr "Todo o dia"
-#: templates/calendar.php:35
-msgid "Oct."
-msgstr "Out."
+#: templates/calendar.php:11
+msgid "Missing fields"
+msgstr "Campos incompletos"
-#: templates/calendar.php:35
-msgid "Nov."
-msgstr "Nov."
+#: templates/calendar.php:12 templates/part.eventform.php:3
+msgid "Title"
+msgstr "Título"
-#: templates/calendar.php:35
-msgid "Dec."
-msgstr "Dez."
+#: templates/calendar.php:14
+msgid "From Date"
+msgstr "Desde a Data"
-#: templates/calendar.php:36 templates/calendar.php:50
-#: templates/calendar.php:116
-msgid "Week"
-msgstr "Semana"
+#: templates/calendar.php:15
+msgid "From Time"
+msgstr "Desde a Hora"
-#: templates/calendar.php:37 templates/calendar.php:51
-msgid "Weeks"
-msgstr "Semanas"
+#: templates/calendar.php:16
+msgid "To Date"
+msgstr "Até a Data"
-#: templates/calendar.php:38
-msgid "More before {startdate}"
-msgstr ""
+#: templates/calendar.php:17
+msgid "To Time"
+msgstr "Até a Hora"
-#: templates/calendar.php:39
-msgid "More after {enddate}"
-msgstr ""
+#: templates/calendar.php:18
+msgid "The event ends before it starts"
+msgstr "O evento termina antes de começar"
-#: templates/calendar.php:49
-msgid "Day"
-msgstr "Dia"
+#: templates/calendar.php:19
+msgid "There was a database fail"
+msgstr "Houve uma falha de banco de dados"
#: templates/calendar.php:52
+msgid "Week"
+msgstr "Semana"
+
+#: templates/calendar.php:53
msgid "Month"
msgstr "Mês"
-#: templates/calendar.php:53
+#: templates/calendar.php:54
msgid "List"
-msgstr ""
+msgstr "Lista"
-#: templates/calendar.php:58
+#: templates/calendar.php:59
msgid "Today"
msgstr "Hoje"
-#: templates/calendar.php:59
+#: templates/calendar.php:60
msgid "Calendars"
msgstr "Calendários"
-#: templates/calendar.php:76 templates/calendar.php:94
-msgid "Time"
-msgstr "Tempo"
-
-#: templates/calendar.php:169
+#: templates/calendar.php:78
msgid "There was a fail, while parsing the file."
msgstr "Houve uma falha, ao analisar o arquivo."
+#: templates/lAfix.php:9
+msgid "Sun."
+msgstr ""
+
+#: templates/lAfix.php:10
+msgid "Mon."
+msgstr ""
+
+#: templates/lAfix.php:11
+msgid "Tue."
+msgstr ""
+
+#: templates/lAfix.php:12
+msgid "Wed."
+msgstr ""
+
+#: templates/lAfix.php:13
+msgid "Thu."
+msgstr ""
+
+#: templates/lAfix.php:14
+msgid "Fri."
+msgstr ""
+
+#: templates/lAfix.php:15
+msgid "Sat."
+msgstr ""
+
+#: templates/lAfix.php:28
+msgid "Jan."
+msgstr ""
+
+#: templates/lAfix.php:29
+msgid "Feb."
+msgstr ""
+
+#: templates/lAfix.php:30
+msgid "Mar."
+msgstr ""
+
+#: templates/lAfix.php:31
+msgid "Apr."
+msgstr ""
+
+#: templates/lAfix.php:32
+msgid "May."
+msgstr ""
+
+#: templates/lAfix.php:33
+msgid "Jun."
+msgstr ""
+
+#: templates/lAfix.php:34
+msgid "Jul."
+msgstr ""
+
+#: templates/lAfix.php:35
+msgid "Aug."
+msgstr ""
+
+#: templates/lAfix.php:36
+msgid "Sep."
+msgstr ""
+
+#: templates/lAfix.php:37
+msgid "Oct."
+msgstr ""
+
+#: templates/lAfix.php:38
+msgid "Nov."
+msgstr ""
+
+#: templates/lAfix.php:39
+msgid "Dec."
+msgstr ""
+
#: templates/part.choosecalendar.php:1
msgid "Choose active calendars"
msgstr "Escolha calendários ativos"
#: templates/part.choosecalendar.php:15
msgid "New Calendar"
-msgstr ""
+msgstr "Novo Calendário"
#: templates/part.choosecalendar.php:20
#: templates/part.choosecalendar.rowfields.php:4
msgid "CalDav Link"
-msgstr ""
+msgstr "Link para CalDav"
#: templates/part.choosecalendar.rowfields.php:4
msgid "Download"
msgstr "Baixar"
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.eventinfo.php:64
msgid "Edit"
msgstr "Editar"
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.editevent.php:8
+#: templates/part.editevent.php:9
msgid "Delete"
-msgstr ""
+msgstr "Excluir"
#: templates/part.editcalendar.php:9
msgid "New calendar"
-msgstr ""
+msgstr "Novo calendário"
#: templates/part.editcalendar.php:9
msgid "Edit calendar"
@@ -376,90 +457,181 @@ msgstr "Mostrar Nome"
msgid "Active"
msgstr "Ativo"
-#: templates/part.editcalendar.php:29 templates/part.eventform.php:88
-#: templates/part.eventinfo.php:58
-msgid "Description"
-msgstr "Descrição"
-
-#: templates/part.editcalendar.php:35
+#: templates/part.editcalendar.php:29
msgid "Calendar color"
msgstr "Cor do Calendário"
-#: templates/part.editcalendar.php:41
+#: templates/part.editcalendar.php:42
msgid "Save"
-msgstr ""
+msgstr "Salvar"
-#: templates/part.editcalendar.php:41 templates/part.editevent.php:7
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
#: templates/part.newevent.php:6
msgid "Submit"
msgstr "Submeter"
-#: templates/part.editcalendar.php:42
+#: templates/part.editcalendar.php:43
msgid "Cancel"
-msgstr ""
+msgstr "Cancelar"
-#: templates/part.editevent.php:1 templates/part.eventinfo.php:1
+#: templates/part.editevent.php:1
msgid "Edit an event"
msgstr "Editar um evento"
-#: templates/part.eventform.php:3 templates/part.eventinfo.php:4
-msgid "Title"
-msgstr "Título"
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr "Exportar"
#: templates/part.eventform.php:5
msgid "Title of the Event"
msgstr "Título do evento"
-#: templates/part.eventform.php:9 templates/part.eventinfo.php:9
-msgid "Location"
-msgstr "Local"
-
#: templates/part.eventform.php:11
-msgid "Location of the Event"
-msgstr "Local do evento"
-
-#: templates/part.eventform.php:17 templates/part.eventinfo.php:16
msgid "Category"
msgstr "Categoria"
-#: templates/part.eventform.php:19
+#: templates/part.eventform.php:13
msgid "Select category"
-msgstr ""
+msgstr "Selecionar categoria"
-#: templates/part.eventform.php:45 templates/part.eventinfo.php:28
+#: templates/part.eventform.php:37
msgid "All Day Event"
msgstr "Evento de dia inteiro"
-#: templates/part.eventform.php:49 templates/part.eventinfo.php:31
+#: templates/part.eventform.php:41
msgid "From"
msgstr "De"
-#: templates/part.eventform.php:57 templates/part.eventinfo.php:38
+#: templates/part.eventform.php:49
msgid "To"
msgstr "Para"
-#: templates/part.eventform.php:65 templates/part.eventinfo.php:44
+#: templates/part.eventform.php:57
+msgid "Advanced options"
+msgstr "Opções avançadas"
+
+#: templates/part.eventform.php:61
msgid "Repeat"
msgstr "Repetir"
-#: templates/part.eventform.php:81 templates/part.eventinfo.php:51
-msgid "Attendees"
-msgstr "Participantes"
+#: templates/part.eventform.php:68
+msgid "Advanced"
+msgstr ""
+
+#: templates/part.eventform.php:112
+msgid "Select weekdays"
+msgstr ""
+
+#: templates/part.eventform.php:125 templates/part.eventform.php:138
+msgid "Select days"
+msgstr ""
+
+#: templates/part.eventform.php:130
+msgid "and the events day of year."
+msgstr ""
+
+#: templates/part.eventform.php:143
+msgid "and the events day of month."
+msgstr ""
+
+#: templates/part.eventform.php:151
+msgid "Select months"
+msgstr ""
+
+#: templates/part.eventform.php:164
+msgid "Select weeks"
+msgstr ""
+
+#: templates/part.eventform.php:169
+msgid "and the events week of year."
+msgstr ""
+
+#: templates/part.eventform.php:175
+msgid "Interval"
+msgstr ""
+
+#: templates/part.eventform.php:181
+msgid "End"
+msgstr ""
+
+#: templates/part.eventform.php:193
+msgid "occurrences"
+msgstr ""
+
+#: templates/part.eventform.php:208
+msgid "Location"
+msgstr "Local"
+
+#: templates/part.eventform.php:210
+msgid "Location of the Event"
+msgstr "Local do evento"
+
+#: templates/part.eventform.php:216
+msgid "Description"
+msgstr "Descrição"
-#: templates/part.eventform.php:89
+#: templates/part.eventform.php:218
msgid "Description of the Event"
msgstr "Descrição do Evento"
-#: templates/part.eventinfo.php:63
-msgid "Close"
-msgstr "Fechar"
+#: templates/part.import.php:1
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the calendar"
+msgstr "Por favor, escolha o calendário"
+
+#: templates/part.import.php:10
+msgid "create a new calendar"
+msgstr ""
+
+#: templates/part.import.php:15
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import"
+msgstr "Importar"
+
+#: templates/part.import.php:20
+msgid "Importing calendar"
+msgstr ""
+
+#: templates/part.import.php:23
+msgid "Calendar imported successfully"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Close Dialog"
+msgstr ""
#: templates/part.newevent.php:1
msgid "Create a new event"
msgstr "Criar um novo evento"
-#: templates/settings.php:11
+#: templates/settings.php:13
msgid "Timezone"
msgstr "Fuso horário"
+#: templates/settings.php:30
+msgid "Check always for changes of the timezone"
+msgstr ""
+
+#: templates/settings.php:32
+msgid "Timeformat"
+msgstr "Formato da Hora"
+
+#: templates/settings.php:34
+msgid "24h"
+msgstr "24h"
+
+#: templates/settings.php:35
+msgid "12h"
+msgstr "12h"
+
+#: templates/settings.php:41
+msgid "Calendar CalDAV syncing address:"
+msgstr "Sincronização de endereço do calendário CalDAV :"
+
diff --git a/l10n/pt_BR/contacts.po b/l10n/pt_BR/contacts.po
index 4b44d17178d..6872b053b84 100644
--- a/l10n/pt_BR/contacts.po
+++ b/l10n/pt_BR/contacts.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Van Der Fran <transifex@vanderland.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 20:10+0200\n"
-"PO-Revision-Date: 2011-09-23 18:10+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Portuguese (Brazilian) (http://www.transifex.net/projects/p/owncloud/team/pt_BR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,164 +18,273 @@ msgstr ""
"Language: pt_BR\n"
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
-#: ajax/addcard.php:31 ajax/addproperty.php:31 ajax/deletebook.php:32
-#: ajax/deletecard.php:32 ajax/deleteproperty.php:34 ajax/getdetails.php:32
-#: ajax/setproperty.php:32 ajax/showaddcard.php:30 ajax/showaddproperty.php:31
-#: ajax/showsetproperty.php:32 photo.php:32
-msgid "You need to log in."
+#: ajax/activation.php:17 ajax/updateaddressbook.php:26
+msgid "Error (de)activating addressbook."
msgstr ""
-#: ajax/addcard.php:37
-msgid "This is not your addressbook."
+#: ajax/addcard.php:79
+msgid "There was an error adding the contact."
msgstr ""
-#: ajax/addproperty.php:37 ajax/deletecard.php:39 ajax/deleteproperty.php:41
-#: ajax/getdetails.php:39 ajax/setproperty.php:38 ajax/showaddproperty.php:37
-#: ajax/showsetproperty.php:38 photo.php:39
-msgid "Contact could not be found."
+#: ajax/addproperty.php:39
+msgid "Cannot add empty property."
msgstr ""
-#: ajax/addproperty.php:43 ajax/deletebook.php:38 ajax/deletecard.php:45
-#: ajax/deleteproperty.php:47 ajax/getdetails.php:45 ajax/setproperty.php:44
-#: ajax/showaddproperty.php:43 ajax/showsetproperty.php:44 photo.php:45
-msgid "This is not your contact."
+#: ajax/addproperty.php:51
+msgid "At least one of the address fields has to be filled out."
msgstr ""
-#: ajax/addproperty.php:50 ajax/deleteproperty.php:54 ajax/getdetails.php:52
-#: ajax/setproperty.php:51 ajax/showsetproperty.php:51
-msgid "vCard could not be read."
+#: ajax/addproperty.php:77
+msgid "Error adding contact property."
msgstr ""
-#: ajax/deleteproperty.php:65 ajax/setproperty.php:62
-#: ajax/showsetproperty.php:62
-msgid "Information about vCard is incorrect. Please reload the page."
+#: ajax/createaddressbook.php:20
+msgid "Error adding addressbook."
msgstr ""
-#: photo.php:53
-msgid "This card is not RFC compatible."
+#: ajax/createaddressbook.php:26
+msgid "Error activating addressbook."
msgstr ""
-#: photo.php:90
-msgid "This card does not contain a photo."
+#: ajax/deleteproperty.php:40
+msgid "Error deleting contact property."
msgstr ""
-#: templates/index.php:8
-msgid "Add Contact"
+#: ajax/setproperty.php:79
+msgid "Error updating contact property."
msgstr ""
-#: templates/part.addcardform.php:5
-msgid "Group"
+#: ajax/updateaddressbook.php:20
+msgid "Error updating addressbook."
msgstr ""
-#: templates/part.addcardform.php:12 templates/part.property.php:3
-msgid "Name"
+#: appinfo/app.php:21 templates/settings.php:3
+msgid "Contacts"
msgstr ""
-#: templates/part.addcardform.php:14
-msgid "Create Contact"
-msgstr ""
+#: lib/app.php:42
+msgid "This is not your addressbook."
+msgstr "Este não é o seu agenda de endereços."
-#: templates/part.addpropertyform.php:4 templates/part.property.php:40
+#: lib/app.php:51 photo.php:34
+msgid "Contact could not be found."
+msgstr "Contato não pôde ser encontrado."
+
+#: lib/app.php:79
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "Informações sobre vCard é incorreta. Por favor, recarregue a página."
+
+#: lib/app.php:91 templates/part.addcardform.php:54
+#: templates/part.property.php:45 templates/part.setpropertyform.php:7
msgid "Address"
-msgstr ""
+msgstr "Endereço"
-#: templates/part.addpropertyform.php:5
+#: lib/app.php:92 templates/part.addcardform.php:43
msgid "Telephone"
-msgstr ""
+msgstr "Telefone"
-#: templates/part.addpropertyform.php:6 templates/part.property.php:22
+#: lib/app.php:93 templates/part.addcardform.php:37
+#: templates/part.property.php:16 templates/part.setpropertyform.php:51
msgid "Email"
-msgstr ""
+msgstr "E-mail"
-#: templates/part.addpropertyform.php:7 templates/part.property.php:15
+#: lib/app.php:94 templates/part.addcardform.php:27
+#: templates/part.property.php:9 templates/part.setpropertyform.php:54
msgid "Organization"
-msgstr ""
+msgstr "Organização"
-#: templates/part.addpropertyform.php:17 templates/part.addpropertyform.php:32
+#: lib/app.php:106 lib/app.php:113
msgid "Work"
-msgstr ""
+msgstr "Trabalho"
-#: templates/part.addpropertyform.php:18 templates/part.addpropertyform.php:30
+#: lib/app.php:107 lib/app.php:111
msgid "Home"
+msgstr "Home"
+
+#: lib/app.php:112
+msgid "Mobile"
+msgstr "Móvel"
+
+#: lib/app.php:114
+msgid "Text"
+msgstr "Texto"
+
+#: lib/app.php:115
+msgid "Voice"
+msgstr "Voz"
+
+#: lib/app.php:116
+msgid "Fax"
+msgstr "Fax"
+
+#: lib/app.php:117
+msgid "Video"
+msgstr "Vídeo"
+
+#: lib/app.php:118
+msgid "Pager"
+msgstr "Pager"
+
+#: lib/search.php:22
+msgid "Contact"
msgstr ""
-#: templates/part.addpropertyform.php:20 templates/part.property.php:48
-#: templates/part.setpropertyform.php:5
-msgid "PO Box"
+#: photo.php:40
+msgid "This is not your contact."
+msgstr "Este não é o seu contato."
+
+#: photo.php:48
+msgid "This card is not RFC compatible."
+msgstr "Este cartão não é compatível com RFC."
+
+#: photo.php:85
+msgid "This card does not contain a photo."
+msgstr "Este cartão não contém uma foto."
+
+#: templates/index.php:6
+msgid "Add Contact"
+msgstr "Adicionar Contato"
+
+#: templates/index.php:7
+msgid "Addressbooks"
msgstr ""
-#: templates/part.addpropertyform.php:21 templates/part.property.php:51
-#: templates/part.setpropertyform.php:6
-msgid "Extended"
+#: templates/part.addcardform.php:8
+msgid "Addressbook"
msgstr ""
-#: templates/part.addpropertyform.php:22 templates/part.property.php:54
-#: templates/part.setpropertyform.php:7
-msgid "Street"
+#: templates/part.addcardform.php:21
+msgid "Name"
+msgstr "Nome"
+
+#: templates/part.addcardform.php:57 templates/part.details.php:43
+#: templates/part.details.php:79 templates/part.setpropertyform.php:10
+#: templates/part.setpropertyform.php:47
+msgid "Type"
msgstr ""
-#: templates/part.addpropertyform.php:23 templates/part.property.php:57
-#: templates/part.setpropertyform.php:8
+#: templates/part.addcardform.php:65 templates/part.details.php:49
+#: templates/part.setpropertyform.php:16
+msgid "PO Box"
+msgstr "Caixa Postal"
+
+#: templates/part.addcardform.php:72 templates/part.details.php:53
+#: templates/part.setpropertyform.php:20
+msgid "Extended"
+msgstr "Estendido"
+
+#: templates/part.addcardform.php:78 templates/part.details.php:57
+#: templates/part.setpropertyform.php:24
+msgid "Street"
+msgstr "Rua"
+
+#: templates/part.addcardform.php:84 templates/part.details.php:61
+#: templates/part.setpropertyform.php:28
msgid "City"
-msgstr ""
+msgstr "Cidade"
-#: templates/part.addpropertyform.php:24 templates/part.property.php:60
-#: templates/part.setpropertyform.php:9
+#: templates/part.addcardform.php:90 templates/part.details.php:65
+#: templates/part.setpropertyform.php:32
msgid "Region"
-msgstr ""
+msgstr "Região"
-#: templates/part.addpropertyform.php:25 templates/part.property.php:63
-#: templates/part.setpropertyform.php:10
+#: templates/part.addcardform.php:96 templates/part.details.php:69
+#: templates/part.setpropertyform.php:36
msgid "Zipcode"
-msgstr ""
+msgstr "CEP"
-#: templates/part.addpropertyform.php:26 templates/part.property.php:66
-#: templates/part.setpropertyform.php:11
+#: templates/part.addcardform.php:102 templates/part.details.php:73
+#: templates/part.setpropertyform.php:40
msgid "Country"
+msgstr "País"
+
+#: templates/part.addcardform.php:109
+msgid "Create Contact"
+msgstr "Criar Contato"
+
+#: templates/part.chooseaddressbook.php:1
+msgid "Choose active Address Books"
msgstr ""
-#: templates/part.addpropertyform.php:31
-msgid "Mobile"
+#: templates/part.chooseaddressbook.php:16
+msgid "New Address Book"
msgstr ""
-#: templates/part.addpropertyform.php:33
-msgid "Text"
+#: templates/part.chooseaddressbook.php:21
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "CardDav Link"
msgstr ""
-#: templates/part.addpropertyform.php:34
-msgid "Voice"
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Download"
msgstr ""
-#: templates/part.addpropertyform.php:35
-msgid "Fax"
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Edit"
+msgstr "Editar"
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Delete"
+msgstr "Excluir"
+
+#: templates/part.details.php:3
+msgid "Download contact"
msgstr ""
-#: templates/part.addpropertyform.php:36
-msgid "Video"
+#: templates/part.details.php:4
+msgid "Delete contact"
msgstr ""
-#: templates/part.addpropertyform.php:37
-msgid "Pager"
+#: templates/part.details.php:34
+msgid "Add"
msgstr ""
-#: templates/part.details.php:33
-msgid "Delete"
+#: templates/part.editaddressbook.php:9
+msgid "New Addressbook"
msgstr ""
-#: templates/part.details.php:34
-msgid "Add Property"
+#: templates/part.editaddressbook.php:9
+msgid "Edit Addressbook"
msgstr ""
-#: templates/part.property.php:9
+#: templates/part.editaddressbook.php:12
+msgid "Displayname"
+msgstr ""
+
+#: templates/part.editaddressbook.php:23
+msgid "Active"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Save"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Submit"
+msgstr ""
+
+#: templates/part.editaddressbook.php:30
+msgid "Cancel"
+msgstr ""
+
+#: templates/part.property.php:3
msgid "Birthday"
+msgstr "Aniversário"
+
+#: templates/part.property.php:23
+msgid "Preferred"
msgstr ""
-#: templates/part.property.php:29
+#: templates/part.property.php:23 templates/part.setpropertyform.php:45
msgid "Phone"
+msgstr "Telefone"
+
+#: templates/part.setpropertyform.php:57
+msgid "Update"
msgstr ""
-#: templates/part.setpropertyform.php:17
-msgid "Edit"
+#: templates/settings.php:4
+msgid "CardDAV syncing address:"
msgstr ""
diff --git a/l10n/pt_BR/core.po b/l10n/pt_BR/core.po
index 4fbf39e1fff..c1bac3b5b54 100644
--- a/l10n/pt_BR/core.po
+++ b/l10n/pt_BR/core.po
@@ -9,9 +9,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 18:17+0200\n"
-"PO-Revision-Date: 2011-09-06 12:04+0000\n"
-"Last-Translator: vanderland <transifex@vanderland.com>\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Portuguese (Brazilian) (http://www.transifex.net/projects/p/owncloud/team/pt_BR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,6 +19,51 @@ msgstr ""
"Language: pt_BR\n"
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
+#: lostpassword/index.php:24
+msgid "Owncloud password reset"
+msgstr ""
+
+#: lostpassword/templates/email.php:1
+msgid "Use the following link to reset your password: {link}"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr "Você receberá um link para redefinir sua senha via e-mail."
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Requested"
+msgstr "Solicitado"
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr "Falha ao fazer o login!"
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:22
+#: templates/login.php:8
+msgid "Username"
+msgstr "Nome de Usuário"
+
+#: lostpassword/templates/lostpassword.php:14
+msgid "Request reset"
+msgstr "Pedido de reposição"
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr "Sua senha foi mudada"
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr "Nova senha"
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr "Mudar senha"
+
#: strings.php:5
msgid "Personal"
msgstr "Pessoal"
@@ -47,54 +92,50 @@ msgstr "Cloud não encontrado"
msgid "Create an <strong>admin account</strong>"
msgstr "Criar uma <strong>conta</strong> de <strong>administrador</strong>"
-#: templates/installation.php:21
-msgid "Username"
-msgstr "Nome de Usuário"
-
-#: templates/installation.php:22
+#: templates/installation.php:26 templates/login.php:12
msgid "Password"
msgstr "Senha"
-#: templates/installation.php:27
+#: templates/installation.php:32
+msgid "Advanced"
+msgstr "Avançado"
+
+#: templates/installation.php:34
+msgid "Data folder"
+msgstr "Pasta de dados"
+
+#: templates/installation.php:41
msgid "Configure the database"
msgstr "Configurar o banco de dados"
-#: templates/installation.php:32 templates/installation.php:43
-#: templates/installation.php:53
+#: templates/installation.php:46 templates/installation.php:57
+#: templates/installation.php:67
msgid "will be used"
msgstr "será usado"
-#: templates/installation.php:64
+#: templates/installation.php:79
msgid "Database user"
msgstr "Usuário de banco de dados"
-#: templates/installation.php:65
+#: templates/installation.php:83
msgid "Database password"
msgstr "Senha do banco de dados"
-#: templates/installation.php:66
+#: templates/installation.php:87
msgid "Database name"
msgstr "Nome do banco de dados"
-#: templates/installation.php:72
-msgid "Advanced"
-msgstr "Avançado"
-
-#: templates/installation.php:75
+#: templates/installation.php:93
msgid "Database host"
msgstr "Banco de dados do host"
-#: templates/installation.php:76
-msgid "Data folder"
-msgstr "Pasta de dados"
-
-#: templates/installation.php:79
+#: templates/installation.php:98
msgid "Finish setup"
msgstr "Concluir configuração"
#: templates/layout.guest.php:35
-msgid "gives you freedom and control over your own data"
-msgstr "proporciona liberdade e controle sobre seus próprios dados"
+msgid "web services under your control"
+msgstr ""
#: templates/layout.user.php:34
msgid "Log out"
@@ -104,38 +145,22 @@ msgstr "Sair"
msgid "Settings"
msgstr "Configurações"
-#: templates/login.php:4
+#: templates/login.php:5
msgid "Lost your password?"
msgstr "Esqueçeu sua senha?"
-#: templates/login.php:9 templates/login.php:13
+#: templates/login.php:15
msgid "remember"
msgstr "lembrete"
+#: templates/login.php:16
+msgid "Log in"
+msgstr ""
+
#: templates/logout.php:1
msgid "You are logged out."
msgstr "Você está desconectado."
-#: templates/lostpassword.php:3
-msgid "You will receive a link to reset your password via Email."
-msgstr "Você receberá um link para redefinir sua senha via e-mail."
-
-#: templates/lostpassword.php:5
-msgid "Requested"
-msgstr "Solicitado"
-
-#: templates/lostpassword.php:8
-msgid "Login failed!"
-msgstr "Login sem sucesso"
-
-#: templates/lostpassword.php:10
-msgid "Username or Email"
-msgstr "Nome de usuário ou e-mail"
-
-#: templates/lostpassword.php:11
-msgid "Request reset"
-msgstr "Pedido de troca"
-
#: templates/part.pagenavi.php:3
msgid "prev"
msgstr "anterior"
@@ -144,16 +169,4 @@ msgstr "anterior"
msgid "next"
msgstr "próximo"
-#: templates/resetpassword.php:4
-msgid "Your password was reset"
-msgstr "Sua senha foi trocada"
-
-#: templates/resetpassword.php:6
-msgid "New password"
-msgstr "Nova senha"
-
-#: templates/resetpassword.php:7
-msgid "Reset password"
-msgstr "Toca de senha"
-
diff --git a/l10n/pt_BR/files.po b/l10n/pt_BR/files.po
index e4fba97298b..2d41a6af2b3 100644
--- a/l10n/pt_BR/files.po
+++ b/l10n/pt_BR/files.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Portuguese (Brazilian) (http://www.transifex.net/projects/p/owncloud/team/pt_BR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,33 +18,37 @@ msgstr ""
"Language: pt_BR\n"
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
-#: ajax/upload.php:24
+#: ajax/upload.php:19
msgid "There is no error, the file uploaded with success"
-msgstr ""
+msgstr "Não houve nenhum erro, o arquivo foi transferido com sucesso"
-#: ajax/upload.php:25
+#: ajax/upload.php:20
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr ""
+"O tamanho do arquivo excede o limed especifiicado em upload_max_filesize no "
+"php.ini"
-#: ajax/upload.php:26
+#: ajax/upload.php:21
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
+"O arquivo carregado excede o MAX_FILE_SIZE que foi especificado no "
+"formulário HTML"
-#: ajax/upload.php:27
+#: ajax/upload.php:22
msgid "The uploaded file was only partially uploaded"
-msgstr ""
+msgstr "O arquivo foi transferido parcialmente"
-#: ajax/upload.php:28
+#: ajax/upload.php:23
msgid "No file was uploaded"
-msgstr ""
+msgstr "Nenhum arquivo foi transferido"
-#: ajax/upload.php:29
+#: ajax/upload.php:24
msgid "Missing a temporary folder"
-msgstr ""
+msgstr "Pasta temporária não encontrada"
-#: appinfo/app.php:7
+#: appinfo/app.php:8
msgid "Files"
msgstr "Arquivos"
@@ -52,43 +56,55 @@ msgstr "Arquivos"
msgid "Maximum upload size"
msgstr "Tamanho máximo para carregar"
+#: templates/index.php:7
+msgid "New"
+msgstr ""
+
#: templates/index.php:10
+msgid "Text file"
+msgstr ""
+
+#: templates/index.php:11
+msgid "Folder"
+msgstr ""
+
+#: templates/index.php:12
+msgid "From the web"
+msgstr ""
+
+#: templates/index.php:22
msgid "Upload"
msgstr "Carregar"
-#: templates/index.php:17
-msgid "New Folder"
-msgstr "Nova Pasta"
-
-#: templates/index.php:31
+#: templates/index.php:35
msgid "Nothing in here. Upload something!"
msgstr "Nada aqui.Carregar alguma coisa!"
-#: templates/index.php:39
+#: templates/index.php:43
msgid "Name"
msgstr "Nome"
-#: templates/index.php:41
+#: templates/index.php:45
msgid "Download"
msgstr "Baixar"
-#: templates/index.php:45
+#: templates/index.php:49
msgid "Size"
msgstr "Tamanho"
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Modified"
msgstr "Modificado"
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Delete"
msgstr "Excluir"
-#: templates/index.php:54
+#: templates/index.php:58
msgid "Upload too large"
msgstr "Arquivo muito grande"
-#: templates/index.php:56
+#: templates/index.php:60
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
diff --git a/l10n/pt_BR/gallery.po b/l10n/pt_BR/gallery.po
new file mode 100644
index 00000000000..0d4da064608
--- /dev/null
+++ b/l10n/pt_BR/gallery.po
@@ -0,0 +1,32 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:48+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Portuguese (Brazilian) (http://www.transifex.net/projects/p/owncloud/team/pt_BR/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pt_BR\n"
+"Plural-Forms: nplurals=2; plural=(n > 1)\n"
+
+#: appinfo/app.php:41
+msgid "Gallery"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Rescan"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+
diff --git a/l10n/pt_BR/media.po b/l10n/pt_BR/media.po
index 86ebcc103ff..30318ebf843 100644
--- a/l10n/pt_BR/media.po
+++ b/l10n/pt_BR/media.po
@@ -2,15 +2,16 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
-# Van Der Fran <transifex@vanderland.com>, 2011.
+# Translators:
# <duda.nogueira@metasys.com.br>, 2011.
+# Van Der Fran <transifex@vanderland.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
-"Report-Msgid-Bugs-To: http://bugs.kde.org/buglist.cgi?product=owncloud\n"
-"POT-Creation-Date: 2011-08-28 01:11+0200\n"
-"PO-Revision-Date: 2011-08-24 12:52+0000\n"
-"Last-Translator: dudanogueira <duda.nogueira@metasys.com.br>\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Portuguese (Brazilian) (http://www.transifex.net/projects/p/owncloud/team/pt_BR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,15 +19,15 @@ msgstr ""
"Language: pt_BR\n"
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
-#: appinfo/app.php:31
+#: appinfo/app.php:32
msgid "Music"
msgstr "Música"
-#: templates/music.php:3
+#: templates/music.php:3 templates/player.php:13
msgid "Play"
msgstr "Tocar"
-#: templates/music.php:4 templates/music.php:30
+#: templates/music.php:4 templates/music.php:26 templates/player.php:14
msgid "Pause"
msgstr "Pausa"
@@ -34,7 +35,7 @@ msgstr "Pausa"
msgid "Previous"
msgstr "Anterior"
-#: templates/music.php:6
+#: templates/music.php:6 templates/player.php:15
msgid "Next"
msgstr "Próximo"
@@ -46,11 +47,7 @@ msgstr "Mudo"
msgid "Unmute"
msgstr "Não Mudo"
-#: templates/music.php:28
-msgid "Songs scanned"
-msgstr "Músicas encontradas"
-
-#: templates/music.php:29
+#: templates/music.php:25
msgid "Rescan Collection"
msgstr "Atualizar a Coleção"
diff --git a/l10n/pt_BR/settings.po b/l10n/pt_BR/settings.po
index 987459779e9..ab2a8825dd0 100644
--- a/l10n/pt_BR/settings.po
+++ b/l10n/pt_BR/settings.po
@@ -9,9 +9,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 18:17+0200\n"
-"PO-Revision-Date: 2011-09-06 12:01+0000\n"
-"Last-Translator: vanderland <transifex@vanderland.com>\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Portuguese (Brazilian) (http://www.transifex.net/projects/p/owncloud/team/pt_BR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,22 +19,26 @@ msgstr ""
"Language: pt_BR\n"
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
-#: ajax/openid.php:13 ajax/setlanguage.php:13
-msgid "Authentication error"
-msgstr "Erro de autenticação"
-
-#: ajax/openid.php:21
-msgid "OpenID Changed"
-msgstr "Mudou OpenID"
+#: ajax/lostpassword.php:14
+msgid "email Changed"
+msgstr ""
-#: ajax/openid.php:23 ajax/setlanguage.php:23
+#: ajax/lostpassword.php:16 ajax/openid.php:17 ajax/setlanguage.php:16
msgid "Invalid request"
msgstr "Pedido inválido"
-#: ajax/setlanguage.php:21
+#: ajax/openid.php:15
+msgid "OpenID Changed"
+msgstr "Mudou OpenID"
+
+#: ajax/setlanguage.php:14
msgid "Language changed"
msgstr "Mudou Idioma"
+#: templates/admin.php:13
+msgid "Log level"
+msgstr ""
+
#: templates/apps.php:8
msgid "Add your application"
msgstr "Adicionar o seu aplicativo"
@@ -55,15 +59,15 @@ msgstr "por"
msgid "Ask a question"
msgstr "Faça uma pergunta"
-#: templates/help.php:17
+#: templates/help.php:20
msgid "Problems connecting to help database."
msgstr "Problemas ao conectar na base de dados."
-#: templates/help.php:18
+#: templates/help.php:21
msgid "Go there manually."
msgstr "Ir manualmente."
-#: templates/help.php:26
+#: templates/help.php:29
msgid "Answer"
msgstr "Resposta"
@@ -99,37 +103,53 @@ msgstr "mostrar"
msgid "Change password"
msgstr "Alterar senha"
-#: templates/personal.php:24 templates/personal.php:25
+#: templates/personal.php:24
+msgid "Email"
+msgstr ""
+
+#: templates/personal.php:25
+msgid "Your email address"
+msgstr ""
+
+#: templates/personal.php:26
+msgid "Fill in an email address to enable password recovery"
+msgstr ""
+
+#: templates/personal.php:32 templates/personal.php:33
msgid "Language"
msgstr "Idioma"
-#: templates/personal.php:30
-msgid "Help translating"
-msgstr "Ajuda na Tradução"
+#: templates/personal.php:38
+msgid "Help translate"
+msgstr ""
-#: templates/personal.php:37
+#: templates/personal.php:45
msgid "use this address to connect to your ownCloud in your file manager"
msgstr ""
"use este endereço para se conectar ao seu ownCloud no seu gerenciador de "
"arquvos"
-#: templates/users.php:16
+#: templates/users.php:15 templates/users.php:30
msgid "Name"
msgstr "Nome"
-#: templates/users.php:17
+#: templates/users.php:16 templates/users.php:31
msgid "Password"
msgstr "Senha"
-#: templates/users.php:18 templates/users.php:36
+#: templates/users.php:17 templates/users.php:32 templates/users.php:46
msgid "Groups"
msgstr "Grupos"
-#: templates/users.php:24
+#: templates/users.php:23
msgid "Create"
msgstr "Criar"
-#: templates/users.php:48
+#: templates/users.php:33
+msgid "Quota"
+msgstr ""
+
+#: templates/users.php:58
msgid "Delete"
msgstr "Apagar"
diff --git a/l10n/pt_PT/calendar.po b/l10n/pt_PT/calendar.po
index b3ee449d891..ef2e86fa585 100644
--- a/l10n/pt_PT/calendar.po
+++ b/l10n/pt_PT/calendar.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <helder.meneses@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Portuguese (Portugal) (http://www.transifex.net/projects/p/owncloud/team/pt_PT/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,319 +18,401 @@ msgstr ""
"Language: pt_PT\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/createcalendar.php:18 ajax/settimezone.php:19
-#: ajax/updatecalendar.php:18
-msgid "Authentication error"
+#: ajax/guesstimezone.php:42
+msgid "New Timezone:"
msgstr ""
-#: ajax/editeventform.php:25
-msgid "Wrong calendar"
-msgstr ""
-
-#: ajax/settimezone.php:27
+#: ajax/settimezone.php:22
msgid "Timezone changed"
msgstr ""
-#: ajax/settimezone.php:29
+#: ajax/settimezone.php:24
msgid "Invalid request"
msgstr ""
-#: appinfo/app.php:19 templates/part.eventform.php:27
-#: templates/part.eventinfo.php:18
+#: appinfo/app.php:20 templates/calendar.php:13
+#: templates/part.eventform.php:20
msgid "Calendar"
+msgstr "Calendário"
+
+#: lib/app.php:19
+msgid "Wrong calendar"
msgstr ""
-#: lib/object.php:292
+#: lib/app.php:60 lib/object.php:332
msgid "Birthday"
msgstr ""
-#: lib/object.php:293
+#: lib/app.php:61 lib/object.php:333
msgid "Business"
msgstr ""
-#: lib/object.php:294
+#: lib/app.php:62 lib/object.php:334
msgid "Call"
msgstr ""
-#: lib/object.php:295
+#: lib/app.php:63 lib/object.php:335
msgid "Clients"
msgstr ""
-#: lib/object.php:296
+#: lib/app.php:64 lib/object.php:336
msgid "Deliverer"
msgstr ""
-#: lib/object.php:297
+#: lib/app.php:65 lib/object.php:337
msgid "Holidays"
msgstr ""
-#: lib/object.php:298
+#: lib/app.php:66 lib/object.php:338
msgid "Ideas"
msgstr ""
-#: lib/object.php:299
+#: lib/app.php:67 lib/object.php:339
msgid "Journey"
msgstr ""
-#: lib/object.php:300
+#: lib/app.php:68 lib/object.php:340
msgid "Jubilee"
msgstr ""
-#: lib/object.php:301
+#: lib/app.php:69 lib/object.php:341
msgid "Meeting"
msgstr ""
-#: lib/object.php:302
+#: lib/app.php:70 lib/object.php:342
msgid "Other"
msgstr ""
-#: lib/object.php:303
+#: lib/app.php:71 lib/object.php:343
msgid "Personal"
msgstr ""
-#: lib/object.php:304
+#: lib/app.php:72 lib/object.php:344
msgid "Projects"
msgstr ""
-#: lib/object.php:305
+#: lib/app.php:73 lib/object.php:345
msgid "Questions"
msgstr ""
-#: lib/object.php:306
+#: lib/app.php:74 lib/object.php:346
msgid "Work"
msgstr ""
-#: lib/object.php:313
+#: lib/object.php:353
msgid "Does not repeat"
msgstr ""
-#: lib/object.php:314
+#: lib/object.php:354
msgid "Daily"
msgstr ""
-#: lib/object.php:315
+#: lib/object.php:355
msgid "Weekly"
msgstr ""
-#: lib/object.php:316
+#: lib/object.php:356
msgid "Every Weekday"
msgstr ""
-#: lib/object.php:317
+#: lib/object.php:357
msgid "Bi-Weekly"
msgstr ""
-#: lib/object.php:318
+#: lib/object.php:358
msgid "Monthly"
msgstr ""
-#: lib/object.php:319
+#: lib/object.php:359
msgid "Yearly"
msgstr ""
-#: lib/object.php:337
-msgid "Not an array"
+#: lib/object.php:366
+msgid "never"
msgstr ""
-#: templates/calendar.php:3
-msgid "All day"
+#: lib/object.php:367
+msgid "by occurrences"
msgstr ""
-#: templates/calendar.php:32
-msgid "Sunday"
+#: lib/object.php:368
+msgid "by date"
+msgstr ""
+
+#: lib/object.php:375
+msgid "by monthday"
+msgstr ""
+
+#: lib/object.php:376
+msgid "by weekday"
msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:383 templates/lAfix.php:3
msgid "Monday"
msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:384 templates/lAfix.php:4
msgid "Tuesday"
msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:385 templates/lAfix.php:5
msgid "Wednesday"
msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:386 templates/lAfix.php:6
msgid "Thursday"
msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:387 templates/lAfix.php:7
msgid "Friday"
msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:388 templates/lAfix.php:8
msgid "Saturday"
msgstr ""
-#: templates/calendar.php:33
-msgid "Sun."
+#: lib/object.php:389 templates/lAfix.php:2
+msgid "Sunday"
msgstr ""
-#: templates/calendar.php:33
-msgid "Mon."
+#: lib/object.php:396
+msgid "events week of month"
msgstr ""
-#: templates/calendar.php:33
-msgid "Tue."
+#: lib/object.php:397
+msgid "first"
msgstr ""
-#: templates/calendar.php:33
-msgid "Wed."
+#: lib/object.php:398
+msgid "second"
msgstr ""
-#: templates/calendar.php:33
-msgid "Thu."
+#: lib/object.php:399
+msgid "third"
msgstr ""
-#: templates/calendar.php:33
-msgid "Fri."
+#: lib/object.php:400
+msgid "fourth"
msgstr ""
-#: templates/calendar.php:33
-msgid "Sat."
+#: lib/object.php:401
+msgid "fifth"
+msgstr ""
+
+#: lib/object.php:402
+msgid "last"
msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:424 templates/lAfix.php:16
msgid "January"
msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:425 templates/lAfix.php:17
msgid "February"
msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:426 templates/lAfix.php:18
msgid "March"
msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:427 templates/lAfix.php:19
msgid "April"
msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:428 templates/lAfix.php:20
msgid "May"
msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:429 templates/lAfix.php:21
msgid "June"
msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:430 templates/lAfix.php:22
msgid "July"
msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:431 templates/lAfix.php:23
msgid "August"
msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:432 templates/lAfix.php:24
msgid "September"
msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:433 templates/lAfix.php:25
msgid "October"
msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:434 templates/lAfix.php:26
msgid "November"
msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:435 templates/lAfix.php:27
msgid "December"
msgstr ""
-#: templates/calendar.php:35
-msgid "Jan."
+#: lib/object.php:441
+msgid "by events date"
msgstr ""
-#: templates/calendar.php:35
-msgid "Feb."
+#: lib/object.php:442
+msgid "by yearday(s)"
msgstr ""
-#: templates/calendar.php:35
-msgid "Mar."
+#: lib/object.php:443
+msgid "by weeknumber(s)"
msgstr ""
-#: templates/calendar.php:35
-msgid "Apr."
+#: lib/object.php:444
+msgid "by day and month"
msgstr ""
-#: templates/calendar.php:35
-msgid "May."
+#: lib/object.php:467
+msgid "Not an array"
msgstr ""
-#: templates/calendar.php:35
-msgid "Jun."
+#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+msgid "Date"
msgstr ""
-#: templates/calendar.php:35
-msgid "Jul."
+#: lib/search.php:40
+msgid "Cal."
msgstr ""
-#: templates/calendar.php:35
-msgid "Aug."
+#: templates/calendar.php:10
+msgid "All day"
+msgstr "Todo o dia"
+
+#: templates/calendar.php:11
+msgid "Missing fields"
msgstr ""
-#: templates/calendar.php:35
-msgid "Sep."
+#: templates/calendar.php:12 templates/part.eventform.php:3
+msgid "Title"
msgstr ""
-#: templates/calendar.php:35
-msgid "Oct."
+#: templates/calendar.php:14
+msgid "From Date"
msgstr ""
-#: templates/calendar.php:35
-msgid "Nov."
+#: templates/calendar.php:15
+msgid "From Time"
msgstr ""
-#: templates/calendar.php:35
-msgid "Dec."
+#: templates/calendar.php:16
+msgid "To Date"
msgstr ""
-#: templates/calendar.php:36 templates/calendar.php:50
-#: templates/calendar.php:116
+#: templates/calendar.php:17
+msgid "To Time"
+msgstr ""
+
+#: templates/calendar.php:18
+msgid "The event ends before it starts"
+msgstr ""
+
+#: templates/calendar.php:19
+msgid "There was a database fail"
+msgstr ""
+
+#: templates/calendar.php:52
msgid "Week"
+msgstr "Semana"
+
+#: templates/calendar.php:53
+msgid "Month"
+msgstr "Mês"
+
+#: templates/calendar.php:54
+msgid "List"
msgstr ""
-#: templates/calendar.php:37 templates/calendar.php:51
-msgid "Weeks"
+#: templates/calendar.php:59
+msgid "Today"
+msgstr "Hoje"
+
+#: templates/calendar.php:60
+msgid "Calendars"
+msgstr "Calendários"
+
+#: templates/calendar.php:78
+msgid "There was a fail, while parsing the file."
msgstr ""
-#: templates/calendar.php:38
-msgid "More before {startdate}"
+#: templates/lAfix.php:9
+msgid "Sun."
msgstr ""
-#: templates/calendar.php:39
-msgid "More after {enddate}"
+#: templates/lAfix.php:10
+msgid "Mon."
msgstr ""
-#: templates/calendar.php:49
-msgid "Day"
+#: templates/lAfix.php:11
+msgid "Tue."
msgstr ""
-#: templates/calendar.php:52
-msgid "Month"
+#: templates/lAfix.php:12
+msgid "Wed."
msgstr ""
-#: templates/calendar.php:53
-msgid "List"
+#: templates/lAfix.php:13
+msgid "Thu."
msgstr ""
-#: templates/calendar.php:58
-msgid "Today"
+#: templates/lAfix.php:14
+msgid "Fri."
msgstr ""
-#: templates/calendar.php:59
-msgid "Calendars"
+#: templates/lAfix.php:15
+msgid "Sat."
msgstr ""
-#: templates/calendar.php:76 templates/calendar.php:94
-msgid "Time"
+#: templates/lAfix.php:28
+msgid "Jan."
msgstr ""
-#: templates/calendar.php:169
-msgid "There was a fail, while parsing the file."
+#: templates/lAfix.php:29
+msgid "Feb."
+msgstr ""
+
+#: templates/lAfix.php:30
+msgid "Mar."
+msgstr ""
+
+#: templates/lAfix.php:31
+msgid "Apr."
+msgstr ""
+
+#: templates/lAfix.php:32
+msgid "May."
+msgstr ""
+
+#: templates/lAfix.php:33
+msgid "Jun."
+msgstr ""
+
+#: templates/lAfix.php:34
+msgid "Jul."
+msgstr ""
+
+#: templates/lAfix.php:35
+msgid "Aug."
+msgstr ""
+
+#: templates/lAfix.php:36
+msgid "Sep."
+msgstr ""
+
+#: templates/lAfix.php:37
+msgid "Oct."
+msgstr ""
+
+#: templates/lAfix.php:38
+msgid "Nov."
+msgstr ""
+
+#: templates/lAfix.php:39
+msgid "Dec."
msgstr ""
#: templates/part.choosecalendar.php:1
@@ -350,12 +433,11 @@ msgid "Download"
msgstr ""
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.eventinfo.php:64
msgid "Edit"
msgstr ""
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.editevent.php:8
+#: templates/part.editevent.php:9
msgid "Delete"
msgstr ""
@@ -375,90 +457,181 @@ msgstr ""
msgid "Active"
msgstr ""
-#: templates/part.editcalendar.php:29 templates/part.eventform.php:88
-#: templates/part.eventinfo.php:58
-msgid "Description"
-msgstr ""
-
-#: templates/part.editcalendar.php:35
+#: templates/part.editcalendar.php:29
msgid "Calendar color"
msgstr ""
-#: templates/part.editcalendar.php:41
+#: templates/part.editcalendar.php:42
msgid "Save"
msgstr ""
-#: templates/part.editcalendar.php:41 templates/part.editevent.php:7
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
#: templates/part.newevent.php:6
msgid "Submit"
msgstr ""
-#: templates/part.editcalendar.php:42
+#: templates/part.editcalendar.php:43
msgid "Cancel"
msgstr ""
-#: templates/part.editevent.php:1 templates/part.eventinfo.php:1
+#: templates/part.editevent.php:1
msgid "Edit an event"
msgstr ""
-#: templates/part.eventform.php:3 templates/part.eventinfo.php:4
-msgid "Title"
+#: templates/part.editevent.php:10
+msgid "Export"
msgstr ""
#: templates/part.eventform.php:5
msgid "Title of the Event"
msgstr ""
-#: templates/part.eventform.php:9 templates/part.eventinfo.php:9
-msgid "Location"
-msgstr ""
-
#: templates/part.eventform.php:11
-msgid "Location of the Event"
-msgstr ""
-
-#: templates/part.eventform.php:17 templates/part.eventinfo.php:16
msgid "Category"
msgstr ""
-#: templates/part.eventform.php:19
+#: templates/part.eventform.php:13
msgid "Select category"
msgstr ""
-#: templates/part.eventform.php:45 templates/part.eventinfo.php:28
+#: templates/part.eventform.php:37
msgid "All Day Event"
msgstr ""
-#: templates/part.eventform.php:49 templates/part.eventinfo.php:31
+#: templates/part.eventform.php:41
msgid "From"
msgstr ""
-#: templates/part.eventform.php:57 templates/part.eventinfo.php:38
+#: templates/part.eventform.php:49
msgid "To"
msgstr ""
-#: templates/part.eventform.php:65 templates/part.eventinfo.php:44
+#: templates/part.eventform.php:57
+msgid "Advanced options"
+msgstr ""
+
+#: templates/part.eventform.php:61
msgid "Repeat"
msgstr ""
-#: templates/part.eventform.php:81 templates/part.eventinfo.php:51
-msgid "Attendees"
+#: templates/part.eventform.php:68
+msgid "Advanced"
msgstr ""
-#: templates/part.eventform.php:89
+#: templates/part.eventform.php:112
+msgid "Select weekdays"
+msgstr ""
+
+#: templates/part.eventform.php:125 templates/part.eventform.php:138
+msgid "Select days"
+msgstr ""
+
+#: templates/part.eventform.php:130
+msgid "and the events day of year."
+msgstr ""
+
+#: templates/part.eventform.php:143
+msgid "and the events day of month."
+msgstr ""
+
+#: templates/part.eventform.php:151
+msgid "Select months"
+msgstr ""
+
+#: templates/part.eventform.php:164
+msgid "Select weeks"
+msgstr ""
+
+#: templates/part.eventform.php:169
+msgid "and the events week of year."
+msgstr ""
+
+#: templates/part.eventform.php:175
+msgid "Interval"
+msgstr ""
+
+#: templates/part.eventform.php:181
+msgid "End"
+msgstr ""
+
+#: templates/part.eventform.php:193
+msgid "occurrences"
+msgstr ""
+
+#: templates/part.eventform.php:208
+msgid "Location"
+msgstr ""
+
+#: templates/part.eventform.php:210
+msgid "Location of the Event"
+msgstr ""
+
+#: templates/part.eventform.php:216
+msgid "Description"
+msgstr ""
+
+#: templates/part.eventform.php:218
msgid "Description of the Event"
msgstr ""
-#: templates/part.eventinfo.php:63
-msgid "Close"
+#: templates/part.import.php:1
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the calendar"
+msgstr ""
+
+#: templates/part.import.php:10
+msgid "create a new calendar"
+msgstr ""
+
+#: templates/part.import.php:15
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import"
+msgstr ""
+
+#: templates/part.import.php:20
+msgid "Importing calendar"
+msgstr ""
+
+#: templates/part.import.php:23
+msgid "Calendar imported successfully"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Close Dialog"
msgstr ""
#: templates/part.newevent.php:1
msgid "Create a new event"
msgstr ""
-#: templates/settings.php:11
+#: templates/settings.php:13
msgid "Timezone"
msgstr ""
+#: templates/settings.php:30
+msgid "Check always for changes of the timezone"
+msgstr ""
+
+#: templates/settings.php:32
+msgid "Timeformat"
+msgstr ""
+
+#: templates/settings.php:34
+msgid "24h"
+msgstr ""
+
+#: templates/settings.php:35
+msgid "12h"
+msgstr ""
+
+#: templates/settings.php:41
+msgid "Calendar CalDAV syncing address:"
+msgstr ""
+
diff --git a/l10n/pt_PT/contacts.po b/l10n/pt_PT/contacts.po
index fcc5bb2f7ed..e29627a2db4 100644
--- a/l10n/pt_PT/contacts.po
+++ b/l10n/pt_PT/contacts.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <helder.meneses@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 20:10+0200\n"
-"PO-Revision-Date: 2011-09-23 18:11+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Portuguese (Portugal) (http://www.transifex.net/projects/p/owncloud/team/pt_PT/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,164 +18,274 @@ msgstr ""
"Language: pt_PT\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/addcard.php:31 ajax/addproperty.php:31 ajax/deletebook.php:32
-#: ajax/deletecard.php:32 ajax/deleteproperty.php:34 ajax/getdetails.php:32
-#: ajax/setproperty.php:32 ajax/showaddcard.php:30 ajax/showaddproperty.php:31
-#: ajax/showsetproperty.php:32 photo.php:32
-msgid "You need to log in."
+#: ajax/activation.php:17 ajax/updateaddressbook.php:26
+msgid "Error (de)activating addressbook."
msgstr ""
-#: ajax/addcard.php:37
-msgid "This is not your addressbook."
+#: ajax/addcard.php:79
+msgid "There was an error adding the contact."
msgstr ""
-#: ajax/addproperty.php:37 ajax/deletecard.php:39 ajax/deleteproperty.php:41
-#: ajax/getdetails.php:39 ajax/setproperty.php:38 ajax/showaddproperty.php:37
-#: ajax/showsetproperty.php:38 photo.php:39
-msgid "Contact could not be found."
+#: ajax/addproperty.php:39
+msgid "Cannot add empty property."
msgstr ""
-#: ajax/addproperty.php:43 ajax/deletebook.php:38 ajax/deletecard.php:45
-#: ajax/deleteproperty.php:47 ajax/getdetails.php:45 ajax/setproperty.php:44
-#: ajax/showaddproperty.php:43 ajax/showsetproperty.php:44 photo.php:45
-msgid "This is not your contact."
+#: ajax/addproperty.php:51
+msgid "At least one of the address fields has to be filled out."
msgstr ""
-#: ajax/addproperty.php:50 ajax/deleteproperty.php:54 ajax/getdetails.php:52
-#: ajax/setproperty.php:51 ajax/showsetproperty.php:51
-msgid "vCard could not be read."
+#: ajax/addproperty.php:77
+msgid "Error adding contact property."
msgstr ""
-#: ajax/deleteproperty.php:65 ajax/setproperty.php:62
-#: ajax/showsetproperty.php:62
-msgid "Information about vCard is incorrect. Please reload the page."
+#: ajax/createaddressbook.php:20
+msgid "Error adding addressbook."
msgstr ""
-#: photo.php:53
-msgid "This card is not RFC compatible."
+#: ajax/createaddressbook.php:26
+msgid "Error activating addressbook."
msgstr ""
-#: photo.php:90
-msgid "This card does not contain a photo."
+#: ajax/deleteproperty.php:40
+msgid "Error deleting contact property."
msgstr ""
-#: templates/index.php:8
-msgid "Add Contact"
+#: ajax/setproperty.php:79
+msgid "Error updating contact property."
msgstr ""
-#: templates/part.addcardform.php:5
-msgid "Group"
+#: ajax/updateaddressbook.php:20
+msgid "Error updating addressbook."
msgstr ""
-#: templates/part.addcardform.php:12 templates/part.property.php:3
-msgid "Name"
+#: appinfo/app.php:21 templates/settings.php:3
+msgid "Contacts"
msgstr ""
-#: templates/part.addcardform.php:14
-msgid "Create Contact"
+#: lib/app.php:42
+msgid "This is not your addressbook."
+msgstr "Esta não é a sua lista de contactos"
+
+#: lib/app.php:51 photo.php:34
+msgid "Contact could not be found."
+msgstr "O contacto não foi encontrado"
+
+#: lib/app.php:79
+msgid "Information about vCard is incorrect. Please reload the page."
msgstr ""
+"A informação sobre o vCard está incorreta. Por favor refresque a página"
-#: templates/part.addpropertyform.php:4 templates/part.property.php:40
+#: lib/app.php:91 templates/part.addcardform.php:54
+#: templates/part.property.php:45 templates/part.setpropertyform.php:7
msgid "Address"
-msgstr ""
+msgstr "Morada"
-#: templates/part.addpropertyform.php:5
+#: lib/app.php:92 templates/part.addcardform.php:43
msgid "Telephone"
-msgstr ""
+msgstr "Telefone"
-#: templates/part.addpropertyform.php:6 templates/part.property.php:22
+#: lib/app.php:93 templates/part.addcardform.php:37
+#: templates/part.property.php:16 templates/part.setpropertyform.php:51
msgid "Email"
-msgstr ""
+msgstr "Email"
-#: templates/part.addpropertyform.php:7 templates/part.property.php:15
+#: lib/app.php:94 templates/part.addcardform.php:27
+#: templates/part.property.php:9 templates/part.setpropertyform.php:54
msgid "Organization"
-msgstr ""
+msgstr "Organização"
-#: templates/part.addpropertyform.php:17 templates/part.addpropertyform.php:32
+#: lib/app.php:106 lib/app.php:113
msgid "Work"
-msgstr ""
+msgstr "Trabalho"
-#: templates/part.addpropertyform.php:18 templates/part.addpropertyform.php:30
+#: lib/app.php:107 lib/app.php:111
msgid "Home"
+msgstr "Casa"
+
+#: lib/app.php:112
+msgid "Mobile"
+msgstr "Telemovel"
+
+#: lib/app.php:114
+msgid "Text"
+msgstr "Texto"
+
+#: lib/app.php:115
+msgid "Voice"
+msgstr "Voz"
+
+#: lib/app.php:116
+msgid "Fax"
+msgstr "Fax"
+
+#: lib/app.php:117
+msgid "Video"
+msgstr "Vídeo"
+
+#: lib/app.php:118
+msgid "Pager"
+msgstr "Pager"
+
+#: lib/search.php:22
+msgid "Contact"
msgstr ""
-#: templates/part.addpropertyform.php:20 templates/part.property.php:48
-#: templates/part.setpropertyform.php:5
-msgid "PO Box"
+#: photo.php:40
+msgid "This is not your contact."
+msgstr "Este não é o seu contacto"
+
+#: photo.php:48
+msgid "This card is not RFC compatible."
+msgstr "Este cartão não é compativel com RFC"
+
+#: photo.php:85
+msgid "This card does not contain a photo."
+msgstr "Este cartão não possui foto"
+
+#: templates/index.php:6
+msgid "Add Contact"
+msgstr "Adicionar Contacto"
+
+#: templates/index.php:7
+msgid "Addressbooks"
msgstr ""
-#: templates/part.addpropertyform.php:21 templates/part.property.php:51
-#: templates/part.setpropertyform.php:6
-msgid "Extended"
+#: templates/part.addcardform.php:8
+msgid "Addressbook"
msgstr ""
-#: templates/part.addpropertyform.php:22 templates/part.property.php:54
-#: templates/part.setpropertyform.php:7
-msgid "Street"
+#: templates/part.addcardform.php:21
+msgid "Name"
+msgstr "Nome"
+
+#: templates/part.addcardform.php:57 templates/part.details.php:43
+#: templates/part.details.php:79 templates/part.setpropertyform.php:10
+#: templates/part.setpropertyform.php:47
+msgid "Type"
msgstr ""
-#: templates/part.addpropertyform.php:23 templates/part.property.php:57
-#: templates/part.setpropertyform.php:8
+#: templates/part.addcardform.php:65 templates/part.details.php:49
+#: templates/part.setpropertyform.php:16
+msgid "PO Box"
+msgstr "Apartado"
+
+#: templates/part.addcardform.php:72 templates/part.details.php:53
+#: templates/part.setpropertyform.php:20
+msgid "Extended"
+msgstr "Extendido"
+
+#: templates/part.addcardform.php:78 templates/part.details.php:57
+#: templates/part.setpropertyform.php:24
+msgid "Street"
+msgstr "Rua"
+
+#: templates/part.addcardform.php:84 templates/part.details.php:61
+#: templates/part.setpropertyform.php:28
msgid "City"
-msgstr ""
+msgstr "Cidade"
-#: templates/part.addpropertyform.php:24 templates/part.property.php:60
-#: templates/part.setpropertyform.php:9
+#: templates/part.addcardform.php:90 templates/part.details.php:65
+#: templates/part.setpropertyform.php:32
msgid "Region"
-msgstr ""
+msgstr "Região"
-#: templates/part.addpropertyform.php:25 templates/part.property.php:63
-#: templates/part.setpropertyform.php:10
+#: templates/part.addcardform.php:96 templates/part.details.php:69
+#: templates/part.setpropertyform.php:36
msgid "Zipcode"
-msgstr ""
+msgstr "Código Postal"
-#: templates/part.addpropertyform.php:26 templates/part.property.php:66
-#: templates/part.setpropertyform.php:11
+#: templates/part.addcardform.php:102 templates/part.details.php:73
+#: templates/part.setpropertyform.php:40
msgid "Country"
+msgstr "País"
+
+#: templates/part.addcardform.php:109
+msgid "Create Contact"
+msgstr "Criar Contacto"
+
+#: templates/part.chooseaddressbook.php:1
+msgid "Choose active Address Books"
msgstr ""
-#: templates/part.addpropertyform.php:31
-msgid "Mobile"
+#: templates/part.chooseaddressbook.php:16
+msgid "New Address Book"
msgstr ""
-#: templates/part.addpropertyform.php:33
-msgid "Text"
+#: templates/part.chooseaddressbook.php:21
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "CardDav Link"
msgstr ""
-#: templates/part.addpropertyform.php:34
-msgid "Voice"
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Download"
msgstr ""
-#: templates/part.addpropertyform.php:35
-msgid "Fax"
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Edit"
+msgstr "Editar"
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Delete"
+msgstr "Apagar"
+
+#: templates/part.details.php:3
+msgid "Download contact"
msgstr ""
-#: templates/part.addpropertyform.php:36
-msgid "Video"
+#: templates/part.details.php:4
+msgid "Delete contact"
msgstr ""
-#: templates/part.addpropertyform.php:37
-msgid "Pager"
+#: templates/part.details.php:34
+msgid "Add"
msgstr ""
-#: templates/part.details.php:33
-msgid "Delete"
+#: templates/part.editaddressbook.php:9
+msgid "New Addressbook"
msgstr ""
-#: templates/part.details.php:34
-msgid "Add Property"
+#: templates/part.editaddressbook.php:9
+msgid "Edit Addressbook"
+msgstr ""
+
+#: templates/part.editaddressbook.php:12
+msgid "Displayname"
+msgstr ""
+
+#: templates/part.editaddressbook.php:23
+msgid "Active"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Save"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Submit"
msgstr ""
-#: templates/part.property.php:9
+#: templates/part.editaddressbook.php:30
+msgid "Cancel"
+msgstr ""
+
+#: templates/part.property.php:3
msgid "Birthday"
+msgstr "Aniversário"
+
+#: templates/part.property.php:23
+msgid "Preferred"
msgstr ""
-#: templates/part.property.php:29
+#: templates/part.property.php:23 templates/part.setpropertyform.php:45
msgid "Phone"
+msgstr "Telefone"
+
+#: templates/part.setpropertyform.php:57
+msgid "Update"
msgstr ""
-#: templates/part.setpropertyform.php:17
-msgid "Edit"
+#: templates/settings.php:4
+msgid "CardDAV syncing address:"
msgstr ""
diff --git a/l10n/pt_PT/core.po b/l10n/pt_PT/core.po
index 8c79bfcd9c5..aaab9779385 100644
--- a/l10n/pt_PT/core.po
+++ b/l10n/pt_PT/core.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <helder.meneses@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 18:17+0200\n"
-"PO-Revision-Date: 2011-09-23 16:41+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Portuguese (Portugal) (http://www.transifex.net/projects/p/owncloud/team/pt_PT/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,6 +18,51 @@ msgstr ""
"Language: pt_PT\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+#: lostpassword/index.php:24
+msgid "Owncloud password reset"
+msgstr ""
+
+#: lostpassword/templates/email.php:1
+msgid "Use the following link to reset your password: {link}"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Requested"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:22
+#: templates/login.php:8
+msgid "Username"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:14
+msgid "Request reset"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr ""
+
#: strings.php:5
msgid "Personal"
msgstr ""
@@ -45,53 +91,49 @@ msgstr ""
msgid "Create an <strong>admin account</strong>"
msgstr ""
-#: templates/installation.php:21
-msgid "Username"
+#: templates/installation.php:26 templates/login.php:12
+msgid "Password"
msgstr ""
-#: templates/installation.php:22
-msgid "Password"
+#: templates/installation.php:32
+msgid "Advanced"
+msgstr "Avançado"
+
+#: templates/installation.php:34
+msgid "Data folder"
msgstr ""
-#: templates/installation.php:27
+#: templates/installation.php:41
msgid "Configure the database"
msgstr ""
-#: templates/installation.php:32 templates/installation.php:43
-#: templates/installation.php:53
+#: templates/installation.php:46 templates/installation.php:57
+#: templates/installation.php:67
msgid "will be used"
msgstr ""
-#: templates/installation.php:64
+#: templates/installation.php:79
msgid "Database user"
msgstr ""
-#: templates/installation.php:65
+#: templates/installation.php:83
msgid "Database password"
msgstr ""
-#: templates/installation.php:66
+#: templates/installation.php:87
msgid "Database name"
msgstr ""
-#: templates/installation.php:72
-msgid "Advanced"
-msgstr ""
-
-#: templates/installation.php:75
+#: templates/installation.php:93
msgid "Database host"
msgstr ""
-#: templates/installation.php:76
-msgid "Data folder"
-msgstr ""
-
-#: templates/installation.php:79
+#: templates/installation.php:98
msgid "Finish setup"
msgstr ""
#: templates/layout.guest.php:35
-msgid "gives you freedom and control over your own data"
+msgid "web services under your control"
msgstr ""
#: templates/layout.user.php:34
@@ -102,36 +144,20 @@ msgstr ""
msgid "Settings"
msgstr ""
-#: templates/login.php:4
+#: templates/login.php:5
msgid "Lost your password?"
msgstr ""
-#: templates/login.php:9 templates/login.php:13
+#: templates/login.php:15
msgid "remember"
msgstr ""
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr ""
-
-#: templates/lostpassword.php:3
-msgid "You will receive a link to reset your password via Email."
-msgstr ""
-
-#: templates/lostpassword.php:5
-msgid "Requested"
-msgstr ""
-
-#: templates/lostpassword.php:8
-msgid "Login failed!"
-msgstr ""
-
-#: templates/lostpassword.php:10
-msgid "Username or Email"
+#: templates/login.php:16
+msgid "Log in"
msgstr ""
-#: templates/lostpassword.php:11
-msgid "Request reset"
+#: templates/logout.php:1
+msgid "You are logged out."
msgstr ""
#: templates/part.pagenavi.php:3
@@ -142,16 +168,4 @@ msgstr ""
msgid "next"
msgstr ""
-#: templates/resetpassword.php:4
-msgid "Your password was reset"
-msgstr ""
-
-#: templates/resetpassword.php:6
-msgid "New password"
-msgstr ""
-
-#: templates/resetpassword.php:7
-msgid "Reset password"
-msgstr ""
-
diff --git a/l10n/pt_PT/files.po b/l10n/pt_PT/files.po
index b41320ef456..7fd44b4f725 100644
--- a/l10n/pt_PT/files.po
+++ b/l10n/pt_PT/files.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Portuguese (Portugal) (http://www.transifex.net/projects/p/owncloud/team/pt_PT/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,33 +17,33 @@ msgstr ""
"Language: pt_PT\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/upload.php:24
+#: ajax/upload.php:19
msgid "There is no error, the file uploaded with success"
msgstr ""
-#: ajax/upload.php:25
+#: ajax/upload.php:20
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr ""
-#: ajax/upload.php:26
+#: ajax/upload.php:21
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
-#: ajax/upload.php:27
+#: ajax/upload.php:22
msgid "The uploaded file was only partially uploaded"
msgstr ""
-#: ajax/upload.php:28
+#: ajax/upload.php:23
msgid "No file was uploaded"
msgstr ""
-#: ajax/upload.php:29
+#: ajax/upload.php:24
msgid "Missing a temporary folder"
msgstr ""
-#: appinfo/app.php:7
+#: appinfo/app.php:8
msgid "Files"
msgstr ""
@@ -51,43 +51,55 @@ msgstr ""
msgid "Maximum upload size"
msgstr ""
+#: templates/index.php:7
+msgid "New"
+msgstr ""
+
#: templates/index.php:10
-msgid "Upload"
+msgid "Text file"
+msgstr ""
+
+#: templates/index.php:11
+msgid "Folder"
+msgstr ""
+
+#: templates/index.php:12
+msgid "From the web"
msgstr ""
-#: templates/index.php:17
-msgid "New Folder"
+#: templates/index.php:22
+msgid "Upload"
msgstr ""
-#: templates/index.php:31
+#: templates/index.php:35
msgid "Nothing in here. Upload something!"
msgstr ""
-#: templates/index.php:39
+#: templates/index.php:43
msgid "Name"
msgstr ""
-#: templates/index.php:41
+#: templates/index.php:45
msgid "Download"
msgstr ""
-#: templates/index.php:45
+#: templates/index.php:49
msgid "Size"
msgstr ""
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Modified"
msgstr ""
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Delete"
msgstr ""
-#: templates/index.php:54
+#: templates/index.php:58
msgid "Upload too large"
msgstr ""
-#: templates/index.php:56
+#: templates/index.php:60
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
diff --git a/l10n/pt_PT/gallery.po b/l10n/pt_PT/gallery.po
new file mode 100644
index 00000000000..19f5d97278c
--- /dev/null
+++ b/l10n/pt_PT/gallery.po
@@ -0,0 +1,32 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:48+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Portuguese (Portugal) (http://www.transifex.net/projects/p/owncloud/team/pt_PT/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pt_PT\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:41
+msgid "Gallery"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Rescan"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+
diff --git a/l10n/pt_PT/media.po b/l10n/pt_PT/media.po
index ae7c1aba234..b248284c3dd 100644
--- a/l10n/pt_PT/media.po
+++ b/l10n/pt_PT/media.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 18:17+0200\n"
-"PO-Revision-Date: 2011-09-23 16:42+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Portuguese (Portugal) (http://www.transifex.net/projects/p/owncloud/team/pt_PT/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,15 +17,15 @@ msgstr ""
"Language: pt_PT\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: appinfo/app.php:31
+#: appinfo/app.php:32
msgid "Music"
msgstr ""
-#: templates/music.php:3
+#: templates/music.php:3 templates/player.php:13
msgid "Play"
msgstr ""
-#: templates/music.php:4 templates/music.php:30
+#: templates/music.php:4 templates/music.php:26 templates/player.php:14
msgid "Pause"
msgstr ""
@@ -33,7 +33,7 @@ msgstr ""
msgid "Previous"
msgstr ""
-#: templates/music.php:6
+#: templates/music.php:6 templates/player.php:15
msgid "Next"
msgstr ""
@@ -45,11 +45,7 @@ msgstr ""
msgid "Unmute"
msgstr ""
-#: templates/music.php:28
-msgid "Songs scanned"
-msgstr ""
-
-#: templates/music.php:29
+#: templates/music.php:25
msgid "Rescan Collection"
msgstr ""
diff --git a/l10n/pt_PT/settings.po b/l10n/pt_PT/settings.po
index ba8649456a4..5b55ea33a78 100644
--- a/l10n/pt_PT/settings.po
+++ b/l10n/pt_PT/settings.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 18:17+0200\n"
-"PO-Revision-Date: 2011-09-23 16:42+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Portuguese (Portugal) (http://www.transifex.net/projects/p/owncloud/team/pt_PT/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,22 +17,26 @@ msgstr ""
"Language: pt_PT\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/openid.php:13 ajax/setlanguage.php:13
-msgid "Authentication error"
+#: ajax/lostpassword.php:14
+msgid "email Changed"
msgstr ""
-#: ajax/openid.php:21
-msgid "OpenID Changed"
+#: ajax/lostpassword.php:16 ajax/openid.php:17 ajax/setlanguage.php:16
+msgid "Invalid request"
msgstr ""
-#: ajax/openid.php:23 ajax/setlanguage.php:23
-msgid "Invalid request"
+#: ajax/openid.php:15
+msgid "OpenID Changed"
msgstr ""
-#: ajax/setlanguage.php:21
+#: ajax/setlanguage.php:14
msgid "Language changed"
msgstr ""
+#: templates/admin.php:13
+msgid "Log level"
+msgstr ""
+
#: templates/apps.php:8
msgid "Add your application"
msgstr ""
@@ -53,15 +57,15 @@ msgstr ""
msgid "Ask a question"
msgstr ""
-#: templates/help.php:17
+#: templates/help.php:20
msgid "Problems connecting to help database."
msgstr ""
-#: templates/help.php:18
+#: templates/help.php:21
msgid "Go there manually."
msgstr ""
-#: templates/help.php:26
+#: templates/help.php:29
msgid "Answer"
msgstr ""
@@ -97,35 +101,51 @@ msgstr ""
msgid "Change password"
msgstr ""
-#: templates/personal.php:24 templates/personal.php:25
+#: templates/personal.php:24
+msgid "Email"
+msgstr ""
+
+#: templates/personal.php:25
+msgid "Your email address"
+msgstr ""
+
+#: templates/personal.php:26
+msgid "Fill in an email address to enable password recovery"
+msgstr ""
+
+#: templates/personal.php:32 templates/personal.php:33
msgid "Language"
msgstr ""
-#: templates/personal.php:30
-msgid "Help translating"
+#: templates/personal.php:38
+msgid "Help translate"
msgstr ""
-#: templates/personal.php:37
+#: templates/personal.php:45
msgid "use this address to connect to your ownCloud in your file manager"
msgstr ""
-#: templates/users.php:16
+#: templates/users.php:15 templates/users.php:30
msgid "Name"
msgstr ""
-#: templates/users.php:17
+#: templates/users.php:16 templates/users.php:31
msgid "Password"
msgstr ""
-#: templates/users.php:18 templates/users.php:36
+#: templates/users.php:17 templates/users.php:32 templates/users.php:46
msgid "Groups"
msgstr ""
-#: templates/users.php:24
+#: templates/users.php:23
msgid "Create"
msgstr ""
-#: templates/users.php:48
+#: templates/users.php:33
+msgid "Quota"
+msgstr ""
+
+#: templates/users.php:58
msgid "Delete"
msgstr ""
diff --git a/l10n/ro/calendar.po b/l10n/ro/calendar.po
index e87d6c47a95..ff06c8671a1 100644
--- a/l10n/ro/calendar.po
+++ b/l10n/ro/calendar.po
@@ -3,14 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Claudiu <claudiu@tanaselia.ro>, 2011.
+# Claudiu <claudiu@tanaselia.ro>, 2011, 2012.
+# Ovidiu Tache <ovidiutache@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Romanian (http://www.transifex.net/projects/p/owncloud/team/ro/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,351 +19,432 @@ msgstr ""
"Language: ro\n"
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1))\n"
-#: ajax/createcalendar.php:18 ajax/settimezone.php:19
-#: ajax/updatecalendar.php:18
-msgid "Authentication error"
-msgstr "Eroare de autentificare"
+#: ajax/guesstimezone.php:42
+msgid "New Timezone:"
+msgstr "Fus orar nou:"
-#: ajax/editeventform.php:25
-msgid "Wrong calendar"
-msgstr ""
-
-#: ajax/settimezone.php:27
+#: ajax/settimezone.php:22
msgid "Timezone changed"
msgstr "A fost schimbat fusul orar"
-#: ajax/settimezone.php:29
+#: ajax/settimezone.php:24
msgid "Invalid request"
msgstr "Cerere eronată"
-#: appinfo/app.php:19 templates/part.eventform.php:27
-#: templates/part.eventinfo.php:18
+#: appinfo/app.php:20 templates/calendar.php:13
+#: templates/part.eventform.php:20
msgid "Calendar"
msgstr "Calendar"
-#: lib/object.php:292
+#: lib/app.php:19
+msgid "Wrong calendar"
+msgstr "Calendar greșit"
+
+#: lib/app.php:60 lib/object.php:332
msgid "Birthday"
-msgstr ""
+msgstr "Zi de naștere"
-#: lib/object.php:293
+#: lib/app.php:61 lib/object.php:333
msgid "Business"
-msgstr ""
+msgstr "Afaceri"
-#: lib/object.php:294
+#: lib/app.php:62 lib/object.php:334
msgid "Call"
-msgstr ""
+msgstr "Sună"
-#: lib/object.php:295
+#: lib/app.php:63 lib/object.php:335
msgid "Clients"
-msgstr ""
+msgstr "Clienți"
-#: lib/object.php:296
+#: lib/app.php:64 lib/object.php:336
msgid "Deliverer"
-msgstr ""
+msgstr "Curier"
-#: lib/object.php:297
+#: lib/app.php:65 lib/object.php:337
msgid "Holidays"
-msgstr ""
+msgstr "Sărbători"
-#: lib/object.php:298
+#: lib/app.php:66 lib/object.php:338
msgid "Ideas"
-msgstr ""
+msgstr "Idei"
-#: lib/object.php:299
+#: lib/app.php:67 lib/object.php:339
msgid "Journey"
-msgstr ""
+msgstr "Călătorie"
-#: lib/object.php:300
+#: lib/app.php:68 lib/object.php:340
msgid "Jubilee"
-msgstr ""
+msgstr "Aniversare"
-#: lib/object.php:301
+#: lib/app.php:69 lib/object.php:341
msgid "Meeting"
-msgstr ""
+msgstr "Întâlnire"
-#: lib/object.php:302
+#: lib/app.php:70 lib/object.php:342
msgid "Other"
-msgstr ""
+msgstr "Altele"
-#: lib/object.php:303
+#: lib/app.php:71 lib/object.php:343
msgid "Personal"
-msgstr ""
+msgstr "Personal"
-#: lib/object.php:304
+#: lib/app.php:72 lib/object.php:344
msgid "Projects"
-msgstr ""
+msgstr "Proiecte"
-#: lib/object.php:305
+#: lib/app.php:73 lib/object.php:345
msgid "Questions"
-msgstr ""
+msgstr "Întrebări"
-#: lib/object.php:306
+#: lib/app.php:74 lib/object.php:346
msgid "Work"
-msgstr ""
+msgstr "Servici"
-#: lib/object.php:313
+#: lib/object.php:353
msgid "Does not repeat"
msgstr "Nu se repetă"
-#: lib/object.php:314
+#: lib/object.php:354
msgid "Daily"
msgstr "Zilnic"
-#: lib/object.php:315
+#: lib/object.php:355
msgid "Weekly"
msgstr "Săptămânal"
-#: lib/object.php:316
+#: lib/object.php:356
msgid "Every Weekday"
msgstr "În fiecare săptămână"
-#: lib/object.php:317
+#: lib/object.php:357
msgid "Bi-Weekly"
msgstr "Din două în două săptămâni"
-#: lib/object.php:318
+#: lib/object.php:358
msgid "Monthly"
msgstr "Lunar"
-#: lib/object.php:319
+#: lib/object.php:359
msgid "Yearly"
msgstr "Anual"
-#: lib/object.php:337
-msgid "Not an array"
-msgstr ""
+#: lib/object.php:366
+msgid "never"
+msgstr "niciodată"
-#: templates/calendar.php:3
-msgid "All day"
-msgstr "Toată ziua"
+#: lib/object.php:367
+msgid "by occurrences"
+msgstr "după repetiție"
-#: templates/calendar.php:32
-msgid "Sunday"
-msgstr "Duminică"
+#: lib/object.php:368
+msgid "by date"
+msgstr "după dată"
-#: templates/calendar.php:32
+#: lib/object.php:375
+msgid "by monthday"
+msgstr "după ziua lunii"
+
+#: lib/object.php:376
+msgid "by weekday"
+msgstr "după ziua săptămânii"
+
+#: lib/object.php:383 templates/lAfix.php:3
msgid "Monday"
msgstr "Luni"
-#: templates/calendar.php:32
+#: lib/object.php:384 templates/lAfix.php:4
msgid "Tuesday"
msgstr "Marți"
-#: templates/calendar.php:32
+#: lib/object.php:385 templates/lAfix.php:5
msgid "Wednesday"
msgstr "Miercuri"
-#: templates/calendar.php:32
+#: lib/object.php:386 templates/lAfix.php:6
msgid "Thursday"
msgstr "Joi"
-#: templates/calendar.php:32
+#: lib/object.php:387 templates/lAfix.php:7
msgid "Friday"
msgstr "Vineri"
-#: templates/calendar.php:32
+#: lib/object.php:388 templates/lAfix.php:8
msgid "Saturday"
msgstr "Sâmbătă"
-#: templates/calendar.php:33
-msgid "Sun."
-msgstr "Dum."
+#: lib/object.php:389 templates/lAfix.php:2
+msgid "Sunday"
+msgstr "Duminică"
-#: templates/calendar.php:33
-msgid "Mon."
-msgstr "Lun."
+#: lib/object.php:396
+msgid "events week of month"
+msgstr "evenimentele săptămânii din luna."
-#: templates/calendar.php:33
-msgid "Tue."
-msgstr "Mar."
+#: lib/object.php:397
+msgid "first"
+msgstr "primul"
-#: templates/calendar.php:33
-msgid "Wed."
-msgstr "Mie."
+#: lib/object.php:398
+msgid "second"
+msgstr "al doilea"
-#: templates/calendar.php:33
-msgid "Thu."
-msgstr "Joi."
+#: lib/object.php:399
+msgid "third"
+msgstr "al treilea"
-#: templates/calendar.php:33
-msgid "Fri."
-msgstr "Vin."
+#: lib/object.php:400
+msgid "fourth"
+msgstr "al patrulea"
-#: templates/calendar.php:33
-msgid "Sat."
-msgstr "Sâm."
+#: lib/object.php:401
+msgid "fifth"
+msgstr "al cincilea"
-#: templates/calendar.php:34
+#: lib/object.php:402
+msgid "last"
+msgstr "ultimul"
+
+#: lib/object.php:424 templates/lAfix.php:16
msgid "January"
msgstr "Ianuarie"
-#: templates/calendar.php:34
+#: lib/object.php:425 templates/lAfix.php:17
msgid "February"
msgstr "Februarie"
-#: templates/calendar.php:34
+#: lib/object.php:426 templates/lAfix.php:18
msgid "March"
msgstr "Martie"
-#: templates/calendar.php:34
+#: lib/object.php:427 templates/lAfix.php:19
msgid "April"
msgstr "Aprilie"
-#: templates/calendar.php:34
+#: lib/object.php:428 templates/lAfix.php:20
msgid "May"
msgstr "Mai"
-#: templates/calendar.php:34
+#: lib/object.php:429 templates/lAfix.php:21
msgid "June"
msgstr "Iunie"
-#: templates/calendar.php:34
+#: lib/object.php:430 templates/lAfix.php:22
msgid "July"
msgstr "Iulie"
-#: templates/calendar.php:34
+#: lib/object.php:431 templates/lAfix.php:23
msgid "August"
msgstr "August"
-#: templates/calendar.php:34
+#: lib/object.php:432 templates/lAfix.php:24
msgid "September"
msgstr "Septembrie"
-#: templates/calendar.php:34
+#: lib/object.php:433 templates/lAfix.php:25
msgid "October"
msgstr "Octombrie"
-#: templates/calendar.php:34
+#: lib/object.php:434 templates/lAfix.php:26
msgid "November"
msgstr "Noiembrie"
-#: templates/calendar.php:34
+#: lib/object.php:435 templates/lAfix.php:27
msgid "December"
msgstr "Decembrie"
-#: templates/calendar.php:35
+#: lib/object.php:441
+msgid "by events date"
+msgstr "după data evenimentului"
+
+#: lib/object.php:442
+msgid "by yearday(s)"
+msgstr "după ziua(zilele) anului"
+
+#: lib/object.php:443
+msgid "by weeknumber(s)"
+msgstr "după numărul săptămânii"
+
+#: lib/object.php:444
+msgid "by day and month"
+msgstr "după zi și lună"
+
+#: lib/object.php:467
+msgid "Not an array"
+msgstr "Not an array"
+
+#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+msgid "Date"
+msgstr "Data"
+
+#: lib/search.php:40
+msgid "Cal."
+msgstr "Cal."
+
+#: templates/calendar.php:10
+msgid "All day"
+msgstr "Toată ziua"
+
+#: templates/calendar.php:11
+msgid "Missing fields"
+msgstr "Câmpuri lipsă"
+
+#: templates/calendar.php:12 templates/part.eventform.php:3
+msgid "Title"
+msgstr "Titlu"
+
+#: templates/calendar.php:14
+msgid "From Date"
+msgstr "Începând cu"
+
+#: templates/calendar.php:15
+msgid "From Time"
+msgstr "De la"
+
+#: templates/calendar.php:16
+msgid "To Date"
+msgstr "Până pe"
+
+#: templates/calendar.php:17
+msgid "To Time"
+msgstr "La"
+
+#: templates/calendar.php:18
+msgid "The event ends before it starts"
+msgstr "Evenimentul se termină înainte să înceapă"
+
+#: templates/calendar.php:19
+msgid "There was a database fail"
+msgstr "A avut loc o eroare a bazei de date"
+
+#: templates/calendar.php:52
+msgid "Week"
+msgstr "Săptămâna"
+
+#: templates/calendar.php:53
+msgid "Month"
+msgstr "Luna"
+
+#: templates/calendar.php:54
+msgid "List"
+msgstr "Listă"
+
+#: templates/calendar.php:59
+msgid "Today"
+msgstr "Astăzi"
+
+#: templates/calendar.php:60
+msgid "Calendars"
+msgstr "Calendare"
+
+#: templates/calendar.php:78
+msgid "There was a fail, while parsing the file."
+msgstr "A fost întâmpinată o eroare în procesarea fișierului"
+
+#: templates/lAfix.php:9
+msgid "Sun."
+msgstr "D"
+
+#: templates/lAfix.php:10
+msgid "Mon."
+msgstr "L"
+
+#: templates/lAfix.php:11
+msgid "Tue."
+msgstr "M"
+
+#: templates/lAfix.php:12
+msgid "Wed."
+msgstr "M"
+
+#: templates/lAfix.php:13
+msgid "Thu."
+msgstr "J"
+
+#: templates/lAfix.php:14
+msgid "Fri."
+msgstr "V"
+
+#: templates/lAfix.php:15
+msgid "Sat."
+msgstr "S"
+
+#: templates/lAfix.php:28
msgid "Jan."
msgstr "Ian."
-#: templates/calendar.php:35
+#: templates/lAfix.php:29
msgid "Feb."
msgstr "Feb."
-#: templates/calendar.php:35
+#: templates/lAfix.php:30
msgid "Mar."
msgstr "Mar."
-#: templates/calendar.php:35
+#: templates/lAfix.php:31
msgid "Apr."
msgstr "Apr."
-#: templates/calendar.php:35
+#: templates/lAfix.php:32
msgid "May."
-msgstr ""
+msgstr "Mai."
-#: templates/calendar.php:35
+#: templates/lAfix.php:33
msgid "Jun."
msgstr "Iun."
-#: templates/calendar.php:35
+#: templates/lAfix.php:34
msgid "Jul."
msgstr "Iul."
-#: templates/calendar.php:35
+#: templates/lAfix.php:35
msgid "Aug."
msgstr "Aug."
-#: templates/calendar.php:35
+#: templates/lAfix.php:36
msgid "Sep."
-msgstr "Sep."
+msgstr "Sept."
-#: templates/calendar.php:35
+#: templates/lAfix.php:37
msgid "Oct."
msgstr "Oct."
-#: templates/calendar.php:35
+#: templates/lAfix.php:38
msgid "Nov."
msgstr "Nov."
-#: templates/calendar.php:35
+#: templates/lAfix.php:39
msgid "Dec."
msgstr "Dec."
-#: templates/calendar.php:36 templates/calendar.php:50
-#: templates/calendar.php:116
-msgid "Week"
-msgstr "Săptămâna"
-
-#: templates/calendar.php:37 templates/calendar.php:51
-msgid "Weeks"
-msgstr "Săptămâni"
-
-#: templates/calendar.php:38
-msgid "More before {startdate}"
-msgstr ""
-
-#: templates/calendar.php:39
-msgid "More after {enddate}"
-msgstr ""
-
-#: templates/calendar.php:49
-msgid "Day"
-msgstr "Zi"
-
-#: templates/calendar.php:52
-msgid "Month"
-msgstr "Luna"
-
-#: templates/calendar.php:53
-msgid "List"
-msgstr ""
-
-#: templates/calendar.php:58
-msgid "Today"
-msgstr "Astăzi"
-
-#: templates/calendar.php:59
-msgid "Calendars"
-msgstr "Calendare"
-
-#: templates/calendar.php:76 templates/calendar.php:94
-msgid "Time"
-msgstr "Ora"
-
-#: templates/calendar.php:169
-msgid "There was a fail, while parsing the file."
-msgstr "A fost întâmpinată o eroare în procesarea fișierului"
-
#: templates/part.choosecalendar.php:1
msgid "Choose active calendars"
msgstr "Alege activitățile din calendar"
#: templates/part.choosecalendar.php:15
msgid "New Calendar"
-msgstr ""
+msgstr "Calendar nou"
#: templates/part.choosecalendar.php:20
#: templates/part.choosecalendar.rowfields.php:4
msgid "CalDav Link"
-msgstr ""
+msgstr "Link CalDav"
#: templates/part.choosecalendar.rowfields.php:4
msgid "Download"
msgstr "Descarcă"
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.eventinfo.php:64
msgid "Edit"
msgstr "Modifică"
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.editevent.php:8
+#: templates/part.editevent.php:9
msgid "Delete"
-msgstr ""
+msgstr "Șterge"
#: templates/part.editcalendar.php:9
msgid "New calendar"
-msgstr ""
+msgstr "Calendar nou"
#: templates/part.editcalendar.php:9
msgid "Edit calendar"
@@ -376,90 +458,181 @@ msgstr "Nume"
msgid "Active"
msgstr "Activ"
-#: templates/part.editcalendar.php:29 templates/part.eventform.php:88
-#: templates/part.eventinfo.php:58
-msgid "Description"
-msgstr "Descriere"
-
-#: templates/part.editcalendar.php:35
+#: templates/part.editcalendar.php:29
msgid "Calendar color"
msgstr "Culoare calendar"
-#: templates/part.editcalendar.php:41
+#: templates/part.editcalendar.php:42
msgid "Save"
-msgstr ""
+msgstr "Salveză"
-#: templates/part.editcalendar.php:41 templates/part.editevent.php:7
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
#: templates/part.newevent.php:6
msgid "Submit"
msgstr "Trimite"
-#: templates/part.editcalendar.php:42
+#: templates/part.editcalendar.php:43
msgid "Cancel"
-msgstr ""
+msgstr "Anulează"
-#: templates/part.editevent.php:1 templates/part.eventinfo.php:1
+#: templates/part.editevent.php:1
msgid "Edit an event"
msgstr "Modifică un eveniment"
-#: templates/part.eventform.php:3 templates/part.eventinfo.php:4
-msgid "Title"
-msgstr "Titlu"
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr "Exportă"
#: templates/part.eventform.php:5
msgid "Title of the Event"
msgstr "Numele evenimentului"
-#: templates/part.eventform.php:9 templates/part.eventinfo.php:9
-msgid "Location"
-msgstr "Localizare"
-
#: templates/part.eventform.php:11
-msgid "Location of the Event"
-msgstr "Localizarea evenimentului"
-
-#: templates/part.eventform.php:17 templates/part.eventinfo.php:16
msgid "Category"
msgstr "Categorie"
-#: templates/part.eventform.php:19
+#: templates/part.eventform.php:13
msgid "Select category"
-msgstr ""
+msgstr "Alege categoria"
-#: templates/part.eventform.php:45 templates/part.eventinfo.php:28
+#: templates/part.eventform.php:37
msgid "All Day Event"
msgstr "Toată ziua"
-#: templates/part.eventform.php:49 templates/part.eventinfo.php:31
+#: templates/part.eventform.php:41
msgid "From"
msgstr "De la"
-#: templates/part.eventform.php:57 templates/part.eventinfo.php:38
+#: templates/part.eventform.php:49
msgid "To"
msgstr "Către"
-#: templates/part.eventform.php:65 templates/part.eventinfo.php:44
+#: templates/part.eventform.php:57
+msgid "Advanced options"
+msgstr "Opțiuni avansate"
+
+#: templates/part.eventform.php:61
msgid "Repeat"
msgstr "Repetă"
-#: templates/part.eventform.php:81 templates/part.eventinfo.php:51
-msgid "Attendees"
-msgstr "Participanți"
+#: templates/part.eventform.php:68
+msgid "Advanced"
+msgstr "Avansat"
+
+#: templates/part.eventform.php:112
+msgid "Select weekdays"
+msgstr "Selectează zilele săptămânii"
+
+#: templates/part.eventform.php:125 templates/part.eventform.php:138
+msgid "Select days"
+msgstr "Selectează zilele"
+
+#: templates/part.eventform.php:130
+msgid "and the events day of year."
+msgstr "și evenimentele zilei."
+
+#: templates/part.eventform.php:143
+msgid "and the events day of month."
+msgstr "și evenimentele zilei din lună."
-#: templates/part.eventform.php:89
+#: templates/part.eventform.php:151
+msgid "Select months"
+msgstr "Selectează lunile"
+
+#: templates/part.eventform.php:164
+msgid "Select weeks"
+msgstr "Selectează săptămânile"
+
+#: templates/part.eventform.php:169
+msgid "and the events week of year."
+msgstr "și evenimentele săptămânii."
+
+#: templates/part.eventform.php:175
+msgid "Interval"
+msgstr "Interval"
+
+#: templates/part.eventform.php:181
+msgid "End"
+msgstr "Sfârșit"
+
+#: templates/part.eventform.php:193
+msgid "occurrences"
+msgstr "repetiții"
+
+#: templates/part.eventform.php:208
+msgid "Location"
+msgstr "Localizare"
+
+#: templates/part.eventform.php:210
+msgid "Location of the Event"
+msgstr "Localizarea evenimentului"
+
+#: templates/part.eventform.php:216
+msgid "Description"
+msgstr "Descriere"
+
+#: templates/part.eventform.php:218
msgid "Description of the Event"
msgstr "Descrierea evenimentului"
-#: templates/part.eventinfo.php:63
-msgid "Close"
-msgstr "Închide"
+#: templates/part.import.php:1
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the calendar"
+msgstr "Alegeți calendarul"
+
+#: templates/part.import.php:10
+msgid "create a new calendar"
+msgstr ""
+
+#: templates/part.import.php:15
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import"
+msgstr "Importă"
+
+#: templates/part.import.php:20
+msgid "Importing calendar"
+msgstr ""
+
+#: templates/part.import.php:23
+msgid "Calendar imported successfully"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Close Dialog"
+msgstr ""
#: templates/part.newevent.php:1
msgid "Create a new event"
msgstr "Crează un evenimetn nou"
-#: templates/settings.php:11
+#: templates/settings.php:13
msgid "Timezone"
msgstr "Fus orar"
+#: templates/settings.php:30
+msgid "Check always for changes of the timezone"
+msgstr "Verifică mereu pentru schimbări ale fusului orar"
+
+#: templates/settings.php:32
+msgid "Timeformat"
+msgstr "Format de timp"
+
+#: templates/settings.php:34
+msgid "24h"
+msgstr "24h"
+
+#: templates/settings.php:35
+msgid "12h"
+msgstr "12h"
+
+#: templates/settings.php:41
+msgid "Calendar CalDAV syncing address:"
+msgstr "Adresa pentru sincronizarea calendarului CalDAV"
+
diff --git a/l10n/ro/contacts.po b/l10n/ro/contacts.po
index 95b3d705a3d..6d7ec2c5c2f 100644
--- a/l10n/ro/contacts.po
+++ b/l10n/ro/contacts.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Claudiu <claudiu@tanaselia.ro>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 20:10+0200\n"
-"PO-Revision-Date: 2011-09-23 18:11+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Romanian (http://www.transifex.net/projects/p/owncloud/team/ro/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,164 +18,273 @@ msgstr ""
"Language: ro\n"
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1))\n"
-#: ajax/addcard.php:31 ajax/addproperty.php:31 ajax/deletebook.php:32
-#: ajax/deletecard.php:32 ajax/deleteproperty.php:34 ajax/getdetails.php:32
-#: ajax/setproperty.php:32 ajax/showaddcard.php:30 ajax/showaddproperty.php:31
-#: ajax/showsetproperty.php:32 photo.php:32
-msgid "You need to log in."
+#: ajax/activation.php:17 ajax/updateaddressbook.php:26
+msgid "Error (de)activating addressbook."
msgstr ""
-#: ajax/addcard.php:37
-msgid "This is not your addressbook."
+#: ajax/addcard.php:79
+msgid "There was an error adding the contact."
msgstr ""
-#: ajax/addproperty.php:37 ajax/deletecard.php:39 ajax/deleteproperty.php:41
-#: ajax/getdetails.php:39 ajax/setproperty.php:38 ajax/showaddproperty.php:37
-#: ajax/showsetproperty.php:38 photo.php:39
-msgid "Contact could not be found."
+#: ajax/addproperty.php:39
+msgid "Cannot add empty property."
msgstr ""
-#: ajax/addproperty.php:43 ajax/deletebook.php:38 ajax/deletecard.php:45
-#: ajax/deleteproperty.php:47 ajax/getdetails.php:45 ajax/setproperty.php:44
-#: ajax/showaddproperty.php:43 ajax/showsetproperty.php:44 photo.php:45
-msgid "This is not your contact."
+#: ajax/addproperty.php:51
+msgid "At least one of the address fields has to be filled out."
msgstr ""
-#: ajax/addproperty.php:50 ajax/deleteproperty.php:54 ajax/getdetails.php:52
-#: ajax/setproperty.php:51 ajax/showsetproperty.php:51
-msgid "vCard could not be read."
+#: ajax/addproperty.php:77
+msgid "Error adding contact property."
msgstr ""
-#: ajax/deleteproperty.php:65 ajax/setproperty.php:62
-#: ajax/showsetproperty.php:62
-msgid "Information about vCard is incorrect. Please reload the page."
+#: ajax/createaddressbook.php:20
+msgid "Error adding addressbook."
msgstr ""
-#: photo.php:53
-msgid "This card is not RFC compatible."
+#: ajax/createaddressbook.php:26
+msgid "Error activating addressbook."
msgstr ""
-#: photo.php:90
-msgid "This card does not contain a photo."
+#: ajax/deleteproperty.php:40
+msgid "Error deleting contact property."
msgstr ""
-#: templates/index.php:8
-msgid "Add Contact"
+#: ajax/setproperty.php:79
+msgid "Error updating contact property."
msgstr ""
-#: templates/part.addcardform.php:5
-msgid "Group"
+#: ajax/updateaddressbook.php:20
+msgid "Error updating addressbook."
msgstr ""
-#: templates/part.addcardform.php:12 templates/part.property.php:3
-msgid "Name"
+#: appinfo/app.php:21 templates/settings.php:3
+msgid "Contacts"
msgstr ""
-#: templates/part.addcardform.php:14
-msgid "Create Contact"
-msgstr ""
+#: lib/app.php:42
+msgid "This is not your addressbook."
+msgstr "Nu se găsește în agendă."
-#: templates/part.addpropertyform.php:4 templates/part.property.php:40
+#: lib/app.php:51 photo.php:34
+msgid "Contact could not be found."
+msgstr "Contactul nu a putut fi găsit."
+
+#: lib/app.php:79
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "Informațiile despre vCard sunt incorecte. Reîncărcați pagina."
+
+#: lib/app.php:91 templates/part.addcardform.php:54
+#: templates/part.property.php:45 templates/part.setpropertyform.php:7
msgid "Address"
-msgstr ""
+msgstr "Adresă"
-#: templates/part.addpropertyform.php:5
+#: lib/app.php:92 templates/part.addcardform.php:43
msgid "Telephone"
-msgstr ""
+msgstr "Telefon"
-#: templates/part.addpropertyform.php:6 templates/part.property.php:22
+#: lib/app.php:93 templates/part.addcardform.php:37
+#: templates/part.property.php:16 templates/part.setpropertyform.php:51
msgid "Email"
-msgstr ""
+msgstr "Email"
-#: templates/part.addpropertyform.php:7 templates/part.property.php:15
+#: lib/app.php:94 templates/part.addcardform.php:27
+#: templates/part.property.php:9 templates/part.setpropertyform.php:54
msgid "Organization"
-msgstr ""
+msgstr "Organizație"
-#: templates/part.addpropertyform.php:17 templates/part.addpropertyform.php:32
+#: lib/app.php:106 lib/app.php:113
msgid "Work"
-msgstr ""
+msgstr "Servici"
-#: templates/part.addpropertyform.php:18 templates/part.addpropertyform.php:30
+#: lib/app.php:107 lib/app.php:111
msgid "Home"
+msgstr "Acasă"
+
+#: lib/app.php:112
+msgid "Mobile"
+msgstr "Mobil"
+
+#: lib/app.php:114
+msgid "Text"
+msgstr "Text"
+
+#: lib/app.php:115
+msgid "Voice"
+msgstr "Voce"
+
+#: lib/app.php:116
+msgid "Fax"
+msgstr "Fax"
+
+#: lib/app.php:117
+msgid "Video"
+msgstr "Video"
+
+#: lib/app.php:118
+msgid "Pager"
+msgstr "Pager"
+
+#: lib/search.php:22
+msgid "Contact"
msgstr ""
-#: templates/part.addpropertyform.php:20 templates/part.property.php:48
-#: templates/part.setpropertyform.php:5
-msgid "PO Box"
+#: photo.php:40
+msgid "This is not your contact."
+msgstr "Nu este contactul tău"
+
+#: photo.php:48
+msgid "This card is not RFC compatible."
+msgstr "Nu este compatibil RFC"
+
+#: photo.php:85
+msgid "This card does not contain a photo."
+msgstr "Nu conține o fotografie"
+
+#: templates/index.php:6
+msgid "Add Contact"
+msgstr "Adaugă contact"
+
+#: templates/index.php:7
+msgid "Addressbooks"
msgstr ""
-#: templates/part.addpropertyform.php:21 templates/part.property.php:51
-#: templates/part.setpropertyform.php:6
-msgid "Extended"
+#: templates/part.addcardform.php:8
+msgid "Addressbook"
msgstr ""
-#: templates/part.addpropertyform.php:22 templates/part.property.php:54
-#: templates/part.setpropertyform.php:7
+#: templates/part.addcardform.php:21
+msgid "Name"
+msgstr "Nume"
+
+#: templates/part.addcardform.php:57 templates/part.details.php:43
+#: templates/part.details.php:79 templates/part.setpropertyform.php:10
+#: templates/part.setpropertyform.php:47
+msgid "Type"
+msgstr "Tip"
+
+#: templates/part.addcardform.php:65 templates/part.details.php:49
+#: templates/part.setpropertyform.php:16
+msgid "PO Box"
+msgstr "CP"
+
+#: templates/part.addcardform.php:72 templates/part.details.php:53
+#: templates/part.setpropertyform.php:20
+msgid "Extended"
+msgstr "Extins"
+
+#: templates/part.addcardform.php:78 templates/part.details.php:57
+#: templates/part.setpropertyform.php:24
msgid "Street"
-msgstr ""
+msgstr "Stradă"
-#: templates/part.addpropertyform.php:23 templates/part.property.php:57
-#: templates/part.setpropertyform.php:8
+#: templates/part.addcardform.php:84 templates/part.details.php:61
+#: templates/part.setpropertyform.php:28
msgid "City"
-msgstr ""
+msgstr "Oraș"
-#: templates/part.addpropertyform.php:24 templates/part.property.php:60
-#: templates/part.setpropertyform.php:9
+#: templates/part.addcardform.php:90 templates/part.details.php:65
+#: templates/part.setpropertyform.php:32
msgid "Region"
-msgstr ""
+msgstr "Regiune"
-#: templates/part.addpropertyform.php:25 templates/part.property.php:63
-#: templates/part.setpropertyform.php:10
+#: templates/part.addcardform.php:96 templates/part.details.php:69
+#: templates/part.setpropertyform.php:36
msgid "Zipcode"
-msgstr ""
+msgstr "Cod poștal"
-#: templates/part.addpropertyform.php:26 templates/part.property.php:66
-#: templates/part.setpropertyform.php:11
+#: templates/part.addcardform.php:102 templates/part.details.php:73
+#: templates/part.setpropertyform.php:40
msgid "Country"
-msgstr ""
+msgstr "Țară"
-#: templates/part.addpropertyform.php:31
-msgid "Mobile"
-msgstr ""
+#: templates/part.addcardform.php:109
+msgid "Create Contact"
+msgstr "Crează contact"
-#: templates/part.addpropertyform.php:33
-msgid "Text"
-msgstr ""
+#: templates/part.chooseaddressbook.php:1
+msgid "Choose active Address Books"
+msgstr "Alegeți una din agendele active"
-#: templates/part.addpropertyform.php:34
-msgid "Voice"
-msgstr ""
+#: templates/part.chooseaddressbook.php:16
+msgid "New Address Book"
+msgstr "Agendă nouă"
-#: templates/part.addpropertyform.php:35
-msgid "Fax"
-msgstr ""
+#: templates/part.chooseaddressbook.php:21
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "CardDav Link"
+msgstr "Link CardDev"
-#: templates/part.addpropertyform.php:36
-msgid "Video"
-msgstr ""
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Download"
+msgstr "Descarcă"
-#: templates/part.addpropertyform.php:37
-msgid "Pager"
-msgstr ""
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Edit"
+msgstr "Editează"
-#: templates/part.details.php:33
+#: templates/part.chooseaddressbook.rowfields.php:5
msgid "Delete"
+msgstr "Șterge"
+
+#: templates/part.details.php:3
+msgid "Download contact"
msgstr ""
+#: templates/part.details.php:4
+msgid "Delete contact"
+msgstr "Șterge contact"
+
#: templates/part.details.php:34
-msgid "Add Property"
+msgid "Add"
+msgstr "Adaugă"
+
+#: templates/part.editaddressbook.php:9
+msgid "New Addressbook"
msgstr ""
-#: templates/part.property.php:9
-msgid "Birthday"
+#: templates/part.editaddressbook.php:9
+msgid "Edit Addressbook"
msgstr ""
-#: templates/part.property.php:29
+#: templates/part.editaddressbook.php:12
+msgid "Displayname"
+msgstr "Numele afișat"
+
+#: templates/part.editaddressbook.php:23
+msgid "Active"
+msgstr "Activ"
+
+#: templates/part.editaddressbook.php:29
+msgid "Save"
+msgstr "Salvează"
+
+#: templates/part.editaddressbook.php:29
+msgid "Submit"
+msgstr "Trimite"
+
+#: templates/part.editaddressbook.php:30
+msgid "Cancel"
+msgstr "Anulează"
+
+#: templates/part.property.php:3
+msgid "Birthday"
+msgstr "Zi de naștere"
+
+#: templates/part.property.php:23
+msgid "Preferred"
+msgstr "Preferat"
+
+#: templates/part.property.php:23 templates/part.setpropertyform.php:45
msgid "Phone"
-msgstr ""
+msgstr "Telefon"
-#: templates/part.setpropertyform.php:17
-msgid "Edit"
+#: templates/part.setpropertyform.php:57
+msgid "Update"
+msgstr "Update"
+
+#: templates/settings.php:4
+msgid "CardDAV syncing address:"
msgstr ""
diff --git a/l10n/ro/core.po b/l10n/ro/core.po
index df95994f468..a1d3e867b1b 100644
--- a/l10n/ro/core.po
+++ b/l10n/ro/core.po
@@ -3,14 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Claudiu <claudiu@tanaselia.ro>, 2011.
+# Claudiu <claudiu@tanaselia.ro>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 18:17+0200\n"
-"PO-Revision-Date: 2011-09-05 11:11+0000\n"
-"Last-Translator: rawbeef64 <claudiu@tanaselia.ro>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-12 13:20+0000\n"
+"Last-Translator: Claudiu <claudiu@tanaselia.ro>\n"
"Language-Team: Romanian (http://www.transifex.net/projects/p/owncloud/team/ro/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,6 +18,52 @@ msgstr ""
"Language: ro\n"
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1))\n"
+#: lostpassword/index.php:24
+msgid "Owncloud password reset"
+msgstr "Resetare parolă Owncloud"
+
+#: lostpassword/templates/email.php:1
+msgid "Use the following link to reset your password: {link}"
+msgstr "Folosiți următorul link pentru a reseta parola: {link}"
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr ""
+"Veți primi la adresa de email un link prin care veți putea reseta parola"
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Requested"
+msgstr "Cerută"
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr "Autentificare eșuată"
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:22
+#: templates/login.php:8
+msgid "Username"
+msgstr "Utilizator"
+
+#: lostpassword/templates/lostpassword.php:14
+msgid "Request reset"
+msgstr "Cerere trimisă"
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr "Parola a fost resetată"
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr "Spre pagina de login"
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr "Noua parolă"
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr "Resetează parola"
+
#: strings.php:5
msgid "Personal"
msgstr "Personal"
@@ -46,54 +92,50 @@ msgstr "Nu s-a găsit"
msgid "Create an <strong>admin account</strong>"
msgstr "Crează un <strong>cont de administrator</strong>"
-#: templates/installation.php:21
-msgid "Username"
-msgstr "Utilizator"
-
-#: templates/installation.php:22
+#: templates/installation.php:26 templates/login.php:12
msgid "Password"
msgstr "Parola"
-#: templates/installation.php:27
+#: templates/installation.php:32
+msgid "Advanced"
+msgstr "Avansat"
+
+#: templates/installation.php:34
+msgid "Data folder"
+msgstr "Directorul cu date"
+
+#: templates/installation.php:41
msgid "Configure the database"
msgstr "Configurează baza de date"
-#: templates/installation.php:32 templates/installation.php:43
-#: templates/installation.php:53
+#: templates/installation.php:46 templates/installation.php:57
+#: templates/installation.php:67
msgid "will be used"
msgstr "vor fi folosite"
-#: templates/installation.php:64
+#: templates/installation.php:79
msgid "Database user"
msgstr "Utilizatorul bazei de date"
-#: templates/installation.php:65
+#: templates/installation.php:83
msgid "Database password"
msgstr "Parola bazei de date"
-#: templates/installation.php:66
+#: templates/installation.php:87
msgid "Database name"
msgstr "Numele bazei de date"
-#: templates/installation.php:72
-msgid "Advanced"
-msgstr "Avansat"
-
-#: templates/installation.php:75
+#: templates/installation.php:93
msgid "Database host"
msgstr "Baza de date"
-#: templates/installation.php:76
-msgid "Data folder"
-msgstr "Directorul cu date"
-
-#: templates/installation.php:79
+#: templates/installation.php:98
msgid "Finish setup"
msgstr "Finalizează instalarea"
#: templates/layout.guest.php:35
-msgid "gives you freedom and control over your own data"
-msgstr "îți oferă libertatea de a-ți controla datele"
+msgid "web services under your control"
+msgstr "Servicii web sub controlul tău"
#: templates/layout.user.php:34
msgid "Log out"
@@ -103,38 +145,22 @@ msgstr "Ieșire"
msgid "Settings"
msgstr "Setări"
-#: templates/login.php:4
+#: templates/login.php:5
msgid "Lost your password?"
msgstr "Ai uitat parola?"
-#: templates/login.php:9 templates/login.php:13
+#: templates/login.php:15
msgid "remember"
msgstr "ține minte"
+#: templates/login.php:16
+msgid "Log in"
+msgstr "Autentificare"
+
#: templates/logout.php:1
msgid "You are logged out."
msgstr "Ai ieșit"
-#: templates/lostpassword.php:3
-msgid "You will receive a link to reset your password via Email."
-msgstr "Vei primi prin email un link pentru resetarea parolei"
-
-#: templates/lostpassword.php:5
-msgid "Requested"
-msgstr "Cerută"
-
-#: templates/lostpassword.php:8
-msgid "Login failed!"
-msgstr "Autentificare eșuată!"
-
-#: templates/lostpassword.php:10
-msgid "Username or Email"
-msgstr "Utilizator sau email"
-
-#: templates/lostpassword.php:11
-msgid "Request reset"
-msgstr "Cere schimbarea parolei"
-
#: templates/part.pagenavi.php:3
msgid "prev"
msgstr "precedentul"
@@ -143,16 +169,4 @@ msgstr "precedentul"
msgid "next"
msgstr "următorul"
-#: templates/resetpassword.php:4
-msgid "Your password was reset"
-msgstr "Parola a fost schimbată"
-
-#: templates/resetpassword.php:6
-msgid "New password"
-msgstr "Parola nouă"
-
-#: templates/resetpassword.php:7
-msgid "Reset password"
-msgstr "Schimbă parola"
-
diff --git a/l10n/ro/files.po b/l10n/ro/files.po
index 00676c5fca6..c66c38c8c2e 100644
--- a/l10n/ro/files.po
+++ b/l10n/ro/files.po
@@ -3,14 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Claudiu <claudiu@tanaselia.ro>, 2011.
+# Claudiu <claudiu@tanaselia.ro>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-12 13:21+0000\n"
+"Last-Translator: Claudiu <claudiu@tanaselia.ro>\n"
"Language-Team: Romanian (http://www.transifex.net/projects/p/owncloud/team/ro/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,33 +18,37 @@ msgstr ""
"Language: ro\n"
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1))\n"
-#: ajax/upload.php:24
+#: ajax/upload.php:19
msgid "There is no error, the file uploaded with success"
-msgstr ""
+msgstr "Nu am întâmpinat nici eroare, fișierul a fost încărcat cu success"
-#: ajax/upload.php:25
+#: ajax/upload.php:20
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr ""
+"Fișierul are o dimensiune mai mare decât cea specificată în variabila "
+"upload_max_filesize din php.ini"
-#: ajax/upload.php:26
+#: ajax/upload.php:21
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
+"Fișierul are o dimensiune mai mare decât variabile MAX_FILE_SIZE specificată"
+" în formularul HTML"
-#: ajax/upload.php:27
+#: ajax/upload.php:22
msgid "The uploaded file was only partially uploaded"
-msgstr ""
+msgstr "Fișierul a fost încărcat doar parțial"
-#: ajax/upload.php:28
+#: ajax/upload.php:23
msgid "No file was uploaded"
-msgstr ""
+msgstr "Nu a fost încărcat nici un fișier"
-#: ajax/upload.php:29
+#: ajax/upload.php:24
msgid "Missing a temporary folder"
-msgstr ""
+msgstr "Lipsă folder temporar"
-#: appinfo/app.php:7
+#: appinfo/app.php:8
msgid "Files"
msgstr "Fișiere"
@@ -52,43 +56,55 @@ msgstr "Fișiere"
msgid "Maximum upload size"
msgstr "Dimensiunea maximă"
+#: templates/index.php:7
+msgid "New"
+msgstr "Nou"
+
#: templates/index.php:10
+msgid "Text file"
+msgstr "Fișier text"
+
+#: templates/index.php:11
+msgid "Folder"
+msgstr "Dosar"
+
+#: templates/index.php:12
+msgid "From the web"
+msgstr "De pe internet"
+
+#: templates/index.php:22
msgid "Upload"
msgstr "Încarcă"
-#: templates/index.php:17
-msgid "New Folder"
-msgstr "Director nou"
-
-#: templates/index.php:31
+#: templates/index.php:35
msgid "Nothing in here. Upload something!"
msgstr "Nici un fișier, încarcă ceva!"
-#: templates/index.php:39
+#: templates/index.php:43
msgid "Name"
msgstr "Nume"
-#: templates/index.php:41
+#: templates/index.php:45
msgid "Download"
msgstr "Descarcă"
-#: templates/index.php:45
+#: templates/index.php:49
msgid "Size"
msgstr "Dimensiune"
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Modified"
msgstr "Modificat"
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Delete"
msgstr "Șterge"
-#: templates/index.php:54
+#: templates/index.php:58
msgid "Upload too large"
msgstr "Fișierul este prea mare"
-#: templates/index.php:56
+#: templates/index.php:60
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
diff --git a/l10n/ro/gallery.po b/l10n/ro/gallery.po
new file mode 100644
index 00000000000..decdaf40924
--- /dev/null
+++ b/l10n/ro/gallery.po
@@ -0,0 +1,32 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:48+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Romanian (http://www.transifex.net/projects/p/owncloud/team/ro/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ro\n"
+"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1))\n"
+
+#: appinfo/app.php:41
+msgid "Gallery"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Rescan"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+
diff --git a/l10n/ro/media.po b/l10n/ro/media.po
index f6c99afa9b2..17f7d45cd18 100644
--- a/l10n/ro/media.po
+++ b/l10n/ro/media.po
@@ -2,14 +2,15 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
+# Translators:
# Claudiu <claudiu@tanaselia.ro>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
-"Report-Msgid-Bugs-To: http://bugs.kde.org/buglist.cgi?product=owncloud\n"
-"POT-Creation-Date: 2011-09-03 14:50+0200\n"
-"PO-Revision-Date: 2011-08-31 08:19+0000\n"
-"Last-Translator: rawbeef64 <claudiu@tanaselia.ro>\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Romanian (http://www.transifex.net/projects/p/owncloud/team/ro/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,15 +18,15 @@ msgstr ""
"Language: ro\n"
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1))\n"
-#: appinfo/app.php:31
+#: appinfo/app.php:32
msgid "Music"
msgstr "Muzică"
-#: templates/music.php:3
+#: templates/music.php:3 templates/player.php:13
msgid "Play"
msgstr "Play"
-#: templates/music.php:4 templates/music.php:30
+#: templates/music.php:4 templates/music.php:26 templates/player.php:14
msgid "Pause"
msgstr "Pauză"
@@ -33,7 +34,7 @@ msgstr "Pauză"
msgid "Previous"
msgstr "Precedent"
-#: templates/music.php:6
+#: templates/music.php:6 templates/player.php:15
msgid "Next"
msgstr "Următor"
@@ -45,11 +46,7 @@ msgstr "Fără sonor"
msgid "Unmute"
msgstr "Cu sonor"
-#: templates/music.php:28
-msgid "Songs scanned"
-msgstr "Melodii scanate"
-
-#: templates/music.php:29
+#: templates/music.php:25
msgid "Rescan Collection"
msgstr "Rescanează colecția"
diff --git a/l10n/ro/settings.po b/l10n/ro/settings.po
index 76980cd737e..b6151572e85 100644
--- a/l10n/ro/settings.po
+++ b/l10n/ro/settings.po
@@ -2,14 +2,15 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
-# Claudiu <claudiu@tanaselia.ro>, 2011.
+# Translators:
+# Claudiu <claudiu@tanaselia.ro>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
-"Report-Msgid-Bugs-To: http://bugs.kde.org/buglist.cgi?product=owncloud\n"
-"POT-Creation-Date: 2011-09-03 14:50+0200\n"
-"PO-Revision-Date: 2011-08-31 08:24+0000\n"
-"Last-Translator: rawbeef64 <claudiu@tanaselia.ro>\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-12 13:22+0000\n"
+"Last-Translator: Claudiu <claudiu@tanaselia.ro>\n"
"Language-Team: Romanian (http://www.transifex.net/projects/p/owncloud/team/ro/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,22 +18,26 @@ msgstr ""
"Language: ro\n"
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1))\n"
-#: ajax/openid.php:13 ajax/setlanguage.php:13
-msgid "Authentication error"
-msgstr "Eroare autentificare"
+#: ajax/lostpassword.php:14
+msgid "email Changed"
+msgstr "email schimbat"
-#: ajax/openid.php:21
-msgid "OpenID Changed"
-msgstr "OpenID schimbat"
-
-#: ajax/openid.php:23 ajax/setlanguage.php:23
+#: ajax/lostpassword.php:16 ajax/openid.php:17 ajax/setlanguage.php:16
msgid "Invalid request"
msgstr "Cerere eronată"
-#: ajax/setlanguage.php:21
+#: ajax/openid.php:15
+msgid "OpenID Changed"
+msgstr "OpenID schimbat"
+
+#: ajax/setlanguage.php:14
msgid "Language changed"
msgstr "Limba a fost schimbată"
+#: templates/admin.php:13
+msgid "Log level"
+msgstr "Nivel log-uri"
+
#: templates/apps.php:8
msgid "Add your application"
msgstr "Adaugă propria ta aplicație"
@@ -53,15 +58,15 @@ msgstr "de"
msgid "Ask a question"
msgstr "Întreabă"
-#: templates/help.php:17
+#: templates/help.php:20
msgid "Problems connecting to help database."
msgstr "Sunt probleme cu conectarea la baza de date"
-#: templates/help.php:18
+#: templates/help.php:21
msgid "Go there manually."
msgstr "Manual"
-#: templates/help.php:26
+#: templates/help.php:29
msgid "Answer"
msgstr "Răspuns"
@@ -97,37 +102,53 @@ msgstr "arată"
msgid "Change password"
msgstr "Schimbă parola"
-#: templates/personal.php:24 templates/personal.php:25
+#: templates/personal.php:24
+msgid "Email"
+msgstr "Email"
+
+#: templates/personal.php:25
+msgid "Your email address"
+msgstr "Adresa ta de email"
+
+#: templates/personal.php:26
+msgid "Fill in an email address to enable password recovery"
+msgstr "Completați adresa de mail pentru a vă putea recupera parola"
+
+#: templates/personal.php:32 templates/personal.php:33
msgid "Language"
msgstr "Limba"
-#: templates/personal.php:30
-msgid "Help translating"
-msgstr "Ajută la traducere"
+#: templates/personal.php:38
+msgid "Help translate"
+msgstr "Ajutați la traducere"
-#: templates/personal.php:36
+#: templates/personal.php:45
msgid "use this address to connect to your ownCloud in your file manager"
msgstr ""
"folosește această adresă pentru a te conecta la managerul tău de fișiere din"
" ownCloud"
-#: templates/users.php:16
+#: templates/users.php:15 templates/users.php:30
msgid "Name"
msgstr "Nume"
-#: templates/users.php:17
+#: templates/users.php:16 templates/users.php:31
msgid "Password"
msgstr "Parola"
-#: templates/users.php:18 templates/users.php:36
+#: templates/users.php:17 templates/users.php:32 templates/users.php:46
msgid "Groups"
msgstr "Grupuri"
-#: templates/users.php:24
+#: templates/users.php:23
msgid "Create"
msgstr "Crează"
-#: templates/users.php:48
+#: templates/users.php:33
+msgid "Quota"
+msgstr "Quota"
+
+#: templates/users.php:58
msgid "Delete"
msgstr "Șterge"
diff --git a/l10n/ru/calendar.po b/l10n/ru/calendar.po
index f2879ad1504..ced4bad48e3 100644
--- a/l10n/ru/calendar.po
+++ b/l10n/ru/calendar.po
@@ -9,9 +9,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Russian (http://www.transifex.net/projects/p/owncloud/team/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,321 +19,403 @@ msgstr ""
"Language: ru\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
-#: ajax/createcalendar.php:18 ajax/settimezone.php:19
-#: ajax/updatecalendar.php:18
-msgid "Authentication error"
-msgstr "Ошибка аутентификации"
-
-#: ajax/editeventform.php:25
-msgid "Wrong calendar"
-msgstr "Неверный календарь"
+#: ajax/guesstimezone.php:42
+msgid "New Timezone:"
+msgstr ""
-#: ajax/settimezone.php:27
+#: ajax/settimezone.php:22
msgid "Timezone changed"
msgstr "Часовой пояс изменён"
-#: ajax/settimezone.php:29
+#: ajax/settimezone.php:24
msgid "Invalid request"
msgstr "Неверный запрос"
-#: appinfo/app.php:19 templates/part.eventform.php:27
-#: templates/part.eventinfo.php:18
+#: appinfo/app.php:20 templates/calendar.php:13
+#: templates/part.eventform.php:20
msgid "Calendar"
msgstr "Календарь"
-#: lib/object.php:292
+#: lib/app.php:19
+msgid "Wrong calendar"
+msgstr "Неверный календарь"
+
+#: lib/app.php:60 lib/object.php:332
msgid "Birthday"
msgstr "День рождения"
-#: lib/object.php:293
+#: lib/app.php:61 lib/object.php:333
msgid "Business"
msgstr "Бизнес"
-#: lib/object.php:294
+#: lib/app.php:62 lib/object.php:334
msgid "Call"
msgstr "Звонить"
-#: lib/object.php:295
+#: lib/app.php:63 lib/object.php:335
msgid "Clients"
msgstr "Клиенты"
-#: lib/object.php:296
+#: lib/app.php:64 lib/object.php:336
msgid "Deliverer"
msgstr "Доставщик"
-#: lib/object.php:297
+#: lib/app.php:65 lib/object.php:337
msgid "Holidays"
msgstr "Праздники"
-#: lib/object.php:298
+#: lib/app.php:66 lib/object.php:338
msgid "Ideas"
msgstr "Идеи"
-#: lib/object.php:299
+#: lib/app.php:67 lib/object.php:339
msgid "Journey"
msgstr "Поездка"
-#: lib/object.php:300
+#: lib/app.php:68 lib/object.php:340
msgid "Jubilee"
msgstr "Юбилей"
-#: lib/object.php:301
+#: lib/app.php:69 lib/object.php:341
msgid "Meeting"
msgstr "Встреча"
-#: lib/object.php:302
+#: lib/app.php:70 lib/object.php:342
msgid "Other"
msgstr "Другое"
-#: lib/object.php:303
+#: lib/app.php:71 lib/object.php:343
msgid "Personal"
msgstr "Личное"
-#: lib/object.php:304
+#: lib/app.php:72 lib/object.php:344
msgid "Projects"
msgstr "Проекты"
-#: lib/object.php:305
+#: lib/app.php:73 lib/object.php:345
msgid "Questions"
msgstr "Вопросы"
-#: lib/object.php:306
+#: lib/app.php:74 lib/object.php:346
msgid "Work"
msgstr "Работа"
-#: lib/object.php:313
+#: lib/object.php:353
msgid "Does not repeat"
msgstr "Не повторяется"
-#: lib/object.php:314
+#: lib/object.php:354
msgid "Daily"
msgstr "Ежедневно"
-#: lib/object.php:315
+#: lib/object.php:355
msgid "Weekly"
msgstr "Еженедельно"
-#: lib/object.php:316
+#: lib/object.php:356
msgid "Every Weekday"
msgstr "По будням"
-#: lib/object.php:317
+#: lib/object.php:357
msgid "Bi-Weekly"
msgstr "Каждые две недели"
-#: lib/object.php:318
+#: lib/object.php:358
msgid "Monthly"
msgstr "Каждый месяц"
-#: lib/object.php:319
+#: lib/object.php:359
msgid "Yearly"
msgstr "Каждый год"
-#: lib/object.php:337
-msgid "Not an array"
-msgstr "Не массив"
+#: lib/object.php:366
+msgid "never"
+msgstr ""
-#: templates/calendar.php:3
-msgid "All day"
-msgstr "Весь день"
+#: lib/object.php:367
+msgid "by occurrences"
+msgstr ""
-#: templates/calendar.php:32
-msgid "Sunday"
-msgstr "Воскресенье"
+#: lib/object.php:368
+msgid "by date"
+msgstr ""
+
+#: lib/object.php:375
+msgid "by monthday"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:376
+msgid "by weekday"
+msgstr ""
+
+#: lib/object.php:383 templates/lAfix.php:3
msgid "Monday"
-msgstr "Понедельник"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:384 templates/lAfix.php:4
msgid "Tuesday"
-msgstr "Вторник"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:385 templates/lAfix.php:5
msgid "Wednesday"
-msgstr "Среда"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:386 templates/lAfix.php:6
msgid "Thursday"
-msgstr "Четверг"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:387 templates/lAfix.php:7
msgid "Friday"
-msgstr "Пятница"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:388 templates/lAfix.php:8
msgid "Saturday"
-msgstr "Суббота"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Sun."
-msgstr "Вс."
+#: lib/object.php:389 templates/lAfix.php:2
+msgid "Sunday"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Mon."
-msgstr "Пн."
+#: lib/object.php:396
+msgid "events week of month"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Tue."
-msgstr "Вт."
+#: lib/object.php:397
+msgid "first"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Wed."
-msgstr "Ср."
+#: lib/object.php:398
+msgid "second"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Thu."
-msgstr "Чт."
+#: lib/object.php:399
+msgid "third"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Fri."
-msgstr "Пт."
+#: lib/object.php:400
+msgid "fourth"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Sat."
-msgstr "Сб."
+#: lib/object.php:401
+msgid "fifth"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:402
+msgid "last"
+msgstr ""
+
+#: lib/object.php:424 templates/lAfix.php:16
msgid "January"
-msgstr "Январь"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:425 templates/lAfix.php:17
msgid "February"
-msgstr "Февраль"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:426 templates/lAfix.php:18
msgid "March"
-msgstr "Март"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:427 templates/lAfix.php:19
msgid "April"
-msgstr "Апрель"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:428 templates/lAfix.php:20
msgid "May"
-msgstr "Май"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:429 templates/lAfix.php:21
msgid "June"
-msgstr "Июнь"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:430 templates/lAfix.php:22
msgid "July"
-msgstr "Июль"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:431 templates/lAfix.php:23
msgid "August"
-msgstr "Август"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:432 templates/lAfix.php:24
msgid "September"
-msgstr "Сентябрь"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:433 templates/lAfix.php:25
msgid "October"
-msgstr "Октябрь"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:434 templates/lAfix.php:26
msgid "November"
-msgstr "Ноябрь"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:435 templates/lAfix.php:27
msgid "December"
-msgstr "Декабрь"
-
-#: templates/calendar.php:35
-msgid "Jan."
-msgstr "Янв."
+msgstr ""
-#: templates/calendar.php:35
-msgid "Feb."
-msgstr "Фев."
+#: lib/object.php:441
+msgid "by events date"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Mar."
-msgstr "Мар."
+#: lib/object.php:442
+msgid "by yearday(s)"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Apr."
-msgstr "Апр."
+#: lib/object.php:443
+msgid "by weeknumber(s)"
+msgstr ""
-#: templates/calendar.php:35
-msgid "May."
-msgstr "Май."
+#: lib/object.php:444
+msgid "by day and month"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Jun."
-msgstr "Июн."
+#: lib/object.php:467
+msgid "Not an array"
+msgstr "Не массив"
-#: templates/calendar.php:35
-msgid "Jul."
-msgstr "Июл."
+#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+msgid "Date"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Aug."
-msgstr "Авг."
+#: lib/search.php:40
+msgid "Cal."
+msgstr ""
-#: templates/calendar.php:35
-msgid "Sep."
-msgstr "Сен."
+#: templates/calendar.php:10
+msgid "All day"
+msgstr "Весь день"
-#: templates/calendar.php:35
-msgid "Oct."
-msgstr "Окт."
+#: templates/calendar.php:11
+msgid "Missing fields"
+msgstr "Незаполненные поля"
-#: templates/calendar.php:35
-msgid "Nov."
-msgstr "Ноя."
+#: templates/calendar.php:12 templates/part.eventform.php:3
+msgid "Title"
+msgstr "Название"
-#: templates/calendar.php:35
-msgid "Dec."
-msgstr "Дек."
+#: templates/calendar.php:14
+msgid "From Date"
+msgstr "Дата начала"
-#: templates/calendar.php:36 templates/calendar.php:50
-#: templates/calendar.php:116
-msgid "Week"
-msgstr "Неделя"
+#: templates/calendar.php:15
+msgid "From Time"
+msgstr "Время начала"
-#: templates/calendar.php:37 templates/calendar.php:51
-msgid "Weeks"
-msgstr "Недели"
+#: templates/calendar.php:16
+msgid "To Date"
+msgstr "Дата окончания"
-#: templates/calendar.php:38
-msgid "More before {startdate}"
-msgstr "Еще до {startdate}"
+#: templates/calendar.php:17
+msgid "To Time"
+msgstr "Время окончания"
-#: templates/calendar.php:39
-msgid "More after {enddate}"
-msgstr "Больше после {startdate}"
+#: templates/calendar.php:18
+msgid "The event ends before it starts"
+msgstr "Окончание события раньше, чем его начало"
-#: templates/calendar.php:49
-msgid "Day"
-msgstr "День"
+#: templates/calendar.php:19
+msgid "There was a database fail"
+msgstr "Ошибка базы данных"
#: templates/calendar.php:52
+msgid "Week"
+msgstr "Неделя"
+
+#: templates/calendar.php:53
msgid "Month"
msgstr "Месяц"
-#: templates/calendar.php:53
+#: templates/calendar.php:54
msgid "List"
msgstr "Список"
-#: templates/calendar.php:58
+#: templates/calendar.php:59
msgid "Today"
msgstr "Сегодня"
-#: templates/calendar.php:59
+#: templates/calendar.php:60
msgid "Calendars"
msgstr "Календари"
-#: templates/calendar.php:76 templates/calendar.php:94
-msgid "Time"
-msgstr "Время"
-
-#: templates/calendar.php:169
+#: templates/calendar.php:78
msgid "There was a fail, while parsing the file."
msgstr "Не удалось обработать файл."
+#: templates/lAfix.php:9
+msgid "Sun."
+msgstr ""
+
+#: templates/lAfix.php:10
+msgid "Mon."
+msgstr ""
+
+#: templates/lAfix.php:11
+msgid "Tue."
+msgstr ""
+
+#: templates/lAfix.php:12
+msgid "Wed."
+msgstr ""
+
+#: templates/lAfix.php:13
+msgid "Thu."
+msgstr ""
+
+#: templates/lAfix.php:14
+msgid "Fri."
+msgstr ""
+
+#: templates/lAfix.php:15
+msgid "Sat."
+msgstr ""
+
+#: templates/lAfix.php:28
+msgid "Jan."
+msgstr ""
+
+#: templates/lAfix.php:29
+msgid "Feb."
+msgstr ""
+
+#: templates/lAfix.php:30
+msgid "Mar."
+msgstr ""
+
+#: templates/lAfix.php:31
+msgid "Apr."
+msgstr ""
+
+#: templates/lAfix.php:32
+msgid "May."
+msgstr ""
+
+#: templates/lAfix.php:33
+msgid "Jun."
+msgstr ""
+
+#: templates/lAfix.php:34
+msgid "Jul."
+msgstr ""
+
+#: templates/lAfix.php:35
+msgid "Aug."
+msgstr ""
+
+#: templates/lAfix.php:36
+msgid "Sep."
+msgstr ""
+
+#: templates/lAfix.php:37
+msgid "Oct."
+msgstr ""
+
+#: templates/lAfix.php:38
+msgid "Nov."
+msgstr ""
+
+#: templates/lAfix.php:39
+msgid "Dec."
+msgstr ""
+
#: templates/part.choosecalendar.php:1
msgid "Choose active calendars"
msgstr "Выберите активные календари"
@@ -352,14 +434,13 @@ msgid "Download"
msgstr "Скачать"
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.eventinfo.php:64
msgid "Edit"
msgstr "Редактировать"
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.editevent.php:8
+#: templates/part.editevent.php:9
msgid "Delete"
-msgstr ""
+msgstr "Удалить"
#: templates/part.editcalendar.php:9
msgid "New calendar"
@@ -377,90 +458,181 @@ msgstr "Отображаемое имя"
msgid "Active"
msgstr "Активен"
-#: templates/part.editcalendar.php:29 templates/part.eventform.php:88
-#: templates/part.eventinfo.php:58
-msgid "Description"
-msgstr "Описание"
-
-#: templates/part.editcalendar.php:35
+#: templates/part.editcalendar.php:29
msgid "Calendar color"
msgstr "Цвет календаря"
-#: templates/part.editcalendar.php:41
+#: templates/part.editcalendar.php:42
msgid "Save"
msgstr "Сохранить"
-#: templates/part.editcalendar.php:41 templates/part.editevent.php:7
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
#: templates/part.newevent.php:6
msgid "Submit"
msgstr "Отправить"
-#: templates/part.editcalendar.php:42
+#: templates/part.editcalendar.php:43
msgid "Cancel"
msgstr "Отмена"
-#: templates/part.editevent.php:1 templates/part.eventinfo.php:1
+#: templates/part.editevent.php:1
msgid "Edit an event"
msgstr "Редактировать событие"
-#: templates/part.eventform.php:3 templates/part.eventinfo.php:4
-msgid "Title"
-msgstr "Название"
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr "Экспортировать"
#: templates/part.eventform.php:5
msgid "Title of the Event"
msgstr "Название событие"
-#: templates/part.eventform.php:9 templates/part.eventinfo.php:9
-msgid "Location"
-msgstr "Место"
-
#: templates/part.eventform.php:11
-msgid "Location of the Event"
-msgstr "Место события"
-
-#: templates/part.eventform.php:17 templates/part.eventinfo.php:16
msgid "Category"
msgstr "Категория"
-#: templates/part.eventform.php:19
+#: templates/part.eventform.php:13
msgid "Select category"
msgstr "Выбрать категорию"
-#: templates/part.eventform.php:45 templates/part.eventinfo.php:28
+#: templates/part.eventform.php:37
msgid "All Day Event"
msgstr "Событие на весь день"
-#: templates/part.eventform.php:49 templates/part.eventinfo.php:31
+#: templates/part.eventform.php:41
msgid "From"
msgstr "От"
-#: templates/part.eventform.php:57 templates/part.eventinfo.php:38
+#: templates/part.eventform.php:49
msgid "To"
msgstr "До"
-#: templates/part.eventform.php:65 templates/part.eventinfo.php:44
+#: templates/part.eventform.php:57
+msgid "Advanced options"
+msgstr "Дополнительные параметры"
+
+#: templates/part.eventform.php:61
msgid "Repeat"
msgstr "Повтор"
-#: templates/part.eventform.php:81 templates/part.eventinfo.php:51
-msgid "Attendees"
-msgstr "Присутствующие"
+#: templates/part.eventform.php:68
+msgid "Advanced"
+msgstr ""
+
+#: templates/part.eventform.php:112
+msgid "Select weekdays"
+msgstr ""
+
+#: templates/part.eventform.php:125 templates/part.eventform.php:138
+msgid "Select days"
+msgstr ""
+
+#: templates/part.eventform.php:130
+msgid "and the events day of year."
+msgstr ""
+
+#: templates/part.eventform.php:143
+msgid "and the events day of month."
+msgstr ""
+
+#: templates/part.eventform.php:151
+msgid "Select months"
+msgstr ""
+
+#: templates/part.eventform.php:164
+msgid "Select weeks"
+msgstr ""
+
+#: templates/part.eventform.php:169
+msgid "and the events week of year."
+msgstr ""
+
+#: templates/part.eventform.php:175
+msgid "Interval"
+msgstr ""
+
+#: templates/part.eventform.php:181
+msgid "End"
+msgstr ""
+
+#: templates/part.eventform.php:193
+msgid "occurrences"
+msgstr ""
+
+#: templates/part.eventform.php:208
+msgid "Location"
+msgstr "Место"
+
+#: templates/part.eventform.php:210
+msgid "Location of the Event"
+msgstr "Место события"
+
+#: templates/part.eventform.php:216
+msgid "Description"
+msgstr "Описание"
-#: templates/part.eventform.php:89
+#: templates/part.eventform.php:218
msgid "Description of the Event"
msgstr "Описание события"
-#: templates/part.eventinfo.php:63
-msgid "Close"
-msgstr "Закрыть"
+#: templates/part.import.php:1
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the calendar"
+msgstr "Пожалуйста, выберите календарь"
+
+#: templates/part.import.php:10
+msgid "create a new calendar"
+msgstr ""
+
+#: templates/part.import.php:15
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import"
+msgstr "Импортировать"
+
+#: templates/part.import.php:20
+msgid "Importing calendar"
+msgstr ""
+
+#: templates/part.import.php:23
+msgid "Calendar imported successfully"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Close Dialog"
+msgstr ""
#: templates/part.newevent.php:1
msgid "Create a new event"
msgstr "Создать новое событие"
-#: templates/settings.php:11
+#: templates/settings.php:13
msgid "Timezone"
msgstr "Часовой пояс"
+#: templates/settings.php:30
+msgid "Check always for changes of the timezone"
+msgstr ""
+
+#: templates/settings.php:32
+msgid "Timeformat"
+msgstr "Формат времени"
+
+#: templates/settings.php:34
+msgid "24h"
+msgstr "24ч"
+
+#: templates/settings.php:35
+msgid "12h"
+msgstr "12ч"
+
+#: templates/settings.php:41
+msgid "Calendar CalDAV syncing address:"
+msgstr "Адрес синхронизации календаря CalDAV:"
+
diff --git a/l10n/ru/contacts.po b/l10n/ru/contacts.po
index d571caba891..9dad5b14158 100644
--- a/l10n/ru/contacts.po
+++ b/l10n/ru/contacts.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <tony.mccourin@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 20:10+0200\n"
-"PO-Revision-Date: 2011-09-23 18:10+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Russian (http://www.transifex.net/projects/p/owncloud/team/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,164 +18,273 @@ msgstr ""
"Language: ru\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
-#: ajax/addcard.php:31 ajax/addproperty.php:31 ajax/deletebook.php:32
-#: ajax/deletecard.php:32 ajax/deleteproperty.php:34 ajax/getdetails.php:32
-#: ajax/setproperty.php:32 ajax/showaddcard.php:30 ajax/showaddproperty.php:31
-#: ajax/showsetproperty.php:32 photo.php:32
-msgid "You need to log in."
+#: ajax/activation.php:17 ajax/updateaddressbook.php:26
+msgid "Error (de)activating addressbook."
msgstr ""
-#: ajax/addcard.php:37
-msgid "This is not your addressbook."
+#: ajax/addcard.php:79
+msgid "There was an error adding the contact."
msgstr ""
-#: ajax/addproperty.php:37 ajax/deletecard.php:39 ajax/deleteproperty.php:41
-#: ajax/getdetails.php:39 ajax/setproperty.php:38 ajax/showaddproperty.php:37
-#: ajax/showsetproperty.php:38 photo.php:39
-msgid "Contact could not be found."
+#: ajax/addproperty.php:39
+msgid "Cannot add empty property."
msgstr ""
-#: ajax/addproperty.php:43 ajax/deletebook.php:38 ajax/deletecard.php:45
-#: ajax/deleteproperty.php:47 ajax/getdetails.php:45 ajax/setproperty.php:44
-#: ajax/showaddproperty.php:43 ajax/showsetproperty.php:44 photo.php:45
-msgid "This is not your contact."
+#: ajax/addproperty.php:51
+msgid "At least one of the address fields has to be filled out."
msgstr ""
-#: ajax/addproperty.php:50 ajax/deleteproperty.php:54 ajax/getdetails.php:52
-#: ajax/setproperty.php:51 ajax/showsetproperty.php:51
-msgid "vCard could not be read."
+#: ajax/addproperty.php:77
+msgid "Error adding contact property."
msgstr ""
-#: ajax/deleteproperty.php:65 ajax/setproperty.php:62
-#: ajax/showsetproperty.php:62
-msgid "Information about vCard is incorrect. Please reload the page."
+#: ajax/createaddressbook.php:20
+msgid "Error adding addressbook."
msgstr ""
-#: photo.php:53
-msgid "This card is not RFC compatible."
+#: ajax/createaddressbook.php:26
+msgid "Error activating addressbook."
msgstr ""
-#: photo.php:90
-msgid "This card does not contain a photo."
+#: ajax/deleteproperty.php:40
+msgid "Error deleting contact property."
msgstr ""
-#: templates/index.php:8
-msgid "Add Contact"
+#: ajax/setproperty.php:79
+msgid "Error updating contact property."
msgstr ""
-#: templates/part.addcardform.php:5
-msgid "Group"
+#: ajax/updateaddressbook.php:20
+msgid "Error updating addressbook."
msgstr ""
-#: templates/part.addcardform.php:12 templates/part.property.php:3
-msgid "Name"
+#: appinfo/app.php:21 templates/settings.php:3
+msgid "Contacts"
msgstr ""
-#: templates/part.addcardform.php:14
-msgid "Create Contact"
-msgstr ""
+#: lib/app.php:42
+msgid "This is not your addressbook."
+msgstr "Это не ваша адресная книга."
-#: templates/part.addpropertyform.php:4 templates/part.property.php:40
+#: lib/app.php:51 photo.php:34
+msgid "Contact could not be found."
+msgstr "Контакт не найден."
+
+#: lib/app.php:79
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "Информация о vCard некорректна. Пожалуйста, обновите страницу."
+
+#: lib/app.php:91 templates/part.addcardform.php:54
+#: templates/part.property.php:45 templates/part.setpropertyform.php:7
msgid "Address"
-msgstr ""
+msgstr "Адрес"
-#: templates/part.addpropertyform.php:5
+#: lib/app.php:92 templates/part.addcardform.php:43
msgid "Telephone"
-msgstr ""
+msgstr "Телефон"
-#: templates/part.addpropertyform.php:6 templates/part.property.php:22
+#: lib/app.php:93 templates/part.addcardform.php:37
+#: templates/part.property.php:16 templates/part.setpropertyform.php:51
msgid "Email"
-msgstr ""
+msgstr "Ящик эл. почты"
-#: templates/part.addpropertyform.php:7 templates/part.property.php:15
+#: lib/app.php:94 templates/part.addcardform.php:27
+#: templates/part.property.php:9 templates/part.setpropertyform.php:54
msgid "Organization"
-msgstr ""
+msgstr "Организация"
-#: templates/part.addpropertyform.php:17 templates/part.addpropertyform.php:32
+#: lib/app.php:106 lib/app.php:113
msgid "Work"
-msgstr ""
+msgstr "Рабочий"
-#: templates/part.addpropertyform.php:18 templates/part.addpropertyform.php:30
+#: lib/app.php:107 lib/app.php:111
msgid "Home"
+msgstr "Домашний"
+
+#: lib/app.php:112
+msgid "Mobile"
+msgstr "Мобильный"
+
+#: lib/app.php:114
+msgid "Text"
+msgstr "Текст"
+
+#: lib/app.php:115
+msgid "Voice"
+msgstr "Голос"
+
+#: lib/app.php:116
+msgid "Fax"
+msgstr "Факс"
+
+#: lib/app.php:117
+msgid "Video"
+msgstr "Видео"
+
+#: lib/app.php:118
+msgid "Pager"
+msgstr "Пейджер"
+
+#: lib/search.php:22
+msgid "Contact"
msgstr ""
-#: templates/part.addpropertyform.php:20 templates/part.property.php:48
-#: templates/part.setpropertyform.php:5
-msgid "PO Box"
+#: photo.php:40
+msgid "This is not your contact."
+msgstr "Это не контакт."
+
+#: photo.php:48
+msgid "This card is not RFC compatible."
+msgstr "Эта карточка не соответствует RFC."
+
+#: photo.php:85
+msgid "This card does not contain a photo."
+msgstr "Эта карточка не содержит фотографии."
+
+#: templates/index.php:6
+msgid "Add Contact"
+msgstr "Добавить Контакт"
+
+#: templates/index.php:7
+msgid "Addressbooks"
msgstr ""
-#: templates/part.addpropertyform.php:21 templates/part.property.php:51
-#: templates/part.setpropertyform.php:6
-msgid "Extended"
+#: templates/part.addcardform.php:8
+msgid "Addressbook"
msgstr ""
-#: templates/part.addpropertyform.php:22 templates/part.property.php:54
-#: templates/part.setpropertyform.php:7
-msgid "Street"
+#: templates/part.addcardform.php:21
+msgid "Name"
+msgstr "Имя"
+
+#: templates/part.addcardform.php:57 templates/part.details.php:43
+#: templates/part.details.php:79 templates/part.setpropertyform.php:10
+#: templates/part.setpropertyform.php:47
+msgid "Type"
msgstr ""
-#: templates/part.addpropertyform.php:23 templates/part.property.php:57
-#: templates/part.setpropertyform.php:8
+#: templates/part.addcardform.php:65 templates/part.details.php:49
+#: templates/part.setpropertyform.php:16
+msgid "PO Box"
+msgstr "АО"
+
+#: templates/part.addcardform.php:72 templates/part.details.php:53
+#: templates/part.setpropertyform.php:20
+msgid "Extended"
+msgstr "Расширенный"
+
+#: templates/part.addcardform.php:78 templates/part.details.php:57
+#: templates/part.setpropertyform.php:24
+msgid "Street"
+msgstr "Улица"
+
+#: templates/part.addcardform.php:84 templates/part.details.php:61
+#: templates/part.setpropertyform.php:28
msgid "City"
-msgstr ""
+msgstr "Город"
-#: templates/part.addpropertyform.php:24 templates/part.property.php:60
-#: templates/part.setpropertyform.php:9
+#: templates/part.addcardform.php:90 templates/part.details.php:65
+#: templates/part.setpropertyform.php:32
msgid "Region"
-msgstr ""
+msgstr "Область"
-#: templates/part.addpropertyform.php:25 templates/part.property.php:63
-#: templates/part.setpropertyform.php:10
+#: templates/part.addcardform.php:96 templates/part.details.php:69
+#: templates/part.setpropertyform.php:36
msgid "Zipcode"
-msgstr ""
+msgstr "Почтовый индекс"
-#: templates/part.addpropertyform.php:26 templates/part.property.php:66
-#: templates/part.setpropertyform.php:11
+#: templates/part.addcardform.php:102 templates/part.details.php:73
+#: templates/part.setpropertyform.php:40
msgid "Country"
+msgstr "Страна"
+
+#: templates/part.addcardform.php:109
+msgid "Create Contact"
+msgstr "Создать Контакт"
+
+#: templates/part.chooseaddressbook.php:1
+msgid "Choose active Address Books"
msgstr ""
-#: templates/part.addpropertyform.php:31
-msgid "Mobile"
+#: templates/part.chooseaddressbook.php:16
+msgid "New Address Book"
msgstr ""
-#: templates/part.addpropertyform.php:33
-msgid "Text"
+#: templates/part.chooseaddressbook.php:21
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "CardDav Link"
msgstr ""
-#: templates/part.addpropertyform.php:34
-msgid "Voice"
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Download"
msgstr ""
-#: templates/part.addpropertyform.php:35
-msgid "Fax"
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Edit"
+msgstr "Редактировать"
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Delete"
+msgstr "Удалить"
+
+#: templates/part.details.php:3
+msgid "Download contact"
msgstr ""
-#: templates/part.addpropertyform.php:36
-msgid "Video"
+#: templates/part.details.php:4
+msgid "Delete contact"
msgstr ""
-#: templates/part.addpropertyform.php:37
-msgid "Pager"
+#: templates/part.details.php:34
+msgid "Add"
msgstr ""
-#: templates/part.details.php:33
-msgid "Delete"
+#: templates/part.editaddressbook.php:9
+msgid "New Addressbook"
msgstr ""
-#: templates/part.details.php:34
-msgid "Add Property"
+#: templates/part.editaddressbook.php:9
+msgid "Edit Addressbook"
msgstr ""
-#: templates/part.property.php:9
+#: templates/part.editaddressbook.php:12
+msgid "Displayname"
+msgstr ""
+
+#: templates/part.editaddressbook.php:23
+msgid "Active"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Save"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Submit"
+msgstr ""
+
+#: templates/part.editaddressbook.php:30
+msgid "Cancel"
+msgstr ""
+
+#: templates/part.property.php:3
msgid "Birthday"
+msgstr "День рождения"
+
+#: templates/part.property.php:23
+msgid "Preferred"
msgstr ""
-#: templates/part.property.php:29
+#: templates/part.property.php:23 templates/part.setpropertyform.php:45
msgid "Phone"
+msgstr "Телефон"
+
+#: templates/part.setpropertyform.php:57
+msgid "Update"
msgstr ""
-#: templates/part.setpropertyform.php:17
-msgid "Edit"
+#: templates/settings.php:4
+msgid "CardDAV syncing address:"
msgstr ""
diff --git a/l10n/ru/core.po b/l10n/ru/core.po
index 49a8891db3b..550baa3e729 100644
--- a/l10n/ru/core.po
+++ b/l10n/ru/core.po
@@ -9,9 +9,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 18:17+0200\n"
-"PO-Revision-Date: 2011-09-04 17:42+0000\n"
-"Last-Translator: jekader <jekader@gmail.com>\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Russian (http://www.transifex.net/projects/p/owncloud/team/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,6 +19,51 @@ msgstr ""
"Language: ru\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
+#: lostpassword/index.php:24
+msgid "Owncloud password reset"
+msgstr ""
+
+#: lostpassword/templates/email.php:1
+msgid "Use the following link to reset your password: {link}"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr "На ваш адрес Email выслана ссылка для сброса пароля."
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Requested"
+msgstr "Запрошено"
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr "Не удалось войти!"
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:22
+#: templates/login.php:8
+msgid "Username"
+msgstr "Имя пользователя"
+
+#: lostpassword/templates/lostpassword.php:14
+msgid "Request reset"
+msgstr "Запросить сброс"
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr "Ваш пароль был сброшен"
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr "Новый пароль"
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr "Сбросить пароль"
+
#: strings.php:5
msgid "Personal"
msgstr "Личное"
@@ -47,54 +92,50 @@ msgstr "Облако не найдено"
msgid "Create an <strong>admin account</strong>"
msgstr "Создать <strong>учётную запись администратора</strong>"
-#: templates/installation.php:21
-msgid "Username"
-msgstr "Имя пользователя"
-
-#: templates/installation.php:22
+#: templates/installation.php:26 templates/login.php:12
msgid "Password"
msgstr "Пароль"
-#: templates/installation.php:27
+#: templates/installation.php:32
+msgid "Advanced"
+msgstr "Дополнительно"
+
+#: templates/installation.php:34
+msgid "Data folder"
+msgstr "Директория с данными"
+
+#: templates/installation.php:41
msgid "Configure the database"
msgstr "Настройка базы данных"
-#: templates/installation.php:32 templates/installation.php:43
-#: templates/installation.php:53
+#: templates/installation.php:46 templates/installation.php:57
+#: templates/installation.php:67
msgid "will be used"
msgstr "будет использовано"
-#: templates/installation.php:64
+#: templates/installation.php:79
msgid "Database user"
msgstr "Имя пользователя для базы данных"
-#: templates/installation.php:65
+#: templates/installation.php:83
msgid "Database password"
msgstr "Пароль для базы данных"
-#: templates/installation.php:66
+#: templates/installation.php:87
msgid "Database name"
msgstr "Название базы данных"
-#: templates/installation.php:72
-msgid "Advanced"
-msgstr "Дополнительно"
-
-#: templates/installation.php:75
+#: templates/installation.php:93
msgid "Database host"
msgstr "Хост базы данных"
-#: templates/installation.php:76
-msgid "Data folder"
-msgstr "Директория с данными"
-
-#: templates/installation.php:79
+#: templates/installation.php:98
msgid "Finish setup"
msgstr "Завершить установку"
#: templates/layout.guest.php:35
-msgid "gives you freedom and control over your own data"
-msgstr "даёт Вам свободу и контроль над Вашими данными"
+msgid "web services under your control"
+msgstr ""
#: templates/layout.user.php:34
msgid "Log out"
@@ -104,38 +145,22 @@ msgstr "Выйти"
msgid "Settings"
msgstr "Настройки"
-#: templates/login.php:4
+#: templates/login.php:5
msgid "Lost your password?"
msgstr "Забыли пароль?"
-#: templates/login.php:9 templates/login.php:13
+#: templates/login.php:15
msgid "remember"
msgstr "запомнить"
+#: templates/login.php:16
+msgid "Log in"
+msgstr ""
+
#: templates/logout.php:1
msgid "You are logged out."
msgstr "Вы вышли."
-#: templates/lostpassword.php:3
-msgid "You will receive a link to reset your password via Email."
-msgstr "Вы получите ссылку для сброса пароля на Ваш e-mail."
-
-#: templates/lostpassword.php:5
-msgid "Requested"
-msgstr "Запрошено"
-
-#: templates/lostpassword.php:8
-msgid "Login failed!"
-msgstr "Войти не удалось!"
-
-#: templates/lostpassword.php:10
-msgid "Username or Email"
-msgstr "Имя пользователя или e-mail"
-
-#: templates/lostpassword.php:11
-msgid "Request reset"
-msgstr "Запросить сброс"
-
#: templates/part.pagenavi.php:3
msgid "prev"
msgstr "пред"
@@ -144,16 +169,4 @@ msgstr "пред"
msgid "next"
msgstr "след"
-#: templates/resetpassword.php:4
-msgid "Your password was reset"
-msgstr "Пароль был сброшен"
-
-#: templates/resetpassword.php:6
-msgid "New password"
-msgstr "Новый пароль"
-
-#: templates/resetpassword.php:7
-msgid "Reset password"
-msgstr "Сбросить пароль"
-
diff --git a/l10n/ru/files.po b/l10n/ru/files.po
index 2345bd74ead..55cec9ff4f8 100644
--- a/l10n/ru/files.po
+++ b/l10n/ru/files.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Russian (http://www.transifex.net/projects/p/owncloud/team/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,33 +18,35 @@ msgstr ""
"Language: ru\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
-#: ajax/upload.php:24
+#: ajax/upload.php:19
msgid "There is no error, the file uploaded with success"
-msgstr ""
+msgstr "Файл успешно загружен"
-#: ajax/upload.php:25
+#: ajax/upload.php:20
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr ""
+"Файл превышает допустимые размеры (описаны как upload_max_filesize в "
+"php.ini)"
-#: ajax/upload.php:26
+#: ajax/upload.php:21
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
-msgstr ""
+msgstr "Файл превышает размер MAX_FILE_SIZE, указаный в HTML-форме"
-#: ajax/upload.php:27
+#: ajax/upload.php:22
msgid "The uploaded file was only partially uploaded"
-msgstr ""
+msgstr "Файл был частично загружен"
-#: ajax/upload.php:28
+#: ajax/upload.php:23
msgid "No file was uploaded"
-msgstr ""
+msgstr "Файл не был загружен"
-#: ajax/upload.php:29
+#: ajax/upload.php:24
msgid "Missing a temporary folder"
-msgstr ""
+msgstr "Невозможно найти временную директорию"
-#: appinfo/app.php:7
+#: appinfo/app.php:8
msgid "Files"
msgstr "Файлы"
@@ -52,43 +54,55 @@ msgstr "Файлы"
msgid "Maximum upload size"
msgstr "Максимальный размер файла"
+#: templates/index.php:7
+msgid "New"
+msgstr ""
+
#: templates/index.php:10
+msgid "Text file"
+msgstr ""
+
+#: templates/index.php:11
+msgid "Folder"
+msgstr ""
+
+#: templates/index.php:12
+msgid "From the web"
+msgstr ""
+
+#: templates/index.php:22
msgid "Upload"
msgstr "Закачать"
-#: templates/index.php:17
-msgid "New Folder"
-msgstr "Новая папка"
-
-#: templates/index.php:31
+#: templates/index.php:35
msgid "Nothing in here. Upload something!"
msgstr "Здесь ничего нет. Закачайте что-нибудь!"
-#: templates/index.php:39
+#: templates/index.php:43
msgid "Name"
msgstr "Название"
-#: templates/index.php:41
+#: templates/index.php:45
msgid "Download"
msgstr "Скачать"
-#: templates/index.php:45
+#: templates/index.php:49
msgid "Size"
msgstr "Размер"
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Modified"
msgstr "Изменен"
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Delete"
msgstr "Удалить"
-#: templates/index.php:54
+#: templates/index.php:58
msgid "Upload too large"
msgstr "Файл слишком большой"
-#: templates/index.php:56
+#: templates/index.php:60
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
diff --git a/l10n/ru/gallery.po b/l10n/ru/gallery.po
new file mode 100644
index 00000000000..edfc8f026a3
--- /dev/null
+++ b/l10n/ru/gallery.po
@@ -0,0 +1,32 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:48+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Russian (http://www.transifex.net/projects/p/owncloud/team/ru/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ru\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
+
+#: appinfo/app.php:41
+msgid "Gallery"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Rescan"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+
diff --git a/l10n/ru/media.po b/l10n/ru/media.po
index 966ac2e46a7..7beb05be078 100644
--- a/l10n/ru/media.po
+++ b/l10n/ru/media.po
@@ -2,14 +2,15 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
+# Translators:
# <tony.mccourin@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
-"Report-Msgid-Bugs-To: http://bugs.kde.org/buglist.cgi?product=owncloud\n"
-"POT-Creation-Date: 2011-09-03 14:50+0200\n"
-"PO-Revision-Date: 2011-09-03 12:59+0000\n"
-"Last-Translator: tonymc <tony.mccourin@gmail.com>\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Russian (http://www.transifex.net/projects/p/owncloud/team/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,15 +18,15 @@ msgstr ""
"Language: ru\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
-#: appinfo/app.php:31
+#: appinfo/app.php:32
msgid "Music"
msgstr "Музыка"
-#: templates/music.php:3
+#: templates/music.php:3 templates/player.php:13
msgid "Play"
msgstr "Проиграть"
-#: templates/music.php:4 templates/music.php:30
+#: templates/music.php:4 templates/music.php:26 templates/player.php:14
msgid "Pause"
msgstr "Пауза"
@@ -33,7 +34,7 @@ msgstr "Пауза"
msgid "Previous"
msgstr "Предыдущий"
-#: templates/music.php:6
+#: templates/music.php:6 templates/player.php:15
msgid "Next"
msgstr "Следующий"
@@ -45,11 +46,7 @@ msgstr "Отключить звук"
msgid "Unmute"
msgstr "Включить звук"
-#: templates/music.php:28
-msgid "Songs scanned"
-msgstr "Песен просканировано"
-
-#: templates/music.php:29
+#: templates/music.php:25
msgid "Rescan Collection"
msgstr "Пересканировать коллекцию"
diff --git a/l10n/ru/settings.po b/l10n/ru/settings.po
index 42149eb309a..54ecbef38e2 100644
--- a/l10n/ru/settings.po
+++ b/l10n/ru/settings.po
@@ -2,14 +2,15 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
+# Translators:
# <tony.mccourin@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-04 16:48+0200\n"
-"PO-Revision-Date: 2011-09-03 13:59+0000\n"
-"Last-Translator: tonymc <tony.mccourin@gmail.com>\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Russian (http://www.transifex.net/projects/p/owncloud/team/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,22 +18,26 @@ msgstr ""
"Language: ru\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
-#: ajax/openid.php:13 ajax/setlanguage.php:13
-msgid "Authentication error"
-msgstr "Ошибка аутентификации"
-
-#: ajax/openid.php:21
-msgid "OpenID Changed"
-msgstr "OpenID был изменён"
+#: ajax/lostpassword.php:14
+msgid "email Changed"
+msgstr ""
-#: ajax/openid.php:23 ajax/setlanguage.php:23
+#: ajax/lostpassword.php:16 ajax/openid.php:17 ajax/setlanguage.php:16
msgid "Invalid request"
msgstr "Неверный запрос"
-#: ajax/setlanguage.php:21
+#: ajax/openid.php:15
+msgid "OpenID Changed"
+msgstr "OpenID был изменён"
+
+#: ajax/setlanguage.php:14
msgid "Language changed"
msgstr "Язык изменён"
+#: templates/admin.php:13
+msgid "Log level"
+msgstr ""
+
#: templates/apps.php:8
msgid "Add your application"
msgstr "Добавить ваше приложение"
@@ -53,15 +58,15 @@ msgstr "от"
msgid "Ask a question"
msgstr "Задать вопрос"
-#: templates/help.php:17
+#: templates/help.php:20
msgid "Problems connecting to help database."
msgstr "Проблема соединения с базой данных помощи."
-#: templates/help.php:18
+#: templates/help.php:21
msgid "Go there manually."
msgstr "Войти самостоятельно."
-#: templates/help.php:26
+#: templates/help.php:29
msgid "Answer"
msgstr "Ответ"
@@ -97,37 +102,53 @@ msgstr "показать"
msgid "Change password"
msgstr "Сменить пароль"
-#: templates/personal.php:24 templates/personal.php:25
+#: templates/personal.php:24
+msgid "Email"
+msgstr ""
+
+#: templates/personal.php:25
+msgid "Your email address"
+msgstr ""
+
+#: templates/personal.php:26
+msgid "Fill in an email address to enable password recovery"
+msgstr ""
+
+#: templates/personal.php:32 templates/personal.php:33
msgid "Language"
msgstr "Язык"
-#: templates/personal.php:30
-msgid "Help translating"
-msgstr "Помощь с переводом"
+#: templates/personal.php:38
+msgid "Help translate"
+msgstr ""
-#: templates/personal.php:37
+#: templates/personal.php:45
msgid "use this address to connect to your ownCloud in your file manager"
msgstr ""
"используйте данный адрес для подключения к ownCloud в вашем файловом "
"менеджере"
-#: templates/users.php:16
+#: templates/users.php:15 templates/users.php:30
msgid "Name"
msgstr "Имя"
-#: templates/users.php:17
+#: templates/users.php:16 templates/users.php:31
msgid "Password"
msgstr "Пароль"
-#: templates/users.php:18 templates/users.php:36
+#: templates/users.php:17 templates/users.php:32 templates/users.php:46
msgid "Groups"
msgstr "Группы"
-#: templates/users.php:24
+#: templates/users.php:23
msgid "Create"
msgstr "Создать"
-#: templates/users.php:48
+#: templates/users.php:33
+msgid "Quota"
+msgstr ""
+
+#: templates/users.php:58
msgid "Delete"
msgstr "Удалить"
diff --git a/l10n/sk_SK/calendar.po b/l10n/sk_SK/calendar.po
new file mode 100644
index 00000000000..4f64b09a236
--- /dev/null
+++ b/l10n/sk_SK/calendar.po
@@ -0,0 +1,637 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <intense.feel@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Slovak (Slovakia) (http://www.transifex.net/projects/p/owncloud/team/sk_SK/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sk_SK\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n"
+
+#: ajax/guesstimezone.php:42
+msgid "New Timezone:"
+msgstr ""
+
+#: ajax/settimezone.php:22
+msgid "Timezone changed"
+msgstr "Časové pásmo zmenené"
+
+#: ajax/settimezone.php:24
+msgid "Invalid request"
+msgstr "Neplatná požiadavka"
+
+#: appinfo/app.php:20 templates/calendar.php:13
+#: templates/part.eventform.php:20
+msgid "Calendar"
+msgstr "Kalendár"
+
+#: lib/app.php:19
+msgid "Wrong calendar"
+msgstr "Zlý kalendár"
+
+#: lib/app.php:60 lib/object.php:332
+msgid "Birthday"
+msgstr "Narodeniny"
+
+#: lib/app.php:61 lib/object.php:333
+msgid "Business"
+msgstr "Podnikanie"
+
+#: lib/app.php:62 lib/object.php:334
+msgid "Call"
+msgstr "Hovor"
+
+#: lib/app.php:63 lib/object.php:335
+msgid "Clients"
+msgstr "Klienti"
+
+#: lib/app.php:64 lib/object.php:336
+msgid "Deliverer"
+msgstr "Doručovateľ"
+
+#: lib/app.php:65 lib/object.php:337
+msgid "Holidays"
+msgstr "Prázdniny"
+
+#: lib/app.php:66 lib/object.php:338
+msgid "Ideas"
+msgstr "Nápady"
+
+#: lib/app.php:67 lib/object.php:339
+msgid "Journey"
+msgstr "Cesta"
+
+#: lib/app.php:68 lib/object.php:340
+msgid "Jubilee"
+msgstr "Jubileá"
+
+#: lib/app.php:69 lib/object.php:341
+msgid "Meeting"
+msgstr "Stretnutia"
+
+#: lib/app.php:70 lib/object.php:342
+msgid "Other"
+msgstr "Ostatné"
+
+#: lib/app.php:71 lib/object.php:343
+msgid "Personal"
+msgstr "Osobné"
+
+#: lib/app.php:72 lib/object.php:344
+msgid "Projects"
+msgstr "Projekty"
+
+#: lib/app.php:73 lib/object.php:345
+msgid "Questions"
+msgstr "Otázky"
+
+#: lib/app.php:74 lib/object.php:346
+msgid "Work"
+msgstr "Práca"
+
+#: lib/object.php:353
+msgid "Does not repeat"
+msgstr "Neopakovať"
+
+#: lib/object.php:354
+msgid "Daily"
+msgstr "Denne"
+
+#: lib/object.php:355
+msgid "Weekly"
+msgstr "Týždenne"
+
+#: lib/object.php:356
+msgid "Every Weekday"
+msgstr "Každý výkend"
+
+#: lib/object.php:357
+msgid "Bi-Weekly"
+msgstr "Každý druhý týždeň"
+
+#: lib/object.php:358
+msgid "Monthly"
+msgstr "Mesačne"
+
+#: lib/object.php:359
+msgid "Yearly"
+msgstr "Ročne"
+
+#: lib/object.php:366
+msgid "never"
+msgstr ""
+
+#: lib/object.php:367
+msgid "by occurrences"
+msgstr ""
+
+#: lib/object.php:368
+msgid "by date"
+msgstr ""
+
+#: lib/object.php:375
+msgid "by monthday"
+msgstr ""
+
+#: lib/object.php:376
+msgid "by weekday"
+msgstr ""
+
+#: lib/object.php:383 templates/lAfix.php:3
+msgid "Monday"
+msgstr ""
+
+#: lib/object.php:384 templates/lAfix.php:4
+msgid "Tuesday"
+msgstr ""
+
+#: lib/object.php:385 templates/lAfix.php:5
+msgid "Wednesday"
+msgstr ""
+
+#: lib/object.php:386 templates/lAfix.php:6
+msgid "Thursday"
+msgstr ""
+
+#: lib/object.php:387 templates/lAfix.php:7
+msgid "Friday"
+msgstr ""
+
+#: lib/object.php:388 templates/lAfix.php:8
+msgid "Saturday"
+msgstr ""
+
+#: lib/object.php:389 templates/lAfix.php:2
+msgid "Sunday"
+msgstr ""
+
+#: lib/object.php:396
+msgid "events week of month"
+msgstr ""
+
+#: lib/object.php:397
+msgid "first"
+msgstr ""
+
+#: lib/object.php:398
+msgid "second"
+msgstr ""
+
+#: lib/object.php:399
+msgid "third"
+msgstr ""
+
+#: lib/object.php:400
+msgid "fourth"
+msgstr ""
+
+#: lib/object.php:401
+msgid "fifth"
+msgstr ""
+
+#: lib/object.php:402
+msgid "last"
+msgstr ""
+
+#: lib/object.php:424 templates/lAfix.php:16
+msgid "January"
+msgstr ""
+
+#: lib/object.php:425 templates/lAfix.php:17
+msgid "February"
+msgstr ""
+
+#: lib/object.php:426 templates/lAfix.php:18
+msgid "March"
+msgstr ""
+
+#: lib/object.php:427 templates/lAfix.php:19
+msgid "April"
+msgstr ""
+
+#: lib/object.php:428 templates/lAfix.php:20
+msgid "May"
+msgstr ""
+
+#: lib/object.php:429 templates/lAfix.php:21
+msgid "June"
+msgstr ""
+
+#: lib/object.php:430 templates/lAfix.php:22
+msgid "July"
+msgstr ""
+
+#: lib/object.php:431 templates/lAfix.php:23
+msgid "August"
+msgstr ""
+
+#: lib/object.php:432 templates/lAfix.php:24
+msgid "September"
+msgstr ""
+
+#: lib/object.php:433 templates/lAfix.php:25
+msgid "October"
+msgstr ""
+
+#: lib/object.php:434 templates/lAfix.php:26
+msgid "November"
+msgstr ""
+
+#: lib/object.php:435 templates/lAfix.php:27
+msgid "December"
+msgstr ""
+
+#: lib/object.php:441
+msgid "by events date"
+msgstr ""
+
+#: lib/object.php:442
+msgid "by yearday(s)"
+msgstr ""
+
+#: lib/object.php:443
+msgid "by weeknumber(s)"
+msgstr ""
+
+#: lib/object.php:444
+msgid "by day and month"
+msgstr ""
+
+#: lib/object.php:467
+msgid "Not an array"
+msgstr "Nie je pole"
+
+#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+msgid "Date"
+msgstr ""
+
+#: lib/search.php:40
+msgid "Cal."
+msgstr ""
+
+#: templates/calendar.php:10
+msgid "All day"
+msgstr "Celý deň"
+
+#: templates/calendar.php:11
+msgid "Missing fields"
+msgstr "Nevyplnené položky"
+
+#: templates/calendar.php:12 templates/part.eventform.php:3
+msgid "Title"
+msgstr "Nadpis"
+
+#: templates/calendar.php:14
+msgid "From Date"
+msgstr "Od Dátumu"
+
+#: templates/calendar.php:15
+msgid "From Time"
+msgstr "Od Času"
+
+#: templates/calendar.php:16
+msgid "To Date"
+msgstr "Do Dátumu"
+
+#: templates/calendar.php:17
+msgid "To Time"
+msgstr "Do Času"
+
+#: templates/calendar.php:18
+msgid "The event ends before it starts"
+msgstr "Udalosť končí ešte pred tým než začne"
+
+#: templates/calendar.php:19
+msgid "There was a database fail"
+msgstr "Nastala chyba databázy"
+
+#: templates/calendar.php:52
+msgid "Week"
+msgstr "Týždeň"
+
+#: templates/calendar.php:53
+msgid "Month"
+msgstr "Mesiac"
+
+#: templates/calendar.php:54
+msgid "List"
+msgstr "Zoznam"
+
+#: templates/calendar.php:59
+msgid "Today"
+msgstr "Dnes"
+
+#: templates/calendar.php:60
+msgid "Calendars"
+msgstr "Kalendáre"
+
+#: templates/calendar.php:78
+msgid "There was a fail, while parsing the file."
+msgstr "Nastala chyba počas parsovania súboru."
+
+#: templates/lAfix.php:9
+msgid "Sun."
+msgstr ""
+
+#: templates/lAfix.php:10
+msgid "Mon."
+msgstr ""
+
+#: templates/lAfix.php:11
+msgid "Tue."
+msgstr ""
+
+#: templates/lAfix.php:12
+msgid "Wed."
+msgstr ""
+
+#: templates/lAfix.php:13
+msgid "Thu."
+msgstr ""
+
+#: templates/lAfix.php:14
+msgid "Fri."
+msgstr ""
+
+#: templates/lAfix.php:15
+msgid "Sat."
+msgstr ""
+
+#: templates/lAfix.php:28
+msgid "Jan."
+msgstr ""
+
+#: templates/lAfix.php:29
+msgid "Feb."
+msgstr ""
+
+#: templates/lAfix.php:30
+msgid "Mar."
+msgstr ""
+
+#: templates/lAfix.php:31
+msgid "Apr."
+msgstr ""
+
+#: templates/lAfix.php:32
+msgid "May."
+msgstr ""
+
+#: templates/lAfix.php:33
+msgid "Jun."
+msgstr ""
+
+#: templates/lAfix.php:34
+msgid "Jul."
+msgstr ""
+
+#: templates/lAfix.php:35
+msgid "Aug."
+msgstr ""
+
+#: templates/lAfix.php:36
+msgid "Sep."
+msgstr ""
+
+#: templates/lAfix.php:37
+msgid "Oct."
+msgstr ""
+
+#: templates/lAfix.php:38
+msgid "Nov."
+msgstr ""
+
+#: templates/lAfix.php:39
+msgid "Dec."
+msgstr ""
+
+#: templates/part.choosecalendar.php:1
+msgid "Choose active calendars"
+msgstr "Zvoľte aktívne kalendáre"
+
+#: templates/part.choosecalendar.php:15
+msgid "New Calendar"
+msgstr "Nový kalendár"
+
+#: templates/part.choosecalendar.php:20
+#: templates/part.choosecalendar.rowfields.php:4
+msgid "CalDav Link"
+msgstr "CalDav odkaz"
+
+#: templates/part.choosecalendar.rowfields.php:4
+msgid "Download"
+msgstr "Stiahnuť"
+
+#: templates/part.choosecalendar.rowfields.php:4
+msgid "Edit"
+msgstr "Upraviť"
+
+#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.editevent.php:9
+msgid "Delete"
+msgstr "Odstrániť"
+
+#: templates/part.editcalendar.php:9
+msgid "New calendar"
+msgstr "Nový kalendár"
+
+#: templates/part.editcalendar.php:9
+msgid "Edit calendar"
+msgstr "Upraviť kalendár"
+
+#: templates/part.editcalendar.php:12
+msgid "Displayname"
+msgstr "Zobrazené meno"
+
+#: templates/part.editcalendar.php:23
+msgid "Active"
+msgstr "Aktívne"
+
+#: templates/part.editcalendar.php:29
+msgid "Calendar color"
+msgstr "Farba kalendáru"
+
+#: templates/part.editcalendar.php:42
+msgid "Save"
+msgstr "Uložiť"
+
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
+#: templates/part.newevent.php:6
+msgid "Submit"
+msgstr "Odoslať"
+
+#: templates/part.editcalendar.php:43
+msgid "Cancel"
+msgstr "Zrušiť"
+
+#: templates/part.editevent.php:1
+msgid "Edit an event"
+msgstr "Upraviť udalosť"
+
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr "Exportovať"
+
+#: templates/part.eventform.php:5
+msgid "Title of the Event"
+msgstr "Nadpis Udalosti"
+
+#: templates/part.eventform.php:11
+msgid "Category"
+msgstr "Kategória"
+
+#: templates/part.eventform.php:13
+msgid "Select category"
+msgstr "Vybrať kategóriu"
+
+#: templates/part.eventform.php:37
+msgid "All Day Event"
+msgstr "Celodenná udalosť"
+
+#: templates/part.eventform.php:41
+msgid "From"
+msgstr "Od"
+
+#: templates/part.eventform.php:49
+msgid "To"
+msgstr "Do"
+
+#: templates/part.eventform.php:57
+msgid "Advanced options"
+msgstr "Pokročilé možnosti"
+
+#: templates/part.eventform.php:61
+msgid "Repeat"
+msgstr "Opakovať"
+
+#: templates/part.eventform.php:68
+msgid "Advanced"
+msgstr ""
+
+#: templates/part.eventform.php:112
+msgid "Select weekdays"
+msgstr ""
+
+#: templates/part.eventform.php:125 templates/part.eventform.php:138
+msgid "Select days"
+msgstr ""
+
+#: templates/part.eventform.php:130
+msgid "and the events day of year."
+msgstr ""
+
+#: templates/part.eventform.php:143
+msgid "and the events day of month."
+msgstr ""
+
+#: templates/part.eventform.php:151
+msgid "Select months"
+msgstr ""
+
+#: templates/part.eventform.php:164
+msgid "Select weeks"
+msgstr ""
+
+#: templates/part.eventform.php:169
+msgid "and the events week of year."
+msgstr ""
+
+#: templates/part.eventform.php:175
+msgid "Interval"
+msgstr ""
+
+#: templates/part.eventform.php:181
+msgid "End"
+msgstr ""
+
+#: templates/part.eventform.php:193
+msgid "occurrences"
+msgstr ""
+
+#: templates/part.eventform.php:208
+msgid "Location"
+msgstr "Poloha"
+
+#: templates/part.eventform.php:210
+msgid "Location of the Event"
+msgstr "Poloha Udalosti"
+
+#: templates/part.eventform.php:216
+msgid "Description"
+msgstr "Popis"
+
+#: templates/part.eventform.php:218
+msgid "Description of the Event"
+msgstr "Popis Udalosti"
+
+#: templates/part.import.php:1
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the calendar"
+msgstr "Prosím zvoľte kalendár"
+
+#: templates/part.import.php:10
+msgid "create a new calendar"
+msgstr ""
+
+#: templates/part.import.php:15
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import"
+msgstr "Importovať"
+
+#: templates/part.import.php:20
+msgid "Importing calendar"
+msgstr ""
+
+#: templates/part.import.php:23
+msgid "Calendar imported successfully"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Close Dialog"
+msgstr ""
+
+#: templates/part.newevent.php:1
+msgid "Create a new event"
+msgstr "Vytvoriť udalosť"
+
+#: templates/settings.php:13
+msgid "Timezone"
+msgstr "Časová zóna"
+
+#: templates/settings.php:30
+msgid "Check always for changes of the timezone"
+msgstr ""
+
+#: templates/settings.php:32
+msgid "Timeformat"
+msgstr "Formát času"
+
+#: templates/settings.php:34
+msgid "24h"
+msgstr "24h"
+
+#: templates/settings.php:35
+msgid "12h"
+msgstr "12h"
+
+#: templates/settings.php:41
+msgid "Calendar CalDAV syncing address:"
+msgstr "Synchronizačná adresa kalendára CalDAV: "
+
+
diff --git a/l10n/sk_SK/contacts.po b/l10n/sk_SK/contacts.po
new file mode 100644
index 00000000000..a24a03a3c1f
--- /dev/null
+++ b/l10n/sk_SK/contacts.po
@@ -0,0 +1,289 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Slovak (Slovakia) (http://www.transifex.net/projects/p/owncloud/team/sk_SK/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sk_SK\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n"
+
+#: ajax/activation.php:17 ajax/updateaddressbook.php:26
+msgid "Error (de)activating addressbook."
+msgstr ""
+
+#: ajax/addcard.php:79
+msgid "There was an error adding the contact."
+msgstr ""
+
+#: ajax/addproperty.php:39
+msgid "Cannot add empty property."
+msgstr ""
+
+#: ajax/addproperty.php:51
+msgid "At least one of the address fields has to be filled out."
+msgstr ""
+
+#: ajax/addproperty.php:77
+msgid "Error adding contact property."
+msgstr ""
+
+#: ajax/createaddressbook.php:20
+msgid "Error adding addressbook."
+msgstr ""
+
+#: ajax/createaddressbook.php:26
+msgid "Error activating addressbook."
+msgstr ""
+
+#: ajax/deleteproperty.php:40
+msgid "Error deleting contact property."
+msgstr ""
+
+#: ajax/setproperty.php:79
+msgid "Error updating contact property."
+msgstr ""
+
+#: ajax/updateaddressbook.php:20
+msgid "Error updating addressbook."
+msgstr ""
+
+#: appinfo/app.php:21 templates/settings.php:3
+msgid "Contacts"
+msgstr ""
+
+#: lib/app.php:42
+msgid "This is not your addressbook."
+msgstr "Toto nie je váš adresár."
+
+#: lib/app.php:51 photo.php:34
+msgid "Contact could not be found."
+msgstr "Kontakt nebol nájdený."
+
+#: lib/app.php:79
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "Informácie o vCard sú neplatné. Prosím obnovte stránku."
+
+#: lib/app.php:91 templates/part.addcardform.php:54
+#: templates/part.property.php:45 templates/part.setpropertyform.php:7
+msgid "Address"
+msgstr "Adresa"
+
+#: lib/app.php:92 templates/part.addcardform.php:43
+msgid "Telephone"
+msgstr "Telefón"
+
+#: lib/app.php:93 templates/part.addcardform.php:37
+#: templates/part.property.php:16 templates/part.setpropertyform.php:51
+msgid "Email"
+msgstr "E-mail"
+
+#: lib/app.php:94 templates/part.addcardform.php:27
+#: templates/part.property.php:9 templates/part.setpropertyform.php:54
+msgid "Organization"
+msgstr "Organizácia"
+
+#: lib/app.php:106 lib/app.php:113
+msgid "Work"
+msgstr "Práca"
+
+#: lib/app.php:107 lib/app.php:111
+msgid "Home"
+msgstr "Domov"
+
+#: lib/app.php:112
+msgid "Mobile"
+msgstr "Mobil"
+
+#: lib/app.php:114
+msgid "Text"
+msgstr "SMS"
+
+#: lib/app.php:115
+msgid "Voice"
+msgstr "Odkazová schránka"
+
+#: lib/app.php:116
+msgid "Fax"
+msgstr "Fax"
+
+#: lib/app.php:117
+msgid "Video"
+msgstr "Video"
+
+#: lib/app.php:118
+msgid "Pager"
+msgstr "Pager"
+
+#: lib/search.php:22
+msgid "Contact"
+msgstr ""
+
+#: photo.php:40
+msgid "This is not your contact."
+msgstr "Toto nie je váš kontakt."
+
+#: photo.php:48
+msgid "This card is not RFC compatible."
+msgstr "Táto karta nie je kompatibilná s RFC."
+
+#: photo.php:85
+msgid "This card does not contain a photo."
+msgstr "Táto karta neobsahuje fotografiu."
+
+#: templates/index.php:6
+msgid "Add Contact"
+msgstr "Pridať Kontakt."
+
+#: templates/index.php:7
+msgid "Addressbooks"
+msgstr ""
+
+#: templates/part.addcardform.php:8
+msgid "Addressbook"
+msgstr ""
+
+#: templates/part.addcardform.php:21
+msgid "Name"
+msgstr "Meno"
+
+#: templates/part.addcardform.php:57 templates/part.details.php:43
+#: templates/part.details.php:79 templates/part.setpropertyform.php:10
+#: templates/part.setpropertyform.php:47
+msgid "Type"
+msgstr ""
+
+#: templates/part.addcardform.php:65 templates/part.details.php:49
+#: templates/part.setpropertyform.php:16
+msgid "PO Box"
+msgstr "PO Box"
+
+#: templates/part.addcardform.php:72 templates/part.details.php:53
+#: templates/part.setpropertyform.php:20
+msgid "Extended"
+msgstr "Rozšírené"
+
+#: templates/part.addcardform.php:78 templates/part.details.php:57
+#: templates/part.setpropertyform.php:24
+msgid "Street"
+msgstr "Ulica"
+
+#: templates/part.addcardform.php:84 templates/part.details.php:61
+#: templates/part.setpropertyform.php:28
+msgid "City"
+msgstr "Mesto"
+
+#: templates/part.addcardform.php:90 templates/part.details.php:65
+#: templates/part.setpropertyform.php:32
+msgid "Region"
+msgstr "Región"
+
+#: templates/part.addcardform.php:96 templates/part.details.php:69
+#: templates/part.setpropertyform.php:36
+msgid "Zipcode"
+msgstr "PSČ"
+
+#: templates/part.addcardform.php:102 templates/part.details.php:73
+#: templates/part.setpropertyform.php:40
+msgid "Country"
+msgstr "Krajina"
+
+#: templates/part.addcardform.php:109
+msgid "Create Contact"
+msgstr "Vytvoriť Kontakt."
+
+#: templates/part.chooseaddressbook.php:1
+msgid "Choose active Address Books"
+msgstr ""
+
+#: templates/part.chooseaddressbook.php:16
+msgid "New Address Book"
+msgstr ""
+
+#: templates/part.chooseaddressbook.php:21
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "CardDav Link"
+msgstr ""
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Download"
+msgstr ""
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Edit"
+msgstr "Upraviť"
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Delete"
+msgstr "Odstrániť"
+
+#: templates/part.details.php:3
+msgid "Download contact"
+msgstr ""
+
+#: templates/part.details.php:4
+msgid "Delete contact"
+msgstr ""
+
+#: templates/part.details.php:34
+msgid "Add"
+msgstr ""
+
+#: templates/part.editaddressbook.php:9
+msgid "New Addressbook"
+msgstr ""
+
+#: templates/part.editaddressbook.php:9
+msgid "Edit Addressbook"
+msgstr ""
+
+#: templates/part.editaddressbook.php:12
+msgid "Displayname"
+msgstr ""
+
+#: templates/part.editaddressbook.php:23
+msgid "Active"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Save"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Submit"
+msgstr ""
+
+#: templates/part.editaddressbook.php:30
+msgid "Cancel"
+msgstr ""
+
+#: templates/part.property.php:3
+msgid "Birthday"
+msgstr "Narodeniny"
+
+#: templates/part.property.php:23
+msgid "Preferred"
+msgstr ""
+
+#: templates/part.property.php:23 templates/part.setpropertyform.php:45
+msgid "Phone"
+msgstr "Telefón"
+
+#: templates/part.setpropertyform.php:57
+msgid "Update"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "CardDAV syncing address:"
+msgstr ""
+
+
diff --git a/l10n/sk_SK/core.po b/l10n/sk_SK/core.po
new file mode 100644
index 00000000000..51034c15311
--- /dev/null
+++ b/l10n/sk_SK/core.po
@@ -0,0 +1,171 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <intense.feel@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Slovak (Slovakia) (http://www.transifex.net/projects/p/owncloud/team/sk_SK/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sk_SK\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n"
+
+#: lostpassword/index.php:24
+msgid "Owncloud password reset"
+msgstr ""
+
+#: lostpassword/templates/email.php:1
+msgid "Use the following link to reset your password: {link}"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr "Odkaz pre obnovenie hesla obdržíte E-mailom."
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Requested"
+msgstr "Požiadané"
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr "Prihlásenie zlyhalo!"
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:22
+#: templates/login.php:8
+msgid "Username"
+msgstr "Prihlasovacie meno"
+
+#: lostpassword/templates/lostpassword.php:14
+msgid "Request reset"
+msgstr "Požiadať o obnovenie"
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr "Vaše heslo bolo obnovené"
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr "Nové heslo"
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr "Obnova hesla"
+
+#: strings.php:5
+msgid "Personal"
+msgstr "Osobné"
+
+#: strings.php:6
+msgid "Users"
+msgstr "Používatelia"
+
+#: strings.php:7
+msgid "Apps"
+msgstr "Aplikácie"
+
+#: strings.php:8
+msgid "Admin"
+msgstr "Administrácia"
+
+#: strings.php:9
+msgid "Help"
+msgstr "Pomoc"
+
+#: templates/404.php:12
+msgid "Cloud not found"
+msgstr "Nedokážem nájsť"
+
+#: templates/installation.php:20
+msgid "Create an <strong>admin account</strong>"
+msgstr "Vytvoriť <strong>administrátorský účet</strong>"
+
+#: templates/installation.php:26 templates/login.php:12
+msgid "Password"
+msgstr "Heslo"
+
+#: templates/installation.php:32
+msgid "Advanced"
+msgstr "Pokročilé"
+
+#: templates/installation.php:34
+msgid "Data folder"
+msgstr "Priečinok dát"
+
+#: templates/installation.php:41
+msgid "Configure the database"
+msgstr "Nastaviť databázu"
+
+#: templates/installation.php:46 templates/installation.php:57
+#: templates/installation.php:67
+msgid "will be used"
+msgstr "bude použité"
+
+#: templates/installation.php:79
+msgid "Database user"
+msgstr "Hostiteľ databázy"
+
+#: templates/installation.php:83
+msgid "Database password"
+msgstr "Heslo databázy"
+
+#: templates/installation.php:87
+msgid "Database name"
+msgstr "Meno databázy"
+
+#: templates/installation.php:93
+msgid "Database host"
+msgstr "Server databázy"
+
+#: templates/installation.php:98
+msgid "Finish setup"
+msgstr "Dokončiť inštaláciu"
+
+#: templates/layout.guest.php:35
+msgid "web services under your control"
+msgstr ""
+
+#: templates/layout.user.php:34
+msgid "Log out"
+msgstr "Odhlásiť"
+
+#: templates/layout.user.php:46 templates/layout.user.php:47
+msgid "Settings"
+msgstr "Nastavenia"
+
+#: templates/login.php:5
+msgid "Lost your password?"
+msgstr "Zabudli ste heslo?"
+
+#: templates/login.php:15
+msgid "remember"
+msgstr "zapamätať"
+
+#: templates/login.php:16
+msgid "Log in"
+msgstr ""
+
+#: templates/logout.php:1
+msgid "You are logged out."
+msgstr "Ste odhlásený."
+
+#: templates/part.pagenavi.php:3
+msgid "prev"
+msgstr "späť"
+
+#: templates/part.pagenavi.php:20
+msgid "next"
+msgstr "ďalej"
+
+
diff --git a/l10n/sk_SK/files.po b/l10n/sk_SK/files.po
new file mode 100644
index 00000000000..645e9a11f2a
--- /dev/null
+++ b/l10n/sk_SK/files.po
@@ -0,0 +1,112 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Slovak (Slovakia) (http://www.transifex.net/projects/p/owncloud/team/sk_SK/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sk_SK\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n"
+
+#: ajax/upload.php:19
+msgid "There is no error, the file uploaded with success"
+msgstr "Nenastala žiadna chyba, súbor bol úspešne nahraný"
+
+#: ajax/upload.php:20
+msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
+msgstr "Nahraný súbor presiahol direktívu upload_max_filesize v php.ini"
+
+#: ajax/upload.php:21
+msgid ""
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
+"the HTML form"
+msgstr ""
+"Nahrávaný súbor presiahol MAX_FILE_SIZE direktívu, ktorá bola špecifikovaná "
+"v HTML formulári"
+
+#: ajax/upload.php:22
+msgid "The uploaded file was only partially uploaded"
+msgstr "Nahrávaný súbor bol iba čiastočne nahraný"
+
+#: ajax/upload.php:23
+msgid "No file was uploaded"
+msgstr "Žiaden súbor nebol nahraný"
+
+#: ajax/upload.php:24
+msgid "Missing a temporary folder"
+msgstr "Chýbajúci dočasný priečinok"
+
+#: appinfo/app.php:8
+msgid "Files"
+msgstr "Súbory"
+
+#: templates/admin.php:5
+msgid "Maximum upload size"
+msgstr "Maximálna veľkosť nahratia"
+
+#: templates/index.php:7
+msgid "New"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Text file"
+msgstr ""
+
+#: templates/index.php:11
+msgid "Folder"
+msgstr ""
+
+#: templates/index.php:12
+msgid "From the web"
+msgstr ""
+
+#: templates/index.php:22
+msgid "Upload"
+msgstr "Nahrať"
+
+#: templates/index.php:35
+msgid "Nothing in here. Upload something!"
+msgstr "Nič tu nie je. Nahrakte niečo!"
+
+#: templates/index.php:43
+msgid "Name"
+msgstr "Meno"
+
+#: templates/index.php:45
+msgid "Download"
+msgstr "Stiahnuť"
+
+#: templates/index.php:49
+msgid "Size"
+msgstr "Veľkosť"
+
+#: templates/index.php:50
+msgid "Modified"
+msgstr "Upravené"
+
+#: templates/index.php:50
+msgid "Delete"
+msgstr "Odstrániť"
+
+#: templates/index.php:58
+msgid "Upload too large"
+msgstr "Nahrávanie príliš veľké"
+
+#: templates/index.php:60
+msgid ""
+"The files you are trying to upload exceed the maximum size for file uploads "
+"on this server."
+msgstr ""
+"Súbory ktoré sa snažíte nahrať presahujú maximálnu veľkosť pre nahratie "
+"súborov na tento server."
+
+
diff --git a/l10n/sk_SK/gallery.po b/l10n/sk_SK/gallery.po
new file mode 100644
index 00000000000..ec1dd850cd0
--- /dev/null
+++ b/l10n/sk_SK/gallery.po
@@ -0,0 +1,32 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:48+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Slovak (Slovakia) (http://www.transifex.net/projects/p/owncloud/team/sk_SK/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sk_SK\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n"
+
+#: appinfo/app.php:41
+msgid "Gallery"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Rescan"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+
diff --git a/l10n/sk_SK/media.po b/l10n/sk_SK/media.po
new file mode 100644
index 00000000000..2718867142a
--- /dev/null
+++ b/l10n/sk_SK/media.po
@@ -0,0 +1,64 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Slovak (Slovakia) (http://www.transifex.net/projects/p/owncloud/team/sk_SK/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sk_SK\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n"
+
+#: appinfo/app.php:32
+msgid "Music"
+msgstr "Hudba"
+
+#: templates/music.php:3 templates/player.php:13
+msgid "Play"
+msgstr "Prehrať"
+
+#: templates/music.php:4 templates/music.php:26 templates/player.php:14
+msgid "Pause"
+msgstr "Pauza"
+
+#: templates/music.php:5
+msgid "Previous"
+msgstr "Predchádzajúce"
+
+#: templates/music.php:6 templates/player.php:15
+msgid "Next"
+msgstr "Ďalšie"
+
+#: templates/music.php:7
+msgid "Mute"
+msgstr "Stlmiť"
+
+#: templates/music.php:8
+msgid "Unmute"
+msgstr "Nahlas"
+
+#: templates/music.php:25
+msgid "Rescan Collection"
+msgstr "Znovu skenovať Zbierku"
+
+#: templates/music.php:37
+msgid "Artist"
+msgstr "Umelec"
+
+#: templates/music.php:38
+msgid "Album"
+msgstr "Album"
+
+#: templates/music.php:39
+msgid "Title"
+msgstr "Názov"
+
+
diff --git a/l10n/sk_SK/settings.po b/l10n/sk_SK/settings.po
new file mode 100644
index 00000000000..17dd38a23ba
--- /dev/null
+++ b/l10n/sk_SK/settings.po
@@ -0,0 +1,153 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <intense.feel@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Slovak (Slovakia) (http://www.transifex.net/projects/p/owncloud/team/sk_SK/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sk_SK\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n"
+
+#: ajax/lostpassword.php:14
+msgid "email Changed"
+msgstr ""
+
+#: ajax/lostpassword.php:16 ajax/openid.php:17 ajax/setlanguage.php:16
+msgid "Invalid request"
+msgstr "Neplatná požiadavka"
+
+#: ajax/openid.php:15
+msgid "OpenID Changed"
+msgstr "OpenID zmenené"
+
+#: ajax/setlanguage.php:14
+msgid "Language changed"
+msgstr "Jazyk zmenený"
+
+#: templates/admin.php:13
+msgid "Log level"
+msgstr ""
+
+#: templates/apps.php:8
+msgid "Add your application"
+msgstr "Pridajte svoju aplikáciu"
+
+#: templates/apps.php:21
+msgid "Select an App"
+msgstr "Vyberte Aplikáciu"
+
+#: templates/apps.php:23
+msgid "-licensed"
+msgstr "-licencované"
+
+#: templates/apps.php:23
+msgid "by"
+msgstr "od"
+
+#: templates/help.php:8
+msgid "Ask a question"
+msgstr "Opýtajte sa otázku"
+
+#: templates/help.php:20
+msgid "Problems connecting to help database."
+msgstr "Problémy spojené s pomocnou databázou."
+
+#: templates/help.php:21
+msgid "Go there manually."
+msgstr "Prejsť tam ručne."
+
+#: templates/help.php:29
+msgid "Answer"
+msgstr "Odpoveď"
+
+#: templates/personal.php:8
+msgid "You use"
+msgstr "Používate"
+
+#: templates/personal.php:8
+msgid "of the available"
+msgstr "z dostupných"
+
+#: templates/personal.php:13
+msgid "Your password got changed"
+msgstr "Vaše heslo sa zmenilo"
+
+#: templates/personal.php:14
+msgid "Unable to change your password"
+msgstr "Nedokážem zmeniť vaše heslo"
+
+#: templates/personal.php:15
+msgid "Current password"
+msgstr "Aktuálne heslo"
+
+#: templates/personal.php:16
+msgid "New password"
+msgstr "Nové heslo"
+
+#: templates/personal.php:17
+msgid "show"
+msgstr "zobraziť"
+
+#: templates/personal.php:18
+msgid "Change password"
+msgstr "Zmeniť heslo"
+
+#: templates/personal.php:24
+msgid "Email"
+msgstr ""
+
+#: templates/personal.php:25
+msgid "Your email address"
+msgstr ""
+
+#: templates/personal.php:26
+msgid "Fill in an email address to enable password recovery"
+msgstr ""
+
+#: templates/personal.php:32 templates/personal.php:33
+msgid "Language"
+msgstr "Jazyk"
+
+#: templates/personal.php:38
+msgid "Help translate"
+msgstr ""
+
+#: templates/personal.php:45
+msgid "use this address to connect to your ownCloud in your file manager"
+msgstr "použite túto adresu pre spojenie s vaším ownCloud v správcovi súborov"
+
+#: templates/users.php:15 templates/users.php:30
+msgid "Name"
+msgstr "Meno"
+
+#: templates/users.php:16 templates/users.php:31
+msgid "Password"
+msgstr "Heslo"
+
+#: templates/users.php:17 templates/users.php:32 templates/users.php:46
+msgid "Groups"
+msgstr "Skupiny"
+
+#: templates/users.php:23
+msgid "Create"
+msgstr "Vytvoriť"
+
+#: templates/users.php:33
+msgid "Quota"
+msgstr ""
+
+#: templates/users.php:58
+msgid "Delete"
+msgstr "Odstrániť"
+
+
diff --git a/l10n/sl/calendar.po b/l10n/sl/calendar.po
new file mode 100644
index 00000000000..0c9761508e9
--- /dev/null
+++ b/l10n/sl/calendar.po
@@ -0,0 +1,637 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <urossolar@hotmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Slovenian (http://www.transifex.net/projects/p/owncloud/team/sl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sl\n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3)\n"
+
+#: ajax/guesstimezone.php:42
+msgid "New Timezone:"
+msgstr ""
+
+#: ajax/settimezone.php:22
+msgid "Timezone changed"
+msgstr "Časovna Cona spremenjena"
+
+#: ajax/settimezone.php:24
+msgid "Invalid request"
+msgstr "Neveljavna zahteva"
+
+#: appinfo/app.php:20 templates/calendar.php:13
+#: templates/part.eventform.php:20
+msgid "Calendar"
+msgstr "Kolendar"
+
+#: lib/app.php:19
+msgid "Wrong calendar"
+msgstr "Napačen Kolendar"
+
+#: lib/app.php:60 lib/object.php:332
+msgid "Birthday"
+msgstr "Rojstni Dan"
+
+#: lib/app.php:61 lib/object.php:333
+msgid "Business"
+msgstr "Poslovno"
+
+#: lib/app.php:62 lib/object.php:334
+msgid "Call"
+msgstr "Pokliči"
+
+#: lib/app.php:63 lib/object.php:335
+msgid "Clients"
+msgstr "Stranke"
+
+#: lib/app.php:64 lib/object.php:336
+msgid "Deliverer"
+msgstr "Dobavitelj"
+
+#: lib/app.php:65 lib/object.php:337
+msgid "Holidays"
+msgstr "Dopust"
+
+#: lib/app.php:66 lib/object.php:338
+msgid "Ideas"
+msgstr "Ideje"
+
+#: lib/app.php:67 lib/object.php:339
+msgid "Journey"
+msgstr "Potovanje"
+
+#: lib/app.php:68 lib/object.php:340
+msgid "Jubilee"
+msgstr "Obletnica"
+
+#: lib/app.php:69 lib/object.php:341
+msgid "Meeting"
+msgstr "Sestanek"
+
+#: lib/app.php:70 lib/object.php:342
+msgid "Other"
+msgstr "Ostalo"
+
+#: lib/app.php:71 lib/object.php:343
+msgid "Personal"
+msgstr "Osebno"
+
+#: lib/app.php:72 lib/object.php:344
+msgid "Projects"
+msgstr "Projekt"
+
+#: lib/app.php:73 lib/object.php:345
+msgid "Questions"
+msgstr "Vprašanja"
+
+#: lib/app.php:74 lib/object.php:346
+msgid "Work"
+msgstr "Delo"
+
+#: lib/object.php:353
+msgid "Does not repeat"
+msgstr "Se ne ponavlja"
+
+#: lib/object.php:354
+msgid "Daily"
+msgstr "Dnevno"
+
+#: lib/object.php:355
+msgid "Weekly"
+msgstr "Tedensko"
+
+#: lib/object.php:356
+msgid "Every Weekday"
+msgstr "Vsak dan v tednu"
+
+#: lib/object.php:357
+msgid "Bi-Weekly"
+msgstr "Dvakrat Tedensko"
+
+#: lib/object.php:358
+msgid "Monthly"
+msgstr "Mesečno"
+
+#: lib/object.php:359
+msgid "Yearly"
+msgstr "Letno"
+
+#: lib/object.php:366
+msgid "never"
+msgstr ""
+
+#: lib/object.php:367
+msgid "by occurrences"
+msgstr ""
+
+#: lib/object.php:368
+msgid "by date"
+msgstr ""
+
+#: lib/object.php:375
+msgid "by monthday"
+msgstr ""
+
+#: lib/object.php:376
+msgid "by weekday"
+msgstr ""
+
+#: lib/object.php:383 templates/lAfix.php:3
+msgid "Monday"
+msgstr ""
+
+#: lib/object.php:384 templates/lAfix.php:4
+msgid "Tuesday"
+msgstr ""
+
+#: lib/object.php:385 templates/lAfix.php:5
+msgid "Wednesday"
+msgstr ""
+
+#: lib/object.php:386 templates/lAfix.php:6
+msgid "Thursday"
+msgstr ""
+
+#: lib/object.php:387 templates/lAfix.php:7
+msgid "Friday"
+msgstr ""
+
+#: lib/object.php:388 templates/lAfix.php:8
+msgid "Saturday"
+msgstr ""
+
+#: lib/object.php:389 templates/lAfix.php:2
+msgid "Sunday"
+msgstr ""
+
+#: lib/object.php:396
+msgid "events week of month"
+msgstr ""
+
+#: lib/object.php:397
+msgid "first"
+msgstr ""
+
+#: lib/object.php:398
+msgid "second"
+msgstr ""
+
+#: lib/object.php:399
+msgid "third"
+msgstr ""
+
+#: lib/object.php:400
+msgid "fourth"
+msgstr ""
+
+#: lib/object.php:401
+msgid "fifth"
+msgstr ""
+
+#: lib/object.php:402
+msgid "last"
+msgstr ""
+
+#: lib/object.php:424 templates/lAfix.php:16
+msgid "January"
+msgstr ""
+
+#: lib/object.php:425 templates/lAfix.php:17
+msgid "February"
+msgstr ""
+
+#: lib/object.php:426 templates/lAfix.php:18
+msgid "March"
+msgstr ""
+
+#: lib/object.php:427 templates/lAfix.php:19
+msgid "April"
+msgstr ""
+
+#: lib/object.php:428 templates/lAfix.php:20
+msgid "May"
+msgstr ""
+
+#: lib/object.php:429 templates/lAfix.php:21
+msgid "June"
+msgstr ""
+
+#: lib/object.php:430 templates/lAfix.php:22
+msgid "July"
+msgstr ""
+
+#: lib/object.php:431 templates/lAfix.php:23
+msgid "August"
+msgstr ""
+
+#: lib/object.php:432 templates/lAfix.php:24
+msgid "September"
+msgstr ""
+
+#: lib/object.php:433 templates/lAfix.php:25
+msgid "October"
+msgstr ""
+
+#: lib/object.php:434 templates/lAfix.php:26
+msgid "November"
+msgstr ""
+
+#: lib/object.php:435 templates/lAfix.php:27
+msgid "December"
+msgstr ""
+
+#: lib/object.php:441
+msgid "by events date"
+msgstr ""
+
+#: lib/object.php:442
+msgid "by yearday(s)"
+msgstr ""
+
+#: lib/object.php:443
+msgid "by weeknumber(s)"
+msgstr ""
+
+#: lib/object.php:444
+msgid "by day and month"
+msgstr ""
+
+#: lib/object.php:467
+msgid "Not an array"
+msgstr "Not an array"
+
+#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+msgid "Date"
+msgstr ""
+
+#: lib/search.php:40
+msgid "Cal."
+msgstr ""
+
+#: templates/calendar.php:10
+msgid "All day"
+msgstr "Cel dan"
+
+#: templates/calendar.php:11
+msgid "Missing fields"
+msgstr "Mankajoča polja"
+
+#: templates/calendar.php:12 templates/part.eventform.php:3
+msgid "Title"
+msgstr "Naslov"
+
+#: templates/calendar.php:14
+msgid "From Date"
+msgstr "od Datum"
+
+#: templates/calendar.php:15
+msgid "From Time"
+msgstr "od Čas"
+
+#: templates/calendar.php:16
+msgid "To Date"
+msgstr "do Datum"
+
+#: templates/calendar.php:17
+msgid "To Time"
+msgstr "do Čas"
+
+#: templates/calendar.php:18
+msgid "The event ends before it starts"
+msgstr "Dogodek se konča preden se začne"
+
+#: templates/calendar.php:19
+msgid "There was a database fail"
+msgstr "Napaka v podatkovni bazi. Kontaktirajte Administratorja"
+
+#: templates/calendar.php:52
+msgid "Week"
+msgstr "Teden"
+
+#: templates/calendar.php:53
+msgid "Month"
+msgstr "Mesec"
+
+#: templates/calendar.php:54
+msgid "List"
+msgstr "Seznam"
+
+#: templates/calendar.php:59
+msgid "Today"
+msgstr "Danes"
+
+#: templates/calendar.php:60
+msgid "Calendars"
+msgstr "Kolendarji"
+
+#: templates/calendar.php:78
+msgid "There was a fail, while parsing the file."
+msgstr "Pri razčlenjevanju datoteke je prišlo do napake."
+
+#: templates/lAfix.php:9
+msgid "Sun."
+msgstr ""
+
+#: templates/lAfix.php:10
+msgid "Mon."
+msgstr ""
+
+#: templates/lAfix.php:11
+msgid "Tue."
+msgstr ""
+
+#: templates/lAfix.php:12
+msgid "Wed."
+msgstr ""
+
+#: templates/lAfix.php:13
+msgid "Thu."
+msgstr ""
+
+#: templates/lAfix.php:14
+msgid "Fri."
+msgstr ""
+
+#: templates/lAfix.php:15
+msgid "Sat."
+msgstr ""
+
+#: templates/lAfix.php:28
+msgid "Jan."
+msgstr ""
+
+#: templates/lAfix.php:29
+msgid "Feb."
+msgstr ""
+
+#: templates/lAfix.php:30
+msgid "Mar."
+msgstr ""
+
+#: templates/lAfix.php:31
+msgid "Apr."
+msgstr ""
+
+#: templates/lAfix.php:32
+msgid "May."
+msgstr ""
+
+#: templates/lAfix.php:33
+msgid "Jun."
+msgstr ""
+
+#: templates/lAfix.php:34
+msgid "Jul."
+msgstr ""
+
+#: templates/lAfix.php:35
+msgid "Aug."
+msgstr ""
+
+#: templates/lAfix.php:36
+msgid "Sep."
+msgstr ""
+
+#: templates/lAfix.php:37
+msgid "Oct."
+msgstr ""
+
+#: templates/lAfix.php:38
+msgid "Nov."
+msgstr ""
+
+#: templates/lAfix.php:39
+msgid "Dec."
+msgstr ""
+
+#: templates/part.choosecalendar.php:1
+msgid "Choose active calendars"
+msgstr "Izberi aktivni Kolendar"
+
+#: templates/part.choosecalendar.php:15
+msgid "New Calendar"
+msgstr "Nov Kolendar"
+
+#: templates/part.choosecalendar.php:20
+#: templates/part.choosecalendar.rowfields.php:4
+msgid "CalDav Link"
+msgstr "CalDav Povezava"
+
+#: templates/part.choosecalendar.rowfields.php:4
+msgid "Download"
+msgstr "Naloži dol"
+
+#: templates/part.choosecalendar.rowfields.php:4
+msgid "Edit"
+msgstr "Uredi"
+
+#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.editevent.php:9
+msgid "Delete"
+msgstr "Izbriši"
+
+#: templates/part.editcalendar.php:9
+msgid "New calendar"
+msgstr "Nov Kolendar"
+
+#: templates/part.editcalendar.php:9
+msgid "Edit calendar"
+msgstr "Uredi Kolendar"
+
+#: templates/part.editcalendar.php:12
+msgid "Displayname"
+msgstr "Prikazano Ime"
+
+#: templates/part.editcalendar.php:23
+msgid "Active"
+msgstr "Aktivno"
+
+#: templates/part.editcalendar.php:29
+msgid "Calendar color"
+msgstr "Barva Kolendarja"
+
+#: templates/part.editcalendar.php:42
+msgid "Save"
+msgstr "Shrani"
+
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
+#: templates/part.newevent.php:6
+msgid "Submit"
+msgstr "Potrdi"
+
+#: templates/part.editcalendar.php:43
+msgid "Cancel"
+msgstr "Prekliči"
+
+#: templates/part.editevent.php:1
+msgid "Edit an event"
+msgstr "Uredi Dogodek"
+
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr "Izvozi"
+
+#: templates/part.eventform.php:5
+msgid "Title of the Event"
+msgstr "Naslov"
+
+#: templates/part.eventform.php:11
+msgid "Category"
+msgstr "Kategorija"
+
+#: templates/part.eventform.php:13
+msgid "Select category"
+msgstr "Izberi Kategorijo"
+
+#: templates/part.eventform.php:37
+msgid "All Day Event"
+msgstr "Celodnevni Dogodek"
+
+#: templates/part.eventform.php:41
+msgid "From"
+msgstr "Od"
+
+#: templates/part.eventform.php:49
+msgid "To"
+msgstr "Za"
+
+#: templates/part.eventform.php:57
+msgid "Advanced options"
+msgstr "Napredne Možnosti"
+
+#: templates/part.eventform.php:61
+msgid "Repeat"
+msgstr "Ponovi"
+
+#: templates/part.eventform.php:68
+msgid "Advanced"
+msgstr ""
+
+#: templates/part.eventform.php:112
+msgid "Select weekdays"
+msgstr ""
+
+#: templates/part.eventform.php:125 templates/part.eventform.php:138
+msgid "Select days"
+msgstr ""
+
+#: templates/part.eventform.php:130
+msgid "and the events day of year."
+msgstr ""
+
+#: templates/part.eventform.php:143
+msgid "and the events day of month."
+msgstr ""
+
+#: templates/part.eventform.php:151
+msgid "Select months"
+msgstr ""
+
+#: templates/part.eventform.php:164
+msgid "Select weeks"
+msgstr ""
+
+#: templates/part.eventform.php:169
+msgid "and the events week of year."
+msgstr ""
+
+#: templates/part.eventform.php:175
+msgid "Interval"
+msgstr ""
+
+#: templates/part.eventform.php:181
+msgid "End"
+msgstr ""
+
+#: templates/part.eventform.php:193
+msgid "occurrences"
+msgstr ""
+
+#: templates/part.eventform.php:208
+msgid "Location"
+msgstr "Lokacija"
+
+#: templates/part.eventform.php:210
+msgid "Location of the Event"
+msgstr "Lokacija dogodka"
+
+#: templates/part.eventform.php:216
+msgid "Description"
+msgstr "Opis"
+
+#: templates/part.eventform.php:218
+msgid "Description of the Event"
+msgstr "Opis Dogodka"
+
+#: templates/part.import.php:1
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the calendar"
+msgstr "Izberi kolendar"
+
+#: templates/part.import.php:10
+msgid "create a new calendar"
+msgstr ""
+
+#: templates/part.import.php:15
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import"
+msgstr "Uvozi"
+
+#: templates/part.import.php:20
+msgid "Importing calendar"
+msgstr ""
+
+#: templates/part.import.php:23
+msgid "Calendar imported successfully"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Close Dialog"
+msgstr ""
+
+#: templates/part.newevent.php:1
+msgid "Create a new event"
+msgstr "Ustvari nov dogodek"
+
+#: templates/settings.php:13
+msgid "Timezone"
+msgstr "Časovna Cona"
+
+#: templates/settings.php:30
+msgid "Check always for changes of the timezone"
+msgstr ""
+
+#: templates/settings.php:32
+msgid "Timeformat"
+msgstr "Časovni format"
+
+#: templates/settings.php:34
+msgid "24h"
+msgstr "24ur"
+
+#: templates/settings.php:35
+msgid "12h"
+msgstr "12ur"
+
+#: templates/settings.php:41
+msgid "Calendar CalDAV syncing address:"
+msgstr "Kolendarjev CalDAV sinhronizacijski naslov"
+
+
diff --git a/l10n/sl/contacts.po b/l10n/sl/contacts.po
new file mode 100644
index 00000000000..a57a3548574
--- /dev/null
+++ b/l10n/sl/contacts.po
@@ -0,0 +1,291 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <urossolar@hotmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Slovenian (http://www.transifex.net/projects/p/owncloud/team/sl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sl\n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3)\n"
+
+#: ajax/activation.php:17 ajax/updateaddressbook.php:26
+msgid "Error (de)activating addressbook."
+msgstr ""
+
+#: ajax/addcard.php:79
+msgid "There was an error adding the contact."
+msgstr ""
+
+#: ajax/addproperty.php:39
+msgid "Cannot add empty property."
+msgstr ""
+
+#: ajax/addproperty.php:51
+msgid "At least one of the address fields has to be filled out."
+msgstr ""
+
+#: ajax/addproperty.php:77
+msgid "Error adding contact property."
+msgstr ""
+
+#: ajax/createaddressbook.php:20
+msgid "Error adding addressbook."
+msgstr ""
+
+#: ajax/createaddressbook.php:26
+msgid "Error activating addressbook."
+msgstr ""
+
+#: ajax/deleteproperty.php:40
+msgid "Error deleting contact property."
+msgstr ""
+
+#: ajax/setproperty.php:79
+msgid "Error updating contact property."
+msgstr ""
+
+#: ajax/updateaddressbook.php:20
+msgid "Error updating addressbook."
+msgstr ""
+
+#: appinfo/app.php:21 templates/settings.php:3
+msgid "Contacts"
+msgstr ""
+
+#: lib/app.php:42
+msgid "This is not your addressbook."
+msgstr "To ni vaš adresar."
+
+#: lib/app.php:51 photo.php:34
+msgid "Contact could not be found."
+msgstr "Kontakta ni bilo mogoče najti."
+
+#: lib/app.php:79
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr ""
+"Informacije o vVizitki (vCard) niso pravilne, Prosimo ponovno naložite okno."
+
+#: lib/app.php:91 templates/part.addcardform.php:54
+#: templates/part.property.php:45 templates/part.setpropertyform.php:7
+msgid "Address"
+msgstr "Naslov"
+
+#: lib/app.php:92 templates/part.addcardform.php:43
+msgid "Telephone"
+msgstr "Telefon"
+
+#: lib/app.php:93 templates/part.addcardform.php:37
+#: templates/part.property.php:16 templates/part.setpropertyform.php:51
+msgid "Email"
+msgstr "Email"
+
+#: lib/app.php:94 templates/part.addcardform.php:27
+#: templates/part.property.php:9 templates/part.setpropertyform.php:54
+msgid "Organization"
+msgstr "Organizacija"
+
+#: lib/app.php:106 lib/app.php:113
+msgid "Work"
+msgstr "Delo"
+
+#: lib/app.php:107 lib/app.php:111
+msgid "Home"
+msgstr "Doma"
+
+#: lib/app.php:112
+msgid "Mobile"
+msgstr "Mobitel"
+
+#: lib/app.php:114
+msgid "Text"
+msgstr "Tekst"
+
+#: lib/app.php:115
+msgid "Voice"
+msgstr "Glas- Voice"
+
+#: lib/app.php:116
+msgid "Fax"
+msgstr "Faks"
+
+#: lib/app.php:117
+msgid "Video"
+msgstr "Video"
+
+#: lib/app.php:118
+msgid "Pager"
+msgstr "Pager"
+
+#: lib/search.php:22
+msgid "Contact"
+msgstr ""
+
+#: photo.php:40
+msgid "This is not your contact."
+msgstr "To ni vaš kontakt"
+
+#: photo.php:48
+msgid "This card is not RFC compatible."
+msgstr "Ta karta ni RFC kopatibilna."
+
+#: photo.php:85
+msgid "This card does not contain a photo."
+msgstr "Ta karta ne vsebuje slike."
+
+#: templates/index.php:6
+msgid "Add Contact"
+msgstr "Dodaj Kontakt"
+
+#: templates/index.php:7
+msgid "Addressbooks"
+msgstr ""
+
+#: templates/part.addcardform.php:8
+msgid "Addressbook"
+msgstr ""
+
+#: templates/part.addcardform.php:21
+msgid "Name"
+msgstr "Ime"
+
+#: templates/part.addcardform.php:57 templates/part.details.php:43
+#: templates/part.details.php:79 templates/part.setpropertyform.php:10
+#: templates/part.setpropertyform.php:47
+msgid "Type"
+msgstr ""
+
+#: templates/part.addcardform.php:65 templates/part.details.php:49
+#: templates/part.setpropertyform.php:16
+msgid "PO Box"
+msgstr "PO Box"
+
+#: templates/part.addcardform.php:72 templates/part.details.php:53
+#: templates/part.setpropertyform.php:20
+msgid "Extended"
+msgstr "Razširjeno."
+
+#: templates/part.addcardform.php:78 templates/part.details.php:57
+#: templates/part.setpropertyform.php:24
+msgid "Street"
+msgstr "Ulica"
+
+#: templates/part.addcardform.php:84 templates/part.details.php:61
+#: templates/part.setpropertyform.php:28
+msgid "City"
+msgstr "Mesto"
+
+#: templates/part.addcardform.php:90 templates/part.details.php:65
+#: templates/part.setpropertyform.php:32
+msgid "Region"
+msgstr "Regija"
+
+#: templates/part.addcardform.php:96 templates/part.details.php:69
+#: templates/part.setpropertyform.php:36
+msgid "Zipcode"
+msgstr "Poštna št."
+
+#: templates/part.addcardform.php:102 templates/part.details.php:73
+#: templates/part.setpropertyform.php:40
+msgid "Country"
+msgstr "Dežela"
+
+#: templates/part.addcardform.php:109
+msgid "Create Contact"
+msgstr "Ustvari Kontakt"
+
+#: templates/part.chooseaddressbook.php:1
+msgid "Choose active Address Books"
+msgstr ""
+
+#: templates/part.chooseaddressbook.php:16
+msgid "New Address Book"
+msgstr ""
+
+#: templates/part.chooseaddressbook.php:21
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "CardDav Link"
+msgstr ""
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Download"
+msgstr ""
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Edit"
+msgstr "Uredi"
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Delete"
+msgstr "Izbriši"
+
+#: templates/part.details.php:3
+msgid "Download contact"
+msgstr ""
+
+#: templates/part.details.php:4
+msgid "Delete contact"
+msgstr ""
+
+#: templates/part.details.php:34
+msgid "Add"
+msgstr ""
+
+#: templates/part.editaddressbook.php:9
+msgid "New Addressbook"
+msgstr ""
+
+#: templates/part.editaddressbook.php:9
+msgid "Edit Addressbook"
+msgstr ""
+
+#: templates/part.editaddressbook.php:12
+msgid "Displayname"
+msgstr ""
+
+#: templates/part.editaddressbook.php:23
+msgid "Active"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Save"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Submit"
+msgstr ""
+
+#: templates/part.editaddressbook.php:30
+msgid "Cancel"
+msgstr ""
+
+#: templates/part.property.php:3
+msgid "Birthday"
+msgstr "Rojstni Dan"
+
+#: templates/part.property.php:23
+msgid "Preferred"
+msgstr ""
+
+#: templates/part.property.php:23 templates/part.setpropertyform.php:45
+msgid "Phone"
+msgstr "Telefon"
+
+#: templates/part.setpropertyform.php:57
+msgid "Update"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "CardDAV syncing address:"
+msgstr ""
+
+
diff --git a/l10n/sl/core.po b/l10n/sl/core.po
new file mode 100644
index 00000000000..616829d650b
--- /dev/null
+++ b/l10n/sl/core.po
@@ -0,0 +1,172 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Slovenian (http://www.transifex.net/projects/p/owncloud/team/sl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sl\n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3)\n"
+
+#: lostpassword/index.php:24
+msgid "Owncloud password reset"
+msgstr ""
+
+#: lostpassword/templates/email.php:1
+msgid "Use the following link to reset your password: {link}"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr ""
+"Preko email sporočila boste prejeli povezavo s katero lahko ponovno "
+"nastavite geslo"
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Requested"
+msgstr "Zahtevano"
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr "Prijava ni Uspela!"
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:22
+#: templates/login.php:8
+msgid "Username"
+msgstr "Uporabniško Ime"
+
+#: lostpassword/templates/lostpassword.php:14
+msgid "Request reset"
+msgstr "Zahtevaj ponastavitev"
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr "Vaše geslo je bilo ponastavljeno"
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr "novo geslo"
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr "Ponastavi Geslo"
+
+#: strings.php:5
+msgid "Personal"
+msgstr "Osebno"
+
+#: strings.php:6
+msgid "Users"
+msgstr "Uporabniki"
+
+#: strings.php:7
+msgid "Apps"
+msgstr "Apps"
+
+#: strings.php:8
+msgid "Admin"
+msgstr "Admin"
+
+#: strings.php:9
+msgid "Help"
+msgstr "Pomoč"
+
+#: templates/404.php:12
+msgid "Cloud not found"
+msgstr "Ni najdeno"
+
+#: templates/installation.php:20
+msgid "Create an <strong>admin account</strong>"
+msgstr "Ustvari <strong>admin račun</strong>"
+
+#: templates/installation.php:26 templates/login.php:12
+msgid "Password"
+msgstr "Geslo"
+
+#: templates/installation.php:32
+msgid "Advanced"
+msgstr "Napredno"
+
+#: templates/installation.php:34
+msgid "Data folder"
+msgstr "Data Mapa"
+
+#: templates/installation.php:41
+msgid "Configure the database"
+msgstr "Nastavi Podatkovno Bazo"
+
+#: templates/installation.php:46 templates/installation.php:57
+#: templates/installation.php:67
+msgid "will be used"
+msgstr "Bo uporabljeno"
+
+#: templates/installation.php:79
+msgid "Database user"
+msgstr "Podatkovna Baza Uporabnik"
+
+#: templates/installation.php:83
+msgid "Database password"
+msgstr "Podatkovna Baza Geslo"
+
+#: templates/installation.php:87
+msgid "Database name"
+msgstr "Ime Podatkovne Baze"
+
+#: templates/installation.php:93
+msgid "Database host"
+msgstr "Database host"
+
+#: templates/installation.php:98
+msgid "Finish setup"
+msgstr "Končaj instalacijo"
+
+#: templates/layout.guest.php:35
+msgid "web services under your control"
+msgstr ""
+
+#: templates/layout.user.php:34
+msgid "Log out"
+msgstr "Odjava"
+
+#: templates/layout.user.php:46 templates/layout.user.php:47
+msgid "Settings"
+msgstr "Nastavitve"
+
+#: templates/login.php:5
+msgid "Lost your password?"
+msgstr "Ste pozabili vaše geslo?"
+
+#: templates/login.php:15
+msgid "remember"
+msgstr "zapomni"
+
+#: templates/login.php:16
+msgid "Log in"
+msgstr ""
+
+#: templates/logout.php:1
+msgid "You are logged out."
+msgstr "Odjavljeni ste"
+
+#: templates/part.pagenavi.php:3
+msgid "prev"
+msgstr "nazaj"
+
+#: templates/part.pagenavi.php:20
+msgid "next"
+msgstr "naprej"
+
+
diff --git a/l10n/sl/files.po b/l10n/sl/files.po
new file mode 100644
index 00000000000..22dd51da6b1
--- /dev/null
+++ b/l10n/sl/files.po
@@ -0,0 +1,114 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Slovenian (http://www.transifex.net/projects/p/owncloud/team/sl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sl\n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3)\n"
+
+#: ajax/upload.php:19
+msgid "There is no error, the file uploaded with success"
+msgstr "datoteka je bila naložena uspešno."
+
+#: ajax/upload.php:20
+msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
+msgstr ""
+"Velikost željene naložene datoteke je prevelika. (upload_max_filesize - "
+"php.ini) Kontaktirajte Administratorja."
+
+#: ajax/upload.php:21
+msgid ""
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
+"the HTML form"
+msgstr ""
+"Velikost željene naložene datoteke je prevelika. (MAX_FILE_SIZE - html "
+"formi) Kontaktirajte Administratorja."
+
+#: ajax/upload.php:22
+msgid "The uploaded file was only partially uploaded"
+msgstr "Datoteka je bila le delno naložena."
+
+#: ajax/upload.php:23
+msgid "No file was uploaded"
+msgstr "Naloženih ni bilo nič Datotek."
+
+#: ajax/upload.php:24
+msgid "Missing a temporary folder"
+msgstr "Ni potrebne začasne datoteke. (temporary folder)"
+
+#: appinfo/app.php:8
+msgid "Files"
+msgstr "Datoteke"
+
+#: templates/admin.php:5
+msgid "Maximum upload size"
+msgstr "Maksimalna velikost"
+
+#: templates/index.php:7
+msgid "New"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Text file"
+msgstr ""
+
+#: templates/index.php:11
+msgid "Folder"
+msgstr ""
+
+#: templates/index.php:12
+msgid "From the web"
+msgstr ""
+
+#: templates/index.php:22
+msgid "Upload"
+msgstr "Naloži gor"
+
+#: templates/index.php:35
+msgid "Nothing in here. Upload something!"
+msgstr "Naloženih še ni bilo nič datotek."
+
+#: templates/index.php:43
+msgid "Name"
+msgstr "Ime"
+
+#: templates/index.php:45
+msgid "Download"
+msgstr "Naloži dol"
+
+#: templates/index.php:49
+msgid "Size"
+msgstr "Velikost"
+
+#: templates/index.php:50
+msgid "Modified"
+msgstr "Urejeno"
+
+#: templates/index.php:50
+msgid "Delete"
+msgstr "Izbriši"
+
+#: templates/index.php:58
+msgid "Upload too large"
+msgstr "Nalaganje ni mogoče, ker je preveliko."
+
+#: templates/index.php:60
+msgid ""
+"The files you are trying to upload exceed the maximum size for file uploads "
+"on this server."
+msgstr ""
+"Datoteke ki jih želiš naložiti presegajo maksimalno velikost na tem "
+"strežniku. Kontaktirajte Administratorja."
+
+
diff --git a/l10n/sl/gallery.po b/l10n/sl/gallery.po
new file mode 100644
index 00000000000..e4201f2eb23
--- /dev/null
+++ b/l10n/sl/gallery.po
@@ -0,0 +1,32 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:48+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Slovenian (http://www.transifex.net/projects/p/owncloud/team/sl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sl\n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3)\n"
+
+#: appinfo/app.php:41
+msgid "Gallery"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Rescan"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+
diff --git a/l10n/sl/media.po b/l10n/sl/media.po
new file mode 100644
index 00000000000..d9049fe094f
--- /dev/null
+++ b/l10n/sl/media.po
@@ -0,0 +1,65 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <urossolar@hotmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Slovenian (http://www.transifex.net/projects/p/owncloud/team/sl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sl\n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3)\n"
+
+#: appinfo/app.php:32
+msgid "Music"
+msgstr "Glasba"
+
+#: templates/music.php:3 templates/player.php:13
+msgid "Play"
+msgstr "Predvajaj"
+
+#: templates/music.php:4 templates/music.php:26 templates/player.php:14
+msgid "Pause"
+msgstr "Pavza"
+
+#: templates/music.php:5
+msgid "Previous"
+msgstr "Prejšnja"
+
+#: templates/music.php:6 templates/player.php:15
+msgid "Next"
+msgstr "Naslednja"
+
+#: templates/music.php:7
+msgid "Mute"
+msgstr "Izključi zvok"
+
+#: templates/music.php:8
+msgid "Unmute"
+msgstr "Vključi zvok"
+
+#: templates/music.php:25
+msgid "Rescan Collection"
+msgstr "Skeniraj zbirko"
+
+#: templates/music.php:37
+msgid "Artist"
+msgstr "Izvajalec"
+
+#: templates/music.php:38
+msgid "Album"
+msgstr "Album"
+
+#: templates/music.php:39
+msgid "Title"
+msgstr "Naslov"
+
+
diff --git a/l10n/sl/settings.po b/l10n/sl/settings.po
new file mode 100644
index 00000000000..13af55c4a9a
--- /dev/null
+++ b/l10n/sl/settings.po
@@ -0,0 +1,153 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <urossolar@hotmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Slovenian (http://www.transifex.net/projects/p/owncloud/team/sl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sl\n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3)\n"
+
+#: ajax/lostpassword.php:14
+msgid "email Changed"
+msgstr ""
+
+#: ajax/lostpassword.php:16 ajax/openid.php:17 ajax/setlanguage.php:16
+msgid "Invalid request"
+msgstr "Neveljavna zahteva"
+
+#: ajax/openid.php:15
+msgid "OpenID Changed"
+msgstr "OpenID spremenjen"
+
+#: ajax/setlanguage.php:14
+msgid "Language changed"
+msgstr "Jezik je bil spremenjen"
+
+#: templates/admin.php:13
+msgid "Log level"
+msgstr ""
+
+#: templates/apps.php:8
+msgid "Add your application"
+msgstr "Dodaj vašo aplikacijo"
+
+#: templates/apps.php:21
+msgid "Select an App"
+msgstr "Izberi aplikacijo"
+
+#: templates/apps.php:23
+msgid "-licensed"
+msgstr "-licenca"
+
+#: templates/apps.php:23
+msgid "by"
+msgstr "od"
+
+#: templates/help.php:8
+msgid "Ask a question"
+msgstr "Vprašaj"
+
+#: templates/help.php:20
+msgid "Problems connecting to help database."
+msgstr "Težave pri povezovanju z zbirko podatkov."
+
+#: templates/help.php:21
+msgid "Go there manually."
+msgstr "Pojdi tja ročno."
+
+#: templates/help.php:29
+msgid "Answer"
+msgstr "Odgovor"
+
+#: templates/personal.php:8
+msgid "You use"
+msgstr "Uporabljate"
+
+#: templates/personal.php:8
+msgid "of the available"
+msgstr "od narazpolago"
+
+#: templates/personal.php:13
+msgid "Your password got changed"
+msgstr "Vaše geslo je bilo spremenjeno."
+
+#: templates/personal.php:14
+msgid "Unable to change your password"
+msgstr "Vašega geslo ni bilo mogoče spremeniti."
+
+#: templates/personal.php:15
+msgid "Current password"
+msgstr "Trenutno Geslo"
+
+#: templates/personal.php:16
+msgid "New password"
+msgstr "Novo geslo"
+
+#: templates/personal.php:17
+msgid "show"
+msgstr "prikaži"
+
+#: templates/personal.php:18
+msgid "Change password"
+msgstr "Spremeni Geslo"
+
+#: templates/personal.php:24
+msgid "Email"
+msgstr ""
+
+#: templates/personal.php:25
+msgid "Your email address"
+msgstr ""
+
+#: templates/personal.php:26
+msgid "Fill in an email address to enable password recovery"
+msgstr ""
+
+#: templates/personal.php:32 templates/personal.php:33
+msgid "Language"
+msgstr "Jezik"
+
+#: templates/personal.php:38
+msgid "Help translate"
+msgstr ""
+
+#: templates/personal.php:45
+msgid "use this address to connect to your ownCloud in your file manager"
+msgstr "uporabi ta naslov za povezavo k \"mojoblak\" v vašem urejevalniku datotek"
+
+#: templates/users.php:15 templates/users.php:30
+msgid "Name"
+msgstr "Ime"
+
+#: templates/users.php:16 templates/users.php:31
+msgid "Password"
+msgstr "Geslo"
+
+#: templates/users.php:17 templates/users.php:32 templates/users.php:46
+msgid "Groups"
+msgstr "Skupine"
+
+#: templates/users.php:23
+msgid "Create"
+msgstr "Ustvari"
+
+#: templates/users.php:33
+msgid "Quota"
+msgstr ""
+
+#: templates/users.php:58
+msgid "Delete"
+msgstr "Izbriši"
+
+
diff --git a/l10n/sr/calendar.po b/l10n/sr/calendar.po
index 31a841e957b..8bfff379dec 100644
--- a/l10n/sr/calendar.po
+++ b/l10n/sr/calendar.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Serbian (http://www.transifex.net/projects/p/owncloud/team/sr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,351 +18,432 @@ msgstr ""
"Language: sr\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
-#: ajax/createcalendar.php:18 ajax/settimezone.php:19
-#: ajax/updatecalendar.php:18
-msgid "Authentication error"
-msgstr "Грешка аутентификације"
-
-#: ajax/editeventform.php:25
-msgid "Wrong calendar"
+#: ajax/guesstimezone.php:42
+msgid "New Timezone:"
msgstr ""
-#: ajax/settimezone.php:27
+#: ajax/settimezone.php:22
msgid "Timezone changed"
msgstr "Временска зона је промењена"
-#: ajax/settimezone.php:29
+#: ajax/settimezone.php:24
msgid "Invalid request"
msgstr "Неисправан захтев"
-#: appinfo/app.php:19 templates/part.eventform.php:27
-#: templates/part.eventinfo.php:18
+#: appinfo/app.php:20 templates/calendar.php:13
+#: templates/part.eventform.php:20
msgid "Calendar"
msgstr "Календар"
-#: lib/object.php:292
+#: lib/app.php:19
+msgid "Wrong calendar"
+msgstr "Погрешан календар"
+
+#: lib/app.php:60 lib/object.php:332
msgid "Birthday"
-msgstr ""
+msgstr "Рођендан"
-#: lib/object.php:293
+#: lib/app.php:61 lib/object.php:333
msgid "Business"
-msgstr ""
+msgstr "Посао"
-#: lib/object.php:294
+#: lib/app.php:62 lib/object.php:334
msgid "Call"
-msgstr ""
+msgstr "Позив"
-#: lib/object.php:295
+#: lib/app.php:63 lib/object.php:335
msgid "Clients"
-msgstr ""
+msgstr "Клијенти"
-#: lib/object.php:296
+#: lib/app.php:64 lib/object.php:336
msgid "Deliverer"
-msgstr ""
+msgstr "Достављач"
-#: lib/object.php:297
+#: lib/app.php:65 lib/object.php:337
msgid "Holidays"
-msgstr ""
+msgstr "Празници"
-#: lib/object.php:298
+#: lib/app.php:66 lib/object.php:338
msgid "Ideas"
-msgstr ""
+msgstr "Идеје"
-#: lib/object.php:299
+#: lib/app.php:67 lib/object.php:339
msgid "Journey"
-msgstr ""
+msgstr "путовање"
-#: lib/object.php:300
+#: lib/app.php:68 lib/object.php:340
msgid "Jubilee"
-msgstr ""
+msgstr "јубилеј"
-#: lib/object.php:301
+#: lib/app.php:69 lib/object.php:341
msgid "Meeting"
-msgstr ""
+msgstr "Састанак"
-#: lib/object.php:302
+#: lib/app.php:70 lib/object.php:342
msgid "Other"
-msgstr ""
+msgstr "Друго"
-#: lib/object.php:303
+#: lib/app.php:71 lib/object.php:343
msgid "Personal"
-msgstr ""
+msgstr "Лично"
-#: lib/object.php:304
+#: lib/app.php:72 lib/object.php:344
msgid "Projects"
-msgstr ""
+msgstr "Пројекти"
-#: lib/object.php:305
+#: lib/app.php:73 lib/object.php:345
msgid "Questions"
-msgstr ""
+msgstr "Питања"
-#: lib/object.php:306
+#: lib/app.php:74 lib/object.php:346
msgid "Work"
-msgstr ""
+msgstr "Посао"
-#: lib/object.php:313
+#: lib/object.php:353
msgid "Does not repeat"
msgstr "Не понавља се"
-#: lib/object.php:314
+#: lib/object.php:354
msgid "Daily"
msgstr "дневно"
-#: lib/object.php:315
+#: lib/object.php:355
msgid "Weekly"
msgstr "недељно"
-#: lib/object.php:316
+#: lib/object.php:356
msgid "Every Weekday"
msgstr "сваког дана у недељи"
-#: lib/object.php:317
+#: lib/object.php:357
msgid "Bi-Weekly"
msgstr "двонедељно"
-#: lib/object.php:318
+#: lib/object.php:358
msgid "Monthly"
msgstr "месечно"
-#: lib/object.php:319
+#: lib/object.php:359
msgid "Yearly"
msgstr "годишње"
-#: lib/object.php:337
-msgid "Not an array"
+#: lib/object.php:366
+msgid "never"
msgstr ""
-#: templates/calendar.php:3
-msgid "All day"
-msgstr "Цео дан"
+#: lib/object.php:367
+msgid "by occurrences"
+msgstr ""
-#: templates/calendar.php:32
-msgid "Sunday"
-msgstr "Недеља"
+#: lib/object.php:368
+msgid "by date"
+msgstr ""
+
+#: lib/object.php:375
+msgid "by monthday"
+msgstr ""
+
+#: lib/object.php:376
+msgid "by weekday"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:383 templates/lAfix.php:3
msgid "Monday"
-msgstr "Понедељак"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:384 templates/lAfix.php:4
msgid "Tuesday"
-msgstr "Уторак"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:385 templates/lAfix.php:5
msgid "Wednesday"
-msgstr "Среда"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:386 templates/lAfix.php:6
msgid "Thursday"
-msgstr "Четвртак"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:387 templates/lAfix.php:7
msgid "Friday"
-msgstr "Петак"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:388 templates/lAfix.php:8
msgid "Saturday"
-msgstr "Субота"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Sun."
-msgstr "Нед"
+#: lib/object.php:389 templates/lAfix.php:2
+msgid "Sunday"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Mon."
-msgstr "Пон"
+#: lib/object.php:396
+msgid "events week of month"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Tue."
-msgstr "Уто"
+#: lib/object.php:397
+msgid "first"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Wed."
-msgstr "Сре"
+#: lib/object.php:398
+msgid "second"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Thu."
-msgstr "Чет"
+#: lib/object.php:399
+msgid "third"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Fri."
-msgstr "Пет"
+#: lib/object.php:400
+msgid "fourth"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Sat."
-msgstr "Суб"
+#: lib/object.php:401
+msgid "fifth"
+msgstr ""
+
+#: lib/object.php:402
+msgid "last"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:424 templates/lAfix.php:16
msgid "January"
-msgstr "Јануар"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:425 templates/lAfix.php:17
msgid "February"
-msgstr "Фебруар"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:426 templates/lAfix.php:18
msgid "March"
-msgstr "Март"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:427 templates/lAfix.php:19
msgid "April"
-msgstr "Април"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:428 templates/lAfix.php:20
msgid "May"
-msgstr "Мај"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:429 templates/lAfix.php:21
msgid "June"
-msgstr "Јун"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:430 templates/lAfix.php:22
msgid "July"
-msgstr "Јул"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:431 templates/lAfix.php:23
msgid "August"
-msgstr "Август"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:432 templates/lAfix.php:24
msgid "September"
-msgstr "Септембар"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:433 templates/lAfix.php:25
msgid "October"
-msgstr "Октобар"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:434 templates/lAfix.php:26
msgid "November"
-msgstr "Новембар"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:435 templates/lAfix.php:27
msgid "December"
-msgstr "Децембар"
-
-#: templates/calendar.php:35
-msgid "Jan."
-msgstr "Јан"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Feb."
-msgstr "Феб"
+#: lib/object.php:441
+msgid "by events date"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Mar."
-msgstr "Мар"
+#: lib/object.php:442
+msgid "by yearday(s)"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Apr."
-msgstr "Апр"
+#: lib/object.php:443
+msgid "by weeknumber(s)"
+msgstr ""
-#: templates/calendar.php:35
-msgid "May."
+#: lib/object.php:444
+msgid "by day and month"
msgstr ""
-#: templates/calendar.php:35
-msgid "Jun."
-msgstr "Јун"
+#: lib/object.php:467
+msgid "Not an array"
+msgstr "Није област"
-#: templates/calendar.php:35
-msgid "Jul."
-msgstr "Јул"
+#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+msgid "Date"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Aug."
-msgstr "Авг"
+#: lib/search.php:40
+msgid "Cal."
+msgstr ""
-#: templates/calendar.php:35
-msgid "Sep."
-msgstr "Сеп"
+#: templates/calendar.php:10
+msgid "All day"
+msgstr "Цео дан"
-#: templates/calendar.php:35
-msgid "Oct."
-msgstr "Окт"
+#: templates/calendar.php:11
+msgid "Missing fields"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Nov."
-msgstr "Нов"
+#: templates/calendar.php:12 templates/part.eventform.php:3
+msgid "Title"
+msgstr "Наслов"
-#: templates/calendar.php:35
-msgid "Dec."
-msgstr "Дец"
+#: templates/calendar.php:14
+msgid "From Date"
+msgstr ""
-#: templates/calendar.php:36 templates/calendar.php:50
-#: templates/calendar.php:116
-msgid "Week"
-msgstr "Недеља"
+#: templates/calendar.php:15
+msgid "From Time"
+msgstr ""
-#: templates/calendar.php:37 templates/calendar.php:51
-msgid "Weeks"
-msgstr "Недеља"
+#: templates/calendar.php:16
+msgid "To Date"
+msgstr ""
-#: templates/calendar.php:38
-msgid "More before {startdate}"
+#: templates/calendar.php:17
+msgid "To Time"
msgstr ""
-#: templates/calendar.php:39
-msgid "More after {enddate}"
+#: templates/calendar.php:18
+msgid "The event ends before it starts"
msgstr ""
-#: templates/calendar.php:49
-msgid "Day"
-msgstr "Дан"
+#: templates/calendar.php:19
+msgid "There was a database fail"
+msgstr ""
#: templates/calendar.php:52
+msgid "Week"
+msgstr "Недеља"
+
+#: templates/calendar.php:53
msgid "Month"
msgstr "Месец"
-#: templates/calendar.php:53
+#: templates/calendar.php:54
msgid "List"
-msgstr ""
+msgstr "Списак"
-#: templates/calendar.php:58
+#: templates/calendar.php:59
msgid "Today"
msgstr "Данас"
-#: templates/calendar.php:59
+#: templates/calendar.php:60
msgid "Calendars"
msgstr "Календари"
-#: templates/calendar.php:76 templates/calendar.php:94
-msgid "Time"
-msgstr "Време"
-
-#: templates/calendar.php:169
+#: templates/calendar.php:78
msgid "There was a fail, while parsing the file."
msgstr "дошло је до грешке при расчлањивању фајла."
+#: templates/lAfix.php:9
+msgid "Sun."
+msgstr ""
+
+#: templates/lAfix.php:10
+msgid "Mon."
+msgstr ""
+
+#: templates/lAfix.php:11
+msgid "Tue."
+msgstr ""
+
+#: templates/lAfix.php:12
+msgid "Wed."
+msgstr ""
+
+#: templates/lAfix.php:13
+msgid "Thu."
+msgstr ""
+
+#: templates/lAfix.php:14
+msgid "Fri."
+msgstr ""
+
+#: templates/lAfix.php:15
+msgid "Sat."
+msgstr ""
+
+#: templates/lAfix.php:28
+msgid "Jan."
+msgstr ""
+
+#: templates/lAfix.php:29
+msgid "Feb."
+msgstr ""
+
+#: templates/lAfix.php:30
+msgid "Mar."
+msgstr ""
+
+#: templates/lAfix.php:31
+msgid "Apr."
+msgstr ""
+
+#: templates/lAfix.php:32
+msgid "May."
+msgstr ""
+
+#: templates/lAfix.php:33
+msgid "Jun."
+msgstr ""
+
+#: templates/lAfix.php:34
+msgid "Jul."
+msgstr ""
+
+#: templates/lAfix.php:35
+msgid "Aug."
+msgstr ""
+
+#: templates/lAfix.php:36
+msgid "Sep."
+msgstr ""
+
+#: templates/lAfix.php:37
+msgid "Oct."
+msgstr ""
+
+#: templates/lAfix.php:38
+msgid "Nov."
+msgstr ""
+
+#: templates/lAfix.php:39
+msgid "Dec."
+msgstr ""
+
#: templates/part.choosecalendar.php:1
msgid "Choose active calendars"
msgstr "Изаберите активне календаре"
#: templates/part.choosecalendar.php:15
msgid "New Calendar"
-msgstr ""
+msgstr "Нови календар"
#: templates/part.choosecalendar.php:20
#: templates/part.choosecalendar.rowfields.php:4
msgid "CalDav Link"
-msgstr ""
+msgstr "КалДав веза"
#: templates/part.choosecalendar.rowfields.php:4
msgid "Download"
msgstr "Преузми"
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.eventinfo.php:64
msgid "Edit"
msgstr "Уреди"
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.editevent.php:8
+#: templates/part.editevent.php:9
msgid "Delete"
-msgstr ""
+msgstr "Обриши"
#: templates/part.editcalendar.php:9
msgid "New calendar"
-msgstr ""
+msgstr "Нови календар"
#: templates/part.editcalendar.php:9
msgid "Edit calendar"
@@ -376,90 +457,181 @@ msgstr "Приказаноиме"
msgid "Active"
msgstr "Активан"
-#: templates/part.editcalendar.php:29 templates/part.eventform.php:88
-#: templates/part.eventinfo.php:58
-msgid "Description"
-msgstr "Опис"
-
-#: templates/part.editcalendar.php:35
+#: templates/part.editcalendar.php:29
msgid "Calendar color"
msgstr "Боја календара"
-#: templates/part.editcalendar.php:41
+#: templates/part.editcalendar.php:42
msgid "Save"
-msgstr ""
+msgstr "Сними"
-#: templates/part.editcalendar.php:41 templates/part.editevent.php:7
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
#: templates/part.newevent.php:6
msgid "Submit"
msgstr "Пошаљи"
-#: templates/part.editcalendar.php:42
+#: templates/part.editcalendar.php:43
msgid "Cancel"
-msgstr ""
+msgstr "Откажи"
-#: templates/part.editevent.php:1 templates/part.eventinfo.php:1
+#: templates/part.editevent.php:1
msgid "Edit an event"
msgstr "Уреди догађај"
-#: templates/part.eventform.php:3 templates/part.eventinfo.php:4
-msgid "Title"
-msgstr "Наслов"
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr ""
#: templates/part.eventform.php:5
msgid "Title of the Event"
msgstr "Наслов догађаја"
-#: templates/part.eventform.php:9 templates/part.eventinfo.php:9
-msgid "Location"
-msgstr "Локација"
-
#: templates/part.eventform.php:11
-msgid "Location of the Event"
-msgstr "Локација догађаја"
-
-#: templates/part.eventform.php:17 templates/part.eventinfo.php:16
msgid "Category"
msgstr "Категорија"
-#: templates/part.eventform.php:19
+#: templates/part.eventform.php:13
msgid "Select category"
-msgstr ""
+msgstr "Изаберите категорију"
-#: templates/part.eventform.php:45 templates/part.eventinfo.php:28
+#: templates/part.eventform.php:37
msgid "All Day Event"
msgstr "Целодневни догађај"
-#: templates/part.eventform.php:49 templates/part.eventinfo.php:31
+#: templates/part.eventform.php:41
msgid "From"
msgstr "Од"
-#: templates/part.eventform.php:57 templates/part.eventinfo.php:38
+#: templates/part.eventform.php:49
msgid "To"
msgstr "До"
-#: templates/part.eventform.php:65 templates/part.eventinfo.php:44
+#: templates/part.eventform.php:57
+msgid "Advanced options"
+msgstr ""
+
+#: templates/part.eventform.php:61
msgid "Repeat"
msgstr "Понављај"
-#: templates/part.eventform.php:81 templates/part.eventinfo.php:51
-msgid "Attendees"
-msgstr "Присутни"
+#: templates/part.eventform.php:68
+msgid "Advanced"
+msgstr ""
+
+#: templates/part.eventform.php:112
+msgid "Select weekdays"
+msgstr ""
+
+#: templates/part.eventform.php:125 templates/part.eventform.php:138
+msgid "Select days"
+msgstr ""
+
+#: templates/part.eventform.php:130
+msgid "and the events day of year."
+msgstr ""
+
+#: templates/part.eventform.php:143
+msgid "and the events day of month."
+msgstr ""
+
+#: templates/part.eventform.php:151
+msgid "Select months"
+msgstr ""
+
+#: templates/part.eventform.php:164
+msgid "Select weeks"
+msgstr ""
+
+#: templates/part.eventform.php:169
+msgid "and the events week of year."
+msgstr ""
+
+#: templates/part.eventform.php:175
+msgid "Interval"
+msgstr ""
+
+#: templates/part.eventform.php:181
+msgid "End"
+msgstr ""
+
+#: templates/part.eventform.php:193
+msgid "occurrences"
+msgstr ""
+
+#: templates/part.eventform.php:208
+msgid "Location"
+msgstr "Локација"
+
+#: templates/part.eventform.php:210
+msgid "Location of the Event"
+msgstr "Локација догађаја"
+
+#: templates/part.eventform.php:216
+msgid "Description"
+msgstr "Опис"
-#: templates/part.eventform.php:89
+#: templates/part.eventform.php:218
msgid "Description of the Event"
msgstr "Опис догађаја"
-#: templates/part.eventinfo.php:63
-msgid "Close"
-msgstr "Затвори"
+#: templates/part.import.php:1
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the calendar"
+msgstr ""
+
+#: templates/part.import.php:10
+msgid "create a new calendar"
+msgstr ""
+
+#: templates/part.import.php:15
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import"
+msgstr ""
+
+#: templates/part.import.php:20
+msgid "Importing calendar"
+msgstr ""
+
+#: templates/part.import.php:23
+msgid "Calendar imported successfully"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Close Dialog"
+msgstr ""
#: templates/part.newevent.php:1
msgid "Create a new event"
msgstr "Направи нови догађај"
-#: templates/settings.php:11
+#: templates/settings.php:13
msgid "Timezone"
msgstr "Временска зона"
+#: templates/settings.php:30
+msgid "Check always for changes of the timezone"
+msgstr ""
+
+#: templates/settings.php:32
+msgid "Timeformat"
+msgstr ""
+
+#: templates/settings.php:34
+msgid "24h"
+msgstr ""
+
+#: templates/settings.php:35
+msgid "12h"
+msgstr ""
+
+#: templates/settings.php:41
+msgid "Calendar CalDAV syncing address:"
+msgstr ""
+
diff --git a/l10n/sr/contacts.po b/l10n/sr/contacts.po
index 780af00702d..5ea7d2b6d3f 100644
--- a/l10n/sr/contacts.po
+++ b/l10n/sr/contacts.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Slobodan Terzić <githzerai06@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 20:10+0200\n"
-"PO-Revision-Date: 2011-09-23 18:10+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Serbian (http://www.transifex.net/projects/p/owncloud/team/sr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,164 +18,273 @@ msgstr ""
"Language: sr\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
-#: ajax/addcard.php:31 ajax/addproperty.php:31 ajax/deletebook.php:32
-#: ajax/deletecard.php:32 ajax/deleteproperty.php:34 ajax/getdetails.php:32
-#: ajax/setproperty.php:32 ajax/showaddcard.php:30 ajax/showaddproperty.php:31
-#: ajax/showsetproperty.php:32 photo.php:32
-msgid "You need to log in."
+#: ajax/activation.php:17 ajax/updateaddressbook.php:26
+msgid "Error (de)activating addressbook."
msgstr ""
-#: ajax/addcard.php:37
-msgid "This is not your addressbook."
+#: ajax/addcard.php:79
+msgid "There was an error adding the contact."
msgstr ""
-#: ajax/addproperty.php:37 ajax/deletecard.php:39 ajax/deleteproperty.php:41
-#: ajax/getdetails.php:39 ajax/setproperty.php:38 ajax/showaddproperty.php:37
-#: ajax/showsetproperty.php:38 photo.php:39
-msgid "Contact could not be found."
+#: ajax/addproperty.php:39
+msgid "Cannot add empty property."
msgstr ""
-#: ajax/addproperty.php:43 ajax/deletebook.php:38 ajax/deletecard.php:45
-#: ajax/deleteproperty.php:47 ajax/getdetails.php:45 ajax/setproperty.php:44
-#: ajax/showaddproperty.php:43 ajax/showsetproperty.php:44 photo.php:45
-msgid "This is not your contact."
+#: ajax/addproperty.php:51
+msgid "At least one of the address fields has to be filled out."
msgstr ""
-#: ajax/addproperty.php:50 ajax/deleteproperty.php:54 ajax/getdetails.php:52
-#: ajax/setproperty.php:51 ajax/showsetproperty.php:51
-msgid "vCard could not be read."
+#: ajax/addproperty.php:77
+msgid "Error adding contact property."
msgstr ""
-#: ajax/deleteproperty.php:65 ajax/setproperty.php:62
-#: ajax/showsetproperty.php:62
-msgid "Information about vCard is incorrect. Please reload the page."
+#: ajax/createaddressbook.php:20
+msgid "Error adding addressbook."
msgstr ""
-#: photo.php:53
-msgid "This card is not RFC compatible."
+#: ajax/createaddressbook.php:26
+msgid "Error activating addressbook."
msgstr ""
-#: photo.php:90
-msgid "This card does not contain a photo."
+#: ajax/deleteproperty.php:40
+msgid "Error deleting contact property."
msgstr ""
-#: templates/index.php:8
-msgid "Add Contact"
+#: ajax/setproperty.php:79
+msgid "Error updating contact property."
msgstr ""
-#: templates/part.addcardform.php:5
-msgid "Group"
+#: ajax/updateaddressbook.php:20
+msgid "Error updating addressbook."
msgstr ""
-#: templates/part.addcardform.php:12 templates/part.property.php:3
-msgid "Name"
+#: appinfo/app.php:21 templates/settings.php:3
+msgid "Contacts"
msgstr ""
-#: templates/part.addcardform.php:14
-msgid "Create Contact"
-msgstr ""
+#: lib/app.php:42
+msgid "This is not your addressbook."
+msgstr "Ово није ваш адресар."
-#: templates/part.addpropertyform.php:4 templates/part.property.php:40
+#: lib/app.php:51 photo.php:34
+msgid "Contact could not be found."
+msgstr "Контакт се не може наћи."
+
+#: lib/app.php:79
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "Подаци о вКарти су неисправни. Поново учитајте страницу."
+
+#: lib/app.php:91 templates/part.addcardform.php:54
+#: templates/part.property.php:45 templates/part.setpropertyform.php:7
msgid "Address"
-msgstr ""
+msgstr "Адреса"
-#: templates/part.addpropertyform.php:5
+#: lib/app.php:92 templates/part.addcardform.php:43
msgid "Telephone"
-msgstr ""
+msgstr "Телефон"
-#: templates/part.addpropertyform.php:6 templates/part.property.php:22
+#: lib/app.php:93 templates/part.addcardform.php:37
+#: templates/part.property.php:16 templates/part.setpropertyform.php:51
msgid "Email"
-msgstr ""
+msgstr "Е-маил"
-#: templates/part.addpropertyform.php:7 templates/part.property.php:15
+#: lib/app.php:94 templates/part.addcardform.php:27
+#: templates/part.property.php:9 templates/part.setpropertyform.php:54
msgid "Organization"
-msgstr ""
+msgstr "Организација"
-#: templates/part.addpropertyform.php:17 templates/part.addpropertyform.php:32
+#: lib/app.php:106 lib/app.php:113
msgid "Work"
-msgstr ""
+msgstr "Посао"
-#: templates/part.addpropertyform.php:18 templates/part.addpropertyform.php:30
+#: lib/app.php:107 lib/app.php:111
msgid "Home"
+msgstr "Кућа"
+
+#: lib/app.php:112
+msgid "Mobile"
+msgstr "Мобилни"
+
+#: lib/app.php:114
+msgid "Text"
+msgstr "Текст"
+
+#: lib/app.php:115
+msgid "Voice"
+msgstr "Глас"
+
+#: lib/app.php:116
+msgid "Fax"
+msgstr "Факс"
+
+#: lib/app.php:117
+msgid "Video"
+msgstr "Видео"
+
+#: lib/app.php:118
+msgid "Pager"
+msgstr "Пејџер"
+
+#: lib/search.php:22
+msgid "Contact"
msgstr ""
-#: templates/part.addpropertyform.php:20 templates/part.property.php:48
-#: templates/part.setpropertyform.php:5
-msgid "PO Box"
+#: photo.php:40
+msgid "This is not your contact."
+msgstr "Ово није ваш контакт."
+
+#: photo.php:48
+msgid "This card is not RFC compatible."
+msgstr "Ова карта није сагласна са РФЦ-ом."
+
+#: photo.php:85
+msgid "This card does not contain a photo."
+msgstr "Ова карта не садржи фотографију."
+
+#: templates/index.php:6
+msgid "Add Contact"
+msgstr "Додај контакт"
+
+#: templates/index.php:7
+msgid "Addressbooks"
msgstr ""
-#: templates/part.addpropertyform.php:21 templates/part.property.php:51
-#: templates/part.setpropertyform.php:6
-msgid "Extended"
+#: templates/part.addcardform.php:8
+msgid "Addressbook"
msgstr ""
-#: templates/part.addpropertyform.php:22 templates/part.property.php:54
-#: templates/part.setpropertyform.php:7
-msgid "Street"
+#: templates/part.addcardform.php:21
+msgid "Name"
+msgstr "Име"
+
+#: templates/part.addcardform.php:57 templates/part.details.php:43
+#: templates/part.details.php:79 templates/part.setpropertyform.php:10
+#: templates/part.setpropertyform.php:47
+msgid "Type"
msgstr ""
-#: templates/part.addpropertyform.php:23 templates/part.property.php:57
-#: templates/part.setpropertyform.php:8
+#: templates/part.addcardform.php:65 templates/part.details.php:49
+#: templates/part.setpropertyform.php:16
+msgid "PO Box"
+msgstr "Поштански број"
+
+#: templates/part.addcardform.php:72 templates/part.details.php:53
+#: templates/part.setpropertyform.php:20
+msgid "Extended"
+msgstr "Прошири"
+
+#: templates/part.addcardform.php:78 templates/part.details.php:57
+#: templates/part.setpropertyform.php:24
+msgid "Street"
+msgstr "Улица"
+
+#: templates/part.addcardform.php:84 templates/part.details.php:61
+#: templates/part.setpropertyform.php:28
msgid "City"
-msgstr ""
+msgstr "Град"
-#: templates/part.addpropertyform.php:24 templates/part.property.php:60
-#: templates/part.setpropertyform.php:9
+#: templates/part.addcardform.php:90 templates/part.details.php:65
+#: templates/part.setpropertyform.php:32
msgid "Region"
-msgstr ""
+msgstr "Регија"
-#: templates/part.addpropertyform.php:25 templates/part.property.php:63
-#: templates/part.setpropertyform.php:10
+#: templates/part.addcardform.php:96 templates/part.details.php:69
+#: templates/part.setpropertyform.php:36
msgid "Zipcode"
-msgstr ""
+msgstr "Зип код"
-#: templates/part.addpropertyform.php:26 templates/part.property.php:66
-#: templates/part.setpropertyform.php:11
+#: templates/part.addcardform.php:102 templates/part.details.php:73
+#: templates/part.setpropertyform.php:40
msgid "Country"
+msgstr "Земља"
+
+#: templates/part.addcardform.php:109
+msgid "Create Contact"
+msgstr "Направи контакт"
+
+#: templates/part.chooseaddressbook.php:1
+msgid "Choose active Address Books"
msgstr ""
-#: templates/part.addpropertyform.php:31
-msgid "Mobile"
+#: templates/part.chooseaddressbook.php:16
+msgid "New Address Book"
msgstr ""
-#: templates/part.addpropertyform.php:33
-msgid "Text"
+#: templates/part.chooseaddressbook.php:21
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "CardDav Link"
msgstr ""
-#: templates/part.addpropertyform.php:34
-msgid "Voice"
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Download"
msgstr ""
-#: templates/part.addpropertyform.php:35
-msgid "Fax"
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Edit"
+msgstr "Уреди"
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Delete"
+msgstr "Обриши"
+
+#: templates/part.details.php:3
+msgid "Download contact"
msgstr ""
-#: templates/part.addpropertyform.php:36
-msgid "Video"
+#: templates/part.details.php:4
+msgid "Delete contact"
msgstr ""
-#: templates/part.addpropertyform.php:37
-msgid "Pager"
+#: templates/part.details.php:34
+msgid "Add"
msgstr ""
-#: templates/part.details.php:33
-msgid "Delete"
+#: templates/part.editaddressbook.php:9
+msgid "New Addressbook"
msgstr ""
-#: templates/part.details.php:34
-msgid "Add Property"
+#: templates/part.editaddressbook.php:9
+msgid "Edit Addressbook"
msgstr ""
-#: templates/part.property.php:9
+#: templates/part.editaddressbook.php:12
+msgid "Displayname"
+msgstr ""
+
+#: templates/part.editaddressbook.php:23
+msgid "Active"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Save"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Submit"
+msgstr ""
+
+#: templates/part.editaddressbook.php:30
+msgid "Cancel"
+msgstr ""
+
+#: templates/part.property.php:3
msgid "Birthday"
+msgstr "Рођендан"
+
+#: templates/part.property.php:23
+msgid "Preferred"
msgstr ""
-#: templates/part.property.php:29
+#: templates/part.property.php:23 templates/part.setpropertyform.php:45
msgid "Phone"
+msgstr "Телефон"
+
+#: templates/part.setpropertyform.php:57
+msgid "Update"
msgstr ""
-#: templates/part.setpropertyform.php:17
-msgid "Edit"
+#: templates/settings.php:4
+msgid "CardDAV syncing address:"
msgstr ""
diff --git a/l10n/sr/core.po b/l10n/sr/core.po
index 77abd798989..9bf02eedf6e 100644
--- a/l10n/sr/core.po
+++ b/l10n/sr/core.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 18:17+0200\n"
-"PO-Revision-Date: 2011-09-14 11:23+0000\n"
-"Last-Translator: Xabre <githzerai06@gmail.com>\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Serbian (http://www.transifex.net/projects/p/owncloud/team/sr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,6 +18,51 @@ msgstr ""
"Language: sr\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
+#: lostpassword/index.php:24
+msgid "Owncloud password reset"
+msgstr ""
+
+#: lostpassword/templates/email.php:1
+msgid "Use the following link to reset your password: {link}"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr "Добићете везу за ресетовање лозинке путем е-поште."
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Requested"
+msgstr "Захтевано"
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr "Несупела пријава!"
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:22
+#: templates/login.php:8
+msgid "Username"
+msgstr "Корисничко име"
+
+#: lostpassword/templates/lostpassword.php:14
+msgid "Request reset"
+msgstr "Захтевај ресетовање"
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr "Ваша лозинка је ресетована"
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr "Нова лозинка"
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr "Ресетуј лозинку"
+
#: strings.php:5
msgid "Personal"
msgstr "Лична"
@@ -46,54 +91,50 @@ msgstr "Облак није нађен"
msgid "Create an <strong>admin account</strong>"
msgstr "Направи <strong>административни налог</strong>"
-#: templates/installation.php:21
-msgid "Username"
-msgstr "Корисничко име"
-
-#: templates/installation.php:22
+#: templates/installation.php:26 templates/login.php:12
msgid "Password"
msgstr "Лозинка"
-#: templates/installation.php:27
+#: templates/installation.php:32
+msgid "Advanced"
+msgstr "Напредно"
+
+#: templates/installation.php:34
+msgid "Data folder"
+msgstr "Фацикла података"
+
+#: templates/installation.php:41
msgid "Configure the database"
msgstr "Подешавање базе"
-#: templates/installation.php:32 templates/installation.php:43
-#: templates/installation.php:53
+#: templates/installation.php:46 templates/installation.php:57
+#: templates/installation.php:67
msgid "will be used"
msgstr "ће бити коришћен"
-#: templates/installation.php:64
+#: templates/installation.php:79
msgid "Database user"
msgstr "Корисник базе"
-#: templates/installation.php:65
+#: templates/installation.php:83
msgid "Database password"
msgstr "Лозинка базе"
-#: templates/installation.php:66
+#: templates/installation.php:87
msgid "Database name"
msgstr "Име базе"
-#: templates/installation.php:72
-msgid "Advanced"
-msgstr "Напредно"
-
-#: templates/installation.php:75
+#: templates/installation.php:93
msgid "Database host"
msgstr "Домаћин базе"
-#: templates/installation.php:76
-msgid "Data folder"
-msgstr "Фацикла података"
-
-#: templates/installation.php:79
+#: templates/installation.php:98
msgid "Finish setup"
msgstr "Заврши подешавање"
#: templates/layout.guest.php:35
-msgid "gives you freedom and control over your own data"
-msgstr "вам даје слободу и контролу над вашим подацима"
+msgid "web services under your control"
+msgstr ""
#: templates/layout.user.php:34
msgid "Log out"
@@ -103,38 +144,22 @@ msgstr "Одјава"
msgid "Settings"
msgstr "Подешавања"
-#: templates/login.php:4
+#: templates/login.php:5
msgid "Lost your password?"
msgstr "Изгубили сте лозинку?"
-#: templates/login.php:9 templates/login.php:13
+#: templates/login.php:15
msgid "remember"
msgstr "упамти"
+#: templates/login.php:16
+msgid "Log in"
+msgstr ""
+
#: templates/logout.php:1
msgid "You are logged out."
msgstr "Одјављени сте."
-#: templates/lostpassword.php:3
-msgid "You will receive a link to reset your password via Email."
-msgstr "Добићете везу за ресетовање лозинке путем е-поште."
-
-#: templates/lostpassword.php:5
-msgid "Requested"
-msgstr "Захтев послат"
-
-#: templates/lostpassword.php:8
-msgid "Login failed!"
-msgstr "Неуспешно пријављивање!"
-
-#: templates/lostpassword.php:10
-msgid "Username or Email"
-msgstr "Корисничко име или адреса е-поште"
-
-#: templates/lostpassword.php:11
-msgid "Request reset"
-msgstr "Захтев за ресетовање"
-
#: templates/part.pagenavi.php:3
msgid "prev"
msgstr "претходно"
@@ -143,16 +168,4 @@ msgstr "претходно"
msgid "next"
msgstr "следеће"
-#: templates/resetpassword.php:4
-msgid "Your password was reset"
-msgstr "Ваша лозинка је ресетована"
-
-#: templates/resetpassword.php:6
-msgid "New password"
-msgstr "Нова лозинка"
-
-#: templates/resetpassword.php:7
-msgid "Reset password"
-msgstr "Ресетуј лозинку"
-
diff --git a/l10n/sr/files.po b/l10n/sr/files.po
index 778a30135e7..9dc152c94aa 100644
--- a/l10n/sr/files.po
+++ b/l10n/sr/files.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Serbian (http://www.transifex.net/projects/p/owncloud/team/sr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,33 +18,35 @@ msgstr ""
"Language: sr\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
-#: ajax/upload.php:24
+#: ajax/upload.php:19
msgid "There is no error, the file uploaded with success"
-msgstr ""
+msgstr "Нема грешке, фајл је успешно послат"
-#: ajax/upload.php:25
+#: ajax/upload.php:20
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
-msgstr ""
+msgstr "Послати фајл превазилази директиву upload_max_filesize из "
-#: ajax/upload.php:26
+#: ajax/upload.php:21
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
+"Послати фајл превазилази директиву MAX_FILE_SIZE која је наведена у ХТМЛ "
+"форми"
-#: ajax/upload.php:27
+#: ajax/upload.php:22
msgid "The uploaded file was only partially uploaded"
-msgstr ""
+msgstr "Послати фајл је само делимично отпремљен!"
-#: ajax/upload.php:28
+#: ajax/upload.php:23
msgid "No file was uploaded"
-msgstr ""
+msgstr "Ниједан фајл није послат"
-#: ajax/upload.php:29
+#: ajax/upload.php:24
msgid "Missing a temporary folder"
-msgstr ""
+msgstr "Недостаје привремена фасцикла"
-#: appinfo/app.php:7
+#: appinfo/app.php:8
msgid "Files"
msgstr "Фајлови"
@@ -52,43 +54,55 @@ msgstr "Фајлови"
msgid "Maximum upload size"
msgstr "Максимална величина пошиљке"
+#: templates/index.php:7
+msgid "New"
+msgstr ""
+
#: templates/index.php:10
+msgid "Text file"
+msgstr ""
+
+#: templates/index.php:11
+msgid "Folder"
+msgstr ""
+
+#: templates/index.php:12
+msgid "From the web"
+msgstr ""
+
+#: templates/index.php:22
msgid "Upload"
msgstr "Пошаљи"
-#: templates/index.php:17
-msgid "New Folder"
-msgstr "Нова фасцикла"
-
-#: templates/index.php:31
+#: templates/index.php:35
msgid "Nothing in here. Upload something!"
msgstr "Овде нема ничег. Пошаљите нешто!"
-#: templates/index.php:39
+#: templates/index.php:43
msgid "Name"
msgstr "Име"
-#: templates/index.php:41
+#: templates/index.php:45
msgid "Download"
msgstr "Преузми"
-#: templates/index.php:45
+#: templates/index.php:49
msgid "Size"
msgstr "Величина"
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Modified"
msgstr "Задња измена"
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Delete"
msgstr "Обриши"
-#: templates/index.php:54
+#: templates/index.php:58
msgid "Upload too large"
msgstr "Пошиљка је превелика"
-#: templates/index.php:56
+#: templates/index.php:60
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
diff --git a/l10n/sr/gallery.po b/l10n/sr/gallery.po
new file mode 100644
index 00000000000..01a1cbaae8c
--- /dev/null
+++ b/l10n/sr/gallery.po
@@ -0,0 +1,32 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:48+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Serbian (http://www.transifex.net/projects/p/owncloud/team/sr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sr\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
+
+#: appinfo/app.php:41
+msgid "Gallery"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Rescan"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+
diff --git a/l10n/sr/media.po b/l10n/sr/media.po
index aaab3c163d9..331a8bc9f06 100644
--- a/l10n/sr/media.po
+++ b/l10n/sr/media.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 18:17+0200\n"
-"PO-Revision-Date: 2011-09-13 22:01+0000\n"
-"Last-Translator: Xabre <githzerai06@gmail.com>\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Serbian (http://www.transifex.net/projects/p/owncloud/team/sr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,15 +18,15 @@ msgstr ""
"Language: sr\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
-#: appinfo/app.php:31
+#: appinfo/app.php:32
msgid "Music"
msgstr "Музика"
-#: templates/music.php:3
+#: templates/music.php:3 templates/player.php:13
msgid "Play"
msgstr "Пусти"
-#: templates/music.php:4 templates/music.php:30
+#: templates/music.php:4 templates/music.php:26 templates/player.php:14
msgid "Pause"
msgstr "Паузирај"
@@ -34,7 +34,7 @@ msgstr "Паузирај"
msgid "Previous"
msgstr "Претходна"
-#: templates/music.php:6
+#: templates/music.php:6 templates/player.php:15
msgid "Next"
msgstr "Следећа"
@@ -46,11 +46,7 @@ msgstr "Искључи звук"
msgid "Unmute"
msgstr "Укључи звук"
-#: templates/music.php:28
-msgid "Songs scanned"
-msgstr "Претражених песама"
-
-#: templates/music.php:29
+#: templates/music.php:25
msgid "Rescan Collection"
msgstr "Поново претражи збирку"
diff --git a/l10n/sr/settings.po b/l10n/sr/settings.po
index a81b25b9474..dd68b115b43 100644
--- a/l10n/sr/settings.po
+++ b/l10n/sr/settings.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 18:17+0200\n"
-"PO-Revision-Date: 2011-09-13 22:02+0000\n"
-"Last-Translator: Xabre <githzerai06@gmail.com>\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Serbian (http://www.transifex.net/projects/p/owncloud/team/sr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,22 +18,26 @@ msgstr ""
"Language: sr\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
-#: ajax/openid.php:13 ajax/setlanguage.php:13
-msgid "Authentication error"
-msgstr "Грешка аутентификације"
-
-#: ajax/openid.php:21
-msgid "OpenID Changed"
-msgstr "OpenID је измењен"
+#: ajax/lostpassword.php:14
+msgid "email Changed"
+msgstr ""
-#: ajax/openid.php:23 ajax/setlanguage.php:23
+#: ajax/lostpassword.php:16 ajax/openid.php:17 ajax/setlanguage.php:16
msgid "Invalid request"
msgstr "Неисправан захтев"
-#: ajax/setlanguage.php:21
+#: ajax/openid.php:15
+msgid "OpenID Changed"
+msgstr "OpenID је измењен"
+
+#: ajax/setlanguage.php:14
msgid "Language changed"
msgstr "Језик је измењен"
+#: templates/admin.php:13
+msgid "Log level"
+msgstr ""
+
#: templates/apps.php:8
msgid "Add your application"
msgstr "Додајте свој програм"
@@ -54,15 +58,15 @@ msgstr "од"
msgid "Ask a question"
msgstr "Поставите питање"
-#: templates/help.php:17
+#: templates/help.php:20
msgid "Problems connecting to help database."
msgstr "Проблем у повезивању са базом помоћи"
-#: templates/help.php:18
+#: templates/help.php:21
msgid "Go there manually."
msgstr "Отиђите тамо ручно."
-#: templates/help.php:26
+#: templates/help.php:29
msgid "Answer"
msgstr "Одговор"
@@ -98,36 +102,52 @@ msgstr "прикажи"
msgid "Change password"
msgstr "Измени лозинку"
-#: templates/personal.php:24 templates/personal.php:25
+#: templates/personal.php:24
+msgid "Email"
+msgstr ""
+
+#: templates/personal.php:25
+msgid "Your email address"
+msgstr ""
+
+#: templates/personal.php:26
+msgid "Fill in an email address to enable password recovery"
+msgstr ""
+
+#: templates/personal.php:32 templates/personal.php:33
msgid "Language"
msgstr "Језик"
-#: templates/personal.php:30
-msgid "Help translating"
-msgstr "Помозите у превођењу"
+#: templates/personal.php:38
+msgid "Help translate"
+msgstr ""
-#: templates/personal.php:37
+#: templates/personal.php:45
msgid "use this address to connect to your ownCloud in your file manager"
msgstr ""
"користите ову адресу да би се повезали на ownCloud путем менаџњера фајлова"
-#: templates/users.php:16
+#: templates/users.php:15 templates/users.php:30
msgid "Name"
msgstr "Име"
-#: templates/users.php:17
+#: templates/users.php:16 templates/users.php:31
msgid "Password"
msgstr "Лозинка"
-#: templates/users.php:18 templates/users.php:36
+#: templates/users.php:17 templates/users.php:32 templates/users.php:46
msgid "Groups"
msgstr "Групе"
-#: templates/users.php:24
+#: templates/users.php:23
msgid "Create"
msgstr "Направи"
-#: templates/users.php:48
+#: templates/users.php:33
+msgid "Quota"
+msgstr ""
+
+#: templates/users.php:58
msgid "Delete"
msgstr "Обриши"
diff --git a/l10n/sr@latin/calendar.po b/l10n/sr@latin/calendar.po
index 30f68f4e4d7..9d94f4adbb7 100644
--- a/l10n/sr@latin/calendar.po
+++ b/l10n/sr@latin/calendar.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Serbian (Latin) (http://www.transifex.net/projects/p/owncloud/team/sr@latin/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,351 +18,432 @@ msgstr ""
"Language: sr@latin\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
-#: ajax/createcalendar.php:18 ajax/settimezone.php:19
-#: ajax/updatecalendar.php:18
-msgid "Authentication error"
-msgstr "Greška autentifikacije"
-
-#: ajax/editeventform.php:25
-msgid "Wrong calendar"
+#: ajax/guesstimezone.php:42
+msgid "New Timezone:"
msgstr ""
-#: ajax/settimezone.php:27
+#: ajax/settimezone.php:22
msgid "Timezone changed"
msgstr "Vremenska zona je promenjena"
-#: ajax/settimezone.php:29
+#: ajax/settimezone.php:24
msgid "Invalid request"
msgstr "Neispravan zahtev"
-#: appinfo/app.php:19 templates/part.eventform.php:27
-#: templates/part.eventinfo.php:18
+#: appinfo/app.php:20 templates/calendar.php:13
+#: templates/part.eventform.php:20
msgid "Calendar"
msgstr "Kalendar"
-#: lib/object.php:292
+#: lib/app.php:19
+msgid "Wrong calendar"
+msgstr "Pogrešan kalendar"
+
+#: lib/app.php:60 lib/object.php:332
msgid "Birthday"
-msgstr ""
+msgstr "Rođendan"
-#: lib/object.php:293
+#: lib/app.php:61 lib/object.php:333
msgid "Business"
-msgstr ""
+msgstr "Posao"
-#: lib/object.php:294
+#: lib/app.php:62 lib/object.php:334
msgid "Call"
-msgstr ""
+msgstr "Poziv"
-#: lib/object.php:295
+#: lib/app.php:63 lib/object.php:335
msgid "Clients"
-msgstr ""
+msgstr "Klijenti"
-#: lib/object.php:296
+#: lib/app.php:64 lib/object.php:336
msgid "Deliverer"
-msgstr ""
+msgstr "Dostavljač"
-#: lib/object.php:297
+#: lib/app.php:65 lib/object.php:337
msgid "Holidays"
-msgstr ""
+msgstr "Praznici"
-#: lib/object.php:298
+#: lib/app.php:66 lib/object.php:338
msgid "Ideas"
-msgstr ""
+msgstr "Ideje"
-#: lib/object.php:299
+#: lib/app.php:67 lib/object.php:339
msgid "Journey"
-msgstr ""
+msgstr "putovanje"
-#: lib/object.php:300
+#: lib/app.php:68 lib/object.php:340
msgid "Jubilee"
-msgstr ""
+msgstr "jubilej"
-#: lib/object.php:301
+#: lib/app.php:69 lib/object.php:341
msgid "Meeting"
-msgstr ""
+msgstr "Sastanak"
-#: lib/object.php:302
+#: lib/app.php:70 lib/object.php:342
msgid "Other"
-msgstr ""
+msgstr "Drugo"
-#: lib/object.php:303
+#: lib/app.php:71 lib/object.php:343
msgid "Personal"
-msgstr ""
+msgstr "Lično"
-#: lib/object.php:304
+#: lib/app.php:72 lib/object.php:344
msgid "Projects"
-msgstr ""
+msgstr "Projekti"
-#: lib/object.php:305
+#: lib/app.php:73 lib/object.php:345
msgid "Questions"
-msgstr ""
+msgstr "Pitanja"
-#: lib/object.php:306
+#: lib/app.php:74 lib/object.php:346
msgid "Work"
-msgstr ""
+msgstr "Posao"
-#: lib/object.php:313
+#: lib/object.php:353
msgid "Does not repeat"
msgstr "Ne ponavlja se"
-#: lib/object.php:314
+#: lib/object.php:354
msgid "Daily"
msgstr "dnevno"
-#: lib/object.php:315
+#: lib/object.php:355
msgid "Weekly"
msgstr "nedeljno"
-#: lib/object.php:316
+#: lib/object.php:356
msgid "Every Weekday"
msgstr "svakog dana u nedelji"
-#: lib/object.php:317
+#: lib/object.php:357
msgid "Bi-Weekly"
msgstr "dvonedeljno"
-#: lib/object.php:318
+#: lib/object.php:358
msgid "Monthly"
msgstr "mesečno"
-#: lib/object.php:319
+#: lib/object.php:359
msgid "Yearly"
msgstr "godišnje"
-#: lib/object.php:337
-msgid "Not an array"
+#: lib/object.php:366
+msgid "never"
msgstr ""
-#: templates/calendar.php:3
-msgid "All day"
-msgstr "Ceo dan"
+#: lib/object.php:367
+msgid "by occurrences"
+msgstr ""
-#: templates/calendar.php:32
-msgid "Sunday"
-msgstr "Nedelja"
+#: lib/object.php:368
+msgid "by date"
+msgstr ""
+
+#: lib/object.php:375
+msgid "by monthday"
+msgstr ""
+
+#: lib/object.php:376
+msgid "by weekday"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:383 templates/lAfix.php:3
msgid "Monday"
-msgstr "Ponedeljak"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:384 templates/lAfix.php:4
msgid "Tuesday"
-msgstr "Utorak"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:385 templates/lAfix.php:5
msgid "Wednesday"
-msgstr "Sreda"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:386 templates/lAfix.php:6
msgid "Thursday"
-msgstr "Četvrtak"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:387 templates/lAfix.php:7
msgid "Friday"
-msgstr "Petak"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:388 templates/lAfix.php:8
msgid "Saturday"
-msgstr "Subota"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Sun."
-msgstr "Ned"
+#: lib/object.php:389 templates/lAfix.php:2
+msgid "Sunday"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Mon."
-msgstr "Pon"
+#: lib/object.php:396
+msgid "events week of month"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Tue."
-msgstr "Uto"
+#: lib/object.php:397
+msgid "first"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Wed."
-msgstr "Sre"
+#: lib/object.php:398
+msgid "second"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Thu."
-msgstr "Čet"
+#: lib/object.php:399
+msgid "third"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Fri."
-msgstr "Pet"
+#: lib/object.php:400
+msgid "fourth"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Sat."
-msgstr "Sub"
+#: lib/object.php:401
+msgid "fifth"
+msgstr ""
+
+#: lib/object.php:402
+msgid "last"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:424 templates/lAfix.php:16
msgid "January"
-msgstr "Januar"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:425 templates/lAfix.php:17
msgid "February"
-msgstr "Februar"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:426 templates/lAfix.php:18
msgid "March"
-msgstr "Mart"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:427 templates/lAfix.php:19
msgid "April"
-msgstr "April"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:428 templates/lAfix.php:20
msgid "May"
-msgstr "Maj"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:429 templates/lAfix.php:21
msgid "June"
-msgstr "Jun"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:430 templates/lAfix.php:22
msgid "July"
-msgstr "Jul"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:431 templates/lAfix.php:23
msgid "August"
-msgstr "Avgust"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:432 templates/lAfix.php:24
msgid "September"
-msgstr "Septembar"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:433 templates/lAfix.php:25
msgid "October"
-msgstr "Oktobar"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:434 templates/lAfix.php:26
msgid "November"
-msgstr "Novembar"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:435 templates/lAfix.php:27
msgid "December"
-msgstr "Decembar"
-
-#: templates/calendar.php:35
-msgid "Jan."
-msgstr "Jan"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Feb."
-msgstr "Feb"
+#: lib/object.php:441
+msgid "by events date"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Mar."
-msgstr "Mar"
+#: lib/object.php:442
+msgid "by yearday(s)"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Apr."
-msgstr "Apr"
+#: lib/object.php:443
+msgid "by weeknumber(s)"
+msgstr ""
-#: templates/calendar.php:35
-msgid "May."
+#: lib/object.php:444
+msgid "by day and month"
msgstr ""
-#: templates/calendar.php:35
-msgid "Jun."
-msgstr "Jun"
+#: lib/object.php:467
+msgid "Not an array"
+msgstr "Nije oblast"
-#: templates/calendar.php:35
-msgid "Jul."
-msgstr "Jul"
+#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+msgid "Date"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Aug."
-msgstr "Avg"
+#: lib/search.php:40
+msgid "Cal."
+msgstr ""
-#: templates/calendar.php:35
-msgid "Sep."
-msgstr "Sep"
+#: templates/calendar.php:10
+msgid "All day"
+msgstr "Ceo dan"
-#: templates/calendar.php:35
-msgid "Oct."
-msgstr "Okt"
+#: templates/calendar.php:11
+msgid "Missing fields"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Nov."
-msgstr "Nov"
+#: templates/calendar.php:12 templates/part.eventform.php:3
+msgid "Title"
+msgstr "Naslov"
-#: templates/calendar.php:35
-msgid "Dec."
-msgstr "Dec"
+#: templates/calendar.php:14
+msgid "From Date"
+msgstr ""
-#: templates/calendar.php:36 templates/calendar.php:50
-#: templates/calendar.php:116
-msgid "Week"
-msgstr "Nedelja"
+#: templates/calendar.php:15
+msgid "From Time"
+msgstr ""
-#: templates/calendar.php:37 templates/calendar.php:51
-msgid "Weeks"
-msgstr "Nedelja"
+#: templates/calendar.php:16
+msgid "To Date"
+msgstr ""
-#: templates/calendar.php:38
-msgid "More before {startdate}"
+#: templates/calendar.php:17
+msgid "To Time"
msgstr ""
-#: templates/calendar.php:39
-msgid "More after {enddate}"
+#: templates/calendar.php:18
+msgid "The event ends before it starts"
msgstr ""
-#: templates/calendar.php:49
-msgid "Day"
-msgstr "Dan"
+#: templates/calendar.php:19
+msgid "There was a database fail"
+msgstr ""
#: templates/calendar.php:52
+msgid "Week"
+msgstr "Nedelja"
+
+#: templates/calendar.php:53
msgid "Month"
msgstr "Mesec"
-#: templates/calendar.php:53
+#: templates/calendar.php:54
msgid "List"
-msgstr ""
+msgstr "Spisak"
-#: templates/calendar.php:58
+#: templates/calendar.php:59
msgid "Today"
msgstr "Danas"
-#: templates/calendar.php:59
+#: templates/calendar.php:60
msgid "Calendars"
msgstr "Kalendari"
-#: templates/calendar.php:76 templates/calendar.php:94
-msgid "Time"
-msgstr "Vreme"
-
-#: templates/calendar.php:169
+#: templates/calendar.php:78
msgid "There was a fail, while parsing the file."
msgstr "došlo je do greške pri rasčlanjivanju fajla."
+#: templates/lAfix.php:9
+msgid "Sun."
+msgstr ""
+
+#: templates/lAfix.php:10
+msgid "Mon."
+msgstr ""
+
+#: templates/lAfix.php:11
+msgid "Tue."
+msgstr ""
+
+#: templates/lAfix.php:12
+msgid "Wed."
+msgstr ""
+
+#: templates/lAfix.php:13
+msgid "Thu."
+msgstr ""
+
+#: templates/lAfix.php:14
+msgid "Fri."
+msgstr ""
+
+#: templates/lAfix.php:15
+msgid "Sat."
+msgstr ""
+
+#: templates/lAfix.php:28
+msgid "Jan."
+msgstr ""
+
+#: templates/lAfix.php:29
+msgid "Feb."
+msgstr ""
+
+#: templates/lAfix.php:30
+msgid "Mar."
+msgstr ""
+
+#: templates/lAfix.php:31
+msgid "Apr."
+msgstr ""
+
+#: templates/lAfix.php:32
+msgid "May."
+msgstr ""
+
+#: templates/lAfix.php:33
+msgid "Jun."
+msgstr ""
+
+#: templates/lAfix.php:34
+msgid "Jul."
+msgstr ""
+
+#: templates/lAfix.php:35
+msgid "Aug."
+msgstr ""
+
+#: templates/lAfix.php:36
+msgid "Sep."
+msgstr ""
+
+#: templates/lAfix.php:37
+msgid "Oct."
+msgstr ""
+
+#: templates/lAfix.php:38
+msgid "Nov."
+msgstr ""
+
+#: templates/lAfix.php:39
+msgid "Dec."
+msgstr ""
+
#: templates/part.choosecalendar.php:1
msgid "Choose active calendars"
msgstr "Izaberite aktivne kalendare"
#: templates/part.choosecalendar.php:15
msgid "New Calendar"
-msgstr ""
+msgstr "Novi kalendar"
#: templates/part.choosecalendar.php:20
#: templates/part.choosecalendar.rowfields.php:4
msgid "CalDav Link"
-msgstr ""
+msgstr "KalDav veza"
#: templates/part.choosecalendar.rowfields.php:4
msgid "Download"
msgstr "Preuzmi"
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.eventinfo.php:64
msgid "Edit"
msgstr "Uredi"
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.editevent.php:8
+#: templates/part.editevent.php:9
msgid "Delete"
-msgstr ""
+msgstr "Obriši"
#: templates/part.editcalendar.php:9
msgid "New calendar"
-msgstr ""
+msgstr "Novi kalendar"
#: templates/part.editcalendar.php:9
msgid "Edit calendar"
@@ -376,90 +457,181 @@ msgstr "Prikazanoime"
msgid "Active"
msgstr "Aktivan"
-#: templates/part.editcalendar.php:29 templates/part.eventform.php:88
-#: templates/part.eventinfo.php:58
-msgid "Description"
-msgstr "Opis"
-
-#: templates/part.editcalendar.php:35
+#: templates/part.editcalendar.php:29
msgid "Calendar color"
msgstr "Boja kalendara"
-#: templates/part.editcalendar.php:41
+#: templates/part.editcalendar.php:42
msgid "Save"
-msgstr ""
+msgstr "Snimi"
-#: templates/part.editcalendar.php:41 templates/part.editevent.php:7
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
#: templates/part.newevent.php:6
msgid "Submit"
msgstr "Pošalji"
-#: templates/part.editcalendar.php:42
+#: templates/part.editcalendar.php:43
msgid "Cancel"
-msgstr ""
+msgstr "Otkaži"
-#: templates/part.editevent.php:1 templates/part.eventinfo.php:1
+#: templates/part.editevent.php:1
msgid "Edit an event"
msgstr "Uredi događaj"
-#: templates/part.eventform.php:3 templates/part.eventinfo.php:4
-msgid "Title"
-msgstr "Naslov"
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr ""
#: templates/part.eventform.php:5
msgid "Title of the Event"
msgstr "Naslov događaja"
-#: templates/part.eventform.php:9 templates/part.eventinfo.php:9
-msgid "Location"
-msgstr "Lokacija"
-
#: templates/part.eventform.php:11
-msgid "Location of the Event"
-msgstr "Lokacija događaja"
-
-#: templates/part.eventform.php:17 templates/part.eventinfo.php:16
msgid "Category"
msgstr "Kategorija"
-#: templates/part.eventform.php:19
+#: templates/part.eventform.php:13
msgid "Select category"
-msgstr ""
+msgstr "Izaberite kategoriju"
-#: templates/part.eventform.php:45 templates/part.eventinfo.php:28
+#: templates/part.eventform.php:37
msgid "All Day Event"
msgstr "Celodnevni događaj"
-#: templates/part.eventform.php:49 templates/part.eventinfo.php:31
+#: templates/part.eventform.php:41
msgid "From"
msgstr "Od"
-#: templates/part.eventform.php:57 templates/part.eventinfo.php:38
+#: templates/part.eventform.php:49
msgid "To"
msgstr "Do"
-#: templates/part.eventform.php:65 templates/part.eventinfo.php:44
+#: templates/part.eventform.php:57
+msgid "Advanced options"
+msgstr ""
+
+#: templates/part.eventform.php:61
msgid "Repeat"
msgstr "Ponavljaj"
-#: templates/part.eventform.php:81 templates/part.eventinfo.php:51
-msgid "Attendees"
-msgstr "Prisutni"
+#: templates/part.eventform.php:68
+msgid "Advanced"
+msgstr ""
+
+#: templates/part.eventform.php:112
+msgid "Select weekdays"
+msgstr ""
+
+#: templates/part.eventform.php:125 templates/part.eventform.php:138
+msgid "Select days"
+msgstr ""
+
+#: templates/part.eventform.php:130
+msgid "and the events day of year."
+msgstr ""
+
+#: templates/part.eventform.php:143
+msgid "and the events day of month."
+msgstr ""
+
+#: templates/part.eventform.php:151
+msgid "Select months"
+msgstr ""
+
+#: templates/part.eventform.php:164
+msgid "Select weeks"
+msgstr ""
+
+#: templates/part.eventform.php:169
+msgid "and the events week of year."
+msgstr ""
+
+#: templates/part.eventform.php:175
+msgid "Interval"
+msgstr ""
+
+#: templates/part.eventform.php:181
+msgid "End"
+msgstr ""
+
+#: templates/part.eventform.php:193
+msgid "occurrences"
+msgstr ""
+
+#: templates/part.eventform.php:208
+msgid "Location"
+msgstr "Lokacija"
+
+#: templates/part.eventform.php:210
+msgid "Location of the Event"
+msgstr "Lokacija događaja"
+
+#: templates/part.eventform.php:216
+msgid "Description"
+msgstr "Opis"
-#: templates/part.eventform.php:89
+#: templates/part.eventform.php:218
msgid "Description of the Event"
msgstr "Opis događaja"
-#: templates/part.eventinfo.php:63
-msgid "Close"
-msgstr "Zatvori"
+#: templates/part.import.php:1
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the calendar"
+msgstr ""
+
+#: templates/part.import.php:10
+msgid "create a new calendar"
+msgstr ""
+
+#: templates/part.import.php:15
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import"
+msgstr ""
+
+#: templates/part.import.php:20
+msgid "Importing calendar"
+msgstr ""
+
+#: templates/part.import.php:23
+msgid "Calendar imported successfully"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Close Dialog"
+msgstr ""
#: templates/part.newevent.php:1
msgid "Create a new event"
msgstr "Napravi novi događaj"
-#: templates/settings.php:11
+#: templates/settings.php:13
msgid "Timezone"
msgstr "Vremenska zona"
+#: templates/settings.php:30
+msgid "Check always for changes of the timezone"
+msgstr ""
+
+#: templates/settings.php:32
+msgid "Timeformat"
+msgstr ""
+
+#: templates/settings.php:34
+msgid "24h"
+msgstr ""
+
+#: templates/settings.php:35
+msgid "12h"
+msgstr ""
+
+#: templates/settings.php:41
+msgid "Calendar CalDAV syncing address:"
+msgstr ""
+
diff --git a/l10n/sr@latin/contacts.po b/l10n/sr@latin/contacts.po
index 3066a8fc090..6021f675d90 100644
--- a/l10n/sr@latin/contacts.po
+++ b/l10n/sr@latin/contacts.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Slobodan Terzić <githzerai06@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 20:10+0200\n"
-"PO-Revision-Date: 2011-09-23 18:10+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Serbian (Latin) (http://www.transifex.net/projects/p/owncloud/team/sr@latin/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,164 +18,273 @@ msgstr ""
"Language: sr@latin\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
-#: ajax/addcard.php:31 ajax/addproperty.php:31 ajax/deletebook.php:32
-#: ajax/deletecard.php:32 ajax/deleteproperty.php:34 ajax/getdetails.php:32
-#: ajax/setproperty.php:32 ajax/showaddcard.php:30 ajax/showaddproperty.php:31
-#: ajax/showsetproperty.php:32 photo.php:32
-msgid "You need to log in."
+#: ajax/activation.php:17 ajax/updateaddressbook.php:26
+msgid "Error (de)activating addressbook."
msgstr ""
-#: ajax/addcard.php:37
-msgid "This is not your addressbook."
+#: ajax/addcard.php:79
+msgid "There was an error adding the contact."
msgstr ""
-#: ajax/addproperty.php:37 ajax/deletecard.php:39 ajax/deleteproperty.php:41
-#: ajax/getdetails.php:39 ajax/setproperty.php:38 ajax/showaddproperty.php:37
-#: ajax/showsetproperty.php:38 photo.php:39
-msgid "Contact could not be found."
+#: ajax/addproperty.php:39
+msgid "Cannot add empty property."
msgstr ""
-#: ajax/addproperty.php:43 ajax/deletebook.php:38 ajax/deletecard.php:45
-#: ajax/deleteproperty.php:47 ajax/getdetails.php:45 ajax/setproperty.php:44
-#: ajax/showaddproperty.php:43 ajax/showsetproperty.php:44 photo.php:45
-msgid "This is not your contact."
+#: ajax/addproperty.php:51
+msgid "At least one of the address fields has to be filled out."
msgstr ""
-#: ajax/addproperty.php:50 ajax/deleteproperty.php:54 ajax/getdetails.php:52
-#: ajax/setproperty.php:51 ajax/showsetproperty.php:51
-msgid "vCard could not be read."
+#: ajax/addproperty.php:77
+msgid "Error adding contact property."
msgstr ""
-#: ajax/deleteproperty.php:65 ajax/setproperty.php:62
-#: ajax/showsetproperty.php:62
-msgid "Information about vCard is incorrect. Please reload the page."
+#: ajax/createaddressbook.php:20
+msgid "Error adding addressbook."
msgstr ""
-#: photo.php:53
-msgid "This card is not RFC compatible."
+#: ajax/createaddressbook.php:26
+msgid "Error activating addressbook."
msgstr ""
-#: photo.php:90
-msgid "This card does not contain a photo."
+#: ajax/deleteproperty.php:40
+msgid "Error deleting contact property."
msgstr ""
-#: templates/index.php:8
-msgid "Add Contact"
+#: ajax/setproperty.php:79
+msgid "Error updating contact property."
msgstr ""
-#: templates/part.addcardform.php:5
-msgid "Group"
+#: ajax/updateaddressbook.php:20
+msgid "Error updating addressbook."
msgstr ""
-#: templates/part.addcardform.php:12 templates/part.property.php:3
-msgid "Name"
+#: appinfo/app.php:21 templates/settings.php:3
+msgid "Contacts"
msgstr ""
-#: templates/part.addcardform.php:14
-msgid "Create Contact"
-msgstr ""
+#: lib/app.php:42
+msgid "This is not your addressbook."
+msgstr "Ovo nije vaš adresar."
-#: templates/part.addpropertyform.php:4 templates/part.property.php:40
+#: lib/app.php:51 photo.php:34
+msgid "Contact could not be found."
+msgstr "Kontakt se ne može naći."
+
+#: lib/app.php:79
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "Podaci o vKarti su neispravni. Ponovo učitajte stranicu."
+
+#: lib/app.php:91 templates/part.addcardform.php:54
+#: templates/part.property.php:45 templates/part.setpropertyform.php:7
msgid "Address"
-msgstr ""
+msgstr "Adresa"
-#: templates/part.addpropertyform.php:5
+#: lib/app.php:92 templates/part.addcardform.php:43
msgid "Telephone"
-msgstr ""
+msgstr "Telefon"
-#: templates/part.addpropertyform.php:6 templates/part.property.php:22
+#: lib/app.php:93 templates/part.addcardform.php:37
+#: templates/part.property.php:16 templates/part.setpropertyform.php:51
msgid "Email"
-msgstr ""
+msgstr "E-mail"
-#: templates/part.addpropertyform.php:7 templates/part.property.php:15
+#: lib/app.php:94 templates/part.addcardform.php:27
+#: templates/part.property.php:9 templates/part.setpropertyform.php:54
msgid "Organization"
-msgstr ""
+msgstr "Organizacija"
-#: templates/part.addpropertyform.php:17 templates/part.addpropertyform.php:32
+#: lib/app.php:106 lib/app.php:113
msgid "Work"
-msgstr ""
+msgstr "Posao"
-#: templates/part.addpropertyform.php:18 templates/part.addpropertyform.php:30
+#: lib/app.php:107 lib/app.php:111
msgid "Home"
+msgstr "Kuća"
+
+#: lib/app.php:112
+msgid "Mobile"
+msgstr "Mobilni"
+
+#: lib/app.php:114
+msgid "Text"
+msgstr "Tekst"
+
+#: lib/app.php:115
+msgid "Voice"
+msgstr "Glas"
+
+#: lib/app.php:116
+msgid "Fax"
+msgstr "Faks"
+
+#: lib/app.php:117
+msgid "Video"
+msgstr "Video"
+
+#: lib/app.php:118
+msgid "Pager"
+msgstr "Pejdžer"
+
+#: lib/search.php:22
+msgid "Contact"
msgstr ""
-#: templates/part.addpropertyform.php:20 templates/part.property.php:48
-#: templates/part.setpropertyform.php:5
-msgid "PO Box"
+#: photo.php:40
+msgid "This is not your contact."
+msgstr "Ovo nije vaš kontakt."
+
+#: photo.php:48
+msgid "This card is not RFC compatible."
+msgstr "Ova karta nije saglasna sa RFC-om."
+
+#: photo.php:85
+msgid "This card does not contain a photo."
+msgstr "Ova karta ne sadrži fotografiju."
+
+#: templates/index.php:6
+msgid "Add Contact"
+msgstr "Dodaj kontakt"
+
+#: templates/index.php:7
+msgid "Addressbooks"
msgstr ""
-#: templates/part.addpropertyform.php:21 templates/part.property.php:51
-#: templates/part.setpropertyform.php:6
-msgid "Extended"
+#: templates/part.addcardform.php:8
+msgid "Addressbook"
msgstr ""
-#: templates/part.addpropertyform.php:22 templates/part.property.php:54
-#: templates/part.setpropertyform.php:7
-msgid "Street"
+#: templates/part.addcardform.php:21
+msgid "Name"
+msgstr "Ime"
+
+#: templates/part.addcardform.php:57 templates/part.details.php:43
+#: templates/part.details.php:79 templates/part.setpropertyform.php:10
+#: templates/part.setpropertyform.php:47
+msgid "Type"
msgstr ""
-#: templates/part.addpropertyform.php:23 templates/part.property.php:57
-#: templates/part.setpropertyform.php:8
+#: templates/part.addcardform.php:65 templates/part.details.php:49
+#: templates/part.setpropertyform.php:16
+msgid "PO Box"
+msgstr "Poštanski broj"
+
+#: templates/part.addcardform.php:72 templates/part.details.php:53
+#: templates/part.setpropertyform.php:20
+msgid "Extended"
+msgstr "Proširi"
+
+#: templates/part.addcardform.php:78 templates/part.details.php:57
+#: templates/part.setpropertyform.php:24
+msgid "Street"
+msgstr "Ulica"
+
+#: templates/part.addcardform.php:84 templates/part.details.php:61
+#: templates/part.setpropertyform.php:28
msgid "City"
-msgstr ""
+msgstr "Grad"
-#: templates/part.addpropertyform.php:24 templates/part.property.php:60
-#: templates/part.setpropertyform.php:9
+#: templates/part.addcardform.php:90 templates/part.details.php:65
+#: templates/part.setpropertyform.php:32
msgid "Region"
-msgstr ""
+msgstr "Regija"
-#: templates/part.addpropertyform.php:25 templates/part.property.php:63
-#: templates/part.setpropertyform.php:10
+#: templates/part.addcardform.php:96 templates/part.details.php:69
+#: templates/part.setpropertyform.php:36
msgid "Zipcode"
-msgstr ""
+msgstr "Zip kod"
-#: templates/part.addpropertyform.php:26 templates/part.property.php:66
-#: templates/part.setpropertyform.php:11
+#: templates/part.addcardform.php:102 templates/part.details.php:73
+#: templates/part.setpropertyform.php:40
msgid "Country"
+msgstr "Zemlja"
+
+#: templates/part.addcardform.php:109
+msgid "Create Contact"
+msgstr "Napravi kontakt"
+
+#: templates/part.chooseaddressbook.php:1
+msgid "Choose active Address Books"
msgstr ""
-#: templates/part.addpropertyform.php:31
-msgid "Mobile"
+#: templates/part.chooseaddressbook.php:16
+msgid "New Address Book"
msgstr ""
-#: templates/part.addpropertyform.php:33
-msgid "Text"
+#: templates/part.chooseaddressbook.php:21
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "CardDav Link"
msgstr ""
-#: templates/part.addpropertyform.php:34
-msgid "Voice"
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Download"
msgstr ""
-#: templates/part.addpropertyform.php:35
-msgid "Fax"
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Edit"
+msgstr "Uredi"
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Delete"
+msgstr "Obriši"
+
+#: templates/part.details.php:3
+msgid "Download contact"
msgstr ""
-#: templates/part.addpropertyform.php:36
-msgid "Video"
+#: templates/part.details.php:4
+msgid "Delete contact"
msgstr ""
-#: templates/part.addpropertyform.php:37
-msgid "Pager"
+#: templates/part.details.php:34
+msgid "Add"
msgstr ""
-#: templates/part.details.php:33
-msgid "Delete"
+#: templates/part.editaddressbook.php:9
+msgid "New Addressbook"
msgstr ""
-#: templates/part.details.php:34
-msgid "Add Property"
+#: templates/part.editaddressbook.php:9
+msgid "Edit Addressbook"
msgstr ""
-#: templates/part.property.php:9
+#: templates/part.editaddressbook.php:12
+msgid "Displayname"
+msgstr ""
+
+#: templates/part.editaddressbook.php:23
+msgid "Active"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Save"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Submit"
+msgstr ""
+
+#: templates/part.editaddressbook.php:30
+msgid "Cancel"
+msgstr ""
+
+#: templates/part.property.php:3
msgid "Birthday"
+msgstr "Rođendan"
+
+#: templates/part.property.php:23
+msgid "Preferred"
msgstr ""
-#: templates/part.property.php:29
+#: templates/part.property.php:23 templates/part.setpropertyform.php:45
msgid "Phone"
+msgstr "Telefon"
+
+#: templates/part.setpropertyform.php:57
+msgid "Update"
msgstr ""
-#: templates/part.setpropertyform.php:17
-msgid "Edit"
+#: templates/settings.php:4
+msgid "CardDAV syncing address:"
msgstr ""
diff --git a/l10n/sr@latin/core.po b/l10n/sr@latin/core.po
index 33bd96a4c3d..93b14cb49ad 100644
--- a/l10n/sr@latin/core.po
+++ b/l10n/sr@latin/core.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 18:17+0200\n"
-"PO-Revision-Date: 2011-09-14 11:23+0000\n"
-"Last-Translator: Xabre <githzerai06@gmail.com>\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Serbian (Latin) (http://www.transifex.net/projects/p/owncloud/team/sr@latin/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,6 +18,51 @@ msgstr ""
"Language: sr@latin\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
+#: lostpassword/index.php:24
+msgid "Owncloud password reset"
+msgstr ""
+
+#: lostpassword/templates/email.php:1
+msgid "Use the following link to reset your password: {link}"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr "Dobićete vezu za resetovanje lozinke putem e-pošte."
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Requested"
+msgstr "Zahtevano"
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr "Nesupela prijava!"
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:22
+#: templates/login.php:8
+msgid "Username"
+msgstr "Korisničko ime"
+
+#: lostpassword/templates/lostpassword.php:14
+msgid "Request reset"
+msgstr "Zahtevaj resetovanje"
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr "Vaša lozinka je resetovana"
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr "Nova lozinka"
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr "Resetuj lozinku"
+
#: strings.php:5
msgid "Personal"
msgstr "Lična"
@@ -46,54 +91,50 @@ msgstr "Oblak nije nađen"
msgid "Create an <strong>admin account</strong>"
msgstr "Napravi <strong>administrativni nalog</strong>"
-#: templates/installation.php:21
-msgid "Username"
-msgstr "Korisničko ime"
-
-#: templates/installation.php:22
+#: templates/installation.php:26 templates/login.php:12
msgid "Password"
msgstr "Lozinka"
-#: templates/installation.php:27
+#: templates/installation.php:32
+msgid "Advanced"
+msgstr "Napredno"
+
+#: templates/installation.php:34
+msgid "Data folder"
+msgstr "Facikla podataka"
+
+#: templates/installation.php:41
msgid "Configure the database"
msgstr "Podešavanje baze"
-#: templates/installation.php:32 templates/installation.php:43
-#: templates/installation.php:53
+#: templates/installation.php:46 templates/installation.php:57
+#: templates/installation.php:67
msgid "will be used"
msgstr "će biti korišćen"
-#: templates/installation.php:64
+#: templates/installation.php:79
msgid "Database user"
msgstr "Korisnik baze"
-#: templates/installation.php:65
+#: templates/installation.php:83
msgid "Database password"
msgstr "Lozinka baze"
-#: templates/installation.php:66
+#: templates/installation.php:87
msgid "Database name"
msgstr "Ime baze"
-#: templates/installation.php:72
-msgid "Advanced"
-msgstr "Napredno"
-
-#: templates/installation.php:75
+#: templates/installation.php:93
msgid "Database host"
msgstr "Domaćin baze"
-#: templates/installation.php:76
-msgid "Data folder"
-msgstr "Facikla podataka"
-
-#: templates/installation.php:79
+#: templates/installation.php:98
msgid "Finish setup"
msgstr "Završi podešavanje"
#: templates/layout.guest.php:35
-msgid "gives you freedom and control over your own data"
-msgstr "vam daje slobodu i kontrolu nad vašim podacima"
+msgid "web services under your control"
+msgstr ""
#: templates/layout.user.php:34
msgid "Log out"
@@ -103,38 +144,22 @@ msgstr "Odjava"
msgid "Settings"
msgstr "Podešavanja"
-#: templates/login.php:4
+#: templates/login.php:5
msgid "Lost your password?"
msgstr "Izgubili ste lozinku?"
-#: templates/login.php:9 templates/login.php:13
+#: templates/login.php:15
msgid "remember"
msgstr "upamti"
+#: templates/login.php:16
+msgid "Log in"
+msgstr ""
+
#: templates/logout.php:1
msgid "You are logged out."
msgstr "Odjavljeni ste."
-#: templates/lostpassword.php:3
-msgid "You will receive a link to reset your password via Email."
-msgstr "Dobićete vezu za resetovanje lozinke putem e-pošte."
-
-#: templates/lostpassword.php:5
-msgid "Requested"
-msgstr "Zahtev poslat"
-
-#: templates/lostpassword.php:8
-msgid "Login failed!"
-msgstr "Neuspešno prijavljivanje!"
-
-#: templates/lostpassword.php:10
-msgid "Username or Email"
-msgstr "Korisničko ime ili adresa e-pošte"
-
-#: templates/lostpassword.php:11
-msgid "Request reset"
-msgstr "Zahtev za resetovanje"
-
#: templates/part.pagenavi.php:3
msgid "prev"
msgstr "prethodno"
@@ -143,16 +168,4 @@ msgstr "prethodno"
msgid "next"
msgstr "sledeće"
-#: templates/resetpassword.php:4
-msgid "Your password was reset"
-msgstr "Vaša lozinka je resetovana"
-
-#: templates/resetpassword.php:6
-msgid "New password"
-msgstr "Nova lozinka"
-
-#: templates/resetpassword.php:7
-msgid "Reset password"
-msgstr "Resetuj lozinku"
-
diff --git a/l10n/sr@latin/files.po b/l10n/sr@latin/files.po
index f9af37cbada..261d61c800d 100644
--- a/l10n/sr@latin/files.po
+++ b/l10n/sr@latin/files.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Serbian (Latin) (http://www.transifex.net/projects/p/owncloud/team/sr@latin/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,33 +18,35 @@ msgstr ""
"Language: sr@latin\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
-#: ajax/upload.php:24
+#: ajax/upload.php:19
msgid "There is no error, the file uploaded with success"
-msgstr ""
+msgstr "Nema greške, fajl je uspešno poslat"
-#: ajax/upload.php:25
+#: ajax/upload.php:20
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
-msgstr ""
+msgstr "Poslati fajl prevazilazi direktivu upload_max_filesize iz "
-#: ajax/upload.php:26
+#: ajax/upload.php:21
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
+"Poslati fajl prevazilazi direktivu MAX_FILE_SIZE koja je navedena u HTML "
+"formi"
-#: ajax/upload.php:27
+#: ajax/upload.php:22
msgid "The uploaded file was only partially uploaded"
-msgstr ""
+msgstr "Poslati fajl je samo delimično otpremljen!"
-#: ajax/upload.php:28
+#: ajax/upload.php:23
msgid "No file was uploaded"
-msgstr ""
+msgstr "Nijedan fajl nije poslat"
-#: ajax/upload.php:29
+#: ajax/upload.php:24
msgid "Missing a temporary folder"
-msgstr ""
+msgstr "Nedostaje privremena fascikla"
-#: appinfo/app.php:7
+#: appinfo/app.php:8
msgid "Files"
msgstr "Fajlovi"
@@ -52,43 +54,55 @@ msgstr "Fajlovi"
msgid "Maximum upload size"
msgstr "Maksimalna veličina pošiljke"
+#: templates/index.php:7
+msgid "New"
+msgstr ""
+
#: templates/index.php:10
+msgid "Text file"
+msgstr ""
+
+#: templates/index.php:11
+msgid "Folder"
+msgstr ""
+
+#: templates/index.php:12
+msgid "From the web"
+msgstr ""
+
+#: templates/index.php:22
msgid "Upload"
msgstr "Pošalji"
-#: templates/index.php:17
-msgid "New Folder"
-msgstr "Nova fascikla"
-
-#: templates/index.php:31
+#: templates/index.php:35
msgid "Nothing in here. Upload something!"
msgstr "Ovde nema ničeg. Pošaljite nešto!"
-#: templates/index.php:39
+#: templates/index.php:43
msgid "Name"
msgstr "Ime"
-#: templates/index.php:41
+#: templates/index.php:45
msgid "Download"
msgstr "Preuzmi"
-#: templates/index.php:45
+#: templates/index.php:49
msgid "Size"
msgstr "Veličina"
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Modified"
msgstr "Zadnja izmena"
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Delete"
msgstr "Obriši"
-#: templates/index.php:54
+#: templates/index.php:58
msgid "Upload too large"
msgstr "Pošiljka je prevelika"
-#: templates/index.php:56
+#: templates/index.php:60
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
diff --git a/l10n/sr@latin/gallery.po b/l10n/sr@latin/gallery.po
new file mode 100644
index 00000000000..c0517c438fa
--- /dev/null
+++ b/l10n/sr@latin/gallery.po
@@ -0,0 +1,32 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:48+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Serbian (Latin) (http://www.transifex.net/projects/p/owncloud/team/sr@latin/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sr@latin\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
+
+#: appinfo/app.php:41
+msgid "Gallery"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Rescan"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+
diff --git a/l10n/sr@latin/media.po b/l10n/sr@latin/media.po
index a647feac32c..e9d968b7493 100644
--- a/l10n/sr@latin/media.po
+++ b/l10n/sr@latin/media.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 18:17+0200\n"
-"PO-Revision-Date: 2011-09-13 22:12+0000\n"
-"Last-Translator: Xabre <githzerai06@gmail.com>\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Serbian (Latin) (http://www.transifex.net/projects/p/owncloud/team/sr@latin/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,15 +18,15 @@ msgstr ""
"Language: sr@latin\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
-#: appinfo/app.php:31
+#: appinfo/app.php:32
msgid "Music"
msgstr "Muzika"
-#: templates/music.php:3
+#: templates/music.php:3 templates/player.php:13
msgid "Play"
msgstr "Pusti"
-#: templates/music.php:4 templates/music.php:30
+#: templates/music.php:4 templates/music.php:26 templates/player.php:14
msgid "Pause"
msgstr "Pauziraj"
@@ -34,7 +34,7 @@ msgstr "Pauziraj"
msgid "Previous"
msgstr "Prethodna"
-#: templates/music.php:6
+#: templates/music.php:6 templates/player.php:15
msgid "Next"
msgstr "Sledeća"
@@ -46,11 +46,7 @@ msgstr "Isključi zvuk"
msgid "Unmute"
msgstr "Uključi zvuk"
-#: templates/music.php:28
-msgid "Songs scanned"
-msgstr "Pretraženih pesama"
-
-#: templates/music.php:29
+#: templates/music.php:25
msgid "Rescan Collection"
msgstr "Ponovo pretraži zbirku"
diff --git a/l10n/sr@latin/settings.po b/l10n/sr@latin/settings.po
index cb8b76399c1..d70e5ea94a6 100644
--- a/l10n/sr@latin/settings.po
+++ b/l10n/sr@latin/settings.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 18:17+0200\n"
-"PO-Revision-Date: 2011-09-13 22:13+0000\n"
-"Last-Translator: Xabre <githzerai06@gmail.com>\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Serbian (Latin) (http://www.transifex.net/projects/p/owncloud/team/sr@latin/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,22 +18,26 @@ msgstr ""
"Language: sr@latin\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
-#: ajax/openid.php:13 ajax/setlanguage.php:13
-msgid "Authentication error"
-msgstr "Greška autentifikacije"
-
-#: ajax/openid.php:21
-msgid "OpenID Changed"
-msgstr "OpenID je izmenjen"
+#: ajax/lostpassword.php:14
+msgid "email Changed"
+msgstr ""
-#: ajax/openid.php:23 ajax/setlanguage.php:23
+#: ajax/lostpassword.php:16 ajax/openid.php:17 ajax/setlanguage.php:16
msgid "Invalid request"
msgstr "Neispravan zahtev"
-#: ajax/setlanguage.php:21
+#: ajax/openid.php:15
+msgid "OpenID Changed"
+msgstr "OpenID je izmenjen"
+
+#: ajax/setlanguage.php:14
msgid "Language changed"
msgstr "Jezik je izmenjen"
+#: templates/admin.php:13
+msgid "Log level"
+msgstr ""
+
#: templates/apps.php:8
msgid "Add your application"
msgstr "Dodajte svoj program"
@@ -54,15 +58,15 @@ msgstr "od"
msgid "Ask a question"
msgstr "Postavite pitanje"
-#: templates/help.php:17
+#: templates/help.php:20
msgid "Problems connecting to help database."
msgstr "Problem u povezivanju sa bazom pomoći"
-#: templates/help.php:18
+#: templates/help.php:21
msgid "Go there manually."
msgstr "Otiđite tamo ručno."
-#: templates/help.php:26
+#: templates/help.php:29
msgid "Answer"
msgstr "Odgovor"
@@ -98,36 +102,52 @@ msgstr "prikaži"
msgid "Change password"
msgstr "Izmeni lozinku"
-#: templates/personal.php:24 templates/personal.php:25
+#: templates/personal.php:24
+msgid "Email"
+msgstr ""
+
+#: templates/personal.php:25
+msgid "Your email address"
+msgstr ""
+
+#: templates/personal.php:26
+msgid "Fill in an email address to enable password recovery"
+msgstr ""
+
+#: templates/personal.php:32 templates/personal.php:33
msgid "Language"
msgstr "Jezik"
-#: templates/personal.php:30
-msgid "Help translating"
-msgstr "Pomozite u prevođenju"
+#: templates/personal.php:38
+msgid "Help translate"
+msgstr ""
-#: templates/personal.php:37
+#: templates/personal.php:45
msgid "use this address to connect to your ownCloud in your file manager"
msgstr ""
"koristite ovu adresu da bi se povezali na ownCloud putem menadžnjera fajlova"
-#: templates/users.php:16
+#: templates/users.php:15 templates/users.php:30
msgid "Name"
msgstr "Ime"
-#: templates/users.php:17
+#: templates/users.php:16 templates/users.php:31
msgid "Password"
msgstr "Lozinka"
-#: templates/users.php:18 templates/users.php:36
+#: templates/users.php:17 templates/users.php:32 templates/users.php:46
msgid "Groups"
msgstr "Grupe"
-#: templates/users.php:24
+#: templates/users.php:23
msgid "Create"
msgstr "Napravi"
-#: templates/users.php:48
+#: templates/users.php:33
+msgid "Quota"
+msgstr ""
+
+#: templates/users.php:58
msgid "Delete"
msgstr "Obriši"
diff --git a/l10n/sv/calendar.po b/l10n/sv/calendar.po
index db5536fcbc9..4d3e02d4eff 100644
--- a/l10n/sv/calendar.po
+++ b/l10n/sv/calendar.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <revoltism@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Swedish (http://www.transifex.net/projects/p/owncloud/team/sv/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,448 +18,620 @@ msgstr ""
"Language: sv\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/createcalendar.php:18 ajax/settimezone.php:19
-#: ajax/updatecalendar.php:18
-msgid "Authentication error"
+#: ajax/guesstimezone.php:42
+msgid "New Timezone:"
msgstr ""
-#: ajax/editeventform.php:25
-msgid "Wrong calendar"
-msgstr ""
-
-#: ajax/settimezone.php:27
+#: ajax/settimezone.php:22
msgid "Timezone changed"
-msgstr ""
+msgstr "Tidszon ändrad"
-#: ajax/settimezone.php:29
+#: ajax/settimezone.php:24
msgid "Invalid request"
-msgstr ""
+msgstr "Ogiltig begäran"
-#: appinfo/app.php:19 templates/part.eventform.php:27
-#: templates/part.eventinfo.php:18
+#: appinfo/app.php:20 templates/calendar.php:13
+#: templates/part.eventform.php:20
msgid "Calendar"
-msgstr ""
+msgstr "Kalender"
-#: lib/object.php:292
+#: lib/app.php:19
+msgid "Wrong calendar"
+msgstr "Fel kalender"
+
+#: lib/app.php:60 lib/object.php:332
msgid "Birthday"
-msgstr ""
+msgstr "Födelsedag"
-#: lib/object.php:293
+#: lib/app.php:61 lib/object.php:333
msgid "Business"
-msgstr ""
+msgstr "Företag"
-#: lib/object.php:294
+#: lib/app.php:62 lib/object.php:334
msgid "Call"
-msgstr ""
+msgstr "Ringa"
-#: lib/object.php:295
+#: lib/app.php:63 lib/object.php:335
msgid "Clients"
-msgstr ""
+msgstr "Klienter"
-#: lib/object.php:296
+#: lib/app.php:64 lib/object.php:336
msgid "Deliverer"
-msgstr ""
+msgstr "Leverantör"
-#: lib/object.php:297
+#: lib/app.php:65 lib/object.php:337
msgid "Holidays"
-msgstr ""
+msgstr "Semester"
-#: lib/object.php:298
+#: lib/app.php:66 lib/object.php:338
msgid "Ideas"
-msgstr ""
+msgstr "Idéer"
-#: lib/object.php:299
+#: lib/app.php:67 lib/object.php:339
msgid "Journey"
-msgstr ""
+msgstr "Resa"
-#: lib/object.php:300
+#: lib/app.php:68 lib/object.php:340
msgid "Jubilee"
-msgstr ""
+msgstr "Jubileum"
-#: lib/object.php:301
+#: lib/app.php:69 lib/object.php:341
msgid "Meeting"
-msgstr ""
+msgstr "Möte"
-#: lib/object.php:302
+#: lib/app.php:70 lib/object.php:342
msgid "Other"
-msgstr ""
+msgstr "Annat"
-#: lib/object.php:303
+#: lib/app.php:71 lib/object.php:343
msgid "Personal"
-msgstr ""
+msgstr "Personlig"
-#: lib/object.php:304
+#: lib/app.php:72 lib/object.php:344
msgid "Projects"
-msgstr ""
+msgstr "Projekt"
-#: lib/object.php:305
+#: lib/app.php:73 lib/object.php:345
msgid "Questions"
-msgstr ""
+msgstr "Frågor"
-#: lib/object.php:306
+#: lib/app.php:74 lib/object.php:346
msgid "Work"
-msgstr ""
+msgstr "Arbetet"
-#: lib/object.php:313
+#: lib/object.php:353
msgid "Does not repeat"
-msgstr ""
+msgstr "Upprepas inte"
-#: lib/object.php:314
+#: lib/object.php:354
msgid "Daily"
-msgstr ""
+msgstr "Dagligen"
-#: lib/object.php:315
+#: lib/object.php:355
msgid "Weekly"
-msgstr ""
+msgstr "Varje vecka"
-#: lib/object.php:316
+#: lib/object.php:356
msgid "Every Weekday"
-msgstr ""
+msgstr "Varje vardag"
-#: lib/object.php:317
+#: lib/object.php:357
msgid "Bi-Weekly"
-msgstr ""
+msgstr "Varannan vecka"
-#: lib/object.php:318
+#: lib/object.php:358
msgid "Monthly"
-msgstr ""
+msgstr "Varje månad"
-#: lib/object.php:319
+#: lib/object.php:359
msgid "Yearly"
+msgstr "Årligen"
+
+#: lib/object.php:366
+msgid "never"
msgstr ""
-#: lib/object.php:337
-msgid "Not an array"
+#: lib/object.php:367
+msgid "by occurrences"
msgstr ""
-#: templates/calendar.php:3
-msgid "All day"
+#: lib/object.php:368
+msgid "by date"
msgstr ""
-#: templates/calendar.php:32
-msgid "Sunday"
+#: lib/object.php:375
+msgid "by monthday"
msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:376
+msgid "by weekday"
+msgstr ""
+
+#: lib/object.php:383 templates/lAfix.php:3
msgid "Monday"
msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:384 templates/lAfix.php:4
msgid "Tuesday"
msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:385 templates/lAfix.php:5
msgid "Wednesday"
msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:386 templates/lAfix.php:6
msgid "Thursday"
msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:387 templates/lAfix.php:7
msgid "Friday"
msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:388 templates/lAfix.php:8
msgid "Saturday"
msgstr ""
-#: templates/calendar.php:33
-msgid "Sun."
+#: lib/object.php:389 templates/lAfix.php:2
+msgid "Sunday"
msgstr ""
-#: templates/calendar.php:33
-msgid "Mon."
+#: lib/object.php:396
+msgid "events week of month"
msgstr ""
-#: templates/calendar.php:33
-msgid "Tue."
+#: lib/object.php:397
+msgid "first"
msgstr ""
-#: templates/calendar.php:33
-msgid "Wed."
+#: lib/object.php:398
+msgid "second"
msgstr ""
-#: templates/calendar.php:33
-msgid "Thu."
+#: lib/object.php:399
+msgid "third"
msgstr ""
-#: templates/calendar.php:33
-msgid "Fri."
+#: lib/object.php:400
+msgid "fourth"
msgstr ""
-#: templates/calendar.php:33
-msgid "Sat."
+#: lib/object.php:401
+msgid "fifth"
+msgstr ""
+
+#: lib/object.php:402
+msgid "last"
msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:424 templates/lAfix.php:16
msgid "January"
msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:425 templates/lAfix.php:17
msgid "February"
msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:426 templates/lAfix.php:18
msgid "March"
msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:427 templates/lAfix.php:19
msgid "April"
msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:428 templates/lAfix.php:20
msgid "May"
msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:429 templates/lAfix.php:21
msgid "June"
msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:430 templates/lAfix.php:22
msgid "July"
msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:431 templates/lAfix.php:23
msgid "August"
msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:432 templates/lAfix.php:24
msgid "September"
msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:433 templates/lAfix.php:25
msgid "October"
msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:434 templates/lAfix.php:26
msgid "November"
msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:435 templates/lAfix.php:27
msgid "December"
msgstr ""
-#: templates/calendar.php:35
-msgid "Jan."
+#: lib/object.php:441
+msgid "by events date"
msgstr ""
-#: templates/calendar.php:35
-msgid "Feb."
+#: lib/object.php:442
+msgid "by yearday(s)"
msgstr ""
-#: templates/calendar.php:35
-msgid "Mar."
+#: lib/object.php:443
+msgid "by weeknumber(s)"
msgstr ""
-#: templates/calendar.php:35
-msgid "Apr."
+#: lib/object.php:444
+msgid "by day and month"
msgstr ""
-#: templates/calendar.php:35
-msgid "May."
+#: lib/object.php:467
+msgid "Not an array"
+msgstr "ingen rad"
+
+#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+msgid "Date"
msgstr ""
-#: templates/calendar.php:35
-msgid "Jun."
+#: lib/search.php:40
+msgid "Cal."
msgstr ""
-#: templates/calendar.php:35
-msgid "Jul."
+#: templates/calendar.php:10
+msgid "All day"
+msgstr "Hela dagen"
+
+#: templates/calendar.php:11
+msgid "Missing fields"
+msgstr "Saknade fält"
+
+#: templates/calendar.php:12 templates/part.eventform.php:3
+msgid "Title"
+msgstr "Rubrik"
+
+#: templates/calendar.php:14
+msgid "From Date"
+msgstr "Från datum"
+
+#: templates/calendar.php:15
+msgid "From Time"
+msgstr "Från tid"
+
+#: templates/calendar.php:16
+msgid "To Date"
+msgstr "Till datum"
+
+#: templates/calendar.php:17
+msgid "To Time"
+msgstr "Till tid"
+
+#: templates/calendar.php:18
+msgid "The event ends before it starts"
+msgstr "Händelsen slutar innan den börjar"
+
+#: templates/calendar.php:19
+msgid "There was a database fail"
+msgstr "Det blev ett databasfel"
+
+#: templates/calendar.php:52
+msgid "Week"
+msgstr "Vecka"
+
+#: templates/calendar.php:53
+msgid "Month"
+msgstr "Månad"
+
+#: templates/calendar.php:54
+msgid "List"
+msgstr "Lista"
+
+#: templates/calendar.php:59
+msgid "Today"
+msgstr "Idag"
+
+#: templates/calendar.php:60
+msgid "Calendars"
+msgstr "Kalendrar"
+
+#: templates/calendar.php:78
+msgid "There was a fail, while parsing the file."
+msgstr "Det blev ett fel medan filen analyserades."
+
+#: templates/lAfix.php:9
+msgid "Sun."
msgstr ""
-#: templates/calendar.php:35
-msgid "Aug."
+#: templates/lAfix.php:10
+msgid "Mon."
msgstr ""
-#: templates/calendar.php:35
-msgid "Sep."
+#: templates/lAfix.php:11
+msgid "Tue."
msgstr ""
-#: templates/calendar.php:35
-msgid "Oct."
+#: templates/lAfix.php:12
+msgid "Wed."
msgstr ""
-#: templates/calendar.php:35
-msgid "Nov."
+#: templates/lAfix.php:13
+msgid "Thu."
msgstr ""
-#: templates/calendar.php:35
-msgid "Dec."
+#: templates/lAfix.php:14
+msgid "Fri."
msgstr ""
-#: templates/calendar.php:36 templates/calendar.php:50
-#: templates/calendar.php:116
-msgid "Week"
+#: templates/lAfix.php:15
+msgid "Sat."
+msgstr ""
+
+#: templates/lAfix.php:28
+msgid "Jan."
msgstr ""
-#: templates/calendar.php:37 templates/calendar.php:51
-msgid "Weeks"
+#: templates/lAfix.php:29
+msgid "Feb."
msgstr ""
-#: templates/calendar.php:38
-msgid "More before {startdate}"
+#: templates/lAfix.php:30
+msgid "Mar."
msgstr ""
-#: templates/calendar.php:39
-msgid "More after {enddate}"
+#: templates/lAfix.php:31
+msgid "Apr."
msgstr ""
-#: templates/calendar.php:49
-msgid "Day"
+#: templates/lAfix.php:32
+msgid "May."
msgstr ""
-#: templates/calendar.php:52
-msgid "Month"
+#: templates/lAfix.php:33
+msgid "Jun."
msgstr ""
-#: templates/calendar.php:53
-msgid "List"
+#: templates/lAfix.php:34
+msgid "Jul."
msgstr ""
-#: templates/calendar.php:58
-msgid "Today"
+#: templates/lAfix.php:35
+msgid "Aug."
msgstr ""
-#: templates/calendar.php:59
-msgid "Calendars"
+#: templates/lAfix.php:36
+msgid "Sep."
+msgstr ""
+
+#: templates/lAfix.php:37
+msgid "Oct."
msgstr ""
-#: templates/calendar.php:76 templates/calendar.php:94
-msgid "Time"
+#: templates/lAfix.php:38
+msgid "Nov."
msgstr ""
-#: templates/calendar.php:169
-msgid "There was a fail, while parsing the file."
+#: templates/lAfix.php:39
+msgid "Dec."
msgstr ""
#: templates/part.choosecalendar.php:1
msgid "Choose active calendars"
-msgstr ""
+msgstr "Välj aktiva kalendrar"
#: templates/part.choosecalendar.php:15
msgid "New Calendar"
-msgstr ""
+msgstr "Ny kalender"
#: templates/part.choosecalendar.php:20
#: templates/part.choosecalendar.rowfields.php:4
msgid "CalDav Link"
-msgstr ""
+msgstr "CalDAV-länk"
#: templates/part.choosecalendar.rowfields.php:4
msgid "Download"
-msgstr ""
+msgstr "Ladda ner"
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.eventinfo.php:64
msgid "Edit"
-msgstr ""
+msgstr "Redigera"
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.editevent.php:8
+#: templates/part.editevent.php:9
msgid "Delete"
-msgstr ""
+msgstr "Radera"
#: templates/part.editcalendar.php:9
msgid "New calendar"
-msgstr ""
+msgstr "Nya kalender"
#: templates/part.editcalendar.php:9
msgid "Edit calendar"
-msgstr ""
+msgstr "Redigera kalender"
#: templates/part.editcalendar.php:12
msgid "Displayname"
-msgstr ""
+msgstr "Visningsnamn"
#: templates/part.editcalendar.php:23
msgid "Active"
-msgstr ""
-
-#: templates/part.editcalendar.php:29 templates/part.eventform.php:88
-#: templates/part.eventinfo.php:58
-msgid "Description"
-msgstr ""
+msgstr "Aktiv"
-#: templates/part.editcalendar.php:35
+#: templates/part.editcalendar.php:29
msgid "Calendar color"
-msgstr ""
+msgstr "Kalender-färg"
-#: templates/part.editcalendar.php:41
+#: templates/part.editcalendar.php:42
msgid "Save"
-msgstr ""
+msgstr "Spara"
-#: templates/part.editcalendar.php:41 templates/part.editevent.php:7
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
#: templates/part.newevent.php:6
msgid "Submit"
-msgstr ""
+msgstr "Lägg till"
-#: templates/part.editcalendar.php:42
+#: templates/part.editcalendar.php:43
msgid "Cancel"
-msgstr ""
+msgstr "Avbryt"
-#: templates/part.editevent.php:1 templates/part.eventinfo.php:1
+#: templates/part.editevent.php:1
msgid "Edit an event"
-msgstr ""
+msgstr "Redigera en händelse"
-#: templates/part.eventform.php:3 templates/part.eventinfo.php:4
-msgid "Title"
-msgstr ""
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr "Exportera"
#: templates/part.eventform.php:5
msgid "Title of the Event"
+msgstr "Rubrik för händelsen"
+
+#: templates/part.eventform.php:11
+msgid "Category"
+msgstr "Kategori"
+
+#: templates/part.eventform.php:13
+msgid "Select category"
+msgstr "Välj kategori"
+
+#: templates/part.eventform.php:37
+msgid "All Day Event"
+msgstr "Hela dagen"
+
+#: templates/part.eventform.php:41
+msgid "From"
+msgstr "Från"
+
+#: templates/part.eventform.php:49
+msgid "To"
+msgstr "Till"
+
+#: templates/part.eventform.php:57
+msgid "Advanced options"
+msgstr "Avancerade alternativ"
+
+#: templates/part.eventform.php:61
+msgid "Repeat"
+msgstr "Upprepa"
+
+#: templates/part.eventform.php:68
+msgid "Advanced"
msgstr ""
-#: templates/part.eventform.php:9 templates/part.eventinfo.php:9
-msgid "Location"
+#: templates/part.eventform.php:112
+msgid "Select weekdays"
msgstr ""
-#: templates/part.eventform.php:11
-msgid "Location of the Event"
+#: templates/part.eventform.php:125 templates/part.eventform.php:138
+msgid "Select days"
msgstr ""
-#: templates/part.eventform.php:17 templates/part.eventinfo.php:16
-msgid "Category"
+#: templates/part.eventform.php:130
+msgid "and the events day of year."
msgstr ""
-#: templates/part.eventform.php:19
-msgid "Select category"
+#: templates/part.eventform.php:143
+msgid "and the events day of month."
msgstr ""
-#: templates/part.eventform.php:45 templates/part.eventinfo.php:28
-msgid "All Day Event"
+#: templates/part.eventform.php:151
+msgid "Select months"
msgstr ""
-#: templates/part.eventform.php:49 templates/part.eventinfo.php:31
-msgid "From"
+#: templates/part.eventform.php:164
+msgid "Select weeks"
msgstr ""
-#: templates/part.eventform.php:57 templates/part.eventinfo.php:38
-msgid "To"
+#: templates/part.eventform.php:169
+msgid "and the events week of year."
msgstr ""
-#: templates/part.eventform.php:65 templates/part.eventinfo.php:44
-msgid "Repeat"
+#: templates/part.eventform.php:175
+msgid "Interval"
+msgstr ""
+
+#: templates/part.eventform.php:181
+msgid "End"
msgstr ""
-#: templates/part.eventform.php:81 templates/part.eventinfo.php:51
-msgid "Attendees"
+#: templates/part.eventform.php:193
+msgid "occurrences"
msgstr ""
-#: templates/part.eventform.php:89
+#: templates/part.eventform.php:208
+msgid "Location"
+msgstr "Plats"
+
+#: templates/part.eventform.php:210
+msgid "Location of the Event"
+msgstr "Platsen för händelsen"
+
+#: templates/part.eventform.php:216
+msgid "Description"
+msgstr "Beskrivning"
+
+#: templates/part.eventform.php:218
msgid "Description of the Event"
+msgstr "Beskrivning av händelse"
+
+#: templates/part.import.php:1
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the calendar"
+msgstr "Välj kalender"
+
+#: templates/part.import.php:10
+msgid "create a new calendar"
msgstr ""
-#: templates/part.eventinfo.php:63
-msgid "Close"
+#: templates/part.import.php:15
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import"
+msgstr "Importera"
+
+#: templates/part.import.php:20
+msgid "Importing calendar"
+msgstr ""
+
+#: templates/part.import.php:23
+msgid "Calendar imported successfully"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Close Dialog"
msgstr ""
#: templates/part.newevent.php:1
msgid "Create a new event"
-msgstr ""
+msgstr "Skapa en ny händelse"
-#: templates/settings.php:11
+#: templates/settings.php:13
msgid "Timezone"
+msgstr "Tidszon"
+
+#: templates/settings.php:30
+msgid "Check always for changes of the timezone"
msgstr ""
+#: templates/settings.php:32
+msgid "Timeformat"
+msgstr "Tidsformat"
+
+#: templates/settings.php:34
+msgid "24h"
+msgstr "24h"
+
+#: templates/settings.php:35
+msgid "12h"
+msgstr "12h"
+
+#: templates/settings.php:41
+msgid "Calendar CalDAV syncing address:"
+msgstr "Synkroniseringsadress för CalDAV kalender:"
+
diff --git a/l10n/sv/contacts.po b/l10n/sv/contacts.po
index f492fa61d7d..a60e600c6d4 100644
--- a/l10n/sv/contacts.po
+++ b/l10n/sv/contacts.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <revoltism@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 20:10+0200\n"
-"PO-Revision-Date: 2011-09-23 18:10+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Swedish (http://www.transifex.net/projects/p/owncloud/team/sv/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,164 +18,273 @@ msgstr ""
"Language: sv\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/addcard.php:31 ajax/addproperty.php:31 ajax/deletebook.php:32
-#: ajax/deletecard.php:32 ajax/deleteproperty.php:34 ajax/getdetails.php:32
-#: ajax/setproperty.php:32 ajax/showaddcard.php:30 ajax/showaddproperty.php:31
-#: ajax/showsetproperty.php:32 photo.php:32
-msgid "You need to log in."
+#: ajax/activation.php:17 ajax/updateaddressbook.php:26
+msgid "Error (de)activating addressbook."
msgstr ""
-#: ajax/addcard.php:37
-msgid "This is not your addressbook."
+#: ajax/addcard.php:79
+msgid "There was an error adding the contact."
msgstr ""
-#: ajax/addproperty.php:37 ajax/deletecard.php:39 ajax/deleteproperty.php:41
-#: ajax/getdetails.php:39 ajax/setproperty.php:38 ajax/showaddproperty.php:37
-#: ajax/showsetproperty.php:38 photo.php:39
-msgid "Contact could not be found."
+#: ajax/addproperty.php:39
+msgid "Cannot add empty property."
msgstr ""
-#: ajax/addproperty.php:43 ajax/deletebook.php:38 ajax/deletecard.php:45
-#: ajax/deleteproperty.php:47 ajax/getdetails.php:45 ajax/setproperty.php:44
-#: ajax/showaddproperty.php:43 ajax/showsetproperty.php:44 photo.php:45
-msgid "This is not your contact."
+#: ajax/addproperty.php:51
+msgid "At least one of the address fields has to be filled out."
msgstr ""
-#: ajax/addproperty.php:50 ajax/deleteproperty.php:54 ajax/getdetails.php:52
-#: ajax/setproperty.php:51 ajax/showsetproperty.php:51
-msgid "vCard could not be read."
+#: ajax/addproperty.php:77
+msgid "Error adding contact property."
msgstr ""
-#: ajax/deleteproperty.php:65 ajax/setproperty.php:62
-#: ajax/showsetproperty.php:62
-msgid "Information about vCard is incorrect. Please reload the page."
+#: ajax/createaddressbook.php:20
+msgid "Error adding addressbook."
msgstr ""
-#: photo.php:53
-msgid "This card is not RFC compatible."
+#: ajax/createaddressbook.php:26
+msgid "Error activating addressbook."
msgstr ""
-#: photo.php:90
-msgid "This card does not contain a photo."
+#: ajax/deleteproperty.php:40
+msgid "Error deleting contact property."
msgstr ""
-#: templates/index.php:8
-msgid "Add Contact"
+#: ajax/setproperty.php:79
+msgid "Error updating contact property."
msgstr ""
-#: templates/part.addcardform.php:5
-msgid "Group"
+#: ajax/updateaddressbook.php:20
+msgid "Error updating addressbook."
msgstr ""
-#: templates/part.addcardform.php:12 templates/part.property.php:3
-msgid "Name"
+#: appinfo/app.php:21 templates/settings.php:3
+msgid "Contacts"
msgstr ""
-#: templates/part.addcardform.php:14
-msgid "Create Contact"
-msgstr ""
+#: lib/app.php:42
+msgid "This is not your addressbook."
+msgstr "Det här är inte din adressbok."
-#: templates/part.addpropertyform.php:4 templates/part.property.php:40
+#: lib/app.php:51 photo.php:34
+msgid "Contact could not be found."
+msgstr "Kontakt kunde inte hittas."
+
+#: lib/app.php:79
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "Information om vCard är felaktigt. Vänligen ladda om sidan."
+
+#: lib/app.php:91 templates/part.addcardform.php:54
+#: templates/part.property.php:45 templates/part.setpropertyform.php:7
msgid "Address"
-msgstr ""
+msgstr "Adress"
-#: templates/part.addpropertyform.php:5
+#: lib/app.php:92 templates/part.addcardform.php:43
msgid "Telephone"
-msgstr ""
+msgstr "Telefon"
-#: templates/part.addpropertyform.php:6 templates/part.property.php:22
+#: lib/app.php:93 templates/part.addcardform.php:37
+#: templates/part.property.php:16 templates/part.setpropertyform.php:51
msgid "Email"
-msgstr ""
+msgstr "E-post"
-#: templates/part.addpropertyform.php:7 templates/part.property.php:15
+#: lib/app.php:94 templates/part.addcardform.php:27
+#: templates/part.property.php:9 templates/part.setpropertyform.php:54
msgid "Organization"
-msgstr ""
+msgstr "Organisation"
-#: templates/part.addpropertyform.php:17 templates/part.addpropertyform.php:32
+#: lib/app.php:106 lib/app.php:113
msgid "Work"
-msgstr ""
+msgstr "Arbete"
-#: templates/part.addpropertyform.php:18 templates/part.addpropertyform.php:30
+#: lib/app.php:107 lib/app.php:111
msgid "Home"
+msgstr "Hem"
+
+#: lib/app.php:112
+msgid "Mobile"
+msgstr "Mobil"
+
+#: lib/app.php:114
+msgid "Text"
+msgstr "Text"
+
+#: lib/app.php:115
+msgid "Voice"
+msgstr "Röst"
+
+#: lib/app.php:116
+msgid "Fax"
+msgstr "Fax"
+
+#: lib/app.php:117
+msgid "Video"
+msgstr "Video"
+
+#: lib/app.php:118
+msgid "Pager"
+msgstr "Personsökare"
+
+#: lib/search.php:22
+msgid "Contact"
msgstr ""
-#: templates/part.addpropertyform.php:20 templates/part.property.php:48
-#: templates/part.setpropertyform.php:5
-msgid "PO Box"
+#: photo.php:40
+msgid "This is not your contact."
+msgstr "Det här är inte din kontakt."
+
+#: photo.php:48
+msgid "This card is not RFC compatible."
+msgstr "Detta kort är inte RFC-kompatibelt."
+
+#: photo.php:85
+msgid "This card does not contain a photo."
+msgstr "Detta kort innehåller inte något foto."
+
+#: templates/index.php:6
+msgid "Add Contact"
+msgstr "Lägg till kontakt"
+
+#: templates/index.php:7
+msgid "Addressbooks"
msgstr ""
-#: templates/part.addpropertyform.php:21 templates/part.property.php:51
-#: templates/part.setpropertyform.php:6
-msgid "Extended"
+#: templates/part.addcardform.php:8
+msgid "Addressbook"
msgstr ""
-#: templates/part.addpropertyform.php:22 templates/part.property.php:54
-#: templates/part.setpropertyform.php:7
-msgid "Street"
+#: templates/part.addcardform.php:21
+msgid "Name"
+msgstr "Namn"
+
+#: templates/part.addcardform.php:57 templates/part.details.php:43
+#: templates/part.details.php:79 templates/part.setpropertyform.php:10
+#: templates/part.setpropertyform.php:47
+msgid "Type"
msgstr ""
-#: templates/part.addpropertyform.php:23 templates/part.property.php:57
-#: templates/part.setpropertyform.php:8
+#: templates/part.addcardform.php:65 templates/part.details.php:49
+#: templates/part.setpropertyform.php:16
+msgid "PO Box"
+msgstr "Postbox"
+
+#: templates/part.addcardform.php:72 templates/part.details.php:53
+#: templates/part.setpropertyform.php:20
+msgid "Extended"
+msgstr "Utökad"
+
+#: templates/part.addcardform.php:78 templates/part.details.php:57
+#: templates/part.setpropertyform.php:24
+msgid "Street"
+msgstr "Gata"
+
+#: templates/part.addcardform.php:84 templates/part.details.php:61
+#: templates/part.setpropertyform.php:28
msgid "City"
-msgstr ""
+msgstr "Stad"
-#: templates/part.addpropertyform.php:24 templates/part.property.php:60
-#: templates/part.setpropertyform.php:9
+#: templates/part.addcardform.php:90 templates/part.details.php:65
+#: templates/part.setpropertyform.php:32
msgid "Region"
-msgstr ""
+msgstr "Län"
-#: templates/part.addpropertyform.php:25 templates/part.property.php:63
-#: templates/part.setpropertyform.php:10
+#: templates/part.addcardform.php:96 templates/part.details.php:69
+#: templates/part.setpropertyform.php:36
msgid "Zipcode"
-msgstr ""
+msgstr "Postnummer"
-#: templates/part.addpropertyform.php:26 templates/part.property.php:66
-#: templates/part.setpropertyform.php:11
+#: templates/part.addcardform.php:102 templates/part.details.php:73
+#: templates/part.setpropertyform.php:40
msgid "Country"
+msgstr "Land"
+
+#: templates/part.addcardform.php:109
+msgid "Create Contact"
+msgstr "Skapa kontakt"
+
+#: templates/part.chooseaddressbook.php:1
+msgid "Choose active Address Books"
msgstr ""
-#: templates/part.addpropertyform.php:31
-msgid "Mobile"
+#: templates/part.chooseaddressbook.php:16
+msgid "New Address Book"
msgstr ""
-#: templates/part.addpropertyform.php:33
-msgid "Text"
+#: templates/part.chooseaddressbook.php:21
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "CardDav Link"
msgstr ""
-#: templates/part.addpropertyform.php:34
-msgid "Voice"
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Download"
msgstr ""
-#: templates/part.addpropertyform.php:35
-msgid "Fax"
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Edit"
+msgstr "Redigera"
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Delete"
+msgstr "Radera"
+
+#: templates/part.details.php:3
+msgid "Download contact"
msgstr ""
-#: templates/part.addpropertyform.php:36
-msgid "Video"
+#: templates/part.details.php:4
+msgid "Delete contact"
msgstr ""
-#: templates/part.addpropertyform.php:37
-msgid "Pager"
+#: templates/part.details.php:34
+msgid "Add"
msgstr ""
-#: templates/part.details.php:33
-msgid "Delete"
+#: templates/part.editaddressbook.php:9
+msgid "New Addressbook"
msgstr ""
-#: templates/part.details.php:34
-msgid "Add Property"
+#: templates/part.editaddressbook.php:9
+msgid "Edit Addressbook"
msgstr ""
-#: templates/part.property.php:9
+#: templates/part.editaddressbook.php:12
+msgid "Displayname"
+msgstr ""
+
+#: templates/part.editaddressbook.php:23
+msgid "Active"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Save"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Submit"
+msgstr ""
+
+#: templates/part.editaddressbook.php:30
+msgid "Cancel"
+msgstr ""
+
+#: templates/part.property.php:3
msgid "Birthday"
+msgstr "Födelsedag"
+
+#: templates/part.property.php:23
+msgid "Preferred"
msgstr ""
-#: templates/part.property.php:29
+#: templates/part.property.php:23 templates/part.setpropertyform.php:45
msgid "Phone"
+msgstr "Telefon"
+
+#: templates/part.setpropertyform.php:57
+msgid "Update"
msgstr ""
-#: templates/part.setpropertyform.php:17
-msgid "Edit"
+#: templates/settings.php:4
+msgid "CardDAV syncing address:"
msgstr ""
diff --git a/l10n/sv/core.po b/l10n/sv/core.po
index 0870f7efb7e..1d822e5fbd8 100644
--- a/l10n/sv/core.po
+++ b/l10n/sv/core.po
@@ -4,13 +4,14 @@
#
# Translators:
# <hakan.thn@gmail.com>, 2011.
+# <revoltism@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 18:17+0200\n"
-"PO-Revision-Date: 2011-09-12 07:50+0000\n"
-"Last-Translator: HakanS <hakan.thn@gmail.com>\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Swedish (http://www.transifex.net/projects/p/owncloud/team/sv/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,6 +19,51 @@ msgstr ""
"Language: sv\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+#: lostpassword/index.php:24
+msgid "Owncloud password reset"
+msgstr ""
+
+#: lostpassword/templates/email.php:1
+msgid "Use the following link to reset your password: {link}"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr "Du får en länk att återställa ditt lösenord via e-post."
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Requested"
+msgstr "Begärd"
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr "Inloggning misslyckades!"
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:22
+#: templates/login.php:8
+msgid "Username"
+msgstr "Användarnamn"
+
+#: lostpassword/templates/lostpassword.php:14
+msgid "Request reset"
+msgstr "Begär återställning"
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr "Ditt lösenord har återställts"
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr "Nytt lösenord"
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr "Återställ lösenordet"
+
#: strings.php:5
msgid "Personal"
msgstr "Personlig"
@@ -46,54 +92,50 @@ msgstr "Hittade inget moln"
msgid "Create an <strong>admin account</strong>"
msgstr "Skapa ett <strong>administratörskonto</strong>"
-#: templates/installation.php:21
-msgid "Username"
-msgstr "Användarnamn"
-
-#: templates/installation.php:22
+#: templates/installation.php:26 templates/login.php:12
msgid "Password"
msgstr "Lösenord"
-#: templates/installation.php:27
+#: templates/installation.php:32
+msgid "Advanced"
+msgstr "Avancerat"
+
+#: templates/installation.php:34
+msgid "Data folder"
+msgstr "Datamapp"
+
+#: templates/installation.php:41
msgid "Configure the database"
msgstr "Konfigurera databasen"
-#: templates/installation.php:32 templates/installation.php:43
-#: templates/installation.php:53
+#: templates/installation.php:46 templates/installation.php:57
+#: templates/installation.php:67
msgid "will be used"
msgstr "kommer att användas"
-#: templates/installation.php:64
+#: templates/installation.php:79
msgid "Database user"
msgstr "Databas-användare"
-#: templates/installation.php:65
+#: templates/installation.php:83
msgid "Database password"
msgstr "Lösenord för databasen"
-#: templates/installation.php:66
+#: templates/installation.php:87
msgid "Database name"
msgstr "Databasens namn"
-#: templates/installation.php:72
-msgid "Advanced"
-msgstr "Avancerat"
-
-#: templates/installation.php:75
+#: templates/installation.php:93
msgid "Database host"
msgstr "Databasserver"
-#: templates/installation.php:76
-msgid "Data folder"
-msgstr "Datamapp"
-
-#: templates/installation.php:79
+#: templates/installation.php:98
msgid "Finish setup"
msgstr "Avsluta installation"
#: templates/layout.guest.php:35
-msgid "gives you freedom and control over your own data"
-msgstr "ger dig frihet och kontroll över din egen data"
+msgid "web services under your control"
+msgstr ""
#: templates/layout.user.php:34
msgid "Log out"
@@ -103,38 +145,22 @@ msgstr "Logga ut"
msgid "Settings"
msgstr "Inställningar"
-#: templates/login.php:4
+#: templates/login.php:5
msgid "Lost your password?"
-msgstr "Tappat bort ditt lösenord?"
+msgstr "Glömt ditt lösenord?"
-#: templates/login.php:9 templates/login.php:13
+#: templates/login.php:15
msgid "remember"
msgstr "kom ihåg"
+#: templates/login.php:16
+msgid "Log in"
+msgstr ""
+
#: templates/logout.php:1
msgid "You are logged out."
msgstr "Du är utloggad"
-#: templates/lostpassword.php:3
-msgid "You will receive a link to reset your password via Email."
-msgstr "Du kommer få en länk, via e-post, där du kan återställ ditt lösenord"
-
-#: templates/lostpassword.php:5
-msgid "Requested"
-msgstr "Begärd"
-
-#: templates/lostpassword.php:8
-msgid "Login failed!"
-msgstr "Inloggning misslyckades!"
-
-#: templates/lostpassword.php:10
-msgid "Username or Email"
-msgstr "Användarnamn eller e-post"
-
-#: templates/lostpassword.php:11
-msgid "Request reset"
-msgstr "Begär återställning"
-
#: templates/part.pagenavi.php:3
msgid "prev"
msgstr "föregående"
@@ -143,16 +169,4 @@ msgstr "föregående"
msgid "next"
msgstr "nästa"
-#: templates/resetpassword.php:4
-msgid "Your password was reset"
-msgstr "Ditt lösenord har återställts"
-
-#: templates/resetpassword.php:6
-msgid "New password"
-msgstr "Nytt lösenord"
-
-#: templates/resetpassword.php:7
-msgid "Reset password"
-msgstr "Återställ lösenord"
-
diff --git a/l10n/sv/files.po b/l10n/sv/files.po
index 64566d0b29b..a43ea6cdb9d 100644
--- a/l10n/sv/files.po
+++ b/l10n/sv/files.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <revoltism@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Swedish (http://www.transifex.net/projects/p/owncloud/team/sv/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,33 +18,36 @@ msgstr ""
"Language: sv\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/upload.php:24
+#: ajax/upload.php:19
msgid "There is no error, the file uploaded with success"
-msgstr ""
+msgstr "Inga fel uppstod. Filen laddades upp utan problem"
-#: ajax/upload.php:25
+#: ajax/upload.php:20
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr ""
+"Den uppladdade filen överskrider upload_max_filesize direktivet i php.ini"
-#: ajax/upload.php:26
+#: ajax/upload.php:21
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
+"Den uppladdade filen överstiger MAX_FILE_SIZE direktivet som anges i HTML-"
+"formulär"
-#: ajax/upload.php:27
+#: ajax/upload.php:22
msgid "The uploaded file was only partially uploaded"
-msgstr ""
+msgstr "Den uppladdade filen var endast delvist uppladdad"
-#: ajax/upload.php:28
+#: ajax/upload.php:23
msgid "No file was uploaded"
-msgstr ""
+msgstr "Ingen fil blev uppladdad"
-#: ajax/upload.php:29
+#: ajax/upload.php:24
msgid "Missing a temporary folder"
-msgstr ""
+msgstr "Saknar en tillfällig mapp"
-#: appinfo/app.php:7
+#: appinfo/app.php:8
msgid "Files"
msgstr "Filer"
@@ -51,48 +55,60 @@ msgstr "Filer"
msgid "Maximum upload size"
msgstr "Maximal storlek att lägga upp"
+#: templates/index.php:7
+msgid "New"
+msgstr ""
+
#: templates/index.php:10
-msgid "Upload"
-msgstr "Lägg upp"
+msgid "Text file"
+msgstr ""
+
+#: templates/index.php:11
+msgid "Folder"
+msgstr ""
+
+#: templates/index.php:12
+msgid "From the web"
+msgstr ""
-#: templates/index.php:17
-msgid "New Folder"
-msgstr "Ny katalog"
+#: templates/index.php:22
+msgid "Upload"
+msgstr "Ladda upp"
-#: templates/index.php:31
+#: templates/index.php:35
msgid "Nothing in here. Upload something!"
-msgstr "Ingenting här. Lägg upp något!"
+msgstr "Ingenting här. Ladda upp något!"
-#: templates/index.php:39
+#: templates/index.php:43
msgid "Name"
msgstr "Namn"
-#: templates/index.php:41
+#: templates/index.php:45
msgid "Download"
msgstr "Ladda ned"
-#: templates/index.php:45
+#: templates/index.php:49
msgid "Size"
msgstr "Storlek"
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Modified"
msgstr "Ändrad"
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Delete"
msgstr "Ta bort"
-#: templates/index.php:54
+#: templates/index.php:58
msgid "Upload too large"
-msgstr "För stor överföring"
+msgstr "För stor uppladdning"
-#: templates/index.php:56
+#: templates/index.php:60
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr ""
-"Filerna du försöker lägga upp överstiger den maximala storleken för "
+"Filerna du försöker ladda upp överstiger den maximala storleken för "
"filöverföringar på servern."
diff --git a/l10n/sv/gallery.po b/l10n/sv/gallery.po
new file mode 100644
index 00000000000..623b3fe1aeb
--- /dev/null
+++ b/l10n/sv/gallery.po
@@ -0,0 +1,32 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:48+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Swedish (http://www.transifex.net/projects/p/owncloud/team/sv/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sv\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:41
+msgid "Gallery"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Rescan"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+
diff --git a/l10n/sv/media.po b/l10n/sv/media.po
index 9c01948ed29..31728e350b8 100644
--- a/l10n/sv/media.po
+++ b/l10n/sv/media.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <revoltism@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 18:17+0200\n"
-"PO-Revision-Date: 2011-09-12 06:24+0000\n"
-"Last-Translator: HakanS <hakan.thn@gmail.com>\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Swedish (http://www.transifex.net/projects/p/owncloud/team/sv/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,15 +18,15 @@ msgstr ""
"Language: sv\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: appinfo/app.php:31
+#: appinfo/app.php:32
msgid "Music"
msgstr "Musik"
-#: templates/music.php:3
+#: templates/music.php:3 templates/player.php:13
msgid "Play"
msgstr "Spela"
-#: templates/music.php:4 templates/music.php:30
+#: templates/music.php:4 templates/music.php:26 templates/player.php:14
msgid "Pause"
msgstr "Paus"
@@ -33,7 +34,7 @@ msgstr "Paus"
msgid "Previous"
msgstr "Föregående"
-#: templates/music.php:6
+#: templates/music.php:6 templates/player.php:15
msgid "Next"
msgstr "Nästa"
@@ -45,11 +46,7 @@ msgstr "Ljudlös"
msgid "Unmute"
msgstr "Ljud på"
-#: templates/music.php:28
-msgid "Songs scanned"
-msgstr "Skannade låtar"
-
-#: templates/music.php:29
+#: templates/music.php:25
msgid "Rescan Collection"
msgstr "Sök igenom samlingen"
diff --git a/l10n/sv/settings.po b/l10n/sv/settings.po
index 4ffc833e868..95b886d8c72 100644
--- a/l10n/sv/settings.po
+++ b/l10n/sv/settings.po
@@ -4,13 +4,14 @@
#
# Translators:
# <hakan.thn@gmail.com>, 2011.
+# <revoltism@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 18:17+0200\n"
-"PO-Revision-Date: 2011-09-12 07:57+0000\n"
-"Last-Translator: HakanS <hakan.thn@gmail.com>\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Swedish (http://www.transifex.net/projects/p/owncloud/team/sv/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,22 +19,26 @@ msgstr ""
"Language: sv\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/openid.php:13 ajax/setlanguage.php:13
-msgid "Authentication error"
-msgstr "Autentiseringsfel"
-
-#: ajax/openid.php:21
-msgid "OpenID Changed"
-msgstr "OpenID ändrat"
+#: ajax/lostpassword.php:14
+msgid "email Changed"
+msgstr ""
-#: ajax/openid.php:23 ajax/setlanguage.php:23
+#: ajax/lostpassword.php:16 ajax/openid.php:17 ajax/setlanguage.php:16
msgid "Invalid request"
msgstr "Ogiltig begäran"
-#: ajax/setlanguage.php:21
+#: ajax/openid.php:15
+msgid "OpenID Changed"
+msgstr "OpenID ändrat"
+
+#: ajax/setlanguage.php:14
msgid "Language changed"
msgstr "Språk ändrades"
+#: templates/admin.php:13
+msgid "Log level"
+msgstr ""
+
#: templates/apps.php:8
msgid "Add your application"
msgstr "Lägg till din applikation"
@@ -54,15 +59,15 @@ msgstr "av"
msgid "Ask a question"
msgstr "Ställ en fråga"
-#: templates/help.php:17
+#: templates/help.php:20
msgid "Problems connecting to help database."
msgstr "Problem med att ansluta till hjälp-databasen."
-#: templates/help.php:18
+#: templates/help.php:21
msgid "Go there manually."
msgstr "Gå dit manuellt"
-#: templates/help.php:26
+#: templates/help.php:29
msgid "Answer"
msgstr "Svar"
@@ -98,36 +103,51 @@ msgstr "visa"
msgid "Change password"
msgstr "Ändra lösenord"
-#: templates/personal.php:24 templates/personal.php:25
+#: templates/personal.php:24
+msgid "Email"
+msgstr ""
+
+#: templates/personal.php:25
+msgid "Your email address"
+msgstr ""
+
+#: templates/personal.php:26
+msgid "Fill in an email address to enable password recovery"
+msgstr ""
+
+#: templates/personal.php:32 templates/personal.php:33
msgid "Language"
msgstr "Språk"
-#: templates/personal.php:30
-msgid "Help translating"
-msgstr "Hjälp till att översätta"
+#: templates/personal.php:38
+msgid "Help translate"
+msgstr ""
-#: templates/personal.php:37
+#: templates/personal.php:45
msgid "use this address to connect to your ownCloud in your file manager"
-msgstr ""
-"använd denna adress för att ansluta till ditt ownCloud i din filhanterare"
+msgstr "använd denna adress för att ansluta ownCloud till din filhanterare"
-#: templates/users.php:16
+#: templates/users.php:15 templates/users.php:30
msgid "Name"
msgstr "Namn"
-#: templates/users.php:17
+#: templates/users.php:16 templates/users.php:31
msgid "Password"
msgstr "Lösenord"
-#: templates/users.php:18 templates/users.php:36
+#: templates/users.php:17 templates/users.php:32 templates/users.php:46
msgid "Groups"
msgstr "Grupper"
-#: templates/users.php:24
+#: templates/users.php:23
msgid "Create"
msgstr "Skapa"
-#: templates/users.php:48
+#: templates/users.php:33
+msgid "Quota"
+msgstr ""
+
+#: templates/users.php:58
msgid "Delete"
msgstr "Ta bort"
diff --git a/l10n/templates/calendar.pot b/l10n/templates/calendar.pot
index 7941082926b..2ccfc8c0f92 100644
--- a/l10n/templates/calendar.pot
+++ b/l10n/templates/calendar.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-01-07 18:29+0100\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -314,27 +314,27 @@ msgstr ""
msgid "There was a database fail"
msgstr ""
-#: templates/calendar.php:38
+#: templates/calendar.php:52
msgid "Week"
msgstr ""
-#: templates/calendar.php:39
+#: templates/calendar.php:53
msgid "Month"
msgstr ""
-#: templates/calendar.php:40
+#: templates/calendar.php:54
msgid "List"
msgstr ""
-#: templates/calendar.php:45
+#: templates/calendar.php:59
msgid "Today"
msgstr ""
-#: templates/calendar.php:46
+#: templates/calendar.php:60
msgid "Calendars"
msgstr ""
-#: templates/calendar.php:64
+#: templates/calendar.php:78
msgid "There was a fail, while parsing the file."
msgstr ""
@@ -448,7 +448,7 @@ msgstr ""
msgid "Edit calendar"
msgstr ""
-#: templates/part.editcalendar.php:12 templates/part.import.php:29
+#: templates/part.editcalendar.php:12
msgid "Displayname"
msgstr ""
@@ -574,35 +574,35 @@ msgid "Description of the Event"
msgstr ""
#: templates/part.import.php:1
-msgid "Import Ical File"
-msgstr ""
-
-#: templates/part.import.php:4
-msgid "How to import the new calendar?"
+msgid "Import a calendar file"
msgstr ""
#: templates/part.import.php:6
-msgid "Import into an existing calendar"
+msgid "Please choose the calendar"
msgstr ""
-#: templates/part.import.php:7
-msgid "Import into a new calendar"
+#: templates/part.import.php:10
+msgid "create a new calendar"
msgstr ""
-#: templates/part.import.php:10
-msgid "Please choose the calendar"
+#: templates/part.import.php:15
+msgid "Name of new calendar"
msgstr ""
-#: templates/part.import.php:20 templates/part.import.php:37
+#: templates/part.import.php:17
msgid "Import"
msgstr ""
-#: templates/part.import.php:22 templates/part.import.php:39
-msgid "Back"
+#: templates/part.import.php:20
+msgid "Importing calendar"
+msgstr ""
+
+#: templates/part.import.php:23
+msgid "Calendar imported successfully"
msgstr ""
-#: templates/part.import.php:25
-msgid "Please fill out the form"
+#: templates/part.import.php:24
+msgid "Close Dialog"
msgstr ""
#: templates/part.newevent.php:1
diff --git a/l10n/templates/contacts.pot b/l10n/templates/contacts.pot
index b0426f2bb59..f2d99d896d9 100644
--- a/l10n/templates/contacts.pot
+++ b/l10n/templates/contacts.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,162 +17,271 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
-#: ajax/addcard.php:31 ajax/addproperty.php:31 ajax/deletebook.php:32
-#: ajax/deletecard.php:32 ajax/deleteproperty.php:34 ajax/getdetails.php:32
-#: ajax/setproperty.php:32 ajax/showaddcard.php:30 ajax/showaddproperty.php:31
-#: ajax/showsetproperty.php:32 photo.php:32
-msgid "You need to log in."
+#: ajax/activation.php:17 ajax/updateaddressbook.php:26
+msgid "Error (de)activating addressbook."
msgstr ""
-#: ajax/addcard.php:37
-msgid "This is not your addressbook."
+#: ajax/addcard.php:79
+msgid "There was an error adding the contact."
msgstr ""
-#: ajax/addproperty.php:37 ajax/deletecard.php:39 ajax/deleteproperty.php:41
-#: ajax/getdetails.php:39 ajax/setproperty.php:38 ajax/showaddproperty.php:37
-#: ajax/showsetproperty.php:38 photo.php:39
-msgid "Contact could not be found."
+#: ajax/addproperty.php:39
+msgid "Cannot add empty property."
msgstr ""
-#: ajax/addproperty.php:43 ajax/deletebook.php:38 ajax/deletecard.php:45
-#: ajax/deleteproperty.php:47 ajax/getdetails.php:45 ajax/setproperty.php:44
-#: ajax/showaddproperty.php:43 ajax/showsetproperty.php:44 photo.php:45
-msgid "This is not your contact."
+#: ajax/addproperty.php:51
+msgid "At least one of the address fields has to be filled out."
msgstr ""
-#: ajax/addproperty.php:50 ajax/deleteproperty.php:54 ajax/getdetails.php:52
-#: ajax/setproperty.php:51 ajax/showsetproperty.php:51
-msgid "vCard could not be read."
+#: ajax/addproperty.php:77
+msgid "Error adding contact property."
msgstr ""
-#: ajax/deleteproperty.php:65 ajax/setproperty.php:62
-#: ajax/showsetproperty.php:62
-msgid "Information about vCard is incorrect. Please reload the page."
+#: ajax/createaddressbook.php:20
+msgid "Error adding addressbook."
msgstr ""
-#: photo.php:53
-msgid "This card is not RFC compatible."
+#: ajax/createaddressbook.php:26
+msgid "Error activating addressbook."
msgstr ""
-#: photo.php:90
-msgid "This card does not contain a photo."
+#: ajax/deleteproperty.php:40
+msgid "Error deleting contact property."
msgstr ""
-#: templates/index.php:8
-msgid "Add Contact"
+#: ajax/setproperty.php:79
+msgid "Error updating contact property."
msgstr ""
-#: templates/part.addcardform.php:5
-msgid "Group"
+#: ajax/updateaddressbook.php:20
+msgid "Error updating addressbook."
msgstr ""
-#: templates/part.addcardform.php:12 templates/part.property.php:3
-msgid "Name"
+#: appinfo/app.php:21 templates/settings.php:3
+msgid "Contacts"
msgstr ""
-#: templates/part.addcardform.php:14
-msgid "Create Contact"
+#: lib/app.php:42
+msgid "This is not your addressbook."
+msgstr ""
+
+#: lib/app.php:51 photo.php:34
+msgid "Contact could not be found."
+msgstr ""
+
+#: lib/app.php:79
+msgid "Information about vCard is incorrect. Please reload the page."
msgstr ""
-#: templates/part.addpropertyform.php:4 templates/part.property.php:40
+#: lib/app.php:91 templates/part.addcardform.php:54
+#: templates/part.property.php:45 templates/part.setpropertyform.php:7
msgid "Address"
msgstr ""
-#: templates/part.addpropertyform.php:5
+#: lib/app.php:92 templates/part.addcardform.php:43
msgid "Telephone"
msgstr ""
-#: templates/part.addpropertyform.php:6 templates/part.property.php:22
+#: lib/app.php:93 templates/part.addcardform.php:37
+#: templates/part.property.php:16 templates/part.setpropertyform.php:51
msgid "Email"
msgstr ""
-#: templates/part.addpropertyform.php:7 templates/part.property.php:15
+#: lib/app.php:94 templates/part.addcardform.php:27
+#: templates/part.property.php:9 templates/part.setpropertyform.php:54
msgid "Organization"
msgstr ""
-#: templates/part.addpropertyform.php:17 templates/part.addpropertyform.php:32
+#: lib/app.php:106 lib/app.php:113
msgid "Work"
msgstr ""
-#: templates/part.addpropertyform.php:18 templates/part.addpropertyform.php:30
+#: lib/app.php:107 lib/app.php:111
msgid "Home"
msgstr ""
-#: templates/part.addpropertyform.php:20 templates/part.property.php:48
-#: templates/part.setpropertyform.php:5
+#: lib/app.php:112
+msgid "Mobile"
+msgstr ""
+
+#: lib/app.php:114
+msgid "Text"
+msgstr ""
+
+#: lib/app.php:115
+msgid "Voice"
+msgstr ""
+
+#: lib/app.php:116
+msgid "Fax"
+msgstr ""
+
+#: lib/app.php:117
+msgid "Video"
+msgstr ""
+
+#: lib/app.php:118
+msgid "Pager"
+msgstr ""
+
+#: lib/search.php:22
+msgid "Contact"
+msgstr ""
+
+#: photo.php:40
+msgid "This is not your contact."
+msgstr ""
+
+#: photo.php:48
+msgid "This card is not RFC compatible."
+msgstr ""
+
+#: photo.php:85
+msgid "This card does not contain a photo."
+msgstr ""
+
+#: templates/index.php:6
+msgid "Add Contact"
+msgstr ""
+
+#: templates/index.php:7
+msgid "Addressbooks"
+msgstr ""
+
+#: templates/part.addcardform.php:8
+msgid "Addressbook"
+msgstr ""
+
+#: templates/part.addcardform.php:21
+msgid "Name"
+msgstr ""
+
+#: templates/part.addcardform.php:57 templates/part.details.php:43
+#: templates/part.details.php:79 templates/part.setpropertyform.php:10
+#: templates/part.setpropertyform.php:47
+msgid "Type"
+msgstr ""
+
+#: templates/part.addcardform.php:65 templates/part.details.php:49
+#: templates/part.setpropertyform.php:16
msgid "PO Box"
msgstr ""
-#: templates/part.addpropertyform.php:21 templates/part.property.php:51
-#: templates/part.setpropertyform.php:6
+#: templates/part.addcardform.php:72 templates/part.details.php:53
+#: templates/part.setpropertyform.php:20
msgid "Extended"
msgstr ""
-#: templates/part.addpropertyform.php:22 templates/part.property.php:54
-#: templates/part.setpropertyform.php:7
+#: templates/part.addcardform.php:78 templates/part.details.php:57
+#: templates/part.setpropertyform.php:24
msgid "Street"
msgstr ""
-#: templates/part.addpropertyform.php:23 templates/part.property.php:57
-#: templates/part.setpropertyform.php:8
+#: templates/part.addcardform.php:84 templates/part.details.php:61
+#: templates/part.setpropertyform.php:28
msgid "City"
msgstr ""
-#: templates/part.addpropertyform.php:24 templates/part.property.php:60
-#: templates/part.setpropertyform.php:9
+#: templates/part.addcardform.php:90 templates/part.details.php:65
+#: templates/part.setpropertyform.php:32
msgid "Region"
msgstr ""
-#: templates/part.addpropertyform.php:25 templates/part.property.php:63
-#: templates/part.setpropertyform.php:10
+#: templates/part.addcardform.php:96 templates/part.details.php:69
+#: templates/part.setpropertyform.php:36
msgid "Zipcode"
msgstr ""
-#: templates/part.addpropertyform.php:26 templates/part.property.php:66
-#: templates/part.setpropertyform.php:11
+#: templates/part.addcardform.php:102 templates/part.details.php:73
+#: templates/part.setpropertyform.php:40
msgid "Country"
msgstr ""
-#: templates/part.addpropertyform.php:31
-msgid "Mobile"
+#: templates/part.addcardform.php:109
+msgid "Create Contact"
msgstr ""
-#: templates/part.addpropertyform.php:33
-msgid "Text"
+#: templates/part.chooseaddressbook.php:1
+msgid "Choose active Address Books"
msgstr ""
-#: templates/part.addpropertyform.php:34
-msgid "Voice"
+#: templates/part.chooseaddressbook.php:16
+msgid "New Address Book"
msgstr ""
-#: templates/part.addpropertyform.php:35
-msgid "Fax"
+#: templates/part.chooseaddressbook.php:21
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "CardDav Link"
msgstr ""
-#: templates/part.addpropertyform.php:36
-msgid "Video"
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Download"
msgstr ""
-#: templates/part.addpropertyform.php:37
-msgid "Pager"
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Edit"
msgstr ""
-#: templates/part.details.php:31
+#: templates/part.chooseaddressbook.rowfields.php:5
msgid "Delete"
msgstr ""
-#: templates/part.details.php:32
-msgid "Add Property"
+#: templates/part.details.php:3
+msgid "Download contact"
+msgstr ""
+
+#: templates/part.details.php:4
+msgid "Delete contact"
+msgstr ""
+
+#: templates/part.details.php:34
+msgid "Add"
+msgstr ""
+
+#: templates/part.editaddressbook.php:9
+msgid "New Addressbook"
+msgstr ""
+
+#: templates/part.editaddressbook.php:9
+msgid "Edit Addressbook"
+msgstr ""
+
+#: templates/part.editaddressbook.php:12
+msgid "Displayname"
+msgstr ""
+
+#: templates/part.editaddressbook.php:23
+msgid "Active"
msgstr ""
-#: templates/part.property.php:9
+#: templates/part.editaddressbook.php:29
+msgid "Save"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Submit"
+msgstr ""
+
+#: templates/part.editaddressbook.php:30
+msgid "Cancel"
+msgstr ""
+
+#: templates/part.property.php:3
msgid "Birthday"
msgstr ""
-#: templates/part.property.php:29
+#: templates/part.property.php:23
+msgid "Preferred"
+msgstr ""
+
+#: templates/part.property.php:23 templates/part.setpropertyform.php:45
msgid "Phone"
msgstr ""
-#: templates/part.setpropertyform.php:17
-msgid "Edit"
+#: templates/part.setpropertyform.php:57
+msgid "Update"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "CardDAV syncing address:"
msgstr ""
diff --git a/l10n/templates/core.pot b/l10n/templates/core.pot
index 98b310f2d14..16f328aea2a 100644
--- a/l10n/templates/core.pot
+++ b/l10n/templates/core.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,6 +17,51 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
+#: lostpassword/index.php:24
+msgid "Owncloud password reset"
+msgstr ""
+
+#: lostpassword/templates/email.php:1
+msgid "Use the following link to reset your password: {link}"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Requested"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:22
+#: templates/login.php:8
+msgid "Username"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:14
+msgid "Request reset"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr ""
+
#: strings.php:5
msgid "Personal"
msgstr ""
@@ -45,53 +90,49 @@ msgstr ""
msgid "Create an <strong>admin account</strong>"
msgstr ""
-#: templates/installation.php:21
-msgid "Username"
+#: templates/installation.php:26 templates/login.php:12
+msgid "Password"
msgstr ""
-#: templates/installation.php:22
-msgid "Password"
+#: templates/installation.php:32
+msgid "Advanced"
+msgstr ""
+
+#: templates/installation.php:34
+msgid "Data folder"
msgstr ""
-#: templates/installation.php:27
+#: templates/installation.php:41
msgid "Configure the database"
msgstr ""
-#: templates/installation.php:32 templates/installation.php:43
-#: templates/installation.php:53
+#: templates/installation.php:46 templates/installation.php:57
+#: templates/installation.php:67
msgid "will be used"
msgstr ""
-#: templates/installation.php:64
+#: templates/installation.php:79
msgid "Database user"
msgstr ""
-#: templates/installation.php:65
+#: templates/installation.php:83
msgid "Database password"
msgstr ""
-#: templates/installation.php:66
+#: templates/installation.php:87
msgid "Database name"
msgstr ""
-#: templates/installation.php:72
-msgid "Advanced"
-msgstr ""
-
-#: templates/installation.php:75
+#: templates/installation.php:93
msgid "Database host"
msgstr ""
-#: templates/installation.php:76
-msgid "Data folder"
-msgstr ""
-
-#: templates/installation.php:79
+#: templates/installation.php:98
msgid "Finish setup"
msgstr ""
#: templates/layout.guest.php:35
-msgid "gives you freedom and control over your own data"
+msgid "web services under your control"
msgstr ""
#: templates/layout.user.php:34
@@ -102,36 +143,20 @@ msgstr ""
msgid "Settings"
msgstr ""
-#: templates/login.php:4
+#: templates/login.php:5
msgid "Lost your password?"
msgstr ""
-#: templates/login.php:9 templates/login.php:13
+#: templates/login.php:15
msgid "remember"
msgstr ""
-#: templates/logout.php:1
-msgid "You are logged out."
-msgstr ""
-
-#: templates/lostpassword.php:3
-msgid "You will receive a link to reset your password via Email."
-msgstr ""
-
-#: templates/lostpassword.php:5
-msgid "Requested"
+#: templates/login.php:16
+msgid "Log in"
msgstr ""
-#: templates/lostpassword.php:8
-msgid "Login failed!"
-msgstr ""
-
-#: templates/lostpassword.php:10
-msgid "Username or Email"
-msgstr ""
-
-#: templates/lostpassword.php:11
-msgid "Request reset"
+#: templates/logout.php:1
+msgid "You are logged out."
msgstr ""
#: templates/part.pagenavi.php:3
@@ -141,15 +166,3 @@ msgstr ""
#: templates/part.pagenavi.php:20
msgid "next"
msgstr ""
-
-#: templates/resetpassword.php:4
-msgid "Your password was reset"
-msgstr ""
-
-#: templates/resetpassword.php:6
-msgid "New password"
-msgstr ""
-
-#: templates/resetpassword.php:7
-msgid "Reset password"
-msgstr ""
diff --git a/l10n/templates/files.pot b/l10n/templates/files.pot
index 5b57ccec9a2..d5f6e43db87 100644
--- a/l10n/templates/files.pot
+++ b/l10n/templates/files.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,33 +17,33 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
-#: ajax/upload.php:24
+#: ajax/upload.php:19
msgid "There is no error, the file uploaded with success"
msgstr ""
-#: ajax/upload.php:25
+#: ajax/upload.php:20
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr ""
-#: ajax/upload.php:26
+#: ajax/upload.php:21
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
-#: ajax/upload.php:27
+#: ajax/upload.php:22
msgid "The uploaded file was only partially uploaded"
msgstr ""
-#: ajax/upload.php:28
+#: ajax/upload.php:23
msgid "No file was uploaded"
msgstr ""
-#: ajax/upload.php:29
+#: ajax/upload.php:24
msgid "Missing a temporary folder"
msgstr ""
-#: appinfo/app.php:7
+#: appinfo/app.php:8
msgid "Files"
msgstr ""
@@ -51,43 +51,55 @@ msgstr ""
msgid "Maximum upload size"
msgstr ""
+#: templates/index.php:7
+msgid "New"
+msgstr ""
+
#: templates/index.php:10
-msgid "Upload"
+msgid "Text file"
+msgstr ""
+
+#: templates/index.php:11
+msgid "Folder"
+msgstr ""
+
+#: templates/index.php:12
+msgid "From the web"
msgstr ""
-#: templates/index.php:17
-msgid "New Folder"
+#: templates/index.php:22
+msgid "Upload"
msgstr ""
-#: templates/index.php:31
+#: templates/index.php:35
msgid "Nothing in here. Upload something!"
msgstr ""
-#: templates/index.php:39
+#: templates/index.php:43
msgid "Name"
msgstr ""
-#: templates/index.php:41
+#: templates/index.php:45
msgid "Download"
msgstr ""
-#: templates/index.php:45
+#: templates/index.php:49
msgid "Size"
msgstr ""
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Modified"
msgstr ""
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Delete"
msgstr ""
-#: templates/index.php:54
+#: templates/index.php:58
msgid "Upload too large"
msgstr ""
-#: templates/index.php:56
+#: templates/index.php:60
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
diff --git a/l10n/templates/gallery.pot b/l10n/templates/gallery.pot
new file mode 100644
index 00000000000..255295569da
--- /dev/null
+++ b/l10n/templates/gallery.pot
@@ -0,0 +1,30 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: appinfo/app.php:41
+msgid "Gallery"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Rescan"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
diff --git a/l10n/templates/media.pot b/l10n/templates/media.pot
index 0a2757a306e..e1a750f3b6e 100644
--- a/l10n/templates/media.pot
+++ b/l10n/templates/media.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,15 +17,15 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
-#: appinfo/app.php:31
+#: appinfo/app.php:32 templates/player.php:9
msgid "Music"
msgstr ""
-#: templates/music.php:3
+#: templates/music.php:3 templates/player.php:13
msgid "Play"
msgstr ""
-#: templates/music.php:4 templates/music.php:30
+#: templates/music.php:4 templates/music.php:26 templates/player.php:14
msgid "Pause"
msgstr ""
@@ -33,7 +33,7 @@ msgstr ""
msgid "Previous"
msgstr ""
-#: templates/music.php:6
+#: templates/music.php:6 templates/player.php:15
msgid "Next"
msgstr ""
@@ -45,11 +45,7 @@ msgstr ""
msgid "Unmute"
msgstr ""
-#: templates/music.php:28
-msgid "Songs scanned"
-msgstr ""
-
-#: templates/music.php:29
+#: templates/music.php:25
msgid "Rescan Collection"
msgstr ""
diff --git a/l10n/templates/settings.pot b/l10n/templates/settings.pot
index b1444319153..0142d2a8378 100644
--- a/l10n/templates/settings.pot
+++ b/l10n/templates/settings.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,22 +17,26 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
-#: ajax/openid.php:13 ajax/setlanguage.php:13
-msgid "Authentication error"
+#: ajax/lostpassword.php:14
+msgid "email Changed"
msgstr ""
-#: ajax/openid.php:21
-msgid "OpenID Changed"
+#: ajax/lostpassword.php:16 ajax/openid.php:17 ajax/setlanguage.php:16
+msgid "Invalid request"
msgstr ""
-#: ajax/openid.php:23 ajax/setlanguage.php:23
-msgid "Invalid request"
+#: ajax/openid.php:15
+msgid "OpenID Changed"
msgstr ""
-#: ajax/setlanguage.php:21
+#: ajax/setlanguage.php:14
msgid "Language changed"
msgstr ""
+#: templates/admin.php:13
+msgid "Log level"
+msgstr ""
+
#: templates/apps.php:8
msgid "Add your application"
msgstr ""
@@ -53,15 +57,15 @@ msgstr ""
msgid "Ask a question"
msgstr ""
-#: templates/help.php:17
+#: templates/help.php:20
msgid "Problems connecting to help database."
msgstr ""
-#: templates/help.php:18
+#: templates/help.php:21
msgid "Go there manually."
msgstr ""
-#: templates/help.php:26
+#: templates/help.php:29
msgid "Answer"
msgstr ""
@@ -97,34 +101,50 @@ msgstr ""
msgid "Change password"
msgstr ""
-#: templates/personal.php:24 templates/personal.php:25
+#: templates/personal.php:24
+msgid "Email"
+msgstr ""
+
+#: templates/personal.php:25
+msgid "Your email address"
+msgstr ""
+
+#: templates/personal.php:26
+msgid "Fill in an email address to enable password recovery"
+msgstr ""
+
+#: templates/personal.php:32 templates/personal.php:33
msgid "Language"
msgstr ""
-#: templates/personal.php:30
-msgid "Help translating"
+#: templates/personal.php:38
+msgid "Help translate"
msgstr ""
-#: templates/personal.php:37
+#: templates/personal.php:45
msgid "use this address to connect to your ownCloud in your file manager"
msgstr ""
-#: templates/users.php:16
+#: templates/users.php:15 templates/users.php:30
msgid "Name"
msgstr ""
-#: templates/users.php:17
+#: templates/users.php:16 templates/users.php:31
msgid "Password"
msgstr ""
-#: templates/users.php:18 templates/users.php:36
+#: templates/users.php:17 templates/users.php:32 templates/users.php:46
msgid "Groups"
msgstr ""
-#: templates/users.php:24
+#: templates/users.php:23
msgid "Create"
msgstr ""
-#: templates/users.php:48
+#: templates/users.php:33
+msgid "Quota"
+msgstr ""
+
+#: templates/users.php:58
msgid "Delete"
msgstr ""
diff --git a/l10n/tr/calendar.po b/l10n/tr/calendar.po
new file mode 100644
index 00000000000..6025d7e6bb6
--- /dev/null
+++ b/l10n/tr/calendar.po
@@ -0,0 +1,637 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Aranel Surion <aranel@aranelsurion.org>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Turkish (http://www.transifex.net/projects/p/owncloud/team/tr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: tr\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: ajax/guesstimezone.php:42
+msgid "New Timezone:"
+msgstr ""
+
+#: ajax/settimezone.php:22
+msgid "Timezone changed"
+msgstr "Zaman dilimi değiştirildi"
+
+#: ajax/settimezone.php:24
+msgid "Invalid request"
+msgstr "Geçersiz istek"
+
+#: appinfo/app.php:20 templates/calendar.php:13
+#: templates/part.eventform.php:20
+msgid "Calendar"
+msgstr "Takvim"
+
+#: lib/app.php:19
+msgid "Wrong calendar"
+msgstr "Yanlış takvim"
+
+#: lib/app.php:60 lib/object.php:332
+msgid "Birthday"
+msgstr "Doğum günü"
+
+#: lib/app.php:61 lib/object.php:333
+msgid "Business"
+msgstr "İş"
+
+#: lib/app.php:62 lib/object.php:334
+msgid "Call"
+msgstr "Arama"
+
+#: lib/app.php:63 lib/object.php:335
+msgid "Clients"
+msgstr "Müşteriler"
+
+#: lib/app.php:64 lib/object.php:336
+msgid "Deliverer"
+msgstr "Teslimatçı"
+
+#: lib/app.php:65 lib/object.php:337
+msgid "Holidays"
+msgstr "Tatil günleri"
+
+#: lib/app.php:66 lib/object.php:338
+msgid "Ideas"
+msgstr "Fikirler"
+
+#: lib/app.php:67 lib/object.php:339
+msgid "Journey"
+msgstr "Seyahat"
+
+#: lib/app.php:68 lib/object.php:340
+msgid "Jubilee"
+msgstr "Yıl dönümü"
+
+#: lib/app.php:69 lib/object.php:341
+msgid "Meeting"
+msgstr "Toplantı"
+
+#: lib/app.php:70 lib/object.php:342
+msgid "Other"
+msgstr "Diğer"
+
+#: lib/app.php:71 lib/object.php:343
+msgid "Personal"
+msgstr "Kişisel"
+
+#: lib/app.php:72 lib/object.php:344
+msgid "Projects"
+msgstr "Projeler"
+
+#: lib/app.php:73 lib/object.php:345
+msgid "Questions"
+msgstr "Sorular"
+
+#: lib/app.php:74 lib/object.php:346
+msgid "Work"
+msgstr "İş"
+
+#: lib/object.php:353
+msgid "Does not repeat"
+msgstr "Tekrar etmiyor"
+
+#: lib/object.php:354
+msgid "Daily"
+msgstr "Günlük"
+
+#: lib/object.php:355
+msgid "Weekly"
+msgstr "Haftalı"
+
+#: lib/object.php:356
+msgid "Every Weekday"
+msgstr "Haftaiçi Her gün"
+
+#: lib/object.php:357
+msgid "Bi-Weekly"
+msgstr "İki haftada bir"
+
+#: lib/object.php:358
+msgid "Monthly"
+msgstr "Aylık"
+
+#: lib/object.php:359
+msgid "Yearly"
+msgstr "Yıllı"
+
+#: lib/object.php:366
+msgid "never"
+msgstr ""
+
+#: lib/object.php:367
+msgid "by occurrences"
+msgstr ""
+
+#: lib/object.php:368
+msgid "by date"
+msgstr ""
+
+#: lib/object.php:375
+msgid "by monthday"
+msgstr ""
+
+#: lib/object.php:376
+msgid "by weekday"
+msgstr ""
+
+#: lib/object.php:383 templates/lAfix.php:3
+msgid "Monday"
+msgstr ""
+
+#: lib/object.php:384 templates/lAfix.php:4
+msgid "Tuesday"
+msgstr ""
+
+#: lib/object.php:385 templates/lAfix.php:5
+msgid "Wednesday"
+msgstr ""
+
+#: lib/object.php:386 templates/lAfix.php:6
+msgid "Thursday"
+msgstr ""
+
+#: lib/object.php:387 templates/lAfix.php:7
+msgid "Friday"
+msgstr ""
+
+#: lib/object.php:388 templates/lAfix.php:8
+msgid "Saturday"
+msgstr ""
+
+#: lib/object.php:389 templates/lAfix.php:2
+msgid "Sunday"
+msgstr ""
+
+#: lib/object.php:396
+msgid "events week of month"
+msgstr ""
+
+#: lib/object.php:397
+msgid "first"
+msgstr ""
+
+#: lib/object.php:398
+msgid "second"
+msgstr ""
+
+#: lib/object.php:399
+msgid "third"
+msgstr ""
+
+#: lib/object.php:400
+msgid "fourth"
+msgstr ""
+
+#: lib/object.php:401
+msgid "fifth"
+msgstr ""
+
+#: lib/object.php:402
+msgid "last"
+msgstr ""
+
+#: lib/object.php:424 templates/lAfix.php:16
+msgid "January"
+msgstr ""
+
+#: lib/object.php:425 templates/lAfix.php:17
+msgid "February"
+msgstr ""
+
+#: lib/object.php:426 templates/lAfix.php:18
+msgid "March"
+msgstr ""
+
+#: lib/object.php:427 templates/lAfix.php:19
+msgid "April"
+msgstr ""
+
+#: lib/object.php:428 templates/lAfix.php:20
+msgid "May"
+msgstr ""
+
+#: lib/object.php:429 templates/lAfix.php:21
+msgid "June"
+msgstr ""
+
+#: lib/object.php:430 templates/lAfix.php:22
+msgid "July"
+msgstr ""
+
+#: lib/object.php:431 templates/lAfix.php:23
+msgid "August"
+msgstr ""
+
+#: lib/object.php:432 templates/lAfix.php:24
+msgid "September"
+msgstr ""
+
+#: lib/object.php:433 templates/lAfix.php:25
+msgid "October"
+msgstr ""
+
+#: lib/object.php:434 templates/lAfix.php:26
+msgid "November"
+msgstr ""
+
+#: lib/object.php:435 templates/lAfix.php:27
+msgid "December"
+msgstr ""
+
+#: lib/object.php:441
+msgid "by events date"
+msgstr ""
+
+#: lib/object.php:442
+msgid "by yearday(s)"
+msgstr ""
+
+#: lib/object.php:443
+msgid "by weeknumber(s)"
+msgstr ""
+
+#: lib/object.php:444
+msgid "by day and month"
+msgstr ""
+
+#: lib/object.php:467
+msgid "Not an array"
+msgstr "Bir dizi değil"
+
+#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+msgid "Date"
+msgstr ""
+
+#: lib/search.php:40
+msgid "Cal."
+msgstr ""
+
+#: templates/calendar.php:10
+msgid "All day"
+msgstr "Tüm gün"
+
+#: templates/calendar.php:11
+msgid "Missing fields"
+msgstr "Eksik alanlar"
+
+#: templates/calendar.php:12 templates/part.eventform.php:3
+msgid "Title"
+msgstr "Başlık"
+
+#: templates/calendar.php:14
+msgid "From Date"
+msgstr "Bu Tarihten"
+
+#: templates/calendar.php:15
+msgid "From Time"
+msgstr "Bu Saatten"
+
+#: templates/calendar.php:16
+msgid "To Date"
+msgstr "Bu Tarihe"
+
+#: templates/calendar.php:17
+msgid "To Time"
+msgstr "Bu Saate"
+
+#: templates/calendar.php:18
+msgid "The event ends before it starts"
+msgstr "Olay başlamadan önce bitiyor"
+
+#: templates/calendar.php:19
+msgid "There was a database fail"
+msgstr "Bir veritabanı başarısızlığı oluştu"
+
+#: templates/calendar.php:52
+msgid "Week"
+msgstr "Hafta"
+
+#: templates/calendar.php:53
+msgid "Month"
+msgstr "Ay"
+
+#: templates/calendar.php:54
+msgid "List"
+msgstr "Liste"
+
+#: templates/calendar.php:59
+msgid "Today"
+msgstr "Bugün"
+
+#: templates/calendar.php:60
+msgid "Calendars"
+msgstr "Takvimler"
+
+#: templates/calendar.php:78
+msgid "There was a fail, while parsing the file."
+msgstr "Dosya okunurken başarısızlık oldu."
+
+#: templates/lAfix.php:9
+msgid "Sun."
+msgstr ""
+
+#: templates/lAfix.php:10
+msgid "Mon."
+msgstr ""
+
+#: templates/lAfix.php:11
+msgid "Tue."
+msgstr ""
+
+#: templates/lAfix.php:12
+msgid "Wed."
+msgstr ""
+
+#: templates/lAfix.php:13
+msgid "Thu."
+msgstr ""
+
+#: templates/lAfix.php:14
+msgid "Fri."
+msgstr ""
+
+#: templates/lAfix.php:15
+msgid "Sat."
+msgstr ""
+
+#: templates/lAfix.php:28
+msgid "Jan."
+msgstr ""
+
+#: templates/lAfix.php:29
+msgid "Feb."
+msgstr ""
+
+#: templates/lAfix.php:30
+msgid "Mar."
+msgstr ""
+
+#: templates/lAfix.php:31
+msgid "Apr."
+msgstr ""
+
+#: templates/lAfix.php:32
+msgid "May."
+msgstr ""
+
+#: templates/lAfix.php:33
+msgid "Jun."
+msgstr ""
+
+#: templates/lAfix.php:34
+msgid "Jul."
+msgstr ""
+
+#: templates/lAfix.php:35
+msgid "Aug."
+msgstr ""
+
+#: templates/lAfix.php:36
+msgid "Sep."
+msgstr ""
+
+#: templates/lAfix.php:37
+msgid "Oct."
+msgstr ""
+
+#: templates/lAfix.php:38
+msgid "Nov."
+msgstr ""
+
+#: templates/lAfix.php:39
+msgid "Dec."
+msgstr ""
+
+#: templates/part.choosecalendar.php:1
+msgid "Choose active calendars"
+msgstr "Aktif takvimleri seçin"
+
+#: templates/part.choosecalendar.php:15
+msgid "New Calendar"
+msgstr "Yeni Takvim"
+
+#: templates/part.choosecalendar.php:20
+#: templates/part.choosecalendar.rowfields.php:4
+msgid "CalDav Link"
+msgstr "CalDav Bağlantısı"
+
+#: templates/part.choosecalendar.rowfields.php:4
+msgid "Download"
+msgstr "İndir"
+
+#: templates/part.choosecalendar.rowfields.php:4
+msgid "Edit"
+msgstr "Düzenle"
+
+#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.editevent.php:9
+msgid "Delete"
+msgstr "Sil"
+
+#: templates/part.editcalendar.php:9
+msgid "New calendar"
+msgstr "Yeni takvim"
+
+#: templates/part.editcalendar.php:9
+msgid "Edit calendar"
+msgstr "Takvimi düzenle"
+
+#: templates/part.editcalendar.php:12
+msgid "Displayname"
+msgstr "Görünümadı"
+
+#: templates/part.editcalendar.php:23
+msgid "Active"
+msgstr "Aktif"
+
+#: templates/part.editcalendar.php:29
+msgid "Calendar color"
+msgstr "Takvim rengi"
+
+#: templates/part.editcalendar.php:42
+msgid "Save"
+msgstr "Kaydet"
+
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
+#: templates/part.newevent.php:6
+msgid "Submit"
+msgstr "Gönder"
+
+#: templates/part.editcalendar.php:43
+msgid "Cancel"
+msgstr "İptal"
+
+#: templates/part.editevent.php:1
+msgid "Edit an event"
+msgstr "Bir olay düzenle"
+
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr "Dışa aktar"
+
+#: templates/part.eventform.php:5
+msgid "Title of the Event"
+msgstr "Olayın Başlığı"
+
+#: templates/part.eventform.php:11
+msgid "Category"
+msgstr "Kategori"
+
+#: templates/part.eventform.php:13
+msgid "Select category"
+msgstr "Kategori seçin"
+
+#: templates/part.eventform.php:37
+msgid "All Day Event"
+msgstr "Tüm Gün Olay"
+
+#: templates/part.eventform.php:41
+msgid "From"
+msgstr "Kimden"
+
+#: templates/part.eventform.php:49
+msgid "To"
+msgstr "Kime"
+
+#: templates/part.eventform.php:57
+msgid "Advanced options"
+msgstr "Gelişmiş opsiyonlar"
+
+#: templates/part.eventform.php:61
+msgid "Repeat"
+msgstr "Tekrar"
+
+#: templates/part.eventform.php:68
+msgid "Advanced"
+msgstr ""
+
+#: templates/part.eventform.php:112
+msgid "Select weekdays"
+msgstr ""
+
+#: templates/part.eventform.php:125 templates/part.eventform.php:138
+msgid "Select days"
+msgstr ""
+
+#: templates/part.eventform.php:130
+msgid "and the events day of year."
+msgstr ""
+
+#: templates/part.eventform.php:143
+msgid "and the events day of month."
+msgstr ""
+
+#: templates/part.eventform.php:151
+msgid "Select months"
+msgstr ""
+
+#: templates/part.eventform.php:164
+msgid "Select weeks"
+msgstr ""
+
+#: templates/part.eventform.php:169
+msgid "and the events week of year."
+msgstr ""
+
+#: templates/part.eventform.php:175
+msgid "Interval"
+msgstr ""
+
+#: templates/part.eventform.php:181
+msgid "End"
+msgstr ""
+
+#: templates/part.eventform.php:193
+msgid "occurrences"
+msgstr ""
+
+#: templates/part.eventform.php:208
+msgid "Location"
+msgstr "Konum"
+
+#: templates/part.eventform.php:210
+msgid "Location of the Event"
+msgstr "Olayın Konumu"
+
+#: templates/part.eventform.php:216
+msgid "Description"
+msgstr "Açıklama"
+
+#: templates/part.eventform.php:218
+msgid "Description of the Event"
+msgstr "Olayın Açıklaması"
+
+#: templates/part.import.php:1
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the calendar"
+msgstr "Lütfen takvimi seçin"
+
+#: templates/part.import.php:10
+msgid "create a new calendar"
+msgstr ""
+
+#: templates/part.import.php:15
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import"
+msgstr "İçe Al"
+
+#: templates/part.import.php:20
+msgid "Importing calendar"
+msgstr ""
+
+#: templates/part.import.php:23
+msgid "Calendar imported successfully"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Close Dialog"
+msgstr ""
+
+#: templates/part.newevent.php:1
+msgid "Create a new event"
+msgstr "Yeni olay oluştur"
+
+#: templates/settings.php:13
+msgid "Timezone"
+msgstr "Zaman dilimi"
+
+#: templates/settings.php:30
+msgid "Check always for changes of the timezone"
+msgstr ""
+
+#: templates/settings.php:32
+msgid "Timeformat"
+msgstr "Saat biçimi"
+
+#: templates/settings.php:34
+msgid "24h"
+msgstr "24s"
+
+#: templates/settings.php:35
+msgid "12h"
+msgstr "12s"
+
+#: templates/settings.php:41
+msgid "Calendar CalDAV syncing address:"
+msgstr "CalDAV Takvim senkron adresi:"
+
+
diff --git a/l10n/tr/contacts.po b/l10n/tr/contacts.po
new file mode 100644
index 00000000000..68f1eb542f3
--- /dev/null
+++ b/l10n/tr/contacts.po
@@ -0,0 +1,290 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Aranel Surion <aranel@aranelsurion.org>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Turkish (http://www.transifex.net/projects/p/owncloud/team/tr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: tr\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: ajax/activation.php:17 ajax/updateaddressbook.php:26
+msgid "Error (de)activating addressbook."
+msgstr ""
+
+#: ajax/addcard.php:79
+msgid "There was an error adding the contact."
+msgstr ""
+
+#: ajax/addproperty.php:39
+msgid "Cannot add empty property."
+msgstr ""
+
+#: ajax/addproperty.php:51
+msgid "At least one of the address fields has to be filled out."
+msgstr ""
+
+#: ajax/addproperty.php:77
+msgid "Error adding contact property."
+msgstr ""
+
+#: ajax/createaddressbook.php:20
+msgid "Error adding addressbook."
+msgstr ""
+
+#: ajax/createaddressbook.php:26
+msgid "Error activating addressbook."
+msgstr ""
+
+#: ajax/deleteproperty.php:40
+msgid "Error deleting contact property."
+msgstr ""
+
+#: ajax/setproperty.php:79
+msgid "Error updating contact property."
+msgstr ""
+
+#: ajax/updateaddressbook.php:20
+msgid "Error updating addressbook."
+msgstr ""
+
+#: appinfo/app.php:21 templates/settings.php:3
+msgid "Contacts"
+msgstr ""
+
+#: lib/app.php:42
+msgid "This is not your addressbook."
+msgstr "Bu sizin adres defteriniz değil."
+
+#: lib/app.php:51 photo.php:34
+msgid "Contact could not be found."
+msgstr "Kişi bulunamadı."
+
+#: lib/app.php:79
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "vCard bilgileri doğru değil. Lütfen sayfayı yenileyin."
+
+#: lib/app.php:91 templates/part.addcardform.php:54
+#: templates/part.property.php:45 templates/part.setpropertyform.php:7
+msgid "Address"
+msgstr "Adres"
+
+#: lib/app.php:92 templates/part.addcardform.php:43
+msgid "Telephone"
+msgstr "Telefon"
+
+#: lib/app.php:93 templates/part.addcardform.php:37
+#: templates/part.property.php:16 templates/part.setpropertyform.php:51
+msgid "Email"
+msgstr "Eposta"
+
+#: lib/app.php:94 templates/part.addcardform.php:27
+#: templates/part.property.php:9 templates/part.setpropertyform.php:54
+msgid "Organization"
+msgstr "Organizasyon"
+
+#: lib/app.php:106 lib/app.php:113
+msgid "Work"
+msgstr "İş"
+
+#: lib/app.php:107 lib/app.php:111
+msgid "Home"
+msgstr "Ev"
+
+#: lib/app.php:112
+msgid "Mobile"
+msgstr "Mobil"
+
+#: lib/app.php:114
+msgid "Text"
+msgstr "Metin"
+
+#: lib/app.php:115
+msgid "Voice"
+msgstr "Ses"
+
+#: lib/app.php:116
+msgid "Fax"
+msgstr "Faks"
+
+#: lib/app.php:117
+msgid "Video"
+msgstr "Video"
+
+#: lib/app.php:118
+msgid "Pager"
+msgstr "Sayfalayıcı"
+
+#: lib/search.php:22
+msgid "Contact"
+msgstr ""
+
+#: photo.php:40
+msgid "This is not your contact."
+msgstr "Bu sizin kişiniz değil."
+
+#: photo.php:48
+msgid "This card is not RFC compatible."
+msgstr "Bu kart RFC uyumlu değil."
+
+#: photo.php:85
+msgid "This card does not contain a photo."
+msgstr "Bu kart resim içermiyor."
+
+#: templates/index.php:6
+msgid "Add Contact"
+msgstr "Kişi Ekle"
+
+#: templates/index.php:7
+msgid "Addressbooks"
+msgstr ""
+
+#: templates/part.addcardform.php:8
+msgid "Addressbook"
+msgstr ""
+
+#: templates/part.addcardform.php:21
+msgid "Name"
+msgstr "Ad"
+
+#: templates/part.addcardform.php:57 templates/part.details.php:43
+#: templates/part.details.php:79 templates/part.setpropertyform.php:10
+#: templates/part.setpropertyform.php:47
+msgid "Type"
+msgstr ""
+
+#: templates/part.addcardform.php:65 templates/part.details.php:49
+#: templates/part.setpropertyform.php:16
+msgid "PO Box"
+msgstr "Posta Kutusu"
+
+#: templates/part.addcardform.php:72 templates/part.details.php:53
+#: templates/part.setpropertyform.php:20
+msgid "Extended"
+msgstr "Uzatılmış"
+
+#: templates/part.addcardform.php:78 templates/part.details.php:57
+#: templates/part.setpropertyform.php:24
+msgid "Street"
+msgstr "Sokak"
+
+#: templates/part.addcardform.php:84 templates/part.details.php:61
+#: templates/part.setpropertyform.php:28
+msgid "City"
+msgstr "Şehir"
+
+#: templates/part.addcardform.php:90 templates/part.details.php:65
+#: templates/part.setpropertyform.php:32
+msgid "Region"
+msgstr "Bölge"
+
+#: templates/part.addcardform.php:96 templates/part.details.php:69
+#: templates/part.setpropertyform.php:36
+msgid "Zipcode"
+msgstr "Posta kodu"
+
+#: templates/part.addcardform.php:102 templates/part.details.php:73
+#: templates/part.setpropertyform.php:40
+msgid "Country"
+msgstr "Ülke"
+
+#: templates/part.addcardform.php:109
+msgid "Create Contact"
+msgstr "Kişi Oluştur"
+
+#: templates/part.chooseaddressbook.php:1
+msgid "Choose active Address Books"
+msgstr ""
+
+#: templates/part.chooseaddressbook.php:16
+msgid "New Address Book"
+msgstr ""
+
+#: templates/part.chooseaddressbook.php:21
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "CardDav Link"
+msgstr ""
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Download"
+msgstr ""
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Edit"
+msgstr "Düzenle"
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Delete"
+msgstr "Sil"
+
+#: templates/part.details.php:3
+msgid "Download contact"
+msgstr ""
+
+#: templates/part.details.php:4
+msgid "Delete contact"
+msgstr ""
+
+#: templates/part.details.php:34
+msgid "Add"
+msgstr ""
+
+#: templates/part.editaddressbook.php:9
+msgid "New Addressbook"
+msgstr ""
+
+#: templates/part.editaddressbook.php:9
+msgid "Edit Addressbook"
+msgstr ""
+
+#: templates/part.editaddressbook.php:12
+msgid "Displayname"
+msgstr ""
+
+#: templates/part.editaddressbook.php:23
+msgid "Active"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Save"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Submit"
+msgstr ""
+
+#: templates/part.editaddressbook.php:30
+msgid "Cancel"
+msgstr ""
+
+#: templates/part.property.php:3
+msgid "Birthday"
+msgstr "Doğum günü"
+
+#: templates/part.property.php:23
+msgid "Preferred"
+msgstr ""
+
+#: templates/part.property.php:23 templates/part.setpropertyform.php:45
+msgid "Phone"
+msgstr "Telefon"
+
+#: templates/part.setpropertyform.php:57
+msgid "Update"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "CardDAV syncing address:"
+msgstr ""
+
+
diff --git a/l10n/tr/core.po b/l10n/tr/core.po
new file mode 100644
index 00000000000..64d503eecf2
--- /dev/null
+++ b/l10n/tr/core.po
@@ -0,0 +1,171 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Aranel Surion <aranel@aranelsurion.org>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Turkish (http://www.transifex.net/projects/p/owncloud/team/tr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: tr\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: lostpassword/index.php:24
+msgid "Owncloud password reset"
+msgstr ""
+
+#: lostpassword/templates/email.php:1
+msgid "Use the following link to reset your password: {link}"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr "Parolanızı sıfırlamak için bir bağlantı Eposta olarak gönderilecek."
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Requested"
+msgstr "İstendi"
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr "Giriş başarısız!"
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:22
+#: templates/login.php:8
+msgid "Username"
+msgstr "Kullanıcı adı"
+
+#: lostpassword/templates/lostpassword.php:14
+msgid "Request reset"
+msgstr "Sıfırlama iste"
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr "Parolanız sıfırlandı"
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr "Yeni parola"
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr "Parolayı sıfırla"
+
+#: strings.php:5
+msgid "Personal"
+msgstr "Kişisel"
+
+#: strings.php:6
+msgid "Users"
+msgstr "Kullanıcılar"
+
+#: strings.php:7
+msgid "Apps"
+msgstr "Uygulamalar"
+
+#: strings.php:8
+msgid "Admin"
+msgstr "Yönetici"
+
+#: strings.php:9
+msgid "Help"
+msgstr "Yardı"
+
+#: templates/404.php:12
+msgid "Cloud not found"
+msgstr "Bulut bulunamadı"
+
+#: templates/installation.php:20
+msgid "Create an <strong>admin account</strong>"
+msgstr "Bir <strong>yönetici hesabı</strong> oluşturun"
+
+#: templates/installation.php:26 templates/login.php:12
+msgid "Password"
+msgstr "Parola"
+
+#: templates/installation.php:32
+msgid "Advanced"
+msgstr "Gelişmiş"
+
+#: templates/installation.php:34
+msgid "Data folder"
+msgstr "Veri klasörü"
+
+#: templates/installation.php:41
+msgid "Configure the database"
+msgstr "Veritabanını ayarla"
+
+#: templates/installation.php:46 templates/installation.php:57
+#: templates/installation.php:67
+msgid "will be used"
+msgstr "kullanılacak"
+
+#: templates/installation.php:79
+msgid "Database user"
+msgstr "Veritabanı kullanıcı adı"
+
+#: templates/installation.php:83
+msgid "Database password"
+msgstr "Veritabanı parolası"
+
+#: templates/installation.php:87
+msgid "Database name"
+msgstr "Veritabanı adı"
+
+#: templates/installation.php:93
+msgid "Database host"
+msgstr "Veritabanı sunucusu"
+
+#: templates/installation.php:98
+msgid "Finish setup"
+msgstr "Kurulumu tamamla"
+
+#: templates/layout.guest.php:35
+msgid "web services under your control"
+msgstr ""
+
+#: templates/layout.user.php:34
+msgid "Log out"
+msgstr "Çıkış yap"
+
+#: templates/layout.user.php:46 templates/layout.user.php:47
+msgid "Settings"
+msgstr "Ayarlar"
+
+#: templates/login.php:5
+msgid "Lost your password?"
+msgstr "Parolanızı mı unuttunuz?"
+
+#: templates/login.php:15
+msgid "remember"
+msgstr "hatırla"
+
+#: templates/login.php:16
+msgid "Log in"
+msgstr ""
+
+#: templates/logout.php:1
+msgid "You are logged out."
+msgstr "Çıkış yaptınız."
+
+#: templates/part.pagenavi.php:3
+msgid "prev"
+msgstr "önceki"
+
+#: templates/part.pagenavi.php:20
+msgid "next"
+msgstr "sonraki"
+
+
diff --git a/l10n/tr/files.po b/l10n/tr/files.po
new file mode 100644
index 00000000000..3330007801e
--- /dev/null
+++ b/l10n/tr/files.po
@@ -0,0 +1,112 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Aranel Surion <aranel@aranelsurion.org>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Turkish (http://www.transifex.net/projects/p/owncloud/team/tr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: tr\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: ajax/upload.php:19
+msgid "There is no error, the file uploaded with success"
+msgstr "Bir hata yok, dosya başarıyla yüklendi"
+
+#: ajax/upload.php:20
+msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
+msgstr ""
+"Yüklenen dosya php.ini de belirtilen upload_max_filesize sınırını aşıyor"
+
+#: ajax/upload.php:21
+msgid ""
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
+"the HTML form"
+msgstr "Yüklenen dosya HTML formundaki MAX_FILE_SIZE sınırını aşıyor"
+
+#: ajax/upload.php:22
+msgid "The uploaded file was only partially uploaded"
+msgstr "Yüklenen dosyanın sadece bir kısmı yüklendi"
+
+#: ajax/upload.php:23
+msgid "No file was uploaded"
+msgstr "Hiç dosya yüklenmedi"
+
+#: ajax/upload.php:24
+msgid "Missing a temporary folder"
+msgstr "Geçici bir klasör eksik"
+
+#: appinfo/app.php:8
+msgid "Files"
+msgstr "Dosyalar"
+
+#: templates/admin.php:5
+msgid "Maximum upload size"
+msgstr "Maksimum yükleme boyutu"
+
+#: templates/index.php:7
+msgid "New"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Text file"
+msgstr ""
+
+#: templates/index.php:11
+msgid "Folder"
+msgstr ""
+
+#: templates/index.php:12
+msgid "From the web"
+msgstr ""
+
+#: templates/index.php:22
+msgid "Upload"
+msgstr "Yükle"
+
+#: templates/index.php:35
+msgid "Nothing in here. Upload something!"
+msgstr "Burada hiçbir şey yok. Birşeyler yükleyin!"
+
+#: templates/index.php:43
+msgid "Name"
+msgstr "Ad"
+
+#: templates/index.php:45
+msgid "Download"
+msgstr "İndir"
+
+#: templates/index.php:49
+msgid "Size"
+msgstr "Boyut"
+
+#: templates/index.php:50
+msgid "Modified"
+msgstr "Değiştirilme"
+
+#: templates/index.php:50
+msgid "Delete"
+msgstr "Sil"
+
+#: templates/index.php:58
+msgid "Upload too large"
+msgstr "Yüklemeniz çok büyük"
+
+#: templates/index.php:60
+msgid ""
+"The files you are trying to upload exceed the maximum size for file uploads "
+"on this server."
+msgstr ""
+"Yüklemeye çalıştığınız dosyalar bu sunucudaki maksimum yükleme boyutunu "
+"aşıyor."
+
+
diff --git a/l10n/tr/gallery.po b/l10n/tr/gallery.po
new file mode 100644
index 00000000000..7e1f517fbb7
--- /dev/null
+++ b/l10n/tr/gallery.po
@@ -0,0 +1,32 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:48+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Turkish (http://www.transifex.net/projects/p/owncloud/team/tr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: tr\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: appinfo/app.php:41
+msgid "Gallery"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Rescan"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+
diff --git a/l10n/tr/media.po b/l10n/tr/media.po
new file mode 100644
index 00000000000..03f15722ccd
--- /dev/null
+++ b/l10n/tr/media.po
@@ -0,0 +1,65 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Aranel Surion <aranel@aranelsurion.org>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Turkish (http://www.transifex.net/projects/p/owncloud/team/tr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: tr\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: appinfo/app.php:32
+msgid "Music"
+msgstr "Müzik"
+
+#: templates/music.php:3 templates/player.php:13
+msgid "Play"
+msgstr "Oynat"
+
+#: templates/music.php:4 templates/music.php:26 templates/player.php:14
+msgid "Pause"
+msgstr "Beklet"
+
+#: templates/music.php:5
+msgid "Previous"
+msgstr "Önceki"
+
+#: templates/music.php:6 templates/player.php:15
+msgid "Next"
+msgstr "Sonraki"
+
+#: templates/music.php:7
+msgid "Mute"
+msgstr "Sesi kapat"
+
+#: templates/music.php:8
+msgid "Unmute"
+msgstr "Sesi aç"
+
+#: templates/music.php:25
+msgid "Rescan Collection"
+msgstr "Koleksiyonu Tara"
+
+#: templates/music.php:37
+msgid "Artist"
+msgstr "Sanatç"
+
+#: templates/music.php:38
+msgid "Album"
+msgstr "Albüm"
+
+#: templates/music.php:39
+msgid "Title"
+msgstr "Başlık"
+
+
diff --git a/l10n/tr/settings.po b/l10n/tr/settings.po
new file mode 100644
index 00000000000..58aefca15f5
--- /dev/null
+++ b/l10n/tr/settings.po
@@ -0,0 +1,153 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Aranel Surion <aranel@aranelsurion.org>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Turkish (http://www.transifex.net/projects/p/owncloud/team/tr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: tr\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: ajax/lostpassword.php:14
+msgid "email Changed"
+msgstr ""
+
+#: ajax/lostpassword.php:16 ajax/openid.php:17 ajax/setlanguage.php:16
+msgid "Invalid request"
+msgstr "Geçersiz istek"
+
+#: ajax/openid.php:15
+msgid "OpenID Changed"
+msgstr "OpenID Değiştirildi"
+
+#: ajax/setlanguage.php:14
+msgid "Language changed"
+msgstr "Dil değiştirildi"
+
+#: templates/admin.php:13
+msgid "Log level"
+msgstr ""
+
+#: templates/apps.php:8
+msgid "Add your application"
+msgstr "Uygulamanızı ekleyin"
+
+#: templates/apps.php:21
+msgid "Select an App"
+msgstr "Bir uygulama seçin"
+
+#: templates/apps.php:23
+msgid "-licensed"
+msgstr "-lisanslı"
+
+#: templates/apps.php:23
+msgid "by"
+msgstr "yapan"
+
+#: templates/help.php:8
+msgid "Ask a question"
+msgstr "Bir soru sorun"
+
+#: templates/help.php:20
+msgid "Problems connecting to help database."
+msgstr "Yardım veritabanına bağlanmada sorunlar var."
+
+#: templates/help.php:21
+msgid "Go there manually."
+msgstr "Oraya elle gidin."
+
+#: templates/help.php:29
+msgid "Answer"
+msgstr "Cevap"
+
+#: templates/personal.php:8
+msgid "You use"
+msgstr "Kullanıyorsunuz"
+
+#: templates/personal.php:8
+msgid "of the available"
+msgstr "mevcut olandan"
+
+#: templates/personal.php:13
+msgid "Your password got changed"
+msgstr "Parolanız değiştirildi"
+
+#: templates/personal.php:14
+msgid "Unable to change your password"
+msgstr "Parolanız değiştirilemiyor"
+
+#: templates/personal.php:15
+msgid "Current password"
+msgstr "Mevcut parola"
+
+#: templates/personal.php:16
+msgid "New password"
+msgstr "Yeni parola"
+
+#: templates/personal.php:17
+msgid "show"
+msgstr "göster"
+
+#: templates/personal.php:18
+msgid "Change password"
+msgstr "Parola değiştir"
+
+#: templates/personal.php:24
+msgid "Email"
+msgstr ""
+
+#: templates/personal.php:25
+msgid "Your email address"
+msgstr ""
+
+#: templates/personal.php:26
+msgid "Fill in an email address to enable password recovery"
+msgstr ""
+
+#: templates/personal.php:32 templates/personal.php:33
+msgid "Language"
+msgstr "Dil"
+
+#: templates/personal.php:38
+msgid "Help translate"
+msgstr ""
+
+#: templates/personal.php:45
+msgid "use this address to connect to your ownCloud in your file manager"
+msgstr "bu adresi kullanarak ownCloud unuza dosya yöneticinizle bağlanın"
+
+#: templates/users.php:15 templates/users.php:30
+msgid "Name"
+msgstr "Ad"
+
+#: templates/users.php:16 templates/users.php:31
+msgid "Password"
+msgstr "Parola"
+
+#: templates/users.php:17 templates/users.php:32 templates/users.php:46
+msgid "Groups"
+msgstr "Gruplar"
+
+#: templates/users.php:23
+msgid "Create"
+msgstr "Oluştur"
+
+#: templates/users.php:33
+msgid "Quota"
+msgstr ""
+
+#: templates/users.php:58
+msgid "Delete"
+msgstr "Sil"
+
+
diff --git a/l10n/zh_CN/calendar.po b/l10n/zh_CN/calendar.po
index 7e2d49b529b..a6e29f7bd02 100644
--- a/l10n/zh_CN/calendar.po
+++ b/l10n/zh_CN/calendar.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Chinese (China) (http://www.transifex.net/projects/p/owncloud/team/zh_CN/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,351 +18,432 @@ msgstr ""
"Language: zh_CN\n"
"Plural-Forms: nplurals=1; plural=0\n"
-#: ajax/createcalendar.php:18 ajax/settimezone.php:19
-#: ajax/updatecalendar.php:18
-msgid "Authentication error"
-msgstr "验证错误"
-
-#: ajax/editeventform.php:25
-msgid "Wrong calendar"
+#: ajax/guesstimezone.php:42
+msgid "New Timezone:"
msgstr ""
-#: ajax/settimezone.php:27
+#: ajax/settimezone.php:22
msgid "Timezone changed"
msgstr "时区已修改"
-#: ajax/settimezone.php:29
+#: ajax/settimezone.php:24
msgid "Invalid request"
msgstr "非法请求"
-#: appinfo/app.php:19 templates/part.eventform.php:27
-#: templates/part.eventinfo.php:18
+#: appinfo/app.php:20 templates/calendar.php:13
+#: templates/part.eventform.php:20
msgid "Calendar"
msgstr "日历"
-#: lib/object.php:292
+#: lib/app.php:19
+msgid "Wrong calendar"
+msgstr "错误的日历"
+
+#: lib/app.php:60 lib/object.php:332
msgid "Birthday"
-msgstr ""
+msgstr "生日"
-#: lib/object.php:293
+#: lib/app.php:61 lib/object.php:333
msgid "Business"
-msgstr ""
+msgstr "商务"
-#: lib/object.php:294
+#: lib/app.php:62 lib/object.php:334
msgid "Call"
-msgstr ""
+msgstr "呼叫"
-#: lib/object.php:295
+#: lib/app.php:63 lib/object.php:335
msgid "Clients"
-msgstr ""
+msgstr "客户"
-#: lib/object.php:296
+#: lib/app.php:64 lib/object.php:336
msgid "Deliverer"
-msgstr ""
+msgstr "派送"
-#: lib/object.php:297
+#: lib/app.php:65 lib/object.php:337
msgid "Holidays"
-msgstr ""
+msgstr "节日"
-#: lib/object.php:298
+#: lib/app.php:66 lib/object.php:338
msgid "Ideas"
-msgstr ""
+msgstr "想法"
-#: lib/object.php:299
+#: lib/app.php:67 lib/object.php:339
msgid "Journey"
-msgstr ""
+msgstr "旅行"
-#: lib/object.php:300
+#: lib/app.php:68 lib/object.php:340
msgid "Jubilee"
-msgstr ""
+msgstr "周年纪念"
-#: lib/object.php:301
+#: lib/app.php:69 lib/object.php:341
msgid "Meeting"
-msgstr ""
+msgstr "会议"
-#: lib/object.php:302
+#: lib/app.php:70 lib/object.php:342
msgid "Other"
-msgstr ""
+msgstr "其他"
-#: lib/object.php:303
+#: lib/app.php:71 lib/object.php:343
msgid "Personal"
-msgstr ""
+msgstr "个人"
-#: lib/object.php:304
+#: lib/app.php:72 lib/object.php:344
msgid "Projects"
-msgstr ""
+msgstr "项目"
-#: lib/object.php:305
+#: lib/app.php:73 lib/object.php:345
msgid "Questions"
-msgstr ""
+msgstr "问题"
-#: lib/object.php:306
+#: lib/app.php:74 lib/object.php:346
msgid "Work"
-msgstr ""
+msgstr "工作"
-#: lib/object.php:313
+#: lib/object.php:353
msgid "Does not repeat"
msgstr "不重复"
-#: lib/object.php:314
+#: lib/object.php:354
msgid "Daily"
msgstr "每天"
-#: lib/object.php:315
+#: lib/object.php:355
msgid "Weekly"
msgstr "每周"
-#: lib/object.php:316
+#: lib/object.php:356
msgid "Every Weekday"
msgstr "每个工作日"
-#: lib/object.php:317
+#: lib/object.php:357
msgid "Bi-Weekly"
msgstr "每两周"
-#: lib/object.php:318
+#: lib/object.php:358
msgid "Monthly"
msgstr "每月"
-#: lib/object.php:319
+#: lib/object.php:359
msgid "Yearly"
msgstr "每年"
-#: lib/object.php:337
-msgid "Not an array"
+#: lib/object.php:366
+msgid "never"
msgstr ""
-#: templates/calendar.php:3
-msgid "All day"
-msgstr "全天"
+#: lib/object.php:367
+msgid "by occurrences"
+msgstr ""
-#: templates/calendar.php:32
-msgid "Sunday"
-msgstr "星期日"
+#: lib/object.php:368
+msgid "by date"
+msgstr ""
+
+#: lib/object.php:375
+msgid "by monthday"
+msgstr ""
+
+#: lib/object.php:376
+msgid "by weekday"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:383 templates/lAfix.php:3
msgid "Monday"
-msgstr "星期一"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:384 templates/lAfix.php:4
msgid "Tuesday"
-msgstr "星期二"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:385 templates/lAfix.php:5
msgid "Wednesday"
-msgstr "星期三"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:386 templates/lAfix.php:6
msgid "Thursday"
-msgstr "星期四"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:387 templates/lAfix.php:7
msgid "Friday"
-msgstr "星期五"
+msgstr ""
-#: templates/calendar.php:32
+#: lib/object.php:388 templates/lAfix.php:8
msgid "Saturday"
-msgstr "星期六"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Sun."
-msgstr "日"
+#: lib/object.php:389 templates/lAfix.php:2
+msgid "Sunday"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Mon."
-msgstr "一"
+#: lib/object.php:396
+msgid "events week of month"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Tue."
-msgstr "二"
+#: lib/object.php:397
+msgid "first"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Wed."
-msgstr "三"
+#: lib/object.php:398
+msgid "second"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Thu."
-msgstr "四"
+#: lib/object.php:399
+msgid "third"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Fri."
-msgstr "五"
+#: lib/object.php:400
+msgid "fourth"
+msgstr ""
-#: templates/calendar.php:33
-msgid "Sat."
-msgstr "六"
+#: lib/object.php:401
+msgid "fifth"
+msgstr ""
+
+#: lib/object.php:402
+msgid "last"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:424 templates/lAfix.php:16
msgid "January"
-msgstr "1月"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:425 templates/lAfix.php:17
msgid "February"
-msgstr "2月"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:426 templates/lAfix.php:18
msgid "March"
-msgstr "3月"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:427 templates/lAfix.php:19
msgid "April"
-msgstr "4月"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:428 templates/lAfix.php:20
msgid "May"
-msgstr "5月"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:429 templates/lAfix.php:21
msgid "June"
-msgstr "6月"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:430 templates/lAfix.php:22
msgid "July"
-msgstr "7月"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:431 templates/lAfix.php:23
msgid "August"
-msgstr "8月"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:432 templates/lAfix.php:24
msgid "September"
-msgstr "9月"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:433 templates/lAfix.php:25
msgid "October"
-msgstr "10月"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:434 templates/lAfix.php:26
msgid "November"
-msgstr "11月"
+msgstr ""
-#: templates/calendar.php:34
+#: lib/object.php:435 templates/lAfix.php:27
msgid "December"
-msgstr "12月"
-
-#: templates/calendar.php:35
-msgid "Jan."
-msgstr "1月"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Feb."
-msgstr "2月"
+#: lib/object.php:441
+msgid "by events date"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Mar."
-msgstr "3月"
+#: lib/object.php:442
+msgid "by yearday(s)"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Apr."
-msgstr "4月"
+#: lib/object.php:443
+msgid "by weeknumber(s)"
+msgstr ""
-#: templates/calendar.php:35
-msgid "May."
+#: lib/object.php:444
+msgid "by day and month"
msgstr ""
-#: templates/calendar.php:35
-msgid "Jun."
-msgstr "6月"
+#: lib/object.php:467
+msgid "Not an array"
+msgstr "不是一个数组"
-#: templates/calendar.php:35
-msgid "Jul."
-msgstr "7月"
+#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+msgid "Date"
+msgstr ""
-#: templates/calendar.php:35
-msgid "Aug."
-msgstr "8月"
+#: lib/search.php:40
+msgid "Cal."
+msgstr ""
-#: templates/calendar.php:35
-msgid "Sep."
-msgstr "9月"
+#: templates/calendar.php:10
+msgid "All day"
+msgstr "全天"
-#: templates/calendar.php:35
-msgid "Oct."
-msgstr "10月"
+#: templates/calendar.php:11
+msgid "Missing fields"
+msgstr "缺少字段"
-#: templates/calendar.php:35
-msgid "Nov."
-msgstr "11月"
+#: templates/calendar.php:12 templates/part.eventform.php:3
+msgid "Title"
+msgstr "标题"
-#: templates/calendar.php:35
-msgid "Dec."
-msgstr "12月"
+#: templates/calendar.php:14
+msgid "From Date"
+msgstr "从"
-#: templates/calendar.php:36 templates/calendar.php:50
-#: templates/calendar.php:116
-msgid "Week"
-msgstr "星期"
+#: templates/calendar.php:15
+msgid "From Time"
+msgstr "从"
-#: templates/calendar.php:37 templates/calendar.php:51
-msgid "Weeks"
-msgstr "星期"
+#: templates/calendar.php:16
+msgid "To Date"
+msgstr "至"
-#: templates/calendar.php:38
-msgid "More before {startdate}"
-msgstr ""
+#: templates/calendar.php:17
+msgid "To Time"
+msgstr "至"
-#: templates/calendar.php:39
-msgid "More after {enddate}"
-msgstr ""
+#: templates/calendar.php:18
+msgid "The event ends before it starts"
+msgstr "事件在开始前已结束"
-#: templates/calendar.php:49
-msgid "Day"
-msgstr "天"
+#: templates/calendar.php:19
+msgid "There was a database fail"
+msgstr "数据库访问失败"
#: templates/calendar.php:52
+msgid "Week"
+msgstr "星期"
+
+#: templates/calendar.php:53
msgid "Month"
msgstr "月"
-#: templates/calendar.php:53
+#: templates/calendar.php:54
msgid "List"
-msgstr ""
+msgstr "列表"
-#: templates/calendar.php:58
+#: templates/calendar.php:59
msgid "Today"
msgstr "今天"
-#: templates/calendar.php:59
+#: templates/calendar.php:60
msgid "Calendars"
msgstr "日历"
-#: templates/calendar.php:76 templates/calendar.php:94
-msgid "Time"
-msgstr "时间"
-
-#: templates/calendar.php:169
+#: templates/calendar.php:78
msgid "There was a fail, while parsing the file."
msgstr "解析文件失败"
+#: templates/lAfix.php:9
+msgid "Sun."
+msgstr ""
+
+#: templates/lAfix.php:10
+msgid "Mon."
+msgstr ""
+
+#: templates/lAfix.php:11
+msgid "Tue."
+msgstr ""
+
+#: templates/lAfix.php:12
+msgid "Wed."
+msgstr ""
+
+#: templates/lAfix.php:13
+msgid "Thu."
+msgstr ""
+
+#: templates/lAfix.php:14
+msgid "Fri."
+msgstr ""
+
+#: templates/lAfix.php:15
+msgid "Sat."
+msgstr ""
+
+#: templates/lAfix.php:28
+msgid "Jan."
+msgstr ""
+
+#: templates/lAfix.php:29
+msgid "Feb."
+msgstr ""
+
+#: templates/lAfix.php:30
+msgid "Mar."
+msgstr ""
+
+#: templates/lAfix.php:31
+msgid "Apr."
+msgstr ""
+
+#: templates/lAfix.php:32
+msgid "May."
+msgstr ""
+
+#: templates/lAfix.php:33
+msgid "Jun."
+msgstr ""
+
+#: templates/lAfix.php:34
+msgid "Jul."
+msgstr ""
+
+#: templates/lAfix.php:35
+msgid "Aug."
+msgstr ""
+
+#: templates/lAfix.php:36
+msgid "Sep."
+msgstr ""
+
+#: templates/lAfix.php:37
+msgid "Oct."
+msgstr ""
+
+#: templates/lAfix.php:38
+msgid "Nov."
+msgstr ""
+
+#: templates/lAfix.php:39
+msgid "Dec."
+msgstr ""
+
#: templates/part.choosecalendar.php:1
msgid "Choose active calendars"
msgstr "选择活动日历"
#: templates/part.choosecalendar.php:15
msgid "New Calendar"
-msgstr ""
+msgstr "新日历"
#: templates/part.choosecalendar.php:20
#: templates/part.choosecalendar.rowfields.php:4
msgid "CalDav Link"
-msgstr ""
+msgstr "CalDav 链接"
#: templates/part.choosecalendar.rowfields.php:4
msgid "Download"
msgstr "下载"
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.eventinfo.php:64
msgid "Edit"
msgstr "编辑"
#: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.editevent.php:8
+#: templates/part.editevent.php:9
msgid "Delete"
-msgstr ""
+msgstr "删除"
#: templates/part.editcalendar.php:9
msgid "New calendar"
-msgstr ""
+msgstr "新日历"
#: templates/part.editcalendar.php:9
msgid "Edit calendar"
@@ -376,90 +457,181 @@ msgstr "显示名称"
msgid "Active"
msgstr "激活"
-#: templates/part.editcalendar.php:29 templates/part.eventform.php:88
-#: templates/part.eventinfo.php:58
-msgid "Description"
-msgstr "描述"
-
-#: templates/part.editcalendar.php:35
+#: templates/part.editcalendar.php:29
msgid "Calendar color"
msgstr "日历颜色"
-#: templates/part.editcalendar.php:41
+#: templates/part.editcalendar.php:42
msgid "Save"
-msgstr ""
+msgstr "保存"
-#: templates/part.editcalendar.php:41 templates/part.editevent.php:7
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
#: templates/part.newevent.php:6
msgid "Submit"
msgstr "提交"
-#: templates/part.editcalendar.php:42
+#: templates/part.editcalendar.php:43
msgid "Cancel"
-msgstr ""
+msgstr "取消"
-#: templates/part.editevent.php:1 templates/part.eventinfo.php:1
+#: templates/part.editevent.php:1
msgid "Edit an event"
msgstr "编辑事件"
-#: templates/part.eventform.php:3 templates/part.eventinfo.php:4
-msgid "Title"
-msgstr "标题"
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr "导出"
#: templates/part.eventform.php:5
msgid "Title of the Event"
msgstr "事件标题"
-#: templates/part.eventform.php:9 templates/part.eventinfo.php:9
-msgid "Location"
-msgstr "地点"
-
#: templates/part.eventform.php:11
-msgid "Location of the Event"
-msgstr "事件地点"
-
-#: templates/part.eventform.php:17 templates/part.eventinfo.php:16
msgid "Category"
msgstr "分类"
-#: templates/part.eventform.php:19
+#: templates/part.eventform.php:13
msgid "Select category"
-msgstr ""
+msgstr "选择分类"
-#: templates/part.eventform.php:45 templates/part.eventinfo.php:28
+#: templates/part.eventform.php:37
msgid "All Day Event"
msgstr "全天事件"
-#: templates/part.eventform.php:49 templates/part.eventinfo.php:31
+#: templates/part.eventform.php:41
msgid "From"
msgstr "自"
-#: templates/part.eventform.php:57 templates/part.eventinfo.php:38
+#: templates/part.eventform.php:49
msgid "To"
msgstr "至"
-#: templates/part.eventform.php:65 templates/part.eventinfo.php:44
+#: templates/part.eventform.php:57
+msgid "Advanced options"
+msgstr "高级选项"
+
+#: templates/part.eventform.php:61
msgid "Repeat"
msgstr "重复"
-#: templates/part.eventform.php:81 templates/part.eventinfo.php:51
-msgid "Attendees"
-msgstr "参加者"
+#: templates/part.eventform.php:68
+msgid "Advanced"
+msgstr ""
+
+#: templates/part.eventform.php:112
+msgid "Select weekdays"
+msgstr ""
+
+#: templates/part.eventform.php:125 templates/part.eventform.php:138
+msgid "Select days"
+msgstr ""
+
+#: templates/part.eventform.php:130
+msgid "and the events day of year."
+msgstr ""
+
+#: templates/part.eventform.php:143
+msgid "and the events day of month."
+msgstr ""
+
+#: templates/part.eventform.php:151
+msgid "Select months"
+msgstr ""
+
+#: templates/part.eventform.php:164
+msgid "Select weeks"
+msgstr ""
+
+#: templates/part.eventform.php:169
+msgid "and the events week of year."
+msgstr ""
+
+#: templates/part.eventform.php:175
+msgid "Interval"
+msgstr ""
+
+#: templates/part.eventform.php:181
+msgid "End"
+msgstr ""
+
+#: templates/part.eventform.php:193
+msgid "occurrences"
+msgstr ""
-#: templates/part.eventform.php:89
+#: templates/part.eventform.php:208
+msgid "Location"
+msgstr "地点"
+
+#: templates/part.eventform.php:210
+msgid "Location of the Event"
+msgstr "事件地点"
+
+#: templates/part.eventform.php:216
+msgid "Description"
+msgstr "描述"
+
+#: templates/part.eventform.php:218
msgid "Description of the Event"
msgstr "事件描述"
-#: templates/part.eventinfo.php:63
-msgid "Close"
-msgstr "关闭"
+#: templates/part.import.php:1
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the calendar"
+msgstr "请选择日历"
+
+#: templates/part.import.php:10
+msgid "create a new calendar"
+msgstr ""
+
+#: templates/part.import.php:15
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import"
+msgstr "导入"
+
+#: templates/part.import.php:20
+msgid "Importing calendar"
+msgstr ""
+
+#: templates/part.import.php:23
+msgid "Calendar imported successfully"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Close Dialog"
+msgstr ""
#: templates/part.newevent.php:1
msgid "Create a new event"
msgstr "创建新事件"
-#: templates/settings.php:11
+#: templates/settings.php:13
msgid "Timezone"
msgstr "时区"
+#: templates/settings.php:30
+msgid "Check always for changes of the timezone"
+msgstr ""
+
+#: templates/settings.php:32
+msgid "Timeformat"
+msgstr "时间格式"
+
+#: templates/settings.php:34
+msgid "24h"
+msgstr "24小时"
+
+#: templates/settings.php:35
+msgid "12h"
+msgstr "12小时"
+
+#: templates/settings.php:41
+msgid "Calendar CalDAV syncing address:"
+msgstr "日历CalDAV 同步地址:"
+
diff --git a/l10n/zh_CN/contacts.po b/l10n/zh_CN/contacts.po
index 1fd7ecb9646..99e69919079 100644
--- a/l10n/zh_CN/contacts.po
+++ b/l10n/zh_CN/contacts.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <wengxt@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 20:10+0200\n"
-"PO-Revision-Date: 2011-09-23 18:10+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:45+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Chinese (China) (http://www.transifex.net/projects/p/owncloud/team/zh_CN/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,164 +18,273 @@ msgstr ""
"Language: zh_CN\n"
"Plural-Forms: nplurals=1; plural=0\n"
-#: ajax/addcard.php:31 ajax/addproperty.php:31 ajax/deletebook.php:32
-#: ajax/deletecard.php:32 ajax/deleteproperty.php:34 ajax/getdetails.php:32
-#: ajax/setproperty.php:32 ajax/showaddcard.php:30 ajax/showaddproperty.php:31
-#: ajax/showsetproperty.php:32 photo.php:32
-msgid "You need to log in."
+#: ajax/activation.php:17 ajax/updateaddressbook.php:26
+msgid "Error (de)activating addressbook."
msgstr ""
-#: ajax/addcard.php:37
-msgid "This is not your addressbook."
+#: ajax/addcard.php:79
+msgid "There was an error adding the contact."
msgstr ""
-#: ajax/addproperty.php:37 ajax/deletecard.php:39 ajax/deleteproperty.php:41
-#: ajax/getdetails.php:39 ajax/setproperty.php:38 ajax/showaddproperty.php:37
-#: ajax/showsetproperty.php:38 photo.php:39
-msgid "Contact could not be found."
+#: ajax/addproperty.php:39
+msgid "Cannot add empty property."
msgstr ""
-#: ajax/addproperty.php:43 ajax/deletebook.php:38 ajax/deletecard.php:45
-#: ajax/deleteproperty.php:47 ajax/getdetails.php:45 ajax/setproperty.php:44
-#: ajax/showaddproperty.php:43 ajax/showsetproperty.php:44 photo.php:45
-msgid "This is not your contact."
+#: ajax/addproperty.php:51
+msgid "At least one of the address fields has to be filled out."
msgstr ""
-#: ajax/addproperty.php:50 ajax/deleteproperty.php:54 ajax/getdetails.php:52
-#: ajax/setproperty.php:51 ajax/showsetproperty.php:51
-msgid "vCard could not be read."
+#: ajax/addproperty.php:77
+msgid "Error adding contact property."
msgstr ""
-#: ajax/deleteproperty.php:65 ajax/setproperty.php:62
-#: ajax/showsetproperty.php:62
-msgid "Information about vCard is incorrect. Please reload the page."
+#: ajax/createaddressbook.php:20
+msgid "Error adding addressbook."
msgstr ""
-#: photo.php:53
-msgid "This card is not RFC compatible."
+#: ajax/createaddressbook.php:26
+msgid "Error activating addressbook."
msgstr ""
-#: photo.php:90
-msgid "This card does not contain a photo."
+#: ajax/deleteproperty.php:40
+msgid "Error deleting contact property."
msgstr ""
-#: templates/index.php:8
-msgid "Add Contact"
+#: ajax/setproperty.php:79
+msgid "Error updating contact property."
msgstr ""
-#: templates/part.addcardform.php:5
-msgid "Group"
+#: ajax/updateaddressbook.php:20
+msgid "Error updating addressbook."
msgstr ""
-#: templates/part.addcardform.php:12 templates/part.property.php:3
-msgid "Name"
+#: appinfo/app.php:21 templates/settings.php:3
+msgid "Contacts"
msgstr ""
-#: templates/part.addcardform.php:14
-msgid "Create Contact"
-msgstr ""
+#: lib/app.php:42
+msgid "This is not your addressbook."
+msgstr "这不是您的地址簿。"
-#: templates/part.addpropertyform.php:4 templates/part.property.php:40
+#: lib/app.php:51 photo.php:34
+msgid "Contact could not be found."
+msgstr "无法找到联系人。"
+
+#: lib/app.php:79
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "vCard 的信息不正确。请重新加载页面。"
+
+#: lib/app.php:91 templates/part.addcardform.php:54
+#: templates/part.property.php:45 templates/part.setpropertyform.php:7
msgid "Address"
-msgstr ""
+msgstr "地址"
-#: templates/part.addpropertyform.php:5
+#: lib/app.php:92 templates/part.addcardform.php:43
msgid "Telephone"
-msgstr ""
+msgstr "电话"
-#: templates/part.addpropertyform.php:6 templates/part.property.php:22
+#: lib/app.php:93 templates/part.addcardform.php:37
+#: templates/part.property.php:16 templates/part.setpropertyform.php:51
msgid "Email"
-msgstr ""
+msgstr "电子邮件"
-#: templates/part.addpropertyform.php:7 templates/part.property.php:15
+#: lib/app.php:94 templates/part.addcardform.php:27
+#: templates/part.property.php:9 templates/part.setpropertyform.php:54
msgid "Organization"
-msgstr ""
+msgstr "组织"
-#: templates/part.addpropertyform.php:17 templates/part.addpropertyform.php:32
+#: lib/app.php:106 lib/app.php:113
msgid "Work"
-msgstr ""
+msgstr "工作"
-#: templates/part.addpropertyform.php:18 templates/part.addpropertyform.php:30
+#: lib/app.php:107 lib/app.php:111
msgid "Home"
+msgstr "家庭"
+
+#: lib/app.php:112
+msgid "Mobile"
+msgstr "移动电话"
+
+#: lib/app.php:114
+msgid "Text"
+msgstr "文本"
+
+#: lib/app.php:115
+msgid "Voice"
+msgstr "语音"
+
+#: lib/app.php:116
+msgid "Fax"
+msgstr "传真"
+
+#: lib/app.php:117
+msgid "Video"
+msgstr "视频"
+
+#: lib/app.php:118
+msgid "Pager"
+msgstr "传呼机"
+
+#: lib/search.php:22
+msgid "Contact"
msgstr ""
-#: templates/part.addpropertyform.php:20 templates/part.property.php:48
-#: templates/part.setpropertyform.php:5
-msgid "PO Box"
+#: photo.php:40
+msgid "This is not your contact."
+msgstr "这不是您的联系人。"
+
+#: photo.php:48
+msgid "This card is not RFC compatible."
+msgstr "这张名片和RFC 标准不兼容。"
+
+#: photo.php:85
+msgid "This card does not contain a photo."
+msgstr "这张名片不包含照片。"
+
+#: templates/index.php:6
+msgid "Add Contact"
+msgstr "添加联系人"
+
+#: templates/index.php:7
+msgid "Addressbooks"
msgstr ""
-#: templates/part.addpropertyform.php:21 templates/part.property.php:51
-#: templates/part.setpropertyform.php:6
-msgid "Extended"
+#: templates/part.addcardform.php:8
+msgid "Addressbook"
msgstr ""
-#: templates/part.addpropertyform.php:22 templates/part.property.php:54
-#: templates/part.setpropertyform.php:7
-msgid "Street"
+#: templates/part.addcardform.php:21
+msgid "Name"
+msgstr "名称"
+
+#: templates/part.addcardform.php:57 templates/part.details.php:43
+#: templates/part.details.php:79 templates/part.setpropertyform.php:10
+#: templates/part.setpropertyform.php:47
+msgid "Type"
msgstr ""
-#: templates/part.addpropertyform.php:23 templates/part.property.php:57
-#: templates/part.setpropertyform.php:8
+#: templates/part.addcardform.php:65 templates/part.details.php:49
+#: templates/part.setpropertyform.php:16
+msgid "PO Box"
+msgstr "邮箱"
+
+#: templates/part.addcardform.php:72 templates/part.details.php:53
+#: templates/part.setpropertyform.php:20
+msgid "Extended"
+msgstr "扩展"
+
+#: templates/part.addcardform.php:78 templates/part.details.php:57
+#: templates/part.setpropertyform.php:24
+msgid "Street"
+msgstr "街道"
+
+#: templates/part.addcardform.php:84 templates/part.details.php:61
+#: templates/part.setpropertyform.php:28
msgid "City"
-msgstr ""
+msgstr "城市"
-#: templates/part.addpropertyform.php:24 templates/part.property.php:60
-#: templates/part.setpropertyform.php:9
+#: templates/part.addcardform.php:90 templates/part.details.php:65
+#: templates/part.setpropertyform.php:32
msgid "Region"
-msgstr ""
+msgstr "地区"
-#: templates/part.addpropertyform.php:25 templates/part.property.php:63
-#: templates/part.setpropertyform.php:10
+#: templates/part.addcardform.php:96 templates/part.details.php:69
+#: templates/part.setpropertyform.php:36
msgid "Zipcode"
-msgstr ""
+msgstr "邮编"
-#: templates/part.addpropertyform.php:26 templates/part.property.php:66
-#: templates/part.setpropertyform.php:11
+#: templates/part.addcardform.php:102 templates/part.details.php:73
+#: templates/part.setpropertyform.php:40
msgid "Country"
+msgstr "国家"
+
+#: templates/part.addcardform.php:109
+msgid "Create Contact"
+msgstr "创建联系人"
+
+#: templates/part.chooseaddressbook.php:1
+msgid "Choose active Address Books"
msgstr ""
-#: templates/part.addpropertyform.php:31
-msgid "Mobile"
+#: templates/part.chooseaddressbook.php:16
+msgid "New Address Book"
msgstr ""
-#: templates/part.addpropertyform.php:33
-msgid "Text"
+#: templates/part.chooseaddressbook.php:21
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "CardDav Link"
msgstr ""
-#: templates/part.addpropertyform.php:34
-msgid "Voice"
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Download"
msgstr ""
-#: templates/part.addpropertyform.php:35
-msgid "Fax"
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Edit"
+msgstr "编辑"
+
+#: templates/part.chooseaddressbook.rowfields.php:5
+msgid "Delete"
+msgstr "删除"
+
+#: templates/part.details.php:3
+msgid "Download contact"
msgstr ""
-#: templates/part.addpropertyform.php:36
-msgid "Video"
+#: templates/part.details.php:4
+msgid "Delete contact"
msgstr ""
-#: templates/part.addpropertyform.php:37
-msgid "Pager"
+#: templates/part.details.php:34
+msgid "Add"
msgstr ""
-#: templates/part.details.php:33
-msgid "Delete"
+#: templates/part.editaddressbook.php:9
+msgid "New Addressbook"
msgstr ""
-#: templates/part.details.php:34
-msgid "Add Property"
+#: templates/part.editaddressbook.php:9
+msgid "Edit Addressbook"
msgstr ""
-#: templates/part.property.php:9
+#: templates/part.editaddressbook.php:12
+msgid "Displayname"
+msgstr ""
+
+#: templates/part.editaddressbook.php:23
+msgid "Active"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Save"
+msgstr ""
+
+#: templates/part.editaddressbook.php:29
+msgid "Submit"
+msgstr ""
+
+#: templates/part.editaddressbook.php:30
+msgid "Cancel"
+msgstr ""
+
+#: templates/part.property.php:3
msgid "Birthday"
+msgstr "生日"
+
+#: templates/part.property.php:23
+msgid "Preferred"
msgstr ""
-#: templates/part.property.php:29
+#: templates/part.property.php:23 templates/part.setpropertyform.php:45
msgid "Phone"
+msgstr "电话"
+
+#: templates/part.setpropertyform.php:57
+msgid "Update"
msgstr ""
-#: templates/part.setpropertyform.php:17
-msgid "Edit"
+#: templates/settings.php:4
+msgid "CardDAV syncing address:"
msgstr ""
diff --git a/l10n/zh_CN/core.po b/l10n/zh_CN/core.po
index 1d6281a1f51..147d4a8dd65 100644
--- a/l10n/zh_CN/core.po
+++ b/l10n/zh_CN/core.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-23 18:17+0200\n"
-"PO-Revision-Date: 2011-09-04 17:07+0000\n"
-"Last-Translator: csslayer <wengxt@gmail.com>\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Chinese (China) (http://www.transifex.net/projects/p/owncloud/team/zh_CN/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,6 +18,51 @@ msgstr ""
"Language: zh_CN\n"
"Plural-Forms: nplurals=1; plural=0\n"
+#: lostpassword/index.php:24
+msgid "Owncloud password reset"
+msgstr ""
+
+#: lostpassword/templates/email.php:1
+msgid "Use the following link to reset your password: {link}"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr "您将会收到包含可以重置密码链接的邮件。"
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Requested"
+msgstr "已请求"
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr "登录失败!"
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:22
+#: templates/login.php:8
+msgid "Username"
+msgstr "用户名"
+
+#: lostpassword/templates/lostpassword.php:14
+msgid "Request reset"
+msgstr "请求重置"
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr "您的密码已重置"
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr "新密码"
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr "重置密码"
+
#: strings.php:5
msgid "Personal"
msgstr "个人"
@@ -46,54 +91,50 @@ msgstr "未找到云"
msgid "Create an <strong>admin account</strong>"
msgstr "创建<strong>管理员账号</strong>"
-#: templates/installation.php:21
-msgid "Username"
-msgstr "用户名"
-
-#: templates/installation.php:22
+#: templates/installation.php:26 templates/login.php:12
msgid "Password"
msgstr "密码"
-#: templates/installation.php:27
+#: templates/installation.php:32
+msgid "Advanced"
+msgstr "高级"
+
+#: templates/installation.php:34
+msgid "Data folder"
+msgstr "数据目录"
+
+#: templates/installation.php:41
msgid "Configure the database"
msgstr "配置数据库"
-#: templates/installation.php:32 templates/installation.php:43
-#: templates/installation.php:53
+#: templates/installation.php:46 templates/installation.php:57
+#: templates/installation.php:67
msgid "will be used"
msgstr "将被使用"
-#: templates/installation.php:64
+#: templates/installation.php:79
msgid "Database user"
msgstr "数据库用户"
-#: templates/installation.php:65
+#: templates/installation.php:83
msgid "Database password"
msgstr "数据库密码"
-#: templates/installation.php:66
+#: templates/installation.php:87
msgid "Database name"
msgstr "数据库名"
-#: templates/installation.php:72
-msgid "Advanced"
-msgstr "高级"
-
-#: templates/installation.php:75
+#: templates/installation.php:93
msgid "Database host"
msgstr "数据库主机"
-#: templates/installation.php:76
-msgid "Data folder"
-msgstr "数据目录"
-
-#: templates/installation.php:79
+#: templates/installation.php:98
msgid "Finish setup"
msgstr "安装完成"
#: templates/layout.guest.php:35
-msgid "gives you freedom and control over your own data"
-msgstr "自由掌控您的数据"
+msgid "web services under your control"
+msgstr ""
#: templates/layout.user.php:34
msgid "Log out"
@@ -103,38 +144,22 @@ msgstr "注销"
msgid "Settings"
msgstr "设置"
-#: templates/login.php:4
+#: templates/login.php:5
msgid "Lost your password?"
msgstr "忘记密码?"
-#: templates/login.php:9 templates/login.php:13
+#: templates/login.php:15
msgid "remember"
msgstr "记住"
+#: templates/login.php:16
+msgid "Log in"
+msgstr ""
+
#: templates/logout.php:1
msgid "You are logged out."
msgstr "您已注销。"
-#: templates/lostpassword.php:3
-msgid "You will receive a link to reset your password via Email."
-msgstr "您将通过邮件收到一个用于重置密码的链接"
-
-#: templates/lostpassword.php:5
-msgid "Requested"
-msgstr "请求已发送"
-
-#: templates/lostpassword.php:8
-msgid "Login failed!"
-msgstr "登陆失败!"
-
-#: templates/lostpassword.php:10
-msgid "Username or Email"
-msgstr "用户名或电子邮件"
-
-#: templates/lostpassword.php:11
-msgid "Request reset"
-msgstr "请求重置"
-
#: templates/part.pagenavi.php:3
msgid "prev"
msgstr "上一页"
@@ -143,16 +168,4 @@ msgstr "上一页"
msgid "next"
msgstr "下一页"
-#: templates/resetpassword.php:4
-msgid "Your password was reset"
-msgstr "您的密码已重置"
-
-#: templates/resetpassword.php:6
-msgid "New password"
-msgstr "新密码"
-
-#: templates/resetpassword.php:7
-msgid "Reset password"
-msgstr "重置密码"
-
diff --git a/l10n/zh_CN/files.po b/l10n/zh_CN/files.po
index 4a30d9d0c1f..89831a4b081 100644
--- a/l10n/zh_CN/files.po
+++ b/l10n/zh_CN/files.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
-"POT-Creation-Date: 2011-09-24 23:05+0200\n"
-"PO-Revision-Date: 2011-09-24 21:05+0000\n"
-"Last-Translator: JanCBorchardt <jan@unhosted.org>\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Chinese (China) (http://www.transifex.net/projects/p/owncloud/team/zh_CN/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,33 +18,33 @@ msgstr ""
"Language: zh_CN\n"
"Plural-Forms: nplurals=1; plural=0\n"
-#: ajax/upload.php:24
+#: ajax/upload.php:19
msgid "There is no error, the file uploaded with success"
-msgstr ""
+msgstr "没有发生错误,文件上传成功。"
-#: ajax/upload.php:25
+#: ajax/upload.php:20
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
-msgstr ""
+msgstr "上传的文件大小超过了php.ini 中指定的upload_max_filesize"
-#: ajax/upload.php:26
+#: ajax/upload.php:21
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
-msgstr ""
+msgstr "上传的文件超过了在HTML 表单中指定的MAX_FILE_SIZE"
-#: ajax/upload.php:27
+#: ajax/upload.php:22
msgid "The uploaded file was only partially uploaded"
-msgstr ""
+msgstr "只上传了文件的一部分"
-#: ajax/upload.php:28
+#: ajax/upload.php:23
msgid "No file was uploaded"
-msgstr ""
+msgstr "文件没有上传"
-#: ajax/upload.php:29
+#: ajax/upload.php:24
msgid "Missing a temporary folder"
-msgstr ""
+msgstr "缺少临时目录"
-#: appinfo/app.php:7
+#: appinfo/app.php:8
msgid "Files"
msgstr "文件"
@@ -52,43 +52,55 @@ msgstr "文件"
msgid "Maximum upload size"
msgstr "最大上传大小"
+#: templates/index.php:7
+msgid "New"
+msgstr ""
+
#: templates/index.php:10
+msgid "Text file"
+msgstr ""
+
+#: templates/index.php:11
+msgid "Folder"
+msgstr ""
+
+#: templates/index.php:12
+msgid "From the web"
+msgstr ""
+
+#: templates/index.php:22
msgid "Upload"
msgstr "上传"
-#: templates/index.php:17
-msgid "New Folder"
-msgstr "新建文件夹"
-
-#: templates/index.php:31
+#: templates/index.php:35
msgid "Nothing in here. Upload something!"
msgstr "这里还什么都没有。上传些东西吧!"
-#: templates/index.php:39
+#: templates/index.php:43
msgid "Name"
msgstr "名称"
-#: templates/index.php:41
+#: templates/index.php:45
msgid "Download"
msgstr "下载"
-#: templates/index.php:45
+#: templates/index.php:49
msgid "Size"
msgstr "大小"
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Modified"
msgstr "修改日期"
-#: templates/index.php:46
+#: templates/index.php:50
msgid "Delete"
msgstr "删除"
-#: templates/index.php:54
+#: templates/index.php:58
msgid "Upload too large"
msgstr "上传文件过大"
-#: templates/index.php:56
+#: templates/index.php:60
msgid ""
"The files you are trying to upload exceed the maximum size for file uploads "
"on this server."
diff --git a/l10n/zh_CN/gallery.po b/l10n/zh_CN/gallery.po
new file mode 100644
index 00000000000..e3e2d897cd0
--- /dev/null
+++ b/l10n/zh_CN/gallery.po
@@ -0,0 +1,32 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-15 14:44+0100\n"
+"PO-Revision-Date: 2012-01-15 13:48+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
+"Language-Team: Chinese (China) (http://www.transifex.net/projects/p/owncloud/team/zh_CN/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: zh_CN\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: appinfo/app.php:41
+msgid "Gallery"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Rescan"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+
diff --git a/l10n/zh_CN/media.po b/l10n/zh_CN/media.po
index f80f1839a1d..868e222190d 100644
--- a/l10n/zh_CN/media.po
+++ b/l10n/zh_CN/media.po
@@ -2,14 +2,15 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
+# Translators:
# <wengxt@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
-"Report-Msgid-Bugs-To: http://bugs.kde.org/buglist.cgi?product=owncloud\n"
-"POT-Creation-Date: 2011-09-03 14:50+0200\n"
-"PO-Revision-Date: 2011-09-03 12:53+0000\n"
-"Last-Translator: csslayer <wengxt@gmail.com>\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Chinese (China) (http://www.transifex.net/projects/p/owncloud/team/zh_CN/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,15 +18,15 @@ msgstr ""
"Language: zh_CN\n"
"Plural-Forms: nplurals=1; plural=0\n"
-#: appinfo/app.php:31
+#: appinfo/app.php:32
msgid "Music"
msgstr "音乐"
-#: templates/music.php:3
+#: templates/music.php:3 templates/player.php:13
msgid "Play"
msgstr "播放"
-#: templates/music.php:4 templates/music.php:30
+#: templates/music.php:4 templates/music.php:26 templates/player.php:14
msgid "Pause"
msgstr "暂停"
@@ -33,7 +34,7 @@ msgstr "暂停"
msgid "Previous"
msgstr "前一首"
-#: templates/music.php:6
+#: templates/music.php:6 templates/player.php:15
msgid "Next"
msgstr "后一首"
@@ -45,11 +46,7 @@ msgstr "静音"
msgid "Unmute"
msgstr "取消静音"
-#: templates/music.php:28
-msgid "Songs scanned"
-msgstr "歌曲已扫描"
-
-#: templates/music.php:29
+#: templates/music.php:25
msgid "Rescan Collection"
msgstr "重新扫描收藏"
diff --git a/l10n/zh_CN/settings.po b/l10n/zh_CN/settings.po
index f960000e2fc..7a6daf187ec 100644
--- a/l10n/zh_CN/settings.po
+++ b/l10n/zh_CN/settings.po
@@ -2,14 +2,15 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
+# Translators:
# <wengxt@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
-"Report-Msgid-Bugs-To: http://bugs.kde.org/buglist.cgi?product=owncloud\n"
-"POT-Creation-Date: 2011-09-03 15:07+0200\n"
-"PO-Revision-Date: 2011-09-03 13:29+0000\n"
-"Last-Translator: csslayer <wengxt@gmail.com>\n"
+"Report-Msgid-Bugs-To: http://owncloud.shapado.com/\n"
+"POT-Creation-Date: 2012-01-11 00:19+0100\n"
+"PO-Revision-Date: 2012-01-10 23:43+0000\n"
+"Last-Translator: icewind <icewind1991@gmail.com>\n"
"Language-Team: Chinese (China) (http://www.transifex.net/projects/p/owncloud/team/zh_CN/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,22 +18,26 @@ msgstr ""
"Language: zh_CN\n"
"Plural-Forms: nplurals=1; plural=0\n"
-#: ajax/openid.php:13 ajax/setlanguage.php:13
-msgid "Authentication error"
-msgstr "验证错误"
-
-#: ajax/openid.php:21
-msgid "OpenID Changed"
-msgstr "OpenID 已修改"
+#: ajax/lostpassword.php:14
+msgid "email Changed"
+msgstr ""
-#: ajax/openid.php:23 ajax/setlanguage.php:23
+#: ajax/lostpassword.php:16 ajax/openid.php:17 ajax/setlanguage.php:16
msgid "Invalid request"
msgstr "非法请求"
-#: ajax/setlanguage.php:21
+#: ajax/openid.php:15
+msgid "OpenID Changed"
+msgstr "OpenID 已修改"
+
+#: ajax/setlanguage.php:14
msgid "Language changed"
msgstr "语言已修改"
+#: templates/admin.php:13
+msgid "Log level"
+msgstr ""
+
#: templates/apps.php:8
msgid "Add your application"
msgstr "加入您的应用程序"
@@ -53,15 +58,15 @@ msgstr "由"
msgid "Ask a question"
msgstr "提问"
-#: templates/help.php:17
+#: templates/help.php:20
msgid "Problems connecting to help database."
msgstr "连接帮助数据库错误 "
-#: templates/help.php:18
+#: templates/help.php:21
msgid "Go there manually."
msgstr "手动访问"
-#: templates/help.php:26
+#: templates/help.php:29
msgid "Answer"
msgstr "回答"
@@ -97,35 +102,51 @@ msgstr "显示"
msgid "Change password"
msgstr "修改密码"
-#: templates/personal.php:24 templates/personal.php:25
+#: templates/personal.php:24
+msgid "Email"
+msgstr ""
+
+#: templates/personal.php:25
+msgid "Your email address"
+msgstr ""
+
+#: templates/personal.php:26
+msgid "Fill in an email address to enable password recovery"
+msgstr ""
+
+#: templates/personal.php:32 templates/personal.php:33
msgid "Language"
msgstr "语言"
-#: templates/personal.php:30
-msgid "Help translating"
-msgstr "帮助翻译"
+#: templates/personal.php:38
+msgid "Help translate"
+msgstr ""
-#: templates/personal.php:36
+#: templates/personal.php:45
msgid "use this address to connect to your ownCloud in your file manager"
msgstr "在文件管理器中使用这个地址来连接到您的 ownCloud"
-#: templates/users.php:16
+#: templates/users.php:15 templates/users.php:30
msgid "Name"
msgstr "名称"
-#: templates/users.php:17
+#: templates/users.php:16 templates/users.php:31
msgid "Password"
msgstr "密码"
-#: templates/users.php:18 templates/users.php:36
+#: templates/users.php:17 templates/users.php:32 templates/users.php:46
msgid "Groups"
msgstr "组"
-#: templates/users.php:24
+#: templates/users.php:23
msgid "Create"
msgstr "创建"
-#: templates/users.php:48
+#: templates/users.php:33
+msgid "Quota"
+msgstr ""
+
+#: templates/users.php:58
msgid "Delete"
msgstr "删除"
diff --git a/lib/app.php b/lib/app.php
index 13c4cef32b4..de7d82ce959 100644
--- a/lib/app.php
+++ b/lib/app.php
@@ -385,6 +385,7 @@ class OC_App{
$currentVersion=$appInfo['version'];
if (version_compare($currentVersion, $installedVersion, '>')) {
OC_App::updateApp($app);
+ OC_Appconfig::setValue($app,'installed_version',$appInfo['version']);
}
}
}
diff --git a/lib/base.php b/lib/base.php
index 9ac6b6751a2..ca07eef590c 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -156,7 +156,11 @@ class OC{
$installedVersion=OC_Config::getValue('version','0.0.0');
$currentVersion=implode('.',OC_Util::getVersion());
if (version_compare($currentVersion, $installedVersion, '>')) {
- OC_DB::updateDbFromStructure('../db_structure.xml');
+ $result=OC_DB::updateDbFromStructure(OC::$SERVERROOT.'/db_structure.xml');
+ if(!$result){
+ echo 'Error while upgrading the database';
+ die();
+ }
OC_Config::setValue('version',implode('.',OC_Util::getVersion()));
}
@@ -178,7 +182,7 @@ class OC{
// Add the stuff we need always
OC_Util::addScript( "jquery-1.6.4.min" );
- OC_Util::addScript( "jquery-ui-1.8.14.custom.min" );
+ OC_Util::addScript( "jquery-ui-1.8.16.custom.min" );
OC_Util::addScript( "jquery-showpassword" );
OC_Util::addScript( "jquery.infieldlabel.min" );
OC_Util::addScript( "jquery-tipsy" );
@@ -187,7 +191,7 @@ class OC{
OC_Util::addScript('search','result');
OC_Util::addStyle( "styles" );
OC_Util::addStyle( "multiselect" );
- OC_Util::addStyle( "jquery-ui-1.8.14.custom" );
+ OC_Util::addStyle( "jquery-ui-1.8.16.custom" );
OC_Util::addStyle( "jquery-tipsy" );
$errors=OC_Util::checkServer();
diff --git a/lib/db.php b/lib/db.php
index b901cc8b513..4860651b323 100644
--- a/lib/db.php
+++ b/lib/db.php
@@ -144,7 +144,7 @@ class OC_DB {
// Prepare options array
$options = array(
- 'portability' => MDB2_PORTABILITY_ALL,
+ 'portability' => MDB2_PORTABILITY_ALL & (!MDB2_PORTABILITY_FIX_CASE),
'log_line_break' => '<br>',
'idxname_format' => '%s',
'debug' => true,
@@ -361,6 +361,11 @@ class OC_DB {
$content = file_get_contents( $file );
$previousSchema = self::$schema->getDefinitionFromDatabase();
+ if (PEAR::isError($previousSchema)) {
+ $error = $previousSchema->getMessage();
+ OC_Log::write('core','Failed to get existing database structure for upgrading ('.$error.')',OC_Log::FATAL);
+ return false;
+ }
// Make changes and save them to a temporary file
$file2 = tempnam( get_temp_dir(), 'oc_db_scheme_' );
@@ -371,10 +376,14 @@ class OC_DB {
}
file_put_contents( $file2, $content );
$op = self::$schema->updateDatabase($file2, $previousSchema, array(), false);
+
+ // Delete our temporary file
+ unlink( $file2 );
+
if (PEAR::isError($op)) {
- $error = $op->getMessage();
- OC_Log::write('core','Failed to update database structure ('.$error.')',OC_Log::FATAL);
- return false;
+ $error = $op->getMessage();
+ OC_Log::write('core','Failed to update database structure ('.$error.')',OC_Log::FATAL);
+ return false;
}
return true;
}
diff --git a/lib/files.php b/lib/files.php
index 143aab5c72d..5686287ecc4 100644
--- a/lib/files.php
+++ b/lib/files.php
@@ -152,8 +152,8 @@ class OC_Files {
*/
public static function move($sourceDir,$source,$targetDir,$target){
if(OC_User::isLoggedIn()){
- $targetFile=$targetDir.'/'.$target;
- $sourceFile=$sourceDir.'/'.$source;
+ $targetFile=self::normalizePath($targetDir.'/'.$target);
+ $sourceFile=self::normalizePath($sourceDir.'/'.$source);
return OC_Filesystem::rename($sourceFile,$targetFile);
}
}
@@ -274,4 +274,19 @@ class OC_Files {
$content.= "Options -Indexes\n";
@file_put_contents(OC::$SERVERROOT.'/.htaccess', $content); //supress errors in case we don't have permissions for it
}
+
+ /**
+ * normalize a path, removing any double, add leading /, etc
+ * @param string $path
+ * @return string
+ */
+ static public function normalizePath($path){
+ $path='/'.$path;
+ $old='';
+ while($old!=$path){//replace any multiplicity of slashes with a single one
+ $old=$path;
+ $path=str_replace('//','/',$path);
+ }
+ return $path;
+ }
}
diff --git a/lib/filestorage/local.php b/lib/filestorage/local.php
index 18bfd69d719..dcffce6e867 100644
--- a/lib/filestorage/local.php
+++ b/lib/filestorage/local.php
@@ -120,6 +120,13 @@ class OC_Filestorage_Local extends OC_Filestorage{
public function getMimeType($fspath){
if($this->is_readable($fspath)){
$mimeType='application/octet-stream';
+ if ($mimeType=='application/octet-stream') {
+ self::$mimetypes = include('mimetypes.fixlist.php');
+ $extention=strtolower(strrchr(basename($fspath), "."));
+ $extention=substr($extention,1);//remove leading .
+ $mimeType=(isset(self::$mimetypes[$extention]))?self::$mimetypes[$extention]:'application/octet-stream';
+
+ }
if (@is_dir($this->datadir.$fspath)) {
// directories are easy
return "httpd/unix-directory";
@@ -146,7 +153,7 @@ class OC_Filestorage_Local extends OC_Filestorage{
}
if ($mimeType=='application/octet-stream') {
// Fallback solution: (try to guess the type by the file extension
- if(!self::$mimetypes){
+ if(!self::$mimetypes || self::$mimetypes != include('mimetypes.list.php')){
self::$mimetypes=include('mimetypes.list.php');
}
$extention=strtolower(strrchr(basename($fspath), "."));
diff --git a/lib/filesystem.php b/lib/filesystem.php
index 8765775dc29..6568a07a59c 100644
--- a/lib/filesystem.php
+++ b/lib/filesystem.php
@@ -47,6 +47,93 @@ class OC_Filesystem{
static private $storages=array();
static private $mounts=array();
static private $fakeRoot='';
+ static private $storageTypes=array();
+
+ /**
+ * classname which used for hooks handling
+ * used as signalclass in OC_Hooks::emit()
+ */
+ const CLASSNAME = 'OC_Filesystem';
+
+ /**
+ * signalname emited before file renaming
+ * @param oldpath
+ * @param newpath
+ */
+ const signal_rename = 'rename';
+
+ /**
+ * signal emited after file renaming
+ * @param oldpath
+ * @param newpath
+ */
+ const signal_post_rename = 'post_rename';
+
+ /**
+ * signal emited before file/dir creation
+ * @param path
+ * @param run changing this flag to false in hook handler will cancel event
+ */
+ const signal_create = 'create';
+
+ /**
+ * signal emited after file/dir creation
+ * @param path
+ * @param run changing this flag to false in hook handler will cancel event
+ */
+ const signal_post_create = 'post_create';
+
+ /**
+ * signal emits before file/dir copy
+ * @param oldpath
+ * @param newpath
+ * @param run changing this flag to false in hook handler will cancel event
+ */
+ const signal_copy = 'copy';
+
+ /**
+ * signal emits after file/dir copy
+ * @param oldpath
+ * @param newpath
+ */
+ const signal_post_copy = 'post_copy';
+
+ /**
+ * signal emits before file/dir save
+ * @param path
+ * @param run changing this flag to false in hook handler will cancel event
+ */
+ const signal_write = 'write';
+
+ /**
+ * signal emits after file/dir save
+ * @param path
+ */
+ const signal_post_write = 'post_write';
+
+ /**
+ * signal emits when reading file/dir
+ * @param path
+ */
+ const signal_read = 'read';
+
+ /**
+ * signal emits when removing file/dir
+ * @param path
+ */
+ const signal_delete = 'delete';
+
+ /**
+ * parameters definitions for signals
+ */
+ const signal_param_path = 'path';
+ const signal_param_oldpath = 'oldpath';
+ const signal_param_newpath = 'newpath';
+
+ /**
+ * run - changing this flag to false in hook handler will cancel event
+ */
+ const signal_param_run = 'run';
/**
* tear down the filesystem, removing all storage providers
@@ -260,7 +347,7 @@ class OC_Filesystem{
static public function rename($path1,$path2){
if(OC_FileProxy::runPreProxies('rename',$path1,$path2) and self::is_writeable($path1) and self::isValidPath($path2)){
$run=true;
- OC_Hook::emit( 'OC_Filesystem', 'rename', array( 'oldpath' => $path1 ,'newpath'=>$path2, 'run' => &$run));
+ OC_Hook::emit( self::CLASSNAME, self::signal_rename, array( self::signal_param_oldpath => $path1 , self::signal_param_newpath=>$path2, self::signal_param_run => &$run));
if($run){
$mp1=self::getMountPoint($path1);
$mp2=self::getMountPoint($path2);
@@ -273,7 +360,7 @@ class OC_Filesystem{
$result=$storage2->fromTmpFile($tmpFile,self::getInternalPath($path2));
$storage1->unlink(self::getInternalPath($path1));
}
- OC_Hook::emit( 'OC_Filesystem', 'post_rename', array( 'oldpath' => $path1, 'newpath'=>$path2));
+ OC_Hook::emit( self::CLASSNAME, self::signal_post_rename, array( self::signal_param_oldpath => $path1, self::signal_param_newpath=>$path2));
return $result;
}
}
@@ -281,13 +368,13 @@ class OC_Filesystem{
static public function copy($path1,$path2){
if(OC_FileProxy::runPreProxies('copy',$path1,$path2) and self::is_readable($path1) and self::isValidPath($path2)){
$run=true;
- OC_Hook::emit( 'OC_Filesystem', 'copy', array( 'oldpath' => $path1 ,'newpath'=>$path2, 'run' => &$run));
+ OC_Hook::emit( self::CLASSNAME, self::signal_copy, array( self::signal_param_oldpath => $path1 , self::signal_param_newpath=>$path2, self::signal_param_run => &$run));
$exists=self::file_exists($path2);
if($run and !$exists){
- OC_Hook::emit( 'OC_Filesystem', 'create', array( 'path' => $path2, 'run' => &$run));
+ OC_Hook::emit( self::CLASSNAME, self::signal_create, array( self::signal_param_path => $path2, self::signal_param_run => &$run));
}
if($run){
- OC_Hook::emit( 'OC_Filesystem', 'write', array( 'path' => $path2, 'run' => &$run));
+ OC_Hook::emit( self::CLASSNAME, self::signal_write, array( self::signal_param_path => $path2, self::signal_param_run => &$run));
}
if($run){
$mp1=self::getMountPoint($path1);
@@ -300,11 +387,11 @@ class OC_Filesystem{
$tmpFile=$storage1->toTmpFile(self::getInternalPath($path1));
$result=$storage2->fromTmpFile($tmpFile,self::getInternalPath($path2));
}
- OC_Hook::emit( 'OC_Filesystem', 'post_copy', array( 'oldpath' => $path1 ,'newpath'=>$path2));
+ OC_Hook::emit( self::CLASSNAME, self::signal_post_copy, array( self::signal_param_oldpath => $path1 , self::signal_param_newpath=>$path2));
if(!$exists){
- OC_Hook::emit( 'OC_Filesystem', 'post_create', array( 'path' => $path2));
+ OC_Hook::emit( self::CLASSNAME, self::signal_post_create, array( self::signal_param_path => $path2));
}
- OC_Hook::emit( 'OC_Filesystem', 'post_write', array( 'path' => $path2));
+ OC_Hook::emit( self::CLASSNAME, self::signal_post_write, array( self::signal_param_path => $path2));
return $result;
}
}
@@ -335,7 +422,7 @@ class OC_Filesystem{
}
static public function toTmpFile($path){
if(OC_FileProxy::runPreProxies('toTmpFile',$path) and self::isValidPath($path) and $storage=self::getStorage($path)){
- OC_Hook::emit( 'OC_Filesystem', 'read', array( 'path' => $path));
+ OC_Hook::emit( self::CLASSNAME, self::signal_read, array( self::signal_param_path => $path));
return $storage->toTmpFile(self::getInternalPath($path));
}
}
@@ -344,21 +431,44 @@ class OC_Filesystem{
$run=true;
$exists=self::file_exists($path);
if(!$exists){
- OC_Hook::emit( 'OC_Filesystem', 'create', array( 'path' => $path, 'run' => &$run));
+ OC_Hook::emit( self::CLASSNAME, self::signal_create, array( self::signal_param_path => $path, self::signal_param_run => &$run));
}
if($run){
- OC_Hook::emit( 'OC_Filesystem', 'write', array( 'path' => $path, 'run' => &$run));
+ OC_Hook::emit( self::CLASSNAME, self::signal_write, array( self::signal_param_path => $path, self::signal_param_run => &$run));
}
if($run){
$result=$storage->fromTmpFile($tmpFile,self::getInternalPath($path));
if(!$exists){
- OC_Hook::emit( 'OC_Filesystem', 'post_create', array( 'path' => $path));
+ OC_Hook::emit( self::CLASSNAME, self::signal_post_create, array( self::signal_param_path => $path));
+ }
+ OC_Hook::emit( self::CLASSNAME, self::signal_post_write, array( self::signal_param_path => $path));
+ return $result;
+ }
+ }
+ }
+<<<<<<< HEAD
+=======
+ static public function fromUploadedFile($tmpFile,$path){
+ if(OC_FileProxy::runPreProxies('fromUploadedFile',$tmpFile,$path) and self::isValidPath($path) and $storage=self::getStorage($path)){
+ $run=true;
+ $exists=self::file_exists($path);
+ if(!$exists){
+ OC_Hook::emit( self::CLASSNAME, self::signal_create, array( self::signal_param_path => $path, self::signal_param_run => &$run));
+ }
+ if($run){
+ OC_Hook::emit( self::CLASSNAME, self::signal_write, array( self::signal_param_path => $path, self::signal_param_run => &$run));
+ }
+ if($run){
+ $result=$storage->fromUploadedFile($tmpFile,self::getInternalPath($path));
+ if(!$exists){
+ OC_Hook::emit( self::CLASSNAME, self::signal_post_create, array( self::signal_param_path => $path));
}
- OC_Hook::emit( 'OC_Filesystem', 'post_write', array( 'path' => $path));
+ OC_Hook::emit( self::CLASSNAME, self::signal_post_write, array( self::signal_param_path => $path));
return $result;
}
}
}
+>>>>>>> master
static public function getMimeType($path){
return self::basicOperation('getMimeType',$path);
}
@@ -402,9 +512,9 @@ class OC_Filesystem{
$run=true;
foreach($hooks as $hook){
if($hook!='read'){
- OC_Hook::emit( 'OC_Filesystem', $hook, array( 'path' => $path, 'run' => &$run));
+ OC_Hook::emit( self::CLASSNAME, $hook, array( self::signal_param_path => $path, self::signal_param_run => &$run));
}else{
- OC_Hook::emit( 'OC_Filesystem', $hook, array( 'path' => $path));
+ OC_Hook::emit( self::CLASSNAME, $hook, array( self::signal_param_path => $path));
}
}
if($run){
@@ -416,7 +526,7 @@ class OC_Filesystem{
$result=OC_FileProxy::runPostProxies($operation,$path,$result);
foreach($hooks as $hook){
if($hook!='read'){
- OC_Hook::emit( 'OC_Filesystem', 'post_'.$hook, array( 'path' => $path));
+ OC_Hook::emit( self::CLASSNAME, 'post_'.$hook, array( self::signal_param_path => $path));
}
}
return $result;
diff --git a/lib/image.php b/lib/image.php
index 45b6ad3918d..70ad3f5969e 100644
--- a/lib/image.php
+++ b/lib/image.php
@@ -196,10 +196,11 @@ class OC_Image {
if (!$res) {
OC_Log::write('core','OC_Image::_string. Error writing image',OC_Log::ERROR);
}
- return chunk_split(base64_encode(ob_get_clean()));
+ return base64_encode(ob_get_clean());
}
/**
+ * (I'm open for suggestions on better method name ;)
* @brief Fixes orientation based on EXIF data.
* @returns bool.
*/
diff --git a/lib/mimetypes.fixlist.php b/lib/mimetypes.fixlist.php
new file mode 100644
index 00000000000..1c6acbc4438
--- /dev/null
+++ b/lib/mimetypes.fixlist.php
@@ -0,0 +1,14 @@
+<?php
+return array(
+ 'ics'=>'text/calendar',
+ 'ical'=>'text/calendar',
+ 'js'=>'application/javascript',
+ 'odt'=>'application/vnd.oasis.opendocument.text',
+ 'ods'=>'application/vnd.oasis.opendocument.spreadsheet',
+ 'odg'=>'application/vnd.oasis.opendocument.graphics',
+ 'odp'=>'application/vnd.oasis.opendocument.presentation',
+ 'pl'=>'text/x-script.perl',
+ 'py'=>'text/x-script.phyton',
+ 'vcf' => 'text/vcard',
+ 'vcard' => 'text/vcard'
+);
diff --git a/lib/setup.php b/lib/setup.php
index 1b74e945196..eb32e84713f 100644
--- a/lib/setup.php
+++ b/lib/setup.php
@@ -84,7 +84,7 @@ class OC_Setup {
$dbpass = $options['dbpass'];
$dbname = $options['dbname'];
$dbhost = $options['dbhost'];
- $dbtableprefix = $options['dbtableprefix'];
+ $dbtableprefix = isset($options['dbtableprefix']) ? $options['dbtableprefix'] : 'oc_';
OC_Config::setValue('dbname', $dbname);
OC_Config::setValue('dbhost', $dbhost);
OC_Config::setValue('dbtableprefix', $dbtableprefix);
@@ -189,16 +189,29 @@ class OC_Setup {
self::pg_createDatabase($dbname, $dbuser, $connection);
}
- //fill the database if needed
- $query = "select count(*) FROM pg_class WHERE relname='{$dbtableprefix}users' limit 1";
- $result = pg_query($connection, $query);
- if($result){
- $row = pg_fetch_row($result);
- }
- if(!$result or $row[0]==0) {
- OC_DB::createDbFromStructure('db_structure.xml');
- }
+ // the connection to dbname=postgres is not needed anymore
pg_close($connection);
+
+ // connect to the ownCloud database (dbname=$dbname) an check if it needs to be filled
+ $dbuser = OC_CONFIG::getValue('dbuser');
+ $dbpass = OC_CONFIG::getValue('dbpassword');
+ $connection_string = "host=$dbhost dbname=$dbname user=$dbuser password=$dbpass";
+ $connection = @pg_connect($connection_string);
+ if(!$connection) {
+ $error[] = array(
+ 'error' => 'PostgreSQL username and/or password not valid',
+ 'hint' => 'You need to enter either an existing account or the administrator.'
+ );
+ } else {
+ $query = "select count(*) FROM pg_class WHERE relname='{$dbtableprefix}users' limit 1";
+ $result = pg_query($connection, $query);
+ if($result) {
+ $row = pg_fetch_row($result);
+ }
+ if(!$result or $row[0]==0) {
+ OC_DB::createDbFromStructure('db_structure.xml');
+ }
+ }
}
}
else {
@@ -288,7 +301,7 @@ class OC_Setup {
$content.= "php_value post_max_size 512M\n";
$content.= "SetEnv htaccessWorking true\n";
$content.= "</IfModule>\n";
- $content.= "<IfModule mod_rewrite.c>";
+ $content.= "<IfModule mod_rewrite.c>\n";
$content.= "RewriteEngine on\n";
$content.= "RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization},last]\n";
$content.= "</IfModule>\n";
diff --git a/lib/util.php b/lib/util.php
index a0c131201e4..2fb581aea25 100644
--- a/lib/util.php
+++ b/lib/util.php
@@ -226,6 +226,10 @@ class OC_Util {
$errors[]=array('error'=>'PHP module ctype is not installed.<br/>','hint'=>'Please ask your server administrator to install the module.');
}
+ if(!is_writeable(OC::$SERVERROOT."/config/config.php")){
+ $errors[]=array('error'=>"Can't write into config directory 'config'",'hint'=>"You can usually fix this by giving the webserver use write access to the config directory in owncloud");
+ }
+
return $errors;
}
diff --git a/settings/img/log Icon License b/settings/img/log Icon License
new file mode 100644
index 00000000000..b5c3167d733
--- /dev/null
+++ b/settings/img/log Icon License
@@ -0,0 +1,2 @@
+CC BY 3.0
+http://thenounproject.com/en-us/noun/printer/#icon-No109 \ No newline at end of file
diff --git a/settings/img/log.png b/settings/img/log.png
new file mode 100644
index 00000000000..c84b3b29f19
--- /dev/null
+++ b/settings/img/log.png
Binary files differ
diff --git a/settings/img/log.svg b/settings/img/log.svg
new file mode 100755
index 00000000000..72d4758aceb
--- /dev/null
+++ b/settings/img/log.svg
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ width="16px"
+ height="16px"
+ viewBox="0 0 100 100"
+ enable-background="new 0 0 100 100"
+ xml:space="preserve"
+ inkscape:version="0.48.1 r9760"
+ sodipodi:docname="log.svg"><metadata
+ id="metadata21"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+ id="defs19" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1680"
+ inkscape:window-height="1004"
+ id="namedview17"
+ showgrid="false"
+ inkscape:zoom="3.06"
+ inkscape:cx="50"
+ inkscape:cy="50"
+ inkscape:window-x="-2"
+ inkscape:window-y="23"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="Layer_1" />
+<rect
+ x="75"
+ y="45"
+ width="4"
+ height="19"
+ id="rect3"
+ style="fill:#4d4d4d" />
+<polygon
+ points="21,0 21,19 25,19 25,4 75,4 75,19 79,19 79,0 "
+ id="polygon5"
+ style="fill:#4d4d4d" />
+<polygon
+ points="75,45 75,96 44,96 44,77 25,77 25,45 21,45 21,80 41,100 79,100 79,45 "
+ id="polygon7"
+ style="fill:#4d4d4d" />
+<rect
+ x="31"
+ y="45"
+ width="38"
+ height="3"
+ id="rect9"
+ style="fill:#4d4d4d" />
+<rect
+ x="31"
+ y="56"
+ width="38"
+ height="3"
+ id="rect11"
+ style="fill:#4d4d4d" />
+<rect
+ x="31"
+ y="67"
+ width="38"
+ height="3"
+ id="rect13"
+ style="fill:#4d4d4d" />
+<path
+ d="M0,21v48h19V59h-9V31h80v28h-9v10h19V21H0z M97,28h-4v-4h4V28z"
+ id="path15"
+ style="fill:#4d4d4d" />
+</svg> \ No newline at end of file
diff --git a/settings/js/users.js b/settings/js/users.js
index 79b4e80870a..b45038e5b04 100644
--- a/settings/js/users.js
+++ b/settings/js/users.js
@@ -30,9 +30,10 @@ $(document).ready(function(){
}
element.multiSelect({
createText:'add group',
- checked:checked,
- oncheck:checkHandeler,
- onuncheck:checkHandeler
+ checked:checked,
+ oncheck:checkHandeler,
+ onuncheck:checkHandeler,
+ minWidth: 100,
});
}
$('select[multiple]').each(function(index,element){
diff --git a/settings/l10n/ar.php b/settings/l10n/ar.php
new file mode 100644
index 00000000000..a65dc2fe9bd
--- /dev/null
+++ b/settings/l10n/ar.php
@@ -0,0 +1,28 @@
+<?php $TRANSLATIONS = array(
+"Invalid request" => "طلبك غير مفهوم",
+"OpenID Changed" => "تم تغيير ال OpenID",
+"Language changed" => "تم تغيير اللغة",
+"Add your application" => "أضف تطبيقاتك",
+"Select an App" => "إختر تطبيقاً",
+"-licensed" => "-مسجل",
+"by" => "من قبل",
+"Ask a question" => "إسأل سؤال",
+"Problems connecting to help database." => "الاتصال بقاعدة بيانات المساعدة لم يتم بنجاح",
+"Go there manually." => "إذهب هنالك بنفسك",
+"Answer" => "الجواب",
+"You use" => "أنت تستخدم",
+"of the available" => "من الموجود",
+"Your password got changed" => "لقد تم تغيير كلمات السر",
+"Unable to change your password" => "لم يتم تعديل كلمة السر بنجاح",
+"Current password" => "كلمات السر الحالية",
+"New password" => "كلمات سر جديدة",
+"show" => "أظهر",
+"Change password" => "عدل كلمة السر",
+"Language" => "اللغة",
+"use this address to connect to your ownCloud in your file manager" => "إستخدم هذا العنوان للإتصال ب ownCloud داخل نظام الملفات ",
+"Name" => "الاسم",
+"Password" => "كلمات السر",
+"Groups" => "مجموعات",
+"Create" => "انشئ",
+"Delete" => "حذف"
+);
diff --git a/settings/l10n/bg_BG.php b/settings/l10n/bg_BG.php
index 31afbf93485..0e8c79010a4 100644
--- a/settings/l10n/bg_BG.php
+++ b/settings/l10n/bg_BG.php
@@ -1,7 +1,6 @@
<?php $TRANSLATIONS = array(
-"Authentication error" => "Проблем с идентификацията",
-"OpenID Changed" => "OpenID е сменено",
"Invalid request" => "Невалидна заявка",
+"OpenID Changed" => "OpenID е сменено",
"Language changed" => "Езика е сменен",
"Add your application" => "Добавете Ваша програма",
"Select an App" => "Изберете програма",
@@ -20,7 +19,6 @@
"show" => "показва",
"Change password" => "Промяна на парола",
"Language" => "Език",
-"Help translating" => "Помогнете с превода",
"use this address to connect to your ownCloud in your file manager" => "ползвай този адрес за връзка с Вашия ownCloud във файловия мениджър",
"Name" => "Име",
"Password" => "Парола",
diff --git a/settings/l10n/ca.php b/settings/l10n/ca.php
index 95d84eeed9f..43d1b8ba1fd 100644
--- a/settings/l10n/ca.php
+++ b/settings/l10n/ca.php
@@ -1,29 +1,35 @@
<?php $TRANSLATIONS = array(
-"Authentication error" => "Error d'autenticació",
-"OpenID Changed" => "OpenID ha canviat",
+"email Changed" => "el correu electrònic ha canviat",
"Invalid request" => "Sol.licitud no vàlida",
+"OpenID Changed" => "OpenID ha canviat",
"Language changed" => "S'ha canviat l'idioma",
+"Log level" => "Nivell de registres",
"Add your application" => "Afegir una aplicació",
-"Select an App" => "Sel·leccioneu una aplicació",
+"Select an App" => "Seleccioneu una aplicació",
"-licensed" => "- amb llicència",
-"by" => "per",
+"by" => "de",
"Ask a question" => "Feu una pregunta",
-"Problems connecting to help database." => "Problemes per connectar-se a la base de dades d'ajuda.",
+"Problems connecting to help database." => "Problemes per connectar amb la base de dades d'ajuda.",
"Go there manually." => "Vés-hi manualment.",
"Answer" => "Resposta",
"You use" => "Esteu usant",
"of the available" => "del disponible",
"Your password got changed" => "La contrasenya ha canviat",
-"Current password" => "contrasenya actual",
+"Unable to change your password" => "No s'ha pogut canviar la contrasenya",
+"Current password" => "Contrasenya actual",
"New password" => "Contrasenya nova",
"show" => "mostra",
-"Change password" => "canvia la contrasenya",
+"Change password" => "Canvia la contrasenya",
+"Email" => "Correu electrònic",
+"Your email address" => "Correu electrònic",
+"Fill in an email address to enable password recovery" => "Ompliu el correu electrònic per activar la recuperació de contrasenya",
"Language" => "Idioma",
-"Help translating" => "Ajudeu amb la traducció",
+"Help translate" => "Ajudeu-nos amb la traducció",
"use this address to connect to your ownCloud in your file manager" => "useu aquesta adreça per connectar-vos a ownCloud des del gestor de fitxers",
"Name" => "Nom",
"Password" => "Contrasenya",
"Groups" => "Grups",
"Create" => "Crea",
+"Quota" => "Quota",
"Delete" => "Esborra"
);
diff --git a/settings/l10n/cs_CZ.php b/settings/l10n/cs_CZ.php
index 8bbef78c038..3ddebf0cd99 100644
--- a/settings/l10n/cs_CZ.php
+++ b/settings/l10n/cs_CZ.php
@@ -1,8 +1,9 @@
<?php $TRANSLATIONS = array(
-"Authentication error" => "Chyba při ověření",
-"OpenID Changed" => "OpenID změněn",
+"email Changed" => "email změněn",
"Invalid request" => "Chybný dotaz",
+"OpenID Changed" => "OpenID změněn",
"Language changed" => "Jazyk byl změněn",
+"Log level" => "Úroveň logu",
"Add your application" => "Přidejte svou aplikaci",
"Select an App" => "Vyberte aplikaci",
"-licensed" => "-licencováno",
@@ -19,12 +20,16 @@
"New password" => "Nové heslo",
"show" => "zobrazit",
"Change password" => "Změnit heslo",
+"Email" => "Email",
+"Your email address" => "Vaše email adresa",
+"Fill in an email address to enable password recovery" => "Pro povolení změny hesla vyplňte email adresu",
"Language" => "Jazyk",
-"Help translating" => "Pomozte s překladem",
+"Help translate" => "Pomoc s překladem",
"use this address to connect to your ownCloud in your file manager" => "tuto adresu použijte pro připojení k ownCloud ve Vašem správci souborů",
"Name" => "Jméno",
"Password" => "Heslo",
"Groups" => "Skupiny",
"Create" => "Vytvořit",
+"Quota" => "Kvóta",
"Delete" => "Vymazat"
);
diff --git a/settings/l10n/da.php b/settings/l10n/da.php
index cb51f709a47..05b5e579a78 100644
--- a/settings/l10n/da.php
+++ b/settings/l10n/da.php
@@ -1,29 +1,35 @@
<?php $TRANSLATIONS = array(
-"Authentication error" => "Godkendelsesfejl",
-"OpenID Changed" => "OpenID ændret",
+"email Changed" => "email ændret",
"Invalid request" => "Ugyldig forespørgsel",
+"OpenID Changed" => "OpenID ændret",
"Language changed" => "Sprog ændret",
+"Log level" => "Log-niveau",
"Add your application" => "Tilføj dit program",
"Select an App" => "Vælg en App",
"-licensed" => "-licenseret",
"by" => "af",
"Ask a question" => "Stil et spørgsmål",
-"Problems connecting to help database." => "Problemer med at forbinde til hjælpe-databasen",
+"Problems connecting to help database." => "Problemer med at forbinde til hjælpe-databasen.",
"Go there manually." => "Gå derhen manuelt.",
"Answer" => "Svar",
"You use" => "Du benytter",
"of the available" => "af det tilgængelige",
"Your password got changed" => "Din adgangskode er blevet ændret",
+"Unable to change your password" => "Ude af stand til at ændre dit kodeord",
"Current password" => "Nuværende adgangskode",
"New password" => "Ny adgangskode",
"show" => "vis",
-"Change password" => "Skift password",
+"Change password" => "Skift kodeord",
+"Email" => "Email",
+"Your email address" => "Din emailadresse",
+"Fill in an email address to enable password recovery" => "Indtast en emailadresse for at kunne få påmindelse om adgangskode",
"Language" => "Sprog",
-"Help translating" => "Hjælp med at oversætte",
+"Help translate" => "Hjælp med oversættelsen",
"use this address to connect to your ownCloud in your file manager" => "benyt denne adresse til at forbinde til din ownCloud i din filbrowser",
"Name" => "Navn",
"Password" => "Kodeord",
"Groups" => "Grupper",
"Create" => "Ny",
+"Quota" => "Kvote",
"Delete" => "Slet"
);
diff --git a/settings/l10n/de.php b/settings/l10n/de.php
index 21f3a8f8aa0..cb1f4bd0817 100644
--- a/settings/l10n/de.php
+++ b/settings/l10n/de.php
@@ -1,7 +1,7 @@
<?php $TRANSLATIONS = array(
-"Authentication error" => "Berechtigungsfehler",
-"OpenID Changed" => "OpenID geändert",
+"email Changed" => "E-Mail wurde geändert",
"Invalid request" => "Ungültige Anfrage",
+"OpenID Changed" => "OpenID geändert",
"Language changed" => "Sprache geändert",
"Add your application" => "Eigene Anwendung hinzufügen",
"Select an App" => "Wähle eine Anwendung aus",
@@ -14,12 +14,16 @@
"You use" => "Du nutzt",
"of the available" => "der verfügbaren",
"Your password got changed" => "Dein Passwort wurde geändert",
+"Unable to change your password" => "Passwort konnte nicht geändert werden",
"Current password" => "Aktuelles Passwort",
"New password" => "Neues Passwort",
"show" => "zeigen",
"Change password" => "Passwort ändern",
+"Email" => "E-Mail",
+"Your email address" => "Ihre E-Mail Adresse",
+"Fill in an email address to enable password recovery" => "Tragen Sie eine E-Mail Adresse ein, um die Passwort-Wiederherstellung zu aktivieren",
"Language" => "Sprache",
-"Help translating" => "Hilf bei der Übersetzung",
+"Help translate" => "Helfen Sie bei der Übersetzung",
"use this address to connect to your ownCloud in your file manager" => "benutze diese Adresse, um deine ownCloud mit deinem Dateiverwalter zu verbinden",
"Name" => "Name",
"Password" => "Passwort",
diff --git a/settings/l10n/el.php b/settings/l10n/el.php
index 8d55698e0aa..f7b703d6462 100644
--- a/settings/l10n/el.php
+++ b/settings/l10n/el.php
@@ -1,8 +1,10 @@
<?php $TRANSLATIONS = array(
-"Authentication error" => "Σφάλμα ταυτοποίησης",
-"OpenID Changed" => "Το OpenID άλλαξε",
+"email Changed" => "το email άλλαξε",
"Invalid request" => "Άκυρα αίτημα",
+"OpenID Changed" => "Το OpenID άλλαξε",
"Language changed" => "Η γλώσσα άλλαξε",
+"Log level" => "Επίπεδο καταγραφής",
+"Add your application" => "Προσθέστε την δική σας εφαρμογή",
"Select an App" => "Επιλέξτε μια εφαρμογή",
"-licensed" => "-με άδεια",
"by" => "με",
@@ -13,16 +15,21 @@
"You use" => "Χρησιμοποιείτε",
"of the available" => "από τα διαθέσιμα",
"Your password got changed" => "Ο κωδικός πρόσβασής σας άλαλαξε",
+"Unable to change your password" => "Δεν ήταν δυνατή η αλλαγή του κωδικού πρόσβασης",
"Current password" => "Τρέχοντα κωδικό πρόσβασης",
"New password" => "Νέος κωδικός",
"show" => "Εμφάνιση",
"Change password" => "Αλλαγή κωδικού πρόσβασης",
+"Email" => "Email",
+"Your email address" => "Το διεύθυνση ηλεκτρονικού ταχυδρομείου σας",
+"Fill in an email address to enable password recovery" => "Συμπληρώστε μια διεύθυνση ηλεκτρονικού ταχυδρομείου για να ενεργοποιηθεί ή ανάκτηση κωδικού πρόσβασης",
"Language" => "Γλώσσα",
-"Help translating" => "Βοηθήστε στη μετάφραση",
+"Help translate" => "Βοηθήστε στην μετάφραση",
"use this address to connect to your ownCloud in your file manager" => "χρησιμοποιήστε αυτή τη διεύθυνση για να συνδεθείτε στο ownCloud σας από το διαχειριστή αρχείων σας",
"Name" => "Όνομα",
"Password" => "Κωδικός",
"Groups" => "Ομάδες",
"Create" => "Δημιουργία",
+"Quota" => "Αναλογία χώρου",
"Delete" => "Διαγραφή"
);
diff --git a/settings/l10n/eo.php b/settings/l10n/eo.php
new file mode 100644
index 00000000000..e1af753798d
--- /dev/null
+++ b/settings/l10n/eo.php
@@ -0,0 +1,28 @@
+<?php $TRANSLATIONS = array(
+"Invalid request" => "Nevalida peto",
+"OpenID Changed" => "La agordo de OpenID estas ŝanĝita",
+"Language changed" => "La lingvo estas ŝanĝita",
+"Add your application" => "Aldonu vian aplikaĵon",
+"Select an App" => "Elekti aplikaĵon",
+"-licensed" => "-permesila",
+"by" => "de",
+"Ask a question" => "Faru demandon",
+"Problems connecting to help database." => "Problemoj okazis dum konektado al la helpa datumbazo.",
+"Go there manually." => "Iri tien mane.",
+"Answer" => "Respondi",
+"You use" => "Vi uzas",
+"of the available" => "el la disponeblaj",
+"Your password got changed" => "Via pasvorto ŝanĝiĝis",
+"Unable to change your password" => "Ne eblis ŝanĝi vian pasvorton",
+"Current password" => "Nuna pasvorto",
+"New password" => "Nova pasvorto",
+"show" => "montri",
+"Change password" => "Ŝanĝi la pasvorton",
+"Language" => "Lingvo",
+"use this address to connect to your ownCloud in your file manager" => "uzu ĉi tiun adreson por konektiĝi al via ownCloud per via dosieradministrilo",
+"Name" => "Nomo",
+"Password" => "Pasvorto",
+"Groups" => "Grupoj",
+"Create" => "Krei",
+"Delete" => "Forigi"
+);
diff --git a/settings/l10n/es.php b/settings/l10n/es.php
index 0459ae45366..0c55f462ba3 100644
--- a/settings/l10n/es.php
+++ b/settings/l10n/es.php
@@ -1,8 +1,9 @@
<?php $TRANSLATIONS = array(
-"Authentication error" => "Error de autentificación",
-"OpenID Changed" => "OpenID Cambiado",
+"email Changed" => "Email actualizado",
"Invalid request" => "Solicitud no válida",
+"OpenID Changed" => "OpenID Cambiado",
"Language changed" => "Idioma cambiado",
+"Log level" => "Nivel de log",
"Add your application" => "Añadir tu aplicación",
"Select an App" => "Seleccionar una aplicación",
"-licensed" => "-autorizado",
@@ -14,16 +15,21 @@
"You use" => "Estás utilizando",
"of the available" => "del total disponible de",
"Your password got changed" => "Tu contraseña ha sido cambiada",
+"Unable to change your password" => "No se pudo cambiar su contraseña",
"Current password" => "Contraseña actual",
"New password" => "Nueva contraseña:",
"show" => "mostrar",
"Change password" => "Cambiar contraseña",
+"Email" => "Email",
+"Your email address" => "Tu dirección de email",
+"Fill in an email address to enable password recovery" => "Escribe una dirección de email para restablecer la contraseña",
"Language" => "Idioma",
-"Help translating" => "Ayuda a traducir",
-"use this address to connect to your ownCloud in your file manager" => "usar esta dirección para conectar tu ownCloud en tu explorador de archivos",
+"Help translate" => "Ayudar a traducir",
+"use this address to connect to your ownCloud in your file manager" => "utiliza esta dirección para conectar a tu ownCloud desde tu explorador de archivos",
"Name" => "Nombre",
"Password" => "Contraseña",
"Groups" => "Grupos",
"Create" => "Crear",
+"Quota" => "Cuota",
"Delete" => "Eliminar"
);
diff --git a/settings/l10n/et_EE.php b/settings/l10n/et_EE.php
index 0e849f9d82f..c01c8400ca8 100644
--- a/settings/l10n/et_EE.php
+++ b/settings/l10n/et_EE.php
@@ -1,7 +1,6 @@
<?php $TRANSLATIONS = array(
-"Authentication error" => "Autentimise viga",
-"OpenID Changed" => "OpenID on muudetud",
"Invalid request" => "Vigane päring",
+"OpenID Changed" => "OpenID on muudetud",
"Language changed" => "Keel on muudetud",
"Add your application" => "Lisa oma programm",
"Select an App" => "Vali programm",
@@ -20,7 +19,6 @@
"show" => "näita",
"Change password" => "Muuda parooli",
"Language" => "Keel",
-"Help translating" => "Abiinfo tõlkimine",
"use this address to connect to your ownCloud in your file manager" => "kasuta seda aadressi oma ownCloudiga ühendamiseks failihalduriga",
"Name" => "Nimi",
"Password" => "Parool",
diff --git a/settings/l10n/eu.php b/settings/l10n/eu.php
new file mode 100644
index 00000000000..9926393dec3
--- /dev/null
+++ b/settings/l10n/eu.php
@@ -0,0 +1,28 @@
+<?php $TRANSLATIONS = array(
+"Invalid request" => "Baliogabeko eskaria",
+"OpenID Changed" => "OpenID aldatuta",
+"Language changed" => "Hizkuntza aldatuta",
+"Add your application" => "Gehitu zure programa",
+"Select an App" => "Aukeratu Programa bat",
+"-licensed" => "lizentziarekin.",
+"by" => " Egilea:",
+"Ask a question" => "Egin galdera bat",
+"Problems connecting to help database." => "Arazoak daude laguntza datubasera konektatzeko.",
+"Go there manually." => "Joan hara eskuz.",
+"Answer" => "Erantzun",
+"You use" => "Erabiltzen ari zara ",
+"of the available" => "eta guztira erabil dezakezu ",
+"Your password got changed" => "Zure pasahitza aldatu da",
+"Unable to change your password" => "Ezin izan da zure pasahitza aldatu",
+"Current password" => "Uneko pasahitza",
+"New password" => "Pasahitz berria",
+"show" => "erakutsi",
+"Change password" => "Aldatu pasahitza",
+"Language" => "Hizkuntza",
+"use this address to connect to your ownCloud in your file manager" => "erabili helbide hau zure fitxategi kudeatzailean zure ownCloudera konektatzeko",
+"Name" => "Izena",
+"Password" => "Pasahitza",
+"Groups" => "Taldeak",
+"Create" => "Sortu",
+"Delete" => "Ezabatu"
+);
diff --git a/settings/l10n/fr.php b/settings/l10n/fr.php
index 74efb60fca2..5773b51206c 100644
--- a/settings/l10n/fr.php
+++ b/settings/l10n/fr.php
@@ -1,8 +1,9 @@
<?php $TRANSLATIONS = array(
-"Authentication error" => "Erreur d'authentification",
-"OpenID Changed" => "Identifiant OpenID changé",
+"email Changed" => "e-mail modifié",
"Invalid request" => "Requête invalide",
+"OpenID Changed" => "Identifiant OpenID changé",
"Language changed" => "Langue changée",
+"Log level" => "Niveau de log",
"Add your application" => "Ajoutez votre application",
"Select an App" => "Sélectionner une Application",
"-licensed" => "sous licence",
@@ -12,19 +13,23 @@
"Go there manually." => "S'y rendre manuellement.",
"Answer" => "Réponse",
"You use" => "Vous utilisez",
-"of the available" => "sur un total de",
+"of the available" => "d'espace de stockage sur un total de",
"Your password got changed" => "Votre mot de passe a été changé",
"Unable to change your password" => "Impossible de changer votre mot de passe",
"Current password" => "Mot de passe actuel",
"New password" => "Nouveau mot de passe",
"show" => "Afficher",
"Change password" => "Changer de mot de passe",
+"Email" => "E-mail",
+"Your email address" => "Votre adresse e-mail",
+"Fill in an email address to enable password recovery" => "Entrez votre adresse e-mail pour activer la réinitialisation de mot de passe",
"Language" => "Langue",
-"Help translating" => "Aider à traduire",
+"Help translate" => "Aidez à traduire",
"use this address to connect to your ownCloud in your file manager" => "utilisez cette adresse pour vous connecter à votre ownCloud depuis un explorateur de fichiers",
"Name" => "Nom",
"Password" => "Mot de passe",
"Groups" => "Groupes",
"Create" => "Créer",
+"Quota" => "Quota",
"Delete" => "Supprimer"
);
diff --git a/settings/l10n/he.php b/settings/l10n/he.php
new file mode 100644
index 00000000000..beec6ed4eb9
--- /dev/null
+++ b/settings/l10n/he.php
@@ -0,0 +1,28 @@
+<?php $TRANSLATIONS = array(
+"Invalid request" => "בקשה לא חוקית",
+"OpenID Changed" => "OpenID השתנה",
+"Language changed" => "שפה השתנתה",
+"Add your application" => "הוספת היישום שלך",
+"Select an App" => "בחירת יישום",
+"-licensed" => "רשיון",
+"by" => "מאת",
+"Ask a question" => "שאל שאלה",
+"Problems connecting to help database." => "בעיות בהתחברות לבסיס נתוני העזרה",
+"Go there manually." => "גש לשם באופן ידני",
+"Answer" => "מענה",
+"You use" => "הנך משתמש ",
+"of the available" => "מתוך ",
+"Your password got changed" => "הססמה שלך שונתה",
+"Unable to change your password" => "לא ניתן לשנות את הססמה שלך",
+"Current password" => "ססמה נוכחית",
+"New password" => "ססמה חדשה",
+"show" => "הצגה",
+"Change password" => "שינוי ססמה",
+"Language" => "פה",
+"use this address to connect to your ownCloud in your file manager" => "השתמש בכתובת זו כדי להתחבר ל־ownCloude שלך ממנהל הקבצים",
+"Name" => "שם",
+"Password" => "ססמה",
+"Groups" => "קבוצות",
+"Create" => "יצירה",
+"Delete" => "מחיקה"
+);
diff --git a/settings/l10n/hr.php b/settings/l10n/hr.php
new file mode 100644
index 00000000000..4e5ed4bc1bc
--- /dev/null
+++ b/settings/l10n/hr.php
@@ -0,0 +1,28 @@
+<?php $TRANSLATIONS = array(
+"Invalid request" => "Neispravan zahtjev",
+"OpenID Changed" => "OpenID promijenjen",
+"Language changed" => "Jezik promijenjen",
+"Add your application" => "Dodajte vašu aplikaciju",
+"Select an App" => "Odaberite Aplikaciju",
+"-licensed" => "-licencirano",
+"by" => "od",
+"Ask a question" => "Postavite pitanje",
+"Problems connecting to help database." => "Problem pri spajanju na bazu podataka pomoći",
+"Go there manually." => "Idite tamo ručno.",
+"Answer" => "Odgovor",
+"You use" => "Koristite",
+"of the available" => "od dostupno",
+"Your password got changed" => "Vaša lozinka je promijenjena",
+"Unable to change your password" => "Nemoguće promijeniti lozinku",
+"Current password" => "Trenutna lozinka",
+"New password" => "Nova lozinka",
+"show" => "prikaz",
+"Change password" => "Izmjena lozinke",
+"Language" => "Jezik",
+"use this address to connect to your ownCloud in your file manager" => "koristite ovu adresu za spajanje na Cloud u vašem upravitelju datoteka",
+"Name" => "Ime",
+"Password" => "Lozinka",
+"Groups" => "Grupe",
+"Create" => "Izradi",
+"Delete" => "Obriši"
+);
diff --git a/settings/l10n/hu_HU.php b/settings/l10n/hu_HU.php
new file mode 100644
index 00000000000..a2e468e5170
--- /dev/null
+++ b/settings/l10n/hu_HU.php
@@ -0,0 +1,25 @@
+<?php $TRANSLATIONS = array(
+"Invalid request" => "Érvénytelen kérés",
+"OpenID Changed" => "OpenID megváltozott",
+"Language changed" => "A nyelv megváltozott",
+"Add your application" => "Alkalmazásod hozzáadása",
+"Select an App" => "Egy App kiválasztása",
+"-licensed" => "-licenszelt",
+"Ask a question" => "Tégy fel egy kérdést",
+"Go there manually." => "Menj oda kézzel",
+"Answer" => "Válasz",
+"of the available" => "a rendelkezésre álló",
+"Your password got changed" => "A jelszó megváltozott",
+"Unable to change your password" => "Nem lehet megváltoztatni a jelszavad",
+"Current password" => "Jelenlegi jelszó",
+"New password" => "Új jelszó",
+"show" => "Mutatás",
+"Change password" => "Jelszó megváltoztatása",
+"Language" => "Nyelv",
+"use this address to connect to your ownCloud in your file manager" => "Használd ezt a címet hogy csatlakozz a saját ownCloud rendszeredhez a fájlkezelődben",
+"Name" => "Név",
+"Password" => "Jelszó",
+"Groups" => "Csoportok",
+"Create" => "Létrehozás",
+"Delete" => "Törlés"
+);
diff --git a/settings/l10n/ia.php b/settings/l10n/ia.php
new file mode 100644
index 00000000000..85ff0696ef8
--- /dev/null
+++ b/settings/l10n/ia.php
@@ -0,0 +1,21 @@
+<?php $TRANSLATIONS = array(
+"OpenID Changed" => "OpenID cambiate",
+"Language changed" => "Linguage cambiate",
+"Add your application" => "Adder tu application",
+"Select an App" => "Selectionar un app",
+"by" => "per",
+"Ask a question" => "Facer un question",
+"Answer" => "Responsa",
+"Your password got changed" => "Tu contrasigno esseva cambiate",
+"Unable to change your password" => "Non pote cambiar tu contrasigno",
+"Current password" => "Contrasigno currente",
+"New password" => "Nove contrasigno",
+"show" => "monstrar",
+"Change password" => "Cambiar contrasigno",
+"Language" => "Linguage",
+"Name" => "Nomine",
+"Password" => "Contrasigno",
+"Groups" => "Gruppos",
+"Create" => "Crear",
+"Delete" => "Deler"
+);
diff --git a/settings/l10n/id.php b/settings/l10n/id.php
index b6909f914f9..c361b504d74 100644
--- a/settings/l10n/id.php
+++ b/settings/l10n/id.php
@@ -1,7 +1,6 @@
<?php $TRANSLATIONS = array(
-"Authentication error" => "Otentikasi bermasalah",
-"OpenID Changed" => "OpenID telah dirubah",
"Invalid request" => "Permintaan tidak valid",
+"OpenID Changed" => "OpenID telah dirubah",
"Language changed" => "Bahasa telah diganti",
"Add your application" => "Tambahkan aplikasi anda",
"Select an App" => "Pilih satu aplikasi",
@@ -14,12 +13,12 @@
"You use" => "Anda menggunakan",
"of the available" => "dari yang tersedia",
"Your password got changed" => "Password anda telah dirubah",
+"Unable to change your password" => "Tidak dapat merubah password anda",
"Current password" => "Password saat ini",
"New password" => "Password baru",
"show" => "perlihatkan",
"Change password" => "Rubah password",
"Language" => "Bahasa",
-"Help translating" => "Bantu terjemahkan",
"use this address to connect to your ownCloud in your file manager" => "gunakan alamat ini untuk terhubung dengan ownCloud anda dalam file manager anda",
"Name" => "Nama",
"Password" => "Password",
diff --git a/settings/l10n/it.php b/settings/l10n/it.php
index 54f6c019ba2..41cb6ea9625 100644
--- a/settings/l10n/it.php
+++ b/settings/l10n/it.php
@@ -1,11 +1,12 @@
<?php $TRANSLATIONS = array(
-"Authentication error" => "Errore nell'autenticazione",
-"OpenID Changed" => "OpenID Modificato",
+"email Changed" => "email modificata",
"Invalid request" => "Richiesta non valida",
+"OpenID Changed" => "OpenID Modificato",
"Language changed" => "Lingua modificata",
+"Log level" => "Livello di log",
"Add your application" => "Aggiungi un applicazione",
"Select an App" => "Seleziona un applicazione",
-"-licensed" => "-licensed",
+"-licensed" => "-rilasciato",
"by" => "da",
"Ask a question" => "Fai una domanda",
"Problems connecting to help database." => "Problemi di connessione al database di aiuto",
@@ -19,12 +20,16 @@
"New password" => "Nuova password",
"show" => "mostra",
"Change password" => "Modifica password",
+"Email" => "Email",
+"Your email address" => "Il tuo indirizzo email",
+"Fill in an email address to enable password recovery" => "Inserici il tuo indirizzo email per abilitare il recupero password",
"Language" => "Lingua",
-"Help translating" => "Aiuta nella traduzione",
+"Help translate" => "Migliora la traduzione",
"use this address to connect to your ownCloud in your file manager" => "usa questo indirizzo per connettersi al proprio ownCloud nel tuo file manager",
"Name" => "Nome",
"Password" => "Password",
"Groups" => "Gruppi",
"Create" => "Crea",
+"Quota" => "Quota",
"Delete" => "Cancella"
);
diff --git a/settings/l10n/ja_JP.php b/settings/l10n/ja_JP.php
new file mode 100644
index 00000000000..fe4eda3a13a
--- /dev/null
+++ b/settings/l10n/ja_JP.php
@@ -0,0 +1,28 @@
+<?php $TRANSLATIONS = array(
+"Invalid request" => "無効なリクエストです",
+"OpenID Changed" => "OpenIDが変更されました",
+"Language changed" => "言語が変更されました",
+"Add your application" => "アプリを追加してください",
+"Select an App" => "アプリを選択してください",
+"-licensed" => "権利を保持されています",
+"by" => "によって",
+"Ask a question" => "質問してください",
+"Problems connecting to help database." => "ヘルプ用データベース接続に問題が生じました",
+"Go there manually." => "手動で移動してください",
+"Answer" => "解答",
+"You use" => "あなたが使っているのは",
+"of the available" => "です。利用可能容量は",
+"Your password got changed" => "パスワードは変更されました",
+"Unable to change your password" => "パスワードを変更することができません",
+"Current password" => "現在のパスワード",
+"New password" => "新しいパスワード",
+"show" => "表示",
+"Change password" => "パスワードを変更する",
+"Language" => "言語",
+"use this address to connect to your ownCloud in your file manager" => "ファイルマネージャーであなたのownCloudに接続するときはこのアドレスを使用してください",
+"Name" => "名前",
+"Password" => "パスワード",
+"Groups" => "グループ",
+"Create" => "作成",
+"Delete" => "削除"
+);
diff --git a/settings/l10n/lb.php b/settings/l10n/lb.php
index f6188cec626..03d15e31184 100644
--- a/settings/l10n/lb.php
+++ b/settings/l10n/lb.php
@@ -1,7 +1,6 @@
<?php $TRANSLATIONS = array(
-"Authentication error" => "Authentifikatioun's Feeler",
-"OpenID Changed" => "OpenID huet geännert",
"Invalid request" => "Ongülteg Requête",
+"OpenID Changed" => "OpenID huet geännert",
"Language changed" => "Sprooch huet geännert",
"Add your application" => "Sätz deng Applikatioun bäi",
"Select an App" => "Wiel eng Applikatioun aus",
@@ -20,7 +19,6 @@
"show" => "weisen",
"Change password" => "Passwuert änneren",
"Language" => "Sprooch",
-"Help translating" => "Hëllef ze Iwwersetzen",
"use this address to connect to your ownCloud in your file manager" => "benotz dës Adress fir dech un deng ownCloud iwwert däin Datei Manager ze verbannen",
"Name" => "Numm",
"Password" => "Passwuert",
diff --git a/settings/l10n/lt_LT.php b/settings/l10n/lt_LT.php
new file mode 100644
index 00000000000..3d01d0788ac
--- /dev/null
+++ b/settings/l10n/lt_LT.php
@@ -0,0 +1,26 @@
+<?php $TRANSLATIONS = array(
+"Invalid request" => "Klaidinga užklausa",
+"OpenID Changed" => "OpenID pakeistas",
+"Language changed" => "Kalba pakeista",
+"Add your application" => "Pridėti jūsų programą",
+"Select an App" => "Pasirinkite programą",
+"-licensed" => "-licencijuota",
+"Ask a question" => "Užduoti klausimą",
+"Problems connecting to help database." => "Problemos jungiantis prie duomenų bazės",
+"Answer" => "Atsakyti",
+"You use" => "Jūs naudojate",
+"of the available" => "iš galimų",
+"Your password got changed" => "Jūsų slaptažodis buvo pakeistas",
+"Unable to change your password" => "Neįmanoma pakeisti slaptažodžio",
+"Current password" => "Dabartinis slaptažodis",
+"New password" => "Naujas slaptažodis",
+"show" => "rodyti",
+"Change password" => "Pakeisti slaptažodį",
+"Language" => "Kalba",
+"use this address to connect to your ownCloud in your file manager" => "naudokite šį adresą, jei norite pasiekti savo ownCloud per failų tvarkyklę",
+"Name" => "Vardas",
+"Password" => "Slaptažodis",
+"Groups" => "Grupės",
+"Create" => "Sukurti",
+"Delete" => "Ištrinti"
+);
diff --git a/settings/l10n/ms_MY.php b/settings/l10n/ms_MY.php
index fbe910ff219..3533a804d20 100644
--- a/settings/l10n/ms_MY.php
+++ b/settings/l10n/ms_MY.php
@@ -1,7 +1,6 @@
<?php $TRANSLATIONS = array(
-"Authentication error" => "Ralat pengesahan",
-"OpenID Changed" => "OpenID ditukar",
"Invalid request" => "Permintaan tidak sah",
+"OpenID Changed" => "OpenID ditukar",
"Language changed" => "Bahasa ditukar",
"Add your application" => "Tambah aplikasi anda",
"Select an App" => "Pilih aplikasi",
@@ -20,7 +19,6 @@
"show" => "Papar",
"Change password" => "Tukar kata laluan",
"Language" => "Bahasa",
-"Help translating" => "Bantu perterjemahan",
"use this address to connect to your ownCloud in your file manager" => "guna alamat ini untuk menyambung owncloud anda dalam pengurus fail anda",
"Name" => "Nama",
"Password" => "Kata laluan ",
diff --git a/settings/l10n/nb_NO.php b/settings/l10n/nb_NO.php
index 8d2d1506327..c27124bde0d 100644
--- a/settings/l10n/nb_NO.php
+++ b/settings/l10n/nb_NO.php
@@ -1,7 +1,6 @@
<?php $TRANSLATIONS = array(
-"Authentication error" => "Autentifikasjonsfeil",
-"OpenID Changed" => "OpenID endret",
"Invalid request" => "Ugyldig forespørsel",
+"OpenID Changed" => "OpenID endret",
"Language changed" => "Språk endret",
"Add your application" => "Legg til din applikasjon",
"Select an App" => "Velg en app",
@@ -20,7 +19,6 @@
"show" => "vis",
"Change password" => "Endre passord",
"Language" => "Språk",
-"Help translating" => "Hjelp oss å oversett",
"use this address to connect to your ownCloud in your file manager" => "bruk denne adressen for å koble til din ownCloud gjennom filhåndtereren",
"Name" => "Navn",
"Password" => "Passord",
diff --git a/settings/l10n/nl.php b/settings/l10n/nl.php
index 36b37ca720b..34af604ecef 100644
--- a/settings/l10n/nl.php
+++ b/settings/l10n/nl.php
@@ -1,26 +1,35 @@
<?php $TRANSLATIONS = array(
-"Authentication error" => "Authenticatiefout.",
-"OpenID Changed" => "OpenID is aangepast",
+"email Changed" => "mailadres aangepast",
"Invalid request" => "Ongeldig verzoek",
+"OpenID Changed" => "OpenID is aangepast",
"Language changed" => "Taal aangepast",
-"Select an App" => "Selecteer een App",
-"-licensed" => "-gelicenseerd",
+"Log level" => "Logniveau",
+"Add your application" => "Voeg uw applicatie toe",
+"Select an App" => "Selecteer een app",
+"-licensed" => "-gelicentieerd",
"by" => "door",
"Ask a question" => "Stel een vraag",
+"Problems connecting to help database." => "Problemen bij het verbinden met de helpdatabank.",
+"Go there manually." => "Ga er zelf heen.",
"Answer" => "Beantwoord",
"You use" => "U gebruikt",
"of the available" => "van de beschikbare",
"Your password got changed" => "Uw wachtwoord is aangepast",
+"Unable to change your password" => "Niet in staat om uw wachtwoord te wijzigen",
"Current password" => "Huidig wachtwoord",
"New password" => "Nieuw wachtwoord",
"show" => "weergeven",
-"Change password" => "Verander wachtwoord",
+"Change password" => "Wijzig wachtwoord",
+"Email" => "mailadres",
+"Your email address" => "Jouw mailadres",
+"Fill in an email address to enable password recovery" => "Vul een mailadres in om je wachtwoord te kunnen herstellen",
"Language" => "Taal",
-"Help translating" => "Help met vertalen",
-"use this address to connect to your ownCloud in your file manager" => "gebruik dit adres om verbinding te maken met ownCloud in uw bestandsbeheer programa",
+"Help translate" => "Help met vertalen",
+"use this address to connect to your ownCloud in your file manager" => "gebruik dit adres om verbinding te maken met ownCloud in uw bestandsbeheerprogramma",
"Name" => "Naam",
"Password" => "Wachtwoord",
"Groups" => "Groepen",
"Create" => "Creëer",
+"Quota" => "Limieten",
"Delete" => "verwijderen"
);
diff --git a/settings/l10n/nn_NO.php b/settings/l10n/nn_NO.php
new file mode 100644
index 00000000000..8ce46caa89a
--- /dev/null
+++ b/settings/l10n/nn_NO.php
@@ -0,0 +1,28 @@
+<?php $TRANSLATIONS = array(
+"Invalid request" => "Ugyldig førespurnad",
+"OpenID Changed" => "OpenID endra",
+"Language changed" => "Språk endra",
+"Add your application" => "Legg til applikasjonen din",
+"Select an App" => "Vel ein applikasjon",
+"-licensed" => "-lisensiert",
+"by" => "av",
+"Ask a question" => "Spør om noko",
+"Problems connecting to help database." => "Problem ved tilkopling til hjelpedatabasen.",
+"Go there manually." => "Gå der på eigen hand.",
+"Answer" => "Svar",
+"You use" => "Du bruker",
+"of the available" => "av dei tilgjengelege",
+"Your password got changed" => "Passordet ditt er endra",
+"Unable to change your password" => "Klarte ikkje å endra passordet",
+"Current password" => "Passord",
+"New password" => "Nytt passord",
+"show" => "vis",
+"Change password" => "Endra passord",
+"Language" => "Språk",
+"use this address to connect to your ownCloud in your file manager" => "bruk denne adressa for å kopla til ownCloud i filhandsamaren din",
+"Name" => "Namn",
+"Password" => "Passord",
+"Groups" => "Grupper",
+"Create" => "Lag",
+"Delete" => "Slett"
+);
diff --git a/settings/l10n/pl.php b/settings/l10n/pl.php
index cfd52cb3475..88e51a0706b 100644
--- a/settings/l10n/pl.php
+++ b/settings/l10n/pl.php
@@ -1,8 +1,9 @@
<?php $TRANSLATIONS = array(
-"Authentication error" => "Błąd uwierzytelniania",
-"OpenID Changed" => "Zmieniono OpenID",
+"email Changed" => "email zmieniony",
"Invalid request" => "Nieprawidłowe żądanie",
+"OpenID Changed" => "Zmieniono OpenID",
"Language changed" => "Język zmieniony",
+"Log level" => "Poziom logowania",
"Add your application" => "Dodaj własną aplikacje",
"Select an App" => "Zaznacz aplikacje",
"-licensed" => "-licencjonowany",
@@ -14,16 +15,21 @@
"You use" => "Używasz",
"of the available" => "z dostępnych",
"Your password got changed" => "Twoje hasło zostało zmienione",
+"Unable to change your password" => "Nie można zmienić hasła",
"Current password" => "Bieżące hasło",
"New password" => "Nowe hasło",
"show" => "pokaż",
"Change password" => "Zmień hasło",
+"Email" => "Email",
+"Your email address" => "Twój adres email",
+"Fill in an email address to enable password recovery" => "Podaj adres email żeby odzyskać hasło",
"Language" => "Język",
-"Help translating" => "Pomóż w tłumaczeniu",
+"Help translate" => "Pomóż w tłumaczeniu",
"use this address to connect to your ownCloud in your file manager" => "użyj tego adresu żeby połączyć się z twoim kontem ownCloud w menedżerze plików.",
"Name" => "Nazwa",
"Password" => "Hasło",
"Groups" => "Grupy",
"Create" => "Stwórz",
+"Quota" => "Udział",
"Delete" => "Skasuj"
);
diff --git a/settings/l10n/pt_BR.php b/settings/l10n/pt_BR.php
index f0988e9a8e6..51fa7e65a2c 100644
--- a/settings/l10n/pt_BR.php
+++ b/settings/l10n/pt_BR.php
@@ -1,7 +1,6 @@
<?php $TRANSLATIONS = array(
-"Authentication error" => "Erro de autenticação",
-"OpenID Changed" => "Mudou OpenID",
"Invalid request" => "Pedido inválido",
+"OpenID Changed" => "Mudou OpenID",
"Language changed" => "Mudou Idioma",
"Add your application" => "Adicionar o seu aplicativo",
"Select an App" => "Selecione uma Aplicação",
@@ -20,7 +19,6 @@
"show" => "mostrar",
"Change password" => "Alterar senha",
"Language" => "Idioma",
-"Help translating" => "Ajuda na Tradução",
"use this address to connect to your ownCloud in your file manager" => "use este endereço para se conectar ao seu ownCloud no seu gerenciador de arquvos",
"Name" => "Nome",
"Password" => "Senha",
diff --git a/settings/l10n/ro.php b/settings/l10n/ro.php
index 861bd42961b..715081f0a85 100644
--- a/settings/l10n/ro.php
+++ b/settings/l10n/ro.php
@@ -1,8 +1,9 @@
<?php $TRANSLATIONS = array(
-"Authentication error" => "Eroare autentificare",
-"OpenID Changed" => "OpenID schimbat",
+"email Changed" => "email schimbat",
"Invalid request" => "Cerere eronată",
+"OpenID Changed" => "OpenID schimbat",
"Language changed" => "Limba a fost schimbată",
+"Log level" => "Nivel log-uri",
"Add your application" => "Adaugă propria ta aplicație",
"Select an App" => "Selectează o aplicație",
"-licensed" => "-autorizat",
@@ -19,12 +20,16 @@
"New password" => "Noua parolă",
"show" => "arată",
"Change password" => "Schimbă parola",
+"Email" => "Email",
+"Your email address" => "Adresa ta de email",
+"Fill in an email address to enable password recovery" => "Completați adresa de mail pentru a vă putea recupera parola",
"Language" => "Limba",
-"Help translating" => "Ajută la traducere",
+"Help translate" => "Ajutați la traducere",
"use this address to connect to your ownCloud in your file manager" => "folosește această adresă pentru a te conecta la managerul tău de fișiere din ownCloud",
"Name" => "Nume",
"Password" => "Parola",
"Groups" => "Grupuri",
"Create" => "Crează",
+"Quota" => "Quota",
"Delete" => "Șterge"
);
diff --git a/settings/l10n/ru.php b/settings/l10n/ru.php
index 96ca95e583f..a8faeb780f8 100644
--- a/settings/l10n/ru.php
+++ b/settings/l10n/ru.php
@@ -1,7 +1,6 @@
<?php $TRANSLATIONS = array(
-"Authentication error" => "Ошибка аутентификации",
-"OpenID Changed" => "OpenID был изменён",
"Invalid request" => "Неверный запрос",
+"OpenID Changed" => "OpenID был изменён",
"Language changed" => "Язык изменён",
"Add your application" => "Добавить ваше приложение",
"Select an App" => "Выберите приложение",
@@ -20,7 +19,6 @@
"show" => "показать",
"Change password" => "Сменить пароль",
"Language" => "Язык",
-"Help translating" => "Помощь с переводом",
"use this address to connect to your ownCloud in your file manager" => "используйте данный адрес для подключения к ownCloud в вашем файловом менеджере",
"Name" => "Имя",
"Password" => "Пароль",
diff --git a/settings/l10n/sk_SK.php b/settings/l10n/sk_SK.php
new file mode 100644
index 00000000000..08424ab24c8
--- /dev/null
+++ b/settings/l10n/sk_SK.php
@@ -0,0 +1,28 @@
+<?php $TRANSLATIONS = array(
+"Invalid request" => "Neplatná požiadavka",
+"OpenID Changed" => "OpenID zmenené",
+"Language changed" => "Jazyk zmenený",
+"Add your application" => "Pridajte svoju aplikáciu",
+"Select an App" => "Vyberte Aplikáciu",
+"-licensed" => "-licencované",
+"by" => "od",
+"Ask a question" => "Opýtajte sa otázku",
+"Problems connecting to help database." => "Problémy spojené s pomocnou databázou.",
+"Go there manually." => "Prejsť tam ručne.",
+"Answer" => "Odpoveď",
+"You use" => "Používate",
+"of the available" => "z dostupných",
+"Your password got changed" => "Vaše heslo sa zmenilo",
+"Unable to change your password" => "Nedokážem zmeniť vaše heslo",
+"Current password" => "Aktuálne heslo",
+"New password" => "Nové heslo",
+"show" => "zobraziť",
+"Change password" => "Zmeniť heslo",
+"Language" => "Jazyk",
+"use this address to connect to your ownCloud in your file manager" => "použite túto adresu pre spojenie s vaším ownCloud v správcovi súborov",
+"Name" => "Meno",
+"Password" => "Heslo",
+"Groups" => "Skupiny",
+"Create" => "Vytvoriť",
+"Delete" => "Odstrániť"
+);
diff --git a/settings/l10n/sl.php b/settings/l10n/sl.php
new file mode 100644
index 00000000000..9cd2d99fe3b
--- /dev/null
+++ b/settings/l10n/sl.php
@@ -0,0 +1,28 @@
+<?php $TRANSLATIONS = array(
+"Invalid request" => "Neveljavna zahteva",
+"OpenID Changed" => "OpenID spremenjen",
+"Language changed" => "Jezik je bil spremenjen",
+"Add your application" => "Dodaj vašo aplikacijo",
+"Select an App" => "Izberi aplikacijo",
+"-licensed" => "-licenca",
+"by" => "od",
+"Ask a question" => "Vprašaj",
+"Problems connecting to help database." => "Težave pri povezovanju z zbirko podatkov.",
+"Go there manually." => "Pojdi tja ročno.",
+"Answer" => "Odgovor",
+"You use" => "Uporabljate",
+"of the available" => "od narazpolago",
+"Your password got changed" => "Vaše geslo je bilo spremenjeno.",
+"Unable to change your password" => "Vašega geslo ni bilo mogoče spremeniti.",
+"Current password" => "Trenutno Geslo",
+"New password" => "Novo geslo",
+"show" => "prikaži",
+"Change password" => "Spremeni Geslo",
+"Language" => "Jezik",
+"use this address to connect to your ownCloud in your file manager" => "uporabi ta naslov za povezavo k \"mojoblak\" v vašem urejevalniku datotek",
+"Name" => "Ime",
+"Password" => "Geslo",
+"Groups" => "Skupine",
+"Create" => "Ustvari",
+"Delete" => "Izbriši"
+);
diff --git a/settings/l10n/sr.php b/settings/l10n/sr.php
index 33bd039a2fc..ea61815a619 100644
--- a/settings/l10n/sr.php
+++ b/settings/l10n/sr.php
@@ -1,7 +1,6 @@
<?php $TRANSLATIONS = array(
-"Authentication error" => "Грешка аутентификације",
-"OpenID Changed" => "OpenID је измењен",
"Invalid request" => "Неисправан захтев",
+"OpenID Changed" => "OpenID је измењен",
"Language changed" => "Језик је измењен",
"Add your application" => "Додајте свој програм",
"Select an App" => "Изаберите програм",
@@ -20,7 +19,6 @@
"show" => "прикажи",
"Change password" => "Измени лозинку",
"Language" => "Језик",
-"Help translating" => "Помозите у превођењу",
"use this address to connect to your ownCloud in your file manager" => "користите ову адресу да би се повезали на ownCloud путем менаџњера фајлова",
"Name" => "Име",
"Password" => "Лозинка",
diff --git a/settings/l10n/sr@latin.php b/settings/l10n/sr@latin.php
index 4787dd3fa71..ba3572802f3 100644
--- a/settings/l10n/sr@latin.php
+++ b/settings/l10n/sr@latin.php
@@ -1,7 +1,6 @@
<?php $TRANSLATIONS = array(
-"Authentication error" => "Greška autentifikacije",
-"OpenID Changed" => "OpenID je izmenjen",
"Invalid request" => "Neispravan zahtev",
+"OpenID Changed" => "OpenID je izmenjen",
"Language changed" => "Jezik je izmenjen",
"Add your application" => "Dodajte svoj program",
"Select an App" => "Izaberite program",
@@ -20,7 +19,6 @@
"show" => "prikaži",
"Change password" => "Izmeni lozinku",
"Language" => "Jezik",
-"Help translating" => "Pomozite u prevođenju",
"use this address to connect to your ownCloud in your file manager" => "koristite ovu adresu da bi se povezali na ownCloud putem menadžnjera fajlova",
"Name" => "Ime",
"Password" => "Lozinka",
diff --git a/settings/l10n/sv.php b/settings/l10n/sv.php
index 13ccd3826e3..7a39a1a9437 100644
--- a/settings/l10n/sv.php
+++ b/settings/l10n/sv.php
@@ -1,7 +1,6 @@
<?php $TRANSLATIONS = array(
-"Authentication error" => "Autentiseringsfel",
-"OpenID Changed" => "OpenID ändrat",
"Invalid request" => "Ogiltig begäran",
+"OpenID Changed" => "OpenID ändrat",
"Language changed" => "Språk ändrades",
"Add your application" => "Lägg till din applikation",
"Select an App" => "Välj en App",
@@ -20,8 +19,7 @@
"show" => "visa",
"Change password" => "Ändra lösenord",
"Language" => "Språk",
-"Help translating" => "Hjälp till att översätta",
-"use this address to connect to your ownCloud in your file manager" => "använd denna adress för att ansluta till ditt ownCloud i din filhanterare",
+"use this address to connect to your ownCloud in your file manager" => "använd denna adress för att ansluta ownCloud till din filhanterare",
"Name" => "Namn",
"Password" => "Lösenord",
"Groups" => "Grupper",
diff --git a/settings/l10n/tr.php b/settings/l10n/tr.php
new file mode 100644
index 00000000000..7d6b25612f2
--- /dev/null
+++ b/settings/l10n/tr.php
@@ -0,0 +1,28 @@
+<?php $TRANSLATIONS = array(
+"Invalid request" => "Geçersiz istek",
+"OpenID Changed" => "OpenID Değiştirildi",
+"Language changed" => "Dil değiştirildi",
+"Add your application" => "Uygulamanızı ekleyin",
+"Select an App" => "Bir uygulama seçin",
+"-licensed" => "-lisanslı",
+"by" => "yapan",
+"Ask a question" => "Bir soru sorun",
+"Problems connecting to help database." => "Yardım veritabanına bağlanmada sorunlar var.",
+"Go there manually." => "Oraya elle gidin.",
+"Answer" => "Cevap",
+"You use" => "Kullanıyorsunuz",
+"of the available" => "mevcut olandan",
+"Your password got changed" => "Parolanız değiştirildi",
+"Unable to change your password" => "Parolanız değiştirilemiyor",
+"Current password" => "Mevcut parola",
+"New password" => "Yeni parola",
+"show" => "göster",
+"Change password" => "Parola değiştir",
+"Language" => "Dil",
+"use this address to connect to your ownCloud in your file manager" => "bu adresi kullanarak ownCloud unuza dosya yöneticinizle bağlanın",
+"Name" => "Ad",
+"Password" => "Parola",
+"Groups" => "Gruplar",
+"Create" => "Oluştur",
+"Delete" => "Sil"
+);
diff --git a/settings/l10n/zh_CN.php b/settings/l10n/zh_CN.php
index dc9ffeafe7b..22ffce3b57e 100644
--- a/settings/l10n/zh_CN.php
+++ b/settings/l10n/zh_CN.php
@@ -1,7 +1,6 @@
<?php $TRANSLATIONS = array(
-"Authentication error" => "验证错误",
-"OpenID Changed" => "OpenID 已修改",
"Invalid request" => "非法请求",
+"OpenID Changed" => "OpenID 已修改",
"Language changed" => "语言已修改",
"Add your application" => "加入您的应用程序",
"Select an App" => "选择一个应用",
@@ -20,7 +19,6 @@
"show" => "显示",
"Change password" => "修改密码",
"Language" => "语言",
-"Help translating" => "帮助翻译",
"use this address to connect to your ownCloud in your file manager" => "在文件管理器中使用这个地址来连接到您的 ownCloud",
"Name" => "名称",
"Password" => "密码",
diff --git a/settings/personal.php b/settings/personal.php
index c7964a2ef5a..47cb2366f67 100644..100755
--- a/settings/personal.php
+++ b/settings/personal.php
@@ -29,10 +29,18 @@ $languageCodes=OC_L10N::findAvailableLanguages();
//put the current language in the front
unset($languageCodes[array_search($lang,$languageCodes)]);
array_unshift($languageCodes,$lang);
+
$languageNames=include 'languageCodes.php';
$languages=array();
foreach($languageCodes as $lang){
- $languages[]=array('code'=>$lang,'name'=>$languageNames[$lang]);
+ $l=new OC_L10N('settings',$lang);
+ if($l->t('__language_name__')!='__language_name__'){//first check if the language name is in the translation file
+ $languages[]=array('code'=>$lang,'name'=>$l->t('__language_name__'));
+ }elseif(isset($languageNames[$lang])){
+ $languages[]=array('code'=>$lang,'name'=>$languageNames[$lang]);
+ }else{//fallback to language code
+ $languages[]=array('code'=>$lang,'name'=>$lang);
+ }
}
// Return template